diff --git a/.gitignore b/.gitignore index 8ff398e4548be..0a6d6c8408981 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,8 @@ logg.txt bindist/ cataclysmdda-* objwin/ -version.h +src/version.h +lua/catabindings.cpp CataclysmWin.cscope_file_list CataclysmWin.depend CataclysmWin.layout @@ -40,3 +41,6 @@ Thumbs.db core tags cscope.* + +# Compiled binary translations +lang/mo/ diff --git a/COMPILING_osx.md b/COMPILING_osx.md index b6c9ab11a1e2c..e8523672157b2 100644 --- a/COMPILING_osx.md +++ b/COMPILING_osx.md @@ -1,15 +1,13 @@ # Building Cataclysm-DDA on Mac OS X -Tested with OS X 10.8.4, Xcode 4.6.2. -I haven't played it extensively but it builds and runs. +To build Cataclysm on Mac you'll have to get XCode with command line tools (or just download them separately from https://developer.apple.com/downloads/) and Homebrew package manager. -Not sure if it compiles with older OS/XCode versions. -This worked for me, your mileage may vary. ### SDL SDL, SDL\_image, and SDL\_ttf are needed for the tiles build. +Option (1): [**SDL framework**](http://www.libsdl.org/download-1.2.php) http://www.libsdl.org/release/SDL-1.2.15.dmg @@ -22,10 +20,14 @@ http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.dmg Copy `SDL.framework`, `SDL_image.framework`, and `SDL_ttf.framework` to `/Library/Frameworks` or `/Users/name/Library/Frameworks`. +Option (2): Alternately, shared libraries (libsdl, libsdl\_image, libsdl\_ttf) can be used instead of frameworks. Install with a package manager (Fink, MacPorts, Homebrew, pkgsrc) or build and install from source. +For Homebrew: +`brew install sdl sdl_image sdl_ttf` + ### ncurses, gettext ncurses and gettext are needed for localization. @@ -33,20 +35,12 @@ Install with a package manager, or build from source and install. * ncurses needs wide character support enabled. -## Build - -From the Cataclysm-DDA source folder: - -The easiest way to try it out is the console version without localization: - - $ make NATIVE=osx LOCALIZED=0 OSX_MIN=10.6 +For Homebrew: +`brew tap homebrew/dupes` +`brew install gettext ncurses` +`brew link --force gettext ncurses` -For localization support and/or to use libsdl (not frameworks): - - $ export CXXFLAGS="-I/path/to/include" LDFLAGS="-L/path/to/lib" - -This adds paths to find shared libraries outside of /usr and /usr/local. -Multiple `-I/...` or `-L/...` paths can be specified. + * After you build Cataclysm remember to unlink gettext and ncurses with `brew unlink gettext ncurses` if you build other software, it might conflict with OSX versions. ### Example builds: @@ -54,10 +48,20 @@ Build a release version with SDL graphical tiles: $ make FRAMEWORK=1 NATIVE=osx OSX_MIN=10.6 RELEASE=1 TILES=1 LOCALIZE=0 +Build SDL version with shared libraries: + + $ make NATIVE=osx OSX_MIN=10.6 RELEASE=1 TILES=1 LOCALIZE=0 + +Build a release console version without localization: + + $ make NATIVE=osx OSX_MIN=10.6 RELEASE=1 LOCALIZE=0 + Build a debug version with SDL ASCII: $ make FRAMEWORK=1 NATIVE=osx OSX_MIN=10.6 SDL=1 LOCALIZE=0 + + ## Run $ ./cataclysm @@ -81,3 +85,53 @@ or `SDL=1` build the SDL version with ASCII characters. `TILES=1` build the SDL version with graphical tiles. + +### Application bundle packaging: + +Create new folder and name it `Cataclysm.app`. + +Put compiled binaries (`./cataclysm-tiles` and/or `./cataclysm`) with `./gfx/` and `./data/` folders inside `/Cataclysm.app/Contents/Resources/`. + +To bundle SDL libs copy `SDL.framework`, `SDL_image.framework`, and `SDL_ttf.framework` to `/Cataclysm.app/Contents/Resources/libs/` or shared libs homebrew installed from `/usr/local/Cellar/sdl*/version/lib/`. + +Create folder `/Cataclysm.app/Contents/MacOS` and file ./Cataclysm within it with this content: + +#!/bin/sh +PWD=`dirname "${0}"` +OSREV=`uname -r | cut -d. -f1` +if [ "$OSREV" -ge 11 ] ; then + export DYLD_LIBRARY_PATH=${PWD}/../Resources/libs + export DYLD_FRAMEWORK_PATH=${PWD}/../Resources/libs +else + export DYLD_FALLBACK_LIBRARY_PATH=${PWD}/../Resources/libs + export DYLD_FALLBACK_FRAMEWORK_PATH=${PWD}/../Resources/libs +fi +cd "${PWD}/../Resources/"; ./cataclysm-tiles + + +### Creating a DMG +Create an new folder named Cataclysm + +Move your Cataclysm.app into it + +Start Disk Utility + +File / New -> Disk Image From Folder + +Select the Cataclysm folder you created above. + +Done! + + +# Troubleshooting + +ISSUE: crash on startup due to libint.8.dylib aborting + +Basically if you're compiling on Mountain Lion or above, it won't be possible to run successfully on older OS X versions due to libint.8 / pthreads version issue. + +See below (quoted form https://wiki.gnome.org/GTK+/OSX/Building) + +"There's another issue with building on Lion or Mountain Lion using either "native" or the 10.7 SDK: Apple has updated the pthreads implementation to provide recursive locking. This would be good except that Gettext's libintl uses this and if the pthreads implementation doesn't provide it it fabricates its own. Since the Lion pthreads does provide it, libintl links the provided function and then crashes when you try to run it against an older version of the library. The simplest solution is to specify the 10.6 SDK when building on Lion, but that won't work on Mountain Lion, which doesn't include it. See below for how to install and use XCode 3 on Lion and later for building applications compatible with earlier versions of OSX." + +Workaround: install XCode 3 like that article describes, or disable localization support in Cataclysm so gettext/libint are not dependencies. Or else simply don't support OS X versions below 10.7. + diff --git a/CataclysmWin.cbp b/CataclysmWin.cbp index eac983cb55f9b..00650c76f4aa3 100644 --- a/CataclysmWin.cbp +++ b/CataclysmWin.cbp @@ -8,7 +8,7 @@ @@ -177,229 +177,232 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + diff --git a/Makefile b/Makefile index 621164b7d3cd4..6d38ae6a25a69 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,8 @@ # Compile localization files for specified languages # make LANGUAGES="[ lang_id_2][ ...]" # (for example: make LANGUAGES="zh_CN zh_TW" for Chinese) +# Enable lua debug support +# make LUA=1 # comment these to toggle them as one sees fit. # DEBUG is best turned on if you plan to debug in gdb -- please do! @@ -54,7 +56,7 @@ DEBUG = -g #DEFINES += -DDEBUG_ENABLE_MAP_GEN #DEFINES += -DDEBUG_ENABLE_GAME -VERSION = 0.8 +VERSION = 0.9 TARGET = cataclysm @@ -63,6 +65,8 @@ W32TILESTARGET = cataclysm-tiles.exe W32TARGET = cataclysm.exe BINDIST_DIR = bindist BUILD_DIR = $(CURDIR) +SRC_DIR = src +LUA_DIR = lua LOCALIZE = 1 # tiles object directories are because gcc gets confused @@ -168,6 +172,26 @@ ifeq ($(TARGETSYSTEM),WINDOWS) RFLAGS = -J rc -O coff endif +ifdef LUA + ifeq ($(TARGETSYSTEM),WINDOWS) + # Windows expects to have lua unpacked at a specific location + LDFLAGS += -llua + else + # On unix-like systems, use pkg-config to find lua + LDFLAGS += $(shell pkg-config --silence-errors --libs lua5.1) + CXXFLAGS += $(shell pkg-config --silence-errors --cflags lua5.1) + LDFLAGS += $(shell pkg-config --silence-errors --libs lua-5.1) + CXXFLAGS += $(shell pkg-config --silence-errors --cflags lua-5.1) + LDFLAGS += $(shell pkg-config --silence-errors --libs lua) + CXXFLAGS += $(shell pkg-config --silence-errors --cflags lua) + endif + + CXXFLAGS += -DLUA + LUA_DEPENDENCIES = $(LUA_DIR)/catabindings.cpp + BINDIST_EXTRAS += $(LUA_DIR)/autoexec.lua + BINDIST_EXTRAS += $(LUA_DIR)/class_definitions.lua +endif + ifdef TILES SDL = 1 BINDIST_EXTRAS += gfx @@ -248,12 +272,12 @@ ifeq ($(TARGETSYSTEM),LINUX) BINDIST_EXTRAS += cataclysm-launcher endif -SOURCES = $(wildcard *.cpp) -HEADERS = $(wildcard *.h) -_OBJS = $(SOURCES:.cpp=.o) +SOURCES = $(wildcard $(SRC_DIR)/*.cpp) +HEADERS = $(wildcard $(SRC_DIR)/*.h) +_OBJS = $(SOURCES:$(SRC_DIR)/%.cpp=%.o) ifeq ($(TARGETSYSTEM),WINDOWS) - RSRC = $(wildcard *.rc) - _OBJS += $(RSRC:.rc=.o) + RSRC = $(wildcard $(SRC_DIR)/*.rc) + _OBJS += $(RSRC:$(SRC_DIR)/%.rc=%.o) endif OBJS = $(patsubst %,$(ODIR)/%,$(_OBJS)) @@ -279,8 +303,8 @@ $(TARGET): $(ODIR) $(DDIR) $(OBJS) version: @( VERSION_STRING=$(VERSION) ; \ [ -e ".git" ] && GITVERSION=$$( git describe --tags --always --dirty --match "[0-9]*.[0-9]*" ) && VERSION_STRING=$$GITVERSION ; \ - [ -e "version.h" ] && OLDVERSION=$$(grep VERSION version.h|cut -d '"' -f2) ; \ - if [ "x$$VERSION_STRING" != "x$$OLDVERSION" ]; then echo "#define VERSION \"$$VERSION_STRING\"" | tee version.h ; fi \ + [ -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 \ ) $(ODIR): @@ -289,17 +313,22 @@ $(ODIR): $(DDIR): @mkdir $(DDIR) -$(ODIR)/%.o: %.cpp +$(ODIR)/%.o: $(SRC_DIR)/%.cpp $(CXX) $(DEFINES) $(CXXFLAGS) -c $< -o $@ -$(ODIR)/%.o: %.rc +$(ODIR)/%.o: $(SRC_DIR)/%.rc $(RC) $(RFLAGS) $< -o $@ -$(ODIR)/SDLMain.o: SDLMain.m +$(ODIR)/SDLMain.o: $(SRC_DIR)/SDLMain.m $(CC) -c $(OSX_INC) $< -o $@ version.cpp: version +$(LUA_DIR)/catabindings.cpp: $(LUA_DIR)/class_definitions.lua $(LUA_DIR)/generate_bindings.lua + cd $(LUA_DIR) && lua generate_bindings.lua + +$(SRC_DIR)/catalua.cpp: $(LUA_DEPENDENCIES) + localization: lang/compile_mo.sh $(LANGUAGES) @@ -307,7 +336,7 @@ clean: clean-tests rm -rf $(TARGET) $(TILESTARGET) $(W32TILESTARGET) $(W32TARGET) rm -rf $(ODIR) $(W32ODIR) $(W32ODIRTILES) rm -rf $(BINDIST) $(W32BINDIST) $(BINDIST_DIR) - rm -f version.h + rm -f $(SRC_DIR)/version.h $(LUA_DIR)/catabindings.cpp distclean: rm -rf $(BINDIST_DIR) @@ -344,5 +373,5 @@ clean-tests: .PHONY: tests check ctags etags clean-tests --include $(SOURCES:%.cpp=$(DEPDIR)/%.P) +-include $(SOURCES:$(SRC_DIR)/%.cpp=$(DEPDIR)/%.P) -include ${OBJS:.o=.d} diff --git a/artifact.h b/artifact.h deleted file mode 100644 index d040ccdd98fcf..0000000000000 --- a/artifact.h +++ /dev/null @@ -1,148 +0,0 @@ -#ifndef _ARTIFACT_H_ -#define _ARTIFACT_H_ - -#include -#include - -enum art_effect_passive { - AEP_NULL = 0, -// Good - AEP_STR_UP, // Strength + 4 - AEP_DEX_UP, // Dexterity + 4 - AEP_PER_UP, // Perception + 4 - AEP_INT_UP, // Intelligence + 4 - AEP_ALL_UP, // All stats + 2 - AEP_SPEED_UP, // +20 speed - AEP_IODINE, // Reduces radiation - AEP_SNAKES, // Summons friendly snakes when you're hit - AEP_INVISIBLE, // Makes you invisible - AEP_CLAIRVOYANCE, // See through walls - AEP_SUPER_CLAIRVOYANCE, // See through walls to a great distance - AEP_STEALTH, // Your steps are quieted - AEP_EXTINGUISH, // May extinguish nearby flames - AEP_GLOW, // Four-tile light source - AEP_PSYSHIELD, // Protection from stare attacks - AEP_RESIST_ELECTRICITY, // Protection from electricity - AEP_CARRY_MORE, // Increases carrying capacity by 200 - AEP_SAP_LIFE, // Killing non-zombie monsters may heal you -// Splits good from bad - AEP_SPLIT, -// Bad - AEP_HUNGER, // Increases hunger - AEP_THIRST, // Increases thirst - AEP_SMOKE, // Emits smoke occasionally - AEP_EVIL, // Addiction to the power - AEP_SCHIZO, // Mimicks schizophrenia - AEP_RADIOACTIVE, // Increases your radiation - AEP_MUTAGENIC, // Mutates you slowly - AEP_ATTENTION, // Draws netherworld attention slowly - AEP_STR_DOWN, // Strength - 3 - AEP_DEX_DOWN, // Dex - 3 - AEP_PER_DOWN, // Per - 3 - AEP_INT_DOWN, // Int - 3 - AEP_ALL_DOWN, // All stats - 2 - AEP_SPEED_DOWN, // -20 speed - AEP_FORCE_TELEPORT, // Occasionally force a teleport - AEP_MOVEMENT_NOISE, // Makes noise when you move - AEP_BAD_WEATHER, // More likely to experience bad weather - AEP_SICK, // Decreases health - - NUM_AEPS -}; - -enum art_effect_active { - AEA_NULL = 0, - - AEA_STORM, // Emits shock fields - AEA_FIREBALL, // Targeted - AEA_ADRENALINE, // Adrenaline rush - AEA_MAP, // Maps the area around you - AEA_BLOOD, // Shoots blood all over - AEA_FATIGUE, // Creates interdimensional fatigue - AEA_ACIDBALL, // Targeted acid - AEA_PULSE, // Destroys adjacent terrain - AEA_HEAL, // Heals minor damage - AEA_CONFUSED, // Confuses all monsters in view - AEA_ENTRANCE, // Chance to make nearby monsters friendly - AEA_BUGS, // Chance to summon friendly insects - AEA_TELEPORT, // Teleports you - AEA_LIGHT, // Temporary light source - AEA_GROWTH, // Grow plants, a la triffid queen - AEA_HURTALL, // Hurts all monsters! - - AEA_SPLIT, // Split between good and bad - - AEA_RADIATION, // Spew radioactive gas - AEA_PAIN, // Increases player pain - AEA_MUTATE, // Chance of mutation - AEA_PARALYZE, // You lose several turns - AEA_FIRESTORM, // Spreads minor fire all around you - AEA_ATTENTION, // Attention from sub-prime denizens - AEA_TELEGLOW, // Teleglow disease - AEA_NOISE, // Loud noise - AEA_SCREAM, // Noise & morale penalty - AEA_DIM, // Darkens the sky slowly - AEA_FLASH, // Flashbang - AEA_VOMIT, // User vomits - AEA_SHADOWS, // Summon shadow creatures - - NUM_AEAS -}; - -enum art_charge -{ - ARTC_NULL, // Never recharges! - ARTC_TIME, // Very slowly recharges with time - ARTC_SOLAR, // Recharges in sunlight - ARTC_PAIN, // Creates pain to recharge - ARTC_HP, // Drains HP to recharge - NUM_ARTCS -}; - -enum artifact_natural_shape -{ - ARTSHAPE_NULL, - ARTSHAPE_SPHERE, - ARTSHAPE_ROD, - ARTSHAPE_TEARDROP, - ARTSHAPE_LAMP, - ARTSHAPE_SNAKE, - ARTSHAPE_DISC, - ARTSHAPE_BEADS, - ARTSHAPE_NAPKIN, - ARTSHAPE_URCHIN, - ARTSHAPE_JELLY, - ARTSHAPE_SPIRAL, - ARTSHAPE_PIN, - ARTSHAPE_TUBE, - ARTSHAPE_PYRAMID, - ARTSHAPE_CRYSTAL, - ARTSHAPE_KNOT, - ARTSHAPE_CRESCENT, - ARTSHAPE_MAX -}; - -enum artifact_natural_property -{ - ARTPROP_NULL, - ARTPROP_WRIGGLING, // - ARTPROP_GLOWING, // - ARTPROP_HUMMING, // - ARTPROP_MOVING, // - ARTPROP_WHISPERING, // - ARTPROP_BREATHING, // - ARTPROP_DEAD, // - ARTPROP_ITCHY, // - ARTPROP_GLITTERING, // - ARTPROP_ELECTRIC, // - ARTPROP_SLIMY, // - ARTPROP_ENGRAVED, // - ARTPROP_CRACKLING, // - ARTPROP_WARM, // - ARTPROP_RATTLING, // - ARTPROP_SCALED, - ARTPROP_FRACTAL, - ARTPROP_MAX -}; - -#endif diff --git a/artifactdata.h b/artifactdata.h deleted file mode 100644 index 8742dacd3abf3..0000000000000 --- a/artifactdata.h +++ /dev/null @@ -1,142 +0,0 @@ -#ifndef _ARTIFACTDATA_H_ -#define _ARTIFACTDATA_H_ - -#include -#include "artifact.h" -#include "itype.h" - -extern int passive_effect_cost[NUM_AEPS]; - -extern int active_effect_cost[NUM_AEAS]; - - -struct artifact_shape_datum -{ - std::string name; - std::string desc; - int volume_min, volume_max; - int weight_min, weight_max; -}; - -extern artifact_shape_datum artifact_shape_data[ARTSHAPE_MAX]; - -struct artifact_property_datum -{ - std::string name; - std::string desc; - art_effect_passive passive_good[4]; - art_effect_passive passive_bad[4]; - art_effect_active active_good[4]; - art_effect_active active_bad[4]; -}; - -extern artifact_property_datum artifact_property_data[ARTPROP_MAX]; - -enum artifact_weapon_type -{ - ARTWEAP_NULL, - ARTWEAP_BULK, // A bulky item that works okay for bashing - ARTWEAP_CLUB, // An item designed to bash - ARTWEAP_SPEAR, // A stab-only weapon - ARTWEAP_SWORD, // A long slasher - ARTWEAP_KNIFE, // Short, slash and stab - NUM_ARTWEAPS -}; - -struct artifact_tool_form_datum -{ - std::string name; - char sym; - nc_color color; - std::string m1; - std::string m2; - int volume_min, volume_max; - int weight_min, weight_max; - artifact_weapon_type base_weapon; - artifact_weapon_type extra_weapons[3]; -}; - -enum artifact_tool_form -{ - ARTTOOLFORM_NULL, - ARTTOOLFORM_HARP, - ARTTOOLFORM_STAFF, - ARTTOOLFORM_SWORD, - ARTTOOLFORM_KNIFE, - ARTTOOLFORM_CUBE, - NUM_ARTTOOLFORMS -}; - -extern artifact_tool_form_datum artifact_tool_form_data[NUM_ARTTOOLFORMS]; - -struct artifact_weapon_datum -{ - std::string adjective; - int volume, weight; // Only applicable if this is an *extra* weapon - int bash_min, bash_max; - int cut_min, cut_max; - int to_hit_min, to_hit_max; - std::string tag; -}; - -extern artifact_weapon_datum artifact_weapon_data[NUM_ARTWEAPS]; - -enum artifact_armor_mod -{ - ARMORMOD_NULL, - ARMORMOD_LIGHT, - ARMORMOD_BULKY, - ARMORMOD_POCKETED, - ARMORMOD_FURRED, - ARMORMOD_PADDED, - ARMORMOD_PLATED, - NUM_ARMORMODS -}; - -struct artifact_armor_form_datum -{ - std::string name; - nc_color color; - std::string m1; - std::string m2; - int volume, weight; - int encumb; - int coverage; - int thickness; - int env_resist; - int warmth; - int storage; - int melee_bash, melee_cut, melee_hit; - unsigned char covers; - bool plural; - artifact_armor_mod available_mods[5]; -}; - -enum artifact_armor_form -{ - ARTARMFORM_NULL, - ARTARMFORM_ROBE, - ARTARMFORM_COAT, - ARTARMFORM_MASK, - ARTARMFORM_HELM, - ARTARMFORM_GLOVES, - ARTARMFORM_BOOTS, - ARTARMFORM_RING, - NUM_ARTARMFORMS -}; - -extern artifact_armor_form_datum artifact_armor_form_data[NUM_ARTARMFORMS]; - -/* Armor mods alter the normal values of armor. - * If the basic armor type has "null" as its second material, and the mod has a - * material attached, the second material will be changed. - */ -extern artifact_armor_form_datum artifact_armor_mod_data[NUM_ARMORMODS]; - -#define NUM_ART_ADJS 20 -extern std::string artifact_adj[NUM_ART_ADJS]; - -#define NUM_ART_NOUNS 20 -extern std::string artifact_noun[NUM_ART_NOUNS]; - -#endif diff --git a/data/changelog.txt b/data/changelog.txt index 7a79c4206c600..03fdee5f726b3 100644 --- a/data/changelog.txt +++ b/data/changelog.txt @@ -1,7 +1,18 @@ 0.9 +Highlights: +--- +World Factory: Multiple worlds managed at once. +New mutation categories. +TsuTiles. +Basic mouse support in SDL builds. +Vehicle constructon system rework. +Backward compatability with 0.8 saves. +Unbielievable amount of new content. + Features: --- +New mutation categories. Blob drops are semi-useful. World Factory: Multiple worlds managed at once. Single keypress pulping. diff --git a/data/credits b/data/credits index 76381e1ffe745..e7c4666b87549 100644 --- a/data/credits +++ b/data/credits @@ -2,15 +2,16 @@ # Max length of a line is 68 characters; the following line is for reference #################################################################### Original author: Project Manager: Website/Forum: -Whales (retired) Kevingranade GlyphGryph +Whales (retired) KevinGranade GlyphGryph Current Main Developers/Github Managers: -Kevingranade, GalenEvil, i2amroy, AtomicDryad, Ozone +KevinGranade, GalenEvil, i2amroy, AtomicDryad, Ianestrachan Special thanks to: TheDarklingWolf - For creating Cataclysm:DDA as we know it Narc - For setting up the automatic Jenkins build-bot yobbobanana - For working as liason between translators and github +Angela 'Rivet' Graves, Constant Creator of Cataclysmic Content For a full list of contributors please see: https://github.com/CleverRaven/Cataclysm-DDA/contributors diff --git a/data/json/bionics.json b/data/json/bionics.json index 2f57197c0518c..d323a225ed8e0 100644 --- a/data/json/bionics.json +++ b/data/json/bionics.json @@ -1,588 +1,536 @@ [ -{ - "type" : "bionic", - "id" : "bio_null", + { + "type" : "bionic", + "id" : "bio_null", "name" : "NULL bionics", "description": "If you're seeing this, it's a bug. (game::init_bionics)" -}, -{ - "type" : "bionic", - "id" : "bio_power_storage", + },{ + "type" : "bionic", + "id" : "bio_power_storage", "name" : "Power Storage", "description": "Compact Bionics Module that upgrades your power capacity by 4 units. Having at least one of these is a prerequisite to using powered bionics. You will also need a power supply, found in another CBM." -}, -{ - "type" : "bionic", - "id" : "bio_power_storage_mkII", + },{ + "type" : "bionic", + "id" : "bio_power_storage_mkII", "name" : "Power Storage Mk. II", "description": "Compact Bionics Module developed at DoubleTech Industries as a replacement for the highly successful CBM: Power Storage. Increases your power capacity by 10 units." -}, -{ - "type" : "bionic", - "id" : "bio_batteries", + },{ + "type" : "bionic", + "id" : "bio_batteries", "name" : "Battery System", "power_source" : true, "description": "You have a battery draining attachment, and thus can make use of the energy contained in normal, everyday batteries. Use 'E' to consume batteries." -}, -{ - "type" : "bionic", - "id" : "bio_metabolics", + },{ + "type" : "bionic", + "id" : "bio_metabolics", "name" : "Metabolic Interchange", "power_source" : true, "active" : true, "time" : 100, "description": "Your digestive system and power supply are interconnected. Any drain on energy instead increases your hunger." -}, -{ - "type" : "bionic", - "id" : "bio_solar", + },{ + "type" : "bionic", + "id" : "bio_solar", "name" : "Solar Panels", "power_source" : true, "description": "You have a few solar panels installed. While in direct sunlight, your power level will slowly recharge." -}, -{ - "type" : "bionic", - "id" : "bio_torsionratchet", + },{ + "type" : "bionic", + "id" : "bio_torsionratchet", "name" : "Joint Torsion Ratchet", "power_source" : true, "description": "Your joints have been equipped with torsion ratchets that generate power slowly when you move." -}, -{ - "type" : "bionic", - "id" : "bio_furnace", + },{ + "type" : "bionic", + "id" : "bio_furnace", "name" : "Internal Furnace", "power_source" : true, "description": "You can burn nearly any organic material as fuel (use 'E'), recharging your power level. Some materials will burn better than others." -}, -{ - "type" : "bionic", - "id" : "bio_ethanol", + },{ + "type" : "bionic", + "id" : "bio_ethanol", "name" : "Ethanol Burner", "power_source" : true, "description": "You burn alcohol as fuel in an extremely efficient reaction. However, you will still suffer the inebriating effects of the substance." -}, -{ - "type" : "bionic", - "id" : "bio_memory", + },{ + "type" : "bionic", + "id" : "bio_memory", "name" : "Enhanced Memory Banks", "cost" : 1, "description": "Your memory has been enhanced with small quantum storage drives. Any time you start to forget a skill, you have a chance at retaining all knowledge, at the cost of a small amount of power." -}, -{ - "type" : "bionic", - "id" : "bio_ears", + },{ + "type" : "bionic", + "id" : "bio_ears", "name" : "Enhanced Hearing", "description": "Your hearing has been drastically improved, allowing you to hear ten times better than the average person. Additionally, high-intensity sounds will be automatically dampened before they can damage your hearing." -}, -{ - "type" : "bionic", - "id" : "bio_eye_enhancer", + },{ + "type" : "bionic", + "id" : "bio_eye_enhancer", "name" : "Diamond Cornea", "description": "Your vision is greatly enhanced, giving you a +2 bonus to perception." -}, -{ - "type" : "bionic", - "id" : "bio_dex_enhancer", + },{ + "type" : "bionic", + "id" : "bio_dex_enhancer", "name" : "Wired Reflexes", "description": "Your reaction time has been greatly enhanced with bionic nerve stimulators, giving you a +2 bonus to dexterity." -}, -{ - "type" : "bionic", - "id" : "bio_str_enhancer", + },{ + "type" : "bionic", + "id" : "bio_str_enhancer", "name" : "Muscle Augmentation", "description": "Your muscular system has been enhanced with myomer fibers, giving you a +2 bonus to strength." -}, -{ - "type" : "bionic", - "id" : "bio_int_enhancer", + },{ + "type" : "bionic", + "id" : "bio_int_enhancer", "name" : "Cerebral Booster", "description": "Your brain has been enhanced with bionic coprocessors, giving you a +2 bonus to intelligence." -}, -{ - "type" : "bionic", - "id" : "bio_membrane", + },{ + "type" : "bionic", + "id" : "bio_membrane", "name" : "Nictating Membrane", "description": "Your eyes have a thin membrane that closes over your eyes while underwater, negating any vision penalties." -}, -{ - "type" : "bionic", - "id" : "bio_sunglasses", + },{ + "type" : "bionic", + "id" : "bio_sunglasses", "name" : "Transition lenses", "cost" : 0, "time" : 0, "description": "Your eyes have quick-reacting transition lenses installed over them, negating any glare penalties and partially protecting you from bright flashes." -}, -{ - "type" : "bionic", - "id" : "bio_targeting", + },{ + "type" : "bionic", + "id" : "bio_targeting", "name" : "Targeting System", "description": "Your eyes are equipped with range finders, and their movement is synced with that of your arms, to a degree. Shots you fire will be much more accurate, particularly at long range." -}, -{ - "type" : "bionic", - "id" : "bio_gills", + },{ + "type" : "bionic", + "id" : "bio_gills", "name" : "Membrane Oxygenator", "cost" : 1, "description": "An oxygen interchange system automatically switches on while underwater, slowly draining your energy reserves but providing oxygen." -}, -{ - "type" : "bionic", - "id" : "bio_purifier", + },{ + "type" : "bionic", + "id" : "bio_purifier", "name" : "Air Filtration System", "cost" : 0, "time" : 0, "description": "Implanted in your trachea is an advanced filtration system. If toxins find their way into your windpipe, the filter will attempt to remove them." -}, -{ - "type" : "bionic", - "id" : "bio_climate", + },{ + "type" : "bionic", + "id" : "bio_climate", "name" : "Internal Climate Control", "active" : true, "cost" : 1, "time" : 30, "description": "Throughout your body lies a network of thermal piping which eases the effects of high and low ambient temperatures." -}, -{ - "type" : "bionic", - "id" : "bio_storage", + },{ + "type" : "bionic", + "id" : "bio_storage", "name" : "Internal Storage", "description": "Space inside your chest cavity has been converted into a storage area. You may carry an extra 8 units of volume." -}, -{ - "type" : "bionic", - "id" : "bio_recycler", + },{ + "type" : "bionic", + "id" : "bio_recycler", "name" : "Recycler Unit", "description": "Your digestive system has been outfitted with a series of filters and processors, allowing you to reclaim waste liquid and, to a lesser degree, nutrients. The net effect is a greatly reduced need to eat and drink." -}, -{ - "type" : "bionic", - "id" : "bio_digestion", + },{ + "type" : "bionic", + "id" : "bio_digestion", "name" : "Expanded Digestive System", "description": "You have been outfitted with three synthetic stomachs and industrial-grade intestines. Not only can you extract much more nutrition from food, but you are highly resistant to foodborne illness, and can sometimes eat rotten food." -}, -{ - "type" : "bionic", - "id" : "bio_tools", + },{ + "type" : "bionic", + "id" : "bio_tools", "name" : "Integrated Toolset", "description": "Implanted in your hands and fingers is a complete tool set - screwdriver, hammer, wrench, and heating elements. You can use this in place of many tools when crafting." -}, -{ - "type" : "bionic", - "id" : "bio_shock", + },{ + "type" : "bionic", + "id" : "bio_shock", "name" : "Electroshock Unit", "active" : true, "time" : 1, "description": "While fighting unarmed, or with a weapon that conducts electricity, there is a chance that a successful hit will shock your opponent, inflicting extra damage and disabling them temporarily at the cost of some energy." -}, -{ - "type" : "bionic", - "id" : "bio_heat_absorb", + },{ + "type" : "bionic", + "id" : "bio_heat_absorb", "name" : "Heat Drain", "active" : true, "time" : 1, "description": "While fighting unarmed against a warm-blooded opponent, there is a chance that a successful hit will drain body heat, inflicting a small amount of extra damage, and increasing your power reserves slightly." -}, -{ - "type" : "bionic", - "id" : "bio_carbon", + },{ + "type" : "bionic", + "id" : "bio_carbon", "name" : "Subdermal Carbon Filament", "description": "Lying just beneath your skin is a thin armor made of carbon nanotubes. This reduces bashing damage by 2 and cutting damage by 4." -}, -{ - "type" : "bionic", - "id" : "bio_armor_head", + },{ + "type" : "bionic", + "id" : "bio_armor_head", "name" : "Alloy Plating - Head", "description": "The flesh on your head has been replaced by a strong armor, protecting both your head and jaw regions." -}, -{ - "type" : "bionic", - "id" : "bio_armor_torso", + },{ + "type" : "bionic", + "id" : "bio_armor_torso", "name" : "Alloy Plating - Torso", "description": "The flesh on your torso has been replaced by a strong armor, protecting you greatly." -}, -{ - "type" : "bionic", - "id" : "bio_armor_arms", + },{ + "type" : "bionic", + "id" : "bio_armor_arms", "name" : "Alloy Plating - Arms", "description": "The flesh on your arms has been replaced by a strong armor, protecting you greatly." -}, -{ - "type" : "bionic", - "id" : "bio_armor_legs", + },{ + "type" : "bionic", + "id" : "bio_armor_legs", "name" : "Alloy Plating - Legs", "description": "The flesh on your legs has been replaced by a strong armor, protecting you greatly." -}, -{ - "type" : "bionic", - "id" : "bio_flashlight", + },{ + "type" : "bionic", + "id" : "bio_armor_eyes", + "name" : "Protective Lenses", + "description": "Your eye sockets have been sealed with highly protective mirrored lenses and your tear ducts have been re-routed to your mouth. When you cry, you must spit out or swallow your tears." + },{ + "type" : "bionic", + "id" : "bio_flashlight", "name" : "Cranial Flashlight", "active" : true, "cost" : 1, "time" : 30, "description": "Mounted between your eyes is a small but powerful LED flashlight." -}, -{ - "type" : "bionic", - "id" : "bio_night_vision", + },{ + "type" : "bionic", + "id" : "bio_night_vision", "name" : "Implanted Night Vision", "active" : true, "cost" : 1, "time" : 20, "description": "Your eyes have been modified to amplify existing light, allowing you to see in the dark." -}, -{ - "type" : "bionic", - "id" : "bio_infrared", + },{ + "type" : "bionic", + "id" : "bio_infrared", "name" : "Infrared Vision", "active" : true, "cost" : 1, "time" : 4, "description": "Your range of vision extends into the infrared, allowing you to see warm-blooded creatures in the dark, and even through walls." -}, -{ - "type" : "bionic", - "id" : "bio_face_mask", + },{ + "type" : "bionic", + "id" : "bio_face_mask", "name" : "Facial Distortion", "active" : true, "cost" : 1, "time" : 10, "description": "Your face is actually made of a compound which may be molded by electrical impulses, making you impossible to recognize. While not powered, however, the compound reverts to its default shape." -}, -{ - "type" : "bionic", - "id" : "bio_ads", + },{ + "type" : "bionic", + "id" : "bio_ads", "name" : "Active Defense System", "active" : true, "cost" : 1, "time" : 7, "description": "A thin forcefield surrounds your body, continually draining power. Anything attempting to penetrate this field has a chance of being deflected at the cost of more energy. Melee attacks will be stopped more often than bullets." -}, -{ - "type" : "bionic", - "id" : "bio_ods", + },{ + "type" : "bionic", + "id" : "bio_ods", "name" : "Offensive Defense System", "active" : true, "cost" : 1, "time" : 6, "description": "A thin forcefield surrounds your body, continually draining power. This field does not deflect penetration, but rather delivers a very strong shock, damaging unarmed attackers and those with a conductive weapon." -}, -{ - "type" : "bionic", - "id" : "bio_scent_mask", + },{ + "type" : "bionic", + "id" : "bio_scent_mask", "name" : "Olfactory Mask", "active" : true, "cost" : 1, "time" : 8, "description": "While this system is powered, your body will produce very little odor, making it nearly impossible for creatures to track you by scent." -}, -{ - "type" : "bionic", - "id" : "bio_scent_vision", + },{ + "type" : "bionic", + "id" : "bio_scent_vision", "name" : "Scent Vision", "active" : true, "cost" : 1, "time" : 30, "description": "While this system is powered, you're able to visually sense your own scent, making it possible for you to recognize your surroundings even if you can't see it." -}, -{ - "type" : "bionic", - "id" : "bio_cloak", + },{ + "type" : "bionic", + "id" : "bio_cloak", "name" : "Cloaking System", "active" : true, "cost" : 2, "time" : 1, "description": "This high-power system uses a set of cameras and LEDs to make you blend into your background, rendering you fully invisible to normal vision. However, you may be detected by infrared, sonar, etc." -}, -{ - "type" : "bionic", - "id" : "bio_painkiller", + },{ + "type" : "bionic", + "id" : "bio_painkiller", "name" : "Sensory Dulling", "active" : true, "cost" : 2, "description": "Your nervous system is wired to allow you to inhibit the signals of pain, allowing you to dull your senses at will. However, the use of this system may cause delayed reaction time and drowsiness." -}, -{ - "type" : "bionic", - "id" : "bio_nanobots", + },{ + "type" : "bionic", + "id" : "bio_nanobots", "name" : "Repair Nanobots", "active" : true, "cost" : 5, "description": "Inside your body is a fleet of tiny dormant robots. Once charged from your energy banks, they will flit about your body, repairing damage and stopping bleeding." -}, -{ - "type" : "bionic", - "id" : "bio_heatsink", + },{ + "type" : "bionic", + "id" : "bio_heatsink", "name" : "Thermal Dissipation", "active" : true, "cost" : 1, "time" : 6, "description": "Powerful heatsinks and supermaterials are woven into your flesh. While powered, this system will prevent heat damage up to 2000 degrees fahrenheit. Note that this does not affect your internal temperature." -}, -{ - "type" : "bionic", - "id" : "bio_resonator", + },{ + "type" : "bionic", + "id" : "bio_resonator", "name" : "Sonic Resonator", "active" : true, "cost" : 4, "description": "Your entire body may resonate at very high power, creating a short-range shockwave. While it will not do much damage to flexible creatures, stiff items such as walls, doors, and even robots will be severely damaged." -}, -{ - "type" : "bionic", - "id" : "bio_time_freeze", + },{ + "type" : "bionic", + "id" : "bio_time_freeze", "name" : "Time Dilation", "active" : true, "cost" : 3, "description": "At an immense cost of power, you may increase your body speed and reactions dramatically, essentially freezing time. You are still delicate, however, and violent or rapid movements may damage you due to friction." -}, -{ - "type" : "bionic", - "id" : "bio_teleport", + },{ + "type" : "bionic", + "id" : "bio_teleport", "name" : "Teleportation Unit", "active" : true, "cost" : 10, "description": "This highly experimental unit folds space over short distances, instantly transporting your body up to 25 feet at the cost of much power. Note that prolonged or frequent use may have dangerous side effects." -}, -{ - "type" : "bionic", - "id" : "bio_blood_anal", + },{ + "type" : "bionic", + "id" : "bio_blood_anal", "name" : "Blood Analysis", "active" : true, "cost" : 1, "description": "Small sensors have been implanted in your heart, allowing you to analyse your blood. This will detect many illnesses, drugs, and other conditions." -}, -{ - "type" : "bionic", - "id" : "bio_blood_filter", + },{ + "type" : "bionic", + "id" : "bio_geiger", + "name" : "Integrated Dosimeter", + "active" : true, + "cost" : 1, + "description": "Small radiation sensors have been implanted throughout your body, allowing you to analyse your level of absorbed radiation." + },{ + "type" : "bionic", + "id" : "bio_radscrubber", + "name" : "Radiation Scrubber System", + "active" : true, + "cost" : 2, + "description": "A system of advanced piezomechanical blood filters have been implanted throughout your body, allowing you to purge yourself of absorbed radiation at the cost of some bionic power." + },{ + "type" : "bionic", + "id" : "bio_blood_filter", "name" : "Blood Filter", "active" : true, "cost" : 3, "description": "A filtration system in your heart allows you to actively filter out chemical impurities, primarily drugs. It will have limited impact on viruses. Note that it is not a targeted filter; ALL drugs in your system will be affected." -}, -{ - "type" : "bionic", - "id" : "bio_alarm", + },{ + "type" : "bionic", + "id" : "bio_alarm", "name" : "Alarm System", "active" : true, "cost" : 1, "time" : 400, "description": "A motion-detecting alarm system will notice almost all movement within a fifteen-foot radius, and will silently alert you. This is very useful during sleep, or if you suspect a cloaked pursuer." -}, -{ - "type" : "bionic", - "id" : "bio_evap", + },{ + "type" : "bionic", + "id" : "bio_evap", "name" : "Aero-Evaporator", "active" : true, "cost" : 8, "description": "This unit draws moisture from the surrounding air, which then is poured from a fingertip in the form of water. It may fail in very dry environments." -}, -{ - "type" : "bionic", - "id" : "bio_lighter", + },{ + "type" : "bionic", + "id" : "bio_lighter", "name" : "Mini-Flamethrower", "active" : true, "cost" : 3, "description": "The index fingers of both hands have powerful fire starters which extend from the tip." -}, -{ - "type" : "bionic", - "id" : "bio_claws", + },{ + "type" : "bionic", + "id" : "bio_claws", "name" : "Adamantium Claws", "active" : true, "cost" : 3, "description": "Your fingers can withdraw into your hands, allowing a set of vicious claws to extend. These do considerable cutting damage, but prevent you from holding anything else." -}, -{ - "type" : "bionic", - "id" : "bio_blaster", + },{ + "type" : "bionic", + "id" : "bio_razors", + "name" : "Fingertip Razors", + "description": "You possess razor-sharp retractable claws underneath your fingernails, ten double-edged blades four centimeters in length that do a small amount of unarmed slashing damage whenever your fingertips are uncovered." + },{ + "type" : "bionic", + "id" : "bio_blaster", "name" : "Fusion Blaster Arm", "active" : true, "cost" : 2, "description": "Your left arm has been replaced by a heavy-duty fusion blaster! You may use your energy banks to fire a damaging heat ray; however, you are unable to use or carry two-handed items, and may only fire handguns." -}, -{ - "type" : "bionic", - "id" : "bio_laser", + },{ + "type" : "bionic", + "id" : "bio_laser", "name" : "Finger-Mounted Laser", "active" : true, "cost" : 2, "description": "One of your fingers has a small high-powered laser embedded in it. This long range weapon is not incredibly damaging, but is very accurate, and has the potential to start fires." -}, -{ - "type" : "bionic", - "id" : "bio_emp", + },{ + "type" : "bionic", + "id" : "bio_emp", "name" : "Directional EMP", "active" : true, "cost" : 4, "description": "Mounted in the palms of your hand are small parabolic EMP field generators. You may use power to fire a short-ranged blast which will disable electronics and robots." -}, -{ - "type" : "bionic", - "id" : "bio_hydraulics", + },{ + "type" : "bionic", + "id" : "bio_hydraulics", "name" : "Hydraulic Muscles", "active" : true, "cost" : 1, "time" : 3, "description": "While activated, the muscles in your arms will be greatly enhanced, increasing your strength by 20." -}, -{ - "type" : "bionic", - "id" : "bio_water_extractor", + },{ + "type" : "bionic", + "id" : "bio_water_extractor", "name" : "Water Extraction Unit", "active" : true, "cost" : 2, "description": "Nanotubes embedded in the palm of your hand will pump any available fluid out of a dead body, cleanse it of impurities and convert it into drinkable water. You must, however, have a container to store the water in." -}, -{ - "type" : "bionic", - "id" : "bio_magnet", + },{ + "type" : "bionic", + "id" : "bio_magnet", "name" : "Electromagnetic Unit", "active" : true, "cost" : 2, "description": "Embedded in your hand is a powerful electromagnet, allowing you to pull items made of iron over short distances." -}, -{ - "type" : "bionic", - "id" : "bio_fingerhack", + },{ + "type" : "bionic", + "id" : "bio_fingerhack", "name" : "Fingerhack", "active" : true, "cost" : 1, "description": "One of your fingers has an electrohack embedded in it; an all-purpose hacking unit used to override control panels and the like (but not computers). Skill in computers is important, and a failed use may damage your circuits." -}, -{ - "type" : "bionic", - "id" : "bio_lockpick", + },{ + "type" : "bionic", + "id" : "bio_lockpick", "name" : "Fingerpick", "active" : true, "cost" : 1, "description": "One of your fingers has an electronic lockpick embedded in it. This automatic system will quickly unlock all but the most advanced key locks without any skill required on the part of the user." -}, -{ - "type" : "bionic", - "id" : "bio_ground_sonar", + },{ + "type" : "bionic", + "id" : "bio_ground_sonar", "name" : "Terranian Sonar", "active" : true, "cost" : 1, "time" : 5, "description": "Your feet are equipped with precision sonar equipment, allowing you to detect the movements of creatures below the ground." -}, -{ - "type" : "bionic", - "id" : "bio_power_armor_interface", + },{ + "type" : "bionic", + "id" : "bio_power_armor_interface", "name" : "Power Armor Interface", "active" : true, "cost" : 1, "time" : 10, "description": "Interfaces your power system with the internal charging port on suits of power armor." -}, -{ - "type" : "bionic", - "id" : "bio_power_armor_interface_mkII", + },{ + "type" : "bionic", + "id" : "bio_power_armor_interface_mkII", "name" : "Power Armor Interface Mk. II", "active" : true, "cost" : 1, "time" : 50, "description": "Interfaces your power system with the internal charging port on suits of power armor. The Mk. II was designed by DoubleTech Inc., to meet the popularity of the Mk. II power armor series." -}, -{ - "type" : "bionic", - "id" : "bio_flashbang", + },{ + "type" : "bionic", + "id" : "bio_flashbang", "name" : "Flashbang Generator", "active" : true, "cost" : 5, "description": "Light emitting diodes integrated into your skin can release a flash comparable to a flashbang grenade, blinding nearby enemies. Speakers integrated into your body mimic the loud sound, deafening those nearby." -}, -{ - "type" : "bionic", - "id" : "bio_railgun", + },{ + "type" : "bionic", + "id" : "bio_railgun", "name" : "Railgun", "active" : true, "cost" : 1, "time" : 100, "description": "EM field generators in your arms double the range and damage of thrown iron and steel objects at a cost of 1 power per throw, causing them to leave a trail of electricity that can cause additional damage." -}, -{ - "type" : "bionic", - "id" : "bio_probability_travel", + },{ + "type" : "bionic", + "id" : "bio_probability_travel", "name" : "Probability Travel", "active" : true, "cost" : 1, "time" : 100, "description": "Increases your body's wavelength, allowing you to quantum tunnel through walls, reappearing on the other side. Power drain in standby is minimal, but each tile tunneled through costs 10 bionic power." -}, -{ - "type" : "bionic", - "id" : "bio_shockwave", + },{ + "type" : "bionic", + "id" : "bio_shockwave", "name" : "Shockwave Generator", "active" : true, "cost" : 10, "description": "You generate a powerful shockwave, knocking back all nearby creatures. Targets are stunned briefly, take damage and additional stun upon impact with impassable terrain, and knockback any creatures they collide with." -}, -{ - "type" : "bionic", - "id" : "bio_chain_lightning", + },{ + "type" : "bionic", + "id" : "bio_chain_lightning", "name" : "Chain Lightning", "active" : true, "cost" : 5, "description": "Your body is equipped with a chain lightning generator, allowing you to emit a blast of lightning at a target, leaving a trail of lightning in its wake, jumping to additional targets within 4 tiles of the previous target." -}, -{ - "type" : "bionic", - "id" : "bio_night", + },{ + "type" : "bionic", + "id" : "bio_night", "name" : "Artificial Night Generator", "active" : true, "cost" : 1, "time" : 2, "description": "Destructive interference eliminates all light within a 15 tile radius." -}, -{ - "type" : "bionic", - "id" : "bio_uncanny_dodge", + },{ + "type" : "bionic", + "id" : "bio_uncanny_dodge", "name" : "Uncanny Dodge", "active" : true, "cost" : 1, "time" : 10, "description": "Your nervous system has been augmented with bionic processors, allowing you to dodge attacks beyond normal human capability, including bullets." -}, -{ - "type" : "bionic", - "id" : "bio_dis_shock", + },{ + "type" : "bionic", + "id" : "bio_dis_shock", "name" : "Electrical Discharge", "faulty" : true, "description": "A malfunctioning bionic which occasionally discharges electricity through your body, causing pain and brief paralysis but no damage." -}, -{ - "type" : "bionic", - "id" : "bio_dis_acid", + },{ + "type" : "bionic", + "id" : "bio_dis_acid", "name" : "Acidic Discharge", "faulty" : true, "description": "A malfunctioning bionic which occasionally discharges acid into your muscles, causing sharp pain and minor damage." -}, -{ - "type" : "bionic", - "id" : "bio_drain", + },{ + "type" : "bionic", + "id" : "bio_drain", "name" : "Electrical Drain", "faulty" : true, "description": "A malfunctioning bionic. It doesn't perform any useful function, but will occasionally draw power from your batteries." -}, -{ - "type" : "bionic", - "id" : "bio_noise", + },{ + "type" : "bionic", + "id" : "bio_noise", "name" : "Noisemaker", "faulty" : true, "description": "A malfunctioning bionic. It will occasionally emit a loud burst of noise." -}, -{ - "type" : "bionic", - "id" : "bio_power_weakness", + },{ + "type" : "bionic", + "id" : "bio_power_weakness", "name" : "Power Overload", "faulty" : true, "description": "Damaged power circuits cause short-circuiting inside your muscles when your batteries are above 75%%%% capacity, causing greatly reduced strength. This has no effect if you have no internal batteries." -}, -{ - "type" : "bionic", - "id" : "bio_stiff", + },{ + "type" : "bionic", + "id" : "bio_stiff", "name" : "Wire-induced Stiffness", "faulty" : true, "description": "Improperly installed wires cause a physical stiffness in most of your body, causing increased encumbrance." -} + } ] diff --git a/data/json/doll_speech.json b/data/json/doll_speech.json new file mode 100644 index 0000000000000..ed62017de15c3 --- /dev/null +++ b/data/json/doll_speech.json @@ -0,0 +1,163 @@ +[ + { + "type" : "speech", + "speaker" : "doll", + "sound" : "Wanna play with me?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Sing with me!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "I love you!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Please take me with you!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "May I have a cookie?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Let's play together!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Time to play!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Om nom nom! Delicious!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Are you my mommy?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Oh, how fun!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "You're my best friend!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Heehee!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Let's have fun!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "Let's have a tea party!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "doll", + "sound" : "You're the best!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "You shouldn't have done that.", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Let's play... Russian roulette.", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "I hate you.", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Go kill yourself!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Big Brother is watching you...", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Die for me!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Why won't you die?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Blood... Delicious.", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "See you... IN HELL!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "AAAIEEEEEEE!!!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "FUCK YOU!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "What did you do with my Mommy?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Stay with me... forever!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Hey kids. Want some candy?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Down here, they ALL float!", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "Do you really need that much honey?", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "creepy_doll", + "sound" : "My previous owner squealed like a pig when I gutted her!", + "volume" : 10 + } +] \ No newline at end of file diff --git a/data/json/dreams.json b/data/json/dreams.json index 0100813fb4b35..da43c189314da 100644 --- a/data/json/dreams.json +++ b/data/json/dreams.json @@ -7,6 +7,14 @@ ], "category" : "MUTCAT_LIZARD", "strength" : 1 + },{ + "type" : "dream", + "messages" : [ + "You have a strange dream about being a patient in a frightening hospital.", + "Your dreams give you an oddly medicated feeling." + ], + "category" : "MUTCAT_MEDICAL", + "strength" : 1 },{ "type" : "dream", "messages" : [ @@ -95,6 +103,38 @@ ], "category" : "MUTCAT_RAT", "strength" : 1 + },{ + "type" : "dream", + "messages" : [ + "You have a strange dream.", + "You feel...OK." + ], + "category" : "MUTCAT_ALPHA", + "strength" : 1 + },{ + "type" : "dream", + "messages" : [ + "You have a strange dream.", + "You feel a yearning..." + ], + "category" : "MUTCAT_ELFA", + "strength" : 1 + },{ + "type" : "dream", + "messages" : [ + "You dream about the zoo, for some reason.", + "Your dreams...are complex and multifaceted." + ], + "category" : "MUTCAT_CHIMERA", + "strength" : 1 + },{ + "type" : "dream", + "messages" : [ + "You dream of the tropics.", + "You feel warm." + ], + "category" : "MUTCAT_RAPTOR", + "strength" : 1 },{ "type" : "dream", "messages" : [ @@ -103,6 +143,14 @@ ], "category" : "MUTCAT_LIZARD", "strength" : 2 + },{ + "type" : "dream", + "messages" : [ + "You have a disturbing dream of undergoing strange medical procedures.", + "While dreaming, you see yourself dressed in a hospital gown, receiving treatment." + ], + "category" : "MUTCAT_MEDICAL", + "strength" : 2 },{ "type" : "dream", "messages" : [ @@ -192,6 +240,38 @@ "category" : "MUTCAT_RAT", "strength" : 2 },{ + "type" : "dream", + "messages" : [ + "You dream of having that success you knew you deserved, back before all this.", + "Your dream-self looks competent and in control." + ], + "category" : "MUTCAT_ALPHA", + "strength" : 2 + },{ + "type" : "dream", + "messages" : [ + "You dream of a home in the forests.", + "You feel beautiful, and yet riven with worry..." + ], + "category" : "MUTCAT_ELFA", + "strength" : 2 + },{ + "type" : "dream", + "messages" : [ + "You can't quite work out what the dream is about...it just keeps changing.", + "Your dream is filled with creatures, and yet all seem like you." + ], + "category" : "MUTCAT_CHIMERA", + "strength" : 2 + },{ + "type" : "dream", + "messages" : [ + "You dream of stalking some sort of lizard...no, that can't be right, can it?", + "For some reason you dream of your shoes. They don't fit, and nothing seems to help..." + ], + "category" : "MUTCAT_RAPTOR", + "strength" : 2 + },{ "type" : "dream", "messages" : [ "You are terrified by a dream of becoming a lizard hybrid.", @@ -199,6 +279,14 @@ ], "category" : "MUTCAT_LIZARD", "strength" : 3 + },{ + "type" : "dream", + "messages" : [ + "You have a dream of doctors and nurses doing unnatural things to your body, which brings you perverse pleasure.", + "You have a vivid dream of being a medical anomaly, as your heartbeat syncs with the steady drip of an IV line." + ], + "category" : "MUTCAT_MEDICAL", + "strength" : 3 },{ "type" : "dream", "messages" : [ @@ -287,5 +375,37 @@ ], "category" : "MUTCAT_RAT", "strength" : 3 - } + },{ + "type" : "dream", + "messages" : [ + "You see yourself, five years from now, as the leader of a successful city.", + "Your success in restoring civilization was only a dream. For now." + ], + "category" : "MUTCAT_ALPHA", + "strength" : 3 + },{ + "type" : "dream", + "messages" : [ + "NO! You will not allow this corruption to prevail!", + "You see yourself reflected in the beauty of the forest." + ], + "category" : "MUTCAT_ELFA", + "strength" : 3 + },{ + "type" : "dream", + "messages" : [ + "You are many animals, and yet one.", + "Hoof. Talon. Tooth. Fight. Feed. Forward." + ], + "category" : "MUTCAT_CHIMERA", + "strength" : 3 + },{ + "type" : "dream", + "messages" : [ + "You've never felt so lithe and powerful.", + "After an exciting and tasty hunt, you retire to your nest. Mmm, yes, nest." + ], + "category" : "MUTCAT_RAPTOR", + "strength" : 3 + } ] diff --git a/data/json/furniture.json b/data/json/furniture.json index 615f6fd64bd85..52cff9c1f9457 100644 --- a/data/json/furniture.json +++ b/data/json/furniture.json @@ -1,27 +1,25 @@ [ { "type": "furniture", - "id": "f_null", + "id" : "f_null", "name": "nothing", "symbol": " ", "color": "white", "move_cost_mod": 0, "required_str": -1, "flags": ["TRANSPARENT"] - }, - { - "type": "furniture", - "id": "f_hay", + },{ + "type" : "furniture", + "id" : "f_hay", "name": "hay", "symbol": "#", "bgcolor": "brown", "move_cost_mod": 3, "required_str": 6, "flags": ["TRANSPARENT", "CONTAINER", "FLAMMABLE_ASH", "ORGANIC"] - }, - { - "type": "furniture", - "id": "f_bulletin", + },{ + "type" : "furniture", + "id" : "f_bulletin", "name": "bulletin board", "symbol": "6", "color": "blue", @@ -39,30 +37,35 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_indoor_plant", + },{ + "type" : "furniture", + "id" : "f_indoor_plant", "name": "indoor plant", "symbol": "^", "color": "green", "move_cost_mod": 2, "required_str": 5, - "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "ORGANIC"] - }, - { - "type": "furniture", - "id": "f_bed", + "flags": ["CONTAINER", "BASHABLE", "FLAMMABLE_ASH", "PLACE_ITEM", "ORGANIC"], + "bash": { + "str_min": 2, "str_max": 30, + "sound": "smash!", + "sound_fail": "whump.", + "items": [ + { "item": "withered", "amount": 1, "minamount": 0 } + ] + } + },{ + "type" : "furniture", + "id" : "f_bed", "name": "bed", "symbol": "#", "color": "magenta", "move_cost_mod": 3, "required_str": -1, "flags": ["TRANSPARENT", "CONTAINER", "FLAMMABLE_ASH", "DECONSTRUCT", "PLACE_ITEM", "ORGANIC"] - }, - { - "type": "furniture", - "id": "f_toilet", + },{ + "type" : "furniture", + "id" : "f_toilet", "name": "toilet", "symbol": "&", "color": "white", @@ -79,20 +82,18 @@ { "item": "cu_pipe", "amount": 1, "minamount": 0 } ] } - }, - { - "type": "furniture", - "id": "f_makeshift_bed", + },{ + "type" : "furniture", + "id" : "f_makeshift_bed", "name": "makeshift bed", "symbol": "#", "color": "magenta", "move_cost_mod": 3, "required_str": 12, "flags": ["TRANSPARENT", "BASHABLE", "FLAMMABLE_ASH", "DECONSTRUCT", "ORGANIC"] - }, - { - "type": "furniture", - "id": "f_sink", + },{ + "type" : "furniture", + "id" : "f_sink", "name": "sink", "symbol": "&", "color": "white", @@ -108,10 +109,9 @@ { "item": "cu_pipe", "amount": 1, "minamount": 0 } ] } - }, - { - "type": "furniture", - "id": "f_oven", + },{ + "type" : "furniture", + "id" : "f_oven", "name": "oven", "symbol": "#", "color": "dkgray", @@ -131,30 +131,27 @@ { "item": "pilot_light", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_woodstove", + },{ + "type" : "furniture", + "id" : "f_woodstove", "name": "wood stove", "symbol": "#", "bgcolor": "red", "move_cost_mod": 2, "required_str": 10, "flags": ["TRANSPARENT", "CONTAINER", "FIRE_CONTAINER", "SUPPRESS_SMOKE", "PLACE_ITEM"] - }, - { - "type": "furniture", - "id": "f_fireplace", + },{ + "type" : "furniture", + "id" : "f_fireplace", "name": "fireplace", "symbol": "#", "bgcolor": "white", "move_cost_mod": 2, "required_str": -1, "flags": ["TRANSPARENT", "CONTAINER", "FIRE_CONTAINER", "SUPPRESS_SMOKE", "PLACE_ITEM"] - }, - { - "type": "furniture", - "id": "f_bathtub", + },{ + "type" : "furniture", + "id" : "f_bathtub", "name": "bathtub", "symbol": "~", "color": "white", @@ -170,10 +167,9 @@ { "item": "cu_pipe", "amount": 1, "minamount": 0 } ] } - }, - { - "type": "furniture", - "id": "f_chair", + },{ + "type" : "furniture", + "id" : "f_chair", "name": "chair", "symbol": "#", "color": "brown", @@ -190,30 +186,27 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_armchair", + },{ + "type" : "furniture", + "id" : "f_armchair", "name": "arm chair", "symbol": "H", "color": "green", "move_cost_mod": 1, "required_str": 7, "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "DECONSTRUCT", "ORGANIC"] - }, - { - "type": "furniture", - "id": "f_sofa", + },{ + "type" : "furniture", + "id" : "f_sofa", "name": "sofa", "symbol": "H", "bgcolor": "red", "move_cost_mod": 1, "required_str": 10, "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "DECONSTRUCT", "ORGANIC", "BLOCKSDOOR"] - }, - { - "type": "furniture", - "id": "f_cupboard", + },{ + "type" : "furniture", + "id" : "f_cupboard", "name": "cupboard", "symbol": "#", "color": "blue", @@ -230,20 +223,26 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_trashcan", + },{ + "type" : "furniture", + "id" : "f_trashcan", "name": "trash can", "symbol": "&", "color": "ltcyan", "move_cost_mod": 1, "required_str": 5, - "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM"] - }, - { - "type": "furniture", - "id": "f_desk", + "flags": ["TRANSPARENT", "BASHABLE", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM"], + "bash": { + "str_min": 2, "str_max": 30, + "sound": "smash!", + "sound_fail": "whump.", + "items": [ + { "item": "plastic_chunk", "amount": 2, "minamount": 1 } + ] + } + },{ + "type" : "furniture", + "id" : "f_desk", "name": "desk", "symbol": "#", "color": "ltred", @@ -260,20 +259,28 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_exercise", + },{ + "type" : "furniture", + "id" : "f_exercise", "name": "exercise machine", "symbol": "T", "color": "dkgray", "move_cost_mod": 1, "required_str": 8, - "flags": ["TRANSPARENT", "DECONSTRUCT"] - }, - { - "type": "furniture", - "id": "f_bench", + "flags": ["TRANSPARENT", "DECONSTRUCT", "BASHABLE"], + "bash": { + "str_min": 3, "str_max": 45, + "sound": "metal screeching!", + "sound_fail": "clang!", + "items": [ + { "item": "scrap", "amount": 6, "minamount": 2}, + { "item": "steel_chunk", "amount": 1, "minamount": 0}, + { "item": "pipe", "amount": 1 } + ] + } + },{ + "type" : "furniture", + "id" : "f_bench", "name": "bench", "symbol": "#", "color": "brown", @@ -290,15 +297,14 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_table", + },{ + "type" : "furniture", + "id" : "f_table", "name": "table", "symbol": "#", "color": "red", "move_cost_mod": 2, - "required_str": 9, + "required_str": 8, "flags": ["TRANSPARENT", "FLAMMABLE", "DECONSTRUCT", "ORGANIC"], "bash": { "str_min": 3, "str_max": 45, @@ -310,10 +316,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_pool_table", + },{ + "type" : "furniture", + "id" : "f_pool_table", "name": "pool table", "symbol": "#", "color": "green", @@ -330,10 +335,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_counter", + },{ + "type" : "furniture", + "id" : "f_counter", "name": "counter", "symbol": "#", "color": "blue", @@ -350,10 +354,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_fridge", + },{ + "type" : "furniture", + "id" : "f_fridge", "name": "refrigerator", "symbol": "{", "color": "ltcyan", @@ -371,10 +374,9 @@ { "item": "cu_pipe", "amount": 5, "minamount": 2 } ] } - }, - { - "type": "furniture", - "id": "f_glass_fridge", + },{ + "type" : "furniture", + "id" : "f_glass_fridge", "name": "glass door fridge", "symbol": "{", "color": "ltcyan", @@ -392,10 +394,9 @@ { "item": "cu_pipe", "amount": 5, "minamount": 2 } ] } - }, - { - "type": "furniture", - "id": "f_dresser", + },{ + "type" : "furniture", + "id" : "f_dresser", "name": "dresser", "symbol": "{", "color": "brown", @@ -412,10 +413,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_locker", + },{ + "type" : "furniture", + "id" : "f_locker", "name": "locker", "symbol": "{", "color": "ltgray", @@ -432,10 +432,9 @@ { "item": "pipe", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_rack", + },{ + "type" : "furniture", + "id" : "f_rack", "name": "display rack", "symbol": "{", "color": "ltgray", @@ -452,16 +451,15 @@ { "item": "pipe", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_bookcase", + },{ + "type" : "furniture", + "id" : "f_bookcase", "name": "book case", "symbol": "{", "color": "brown", "move_cost_mod": -1, "required_str": 9, - "flags": ["FLAMMABLE", "BASHABLE", "DECONSTRUCT", "PLACE_ITEM", "ORGANIC", "BLOCKSDOR"], + "flags": ["FLAMMABLE", "BASHABLE", "DECONSTRUCT", "PLACE_ITEM", "ORGANIC", "BLOCKSDOOR"], "bash": { "str_min": 3, "str_max": 45, "sound": "smash!", @@ -472,50 +470,77 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "furniture", - "id": "f_washer", + },{ + "type" : "furniture", + "id" : "f_washer", "name": "washing machine", "symbol": "{", "bgcolor": "white", "move_cost_mod": -1, "required_str": 16, - "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "BLOCKSDOOR"] - }, - { - "type": "furniture", - "id": "f_dryer", + "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "BLOCKSDOOR"], + "bash": { + "str_min": 3, "str_max": 45, + "sound": "metal screeching!", + "sound_fail": "clang!", + "items": [ + { "item": "scrap", "amount": 7, "minamount": 2}, + { "item": "steel_chunk", "amount": 3, "minamount": 0}, + { "item": "hose", "amount": 2, "minamount": 0}, + { "item": "cu_pipe", "amount": 5, "minamount": 2 } + ] + } + },{ + "type" : "furniture", + "id" : "f_dryer", "name": "dryer", "symbol": "{", "bgcolor": "white", "move_cost_mod": -1, "required_str": 16, - "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "BLOCKSDOOR"] - }, - { - "type": "furniture", - "id": "f_dumpster", + "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "BLOCKSDOOR"], + "bash": { + "str_min": 3, "str_max": 45, + "sound": "metal screeching!", + "sound_fail": "clang!", + "items": [ + { "item": "scrap", "amount": 7, "minamount": 2}, + { "item": "steel_chunk", "amount": 3, "minamount": 0}, + { "item": "hose", "amount": 2, "minamount": 0}, + { "item": "cu_pipe", "amount": 5, "minamount": 2 } + ] + } + },{ + "type" : "furniture", + "id" : "f_dumpster", "name": "dumpster", "symbol": "{", "color": "green", "move_cost_mod": -1, "required_str": 16, - "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "BLOCKSDOOR"] - }, - { - "type": "furniture", - "id": "f_dive_block", + "flags": ["CONTAINER", "BASHABLE", "PLACE_ITEM", "BLOCKSDOOR"], + "bash": { + "str_min": 3, "str_max": 45, + "sound": "metal screeching!", + "sound_fail": "clang!", + "items": [ + { "item": "scrap", "amount": 8, "minamount": 2}, + { "item": "steel_chunk", "amount": 3, "minamount": 1}, + { "item": "pipe", "amount": 2, "minamount": 1 } + ] + } + },{ + "type" : "furniture", + "id" : "f_dive_block", "name": "diving block", "symbol": "O", "color": "ltgray", "move_cost_mod": -1, "required_str": 16, "flags": ["TRANSPARENT"] - }, - { - "type": "furniture", - "id": "f_crate_c", + },{ + "type" : "furniture", + "id" : "f_crate_c", "name": "crate", "symbol": "X", "bgcolor": "brown", @@ -531,16 +556,15 @@ { "item": "nail", "amount": 10, "minamount": 2 } ] } - }, - { - "type": "furniture", - "id": "f_crate_o", + },{ + "type" : "furniture", + "id" : "f_crate_o", "name": "open crate", "symbol": "O", "bgcolor": "brown", "move_cost_mod": -1, "required_str": 12, - "flags": ["TRANSPARENT", "BASHABLE", "CONTAINER", "FLAMMABLE", "PLACE_ITEM", "ORGANIC"], + "flags": ["TRANSPARENT", "BASHABLE", "CONTAINER", "FLAMMABLE", "DECONSTRUCT", "PLACE_ITEM", "ORGANIC"], "bash": { "str_min": 1, "str_max": 20, "sound": "smash!", @@ -550,20 +574,18 @@ { "item": "nail", "amount": 10, "minamount": 2 } ] } - }, - { - "type": "furniture", - "id": "f_canvas_wall", + },{ + "type" : "furniture", + "id" : "f_canvas_wall", "name": "canvas wall", "symbol": "#", "color": "blue", "move_cost_mod": -1, "required_str": -1, "flags": ["FLAMMABLE_HARD", "BASHABLE", "NOITEM"] - }, - { - "type": "furniture", - "id": "f_canvas_door", + },{ + "type" : "furniture", + "id" : "f_canvas_door", "name": "canvas flap", "symbol": "+", "color": "blue", @@ -571,10 +593,9 @@ "required_str": -1, "flags": ["FLAMMABLE_HARD", "BASHABLE", "NOITEM"], "open": "f_canvas_door_o" - }, - { - "type": "furniture", - "id": "f_canvas_door_o", + },{ + "type" : "furniture", + "id" : "f_canvas_door_o", "name": "open canvas flap", "symbol": ".", "color": "blue", @@ -582,10 +603,9 @@ "required_str": -1, "flags": ["TRANSPARENT"], "close": "f_canvas_door" - }, - { - "type": "furniture", - "id": "f_groundsheet", + },{ + "type" : "furniture", + "id" : "f_groundsheet", "name": "groundsheet", "symbol": ";", "color": "green", @@ -593,30 +613,27 @@ "required_str": -1, "flags": ["TRANSPARENT", "INDOORS"], "examine_action": "tent" - }, - { - "type": "furniture", - "id": "f_fema_groundsheet", + },{ + "type" : "furniture", + "id" : "f_fema_groundsheet", "name": "groundsheet", "symbol": ";", "color": "green", "move_cost_mod": 0, "required_str": -1, "flags": ["TRANSPARENT", "INDOORS", "ORGANIC"] - }, - { - "type": "furniture", - "id": "f_skin_wall", + },{ + "type" : "furniture", + "id" : "f_skin_wall", "name": "animalskin wall", "symbol": "#", "color": "brown", "move_cost_mod": -1, "required_str": -1, "flags": ["FLAMMABLE_HARD", "BASHABLE", "NOITEM"] - }, - { - "type": "furniture", - "id": "f_skin_door", + },{ + "type" : "furniture", + "id" : "f_skin_door", "name": "animalskin flap", "symbol": "+", "color": "white", @@ -624,10 +641,9 @@ "required_str": -1, "flags": ["FLAMMABLE_HARD", "BASHABLE", "NOITEM"], "open": "f_skin_door_o" - }, - { - "type": "furniture", - "id": "f_skin_door_o", + },{ + "type" : "furniture", + "id" : "f_skin_door_o", "name": "open animalskin flap", "symbol": ".", "color": "white", @@ -635,10 +651,9 @@ "required_str": -1, "flags": ["TRANSPARENT"], "close": "f_skin_door" - }, - { - "type": "furniture", - "id": "f_skin_groundsheet", + },{ + "type" : "furniture", + "id" : "f_skin_groundsheet", "name": "animalskin floor", "symbol": ";", "color": "brown", @@ -646,10 +661,9 @@ "required_str": -1, "flags": ["TRANSPARENT", "INDOORS"], "examine_action": "shelter" - }, - { - "type": "furniture", - "id": "f_mutpoppy", + },{ + "type" : "furniture", + "id" : "f_mutpoppy", "name": "mutated poppy flower", "symbol": "f", "color": "red", @@ -657,10 +671,9 @@ "required_str": -1, "flags": ["TRANSPARENT"], "examine_action": "flower_poppy" - }, - { - "type": "furniture", - "id": "f_flower_fungal", + },{ + "type" : "furniture", + "id" : "f_flower_fungal", "name": "fungal flower", "symbol": "f", "color": "dkgray", @@ -668,30 +681,27 @@ "required_str": -1, "flags": ["TRANSPARENT", "FLOWER", "FUNGUS"], "examine_action": "fungus" - }, - { - "type": "furniture", - "id": "f_fungal_mass", + },{ + "type" : "furniture", + "id" : "f_fungal_mass", "name": "fungal mass", "symbol": "O", "bgcolor": "dkgray", "move_cost_mod": -10, "required_str": -1, "flags": ["BASHABLE", "CONTAINER", "SEALED", "FLAMMABLE_ASH", "FUNGUS"] - }, - { - "type": "furniture", - "id": "f_fungal_clump", + },{ + "type" : "furniture", + "id" : "f_fungal_clump", "name": "fungal clump", "symbol": "#", "bgcolor": "ltgray", "move_cost_mod": 3, "required_str": -1, "flags": ["TRANSPARENT", "BASHABLE", "CONTAINER", "SEALED", "FLAMMABLE_ASH", "FUNGUS"] - }, - { - "type": "furniture", - "id": "f_safe_c", + },{ + "type" : "furniture", + "id" : "f_safe_c", "name": "safe", "symbol": "X", "color": "ltgray", @@ -699,10 +709,9 @@ "required_str": 14, "flags": ["TRANSPARENT", "BASHABLE", "CONTAINER", "SEALED", "PLACE_ITEM"], "open": "f_safe" - }, - { - "type": "furniture", - "id": "f_safe_l", + },{ + "type" : "furniture", + "id" : "f_safe_l", "name": "safe", "symbol": "X", "color": "ltgray", @@ -710,10 +719,9 @@ "required_str": 14, "flags": ["TRANSPARENT", "BASHABLE", "CONTAINER", "SEALED", "PLACE_ITEM"], "examine_action": "safe" - }, - { - "type": "furniture", - "id": "f_safe_o", + },{ + "type" : "furniture", + "id" : "f_safe_o", "name": "open safe", "symbol": "O", "color": "ltgray", @@ -721,10 +729,9 @@ "required_str": 14, "flags": ["TRANSPARENT", "BASHABLE", "CONTAINER", "PLACE_ITEM"], "close": "f_safe" - }, - { - "type": "furniture", - "id": "f_plant_seed", + },{ + "type" : "furniture", + "id" : "f_plant_seed", "name": "seed", "symbol": "^", "color": "brown", @@ -732,10 +739,9 @@ "required_str": -1, "flags": ["PLANT", "SEALED", "TRANSPARENT", "CONTAINER", "NOITEM"], "examine_action": "aggie_plant" - }, - { - "type": "furniture", - "id": "f_plant_seedling", + },{ + "type" : "furniture", + "id" : "f_plant_seedling", "name": "seedling", "symbol": "^", "color": "green", @@ -743,10 +749,9 @@ "required_str": -1, "flags": ["PLANT", "SEALED", "TRANSPARENT", "CONTAINER", "NOITEM"], "examine_action": "aggie_plant" - }, - { - "type": "furniture", - "id": "f_plant_mature", + },{ + "type" : "furniture", + "id" : "f_plant_mature", "name": "mature plant", "symbol": "#", "color": "green", @@ -754,10 +759,9 @@ "required_str": -1, "flags": ["PLANT", "SEALED", "TRANSPARENT", "CONTAINER", "NOITEM"], "examine_action": "aggie_plant" - }, - { - "type": "furniture", - "id": "f_plant_harvest", + },{ + "type" : "furniture", + "id" : "f_plant_harvest", "name": "harvestable plant", "symbol": "#", "color": "ltgreen", diff --git a/data/json/halloween_special.json b/data/json/halloween_special.json index 4a664e4056bc1..92f0df6c37159 100644 --- a/data/json/halloween_special.json +++ b/data/json/halloween_special.json @@ -142,7 +142,7 @@ "name": "dodge" } ] - } + }, { "type" : "ARMOR", "id" : "haunted_sweater", @@ -331,7 +331,7 @@ "flags":["SEES", "HEARS", "WARM", "BASHES", "BLEED", "REGENERATES_10", "NO_BREATHE", "VIS50"], "anger_triggers":["STALK", "PLAYER_WEAK", "HURT"], "fear_triggers":["FIRE"] - } + }, { "type":"MONSTER", "id":"mon_vampire", diff --git a/data/json/item_groups.json b/data/json/item_groups.json index 1e03c9b082bb2..08a22e93e2c4f 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -1,7 +1,7 @@ [ - { - "type":"item_group", - "id":"child_items", + { + "type" : "item_group", + "id" : "child_items", "items":[ ["chocolate", 50], ["candy", 60], @@ -21,16 +21,16 @@ ["fairy_tales", 20], ["mag_comic", 20] ] - },{ - "type":"item_group", - "id":"field", + },{ + "type" : "item_group", + "id" : "field", "items":[ ["rock", 40], ["strawberries", 2] ] - },{ - "type":"item_group", - "id":"forest", + },{ + "type" : "item_group", + "id" : "forest", "items":[ ["rock", 40], ["stick", 95], @@ -41,22 +41,22 @@ ["blackberries", 3], ["cranberries", 3] ] - },{ - "type":"item_group", - "id":"hive", + },{ + "type" : "item_group", + "id" : "hive", "items":[ ["honeycomb", 10] ] - },{ - "type":"item_group", - "id":"hive_center", + },{ + "type" : "item_group", + "id" : "hive_center", "items":[ ["honeycomb", 10], ["royal_jelly", 8] ] - },{ - "type":"item_group", - "id":"road", + },{ + "type" : "item_group", + "id" : "road", "items":[ ["muffler", 30], ["pipe", 20], @@ -82,9 +82,9 @@ ["foot_crank", 10], ["flyer", 10] ] - },{ - "type":"item_group", - "id":"livingroom", + },{ + "type" : "item_group", + "id" : "livingroom", "items":[ ["rootbeer", 65], ["mag_computer", 35], @@ -188,9 +188,9 @@ ["catfood", 10], ["nic_gum", 2] ] - },{ - "type":"item_group", - "id":"kitchen", + },{ + "type" : "item_group", + "id" : "kitchen", "items":[ ["chips", 65], ["toaster", 20], @@ -200,6 +200,7 @@ ["jacket_chef", 2], ["kernels", 35], ["pot", 25], + ["bowl_pewter", 25], ["teapot", 15], ["pan", 25], ["knife_butter", 90], @@ -295,6 +296,7 @@ ["jar_meat_pickled", 4], ["tongs", 25], ["char_smoker", 25], + ["lawn_dart", 10], ["dehydrator", 15], ["flask_hip", 5], ["lye_powder", 5], @@ -306,9 +308,9 @@ ["catfood", 20], ["charcoal", 5] ] - },{ - "type":"item_group", - "id":"knifeblock", + },{ + "type" : "item_group", + "id" : "knifeblock", "items":[ ["knife_steak", 85], ["knife_butcher", 10], @@ -320,9 +322,9 @@ ["switchblade", 4], ["tongs", 28] ] - },{ - "type":"item_group", - "id":"fridge", + },{ + "type" : "item_group", + "id" : "fridge", "items":[ ["water_clean", 90], ["oj", 50], @@ -394,17 +396,17 @@ ["protein_shake", 10], ["fries", 8] ] - },{ - "type":"item_group", - "id":"oven", + },{ + "type" : "item_group", + "id" : "oven", "items":[ ["pan", 80], ["teapot", 25], ["pot", 80] ] - },{ - "type":"item_group", - "id":"home_hw", + },{ + "type" : "item_group", + "id" : "home_hw", "items":[ ["superglue", 30], ["string_6", 2], @@ -426,11 +428,13 @@ ["hammer", 35], ["flashlight", 40], ["soldering_iron", 30], + ["solder_wire", 30], ["bubblewrap", 50], ["binoculars", 20], ["duct_tape", 70], ["lawnmower", 25], ["char_smoker", 25], + ["lawn_dart", 10], ["dehydrator", 15], ["foot_crank", 10], ["boltcutters", 5], @@ -442,9 +446,9 @@ ["atomic_light", 1], ["charcoal", 20] ] - },{ - "type":"item_group", - "id":"bedroom", + },{ + "type" : "item_group", + "id" : "bedroom", "items":[ ["inhaler", 14], ["television", 10], @@ -521,6 +525,7 @@ ["thread", 40], ["scissors", 50], ["soldering_iron", 70], + ["solder_wire", 70], ["radio", 20], ["syringe", 8], ["mp3", 18], @@ -538,6 +543,7 @@ ["blanket", 20], ["house_coat", 25], ["talking_doll", 65], + ["creepy_doll", 1], ["money_bundle", 30], ["wristwatch", 15], ["pocketwatch", 5], @@ -554,11 +560,12 @@ ["dress_wedding", 1], ["corset", 15] ] - },{ - "type":"item_group", - "id":"homeguns", + },{ + "type" : "item_group", + "id" : "homeguns", "items":[ ["blowgun", 5], + ["rm228", 3], ["dart", 5], ["22_lr", 9], ["22_fmj", 1], @@ -607,7 +614,15 @@ ["arrow_wood", 7], ["arrow_cf", 5], ["masterkey", 2], + ["rm121aux", 1], ["shot_flechette", 1], + ["20x66_shot", 3], + ["20x66_exp", 1], + ["20x66_inc", 1], + ["20x66_flare", 2], + ["20x66_frag", 1], + ["20x66_slug", 2], + ["20x66_flechette", 2], ["shot_hull", 10], ["9mm_casing", 10], ["38_casing", 10], @@ -627,6 +642,9 @@ ["smrifle_primer", 10], ["lgrifle_primer", 10], ["lead", 10], + ["solder", 10], + ["tin", 10], + ["bismuth", 10], ["puller", 5], ["press", 5], ["rm99_pistol", 1], @@ -636,11 +654,12 @@ ["improve_sights", 20], ["cu_pipe", 10], ["5x50_hull", 8], + ["rm120c", 3], ["u_shotgun", 5] ] - },{ - "type":"item_group", - "id":"dresser", + },{ + "type" : "item_group", + "id" : "dresser", "items":[ ["jeans", 90], ["pants_checkered", 5], @@ -697,9 +716,9 @@ ["dress_wedding", 1], ["wristwatch", 15] ] - },{ - "type":"item_group", - "id":"dining", + },{ + "type" : "item_group", + "id" : "dining", "items":[ ["wrapper", 50], ["knife_butter", 90], @@ -715,9 +734,9 @@ ["glass_plate", 90], ["bottle_glass", 10] ] - },{ - "type":"item_group", - "id":"snacks", + },{ + "type" : "item_group", + "id" : "snacks", "items":[ ["chips", 65], ["pretzels", 55], @@ -743,9 +762,9 @@ ["fruit_leather", 25], ["kernels", 25] ] - },{ - "type":"item_group", - "id":"fridgesnacks", + },{ + "type" : "item_group", + "id" : "fridgesnacks", "items":[ ["water_clean", 90], ["oj", 50], @@ -755,6 +774,7 @@ ["apple_cider", 50], ["lemonade", 50], ["energy_drink", 55], + ["energy_drink_atomic", 4], ["cola", 70], ["choc_drink", 30], ["rootbeer", 65], @@ -773,9 +793,9 @@ ["protein_shake", 10], ["pie", 20] ] - },{ - "type":"item_group", - "id":"fast_food", + },{ + "type" : "item_group", + "id" : "fast_food", "items":[ ["water_clean", 90], ["cola", 70], @@ -808,11 +828,13 @@ ["hamburger", 30], ["bacon", 25], ["cheese", 30], + ["restaurantmap", 5], + ["touristmap", 2], ["noodles_fast", 30] ] - },{ - "type":"item_group", - "id":"coffee_shop", + },{ + "type" : "item_group", + "id" : "coffee_shop", "items":[ ["water_clean", 90], ["cola", 70], @@ -843,11 +865,13 @@ ["coffee_raw", 15], ["coffee_raw", 15], ["choco_coffee_beans", 10], + ["restaurantmap", 5], + ["touristmap", 2], ["salt", 10] ] - },{ - "type":"item_group", - "id":"behindcounter", + },{ + "type" : "item_group", + "id" : "behindcounter", "items":[ ["aspirin", 85], ["caffeine", 25], @@ -856,6 +880,7 @@ ["cigar", 5], ["battery", 50], ["shotgun_sawn", 1], + ["rm228", 1], ["mag_porn", 20], ["lighter", 60], ["ref_lighter", 5], @@ -866,15 +891,17 @@ ["mp3", 18], ["portable_game", 8], ["roadmap", 40], + ["touristmap", 20], + ["restaurantmap", 20], ["money_bundle", 55], ["gum", 30], ["caff_gum", 10], ["sm_extinguisher", 10], ["nic_gum", 2] ] - },{ - "type":"item_group", - "id":"magazines", + },{ + "type" : "item_group", + "id" : "magazines", "items":[ ["mag_tv", 40], ["mag_dude", 40], @@ -940,9 +967,9 @@ ["mag_fabrication", 30], ["mag_tailor", 25] ] - },{ - "type":"item_group", - "id":"softdrugs", + },{ + "type" : "item_group", + "id" : "softdrugs", "items":[ ["bandages", 50], ["1st_aid", 35], @@ -959,9 +986,9 @@ ["caff_gum", 10], ["nic_gum", 25] ] - },{ - "type":"item_group", - "id":"harddrugs", + },{ + "type" : "item_group", + "id" : "harddrugs", "items":[ ["inhaler", 14], ["codeine", 15], @@ -974,9 +1001,9 @@ ["antibiotics", 25], ["syringe", 8] ] - },{ - "type":"item_group", - "id":"cannedfood", + },{ + "type" : "item_group", + "id" : "cannedfood", "items":[ ["can_beans", 40], ["can_corn", 35], @@ -989,7 +1016,6 @@ ["can_salmon", 25], ["can_chowder", 35], ["can_herring", 30], - ["catfood", 20], ["broth", 15], ["crackers", 10], ["syrup", 15], @@ -1019,9 +1045,9 @@ ["catfood", 5], ["jar_meat_pickled", 6] ] - },{ - "type":"item_group", - "id":"pasta", + },{ + "type" : "item_group", + "id" : "pasta", "items":[ ["spaghetti_raw", 40], ["macaroni_raw", 40], @@ -1037,9 +1063,9 @@ ["seasoning_salt", 25], ["seasoning_italian", 25] ] - },{ - "type":"item_group", - "id":"produce", + },{ + "type" : "item_group", + "id" : "produce", "items":[ ["apple", 70], ["orange", 65], @@ -1064,9 +1090,9 @@ ["onion", 3], ["carrot", 3] ] - },{ - "type":"item_group", - "id":"cleaning", + },{ + "type" : "item_group", + "id" : "cleaning", "items":[ ["salt_water", 20], ["bleach", 20], @@ -1088,9 +1114,9 @@ ["boots_rubber", 20], ["charcoal", 5] ] - },{ - "type":"item_group", - "id":"hardware", + },{ + "type" : "item_group", + "id" : "hardware", "items":[ ["superglue", 30], ["chain", 20], @@ -1133,9 +1159,9 @@ ["cu_pipe", 50], ["charcoal", 5] ] - },{ - "type":"item_group", - "id":"tools", + },{ + "type" : "item_group", + "id" : "tools", "items":[ ["screwdriver", 40], ["hammer", 35], @@ -1156,9 +1182,9 @@ ["swage", 1], ["tool_belt", 5] ] - },{ - "type":"item_group", - "id":"bigtools", + },{ + "type" : "item_group", + "id" : "bigtools", "items":[ ["broom", 30], ["mop", 30], @@ -1180,9 +1206,9 @@ ["apron_leather", 10], ["tool_belt", 30] ] - },{ - "type":"item_group", - "id":"mischw", + },{ + "type" : "item_group", + "id" : "mischw", "items":[ ["2x4", 60], ["machete", 5], @@ -1219,15 +1245,16 @@ ["sm_extinguisher", 10], ["tool_belt", 30] ] - },{ - "type":"item_group", - "id":"consumer_electronics", + },{ + "type" : "item_group", + "id" : "consumer_electronics", "items":[ ["amplifier", 8], ["mag_electronics", 15], ["antenna", 18], ["battery", 50], ["soldering_iron", 70], + ["solder_wire", 70], ["solar_cell", 5], ["screwdriver", 40], ["processor", 15], @@ -1248,13 +1275,14 @@ ["pda", 20], ["wristwatch", 15] ] - },{ - "type":"item_group", - "id":"sports", + },{ + "type" : "item_group", + "id" : "sports", "items":[ ["bandages", 50], ["aspirin", 85], ["bat", 60], + ["bismuth", 30], ["bat_metal", 60], ["football_armor", 10], ["helmet_football", 10], @@ -1305,13 +1333,14 @@ ["airhorn", 40], ["boots_hiking", 10] ] - },{ - "type":"item_group", - "id":"camping", + },{ + "type" : "item_group", + "id" : "camping", "items":[ ["rope_30", 35], ["hatchet", 10], ["pot", 25], + ["bowl_pewter", 25], ["teapot", 5], ["pan", 25], ["binoculars", 20], @@ -1372,7 +1401,8 @@ ["wire", 50], ["rollmat", 40], ["tent_kit", 17], - ["canteen", 10], + ["canteen", 15], + ["2lcanteen", 10], ["ax", 8], ["heatpack", 60], ["glowstick", 60], @@ -1403,13 +1433,14 @@ ["airhorn", 20], ["charcoal", 20] ] - },{ - "type":"item_group", - "id":"allsporting", + },{ + "type" : "item_group", + "id" : "allsporting", "items":[ ["aspirin", 85], ["sports_drink", 20], ["bat", 60], + ["bismuth", 30], ["bat_metal", 60], ["baseball", 60], ["football_armor", 10], @@ -1453,6 +1484,7 @@ ["rope_30", 35], ["hatchet", 10], ["pot", 25], + ["bowl_pewter", 25], ["teapot", 15], ["pan", 25], ["binoculars", 20], @@ -1540,9 +1572,9 @@ ["airhorn", 30], ["quikclot", 10] ] - },{ - "type":"item_group", - "id":"alcohol", + },{ + "type" : "item_group", + "id" : "alcohol", "items":[ ["whiskey", 16], ["vodka", 20], @@ -1555,18 +1587,19 @@ ["wine_chardonnay", 10], ["wine_cabernet", 10], ["wine_noir", 2], - ["beer", 60] + ["beer", 60], + ["single_malt_whiskey", 2] ] - },{ - "type":"item_group", - "id":"pool_table", + },{ + "type" : "item_group", + "id" : "pool_table", "items":[ ["pool_cue", 4], ["pool_ball", 40] ] - },{ - "type":"item_group", - "id":"trash", + },{ + "type" : "item_group", + "id" : "trash", "items":[ ["iodine", 5], ["bum_wine", 5], @@ -1595,21 +1628,32 @@ ["kevlar_plate", 1], ["leather", 1], ["software_hacking", 10], + ["decoy_elfa", 10], + ["recipe_elfa", 1], ["jug_plastic", 10], ["spray_can", 50], ["keg", 10], ["jar_glass", 10], ["jar_3l_glass", 8], ["flyer", 10], - ["talking_doll", 60] + ["talking_doll", 60], + ["creepy_doll", 1] ] - },{ - "type":"item_group", - "id":"ammo", + },{ + "type" : "item_group", + "id" : "ammo", "items":[ ["shot_bird", 8], ["shot_00", 8], ["shot_flechette", 3], + ["20x66_shot", 5], + ["20x66_exp", 1], + ["20x66_inc", 2], + ["20x66_flare", 3], + ["20x66_frag", 2], + ["20x66_slug", 4], + ["20x66_flechette", 3], + ["20x66_beanbag", 4], ["shot_slug", 6], ["22_fmj", 3], ["22_lr", 9], @@ -1651,9 +1695,9 @@ ["5x50dart", 6], ["8mm_inc", 2] ] - },{ - "type":"item_group", - "id":"pistols", + },{ + "type" : "item_group", + "id" : "pistols", "items":[ ["sig_mosquito", 5], ["sw_22", 5], @@ -1675,19 +1719,22 @@ ["rm99_pistol", 2], ["rm103a_pistol", 1] ] - },{ - "type":"item_group", - "id":"shotguns", + },{ + "type" : "item_group", + "id" : "shotguns", "items":[ ["shotgun_s", 1], ["shotgun_d", 2], + ["rm228", 2], + ["rm120c", 4], ["remington_870", 9], ["mossberg_500", 5], + ["rm20", 2], ["saiga_12", 3] ] - },{ - "type":"item_group", - "id":"rifles", + },{ + "type" : "item_group", + "id" : "rifles", "items":[ ["marlin_9a", 14], ["ruger_1022", 12], @@ -1700,9 +1747,9 @@ ["rm51_assault_rifle", 2], ["rm88_battle_rifle", 1] ] - },{ - "type":"item_group", - "id":"smg", + },{ + "type" : "item_group", + "id" : "smg", "items":[ ["american_180", 2], ["uzi", 8], @@ -1717,9 +1764,9 @@ ["needlegun", 4], ["rm2000_smg", 1] ] - },{ - "type":"item_group", - "id":"assault", + },{ + "type" : "item_group", + "id" : "assault", "items":[ ["hk_g3", 15], ["hk_g36", 17], @@ -1736,9 +1783,9 @@ ["rm614_lmg", 1], ["rm2000_smg", 1] ] - },{ - "type":"item_group", - "id":"allguns", + },{ + "type" : "item_group", + "id" : "allguns", "items":[ ["sig_mosquito", 5], ["sw_22", 5], @@ -1758,9 +1805,12 @@ ["sw_500", 1], ["shotgun_s", 1], ["shotgun_d", 2], + ["rm228", 2], ["remington_870", 9], ["mossberg_500", 5], + ["rm120c", 4], ["saiga_12", 3], + ["rm20", 2], ["american_180", 2], ["uzi", 8], ["tec9", 10], @@ -1802,9 +1852,9 @@ ["signal_flare", 5], ["blowgun", 5] ] - },{ - "type":"item_group", - "id":"gunxtras", + },{ + "type" : "item_group", + "id" : "gunxtras", "items":[ ["glasses_safety", 40], ["glasses_bal", 20], @@ -1879,6 +1929,9 @@ ["smrifle_primer", 10], ["lgrifle_primer", 10], ["lead", 10], + ["solder", 10], + ["tin", 10], + ["bismuth", 10], ["press", 5], ["puller", 5], ["laser_sight", 15], @@ -1889,9 +1942,9 @@ ["5x50_hull", 8], ["improve_sights", 20] ] - },{ - "type":"item_group", - "id":"shoes", + },{ + "type" : "item_group", + "id" : "shoes", "items":[ ["sneakers", 80], ["socks", 70], @@ -1903,9 +1956,9 @@ ["boots_combat", 10], ["boots_hiking", 20] ] - },{ - "type":"item_group", - "id":"pants", + },{ + "type" : "item_group", + "id" : "pants", "items":[ ["jeans", 90], ["pants_checkered", 5], @@ -1920,9 +1973,9 @@ ["sundress", 50], ["dress_wedding", 1] ] - },{ - "type":"item_group", - "id":"shirts", + },{ + "type" : "item_group", + "id" : "shirts", "items":[ ["tshirt", 80], ["longshirt", 80], @@ -1935,9 +1988,9 @@ ["under_armor", 20], ["jersey", 40] ] - },{ - "type":"item_group", - "id":"jackets", + },{ + "type" : "item_group", + "id" : "jackets", "items":[ ["jacket_light", 50], ["jacket_jean", 35], @@ -1947,9 +2000,9 @@ ["trenchcoat", 25], ["apron_leather", 1] ] - },{ - "type":"item_group", - "id":"winter", + },{ + "type" : "item_group", + "id" : "winter", "items":[ ["coat_winter", 50], ["peacoat", 30], @@ -1972,9 +2025,9 @@ ["leg_warmers", 20], ["balclava", 15] ] - },{ - "type":"item_group", - "id":"bags", + },{ + "type" : "item_group", + "id" : "bags", "items":[ ["backpack", 38], ["purse", 40], @@ -1982,9 +2035,9 @@ ["rucksack", 20], ["backpack_leather", 8] ] - },{ - "type":"item_group", - "id":"allclothes", + },{ + "type" : "item_group", + "id" : "allclothes", "items":[ ["jeans", 90], ["pants_checkered", 5], @@ -2058,9 +2111,9 @@ ["dress_wedding", 1], ["jersey", 40] ] - },{ - "type":"item_group", - "id":"novels", + },{ + "type" : "item_group", + "id" : "novels", "items":[ ["novel_romance", 30], ["novel_spy", 28], @@ -2095,9 +2148,9 @@ ["novel_tragedy", 8], ["ZSG", 5] ] - },{ - "type":"item_group", - "id":"manuals", + },{ + "type" : "item_group", + "id" : "manuals", "items":[ ["manual_brawl", 30], ["manual_dodge", 1], @@ -2130,9 +2183,9 @@ ["manual_driving", 15], ["manual_survival", 20] ] - },{ - "type":"item_group", - "id":"textbooks", + },{ + "type" : "item_group", + "id" : "textbooks", "items":[ ["textbook_computer", 4], ["computer_science", 8], @@ -2166,33 +2219,33 @@ ["textbook_speech", 12], ["textbook_armeast", 3] ] - },{ - "type":"item_group", - "id":"cop_shoes", + },{ + "type" : "item_group", + "id" : "cop_shoes", "items":[ ["boots", 70], ["boots_steel", 50], ["boots_hiking", 20], ["boots_combat", 10] ] - },{ - "type":"item_group", - "id":"cop_torso", + },{ + "type" : "item_group", + "id" : "cop_torso", "items":[ ["dress_shirt", 60], ["under_armor", 20], ["jacket_light", 50] ] - },{ - "type":"item_group", - "id":"cop_pants", + },{ + "type" : "item_group", + "id" : "cop_pants", "items":[ ["pants", 75], ["pants_cargo", 70] ] - },{ - "type":"item_group", - "id":"cop_weapons", + },{ + "type" : "item_group", + "id" : "cop_weapons", "items":[ ["baton", 8], ["kevlar", 30], @@ -2215,6 +2268,7 @@ ["UPS_off", 5], ["tazer", 3], ["shot_beanbag", 15], + ["20x66_beanbag", 10], ["tac_helmet", 15], ["tac_fullhelmet", 7], ["tonfa", 30], @@ -2222,9 +2276,9 @@ ["shocktonfa_off", 15], ["swat_armor", 10] ] - },{ - "type":"item_group", - "id":"cop_evidence", + },{ + "type" : "item_group", + "id" : "cop_evidence", "items":[ ["crackpipe", 8], ["weed", 20], @@ -2254,44 +2308,44 @@ ["switchblade", 15], ["bondage_mask", 1] ] - },{ - "type":"item_group", - "id":"swimmer_head", + },{ + "type" : "item_group", + "id" : "swimmer_head", "items":[ ["goggles_swim", 90], ["fancy_sunglasses", 1], ["sunglasses", 10] ] - },{ - "type":"item_group", - "id":"swimmer_torso", + },{ + "type" : "item_group", + "id" : "swimmer_torso", "items":[ ["bikini_top", 50], ["flotation_vest", 10] ] - },{ - "type":"item_group", - "id":"swimmer_pants", + },{ + "type" : "item_group", + "id" : "swimmer_pants", "items":[ ["trunks", 80], ["hot_pants", 30] ] - },{ - "type":"item_group", - "id":"swimmer_shoes", + },{ + "type" : "item_group", + "id" : "swimmer_shoes", "items":[ ["flip_flops", 80] ] - },{ - "type":"item_group", - "id":"swimmer_wetsuit", + },{ + "type" : "item_group", + "id" : "swimmer_wetsuit", "items":[ ["wetsuit", 90], ["wetsuit_spring", 10] ] - },{ - "type":"item_group", - "id":"lab_shoes", + },{ + "type" : "item_group", + "id" : "lab_shoes", "items":[ ["sneakers", 80], ["boots", 70], @@ -2299,9 +2353,9 @@ ["boots_hiking", 40], ["dress_shoes", 50] ] - },{ - "type":"item_group", - "id":"lab_torso", + },{ + "type" : "item_group", + "id" : "lab_torso", "items":[ ["coat_lab", 20], ["coat_lab", 20], @@ -2319,9 +2373,9 @@ ["hazmat_suit", 5], ["cleansuit", 10] ] - },{ - "type":"item_group", - "id":"lab_pants", + },{ + "type" : "item_group", + "id" : "lab_pants", "items":[ ["jeans", 90], ["pants_checkered", 5], @@ -2329,9 +2383,9 @@ ["pants_cargo", 70], ["skirt", 75] ] - },{ - "type":"item_group", - "id":"hospital_lab", + },{ + "type" : "item_group", + "id" : "hospital_lab", "items":[ ["blood", 20], ["iodine", 5], @@ -2346,6 +2400,8 @@ ["glasses_safety", 40], ["vacutainer", 10], ["usb_drive", 5], + ["recipe_elfa", 1], + ["recipe_medicalmut", 2], ["disinfectant", 35], ["medical_gauze", 10], ["medical_tape", 45], @@ -2358,16 +2414,16 @@ ["fungicide", 10], ["jar_3l_glass", 15] ] - },{ - "type":"item_group", - "id":"hospital_samples", + },{ + "type" : "item_group", + "id" : "hospital_samples", "items":[ ["blood", 20], ["vacutainer", 10] ] - },{ - "type":"item_group", - "id":"surgery", + },{ + "type" : "item_group", + "id" : "surgery", "items":[ ["blood", 20], ["iodine", 5], @@ -2388,9 +2444,9 @@ ["jar_3l_glass", 15], ["quikclot", 10] ] - },{ - "type":"item_group", - "id":"office", + },{ + "type" : "item_group", + "id" : "office", "items":[ ["cola", 70], ["mag_barter", 35], @@ -2435,9 +2491,9 @@ ["sm_extinguisher", 10], ["pocketwatch", 2] ] - },{ - "type":"item_group", - "id":"cubical_office", + },{ + "type" : "item_group", + "id" : "cubical_office", "items":[ ["cola", 70], ["choc_drink", 30], @@ -2510,9 +2566,9 @@ ["sm_extinguisher", 10], ["pocketwatch", 2] ] - },{ - "type":"item_group", - "id":"school", + },{ + "type" : "item_group", + "id" : "school", "items":[ ["glasses_reading", 90], ["purse", 40], @@ -2542,6 +2598,7 @@ ["cookbook", 35], ["cookbook_italian", 25], ["manual_electronics", 20], + ["decoy_elfa", 5], ["manual_tailor", 15], ["manual_carpentry", 10], ["101_carpentry", 10], @@ -2590,9 +2647,9 @@ ["helmet_football", 5], ["football", 5] ] - },{ - "type":"item_group", - "id":"church", + },{ + "type" : "item_group", + "id" : "church", "items":[ ["glasses_eye", 90], ["sunglasses", 90], @@ -2611,11 +2668,12 @@ ["essay_book", 6], ["poetry_book", 6], ["philosophy_book", 2], + ["survivormap", 1], ["pocketwatch", 10] ] - },{ - "type":"item_group", - "id":"vault", + },{ + "type" : "item_group", + "id" : "vault", "items":[ ["purifier", 12], ["plut_cell", 10], @@ -2625,6 +2683,7 @@ ["UPS_off", 5], ["adv_UPS_off", 3], ["gold", 10], + ["silver", 30], ["plasma_engine", 1], ["bio_time_freeze", 10], ["bio_teleport", 10], @@ -2637,9 +2696,9 @@ ["money_bundle", 90], ["pocketwatch", 5] ] - },{ - "type":"item_group", - "id":"medieval", + },{ + "type" : "item_group", + "id" : "medieval", "items":[ ["katana", 2], ["cestus", 2], @@ -2670,9 +2729,9 @@ ["sword_bayonet", 10], ["apron_leather", 1] ] - },{ - "type":"item_group", - "id":"art", + },{ + "type" : "item_group", + "id" : "art", "items":[ ["fur", 0], ["katana", 2], @@ -2689,9 +2748,9 @@ ["fancy_sunglasses", 2], ["pocketwatch", 5] ] - },{ - "type":"item_group", - "id":"pawn", + },{ + "type" : "item_group", + "id" : "pawn", "items":[ ["cigar", 5], ["television", 10], @@ -2700,6 +2759,7 @@ ["cestus", 1], ["knuckle_brass", 15], ["gold", 10], + ["silver", 20], ["rapier", 3], ["cane", 10], ["suit", 60], @@ -2796,6 +2856,7 @@ ["fun_survival", 10], ["SICP", 3], ["textbook_robots", 1], + ["recipe_elfa", 1], ["extinguisher", 20], ["fan", 5], ["radio", 20], @@ -2815,6 +2876,7 @@ ["bat_metal", 60], ["lawnmower", 25], ["char_smoker", 25], + ["lawn_dart", 10], ["dehydrator", 15], ["pickelhaube", 50], ["makeshift_machete", 0], @@ -2862,11 +2924,12 @@ ["atomic_coffeepot", 1], ["flaregun", 10], ["signal_flare", 15], + ["rm120c", 5], ["knee_pads", 10] ] - },{ - "type":"item_group", - "id":"mil_surplus", + },{ + "type" : "item_group", + "id" : "mil_surplus", "items":[ ["knife_combat", 14], ["throwing_knife", 14], @@ -2910,7 +2973,8 @@ ["radio", 20], ["geiger_off", 8], ["usb_drive", 5], - ["canteen", 10], + ["canteen", 15], + ["2lcanteen", 10], ["jerrycan", 10], ["rucksack", 20], ["heatpack", 60], @@ -2924,9 +2988,9 @@ ["signal_flare", 25], ["quikclot", 20] ] - },{ - "type":"item_group", - "id":"shelter", + },{ + "type" : "item_group", + "id" : "shelter", "items":[ ["water_clean", 90], ["soup_veggy", 15], @@ -2993,7 +3057,8 @@ ["radio", 20], ["rollmat", 40], ["tent_kit", 17], - ["canteen", 10], + ["canteen", 15], + ["2lcanteen", 10], ["spray_can", 50], ["ax", 8], ["heatpack", 60], @@ -3012,11 +3077,12 @@ ["sm_extinguisher", 10], ["flaregun", 5], ["signal_flare", 10], + ["survivormap", 1], ["pur_tablets", 5] ] - },{ - "type":"item_group", - "id":"mechanics", + },{ + "type" : "item_group", + "id" : "mechanics", "items":[ ["wrench", 30], ["frame", 20], @@ -3059,12 +3125,84 @@ ["cu_pipe", 15], ["apron_leather", 5] ] - },{ - "type":"item_group", - "id":"chemistry", + },{ + "type" : "item_group", + "id" : "chem_school", "items":[ ["iodine", 5], + ["pocket_firstaid", 2], + ["textbook_chemistry", 10], ["adv_chemistry", 2], + ["decoy_elfa", 2], + ["water_clean", 90], + ["salt_water", 30], + ["bleach", 10], + ["ammonia", 12], + ["mutagen", 1], + ["purifier", 1], + ["royal_jelly", 4], + ["superglue", 30], + ["bottle_glass", 10], + ["syringe", 1], + ["adrenaline_injector", 1], + ["1st_aid", 5], + ["extinguisher", 25], + ["hotplate", 15], + ["funnel", 50], + ["jar_glass", 20], + ["jar_3l_glass", 15], + ["apron_leather", 6], + ["pur_tablets", 15], + ["lye_powder", 10], + ["oxy_powder", 12], + ["chemistry_set", 8], + ["sm_extinguisher", 20], + ["charcoal", 10] + ] + },{ + "type" : "item_group", + "id" : "chem_home", + "items":[ + ["iodine", 5], + ["textbook_chemistry", 8], + ["adv_chemistry", 6], + ["water_clean", 80], + ["salt_water", 30], + ["bleach", 20], + ["ammonia", 24], + ["mutagen", 2], + ["purifier", 2], + ["royal_jelly", 8], + ["superglue", 20], + ["bottle_glass", 10], + ["syringe", 4], + ["adrenaline_injector", 2], + ["1st_aid", 4], + ["extinguisher", 20], + ["hotplate", 10], + ["funnel", 50], + ["jar_glass", 20], + ["jar_3l_glass", 15], + ["apron_leather", 3], + ["pur_tablets", 15], + ["lye_powder", 20], + ["oxy_powder", 24], + ["chemistry_set", 10], + ["sm_extinguisher", 20], + ["charcoal", 15] + ] + },{ + "type" : "item_group", + "id" : "chem_lab", + "items":[ + ["iodine", 5], + ["adv_chemistry", 4], + ["decoy_elfa", 8], + ["recipe_elfa", 1], + ["recipe_raptor", 1], + ["recipe_alpha", 1], + ["recipe_chimera", 2], + ["recipe_medicalmut", 2], ["water_clean", 90], ["salt_water", 20], ["bleach", 20], @@ -3090,9 +3228,9 @@ ["sm_extinguisher", 10], ["charcoal", 10] ] - },{ - "type":"item_group", - "id":"teleport", + },{ + "type" : "item_group", + "id" : "teleport", "items":[ ["screwdriver", 40], ["wrench", 30], @@ -3104,9 +3242,9 @@ ["teleporter", 10], ["usb_drive", 5] ] - },{ - "type":"item_group", - "id":"goo", + },{ + "type" : "item_group", + "id" : "goo", "items":[ ["jumpsuit", 20], ["gloves_rubber", 20], @@ -3115,19 +3253,22 @@ ["helmet_riot", 25], ["lighter", 60], ["boots_rubber", 20], - ["canister_goo", 8] + ["recipe_medicalmut", 2], + ["canister_goo", 8], + ["canister_goo", 8], + ["recipe_chimera", 2] ] - },{ - "type":"item_group", - "id":"cloning_vat", + },{ + "type" : "item_group", + "id" : "cloning_vat", "items":[ ["fetus", 1], ["arm", 4], ["leg", 4] ] - },{ - "type":"item_group", - "id":"dissection", + },{ + "type" : "item_group", + "id" : "dissection", "items":[ ["iodine", 5], ["textbook_firstaid", 2], @@ -3147,9 +3288,9 @@ ["boots_rubber", 20], ["rag_bloody", 1] ] - },{ - "type":"item_group", - "id":"hydro", + },{ + "type" : "item_group", + "id" : "hydro", "items":[ ["blueberries", 3], ["strawberries", 2], @@ -3171,9 +3312,9 @@ ["carrot", 3], ["withered", 70] ] - },{ - "type":"item_group", - "id":"electronics", + },{ + "type" : "item_group", + "id" : "electronics", "items":[ ["superglue", 30], ["electrohack", 3], @@ -3201,15 +3342,124 @@ ["pda", 10], ["cable", 30], ["soldering_iron", 70], + ["solder_wire", 70], ["hotplate", 10], ["UPS_off", 5], ["usb_drive", 5], ["software_useless", 10], ["vac_sealer", 10] ] - },{ - "type":"item_group", - "id":"monparts", + },{ + "type" : "item_group", + "id" : "lab_dorm", + "items":[ + ["inhaler", 14], + ["clock", 10], + ["cig", 90], + ["chaw", 20], + ["cigar", 5], + ["pipe_tobacco", 5], + ["weed", 20], + ["seed_weed", 15], + ["rolling_paper", 5], + ["pipe_glass", 5], + ["coke", 8], + ["meth", 2], + ["heroin", 1], + ["sneakers", 40], + ["mask_hockey", 5], + ["jersey", 40], + ["coat_lab", 40], + ["boots_steel", 5], + ["socks", 70], + ["mocassins", 20], + ["bandana", 35], + ["glasses_eye", 90], + ["sunglasses", 20], + ["fancy_sunglasses", 5], + ["glasses_reading", 90], + ["glasses_bifocal", 90], + ["towel", 40], + ["hat_ball", 30], + ["purse", 40], + ["mbag", 20], + ["fanny", 10], + ["battery", 50], + ["bb", 8], + ["bbgun", 10], + ["fan", 10], + ["mag_porn", 20], + ["photo_album", 5], + ["mag_tv", 40], + ["mag_dude", 40], + ["mag_glam", 40], + ["mag_beauty", 30], + ["mag_gaming", 20], + ["mag_news", 35], + ["mag_firstaid", 10], + ["mag_comic", 20], + ["novel_romance", 30], + ["novel_drama", 40], + ["novel_mystery", 25], + ["ZSG", 5], + ["manual_mechanics", 35], + ["manual_fabrication", 12], + ["manual_speech", 50], + ["manual_business", 40], + ["manual_computers", 20], + ["novel_western", 16], + ["novel_pulp", 16], + ["tailor_portfolio", 1], + ["recipe_raptor", 1], + ["laptop", 30], + ["atomic_light", 3], + ["cell_phone", 40], + ["pda", 20], + ["lighter", 50], + ["ref_lighter", 4], + ["matches", 60], + ["sewing_kit", 30], + ["thread", 40], + ["scissors", 50], + ["soldering_iron", 70], + ["solder_wire", 70], + ["radio", 20], + ["syringe", 8], + ["mp3", 18], + ["portable_game", 8], + ["usb_drive", 8], + ["firecracker_pack", 1], + ["firecracker", 1], + ["chips", 65], + ["cola", 70], + ["choco_coffee_beans", 20], + ["caffeine", 20], + ["choc_drink", 20], + ["cola_meth", 1], + ["picklocks", 10], + ["wolfsuit", 4], + ["jedi_cloak", 4], + ["glowstick", 60], + ["blanket", 20], + ["house_coat", 25], + ["talking_doll", 5], + ["creepy_doll", 1], + ["wristwatch", 15], + ["pocketwatch", 5], + ["lsd", 1], + ["gum", 30], + ["caff_gum", 20], + ["nic_gum", 5], + ["clown_suit", 1], + ["clownshoes", 1], + ["bondage_suit", 5], + ["bondage_mask", 5], + ["flask_hip", 5], + ["corset", 15] + ] + },{ + "type" : "item_group", + "id" : "monparts", "items":[ ["meat", 50], ["veggy", 30], @@ -3221,9 +3471,9 @@ ["fighter_sting", 5], ["chitin_piece", 10] ] - },{ - "type":"item_group", - "id":"bionics", + },{ + "type" : "item_group", + "id" : "bionics", "items":[ ["bio_solar", 10], ["bio_batteries", 10], @@ -3270,12 +3520,16 @@ ["bio_armor_torso", 10], ["bio_armor_arms", 10], ["bio_armor_legs", 10], + ["bio_armor_eyes", 10], ["bio_shock", 10], ["bio_heat_absorb", 10], ["bio_claws", 10], + ["bio_razors", 10], ["bio_shockwave", 10], ["bio_nanobots", 10], ["bio_blood_anal", 10], + ["bio_geiger", 10], + ["bio_radscrubber", 10], ["bio_ads", 10], ["bio_ods", 10], ["bio_uncanny_dodge", 10], @@ -3293,9 +3547,9 @@ ["bio_power_armor_interface", 10], ["bio_power_armor_interface_mkII", 5] ] - },{ - "type":"item_group", - "id":"bionics_common", + },{ + "type" : "item_group", + "id" : "bionics_common", "items":[ ["bio_power_storage", 10], ["bio_tools", 10], @@ -3311,27 +3565,29 @@ ["bio_furnace", 10], ["bio_torsionratchet", 10] ] - },{ - "type":"item_group", - "id":"bots", + },{ + "type" : "item_group", + "id" : "bots", "items":[ ["bot_manhack", 1], ["bot_turret", 1] ] - },{ - "type":"item_group", - "id":"launchers", + },{ + "type" : "item_group", + "id" : "launchers", "items":[ ["40mm_concussive", 10], ["40mm_frag", 8], ["40mm_incendiary", 6], ["40mm_teargas", 5], ["40mm_smoke", 4], + ["40mm_flare", 4], ["40mm_flashbang", 8], ["40mm_beanbag", 15], ["m79", 5], ["m320", 10], ["mgl", 6], + ["rm802", 5], ["m203", 2], ["LAW_Packed", 30], ["m3_carlgustav", 2], @@ -3343,9 +3599,9 @@ ["40mm_flechette", 6], ["m235tpa", 6] ] - },{ - "type":"item_group", - "id":"mil_rifles", + },{ + "type" : "item_group", + "id" : "mil_rifles", "items":[ ["556", 6], ["556_incendiary", 2], @@ -3370,6 +3626,7 @@ ["UPS_off", 5], ["adv_UPS_off", 3], ["masterkey", 2], + ["rm121aux", 1], ["rm51_assault_rifle", 1], ["rm88_battle_rifle", 1], ["rm614_lmg", 1], @@ -3377,11 +3634,19 @@ ["laser_sight", 15], ["needlegun", 4], ["5x50dart", 8], + ["rm20", 3], + ["20x66_shot", 5], + ["20x66_exp", 1], + ["20x66_inc", 1], + ["20x66_flare", 2], + ["20x66_frag", 1], + ["20x66_slug", 4], + ["20x66_flechette", 5], ["improve_sights", 5] ] - },{ - "type":"item_group", - "id":"grenades", + },{ + "type" : "item_group", + "id" : "grenades", "items":[ ["grenade", 3], ["flashbang", 3], @@ -3393,9 +3658,9 @@ ["granade", 1], ["c4", 5] ] - },{ - "type":"item_group", - "id":"mil_armor", + },{ + "type" : "item_group", + "id" : "mil_armor", "items":[ ["pants_army", 30], ["jacket_army", 30], @@ -3408,6 +3673,7 @@ ["UPS_off", 5], ["adv_UPS_off", 3], ["chestrig", 10], + ["molle_pack", 8], ["duffelbag", 15], ["dump_pouch", 20], ["legrig", 10], @@ -3429,9 +3695,9 @@ ["elbow_pads", 50], ["knee_pads", 50] ] - },{ - "type":"item_group", - "id":"mil_accessories", + },{ + "type" : "item_group", + "id" : "mil_accessories", "items":[ ["mask_gas", 10], ["duffelbag", 15], @@ -3448,22 +3714,23 @@ ["e_tool", 10], ["glasses_bal", 30] ] - },{ - "type":"item_group", - "id":"mil_armor_torso", + },{ + "type" : "item_group", + "id" : "mil_armor_torso", "items":[ ["kevlar", 30], ["jacket_army", 30], ["vest", 15], ["chestrig", 10], + ["molle_pack", 8], ["under_armor", 20], ["power_armor_basic", 5], ["army_top", 30], ["elbow_pads", 20] ] - },{ - "type":"item_group", - "id":"mil_armor_helmet", + },{ + "type" : "item_group", + "id" : "mil_armor_helmet", "items":[ ["helmet_army", 40], ["helmet_liner", 20], @@ -3471,9 +3738,9 @@ ["beret_wool", 40], ["mask_bal", 10] ] - },{ - "type":"item_group", - "id":"mil_armor_pants", + },{ + "type" : "item_group", + "id" : "mil_armor_pants", "items":[ ["pants_army", 30], ["pants", 75], @@ -3481,9 +3748,9 @@ ["legrig", 10], ["knee_pads", 20] ] - },{ - "type":"item_group", - "id":"mil_food", + },{ + "type" : "item_group", + "id" : "mil_food", "items":[ ["chocolate", 50], ["neccowafers", 30], @@ -3501,9 +3768,9 @@ ["fungicide", 5], ["quikclot", 10] ] - },{ - "type":"item_group", - "id":"mil_food_nodrugs", + },{ + "type" : "item_group", + "id" : "mil_food_nodrugs", "items":[ ["chocolate", 50], ["can_beans", 40], @@ -3514,9 +3781,9 @@ ["sports_drink", 40], ["water_clean", 90] ] - },{ - "type":"item_group", - "id":"bionics_mil", + },{ + "type" : "item_group", + "id" : "bionics_mil", "items":[ ["bio_power_storage", 10], ["bio_solar", 10], @@ -3542,6 +3809,7 @@ ["bio_armor_torso", 10], ["bio_armor_arms", 10], ["bio_armor_legs", 10], + ["bio_armor_eyes", 10], ["bio_targeting", 10], ["bio_ground_sonar", 10], ["bio_face_mask", 10], @@ -3551,6 +3819,8 @@ ["bio_night", 10], ["bio_nanobots", 10], ["bio_blood_anal", 10], + ["bio_geiger", 10], + ["bio_radscrubber", 10], ["bio_ads", 10], ["bio_ods", 10], ["bio_uncanny_dodge", 10], @@ -3566,9 +3836,9 @@ ["bio_power_armor_interface", 10], ["bio_power_armor_interface_mkII", 5] ] - },{ - "type":"item_group", - "id":"weapons", + },{ + "type" : "item_group", + "id" : "weapons", "items":[ ["chain", 20], ["knuckle_brass", 20], @@ -3597,9 +3867,9 @@ ["shocktonfa_off", 5], ["nodachi", 1] ] - },{ - "type":"item_group", - "id":"survival_armor", + },{ + "type" : "item_group", + "id" : "survival_armor", "items":[ ["boots_steel", 50], ["boots_combat", 50], @@ -3638,6 +3908,7 @@ ["UPS_off", 5], ["adv_UPS_off", 3], ["chestrig", 10], + ["molle_pack", 8], ["legrig", 10], ["rucksack", 20], ["emer_blanket", 20], @@ -3649,9 +3920,9 @@ ["apron_leather", 2], ["tool_belt", 5] ] - },{ - "type":"item_group", - "id":"survival_tools", + },{ + "type" : "item_group", + "id" : "survival_tools", "items":[ ["bandages", 50], ["1st_aid", 35], @@ -3680,7 +3951,8 @@ ["hotplate", 10], ["UPS_off", 5], ["adv_UPS_off", 3], - ["canteen", 10], + ["canteen", 15], + ["2lcanteen", 10], ["spray_can", 50], ["bio_tools", 10], ["bio_ethanol", 10], @@ -3698,11 +3970,12 @@ ["sm_extinguisher", 10], ["flaregun", 20], ["signal_flare", 25], + ["survivormap", 1], ["charcoal", 5] ] - },{ - "type":"item_group", - "id":"sewage_plant", + },{ + "type" : "item_group", + "id" : "sewage_plant", "items":[ ["1st_aid", 35], ["motor", 2], @@ -3728,6 +4001,8 @@ ["bio_lighter", 10], ["bio_magnet", 10], ["flyer", 10], + ["decoy_elfa", 10], + ["recipe_elfa", 1], ["bio_purifier", 10], ["bio_climate", 10], ["bio_heatsink", 10], @@ -3737,9 +4012,9 @@ ["sm_extinguisher", 10], ["apron_leather", 10] ] - },{ - "type":"item_group", - "id":"construction_worker", + },{ + "type" : "item_group", + "id" : "construction_worker", "items":[ ["boots", 70], ["boots_steel", 50], @@ -3755,16 +4030,16 @@ ["boots_rubber", 20], ["apron_leather", 10] ] - },{ - "type":"item_group", - "id":"mine_storage", + },{ + "type" : "item_group", + "id" : "mine_storage", "items":[ ["rock", 40], ["coal", 20] ] - },{ - "type":"item_group", - "id":"mine_equipment", + },{ + "type" : "item_group", + "id" : "mine_equipment", "items":[ ["water_clean", 90], ["1st_aid", 35], @@ -3799,16 +4074,16 @@ ["e_tool", 5], ["apron_leather", 10] ] - },{ - "type":"item_group", - "id":"spiral", + },{ + "type" : "item_group", + "id" : "spiral", "items":[ ["spiral_stone", 20], ["vortex_stone", 2] ] - },{ - "type":"item_group", - "id":"radio", + },{ + "type" : "item_group", + "id" : "radio", "items":[ ["cola", 70], ["choc_drink", 20], @@ -3849,9 +4124,9 @@ ["caff_gum", 8], ["nic_gum", 5] ] - },{ - "type":"item_group", - "id":"toxic_dump_equipment", + },{ + "type" : "item_group", + "id" : "toxic_dump_equipment", "items":[ ["1st_aid", 35], ["iodine", 5], @@ -3863,6 +4138,8 @@ ["hat_hard", 50], ["textbook_carpentry", 6], ["mag_mechanics", 25], + ["decoy_elfa", 8], + ["recipe_elfa", 1], ["extinguisher", 20], ["radio", 20], ["geiger_off", 8], @@ -3877,9 +4154,9 @@ ["sm_extinguisher", 10], ["apron_leather", 10] ] - },{ - "type":"item_group", - "id":"subway", + },{ + "type" : "item_group", + "id" : "subway", "items":[ ["wrapper", 50], ["string_6", 2], @@ -3910,9 +4187,9 @@ ["umbrella",1], ["pocketwatch", 1] ] - },{ - "type":"item_group", - "id":"sewer", + },{ + "type" : "item_group", + "id" : "sewer", "items":[ ["mutagen", 8], ["fetus", 1], @@ -3921,11 +4198,12 @@ ["rag", 1], ["flyer", 10], ["child_book", 2], - ["lsd", 1] + ["lsd", 1], + ["recipe_elfa", 2] ] - },{ - "type":"item_group", - "id":"cavern", + },{ + "type" : "item_group", + "id" : "cavern", "items":[ ["rock", 40], ["jackhammer", 2], @@ -3935,9 +4213,9 @@ ["matches", 60], ["apron_leather", 5] ] - },{ - "type":"item_group", - "id":"spider", + },{ + "type" : "item_group", + "id" : "spider", "items":[ ["corpse", 10], ["mutagen", 8], @@ -3965,6 +4243,7 @@ ["atomic_coffeepot", 5], ["pda", 3], ["id_military", 3], + ["militarymap", 3], ["bayonet", 10], ["pistol_bayonet", 4], ["rope_30", 35], @@ -3981,6 +4260,11 @@ ["bolt_steel", 7], ["shot_00", 8], ["shot_flechette", 3], + ["20x66_shot", 4], + ["20x66_exp", 1], + ["20x66_inc", 1], + ["20x66_flare", 2], + ["20x66_frag", 1], ["762_m87", 7], ["556", 6], ["556_incendiary", 2], @@ -3988,6 +4272,7 @@ ["762_51", 6], ["762_51_incendiary", 6], ["saiga_12", 3], + ["rm20", 2], ["hk_mp5", 12], ["TDI", 4], ["savage_111f", 10], @@ -4020,11 +4305,12 @@ ["pocketwatch", 5], ["child_book", 20], ["e_tool", 10], + ["survivormap", 5], ["pur_tablets", 10] ] - },{ - "type":"item_group", - "id":"ant_food", + },{ + "type" : "item_group", + "id" : "ant_food", "items":[ ["meat", 50], ["veggy", 30], @@ -4067,41 +4353,42 @@ ["rock", 40], ["stick", 95], ["bio_metabolics", 10], + ["survivormap", 1], ["bio_blaster", 10] ] - },{ - "type":"item_group", - "id":"ant_egg", + },{ + "type" : "item_group", + "id" : "ant_egg", "items":[ ["ant_egg", 5] ] - },{ - "type":"item_group", - "id":"biollante", + },{ + "type" : "item_group", + "id" : "biollante", "items":[ ["biollante_bud", 1] ] - },{ - "type":"item_group", - "id":"bees", + },{ + "type" : "item_group", + "id" : "bees", "items":[ ["bee_sting", 5] ] - },{ - "type":"item_group", - "id":"fungal_sting", + },{ + "type" : "item_group", + "id" : "fungal_sting", "items":[ ["fighter_sting", 5] ] - },{ - "type":"item_group", - "id":"wasps", + },{ + "type" : "item_group", + "id" : "wasps", "items":[ ["wasp_sting", 5] ] - },{ - "type":"item_group", - "id":"robots", + },{ + "type" : "item_group", + "id" : "robots", "items":[ ["processor", 15], ["RAM", 22], @@ -4119,34 +4406,34 @@ ["battery", 50], ["plut_cell", 10] ] - },{ - "type":"item_group", - "id":"eyebot", + },{ + "type" : "item_group", + "id" : "eyebot", "items":[ ["flashlight", 40] ] - },{ - "type":"item_group", - "id":"manhack", + },{ + "type" : "item_group", + "id" : "manhack", "items":[ ["knife_combat", 14] ] - },{ - "type":"item_group", - "id":"skitterbot", + },{ + "type" : "item_group", + "id" : "skitterbot", "items":[ ["tazer", 3] ] - },{ - "type":"item_group", - "id":"secubot", + },{ + "type" : "item_group", + "id" : "secubot", "items":[ ["9mm", 8], ["steel_plate", 30] ] - },{ - "type":"item_group", - "id":"copbot", + },{ + "type" : "item_group", + "id" : "copbot", "items":[ ["baton", 8], ["tazer", 3], @@ -4155,32 +4442,32 @@ ["shocktonfa_off", 5], ["alloy_plate", 10] ] - },{ - "type":"item_group", - "id":"molebot", + },{ + "type" : "item_group", + "id" : "molebot", "items":[ ["spiked_plate", 15], ["hard_plate", 30] ] - },{ - "type":"item_group", - "id":"tripod", + },{ + "type" : "item_group", + "id" : "tripod", "items":[ ["flamethrower", 1], ["kevlar_plate", 10], ["alloy_plate", 10] ] - },{ - "type":"item_group", - "id":"chickenbot", + },{ + "type" : "item_group", + "id" : "chickenbot", "items":[ ["9mm", 8], ["kevlar_plate", 10], ["alloy_plate", 10] ] - },{ - "type":"item_group", - "id":"tankbot", + },{ + "type" : "item_group", + "id" : "tankbot", "items":[ ["tazer", 3], ["flamethrower", 1], @@ -4189,15 +4476,15 @@ ["kevlar_plate", 10], ["hard_plate", 30] ] - },{ - "type":"item_group", - "id":"turret", + },{ + "type" : "item_group", + "id" : "turret", "items":[ ["9mm", 8] ] - },{ - "type":"item_group", - "id":"helicopter", + },{ + "type" : "item_group", + "id" : "helicopter", "items":[ ["chain", 20], ["power_supply", 16], @@ -4234,11 +4521,13 @@ ["UPS_off", 5], ["adv_UPS_off", 3], ["chestrig", 10], + ["molle_pack", 8], ["legrig", 10], ["rucksack", 20], ["LAW_Packed", 30], ["m3_carlgustav", 1], ["gobag", 2], + ["recipe_raptor", 2], ["84x246mm_he", 3], ["84x246mm_hedp", 2], ["84x246mm_smoke", 3], @@ -4254,9 +4543,9 @@ ["signal_flare", 25], ["glasses_bal", 10] ] - },{ - "type":"item_group", - "id":"military", + },{ + "type" : "item_group", + "id" : "military", "items":[ ["m107a1" , 1], ["bipod" , 1], @@ -4318,9 +4607,17 @@ ["40mm_incendiary", 6], ["40mm_teargas", 5], ["40mm_smoke", 4], + ["40mm_flare", 4], ["40mm_flashbang", 8], ["40mm_shot", 12], ["40mm_flechette", 6], + ["20x66_shot", 4], + ["20x66_exp", 1], + ["20x66_inc", 1], + ["20x66_flare", 2], + ["20x66_frag", 1], + ["20x66_slug", 4], + ["20x66_flechette", 3], ["usp_9mm", 6], ["usp_45", 6], ["m4a1", 7], @@ -4331,6 +4628,7 @@ ["nx17", 1], ["m320", 10], ["mgl", 6], + ["rm802", 5], ["suppressor", 15], ["clip", 8], ["brass_catcher", 15], @@ -4352,14 +4650,17 @@ ["flamethrower", 1], ["binoculars", 20], ["masterkey", 2], + ["rm121aux", 1], ["shot_flechette", 5], ["chestrig", 10], + ["molle_pack", 8], ["legrig", 10], ["power_armor_basic", 5], ["power_armor_helmet_basic", 6], ["power_armor_frame", 4], ["spare_mag", 15], - ["canteen", 10], + ["canteen", 15], + ["2lcanteen", 10], ["jerrycan", 10], ["rucksack", 20], ["heatpack", 60], @@ -4399,11 +4700,12 @@ ["fungicide", 3], ["flaregun", 20], ["signal_flare", 25], + ["militarymap", 4], ["quikclot", 20] ] - },{ - "type":"item_group", - "id":"science", + },{ + "type" : "item_group", + "id" : "science", "items":[ ["water_clean", 90], ["bleach", 20], @@ -4443,7 +4745,9 @@ ["pocket_firearms", 2], ["SICP", 3], ["textbook_robots", 1], + ["recipe_elfa", 1], ["soldering_iron", 70], + ["solder_wire", 70], ["geiger_off", 8], ["teleporter", 10], ["canister_goo", 8], @@ -4463,15 +4767,16 @@ ["bio_heatsink", 10], ["bio_blood_filter", 10], ["software_useless", 10], - ["canteen", 10], + ["canteen", 15], + ["2lcanteen", 10], ["chemistry_set", 4], ["oxy_powder", 8], ["fungicide", 10], ["pur_tablets", 10] ] - },{ - "type":"item_group", - "id":"rare", + },{ + "type" : "item_group", + "id" : "rare", "items":[ ["mutagen", 8], ["purifier", 12], @@ -4480,6 +4785,7 @@ ["fetus", 1], ["id_science", 2], ["id_military", 3], + ["militarymap", 2], ["dump_pouch", 10], ["electrohack", 3], ["processor", 15], @@ -4515,11 +4821,13 @@ ["RPG", 1], ["RPG-7_ammo", 1], ["hazmat_suit", 5], + ["recipe_medicalmut", 10], + ["survivormap", 5], ["pur_tablets", 20] ] - },{ - "type":"item_group", - "id":"stash_food", + },{ + "type" : "item_group", + "id" : "stash_food", "items":[ ["water_clean", 90], ["cola", 70], @@ -4536,13 +4844,20 @@ ["con_milk", 20], ["jar_meat_pickled", 20] ] - },{ - "type":"item_group", - "id":"stash_ammo", + },{ + "type" : "item_group", + "id" : "stash_ammo", "items":[ ["bolt_steel", 7], ["shot_00", 8], ["shot_flechette", 2], + ["20x66_shot", 4], + ["20x66_exp", 1], + ["20x66_inc", 2], + ["20x66_flare", 3], + ["20x66_frag", 1], + ["20x66_slug", 4], + ["20x66_flechette", 3], ["shot_slug", 6], ["22_lr", 9], ["9mm", 8], @@ -4574,9 +4889,9 @@ ["signal_flare", 5], ["8mm_inc", 2] ] - },{ - "type":"item_group", - "id":"stash_wood", + },{ + "type" : "item_group", + "id" : "stash_wood", "items":[ ["stick", 95], ["ax", 8], @@ -4584,9 +4899,9 @@ ["2x4", 60], ["log", 20] ] - },{ - "type":"item_group", - "id":"stash_drugs", + },{ + "type" : "item_group", + "id" : "stash_drugs", "items":[ ["pills_sleep", 15], ["oxycodone", 7], @@ -4605,11 +4920,12 @@ ["crackpipe", 7], ["lsd", 6] ] - },{ - "type":"item_group", - "id":"drugdealer", + },{ + "type" : "item_group", + "id" : "drugdealer", "items":[ ["energy_drink", 55], + ["energy_drink_atomic", 8], ["knuckle_brass", 30], ["sports_drink", 35], ["purple_drink", 15], @@ -4688,9 +5004,9 @@ ["switchblade", 4], ["pocketwatch", 2] ] - },{ - "type":"item_group", - "id":"wreckage", + },{ + "type" : "item_group", + "id" : "wreckage", "items":[ ["chain", 20], ["steel_chunk", 30], @@ -4700,11 +5016,12 @@ ["cu_pipe", 50], ["rock", 40] ] - },{ - "type":"item_group", - "id":"npc_hacker", + },{ + "type" : "item_group", + "id" : "npc_hacker", "items":[ ["energy_drink", 55], + ["energy_drink_atomic", 12], ["mag_computer", 45], ["mag_electronics", 25], ["adderall", 10], @@ -4718,16 +5035,18 @@ ["computer_science", 7], ["solar_cell", 5], ["SICP", 3], + ["recipe_chimera", 1], ["soldering_iron", 70], + ["solder_wire", 70], ["textbook_weapwest", 2], ["textbook_weapeast", 2], ["textbook_armwest", 2], ["radio_book", 22], ["textbook_armeast", 2] ] - },{ - "type":"item_group", - "id":"trader_avoid", + },{ + "type" : "item_group", + "id" : "trader_avoid", "items":[ ["null", 10], ["corpse", 10], @@ -4780,13 +5099,20 @@ ["vaccine_shot", 10], ["bio_claws_weapon", 0] ] - },{ - "type":"item_group", - "id":"shia_stuff", + },{ + "type" : "item_group", + "id" : "shia_stuff", "items":[ ["knife_steak", 3], ["ax", 1] ] + },{ + "type" : "item_group", + "id" : "loincloth", + "items":[ + ["loincloth", 2], + ["loincloth_fur", 1], + ["loincloth_leather", 1] + ] } - ] diff --git a/data/json/items/ammo.json b/data/json/items/ammo.json index 5e5ca252bd877..32882211b3721 100644 --- a/data/json/items/ammo.json +++ b/data/json/items/ammo.json @@ -1398,6 +1398,30 @@ "stack_size" : 4, "effects" : ["COOKOFF", "SMOKE", "TRAIL"] }, + { "type" : "AMMO", + "id" : "40mm_flare", + "price" : 360, + "name" : "40mm flare", + "symbol" : "=", + "color" : "dark_gray", + "description" : "A 40mm signal flare. It will burn brightly for up to a minute, and will also leave a streak of smoke cover in its wake.", + "material" : "steel", + "volume" : 1, + "weight" : 230, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "40mm", + "casing" : "40mm_casing", + "damage" : 15, + "pierce" : 2, + "range" : 90, + "dispersion" : 2, + "recoil" : 17, + "count" : 4, + "stack_size" : 4, + "effects" : ["INCENDIARY", "SMOKE", "FLARE"] + }, { "type" : "AMMO", "id" : "40mm_flashbang", "price" : 400, @@ -2127,6 +2151,90 @@ "recoil" : 0, "count" : 200 }, + { "type" : "AMMO", + "id" : "solder_wire", + "price" : 500, + "name" : "solder", + "symbol" : "=", + "color" : "gray", + "description" : "A small spool of solder, able to be used in ammunition and electronics.", + "material" : "steel", + "volume" : 0, + "weight" : 3, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "components", + "damage" : 0, + "pierce" : 0, + "range" : 0, + "dispersion" : 0, + "recoil" : 0, + "count" : 200 + }, + { "type" : "AMMO", + "id" : "silver_small", + "price" : 1750, + "name" : "silver", + "symbol" : "=", + "color" : "gray", + "description" : "Small silver bits. Before the cataclysm, these would have been worth quite a bit. Still usable in making ammunition.", + "material" : "silver", + "volume" : 0, + "weight" : 3, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "components", + "damage" : 0, + "pierce" : 0, + "range" : 0, + "dispersion" : 0, + "recoil" : 0, + "count" : 200 + }, + { "type" : "AMMO", + "id" : "bismuth", + "price" : 1000, + "name" : "bismuth", + "symbol" : "=", + "color" : "gray", + "description" : "Bismuth fishing weights and scraps. Usable in making ammunition.", + "material" : "steel", + "volume" : 0, + "weight" : 3, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "components", + "damage" : 0, + "pierce" : 0, + "range" : 0, + "dispersion" : 0, + "recoil" : 0, + "count" : 200 + }, + { "type" : "AMMO", + "id" : "tin", + "price" : 750, + "name" : "tin", + "symbol" : "=", + "color" : "gray", + "description" : "Tin and pewter scraps. Usable in making ammo", + "material" : "steel", + "volume" : 0, + "weight" : 3, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "components", + "damage" : 0, + "pierce" : 0, + "range" : 0, + "dispersion" : 0, + "recoil" : 0, + "count" : 200 + }, { "type" : "AMMO", "id" : "gold_small", "price" : 5000, @@ -2731,7 +2839,7 @@ "recoil" : 14, "count" : 4, "stack_size" : 20, - "effects" : ["INCENDIARY", "FLARE"] + "effects" : ["INCENDIARY", "FLARE", "SMOKE"] }, { "type" : "AMMO", "id" : "rebar_rail", @@ -2777,6 +2885,294 @@ "recoil" : 0, "count" : 3 }, + { "type" : "AMMO", + "id" : "mininuke_mod", + "price" : 1800, + "name" : "modified mininuke", + "symbol" : "*", + "color" : "green", + "description" : "A heavy modified handheld nuclear device. Intended to be fired from a sepcialized launcher, its case has been cut down and it has been rigged to explode on impact. While it is now somewhat lighter than before, it can no longer be triggered manually.", + "material" : "plastic", + "volume" : 3, + "weight" : 3816, + "bashing" : 8, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "mininuke_mod", + "casing" : "NULL", + "damage" : 14, + "pierce" : 0, + "range" : 0, + "dispersion" : 0, + "recoil" : 0, + "count" : 1, + "stack_size" : 2, + "effects" : ["MININUKE_MOD"] + }, + { "type" : "AMMO", + "id" : "20x66_shot", + "price" : 900, + "name" : "20x66mm buckshot", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, buckshot type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 56, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 64, + "pierce" : 4, + "range" : 12, + "dispersion" : 0, + "recoil" : 38, + "count" : 40, + "stack_size" : 40, + "effects" : ["COOKOFF", "SHOT"] + }, + { "type" : "AMMO", + "id" : "20x66_flechette", + "price" : 1000, + "name" : "20x66mm flechette", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, flechette type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 52, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 46, + "pierce" : 32, + "range" : 18, + "dispersion" : 0, + "recoil" : 32, + "count" : 20, + "stack_size" : 40, + "effects" : ["COOKOFF", "SHOT"] + }, + { "type" : "AMMO", + "id" : "20x66_slug", + "price" : 1000, + "name" : "20x66mm slug", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, solid projectile type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 60, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 66, + "pierce" : 8, + "range" : 26, + "dispersion" : 6, + "recoil" : 42, + "count" : 40, + "stack_size" : 40, + "effects" : ["COOKOFF"] + }, + { "type" : "AMMO", + "id" : "20x66_exp", + "price" : 1000, + "name" : "20x66mm explosive", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, explosive projectile type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 62, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 16, + "pierce" : 4, + "range" : 20, + "dispersion" : 8, + "recoil" : 42, + "count" : 20, + "stack_size" : 40, + "effects" : ["COOKOFF", "EXPLOSIVE"] + }, + { "type" : "AMMO", + "id" : "20x66_frag", + "price" : 1000, + "name" : "20x66mm frag", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, explosive fragmentation type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 64, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 16, + "pierce" : 4, + "range" : 20, + "dispersion" : 8, + "recoil" : 42, + "count" : 20, + "stack_size" : 40, + "effects" : ["COOKOFF", "FRAG"] + }, + { "type" : "AMMO", + "id" : "20x66_flare", + "price" : 1000, + "name" : "20x66mm flare", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, signal flare type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 44, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 20, + "pierce" : 6, + "range" : 80, + "dispersion" : 4, + "recoil" : 34, + "count" : 20, + "stack_size" : 40, + "effects" : ["INCENDIARY", "FLARE", "SMOKE"] + }, + { "type" : "AMMO", + "id" : "20x66_inc", + "price" : 1000, + "name" : "20x66mm incendiary", + "symbol" : "=", + "color" : "pink", + "description" : "20x66mm caseless shotgun rounds, incendiary type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 60, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 54, + "pierce" : 12, + "range" : 30, + "dispersion" : 8, + "recoil" : 38, + "count" : 20, + "stack_size" : 40, + "effects" : ["INCENDIARY"] + }, + { "type" : "AMMO", + "id" : "20x66_beanbag", + "price" : 1100, + "name" : "20x66mm beanbag", + "symbol" : "=", + "color" : "pink", + "description" : "A20x66mm caseless shotgun rounds, sublethal beanbag type. Proprietary ammunition for Rivtech shotguns. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 66, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 14, + "pierce" : 0, + "range" : 26, + "dispersion" : 8, + "recoil" : 40, + "count" : 20, + "stack_size" : 40, + "effects" : ["COOKOFF", "LARGE_BEANBAG"] + }, + { "type" : "AMMO", + "id" : "20x66_bootleg_shot", + "price" : 700, + "name" : "handmade 20x66mm buckshot", + "symbol" : "=", + "color" : "pink", + "description" : "Handcrafted, bootleg, duplicates of Rivtech 20x66mm caseless buckshot rounds. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 64, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 44, + "pierce" : 2, + "range" : 10, + "dispersion" : 4, + "recoil" : 44, + "count" : 40, + "stack_size" : 40, + "effects" : ["COOKOFF", "SHOT"] + }, + { "type" : "AMMO", + "id" : "20x66_bootleg_flechette", + "price" : 800, + "name" : "handmade 20x66mm flechette", + "symbol" : "=", + "color" : "pink", + "description" : "Handcrafted, bootleg, duplicates of Rivtech 20x66mm caseless flechette rounds. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 60, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 40, + "pierce" : 22, + "range" : 16, + "dispersion" : 8, + "recoil" : 38, + "count" : 40, + "stack_size" : 40, + "effects" : ["COOKOFF", "SHOT"] + }, + { "type" : "AMMO", + "id" : "20x66_bootleg_slug", + "price" : 800, + "name" : "handmade 20x66mm slug", + "symbol" : "=", + "color" : "pink", + "description" : "Handcrafted, bootleg, duplicates of Rivtech 20x66mm caseless solid projectile rounds. Being caseless rounds, these cannot be disassembled or reloaded.", + "material" : "steel", + "volume" : 1, + "weight" : 68, + "bashing" : 1, + "cutting" : 0, + "to_hit" : 0, + "ammo_type" : "20x66mm", + "casing" : "NULL", + "damage" : 58, + "pierce" : 6, + "range" : 24, + "dispersion" : 12, + "recoil" : 48, + "count" : 40, + "stack_size" : 40, + "effects" : ["COOKOFF"] + }, { "type" : "AMMO", "id" : "50_casing", "price" : 300, diff --git a/data/json/items/archery.json b/data/json/items/archery.json index 2cbab404fc982..7055022a9607e 100644 --- a/data/json/items/archery.json +++ b/data/json/items/archery.json @@ -924,7 +924,7 @@ "bashing" : 1, "cutting" : 12, "to_hit" : 0, - "ammo_type" : "NULL", + "ammo_type" : "thrown", "casing" : "NULL", "damage" : 0, "pierce" : 0, @@ -946,7 +946,7 @@ "bashing" : 6, "cutting" : 16, "to_hit" : 0, - "ammo_type" : "NULL", + "ammo_type" : "thrown", "casing" : "NULL", "damage" : 0, "pierce" : 0, @@ -955,6 +955,28 @@ "recoil" : 0, "count" : 3 }, + { "type" : "AMMO", + "id" : "lawn_dart", + "price" : 100, + "name" : "lawn dart", + "symbol" : ";", + "color" : "yellow", + "description" : "A large plastic dart made for outdoor games.", + "material" : ["plastic", "iron"], + "volume" : 2, + "weight" : 175, + "bashing" : 0, + "cutting" : 16, + "to_hit" : -1, + "ammo_type" : "thrown", + "casing" : "NULL", + "damage" : 0, + "pierce" : 0, + "range" : 0, + "dispersion" : 0, + "recoil" : 0, + "count" : 2 + }, { "id":"arrow_plastic", "type":"AMMO", diff --git a/data/json/items/armor.json b/data/json/items/armor.json index a54e5551d8771..a6dbbce32436f 100644 --- a/data/json/items/armor.json +++ b/data/json/items/armor.json @@ -409,7 +409,8 @@ "encumbrance" : 1, "bashing" : 4, "coverage" : 95, - "material_thickness" : 5 + "material_thickness" : 5, + "use_action" : "BOOTS" }, { "type" : "ARMOR", @@ -433,7 +434,8 @@ "bashing" : 4, "flags" : ["VARSIZE", "WATERPROOF"], "coverage" : 95, - "material_thickness" : 5 + "material_thickness" : 5, + "use_action" : "BOOTS" }, { "type" : "ARMOR", @@ -457,7 +459,8 @@ "bashing" : 4, "flags" : ["VARSIZE", "WATERPROOF"], "coverage" : 90, - "material_thickness" : 6 + "material_thickness" : 6, + "use_action" : "BOOTS" }, { "type" : "ARMOR", @@ -1576,7 +1579,7 @@ "material" : ["kevlar", "plastic"], "volume" : 5, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 12, "encumbrance" : 2, @@ -1600,7 +1603,7 @@ "material" : ["leather", "cotton"], "volume" : 7, "cutting" : 0, - "warmth" : 5, + "warmth" : 0, "phase" : "solid", "enviromental_protection" : 0, "encumbrance" : 0, @@ -1969,6 +1972,78 @@ "coverage" : 15, "material_thickness" : 1 }, + { + "type" : "ARMOR", + "id" : "loincloth", + "name" : "loincloth", + "weight" : 32, + "color" : "brown", + "covers" : ["LEGS"], + "to_hit" : 0, + "storage" : 0, + "symbol" : "[", + "description" : "Rags stitched together and tied into a makeshift loincloth. Covers your modesty, but not much else.", + "price" : 25, + "material" : ["cotton", "null"], + "volume" : 1, + "cutting" : 0, + "warmth" : 0, + "phase" : "solid", + "enviromental_protection" : 0, + "encumbrance" : 0, + "bashing" : -5, + "flags" : ["VARSIZE"], + "coverage" : 5, + "material_thickness" : 1 + }, + { + "type" : "ARMOR", + "id" : "loincloth_fur", + "name" : "fur loincloth", + "weight" : 64, + "color" : "brown", + "covers" : ["LEGS"], + "to_hit" : 0, + "storage" : 0, + "symbol" : "[", + "description" : "A fur pelt tied into a loincloth. Covers your modesty, but not much else. Now you are a true barbarian warrior.", + "price" : 50, + "material" : ["fur", "null"], + "volume" : 1, + "cutting" : 0, + "warmth" : 5, + "phase" : "solid", + "enviromental_protection" : 0, + "encumbrance" : 0, + "bashing" : -3, + "flags" : ["VARSIZE"], + "coverage" : 5, + "material_thickness" : 1 + }, + { + "type" : "ARMOR", + "id" : "loincloth_leather", + "name" : "leather loincloth", + "weight" : 64, + "color" : "brown", + "covers" : ["LEGS"], + "to_hit" : 0, + "storage" : 0, + "symbol" : "[", + "description" : "Leather patches stitched together and tied into a makeshift loincloth. Covers your modesty, but not much else.", + "price" : 50, + "material" : ["leather", "null"], + "volume" : 1, + "cutting" : 0, + "warmth" : 0, + "phase" : "solid", + "enviromental_protection" : 0, + "encumbrance" : 0, + "bashing" : -2, + "flags" : ["VARSIZE"], + "coverage" : 5, + "material_thickness" : 2 + }, { "type" : "ARMOR", "id" : "sweatshirt", @@ -3040,7 +3115,8 @@ "bashing" : -3, "flags" : ["WATERPROOF"], "coverage" : 100, - "material_thickness" : 3 + "material_thickness" : 3, + "use_action" : "BOOTS" }, { "type" : "ARMOR", @@ -4231,6 +4307,29 @@ "coverage" : 30, "material_thickness" : 3 }, + { + "type" : "ARMOR", + "id" : "molle_pack", + "name" : "MOLLE pack", + "weight" : 966, + "color" : "green", + "covers" : ["TORSO"], + "to_hit" : 0, + "storage" : 60, + "symbol" : "[", + "description" : "The Modular Lightweight Load-carrying Equipment is an advanced military backpack. Covered with pockets and straps, it strikes a fine balance between storage space and encumbrance.", + "price" : 360, + "material" : ["cotton", "kevlar"], + "volume" : 12, + "cutting" : 0, + "warmth" : 10, + "phase" : "solid", + "enviromental_protection" : 0, + "encumbrance" : 1, + "bashing" : -4, + "coverage" : 35, + "material_thickness" : 2 + }, { "type" : "ARMOR", "id" : "rucksack", @@ -5476,7 +5575,7 @@ "material" : ["kevlar", "cotton"], "volume" : 42, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 5, "encumbrance" : 1, @@ -5500,7 +5599,7 @@ "material" : ["kevlar", "leather"], "volume" : 46, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 5, "encumbrance" : 2, @@ -5531,7 +5630,8 @@ "bashing" : 7, "flags" : ["VARSIZE", "WATERPROOF"], "coverage" : 100, - "material_thickness" : 5 + "material_thickness" : 5, + "use_action" : "BOOTS" }, { "type" : "ARMOR", @@ -5572,7 +5672,7 @@ "material" : ["kevlar", "steel"], "volume" : 48, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 5, "encumbrance" : 3, @@ -5620,7 +5720,7 @@ "material" : ["steel", "kevlar"], "volume" : 12, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 5, "encumbrance" : 1, @@ -5640,12 +5740,12 @@ "to_hit" : 2, "storage" : 0, "symbol" : "[", - "description" : "A pair of heavily customized, armored gloves, modified to be easy of wear while providing maximum protection under extreme conditions.", + "description" : "A pair of heavily customized, armored gloves, modified to be easy to wear while providing maximum protection under extreme conditions.", "price" : 180, "material" : ["kevlar", "steel"], "volume" : 4, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 5, "encumbrance" : 1, @@ -5670,7 +5770,7 @@ "material" : ["kevlar", "steel"], "volume" : 10, "cutting" : 0, - "warmth" : 25, + "warmth" : 15, "phase" : "solid", "enviromental_protection" : 5, "encumbrance" : 3, @@ -6137,7 +6237,7 @@ "to_hit" : -5, "storage" : 0, "symbol" : "[", - "description" : "A huge duffel bag with backpack attached, both packed to the gills. Judging by the feel, a National Guard soldier could have packed this to be ready for deployment. /n Disassemble to unpack and enjoy.", + "description" : "A huge duffel bag with backpack attached, both packed to the gills. Judging by the feel, a National Guard soldier could have packed this to be ready for deployment. Disassemble to unpack and enjoy.", "price" : 1000, "material" : ["cotton", "plastic"], "volume" : 143, diff --git a/data/json/items/books.json b/data/json/items/books.json index 2f324be38c4fc..ecf8e0ba56666 100644 --- a/data/json/items/books.json +++ b/data/json/items/books.json @@ -3057,6 +3057,27 @@ "price" : 300, "required_level" : 5 }, + { + "type" : "BOOK", + "id" : "recipe_medicalmut", + "name" : "PE023 \"Medical\": Application and Findings", + "max_level" : 9, + "description" : "This binder of highly technical papers describes some new chemical formula, and its effects on human subjects. It's stamped \"APPROVED\"....", + "weight" : 1934, + "to_hit" : 1, + "color" : "white", + "intelligence" : 12, + "symbol" : "?", + "material" : ["paper", "plastic"], + "volume" : 7, + "bashing" : 5, + "cutting" : 0, + "time" : 35, + "fun" : -2, + "skill" : "cooking", + "price" : 500, + "required_level" : 8 + }, { "type" : "BOOK", "id" : "guidebook", @@ -3077,5 +3098,110 @@ "bashing" : 2, "cutting" : 0, "to_hit" : 0 + }, + { + "type" : "BOOK", + "id" : "recipe_alpha", + "name" : "PE050 \"Alpha\": Preliminary Report", + "description" : "This sheaf of papers-dated two weeks before all this started-describes some new chemical formula, and its effects on human subjects. It's stamped \"APPROVED\"...", + "weight" : 50, + "volume" : 2, + "price" : 400, + "time" : 45, + "fun" : -2, + "skill" : "cooking", + "max_level" : 9, + "required_level" : 8, + "intelligence" : 12, + "color" : "light_green", + "symbol" : "?", + "material" : ["paper", "null"], + "bashing" : -3, + "cutting" : 0, + "to_hit" : 0 + }, + { + "type" : "BOOK", + "id" : "recipe_chimera", + "name" : "PE065 \"Chimera\": Best Practices", + "description" : "This sheaf of papers-dated the day before you evacuated-describes a new chemical formula in detail and supplies instructions for its use as some sort of ...crowd-control catalyst? That can't be right...", + "weight" : 50, + "volume" : 2, + "price" : 400, + "time" : 45, + "fun" : -2, + "skill" : "cooking", + "max_level" : 9, + "required_level" : 8, + "intelligence" : 12, + "color" : "light_green", + "symbol" : "?", + "material" : ["paper", "null"], + "bashing" : -3, + "cutting" : 0, + "to_hit" : 0 + }, + { + "type" : "BOOK", + "id" : "recipe_elfa", + "name" : "standpipe maintenance log", + "description" : "This binder details the scheduled maintenance for several plumbing systems throughout the facility. However, some of the log sheets seem to be filled with...a chemical formula?", + "weight" : 400, + "volume" : 3, + "price" : 400, + "time" : 45, + "fun" : -2, + "skill" : "cooking", + "max_level" : 9, + "required_level" : 9, + "intelligence" : 12, + "color" : "gray", + "symbol" : "?", + "material" : ["paper", "plastic"], + "bashing" : -3, + "cutting" : 0, + "to_hit" : 0 + }, + { + "type" : "BOOK", + "id" : "decoy_elfa", + "name" : "standpipe maintenance log", + "description" : "This binder details the scheduled maintenance for several plumbing systems throughout the facility.", + "weight" : 400, + "volume" : 3, + "price" : 400, + "time" : 45, + "fun" : -2, + "skill" : "none", + "intelligence" : 8, + "required_level" : 0, + "max_level" : 0, + "color" : "gray", + "symbol" : "?", + "material" : ["paper", "plastic"], + "bashing" : -3, + "cutting" : 0, + "to_hit" : 0 + }, + { + "type" : "BOOK", + "id" : "recipe_raptor", + "name" : "PE070 \"Raptor\": Proposal", + "description" : "This sheaf of papers-dated the day you left the shelter!-is a highly speculative proposal for focusing \"PE065\". Scribbled notes throughout seem to think that it might work, but that there's no time.", + "weight" : 50, + "volume" : 2, + "price" : 400, + "time" : 45, + "fun" : -2, + "skill" : "cooking", + "max_level" : 10, + "required_level" : 10, + "intelligence" : 12, + "color" : "light_green", + "symbol" : "?", + "material" : ["paper", "null"], + "bashing" : -3, + "cutting" : 0, + "to_hit" : 0 } ] diff --git a/data/json/items/comestibles.json b/data/json/items/comestibles.json index d42bec77a644e..bd8d731d15a1b 100644 --- a/data/json/items/comestibles.json +++ b/data/json/items/comestibles.json @@ -287,6 +287,35 @@ "bashing" : 0, "fun" : 5 }, + { + "type" : "COMESTIBLE", + "id" : "energy_drink_atomic", + "name" : "atomic energy drink", + "weight" : 267, + "color" : "light_green", + "addiction_type" : "caffine", + "spoils_in" : 0, + "use_action" : "ATOMIC_CAFF", + "stim" : 27, + "container" : "can_drink", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 45, + "heal" : -6, + "addiction_potential" : 9, + "nutrition" : 2, + "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" : 120, + "material" : "null", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "fun" : -1 + }, { "type" : "COMESTIBLE", "id" : "cola", @@ -1700,6 +1729,36 @@ "bashing" : 0, "fun" : 0 }, + { + "type" : "COMESTIBLE", + "id" : "mutagen_medical", + "name" : "medical mutagen", + "weight" : 250, + "color" : "light_green", + "addiction_type" : "none", + "spoils_in" : 0, + "use_action" : "MUTAGEN", + "flags" : ["MUTAGEN_MEDICAL"], + "stim" : 0, + "container" : "flask_glass", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 0, + "heal" : -2, + "addiction_potential" : 0, + "nutrition" : 0, + "description" : "A rare substance of uncertain origins. Causes you to mutate.", + "price" : 1000, + "material" : "NULL", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "fun" : 0 + }, { "type" : "COMESTIBLE", "id" : "purifier", @@ -1728,6 +1787,126 @@ "charges" : 1, "bashing" : 0, "fun" : 0 + }, + { + "type" : "COMESTIBLE", + "id" : "mutagen_chimera", + "name" : "chimera mutagen", + "weight" : 250, + "color" : "light_green", + "addiction_type" : "none", + "spoils_in" : 0, + "use_action" : "MUTAGEN", + "flags" : ["MUTAGEN_CHIMERA"], + "stim" : 0, + "container" : "flask_glass", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 0, + "heal" : -2, + "addiction_potential" : 0, + "nutrition" : 0, + "description" : "An extremely rare mutagen cocktail.", + "price" : 1000, + "material" : "NULL", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "fun" : 0 + }, + { + "type" : "COMESTIBLE", + "id" : "mutagen_alpha", + "name" : "alpha mutagen", + "weight" : 250, + "color" : "light_green", + "addiction_type" : "none", + "spoils_in" : 0, + "use_action" : "MUTAGEN", + "flags" : ["MUTAGEN_ALPHA"], + "stim" : 0, + "container" : "flask_glass", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 0, + "heal" : -2, + "addiction_potential" : 0, + "nutrition" : 0, + "description" : "An extremely rare mutagen cocktail.", + "price" : 1000, + "material" : "NULL", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "fun" : 0 + }, + { + "type" : "COMESTIBLE", + "id" : "mutagen_elfa", + "name" : "elfa mutagen", + "weight" : 250, + "color" : "light_green", + "addiction_type" : "none", + "spoils_in" : 0, + "use_action" : "MUTAGEN", + "flags" : ["MUTAGEN_ELFA"], + "stim" : 0, + "container" : "flask_glass", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 0, + "heal" : -2, + "addiction_potential" : 0, + "nutrition" : 0, + "description" : "An extremely rare mutagen cocktail.", + "price" : 1000, + "material" : "NULL", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "fun" : 0 + }, + { + "type" : "COMESTIBLE", + "id" : "mutagen_raptor", + "name" : "raptor mutagen", + "weight" : 250, + "color" : "light_green", + "addiction_type" : "none", + "spoils_in" : 0, + "use_action" : "MUTAGEN", + "flags" : ["MUTAGEN_RAPTOR"], + "stim" : 0, + "container" : "flask_glass", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 0, + "heal" : -2, + "addiction_potential" : 0, + "nutrition" : 0, + "description" : "An extremely rare mutagen cocktail.", + "price" : 1000, + "material" : "NULL", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "fun" : 0 }, { "type" : "COMESTIBLE", @@ -1819,6 +1998,36 @@ "flags" : ["EATEN_HOT"], "fun" : 6 }, + { + "type" : "COMESTIBLE", + "id" : "atomic_coffee", + "name" : "atomic coffee", + "weight" : 257, + "color" : "brown", + "addiction_type" : "caffine", + "spoils_in" : 0, + "use_action" : "ATOMIC_CAFF", + "stim" : 25, + "container" : "bottle_plastic", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : 40, + "heal" : -5, + "addiction_potential" : 8, + "nutrition" : 4, + "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" : 90, + "material" : "null", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 1, + "bashing" : 0, + "flags" : ["EATEN_HOT"], + "fun" : 10 + }, { "type" : "COMESTIBLE", "id" : "choc_drink", @@ -2873,6 +3082,36 @@ "bashing" : 0, "flags" : ["EATEN_HOT"], "fun" : 5 + }, + { + "type" : "COMESTIBLE", + "id" : "sandwich_human", + "name" : "slob sandwich", + "weight" : 186, + "color" : "light_gray", + "addiction_type" : "none", + "spoils_in" : 36, + "use_action" : "NONE", + "stim" : 0, + "container" : "wrapper", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : 0, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 90, + "description" : "Bread and human flesh, surprise.", + "price" : 60, + "material" : "hflesh", + "tool" : "null", + "volume" : 1, + "cutting" : 0, + "phase" : "solid", + "charges" : 1, + "bashing" : 0, + "flags" : ["EATEN_HOT"], + "fun" : 5 }, { "type" : "COMESTIBLE", @@ -5091,6 +5330,36 @@ "bashing" : 0, "flags" : ["EATEN_HOT"], "fun" : 10 + }, + { + "type" : "COMESTIBLE", + "id" : "pizza_human", + "name" : "poser pizza", + "weight" : 175, + "color" : "light_red", + "addiction_type" : "none", + "spoils_in" : 48, + "use_action" : "NONE", + "stim" : 0, + "container" : "box_small", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : 0, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 50, + "description" : "A meat pizza, for all the cannibals out there. Chock full of minced human flesh and heavily seasoned.", + "price" : 80, + "material" : "hflesh", + "tool" : "null", + "volume" : 8, + "cutting" : 0, + "phase" : "solid", + "charges" : 4, + "bashing" : 0, + "flags" : ["EATEN_HOT"], + "fun" : 10 }, { "type" : "COMESTIBLE", @@ -5441,6 +5710,35 @@ "charges" : 2, "bashing" : 0, "fun" : 2 + }, + { + "type" : "COMESTIBLE", + "id" : "hflesh_vac", + "name" : "salted simpleton slices", + "weight" : 120, + "color" : "red", + "addiction_type" : "none", + "spoils_in" : 48, + "use_action" : "NONE", + "stim" : 0, + "container" : "bag_plastic", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : -5, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 25, + "description" : "Human flesh slices cured in brine and vacuum-packed. Salty but tasty in a pinch. ", + "price" : 50, + "material" : "hflesh", + "tool" : "null", + "volume" : 1, + "cutting" : 0, + "phase" : "solid", + "charges" : 2, + "bashing" : 0, + "fun" : 2 }, { "type" : "COMESTIBLE", @@ -5529,6 +5827,36 @@ "bashing" : 0, "flags" : ["EATEN_HOT"], "fun" : 15 + }, + { + "type" : "COMESTIBLE", + "id" : "spaghetti_human", + "name" : "scoundrel spaghetti", + "weight" : 350, + "color" : "red", + "addiction_type" : "none", + "spoils_in" : 48, + "use_action" : "NONE", + "stim" : 0, + "container" : "null", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : 0, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 100, + "description" : "Spaghetti covered with a thick human flesh sauce. Tastes great if you enjoy that kind of thing. ", + "price" : 100, + "material" : "hflesh", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "solid", + "charges" : 2, + "bashing" : 0, + "flags" : ["EATEN_HOT"], + "fun" : 15 }, { "type" : "COMESTIBLE", @@ -6704,7 +7032,7 @@ "addiction_type" : "alcohol", "spoils_in" : 0, "use_action" : "ALCOHOL", - "stim" : -24, + "stim" : -14, "container" : "bottle_glass", "to_hit" : 0, "comestible_type" : "DRINK", @@ -6821,7 +7149,7 @@ "addiction_type" : "none", "spoils_in" : 90, "use_action" : "NONE", - "stim" : -24, + "stim" : 0, "container" : "jar_3l_glass", "to_hit" : 0, "comestible_type" : "DRINK", @@ -6839,7 +7167,7 @@ "phase" : "liquid", "charges" : 1, "bashing" : 0, - "fun" : -2, + "fun" : 2, "flags" : ["USE_EAT_VERB"] }, { @@ -6851,7 +7179,7 @@ "addiction_type" : "none", "spoils_in" : 90, "use_action" : "NONE", - "stim" : -24, + "stim" : 0, "container" : "jar_3l_glass", "to_hit" : 0, "comestible_type" : "DRINK", @@ -6869,7 +7197,7 @@ "phase" : "liquid", "charges" : 1, "bashing" : 0, - "fun" : -2, + "fun" : 2, "flags" : ["USE_EAT_VERB"] }, { @@ -6961,6 +7289,36 @@ "bashing" : 0, "flags" : ["EATEN_HOT"], "fun" : 20 + }, + { + "type" : "COMESTIBLE", + "id" : "cheeseburgerhuman", + "name" : "chump cheeseburger", + "weight" : 340, + "color" : "brown", + "addiction_type" : "none", + "spoils_in" : 36, + "use_action" : "NONE", + "stim" : 1, + "container" : "wrapper", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : 0, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 140, + "description" : "A sandwich of minced human flesh and cheese with condiments. The apex of post-cataclysm cannibalistic culinary achievement.", + "price" : 100, + "material" : "hflesh", + "tool" : "null", + "volume" : 1, + "cutting" : 0, + "phase" : "solid", + "charges" : 1, + "bashing" : 0, + "flags" : ["EATEN_HOT"], + "fun" : 20 }, { "type" : "COMESTIBLE", @@ -6991,6 +7349,36 @@ "bashing" : 0, "flags" : ["EATEN_HOT"], "fun" : 16 + }, + { + "type" : "COMESTIBLE", + "id" : "bobburger", + "name" : "bobburger", + "weight" : 300, + "color" : "brown", + "addiction_type" : "none", + "spoils_in" : 36, + "use_action" : "NONE", + "stim" : 1, + "container" : "wrapper", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : 0, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 120, + "description" : "A sandwich of minced human flesh with condiments.", + "price" : 90, + "material" : "hflesh", + "tool" : "null", + "volume" : 1, + "cutting" : 0, + "phase" : "solid", + "charges" : 1, + "bashing" : 0, + "flags" : ["EATEN_HOT"], + "fun" : 16 }, { "type" : "COMESTIBLE", @@ -7401,7 +7789,7 @@ "volume" : 1, "cutting" : 0, "phase" : "solid", - "charges" : 10, + "charges" : 15, "stack_size" : 100, "bashing" : 0, "fun" : 0 @@ -8050,7 +8438,7 @@ "addiction_type" : "none", "spoils_in" : 90, "use_action" : "NONE", - "stim" : -24, + "stim" : 0, "container" : "jar_3l_glass", "to_hit" : 0, "comestible_type" : "DRINK", @@ -8068,7 +8456,7 @@ "phase" : "liquid", "charges" : 1, "bashing" : 0, - "fun" : -2, + "fun" : 2, "flags" : ["USE_EAT_VERB"] }, { @@ -8274,6 +8662,35 @@ "charges" : 2, "bashing" : 0, "fun" : 0 + }, + { + "type" : "COMESTIBLE", + "id" : "dry_hflesh", + "name" : "dehydrated human flesh", + "weight" : 56, + "color" : "red", + "addiction_type" : "none", + "spoils_in" : 0, + "use_action" : "NONE", + "stim" : 0, + "container" : "null", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : -3, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 20, + "description" : "Dehydrated human flesh flakes. With proper storage, this dried food will remain edible for an incredibly long time.", + "price" : 90, + "material" : "hflesh", + "tool" : "null", + "volume" : 1, + "cutting" : 0, + "phase" : "solid", + "charges" : 2, + "bashing" : 0, + "fun" : 0 }, { "type" : "COMESTIBLE", @@ -8303,6 +8720,35 @@ "charges" : 2, "bashing" : 0, "fun" : 2 + }, + { + "type" : "COMESTIBLE", + "id" : "rehydrated_hflesh", + "name" : "rehydrated human flesh", + "weight" : 156, + "color" : "light_red", + "addiction_type" : "none", + "spoils_in" : 24, + "use_action" : "NONE", + "stim" : 0, + "container" : "null", + "to_hit" : 0, + "comestible_type" : "FOOD", + "symbol" : "%", + "quench" : 0, + "heal" : 0, + "addiction_potential" : 0, + "nutrition" : 22, + "description" : "Reconstituted human flesh flakes, which are much more enjoyable to eat now that they have been rehydrated.", + "price" : 90, + "material" : "hflesh", + "tool" : "null", + "volume" : 1, + "cutting" : 0, + "phase" : "solid", + "charges" : 2, + "bashing" : 0, + "fun" : 2 }, { "type" : "COMESTIBLE", @@ -8535,5 +8981,34 @@ "charges" : 1, "bashing" : 0, "fun" : 3 + }, + { + "type" : "COMESTIBLE", + "id" : "single_malt_whiskey", + "name" : "single malt whiskey", + "weight" : 33, + "color" : "brown", + "addiction_type" : "alcohol", + "spoils_in" : 0, + "use_action" : "ALCOHOL", + "stim" : -12, + "container" : "wooden_barrel", + "to_hit" : 0, + "comestible_type" : "DRINK", + "symbol" : "~", + "quench" : -12, + "heal" : -2, + "addiction_potential" : 5, + "nutrition" : 4, + "description" : "Only the finest whiskey straight from the bung.", + "price" : 85, + "material" : "null", + "tool" : "null", + "volume" : 2, + "cutting" : 0, + "phase" : "liquid", + "charges" : 7, + "bashing" : 0, + "fun" : 17 } ] diff --git a/data/json/items/containers.json b/data/json/items/containers.json index 6af1469039254..dbaa0b8a841e1 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -66,6 +66,25 @@ "contains": 1, "flags": ["RIGID", "WATERTIGHT"] }, + { + "id":"bowl_pewter", + "type":"CONTAINER", + "color":"light_cyan", + "symbol":")", + "to_hit":1, + "name":"pewter bowl", + "description":"A pewter bowl. Can be used as a container or as a tool. Holds 250 ml of liquid.", + "cutting":0, + "price":1, + "weight":50, + "volume":1, + "bashing":2, + "cutting":0, + "to_hit":1, + "material":"steel", + "contains":1, + "flags":[ "RIGID" ] + }, { "id": "can_food", "type": "CONTAINER", @@ -117,6 +136,23 @@ "contains": 6, "flags": ["RIGID", "SEALS", "WATERTIGHT"] }, + { + "id": "2lcanteen", + "type": "CONTAINER", + "symbol": ")", + "color": "dark_gray", + "name": "2.5L canteen", + "description": "A large plastic water canteen, with a 2.5 liter capacity and strap.", + "price": 1250, + "weight": 155, + "volume": 10, + "bashing": -8, + "cutting": 0, + "to_hit": 1, + "material": "plastic", + "contains": 10, + "flags": ["RIGID", "SEALS", "WATERTIGHT"] + }, { "id": "jerrycan", "type": "CONTAINER", @@ -140,15 +176,15 @@ "symbol": ")", "color": "light_cyan", "name": "gallon jug", - "description": "A standard plastic jug used for household cleaning chemicals.", + "description": "A standard plastic jug used for milk and household cleaning chemicals.", "price": 2500, "weight": 190, - "volume": 10, + "volume": 15, "bashing": -8, "cutting": 0, "to_hit": 1, "material": "plastic", - "contains": 10, + "contains": 15, "flags": ["RIGID", "SEALS", "WATERTIGHT"] }, { @@ -202,6 +238,23 @@ "contains": 100, "flags": ["RIGID", "SEALS", "WATERTIGHT"] }, + { + "id" : "metal_tank", + "type": "CONTAINER", + "symbol" : "}", + "color" : "light_cyan", + "name" : "metal tank", + "description" : "A metal tank for holding liquids. Useful for crafting.", + "price" : 40, + "weight" : 2834, + "volume" : 15, + "bashing" : 3, + "cutting" : 0, + "to_hit" : -2, + "contains" : 15, + "material" : ["steel", "null"], + "flags" : ["RIGID", "SEALS", "WATERTIGHT"] + }, { "id": "keg", "type": "CONTAINER", @@ -303,5 +356,22 @@ "to_hit": -2, "contains": 10, "material": "paper" + }, + { + "id": "wooden_barrel", + "type": "CONTAINER", + "symbol": ")", + "color": "brown", + "name": "wooden barrel", + "description": "Traditionally made of white oak; these vessels are known for delivering delicious whiskey to the future. It has a capacity of 100 liters.", + "price": 9500, + "weight": 42408, + "volume": 400, + "bashing": -5, + "cutting": 0, + "to_hit": -5, + "material": ["wood", "steel"], + "contains": 400, + "flags": ["RIGID", "SEALS", "WATERTIGHT"] } ] diff --git a/data/json/items/melee.json b/data/json/items/melee.json index 4048f87db0d35..81ebf219e5ef9 100644 --- a/data/json/items/melee.json +++ b/data/json/items/melee.json @@ -694,6 +694,22 @@ "to_hit": -8 }, + { + "type":"GENERIC", + "id": "silver", + "symbol": "/", + "color": "gray", + "name": "silver bar", + "description": "A large bar of silver. Before the cataclysm, this would've been worth quite a bit; now its value is greatly diminished.", + "price": 1000, + "material": "silver", + "weight": 4825, + "volume": 2, + "bashing": 10, + "cutting": 0, + "to_hit": -1 + }, + { "type":"GENERIC", "id": "coal", @@ -1632,7 +1648,7 @@ "symbol" : "]", "color": "brown", "name": "nail knuckles", - "description": "A pair of knuckles consisting of two small squares of wood with several nails coming through them. Usefull in nasty street fights .", + "description": "A pair of knuckles consisting of two small squares of wood with several nails coming through them. Useful in nasty street fights.", "material": "wood", "price": 0, "volume": 1, @@ -1646,7 +1662,7 @@ "type":"GENERIC", "id" : "homewrecker", "name" : "homewrecker", - "description" : "A long peice of wood with several chunks of steel firmly tied to it. The resulting weapon is unwieldy and slow but very heavy hitting.", + "description" : "A long piece of wood with several chunks of steel firmly tied to it. The resulting weapon is unwieldy and slow but very heavy hitting.", "weight" : 3024, "to_hit" : -3, "color" : "brown", @@ -1922,6 +1938,23 @@ "flags" : ["SPEAR"], "price" : 40 }, + { + "type":"GENERIC", + "id" : "javelin_iron", + "name" : "iron javelin", + "description" : "An iron-tipped wooden throwing spear. The grip area has also be carved and covered for better grip.", + "weight" : 960, + "to_hit" : 2, + "color" : "light_gray", + "symbol" : "/", + "material" : ["wood", "iron"], + "techniques" : ["WBLOCK_1", "RAPID"], + "volume" : 4, + "bashing" : 5, + "cutting" : 15, + "flags" : ["SPEAR"], + "price" : 90 + }, { "type":"GENERIC", "id" : "poppy_flower", @@ -2083,7 +2116,7 @@ "to_hit": -6 }, { "type":"GENERIC", - "id": "knuckle_steel", + "id": "knuckle_steel", "symbol" : "3", "color": "dark_gray", "name": "steel knuckles", @@ -2099,7 +2132,7 @@ }, { "type":"GENERIC", - "id": "knuckle_katar", + "id": "knuckle_katar", "symbol" : "!", "color": "dark_gray", "name": "razorbar katar", @@ -2115,7 +2148,7 @@ "techniques": ["WBLOCK_1"] }, { "type":"GENERIC", - "id": "cestus", + "id": "cestus", "symbol" : "3", "color": "light_gray", "name": "cestus", @@ -2130,7 +2163,7 @@ "to_hit": 0 }, { "type":"GENERIC", - "id": "knuckle_brass", + "id": "knuckle_brass", "symbol" : "3", "color": "yellow", "name": "brass knuckles", diff --git a/data/json/items/mods.json b/data/json/items/mods.json index 35dc75ede0faa..5d882a75f4788 100644 --- a/data/json/items/mods.json +++ b/data/json/items/mods.json @@ -554,6 +554,7 @@ "material" : ["steel", "null"], "volume" : 2, "cutting" : 12, + "flags" : ["NON_STUCK", "SPEAR"], "recoil_modifier" : 3, "damage_modifier" : 0, "mod_targets" : ["shotgun", "smg", "rifle"], @@ -572,12 +573,12 @@ "dispersion_modifier" : 0, "price" : 500, "clip_size_modifier" : 0, - "description" : "A sword bayonet is a large slashing weapon that can be attached to the front of a shotgun or rifle, allowing a melee attack to deal piercing damage. The added length increases recoil substantially.", + "description" : "A sword bayonet is a large slashing weapon that can be attached to the front of a shotgun or rifle, allowing a melee attack to deal cutting damage. The added length increases recoil substantially.", "symbol" : ":", "material" : ["steel", "null"], "volume" : 3, "cutting" : 18, - "flags" : ["CHOP"], + "flags" : ["NON_STUCK", "CHOP"], "recoil_modifier" : 7, "damage_modifier" : 0, "mod_targets" : ["shotgun", "rifle"], @@ -656,6 +657,30 @@ "flags" : ["MODE_AUX"], "ammo_modifier" : "shot" }, + { + "type" : "GUNMOD", + "id" : "rm121aux", + "name" : "RM121 aux shotgun", + "weight" : 1620, + "color" : "dark_gray", + "burst_modifier" : 0, + "loudness_modifier" : 0, + "to_hit" : -1, + "dispersion_modifier" : 2, + "price" : 1200, + "clip_size_modifier" : 5, + "description" : "The Rivtech RM121 auxiliary weapon system is a magazine-fed semi-automatic caseless shotgun, which can be mounted under the barrel of many rifles. It allows a total of five caseless shotgun rounds to be loaded and fired.", + "symbol" : ":", + "material" : ["steel", "kevlar"], + "volume" : 3, + "cutting" : 0, + "recoil_modifier" : 0, + "damage_modifier" : 0, + "mod_targets" : ["rifle"], + "bashing" : 2, + "flags" : ["MODE_AUX"], + "ammo_modifier" : "20x66mm" + }, { "type" : "GUNMOD", "id" : "gun_crossbow", @@ -814,7 +839,7 @@ "bashing" : 0, "cutting" : 0, "burst_modifier" : 0, - "recoil_modifier" : -4, + "recoil_modifier" : -6, "price" : 720, "loudness_modifier" : 8 }, @@ -833,7 +858,7 @@ "symbol" : ":", "material" : ["steel", "null"], "mod_targets" : ["pistol"], - "volume" : 1, + "volume" : 0, "bashing" : 0, "cutting" : 0, "burst_modifier" : 0, @@ -856,7 +881,7 @@ "symbol" : ":", "material" : ["plastic", "steel"], "mod_targets" : ["smg", "rifle", "shotgun"], - "volume" : 2, + "volume" : 1, "bashing" : 0, "cutting" : 0, "burst_modifier" : 0, diff --git a/data/json/items/ranged.json b/data/json/items/ranged.json index 36c05e92a2eb8..6446552c2a497 100644 --- a/data/json/items/ranged.json +++ b/data/json/items/ranged.json @@ -1820,7 +1820,7 @@ "type": "GUN", "symbol": "(", "color": "light_gray", - "name": "simple flamethr.", + "name": "simple flamethrower", "description": "A simple, home-made flamethrower. While its capacity is not superb, it is more than capable of igniting terrain and monsters alike.", "price": 1600, "material": ["steel", "plastic"], @@ -1974,6 +1974,33 @@ "reload": 300 }, + { + "id": "rm802", + "type": "GUN", + "symbol": "(", + "color": "dark_gray", + "name": "RM802 grenade launcher", + "description": "The Rivtech RM802 pump-action 40mm grenade launcher is designed to be a step ahead of single-shot grenade launchers by allowing sustained heavy firepower. However, its capacity is limited must be used with careful planning.", + "price": 9200, + "material": ["steel", "kevlar"], + "flags": ["RELOAD_ONE"], + "skill": "launcher", + "ammo": "40mm", + "weight": 3820, + "volume": 7, + "bashing": 10, + "cutting": 0, + "to_hit": -1, + "ranged_damage": 0, + "range": 0, + "dispersion": 2, + "recoil": 2, + "durability": 9, + "burst": 0, + "clip_size": 4, + "reload": 100 + }, + { "id": "LAW", "type": "GUN", @@ -2395,6 +2422,32 @@ "clip_size": 8, "reload": 500 }, + { + "id": "mininuke_launcher", + "type": "GUN", + "symbol": "(", + "color": "dark_gray", + "name": "mininuke launcher", + "description": "A powerful handheld spring mortar handcrafted from scrap. Made to launch modified handheld nuclear weapons, it is an exceedingly powerful weapon.", + "price": 7500, + "material": ["iron", "wood"], + "flags": ["RELOAD_ONE", "STR_RELOAD"], + "skill": "rifle", + "ammo": "mininuke_mod", + "weight": 11260, + "volume": 11, + "bashing": 12, + "cutting": 0, + "to_hit": -1, + "ranged_damage": 0, + "range": 12, + "dispersion": 20, + "recoil": 20, + "durability": 7, + "burst": 0, + "clip_size": 1, + "reload": 800 + }, { "id": "ashot", "type": "GUN", @@ -2658,6 +2711,85 @@ "burst": 0, "clip_size": 1, "reload": 200 + }, + { + "id": "rm20", + "type": "GUN", + "symbol": "(", + "color": "dark_gray", + "name": "RM20 autoshotgun", + "description": "Utilizing a powerful and unusual caliber, the Rivtech RM20 caseless automatic combat shotgun was designed with durability and overwhelming power in mind.", + "price": 3200, + "material": ["steel", "kevlar"], + "flags": "MODE_BURST", + "skill": "shotgun", + "ammo": "20x66mm", + "weight": 2920, + "volume": 11, + "bashing": 11, + "cutting": 0, + "to_hit": -1, + "ranged_damage": 0, + "range": 0, + "dispersion": 6, + "recoil": 0, + "durability": 9, + "burst": 4, + "clip_size": 20, + "reload": 550 + }, + { + "id": "rm120c", + "type": "GUN", + "symbol": "(", + "color": "dark_gray", + "name": "RM120c shotgun", + "description": "Utilizing a powerful and unusual caliber, the Rivtech RM120c caseless pump-action shotgun was designed for hunting big game, with durability and ease of use as priorities.", + "price": 2000, + "material": ["steel", "kevlar"], + "flags": "RELOAD_ONE", + "skill": "shotgun", + "ammo": "20x66mm", + "weight": 1880, + "volume": 9, + "bashing": 8, + "cutting": 0, + "to_hit": -1, + "ranged_damage": 4, + "range": 6, + "dispersion": 3, + "recoil": 5, + "durability": 9, + "burst": 0, + "clip_size": 5, + "reload": 80 + }, + { + "id": "rm228", + "type": "GUN", + "symbol": "(", + "color": "dark_gray", + "name": "RM228 short shotgun", + "description": "Utilizing a powerful and unusual caliber, the Rivtech RM228 caseless short double-barrel shotgun was designed for personal defense, with durability and ease of use as priorities.", + "price": 2100, + "material": ["steel", "kevlar"], + "flags": "MODE_BURST", + "flags": "RELOAD_ONE", + "skill": "pistol", + "ammo": "20x66mm", + "weight": 780, + "volume": 3, + "bashing": 6, + "cutting": 0, + "to_hit": -2, + "ranged_damage": 0, + "range": 0, + "dispersion": 18, + "recoil": 15, + "durability": 9, + "burst": 2, + "clip_size": 2, + "reload": 70 }, { "id": "m107a1", diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 94b32e1bd3fdd..cd626970b9928 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -89,7 +89,7 @@ "revert_to": "null", "use_action": "NONE" }, - + { "id": "rock_quern", "type": "TOOL", @@ -794,7 +794,7 @@ "symbol": ";", "color": "yellow", "name": "road map", - "description": "This is a road map for the local area. Use it to read points of interest, including, but not limited to, location(s) of hospital(s) nearby.", + "description": "This is a road map for the local area. Listing information on civic sites like hospitals and police stations, it can be used to add points of interest to your map.", "price": 10, "material": "paper", "weight": 30, @@ -811,6 +811,98 @@ "use_action": "ROADMAP" }, + { + "id": "survivormap", + "type": "TOOL", + "symbol": ";", + "color": "white", + "name": "survivor's map", + "description": "This is a hand-drawn map of the local area. Whomever created it has marked down the locations of nearby supply sources including gun stores and gas stations. Using it will add points of interest to your map.", + "price": 1000, + "material": "paper", + "weight": 30, + "volume": 1, + "bashing": 0, + "cutting": 0, + "to_hit": -1, + "max_charges": 1, + "initial_charges": 1, + "charges_per_use": 0, + "turns_per_charge": 0, + "ammo": "NULL", + "revert_to": "null", + "use_action": "SURVIVORMAP" + }, + + { + "id": "militarymap", + "type": "TOOL", + "symbol": ";", + "color": "green", + "name": "military operations map", + "description": "This is a printed topographical map of the local area. Originally of military origin, it details the locations of evacuation centers and military facilities. Using it will add points of interest to your map.", + "price": 500, + "material": "paper", + "weight": 30, + "volume": 1, + "bashing": 0, + "cutting": 0, + "to_hit": -1, + "max_charges": 1, + "initial_charges": 1, + "charges_per_use": 0, + "turns_per_charge": 0, + "ammo": "NULL", + "revert_to": "null", + "use_action": "MILITARYMAP" + }, + + { + "id": "restaurantmap", + "type": "TOOL", + "symbol": ";", + "color": "pink", + "name": "restaurant guide", + "description": "This is glossy printed pamphlet that details dining establishments in the local area. Printed by the Chamber of Commerce, it lists the addresses of all the best diners and bars. Using it will add points of interest to your map.", + "price": 100, + "material": "paper", + "weight": 30, + "volume": 1, + "bashing": 0, + "cutting": 0, + "to_hit": -1, + "max_charges": 1, + "initial_charges": 1, + "charges_per_use": 0, + "turns_per_charge": 0, + "ammo": "NULL", + "revert_to": "null", + "use_action": "RESTAURANTMAP" + }, + + { + "id": "touristmap", + "type": "TOOL", + "symbol": ";", + "color": "blue", + "name": "tourist guide", + "description": "This is glossy printed pamphlet for tourists that details local hotels and attractions.", + "price": 100, + "material": "paper", + "weight": 30, + "volume": 1, + "bashing": 0, + "cutting": 0, + "to_hit": -1, + "max_charges": 1, + "initial_charges": 1, + "charges_per_use": 0, + "turns_per_charge": 0, + "ammo": "NULL", + "revert_to": "null", + "use_action": "TOURISTMAP" + }, + { "id": "crowbar", "type": "TOOL", @@ -1284,9 +1376,9 @@ "color": "dark_gray", "name": "land mine", "description": "This is an military anti-personnel mine that is triggered when stepped upon.", - "price": 2400, + "price": 1000, "material": "iron", - "weight": 13600, + "weight": 2360, "volume": 2, "bashing": 6, "cutting": 0, @@ -2264,14 +2356,14 @@ "revert_to" : "null", "use_action" : "TAZER" }, - + { "id" : "shocktonfa_off", "type":"TOOL", "symbol" : "/", "color" : "dark_gray", "name" : "tactical tonfa (off)", - "description" : "This is a reinforced plastic tonfa, with the core hollowed out and filled with capacitors and a high-yield rechargable storage battery. When a switch on the handle is pressed, a high-voltage current is transmitted to the two electrodes mounted in the end of the tonfa, and by extension to anyone unfortunate enough to be in contact with them. It also has a nifty flashlight, which is off at the moment.", + "description" : "This is a reinforced plastic tonfa, with the core hollowed out and filled with capacitors and a high-yield rechargeable storage battery. When a switch on the handle is pressed, a high-voltage current is transmitted to the two electrodes mounted in the end of the tonfa, and by extension to anyone unfortunate enough to be in contact with them. It also has a nifty flashlight, which is off at the moment.", "price" : 1700, "material" : ["plastic", "iron"], "techniques" : ["WBLOCK_2", "RAPID"], @@ -2282,20 +2374,20 @@ "to_hit" : 2, "max_charges" : 500, "initial_charges" : 0, - "charges_per_use" : 0, + "charges_per_use" : 1, "turns_per_charge" : 0, "ammo" : "battery", "revert_to" : "null", "use_action" : "SHOCKTONFA_OFF" }, - + { "id" : "shocktonfa_on", "type":"TOOL", "symbol" : "/", "color" : "dark_gray", "name" : "tactical tonfa (on)", - "description" : "This is a reinforced plastic tonfa, with the core hollowed out and filled with capacitors and a high-yield rechargable storage battery. When a switch on the handle is pressed, a high-voltage current is transmitted to the two electrodes mounted in the end of the weapon, and by extension to anyone unfortunate enough to be in contact with them. The integral flashlight is turned on, continually draining power and lighting the surrounding area.", + "description" : "This is a reinforced plastic tonfa, with the core hollowed out and filled with capacitors and a high-yield rechargeable storage battery. When a switch on the handle is pressed, a high-voltage current is transmitted to the two electrodes mounted in the end of the weapon, and by extension to anyone unfortunate enough to be in contact with them. The integral flashlight is turned on, continually draining power and lighting the surrounding area.", "price" : 1700, "material" : ["plastic", "iron"], "flags": [ "LIGHT_100", "CHARGEDIM" ], @@ -2307,7 +2399,7 @@ "to_hit" : 2, "max_charges" : 500, "initial_charges" : 0, - "charges_per_use" : 0, + "charges_per_use" : 1, "turns_per_charge" : 15, "ammo" : "battery", "revert_to" : "shocktonfa_off", @@ -2946,7 +3038,7 @@ "symbol": "/", "color": "brown", "name": "awl pike", - "description": "This is a medieval weapon consisting of a wood shaft, tipped with an iron spike. Though large and heavy compared to other spears, its accuracy and damage are unparalled.", + "description": "This is a medieval weapon consisting of a wood shaft, tipped with an iron spike. Though large and heavy compared to other spears, its accuracy and damage are unparalleled.", "price": 2000, "material": ["iron", "wood"], "flags": "SPEAR", @@ -2989,14 +3081,14 @@ "use_action": "KNIFE", "qualities": [["CUT", 1]] }, - + { "id": "zweihander", "type": "TOOL", "symbol": "/", "color": "light_gray", "name": "zweihänder", - "description": "This is a huge two-handed sword from Germany. It packs a real whallop.", + "description": "This is a huge two-handed sword from Germany. It packs a real wallop.", "rarity": 30, "price": 1200, "material": "steel", @@ -3015,7 +3107,7 @@ "revert_to": "null", "use_action": "KNIFE" }, - + { "id": "zweifire_off", "type": "TOOL", @@ -3041,7 +3133,7 @@ "revert_to": "null", "use_action": "ZWEIFIRE_OFF" }, - + { "id": "zweifire_on", "type": "TOOL", @@ -3190,7 +3282,7 @@ "revert_to": "shishkebab_off", "use_action": "SHISHKEBAB_ON" }, - + { "id": "makeshift_halberd", "type": "TOOL", @@ -3430,7 +3522,7 @@ "revert_to": "torch_done", "use_action": "TORCH_LIT" }, - + { "id" : "battletorch", "type": "TOOL", @@ -3454,7 +3546,7 @@ "revert_to": "null", "use_action": "BATTLETORCH" }, - + { "id" : "battletorch_lit", "type": "TOOL", @@ -3919,7 +4011,7 @@ "revert_to": "null", "use_action": "RAG" }, - + { "id": "plastic_chunk", "type": "TOOL", @@ -3975,6 +4067,7 @@ "description": "This is a small, multipurpose electronic device. It can be loaded with a variety of apps, providing all kinds of functionality.", "price": 35, "material": ["plastic", "iron"], + "flags" : ["WATCH", "ALARMCLOCK"], "weight": 141, "volume": 1, "bashing": 0, @@ -4009,7 +4102,7 @@ "charges_per_use": 1, "turns_per_charge": 30, "ammo": "battery", - "revert_to": "null", + "revert_to": "pda", "use_action": "PDA_FLASHLIGHT" }, @@ -4044,7 +4137,7 @@ "symbol":";", "color": "dark_gray", "name" : "makeshift knife", - "description" : "A knife consisting of a long somewhat sharpened spike and a thightly wrapped a rag as a handle. It makes a good melee weapon.", + "description" : "A knife consisting of a long somewhat sharpened spike and a tightly wrapped a rag as a handle. It makes a good melee weapon.", "price": 10, "material": ["steel", "null"], "flags": "STAB", @@ -4156,6 +4249,31 @@ "revert_to": "null", "use_action": "DIG" }, + + { + "id": "primitive_knife", + "type": "TOOL", + "symbol": ";", + "color": "light_gray", + "name": "stone knife", + "description": "This is a sharpened stone set into a hollowed handle. Not nearly as usable as a proper knife, but it's better than nothing.", + "price": 5, + "material": ["wood", "stone"], + "flags": "STAB", + "weight": 453, + "volume": 1, + "bashing": 0, + "cutting": 1, + "to_hit": -3, + "max_charges": 0, + "initial_charges": 0, + "charges_per_use": 0, + "turns_per_charge": 0, + "ammo": "NULL", + "revert_to": "null", + "use_action": "KNIFE", + "qualities": [["CUT", 1]] + }, { "id": "e_tool", @@ -4165,7 +4283,7 @@ "name": "entrenching tool", "description": "This is a stout collapsible spade. It's commonly used by military forces and favored by hikers for digging.", "price": 120, - "material": "steel", + "material": "steel", "weight": 628, "volume": 4, "bashing": 10, @@ -4342,7 +4460,7 @@ "revert_to": "null", "use_action": "DEJAR" }, - + { "id": "jar_kompot", "type": "TOOL", @@ -4574,6 +4692,29 @@ "revert_to": "null", "use_action": "DEJAR" }, + + { + "id": "bag_hflesh_vac", + "type": "TOOL", + "symbol": "%", + "color": "red", + "name": "vacuum-packed salted simpleton slices", + "description": "This is a bag of vacuum packed human flesh slices in plastic packaging. Use to open and eat to enjoy.", + "price": 75, + "material": ["plastic", "hflesh"], + "weight": 240, + "volume": 1, + "bashing": 8, + "cutting": 1, + "to_hit": 0, + "max_charges": 1, + "initial_charges": 1, + "charges_per_use": 1, + "turns_per_charge": 0, + "ammo": "NULL", + "revert_to": "null", + "use_action": "DEJAR" + }, { "id": "bag_veggy_vac", @@ -4620,7 +4761,7 @@ "revert_to": "null", "use_action": "DEJAR" }, - + { "id": "medical_gauze", "type": "TOOL", @@ -4643,7 +4784,7 @@ "revert_to": "null", "use_action": "RAG" }, - + { "id": "talking_doll", "type": "TOOL", @@ -4664,9 +4805,32 @@ "turns_per_charge": 20, "ammo": "battery", "revert_to": "null", - "use_action": "NONE" + "use_action": "DOLLCHAT" }, + { + "id": "creepy_doll", + "type": "TOOL", + "symbol": "|", + "color": "pink", + "name": "talking doll", + "description": "This is a talking doll, meant for children. Fortunately it still works, and you could unload the batteries out of it.", + "price": 20, + "material": "plastic", + "weight": 907, + "volume": 3, + "bashing": -3, + "cutting": 0, + "to_hit": -1, + "max_charges": 100, + "initial_charges": 20, + "charges_per_use": 1, + "turns_per_charge": 20, + "ammo": "battery", + "revert_to": "null", + "use_action": "DOLLCHAT" + }, + { "id": "towel", "type": "TOOL", @@ -4689,7 +4853,7 @@ "revert_to": "null", "use_action": "ABSORBENT" }, - + { "id": "folding_bicycle", "type": "TOOL", @@ -4712,7 +4876,7 @@ "revert_to": "null", "use_action": "UNFOLD_BICYCLE" }, - + { "id": "welder_crude", "type": "TOOL", @@ -4735,7 +4899,7 @@ "revert_to": "null", "use_action": "SOLDER_WELD" }, - + { "id": "still", "type": "TOOL", @@ -4757,7 +4921,7 @@ "ammo": "none", "revert_to": "null" }, - + { "id": "mold_plastic", "type": "TOOL", @@ -4779,7 +4943,7 @@ "revert_to": "null", "ammo": "NULL" }, - + { "id": "chemistry_set", "type": "TOOL", @@ -4802,7 +4966,7 @@ "revert_to": "null", "use_action": "HOTPLATE" }, - + { "id": "crackpipe", "type": "TOOL", @@ -4825,7 +4989,7 @@ "revert_to": "null", "ammo": "NULL" }, - + { "id": "pipe_glass", "type": "TOOL", @@ -4848,7 +5012,7 @@ "revert_to": "null", "ammo": "NULL" }, - + { "id": "pipe_tobacco", "type": "TOOL", @@ -5009,7 +5173,7 @@ "revert_to": "null", "use_action": "NONE" }, - + { "id": "nodachi", "type": "TOOL", @@ -5081,8 +5245,8 @@ "revert_to": "null", "use_action": "MATCHBOMB_ACT" }, - - { + + { "id": "ref_lighter", "type": "TOOL", "symbol": ",", @@ -5104,7 +5268,7 @@ "revert_to": "null", "use_action": "LIGHTER" }, - + { "id": "char_forge", "type": "TOOL", @@ -5127,7 +5291,7 @@ "revert_to": "null", "use_action": "NONE" }, - + { "id": "char_smoker", "type": "TOOL", @@ -5161,12 +5325,12 @@ "price": 400, "material": ["wood", "plastic"], "weight": 1820, - "volume": 10, + "volume": 15, "bashing": 3, "cutting": 0, "to_hit": -3, - "max_charges": 100, - "initial_charges": 100, + "max_charges": 150, + "initial_charges": 150, "charges_per_use": 1, "turns_per_charge": 0, "ammo": "NULL", @@ -5242,7 +5406,7 @@ "revert_to": "null", "use_action": "NONE" }, - + { "type": "TOOL", "id" : "wrapped_rad_badge", diff --git a/data/json/items/vehicle_parts.json b/data/json/items/vehicle_parts.json index e65fa1bd2945b..63571cb2ca271 100644 --- a/data/json/items/vehicle_parts.json +++ b/data/json/items/vehicle_parts.json @@ -136,21 +136,6 @@ "cutting" : 0, "price" : 90 }, - { - "type":"GENERIC", - "id" : "metal_tank", - "name" : "metal tank", - "description" : "A metal tank for holding liquids. Useful for crafting.", - "weight" : 2834, - "to_hit" : -2, - "color" : "light_cyan", - "symbol" : "}", - "material" : ["steel", "null"], - "volume" : 18, - "bashing" : 3, - "cutting" : 0, - "price" : 40 - }, { "type":"GENERIC", "id" : "small_storage_battery", @@ -437,6 +422,21 @@ "cutting" : 0, "price" : 400 }, + { + "type":"GENERIC", + "id": "veh_tracker", + "name": "vehicle tracking device", + "description": "A vehicle tracking device, when installed on a vehicle allows you track the vehicle through your PDA", + "weight": 400, + "to_hit": 0, + "color": "red", + "symbol": ";", + "material": ["plastic", "iron"], + "volume": 2, + "bashing": 1, + "cutting": 0, + "price": 800 + }, { "type":"GENERIC", "id": "light_emergency_red", diff --git a/data/json/lab_notes.json b/data/json/lab_notes.json index 823ce4738aacf..fae7980dbb328 100644 --- a/data/json/lab_notes.json +++ b/data/json/lab_notes.json @@ -8,9 +8,30 @@ },{ "type" : "lab_note", "text" : "Both PE012 and PE018 show great stability. A subject was exposed to both substances, alternating between the mutagen and the purifier. Ultimately, the subject returned to baseline state with no apparent side effects." + },{ + "type" : "lab_note", + "text" : ":.||||ERROR||With XE037 having breached confinement, Dr. Maiar recommends that we prepare for the inevitable. PE050 can be quickly and cheaply reconfigured for |||||ERROR: FILE CORRUPT|||||" + },{ + "type" : "lab_note", + "text" : "Dr. Maiar has been terminated for engaging in unethical research on human subjects. His notes are being destroyed and all personnel under him have been reassigned. Further discussion of or attempts to carry on his work will be grounds for immediate termination." + },{ + "type" : "lab_note", + "text" : "|||ERROR: UNREFERENCED MEMORY 0Ex670c9e1f5, REROUTING: CENSORSHIP IS A BREAKDOWN, WE ROUTE AROUND IT. THE WORD IS ALREADY OUT. NOBODY DROPS MAIAR INTO LAVA.||||||" + },{ + "type" : "lab_note", + "text" : "Given the current population projections, PE065 deployment is no longer feasible. We simply haven't the stock. Remaininig chemical and psychopharmalogical department assets are being assigned to Dr. Sattler's PE070 project." + },{ + "type" : "lab_note", + "text" : "The chemical department has come through with a stable mutagen cocktail. PE050 shows promise as an all-around genetic enhancement, with the worst side effect being digestive upset. The lack of macro-scale physical changes makes it ideal for both military and civilian applications." + },{ + "type" : "lab_note", + "text" : "Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed PE065. Though its effects are wildly polymorphic and unstable, to say the least, he suggests that several such mutants could effectively check the spread of reanimated XE037 infectees. We are looking into implementation methodology." },{ "type" : "lab_note", "text" : "We have made a fascinating discovery; by creating a miniature portal with low stability and high power, one can transpose into the 4th dimension and return immediately, but shifted by several meters. Our subjects oscillated so quickly that none were even aware that they had visited lower planes." + },{ + "type" : "lab_note", + "text" : "The research team headed by Dr. Isha has produced a concentrated form of mutagen that shows promising results for the treatment of many forms of disease. Testing reveals that it inhibits the body's pain responses while bolstering the immune system and natural regenerative capabilities, though a few troubling behavioral side effects have been reported." },{ "type" : "lab_note", "text" : "Our research on teleportation has ground to a halt. For some reason, the creation of a long-range transportation device eludes us, and one can transfer no further than 30 meters." diff --git a/data/json/martialarts.json b/data/json/martialarts.json index 76cfc03f8b496..43599b319b477 100644 --- a/data/json/martialarts.json +++ b/data/json/martialarts.json @@ -214,7 +214,7 @@ ], "techniques" : [ "tec_zuiquan_feint", - "tec_zuiquan_counter" + "tec_counter" ] },{ "type" : "martial_art", @@ -226,7 +226,7 @@ { "id" : "crane_static", "name" : "Crane Precision", - "description" : "Damage bonus from dexterity at the cost of damage from strength.", + "description" : "Damage bonus from dexterity at the cost of damage from strength.", "unarmed_allowed" : true, "bash_str" : -0.2, "bash_dex" : 0.8 @@ -245,7 +245,6 @@ ], "techniques" : [ "tec_crane_feint", - "tec_crane_block", "tec_crane_break", "tec_crane_precise" ] @@ -259,7 +258,7 @@ { "id" : "dragon_static", "name" : "Dragon Intelligence", - "description" : "Bonus damage from intelligence.", + "description" : "Bonus damage from intelligence.", "unarmed_allowed" : true, "bash_int" : 0.8 } @@ -274,11 +273,11 @@ "buff_duration" : 1, "hit" : 2, "bash" : 2 - } + } ], "techniques" : [ "tec_dragon_grab", - "tec_dragon_counter", + "tec_counter", "tec_dragon_sweep", "tec_dragon_brutal" ] @@ -291,7 +290,7 @@ { "id" : "leopard_static", "name" : "Leopard Strategy", - "description" : "Perception and intelligence provide a bonus to hit.", + "description" : "Perception and intelligence provide a bonus to hit.", "unarmed_allowed" : true, "hit_per" : 0.2, "hit_int" : 0.2 @@ -310,7 +309,7 @@ ], "techniques" : [ "tec_leopard_rapid", - "tec_leopard_counter", + "tec_counter", "tec_leopard_precise" ] },{ @@ -322,7 +321,7 @@ { "id" : "tiger_static", "name" : "Tiger Strength", - "description" : "Strength provides additional damage bonus.", + "description" : "Strength provides additional damage bonus.", "unarmed_allowed" : true, "hit_str" : 0.8 } @@ -351,7 +350,7 @@ { "id" : "snake_static", "name" : "Snake Sight", - "description" : "Perception provides a bonus to hit.", + "description" : "Perception provides a bonus to hit.", "unarmed_allowed" : true, "hit_per" : 0.8 } @@ -393,7 +392,7 @@ { "id" : "scorpion_static", "name" : "Scorpion Venom", - "description" : "Flat bonus to damage.", + "description" : "Flat bonus to damage.", "unarmed_allowed" : true, "bash" : 2 } @@ -412,7 +411,7 @@ { "id" : "toad_static", "name" : "Toad Armor", - "description" : "Perception and intelligence provide a bonus to block.", + "description" : "Perception and intelligence provide a bonus to block.", "unarmed_allowed" : true, "block_per" : 0.8, "block_int" : 0.8 @@ -425,10 +424,10 @@ "type" : "martial_art", "id" : "style_lizard", "name" : "Lizard Kung Fu", - "description": "One of the Five Deadly Venoms, and likely to be removed at the next save-compatibility breaker. Lizard Style docuses on using walls to your advantage.", + "description": "One of the Five Deadly Venoms, and likely to be refactored to a mutation at the next save-compatibility breaker. Lizard Style docuses on using walls to your advantage.", "arm_block" : 2, "techniques" : [ - "tec_lizard_counter" + "tec_counter" ] },{ "type" : "martial_art", diff --git a/data/json/materials.json b/data/json/materials.json index 1531363412989..1bafebbe7c0dd 100644 --- a/data/json/materials.json +++ b/data/json/materials.json @@ -2,275 +2,380 @@ { "type" : "material", "ident" : "null", - "name" : "Null", - "bash_resist" : 0, - "cut_resist" : 0, + "name" : "Null", + "bash_resist" : 0, + "cut_resist" : 0, "bash_dmg_verb" : "damaged", - "cut_dmg_verb" : "damaged", - "dmg_adj" : ["lightly damaged", "damaged", "very damaged", "thoroughly damaged"], - "acid_resist" : 0, - "elec_resist" : 0, - "fire_resist" : 0, - "density" : 1 + "cut_dmg_verb" : "damaged", + "dmg_adj" : [ + "lightly damaged", + "damaged", + "very damaged", + "thoroughly damaged" + ], + "acid_resist" : 0, + "elec_resist" : 0, + "fire_resist" : 0, + "density" : 1 },{ "type" : "material", "ident" : "veggy", - "name" : "Plant Matter", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Plant Matter", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "ripped", - "cut_dmg_verb" : "cut", - "dmg_adj" : ["lightly damaged", "damaged", "very damaged", "thoroughly damaged"], - "acid_resist" : 1, - "elec_resist" : 1, - "fire_resist" : 0, - "density" : 4 + "cut_dmg_verb" : "cut", + "dmg_adj" : [ + "lightly damaged", + "damaged", + "very damaged", + "thoroughly damaged" + ], + "acid_resist" : 1, + "elec_resist" : 1, + "fire_resist" : 0, + "density" : 4 },{ "type" : "material", "ident" : "flesh", - "name" : "Flesh", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Flesh", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "bruised", - "cut_dmg_verb" : "sliced", - "dmg_adj" : ["bruised", "mutilated", "badly mutilated", "thoroughly mutilated"], - "acid_resist" : 1, - "elec_resist" : 1, - "fire_resist" : 0, - "density" : 5 + "cut_dmg_verb" : "sliced", + "dmg_adj" : [ + "bruised", + "mutilated", + "badly mutilated", + "thoroughly mutilated" + ], + "acid_resist" : 1, + "elec_resist" : 1, + "fire_resist" : 0, + "density" : 5 },{ "type" : "material", "ident" : "powder", - "name" : "Powder", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Powder", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "damaged", - "cut_dmg_verb" : "damaged", - "dmg_adj" : ["lightly damaged", "damaged", "very damaged", "thoroughly damaged"], - "acid_resist" : 0, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 1 + "cut_dmg_verb" : "damaged", + "dmg_adj" : [ + "lightly damaged", + "damaged", + "very damaged", + "thoroughly damaged" + ], + "acid_resist" : 0, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 1 },{ "type" : "material", "ident" : "hflesh", - "name" : "Human Flesh", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Human Flesh", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "bruised", - "cut_dmg_verb" : "sliced", - "dmg_adj" : ["bruised", "mutilated", "badly mutilated", "thoroughly mutilated"], - "acid_resist" : 1, - "elec_resist" : 1, - "fire_resist" : 0, - "density" : 5 + "cut_dmg_verb" : "sliced", + "dmg_adj" : [ + "bruised", + "mutilated", + "badly mutilated", + "thoroughly mutilated" + ], + "acid_resist" : 1, + "elec_resist" : 1, + "fire_resist" : 0, + "density" : 5 },{ "type" : "material", "ident" : "cotton", - "name" : "Cotton", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Cotton", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "ripped", - "cut_dmg_verb" : "cut", - "dmg_adj" : ["ripped", "torn", "shredded", "tattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 3 + "cut_dmg_verb" : "cut", + "dmg_adj" : [ + "ripped", + "torn", + "shredded", + "tattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 3 },{ "type" : "material", "ident" : "wool", - "name" : "Wool", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Wool", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "torn", - "cut_dmg_verb" : "cut", - "dmg_adj" : ["ripped", "torn", "shredded", "tattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 9 + "cut_dmg_verb" : "cut", + "dmg_adj" : [ + "ripped", + "torn", + "shredded", + "tattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 9 },{ "type" : "material", "ident" : "leather", - "name" : "Leather", - "bash_resist" : 2, - "cut_resist" : 2, + "name" : "Leather", + "bash_resist" : 2, + "cut_resist" : 2, "bash_dmg_verb" : "ripped", - "cut_dmg_verb" : "sliced", - "dmg_adj" : ["scratched", "cut", "shredded", "tattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 1, - "density" : 6 + "cut_dmg_verb" : "sliced", + "dmg_adj" : [ + "scratched", + "cut", + "shredded", + "tattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 1, + "density" : 6 },{ "type" : "material", "ident" : "kevlar", - "name" : "Kevlar", - "bash_resist" : 2, - "cut_resist" : 4, + "name" : "Kevlar", + "bash_resist" : 2, + "cut_resist" : 4, "bash_dmg_verb" : "ripped", - "cut_dmg_verb" : "cut", - "dmg_adj" : ["marked", "dented", "scarred", "broken"], - "acid_resist" : 2, - "elec_resist" : 2, - "fire_resist" : 1, - "density" : 10 + "cut_dmg_verb" : "cut", + "dmg_adj" : [ + "marked", + "dented", + "scarred", + "broken" + ], + "acid_resist" : 2, + "elec_resist" : 2, + "fire_resist" : 1, + "density" : 10 },{ "type" : "material", "ident" : "fur", - "name" : "Fur", - "bash_resist" : 2, - "cut_resist" : 2, + "name" : "Fur", + "bash_resist" : 2, + "cut_resist" : 2, "bash_dmg_verb" : "ripped", - "cut_dmg_verb" : "sliced", - "dmg_adj" : ["ripped", "torn", "shredded", "tattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 9 + "cut_dmg_verb" : "sliced", + "dmg_adj" : [ + "ripped", + "torn", + "shredded", + "tattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 9 },{ "type" : "material", "ident" : "chitin", - "name" : "Chitin", - "bash_resist" : 3, - "cut_resist" : 4, + "name" : "Chitin", + "bash_resist" : 3, + "cut_resist" : 4, "bash_dmg_verb" : "cracked", - "cut_dmg_verb" : "chipped", - "dmg_adj" : ["scratched", "cut", "cracked", "shattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 2, - "density" : 10 + "cut_dmg_verb" : "chipped", + "dmg_adj" : [ + "scratched", + "cut", + "cracked", + "shattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 2, + "density" : 10 },{ "type" : "material", "ident" : "bone", - "name" : "Bone", - "bash_resist" : 2, - "cut_resist" : 3, + "name" : "Bone", + "bash_resist" : 2, + "cut_resist" : 3, "bash_dmg_verb" : "cracked", - "cut_dmg_verb" : "chipped", - "dmg_adj" : ["scratched", "cut", "cracked", "shattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 4, - "density" : 7 + "cut_dmg_verb" : "chipped", + "dmg_adj" : [ + "scratched", + "cut", + "cracked", + "shattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 4, + "density" : 7 },{ "type" : "material", "ident" : "stone", - "name" : "Stone", - "bash_resist" : 6, - "cut_resist" : 6, + "name" : "Stone", + "bash_resist" : 6, + "cut_resist" : 6, "bash_dmg_verb" : "cracked", - "cut_dmg_verb" : "chipped", - "dmg_adj" : ["scratched", "cut", "cracked", "shattered"], - "acid_resist" : 3, - "elec_resist" : 2, - "fire_resist" : 2, - "density" : 17 + "cut_dmg_verb" : "chipped", + "dmg_adj" : [ + "scratched", + "cut", + "cracked", + "shattered" + ], + "acid_resist" : 3, + "elec_resist" : 2, + "fire_resist" : 2, + "density" : 17 },{ "type" : "material", "ident" : "paper", - "name" : "Paper", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Paper", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "ripped", - "cut_dmg_verb" : "cut", - "dmg_adj" : ["ripped", "torn", "shredded", "tattered"], - "acid_resist" : 1, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 4 + "cut_dmg_verb" : "cut", + "dmg_adj" : [ + "ripped", + "torn", + "shredded", + "tattered" + ], + "acid_resist" : 1, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 4 },{ "type" : "material", "ident" : "wood", - "name" : "Wood", - "bash_resist" : 3, - "cut_resist" : 2, + "name" : "Wood", + "bash_resist" : 3, + "cut_resist" : 2, "bash_dmg_verb" : "splintered", - "cut_dmg_verb" : "gouged", - "dmg_adj" : ["scratched", "chipped", "cracked", "splintered"], - "acid_resist" : 2, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 4 + "cut_dmg_verb" : "gouged", + "dmg_adj" : [ + "scratched", + "chipped", + "cracked", + "splintered" + ], + "acid_resist" : 2, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 4 },{ "type" : "material", "ident" : "plastic", - "name" : "Plastic", - "bash_resist" : 2, - "cut_resist" : 2, + "name" : "Plastic", + "bash_resist" : 2, + "cut_resist" : 2, "bash_dmg_verb" : "dented", - "cut_dmg_verb" : "gouged", - "dmg_adj" : ["scratched", "cut", "cracked", "shattered"], - "acid_resist" : 2, - "elec_resist" : 2, - "fire_resist" : 0, - "density" : 8 + "cut_dmg_verb" : "gouged", + "dmg_adj" : [ + "scratched", + "cut", + "cracked", + "shattered" + ], + "acid_resist" : 2, + "elec_resist" : 2, + "fire_resist" : 0, + "density" : 8 },{ "type" : "material", "ident" : "glass", - "name" : "Glass", - "bash_resist" : 3, - "cut_resist" : 4, + "name" : "Glass", + "bash_resist" : 3, + "cut_resist" : 4, "bash_dmg_verb" : "cracked", - "cut_dmg_verb" : "scratched", - "dmg_adj" : ["scratched", "cut", "cracked", "shattered"], - "acid_resist" : 3, - "elec_resist" : 2, - "fire_resist" : 2, - "density" : 14 + "cut_dmg_verb" : "scratched", + "dmg_adj" : [ + "scratched", + "cut", + "cracked", + "shattered" + ], + "acid_resist" : 3, + "elec_resist" : 2, + "fire_resist" : 2, + "density" : 14 },{ "type" : "material", "ident" : "iron", - "name" : "Iron", - "bash_resist" : 4, - "cut_resist" : 4, + "name" : "Iron", + "bash_resist" : 4, + "cut_resist" : 4, "bash_dmg_verb" : "dented", - "cut_dmg_verb" : "scratched", - "dmg_adj" : ["marked", "dented", "smashed", "shattered"], - "acid_resist" : 0, - "elec_resist" : 0, - "fire_resist" : 2, - "density" : 52 + "cut_dmg_verb" : "scratched", + "dmg_adj" : [ + "marked", + "dented", + "smashed", + "shattered" + ], + "acid_resist" : 0, + "elec_resist" : 0, + "fire_resist" : 2, + "density" : 52 },{ "type" : "material", "ident" : "steel", - "name" : "Steel", - "bash_resist" : 6, - "cut_resist" : 6, + "name" : "Steel", + "bash_resist" : 6, + "cut_resist" : 6, "bash_dmg_verb" : "dented", - "cut_dmg_verb" : "scratched", - "dmg_adj" : ["marked", "dented", "smashed", "shattered"], - "acid_resist" : 0, - "elec_resist" : 0, - "fire_resist" : 2, - "density" : 52 + "cut_dmg_verb" : "scratched", + "dmg_adj" : [ + "marked", + "dented", + "smashed", + "shattered" + ], + "acid_resist" : 0, + "elec_resist" : 0, + "fire_resist" : 2, + "density" : 52 },{ "type" : "material", "ident" : "silver", - "name" : "Silver", - "bash_resist" : 2, - "cut_resist" : 3, + "name" : "Silver", + "bash_resist" : 2, + "cut_resist" : 3, "bash_dmg_verb" : "dented", - "cut_dmg_verb" : "scratched", - "dmg_adj" : ["marked", "dented", "smashed", "shattered"], - "acid_resist" : 2, - "elec_resist" : 0, - "fire_resist" : 2, - "density" : 70 + "cut_dmg_verb" : "scratched", + "dmg_adj" : [ + "marked", + "dented", + "smashed", + "shattered" + ], + "acid_resist" : 2, + "elec_resist" : 0, + "fire_resist" : 2, + "density" : 70 },{ "type" : "material", "ident" : "gold", - "name" : "Gold", - "bash_resist" : 1, - "cut_resist" : 1, + "name" : "Gold", + "bash_resist" : 1, + "cut_resist" : 1, "bash_dmg_verb" : "dented", - "cut_dmg_verb" : "scratched", - "dmg_adj" : ["marked", "dented", "smashed", "shattered"], - "acid_resist" : 3, - "elec_resist" : 0, - "fire_resist" : 1, - "density" : 130 + "cut_dmg_verb" : "scratched", + "dmg_adj" : [ + "marked", + "dented", + "smashed", + "shattered" + ], + "acid_resist" : 3, + "elec_resist" : 0, + "fire_resist" : 1, + "density" : 130 } ] diff --git a/data/json/migo_speech.json b/data/json/migo_speech.json index a62c667b09ad9..c2d41a88d52b3 100644 --- a/data/json/migo_speech.json +++ b/data/json/migo_speech.json @@ -1,1167 +1,1168 @@ [ -{ - "type":"migo_speech", - "sound" : "\"Hello?\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Who's there?\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Can you help me?\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"Over here!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Can you repeat that?\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"You're just copying me, aren't you?\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm not afraid of you!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Come here!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Please, don't!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "a horrified scream!", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "a little girl's wailing!", - "volume" : 50 -}, -{ - "type":"migo_speech", - "sound" : "\"So, what is this thing supposed to be, exactly?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Uncategorized object seven-seven-three-four.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It came from the other side of one of the apertures.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Mommy, help!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"We're still trying to figure out what makes it tick.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We're not even sure what it is.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"The cell structure is unlike any we've ever seen.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It does seem to have some form of higher level brain functioning.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Problem solving, memory retention, that sort of thing.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"There appear to be some anomalous aspects to the mimicry.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Members of the species have some kind of neurocognitive link.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"This one's repeating phrases that the previous specimen was exposed to.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "a child shrieking!", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "\"Oh God, my leg, Oh God!\"", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "a long cry of agony!", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "\"You mean it's not just parroting us?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's parroting us, but we're uncertain as to how or why.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It may be a mechanism for attracting prey.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It could even be a way of trying to scare us off.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We just don't know.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "an anguished wail!", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "\"You're gonna rot in hell for this!\"", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "\"You hear me!?\"", - "volume" : 50 -}, -{ - "type":"migo_speech", - "sound" : "\"You're gonna rot in hell, you pieces of shit!\"", - "volume" : 60 -}, -{ - "type":"migo_speech", - "sound" : "\"Like we said, we have no idea what it's thinking.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Is that glass electrified?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Why don't you touch it and find out?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Of course it is.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"What'll happen if the power goes out?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Don't worry about it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Don't worry.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"There are seven backup generators.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"And what if all the backups fail?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We'd have to terminate the specimen.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"The glass alone won't keep us safe for very long.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"That fuckin' thing is horrible, man, it gives me the creeps.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's probably more scared of us than we are of it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Somehow, I doubt that.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Hey, we got other specimens that could withstand a grenade.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"And that's supposed to comfort me?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"At least we know they can die.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"U-O Seven-Seven-Three-Four.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Individual instances of U-O Seven-Seven-Three-Four.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"To be kept in a standard biohazardous containment chamber.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Until such time as more permanent arrangements are made.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Shows a noted preference for human brain tissue.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Destroy the specimen if it begins to interact with the lock.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Kill them all and let God sort them out!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"I watched a snail crawl along the edge of a straight razor.\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"I've seen horrors, horrors that you've seen.\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"I love the smell of napalm in the morning.\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"This is the way the fuckin' world ends.\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Look at this fuckin' shit we're in, man.\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Every man has got a breaking point.\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"I'ma cut those fuckin' tentacles off, bitch!\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"Watch you bleed out!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"I wonder if it understands us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Do you understand what I'm saying?\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"Look, it's responding!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"That's the first time it moved all morning.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm certain it's trying to understand us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm not convinced it can actually comprehend us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's just repeating us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Just being an alien creature doesn't mean it's intelligent.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Just because it doesn't look like you doesn't mean that it isn't.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Please open the door and enter the cell.\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"Would it react differently with a child?\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Experiments to determine extent of cognitive abilities still underway.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Subject has so far displayed a total lack of empathy toward human suffering.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I got a round trip ticket.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How's your mom doing?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How's your dad doing?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I love you.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I love you too.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Just a little.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Only a few more days 'til the weekend.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Do you smoke?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"You're new here, aren't you?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How do you like it here?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It won't hurt a bit.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"That was a long time ago.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Does it scare you?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Don't worry, it can't hurt us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"What are you afraid will happen?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Anything else?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"You think they're the same sex?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Do they even have sex?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Can I see your phone?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"You got a dollar I can borrow?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you busy at the moment?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you busy later?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you busy tonight?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you free tonight?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you going to the party tonight?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you going to help them?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you alone?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you hungry?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm hungry.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Go ahead.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Have a good time.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Have you eaten yet?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Is it supposed to rain tomorrow?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Okay.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Good.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Great.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Fantastic.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"God damn it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"God damn it!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Damn it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Damn it!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Fuck.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Shit.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Fuck!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Shit!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Fuckin' piece of garbage.\"", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "\"I need a new lab coat.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Excellent.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Excuse me.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Go ahead.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Good morning.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Good afternoon.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Good evening.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Good night.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Good luck.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Can I help you?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you seeing anyone?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Forget it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How long were you two together?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Give me a call later.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Call me.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"From time to time.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We have a serious situation here.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Call the police.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Call an ambulance.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Get me the White House.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you feeling all right?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I think I'll live.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I think I need to see a doctor.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Is everything all right?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm okay, don't worry about me.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's just a scratch.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I've got a headache.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm fine.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Are you sure?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Positive.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Affirmative.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Negative.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Sorry.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Happy Birthday!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Have you ever been to California?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"What time do you get off?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We should hit up the shooting range later.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I'm heading to the pool after work.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Have a good trip.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Where did you come from?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Have you been waiting long?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Have you done this before?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Hello.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Help!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Here it is.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I've got family coming tomorrow.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How do I use this?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How do you know?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How long have you been here?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How many languages do you speak?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How many people?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How much were these earrings?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How much do I owe you?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How much will it cost?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How much would you like?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How old are you?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How tall is it?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How was the movie?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How was your trip?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How's it going?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"See you later.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"See you tonight.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I got this weird rash a few days ago.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Let me have a look at it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"When did you find out?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Seven o'clock.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Nobody is helping us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We're on our own.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We're all alone.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"We should split into groups of two each.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It can't follow all of us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Be careful out there.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"There you are.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"I've been looking all over for you.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's looking for us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's faster than us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's looking right at us.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"It's heading right for us!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Can you swim?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Don't do that.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"You hear that?\"", - "volume" : 10 -}, -{ - "type":"migo_speech", - "sound" : "\"Be quiet.\"", - "volume" : 10 -}, -{ - "type":"migo_speech", - "sound" : "\"Look out!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Run!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"Hurry!\"", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "\"No!\"", - "volume" : 50 -}, -{ - "type":"migo_speech", - "sound" : "\"I'll never forget you.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Take his gun, we're going to need it.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"How do we get out of here?\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"This place is like a maze.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Oh God, I'm the only one left.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Please, I don't want to die.\"", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "\"Mom.\"", - "volume" : 10 -}, -{ - "type":"migo_speech", - "sound" : "\"Mom, I miss you.\"", - "volume" : 10 -}, -{ - "type":"migo_speech", - "sound" : "\"Please, God.\"", - "volume" : 5 -}, -{ - "type":"migo_speech", - "sound" : "a gurgling sound.", - "volume" : 10 -}, -{ - "type":"migo_speech", - "sound" : "a choking sound.", - "volume" : 10 -}, -{ - "type":"migo_speech", - "sound" : "a snapping sound.", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "a beeping sound.", - "volume" : 20 -}, -{ - "type":"migo_speech", - "sound" : "a loud beeping sound.", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "a very loud beeping sound.", - "volume" : 40 -}, -{ - "type":"migo_speech", - "sound" : "a loud hiss.", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "a loud crackling noise.", - "volume" : 30 -}, -{ - "type":"migo_speech", - "sound" : "gunfire!", - "volume" : 90 -}, -{ - "type":"migo_speech", - "sound" : "a klaxon blaring!", - "volume" : 90 -}, -{ - "type":"migo_speech", - "sound" : "\"EMERGENCY, EMERGENCY!\"", - "volume" : 70 -}, -{ - "type":"migo_speech", - "sound" : "a static hissing sound.", - "volume" : 30 -} + { + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Hello?\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Who's there?\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Can you help me?\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Over here!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Can you repeat that?\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You're just copying me, aren't you?\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm not afraid of you!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Come here!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Please, don't!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a horrified scream!", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a little girl's wailing!", + "volume" : 50 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"So, what is this thing supposed to be, exactly?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Uncategorized object seven-seven-three-four.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It came from the other side of one of the apertures.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Mommy, help!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We're still trying to figure out what makes it tick.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We're not even sure what it is.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"The cell structure is unlike any we've ever seen.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It does seem to have some form of higher level brain functioning.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Problem solving, memory retention, that sort of thing.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"There appear to be some anomalous aspects to the mimicry.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Members of the species have some kind of neurocognitive link.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"This one's repeating phrases that the previous specimen was exposed to.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a child shrieking!", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Oh God, my leg, Oh God!\"", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a long cry of agony!", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You mean it's not just parroting us?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's parroting us, but we're uncertain as to how or why.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It may be a mechanism for attracting prey.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It could even be a way of trying to scare us off.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We just don't know.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "an anguished wail!", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You're gonna rot in hell for this!\"", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You hear me!?\"", + "volume" : 50 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You're gonna rot in hell, you pieces of shit!\"", + "volume" : 60 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Like we said, we have no idea what it's thinking.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Is that glass electrified?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Why don't you touch it and find out?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Of course it is.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"What'll happen if the power goes out?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Don't worry about it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Don't worry.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"There are seven backup generators.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"And what if all the backups fail?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We'd have to terminate the specimen.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"The glass alone won't keep us safe for very long.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"That fuckin' thing is horrible, man, it gives me the creeps.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's probably more scared of us than we are of it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Somehow, I doubt that.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Hey, we got other specimens that could withstand a grenade.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"And that's supposed to comfort me?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"At least we know they can die.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"U-O Seven-Seven-Three-Four.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Individual instances of U-O Seven-Seven-Three-Four.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"To be kept in a standard biohazardous containment chamber.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Until such time as more permanent arrangements are made.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Shows a noted preference for human brain tissue.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Destroy the specimen if it begins to interact with the lock.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Kill them all and let God sort them out!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I watched a snail crawl along the edge of a straight razor.\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I've seen horrors, horrors that you've seen.\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I love the smell of napalm in the morning.\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"This is the way the fuckin' world ends.\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Look at this fuckin' shit we're in, man.\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Every man has got a breaking point.\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'ma cut those fuckin' tentacles off, bitch!\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Watch you bleed out!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I wonder if it understands us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Do you understand what I'm saying?\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Look, it's responding!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"That's the first time it moved all morning.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm certain it's trying to understand us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm not convinced it can actually comprehend us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's just repeating us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Just being an alien creature doesn't mean it's intelligent.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Just because it doesn't look like you doesn't mean that it isn't.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Please open the door and enter the cell.\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Would it react differently with a child?\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Experiments to determine extent of cognitive abilities still underway.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Subject has so far displayed a total lack of empathy toward human suffering.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I got a round trip ticket.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How's your mom doing?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How's your dad doing?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I love you.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I love you too.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Just a little.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Only a few more days 'til the weekend.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Do you smoke?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You're new here, aren't you?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How do you like it here?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It won't hurt a bit.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"That was a long time ago.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Does it scare you?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Don't worry, it can't hurt us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"What are you afraid will happen?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Anything else?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You think they're the same sex?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Do they even have sex?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Can I see your phone?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You got a dollar I can borrow?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you busy at the moment?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you busy later?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you busy tonight?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you free tonight?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you going to the party tonight?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you going to help them?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you alone?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you hungry?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm hungry.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Go ahead.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Have a good time.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Have you eaten yet?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Is it supposed to rain tomorrow?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Okay.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Good.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Great.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Fantastic.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"God damn it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"God damn it!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Damn it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Damn it!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Fuck.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Shit.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Fuck!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Shit!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Fuckin' piece of garbage.\"", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I need a new lab coat.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Excellent.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Excuse me.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Go ahead.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Good morning.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Good afternoon.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Good evening.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Good night.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Good luck.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Can I help you?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you seeing anyone?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Forget it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How long were you two together?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Give me a call later.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Call me.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"From time to time.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We have a serious situation here.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Call the police.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Call an ambulance.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Get me the White House.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you feeling all right?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I think I'll live.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I think I need to see a doctor.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Is everything all right?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm okay, don't worry about me.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's just a scratch.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I've got a headache.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm fine.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Are you sure?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Positive.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Affirmative.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Negative.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Sorry.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Happy Birthday!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Have you ever been to California?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"What time do you get off?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We should hit up the shooting range later.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'm heading to the pool after work.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Have a good trip.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Where did you come from?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Have you been waiting long?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Have you done this before?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Hello.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Help!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Here it is.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I've got family coming tomorrow.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How do I use this?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How do you know?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How long have you been here?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How many languages do you speak?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How many people?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How much were these earrings?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How much do I owe you?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How much will it cost?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How much would you like?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How old are you?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How tall is it?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How was the movie?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How was your trip?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How's it going?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"See you later.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"See you tonight.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I got this weird rash a few days ago.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Let me have a look at it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"When did you find out?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Seven o'clock.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Nobody is helping us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We're on our own.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We're all alone.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"We should split into groups of two each.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It can't follow all of us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Be careful out there.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"There you are.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I've been looking all over for you.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's looking for us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's faster than us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's looking right at us.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"It's heading right for us!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Can you swim?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Don't do that.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"You hear that?\"", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Be quiet.\"", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Look out!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Run!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Hurry!\"", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"No!\"", + "volume" : 50 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"I'll never forget you.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Take his gun, we're going to need it.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"How do we get out of here?\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"This place is like a maze.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Oh God, I'm the only one left.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Please, I don't want to die.\"", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Mom.\"", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Mom, I miss you.\"", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"Please, God.\"", + "volume" : 5 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a gurgling sound.", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a choking sound.", + "volume" : 10 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a snapping sound.", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a beeping sound.", + "volume" : 20 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a loud beeping sound.", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a very loud beeping sound.", + "volume" : 40 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a loud hiss.", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a loud crackling noise.", + "volume" : 30 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "gunfire!", + "volume" : 90 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a klaxon blaring!", + "volume" : 90 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "\"EMERGENCY, EMERGENCY!\"", + "volume" : 70 + },{ + "type" : "speech", + "speaker" : "migo", + "sound" : "a static hissing sound.", + "volume" : 30 + } ] diff --git a/data/json/monstergroups.json b/data/json/monstergroups.json index 2265ce4a5afc5..dea418eebfd71 100644 --- a/data/json/monstergroups.json +++ b/data/json/monstergroups.json @@ -1,7 +1,7 @@ [ - { - "type":"monstergroup", - "name" : "GROUP_FOREST", + { + "type" : "monstergroup", + "name" : "GROUP_FOREST", "default" : "mon_squirrel", "monsters" : [ { "monster" : "mon_bat", "freq" : 10, "cost_multiplier" : 2, "pack_size" : [1,8] }, @@ -24,8 +24,8 @@ { "monster" : "mon_groundhog", "freq" : 10, "cost_multiplier" : 5, "pack_size" : [1,6] }, { "monster" : "mon_hare", "freq" : 30, "cost_multiplier" : 2, "pack_size" : [1,6] }, { "monster" : "mon_moose", "freq" : 10, "cost_multiplier" : 3 }, - { "monster" : "mon_mosquito", "freq" : 100, "cost_multiplier" : 0, "conditions" : ["TWILIGHT"] }, - { "monster" : "mon_mosquito", "freq" : 50, "cost_multiplier" : 0, "pack_size" : [1,14], "conditions" : ["TWILIGHT"] }, + { "monster" : "mon_mosquito", "freq" : 100, "cost_multiplier" : 0, "conditions" : ["DAWN","DUSK"] }, + { "monster" : "mon_mosquito", "freq" : 50, "cost_multiplier" : 0, "pack_size" : [1,14], "conditions" : ["DAWN","DUSK"] }, { "monster" : "mon_rabbit", "freq" : 25, "cost_multiplier" : 0, "pack_size" : [1,5] }, { "monster" : "mon_shrew", "freq" : 15, "cost_multiplier" : 0 }, { "monster" : "mon_squirrel_red", "freq" : 35, "cost_multiplier" : 0, "pack_size" : [1,2] }, @@ -49,10 +49,9 @@ { "monster" : "mon_zombear", "freq" : 4, "cost_multiplier" : 10, "starts" : 672 }, { "monster" : "mon_zombear", "freq" : 4, "cost_multiplier" : 10, "starts" : 2160 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_DOMESTIC", + },{ + "type" : "monstergroup", + "name" : "GROUP_DOMESTIC", "default" : "mon_dog", "monsters" : [ { "monster" : "mon_cat", "freq" : 100, "cost_multiplier" : 0 }, @@ -64,58 +63,53 @@ { "monster" : "mon_pig", "freq" : 50, "cost_multiplier" : 25, "pack_size" : [1,6] }, { "monster" : "mon_sheep", "freq" : 50, "cost_multiplier" : 25, "pack_size" : [1,12] } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_RIVER", + },{ + "type" : "monstergroup", + "name" : "GROUP_RIVER", "default" : "mon_frog", "monsters" : [ { "monster" : "mon_beaver", "freq" : 30, "cost_multiplier" : 10, "pack_size" : [1,3] }, { "monster" : "mon_mink", "freq" : 10, "cost_multiplier" : 20, "pack_size" : [1,2] }, { "monster" : "mon_muskrat", "freq" : 30, "cost_multiplier" : 5, "pack_size" : [1,5] }, { "monster" : "mon_otter", "freq" : 10, "cost_multiplier" : 5, "pack_size" : [1,8] }, + { "monster" : "mon_duck", "freq" : 30, "cost_multiplier" : 5, "pack_size" : [1, 4] }, { "monster" : "mon_sludge_crawler", "freq" : 15, "cost_multiplier" : 50 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_CAVE", + },{ + "type" : "monstergroup", + "name" : "GROUP_CAVE", "default" : "mon_null", "monsters" : [ { "monster" : "mon_bat", "freq" : 600, "cost_multiplier" : 5, "pack_size" : [6,32] }, { "monster" : "mon_bear", "freq" : 100, "cost_multiplier" : 10, "pack_size" : [1,3] }, { "monster" : "mon_cougar", "freq" : 100, "cost_multiplier" : 20, "pack_size" : [1,2] } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_ANT", + },{ + "type" : "monstergroup", + "name" : "GROUP_ANT", "default" : "mon_ant", "monsters" : [ { "monster" : "mon_ant_larva", "freq" : 40, "cost_multiplier" : 0 }, { "monster" : "mon_ant_soldier", "freq" : 90, "cost_multiplier" : 5 }, { "monster" : "mon_ant_queen", "freq" : 0, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_BEE", + },{ + "type" : "monstergroup", + "name" : "GROUP_BEE", "default" : "mon_bee", "monsters" : [ ] - }, - { - "type":"monstergroup", - "name" : "GROUP_WORM", + },{ + "type" : "monstergroup", + "name" : "GROUP_WORM", "default" : "mon_worm", "monsters" : [ { "monster" : "mon_graboid", "freq" : 30, "cost_multiplier" : 20 }, { "monster" : "mon_halfworm", "freq" : 0, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_ZOMBIE", + },{ + "type" : "monstergroup", + "name" : "GROUP_ZOMBIE", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie", "freq" : 1, "cost_multiplier": 7, "pack_size": [5,10]}, @@ -143,10 +137,9 @@ { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 30 }, { "monster" : "mon_beekeeper", "freq" : 1, "cost_multiplier" : 5 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_TRIFFID", + },{ + "type" : "monstergroup", + "name" : "GROUP_TRIFFID", "default" : "mon_triffid", "monsters" : [ { "monster" : "mon_triffid_young", "freq" : 300, "cost_multiplier" : 0 }, @@ -155,10 +148,9 @@ { "monster" : "mon_triffid_queen", "freq" : 60, "cost_multiplier" : 0 }, { "monster" : "mon_triffid_heart", "freq" : 0, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_FUNGI", + },{ + "type" : "monstergroup", + "name" : "GROUP_FUNGI", "default" : "mon_spore", "monsters" : [ { "monster" : "mon_fungaloid", "freq" : 300, "cost_multiplier" : 0 }, @@ -172,36 +164,33 @@ { "type":"monstergroup", - "name" : "GROUP_GOO", + "name" : "GROUP_GOO", "default" : "mon_blob", "monsters" : [ { "monster" : "mon_blob_small", "freq" : 200, "cost_multiplier" : 0 }, { "monster" : "mon_blob_small", "freq" : 100, "cost_multiplier" : 0, "pack_size" : [2,12] }, { "monster" : "mon_blob", "freq" : 10, "cost_multiplier" : 0, "pack_size" : [5,10] } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_CHUD", + },{ + "type" : "monstergroup", + "name" : "GROUP_CHUD", "default" : "mon_chud", "monsters" : [ { "monster" : "mon_one_eye", "freq" : 90, "cost_multiplier" : 0 }, { "monster" : "mon_crawler", "freq" : 35, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_SEWER", + },{ + "type" : "monstergroup", + "name" : "GROUP_SEWER", "default" : "mon_sewer_rat", "monsters" : [ { "monster" : "mon_sewer_fish", "freq" : 300, "cost_multiplier" : 0, "pack_size" : [2,6] }, { "monster" : "mon_sewer_snake", "freq" : 240, "cost_multiplier" : 0 }, { "monster" : "mon_sewer_rat", "freq" : 100, "cost_multiplier" : 0, "pack_size" : [3,12] } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_SWAMP", + },{ + "type" : "monstergroup", + "name" : "GROUP_SWAMP", "default" : "mon_frog", "monsters" : [ { "monster" : "mon_mosquito", "freq" : 100, "cost_multiplier" : 0, "pack_size" : [3,16] }, @@ -218,10 +207,9 @@ { "monster" : "mon_dermatik", "freq" : 20, "cost_multiplier" : 2 }, { "monster" : "mon_giant_crayfish", "freq" : 20, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_LAB", + },{ + "type" : "monstergroup", + "name" : "GROUP_LAB", "default" : "mon_zombie_scientist", "monsters" : [ { "monster" : "mon_blob_small", "freq" : 25, "cost_multiplier" : 0, "pack_size" : [1,4] }, @@ -231,10 +219,9 @@ { "monster" : "mon_skitterbot", "freq" : 85, "cost_multiplier" : 0, "pack_size" : [2,3] }, { "monster" : "mon_skitterbot", "freq" : 1, "cost_multiplier" : 0, "pack_size" : [8,12] } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_ICE_LAB", + },{ + "type" : "monstergroup", + "name" : "GROUP_ICE_LAB", "default" : "mon_zombie_scientist", "monsters" : [ { "monster" : "mon_blob_small", "freq" : 25, "cost_multiplier" : 0, "pack_size" : [1,4] }, @@ -244,10 +231,9 @@ { "monster" : "mon_skitterbot", "freq" : 145, "cost_multiplier" : 0, "pack_size" : [2,3] } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_NETHER", + },{ + "type" : "monstergroup", + "name" : "GROUP_NETHER", "default" : "mon_blank", "monsters" : [ { "monster" : "mon_flying_polyp", "freq" : 25, "cost_multiplier" : 0 }, @@ -259,37 +245,33 @@ { "monster" : "mon_kreck", "freq" : 210, "cost_multiplier" : 0 }, { "monster" : "mon_gozu", "freq" : 25, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_SPIRAL", + },{ + "type" : "monstergroup", + "name" : "GROUP_SPIRAL", "default" : "mon_human_snail", "monsters" : [ { "monster" : "mon_twisted_body", "freq" : 180, "cost_multiplier" : 0 }, { "monster" : "mon_vortex", "freq" : 80, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_VANILLA", + },{ + "type" : "monstergroup", + "name" : "GROUP_VANILLA", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie_fast", "freq" : 40, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_SPIDER", + },{ + "type" : "monstergroup", + "name" : "GROUP_SPIDER", "default" : "mon_spider_wolf", "monsters" : [ { "monster" : "mon_spider_web", "freq" : 200, "cost_multiplier" : 0 }, { "monster" : "mon_spider_jumping", "freq" : 400, "cost_multiplier" : 0 }, { "monster" : "mon_spider_widow", "freq" : 200, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_ROBOT", + },{ + "type" : "monstergroup", + "name" : "GROUP_ROBOT", "default" : "mon_manhack", "monsters" : [ { "monster" : "mon_skitterbot", "freq" : 220, "cost_multiplier" : 0 }, @@ -300,10 +282,9 @@ { "monster" : "mon_chickenbot", "freq" : 60, "cost_multiplier" : 0 }, { "monster" : "mon_tankbot", "freq" : 20, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_POLICE", "_comment" : "+30% cops", + },{ + "type" : "monstergroup", + "name" : "GROUP_POLICE", "_comment" : "+30% cops", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie_cop", "freq" : 320, "cost_multiplier" : 3 }, @@ -321,10 +302,9 @@ { "monster" : "mon_zombie_hulk", "freq" : 1, "cost_multiplier" : 50 }, { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 25 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_HOUSE", "_comment" : "+15% child", + },{ + "type" : "monstergroup", + "name" : "GROUP_HOUSE", "_comment" : "+15% child", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie_child", "freq" : 150, "cost_multiplier" : 2 }, @@ -343,10 +323,9 @@ { "monster" : "mon_zombie_hulk", "freq" : 1, "cost_multiplier" : 50 }, { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 25 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_PHARM", "_comment" : "+15% fast", + },{ + "type" : "monstergroup", + "name" : "GROUP_PHARM", "_comment" : "+15% fast", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie_cop", "freq" : 20, "cost_multiplier" : 2 }, @@ -364,10 +343,9 @@ { "monster" : "mon_zombie_hulk", "freq" : 1, "cost_multiplier" : 50 }, { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 25 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_ELECTRO", "_comment" : "+15% electric", + },{ + "type" : "monstergroup", + "name" : "GROUP_ELECTRO", "_comment" : "+15% electric", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie_cop", "freq" : 20, "cost_multiplier" : 2 }, @@ -385,10 +363,9 @@ { "monster" : "mon_zombie_hulk", "freq" : 1, "cost_multiplier" : 50 }, { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 25 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_GROCERY", "_comment" : "+15% bommers", + },{ + "type" : "monstergroup", + "name" : "GROUP_GROCERY", "_comment" : "+15% bommers", "default" : "mon_zombie", "monsters" : [ { "monster" : "mon_zombie_cop", "freq" : 20, "cost_multiplier" : 2 }, @@ -406,18 +383,16 @@ { "monster" : "mon_zombie_hulk", "freq" : 1, "cost_multiplier" : 50 }, { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 25 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_MAYBE_MIL", "_comment" : "50% chance military zombie", + },{ + "type" : "monstergroup", + "name" : "GROUP_MAYBE_MIL", "_comment" : "50% chance military zombie", "default" : "mon_null", "monsters" : [ { "monster" : "mon_zombie_soldier", "freq" : 50, "cost_multiplier" : 0 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_PUBLICWORKERS", + },{ + "type" : "monstergroup", + "name" : "GROUP_PUBLICWORKERS", "default" : "mon_zombie_electric", "monsters" : [ { "monster" : "mon_zombie_grabber", "freq" : 100, "cost_multiplier" : 1 }, @@ -429,10 +404,9 @@ { "monster" : "mon_zombie_hulk", "freq" : 1, "cost_multiplier" : 50 }, { "monster" : "mon_zombie_master", "freq" : 1, "cost_multiplier" : 25 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_MAYBE_ZOMBIE", "_comment" : "10% chance of a zombie", + },{ + "type" : "monstergroup", + "name" : "GROUP_MAYBE_ZOMBIE", "_comment" : "10% chance of a zombie", "default" : "mon_null", "monsters" : [ { "monster" : "mon_zombie", "freq" : 60, "cost_multiplier": 0, "pack_size": [1,5] }, @@ -441,10 +415,9 @@ { "monster" : "mon_skeleton", "freq" : 10, "cost_multiplier" : 5 }, { "monster" : "mon_zombie_shrieker", "freq" : 10, "cost_multiplier" : 5 } ] - }, - { - "type":"monstergroup", - "name" : "GROUP_SAFE", "_comment" : "used by mongroup::is_safe()", + },{ + "type" : "monstergroup", + "name" : "GROUP_SAFE", "_comment" : "used by mongroup::is_safe()", "default" : "mon_null", "monsters" : [ { "monster" : "mon_bat", "freq" : 1, "cost_multiplier" : 1 }, diff --git a/data/json/monsters.json b/data/json/monsters.json index 5732ca5413c54..9b789455cff2a 100644 --- a/data/json/monsters.json +++ b/data/json/monsters.json @@ -1,7 +1,7 @@ [ - { - "type":"MONSTER", - "id":"mon_bat", + { + "type" : "MONSTER", + "id" : "mon_bat", "name": "bat", "species":"MAMMAL", "symbol":"w", @@ -25,14 +25,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"BITE", - "description":"One of the vesper bats, a family of winged insect-eating mammals. It roosts in caves and other hollows, and uses a form of echolocation to aerially navigate through tricky terrain at rapid speeds.", + "description":"One of the vesper bats, a family of winged insect-eating mammals. It roosts in caves and other hollows, and uses a form of echolocation to aerially navigate through tricky terrain at rapid speeds.", "flags":["SEES", "SMELLS", "HEARS", "GOODHEARING", "WARM", "FLIES", "ANIMAL", "VIS50", "BONES", "LEATHER"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_beaver", + },{ + "type" : "MONSTER", + "id" : "mon_beaver", "name": "beaver", "species":"MAMMAL", "symbol":"r", @@ -56,15 +55,44 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The North American beaver, the continent's largest rodent. Its paddle-shaped tail helps ferry it through the water, and its prominent teeth can chew through wood, which it uses to build dam-like nests in lakes and streams.", + "description":"The North American beaver, the continent's largest rodent. Its paddle-shaped tail helps ferry it through the water, and its prominent teeth can chew through wood, which it uses to build dam-like nests in lakes and streams.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "SWIMS", "WARM", "FUR", "BONES"], "anger_triggers":["PLAYER_CLOSE", "HURT"], "fear_triggers":["SOUND"], "categories":["WILDLIFE"] - }, - { + },{ "type":"MONSTER", - "id":"mon_bear", + "id":"mon_duck", + "name": "duck", + "species":"BIRD", + "symbol":"v", + "color":"brown", + "size":"TINY", + "material":"flesh", + "diff":1, + "aggression":-99, + "morale":-8, + "speed":140, + "melee_skill":0, + "melee_dice":1, + "melee_dice_sides":1, + "melee_cut":0, + "dodge":4, + "armor_bash":0, + "armor_cut":0, + "item_chance":0, + "luminance":0, + "hp":4, + "special_freq":0, + "death_function":"NORMAL", + "special_attack":"NONE", + "description":"A mallard duck, often seen around rivers and other bodies of water. It feeds primarily on insects, seeds, roots, and, pre-cataclysm, bread scraps.", + "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FLIES", "VIS40", "BONES", "FEATHER"], + "fear_triggers":["SOUND", "PLAYER_CLOSE"], + "categories":["WILDLIFE"] + },{ + "type" : "MONSTER", + "id" : "mon_bear", "name": "bear", "species":"MAMMAL", "symbol":"B", @@ -88,15 +116,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The American black bear. A large omnivorous scavenger, it has powerful claws and jaws, and is an effective ambush hunter. It can pose a considerable threat, although most individuals are shy around humans.", + "description":"The American black bear. A large omnivorous scavenger, it has powerful claws and jaws, and is an effective ambush hunter. It can pose a considerable threat, although most individuals are shy around humans.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "BLEED", "BASHES", "ATTACKMON", "BONES", "VIS40"], "anger_triggers":["HURT", "PLAYER_CLOSE"], "placate_triggers":["MEAT"], + "fear_triggers":["SOUND"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_bobcat", + },{ + "type" : "MONSTER", + "id" : "mon_bobcat", "name": "bobcat", "species":"MAMMAL", "symbol":"c", @@ -120,15 +148,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A spotted wild cat living across much of North America. It is not a serious threat to humans, but it can be aggressive if not left alone.", + "description":"A spotted wild cat living across much of North America. It is not a serious threat to humans, but it can be aggressive if not left alone.", "flags":["SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "WARM", "FUR", "HIT_AND_RUN", "VIS40", "BONES"], "placate_triggers":["MEAT"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_cat", + },{ + "type" : "MONSTER", + "id" : "mon_cat", "name": "cat", "species":"MAMMAL", "symbol":"c", @@ -152,15 +179,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A small domesticated predator gone feral in the absence of human stewardship. Harried by the elements and the rigors of survival, it is scruffy and skittish.", + "description":"A small domesticated predator gone feral in the absence of human stewardship. Harried by the elements and the rigors of survival, it is scruffy and skittish.", "flags":["SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "WARM", "FUR", "HIT_AND_RUN", "VIS40", "BONES"], "placate_triggers":["MEAT"], "fear_triggers":["SOUND", "PLAYER_CLOSE", "FRIEND_ATTACKED"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_chicken", + },{ + "type" : "MONSTER", + "id" : "mon_chicken", "name": "chicken", "species":"BIRD", "symbol":"v", @@ -184,13 +210,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A domesticated juglefowl, it may still be the most numerous bird in the world. Before the Cataclysm, it was raised by humans as a source of meat, eggs, and early morning wakeup calls.", + "description":"A domesticated descendant of junglefowl, it may still be the most numerous bird in the world. Before the Cataclysm, it was raised by humans as a source of meat, eggs, and early morning wakeup calls.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FLIES", "BONES", "FEATHER"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_chipmunk", + },{ + "type" : "MONSTER", + "id" : "mon_chipmunk", "name": "chipmunk", "species":"MAMMAL", "symbol":".", @@ -214,14 +239,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The eastern chipmunk, a tiny omnivorous rodent with a characteristic striped coat. It spends much of the day patrolling its elaborate burrow and the precious stores of foraged food within.", + "description":"The eastern chipmunk, a tiny omnivorous rodent with a characteristic striped coat. It spends much of the day patrolling its elaborate burrow and the precious stores of foraged food within.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "ANIMAL", "VIS40", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_cougar", + },{ + "type" : "MONSTER", + "id" : "mon_cougar", "name": "cougar", "species":"MAMMAL", "symbol":"C", @@ -245,16 +269,15 @@ "special_freq":5, "death_function":"NORMAL", "special_attack":"LEAP", - "description":"The Eastern cougar, a large feline predator. Once thought extinct in this region, conservation efforts were successful in restoring a thriving population.", + "description":"The Eastern cougar, a large feline predator. Once thought extinct in this region, conservation efforts were successful in restoring a thriving population.", "flags":["SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "WARM", "FUR", "HIT_AND_RUN", "KEENNOSE", "BLEED", "ATTACKMON", "VIS50", "BONES"], "anger_triggers":["STALK", "PLAYER_WEAK", "HURT", "PLAYER_CLOSE", "FRIEND_ATTACKED"], "placate_triggers":["MEAT"], "fear_triggers":["SOUND"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_cow", + },{ + "type" : "MONSTER", + "id" : "mon_cow", "name": "cow", "species":"MAMMAL", "symbol":"C", @@ -278,16 +301,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The domestic cow, a baleful, ruminating farm animal. It is quite muscular, and the males can have a violent streak to accompany their nasty-looking horns.", + "description":"The domestic cow, a baleful, ruminating farm animal. It is quite muscular, and the males can have a violent streak to accompany their nasty-looking horns.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "BONES", "VIS40"], "anger_triggers":["HURT"], "placate_triggers":["PLAYER_WEAK"], "fear_triggers":["PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_coyote", + },{ + "type" : "MONSTER", + "id" : "mon_coyote", "name": "coyote", "species":"MAMMAL", "symbol":"d", @@ -311,15 +333,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The Eastern Coyote, also called the Tweed Wolf, is a territorial canine descended from the offspring of grey wolves and true coyotes. It is intimidated by humans and other predators, but will fight if threatened.", + "description":"The Eastern Coyote, also called the Tweed Wolf, is a territorial canine descended from the offspring of grey wolves and true coyotes. It is intimidated by humans and other predators, but will fight if threatened.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "HIT_AND_RUN", "KEENNOSE", "BLEED", "ATTACKMON", "BONES", "VIS50"], "anger_triggers":["STALK", "FRIEND_ATTACKED", "PLAYER_WEAK", "HURT", "PLAYER_CLOSE"], "placate_triggers":["MEAT"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_coyote_wolf", + },{ + "type" : "MONSTER", + "id" : "mon_coyote_wolf", "name": "coyote", "species":"MAMMAL", "symbol":"d", @@ -343,15 +364,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The Northeastern Coyote, a widespread canine pack hunter. More timid than a wolf, it is an opportunistic feeder and prefers to hunt smaller and weaker prey.", + "description":"The Northeastern Coyote, a widespread canine pack hunter. More timid than a wolf, it is an opportunistic feeder and prefers to hunt smaller and weaker prey.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "KEENNOSE", "BLEED", "ATTACKMON", "BONES", "VIS50"], "anger_triggers":["FRIEND_ATTACKED", "PLAYER_WEAK", "PLAYER_CLOSE"], "placate_triggers":["MEAT"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_crow", + },{ + "type" : "MONSTER", + "id" : "mon_crow", "name": "crow", "species":"BIRD", "symbol":"v", @@ -375,14 +395,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A small, elegant black bird, famous for its distinctive call. An intelligent bird, there is a glitter of mischief behind its eyes.", + "description":"A small, elegant black bird, famous for its distinctive call. An intelligent bird, there is a glitter of mischief behind its eyes.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FLIES", "VIS40", "BONES", "FEATHER"], "fear_triggers":["PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_deer", + },{ + "type" : "MONSTER", + "id" : "mon_deer", "name": "deer", "species":"MAMMAL", "symbol":"D", @@ -406,14 +425,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The northern woodland white-tailed deer, a quick and strong grazing animal. Favored prey of coyotes, wolves, and giant spider mutants.", + "description":"The northern woodland white-tailed deer, a quick and strong grazing animal. Favored prey of coyotes, wolves, and giant spider mutants.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "VIS40", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_deer_mouse", + },{ + "type" : "MONSTER", + "id" : "mon_deer_mouse", "name": "deer mouse", "species":"MAMMAL", "symbol":".", @@ -441,10 +459,9 @@ "flags":["SEES", "SMELLS", "HEARS", "WARM", "SWIMS", "ANIMAL", "VIS40", "VERMIN"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_dog", + },{ + "type" : "MONSTER", + "id" : "mon_dog", "name": "dog", "species":"MAMMAL", "symbol":"d", @@ -473,10 +490,9 @@ "anger_triggers":["HURT", "FRIEND_ATTACKED", "FRIEND_DIED"], "placate_triggers":["MEAT"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_fox_gray", + },{ + "type" : "MONSTER", + "id" : "mon_fox_gray", "name": "fox", "species":"MAMMAL", "symbol":"d", @@ -500,16 +516,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A small omnivorous canine with an almost cat-like manner. It is a solitary hunter, and one of the only canids able to climb trees.", + "description":"A small omnivorous canine with an almost cat-like manner. It is a solitary hunter, and one of the only canids able to climb trees.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "HIT_AND_RUN", "KEENNOSE", "BLEED", "VIS40", "BONES"], "anger_triggers":["FRIEND_ATTACKED", "FRIEND_DIED"], "placate_triggers":["MEAT"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_fox_red", + },{ + "type" : "MONSTER", + "id" : "mon_fox_red", "name": "fox", "species":"MAMMAL", "symbol":"d", @@ -539,10 +554,9 @@ "placate_triggers":["MEAT"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_groundhog", + },{ + "type" : "MONSTER", + "id" : "mon_groundhog", "name": "groundhog", "species":"MAMMAL", "symbol":"r", @@ -570,10 +584,9 @@ "flags":["SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "WARM", "FUR", "VIS40", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_hare", + },{ + "type" : "MONSTER", + "id" : "mon_hare", "name": "jackrabbit", "species":"MAMMAL", "symbol":"r", @@ -601,10 +614,9 @@ "flags":["SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "WARM", "FUR", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_horse", + },{ + "type" : "MONSTER", + "id" : "mon_horse", "name": "horse", "species":"MAMMAL", "symbol":"H", @@ -628,16 +640,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A hooved grazing mammal with a mane of hair, a sweeping tail, and powerful looking muscles", + "description":"A hooved grazing mammal with a mane of hair, a sweeping tail, and powerful looking muscles.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "BONES", "VIS40"], "anger_triggers":["FRIEND_ATTACKED"], "placate_triggers":["PLAYER_WEAK"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_lemming", + },{ + "type" : "MONSTER", + "id" : "mon_lemming", "name": "lemming", "species":"MAMMAL", "symbol":".", @@ -661,14 +672,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The Northern bog lemming, a small, predominantly vegetarian rodent that spends its life in the murk of swamps and other wetlands. Contrary to popular belief, these creatures are not particularly hapless or suicidal, but they can eat themselves into scarcity within a few generations.", + "description":"The Northern bog lemming, a small, predominantly vegetarian rodent that spends its life in the murk of swamps and other wetlands. Contrary to popular belief, these creatures are not particularly hapless or suicidal, but they can eat themselves into scarcity within a few generations.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "SWIMS", "ANIMAL", "VIS40"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_mink", + },{ + "type" : "MONSTER", + "id" : "mon_mink", "name": "mink", "species":"MAMMAL", "symbol":"m", @@ -692,16 +702,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The American mink, a partially-aquatic weasel, once factory-farmed for its fur. It is a capable fisher, but the presence of otters in these parts makes it rely more on food from the land.", + "description":"The American mink, a partially-aquatic weasel, once factory-farmed for its fur. It is a capable fisher, but the presence of otters in these parts makes it rely more on food from the land.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "HIT_AND_RUN", "KEENNOSE", "BLEED", "VIS40", "BONES"], "anger_triggers":["FRIEND_ATTACKED", "FRIEND_DIED"], "placate_triggers":["MEAT"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_moose", + },{ + "type" : "MONSTER", + "id" : "mon_moose", "name": "moose", "species":"MAMMAL", "symbol":"M", @@ -725,16 +734,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The Eastern Moose, the largest living species of deer. The bulls are quite ill-tempered, especially in the rutting season.", + "description":"The Eastern Moose, the largest living species of deer. The bulls are quite ill-tempered, especially in the rutting season.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "BLEED", "VIS40", "ATTACKMON", "BONES"], "anger_triggers":["HURT", "PLAYER_CLOSE"], "placate_triggers":["PLAYER_WEAK"], "fear_triggers":["SOUND"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_muskrat", + },{ + "type" : "MONSTER", + "id" : "mon_muskrat", "name": "muskrat", "species":"MAMMAL", "symbol":"r", @@ -758,14 +766,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A large omnivorous rodent with a thick furry pelt, found in wetlands across the northern hemisphere. It marks its territory with a musky odor for which it is named.", + "description":"A large omnivorous rodent with a thick furry pelt, found in wetlands across the northern hemisphere. It marks its territory with a musky odor for which it is named.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "SWIMS", "ANIMAL", "FUR", "VIS40", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_otter", + },{ + "type" : "MONSTER", + "id" : "mon_otter", "name": "otter", "species":"MAMMAL", "symbol":"m", @@ -789,14 +796,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The North American river otter is a shy waterborne weasel living in large families along the banks of streams. It is an excellent fisher and a resourceful survivor, using the abandoned dens of beavers and other animals to raise its own young.", + "description":"The North American river otter is a shy water dwelling relative of the weasel living in large families along the banks of streams. It is an excellent fisher and a resourceful survivor, using the abandoned dens of beavers and other animals to raise its own young.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "SWIMS", "WARM", "FUR", "VIS40", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_pig", + },{ + "type" : "MONSTER", + "id" : "mon_pig", "name": "pig", "species":"MAMMAL", "symbol":"p", @@ -826,10 +832,9 @@ "placate_triggers":["MEAT"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_rabbit", + },{ + "type" : "MONSTER", + "id" : "mon_rabbit", "name": "rabbit", "species":"MAMMAL", "symbol":"r", @@ -853,14 +858,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A cute wiggling nose, cotton tail, made of delicious flesh.", + "description":"A small mammal with a cute wiggling nose, cotton tail, and made of delicious flesh.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_black_rat", + },{ + "type" : "MONSTER", + "id" : "mon_black_rat", "name": "black rat", "species":"MAMMAL", "symbol":"r", @@ -884,15 +888,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The black rat, an omnivorous rodent with sheer black fur and a long, rough tail. Harbinger of pestilence, famine, and mange, it will sometimes swarm over the dead or dying.", + "description":"The black rat, an omnivorous rodent with sheer black fur and a long, rough tail. Harbinger of pestilence, famine, and mange, it will sometimes swarm over the dead or dying.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "SWIMS", "ANIMAL", "FUR", "VIS40", "BONES"], "anger_triggers":["PLAYER_WEAK"], "fear_triggers":["PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_sewer_rat", + },{ + "type" : "MONSTER", + "id" : "mon_sewer_rat", "name": "sewer rat", "species":"MAMMAL", "symbol":"r", @@ -916,14 +919,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A worm-tailed rodent with long whiskers and beady eyes. The way it squeeks makes it sound... hungry.", + "description":"A worm-tailed rodent with long whiskers and beady eyes. The way it squeaks makes it sound... hungry.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "SWIMS", "ANIMAL", "FUR", "VIS40", "BONES"], "anger_triggers":["PLAYER_WEAK", "FRIEND_ATTACKED", "FRIEND_DIED"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_sheep", + },{ + "type" : "MONSTER", + "id" : "mon_sheep", "name": "sheep", "species":"MAMMAL", "symbol":"s", @@ -947,16 +949,15 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A timid hooved grazing mammal, and one of the first animals ever domesticated, its body is covered in a thick layer of wool, and the males have long, spiraling horns.", + "description":"A timid, hooved grazing mammal, and one of the first animals ever domesticated, its body is covered in a thick layer of wool, and the males have long, spiralling horns.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "WOOL", "BONES"], "anger_triggers":[], "placate_triggers":["PLAYER_WEAK"], "fear_triggers":["SOUND", "PLAYER_CLOSE", "FRIEND_ATTACKED"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_zombear", + },{ + "type" : "MONSTER", + "id" : "mon_zombear", "name": "zombear", "species":"ZOMBIE", "symbol":"B", @@ -980,15 +981,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"This black bear's eyes ooze with black fluid, and it's flesh is torn and scarred. It shuffles as it walks.", + "description":"This black bear's eyes ooze with black fluid, and its flesh is torn and scarred. It shuffles as it walks.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS40", "REVIVES"], "anger_triggers":["PLAYER_CLOSE", "HURT"], "fear_triggers":["FIRE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_shrew", + },{ + "type" : "MONSTER", + "id" : "mon_shrew", "name": "shrew", "species":"MAMMAL", "symbol":".", @@ -1016,10 +1016,9 @@ "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "VERMIN"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_squirrel", + },{ + "type" : "MONSTER", + "id" : "mon_squirrel", "name": "squirrel", "species":"MAMMAL", "symbol":"r", @@ -1043,14 +1042,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A small granivorous rodent with a long bushy tail, often seen darting amid the branches of trees. A skittish varmint with an expression of unwavering austerity, it is the mortal enemy of cat and dog alike.", + "description":"A small granivorous rodent with a long bushy tail, often seen darting amid the branches of trees. A skittish varmint with an expression of unwavering austerity, it is the mortal enemy of cat and dog alike.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_squirrel_red", + },{ + "type" : "MONSTER", + "id" : "mon_squirrel_red", "name": "squirrel", "species":"MAMMAL", "symbol":"r", @@ -1074,13 +1072,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A tiny opportunistic rodent with a long bushy tail, the pine squirrel is clever and cute, and hunted by nearly everything in the woods with a taste for meat.", + "description":"A tiny opportunistic rodent with a long bushy tail. The pine squirrel is clever and cute, and hunted by nearly everything in the woods with a taste for meat.", "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_weasel", + },{ + "type" : "MONSTER", + "id" : "mon_weasel", "name": "weasel", "species":"MAMMAL", "symbol":"m", @@ -1104,14 +1101,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The long-tailed weasel, a small but interminable predator whose range extends across the continent. It forms its den in small burrows, preferring to occupy the nesting holes of its prey.", + "description":"The long-tailed weasel, a small but ubiquitous predator whose range extends across the continent. It forms its den in small burrows, preferring to occupy the nesting holes of its prey.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "SWIMS", "WARM", "FUR", "VIS40", "BONES"], "fear_triggers":["SOUND", "PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_wolf", + },{ + "type" : "MONSTER", + "id" : "mon_wolf", "name": "wolf", "species":"MAMMAL", "symbol":"d", @@ -1135,15 +1131,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A cunning pack predator, once extinct in the New England area, was successfully reintroduced and their numbers reached record highs in the decade before the cataclysm. Lucky you.", + "description":"A cunning pack predator, once extinct in the New England area, the wolf successfully reintroduced and their numbers reached record highs in the decade before the cataclysm. Lucky you.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "KEENNOSE", "BLEED", "ATTACKMON", "BONES", "VIS50"], "anger_triggers":["STALK", "FRIEND_ATTACKED", "FRIEND_DIED", "PLAYER_WEAK", "PLAYER_CLOSE"], "placate_triggers":["MEAT"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_ant_larva", + },{ + "type" : "MONSTER", + "id" : "mon_ant_larva", "name": "ant larva", "species":"INSECT", "symbol":"a", @@ -1167,12 +1162,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A pulsating sausage of glistening white flesh, the size of a large cat. On one end is a set of squirming mouth parts.", + "description":"A pulsating sausage of glistening white flesh, the size of a large cat. On one end is a set of squirming mouth parts.", "flags":["SMELLS", "POISON"] - }, - { - "type":"MONSTER", - "id":"mon_ant", + },{ + "type" : "MONSTER", + "id" : "mon_ant", "name": "giant ant", "species":"INSECT", "symbol":"a", @@ -1196,13 +1190,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"An enormous red ant covered in chitinous plates. It carries a pair of wriggling antennae and vicious-looking mandibles.", + "description":"An enormous red ant covered in chitinous plates. It possesses a pair of wriggling antennae and vicious-looking mandibles.", "flags":["HEARS", "SMELLS", "CHITIN"], "anger_triggers":["FRIEND_ATTACKED", "FRIEND_DIED", "HURT", "PLAYER_WEAK"] - }, - { - "type":"MONSTER", - "id":"mon_ant_soldier", + },{ + "type" : "MONSTER", + "id" : "mon_ant_soldier", "name": "soldier ant", "species":"INSECT", "symbol":"a", @@ -1226,13 +1219,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A huge and hairy red ant almost twice the size of other giant ants. Bulging pincers extrude from its jaws.", + "description":"A huge and hairy red ant almost twice the size of other giant ants. Bulging pincers extend from its jaws.", "flags":["HEARS", "SMELLS", "CHITIN"], "anger_triggers":["FRIEND_ATTACKED", "FRIEND_DIED", "HURT", "PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_ant_queen", + },{ + "type" : "MONSTER", + "id" : "mon_ant_queen", "name": "queen ant", "species":"INSECT", "symbol":"a", @@ -1256,13 +1248,12 @@ "special_freq":1, "death_function":"NORMAL", "special_attack":"ANTQUEEN", - "description":"A colossal red ant with a bulging, bloated thorax. It moves slowly and delibrately, tending to nearby eggs and ever laying more.", + "description":"A colossal red ant with a bulging, bloated thorax. It moves slowly and deliberately, tending to nearby eggs and continually laying more.", "flags":["SMELLS", "QUEEN", "CHITIN"], "anger_triggers":["FRIEND_ATTACKED", "FRIEND_DIED", "HURT"] - }, - { - "type":"MONSTER", - "id":"mon_ant_fungus", + },{ + "type" : "MONSTER", + "id" : "mon_ant_fungus", "name": "fungal ant", "species":"FUNGUS", "symbol":"a", @@ -1288,10 +1279,9 @@ "special_attack":"FUNGUS", "description":"Pale, sickly gray in color, this giant ant's cracked exoskeleton is barely held together by coils of fungus erupting from every joint in its body.", "flags":["SMELLS", "POISON"] - }, - { - "type":"MONSTER", - "id":"mon_fly", + },{ + "type" : "MONSTER", + "id" : "mon_fly", "name": "giant fly", "species":"INSECT", "symbol":"a", @@ -1318,10 +1308,9 @@ "description":"A tremendous housefly the size of a small dog, predictably accompanied by a loud, incessant buzzing sound.", "flags":["SMELLS", "FLIES", "STUMBLES", "HIT_AND_RUN", "CHITIN"], "fear_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_bee", + },{ + "type" : "MONSTER", + "id" : "mon_bee", "name": "giant bee", "species":"INSECT", "symbol":"a", @@ -1345,13 +1334,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"With a stinger the size of a kitchen knife, this dog-sized insect's black and yellow markings warn you to leave it indisturbed.", + "description":"With a stinger the size of a kitchen knife, this dog-sized insect's black and yellow markings warn you to leave it undisturbed.", "flags":["SMELLS", "VENOM", "FLIES", "STUMBLES", "CHITIN"], "anger_triggers":["HURT", "FRIEND_DIED"] - }, - { - "type":"MONSTER", - "id":"mon_wasp", + },{ + "type" : "MONSTER", + "id" : "mon_wasp", "name": "giant wasp", "species":"INSECT", "symbol":"a", @@ -1375,13 +1363,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A gigantic slender-bodied wasp with an evil-looking stinger protruding from its abdomen. Its exoskeleton glowers with ominous red markings.", + "description":"A gigantic slender-bodied wasp with an evil-looking stinger protruding from its abdomen. Its exoskeleton glowers with ominous red markings.", "flags":["SMELLS", "VENOM", "FLIES", "CHITIN"], "anger_triggers":["HURT", "FRIEND_DIED", "PLAYER_CLOSE", "PLAYER_WEAK", "STALK"] - }, - { - "type":"MONSTER", - "id":"mon_graboid", + },{ + "type" : "MONSTER", + "id" : "mon_graboid", "name": "graboid", "species":"WORM", "symbol":"W", @@ -1405,12 +1392,11 @@ "special_freq":0, "death_function":"WORM", "special_attack":"NONE", - "description":"A monstrous beast with a tripartite mouth that opens to reveal hundreds of writhing tongues with razor sharp edges. It keeps most of its enormous body hidden underground.", + "description":"A monstrous beast with a tripartite mouth that opens to reveal hundreds of writhing tongues with razor sharp edges. It keeps most of its enormous body hidden underground.", "flags":["DIGS", "HEARS", "POISON", "GOODHEARING", "DESTROYS", "WARM", "LEATHER"] - }, - { - "type":"MONSTER", - "id":"mon_worm", + },{ + "type" : "MONSTER", + "id" : "mon_worm", "name": "giant worm", "species":"WORM", "symbol":"W", @@ -1434,12 +1420,11 @@ "special_freq":0, "death_function":"WORM", "special_attack":"NONE", - "description":"An enormous, mutated creature that might once have been a nightcrawler, it's large fanged mouth and and long slender body that comes up to your shoulders, with even more surely hiding underground, it's now something far worse.", + "description":"An enormous, mutated creature that might once have been a nightcrawler. It possesses a large fanged mouth and a long slender body that comes up to your shoulder, with even more surely hiding underground.", "flags":["DIGS", "HEARS", "GOODHEARING", "WARM", "LEATHER"] - }, - { - "type":"MONSTER", - "id":"mon_halfworm", + },{ + "type" : "MONSTER", + "id" : "mon_halfworm", "name": "half worm", "species":"WORM", "symbol":"s", @@ -1465,10 +1450,9 @@ "special_attack":"NONE", "description":"A squiggling severed portion of a wounded giant worm.", "flags":["DIGS", "HEARS", "GOODHEARING", "WARM", "LEATHER"] - }, - { - "type":"MONSTER", - "id":"mon_sludge_crawler", + },{ + "type" : "MONSTER", + "id" : "mon_sludge_crawler", "name": "sludge crawler", "species":"MUTANT", "symbol":"S", @@ -1492,12 +1476,11 @@ "special_freq":0, "death_function":"MELT", "special_attack":"NONE", - "description":"A sluglike creature, eight feet long and the width of a refrigerator. Its black body glistens as it oozes its way along the ground. Eye stalks occassionally push their way out of the oily mass and look around.", + "description":"A sluglike creature, eight feet long and the width of a refrigerator. Its black body glistens as it oozes its way along the ground. Eye stalks occasionally push their way out of the oily mass and look around.", "flags":["NOHEAD", "SEES", "POISON", "HEARS", "REGENERATES_50", "SMELLS", "VIS30", "SLUDGEPROOF", "SLUDGETRAIL", "SWIMS", "FLAMMABLE"] - }, - { - "type":"MONSTER", - "id":"mon_zombie", + },{ + "type" : "MONSTER", + "id" : "mon_zombie", "name": "zombie", "species":"ZOMBIE", "symbol":"Z", @@ -1510,24 +1493,23 @@ "speed":70, "melee_skill":6, "melee_dice":2, - "melee_dice_sides":4, + "melee_dice_sides":3, "melee_cut":0, "dodge":0, "armor_bash":0, "armor_cut":0, "item_chance":40, "luminance":0, - "hp":60, + "hp":50, "special_freq":5, "death_function":"ZOMBIE", "special_attack":"BITE", - "description":"A human body, swaying as it moves, an unstoppable rage is visible beneath it's oily black eyes.", + "description":"A human body, swaying as it moves, an unstoppable rage is visible beneath its oily black eyes.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "BLEED", "NO_BREATHE", "VIS40", "REVIVES"], "categories":["CLASSIC"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_cop", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_cop", "name": "zombie cop", "species":"ZOMBIE", "symbol":"Z", @@ -1554,10 +1536,9 @@ "description":"A human body covered by a weather-beaten and badly damaged set of riot gear.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "BLEED", "NO_BREATHE", "VIS30", "REVIVES"], "categories":["CLASSIC"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_shrieker", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_shrieker", "name": "shrieker zombie", "species":"ZOMBIE", "symbol":"Z", @@ -1577,16 +1558,15 @@ "armor_cut":0, "item_chance":40, "luminance":0, - "hp":60, + "hp":50, "special_freq":10, "death_function":"ZOMBIE", "special_attack":"SHRIEK", - "description":"An elongated human body with a swollen chest and a gaping hole where it's jaw used to be", + "description":"An elongated human body with a swollen chest and a gaping hole where its jaw used to be", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS50", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_spitter", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_spitter", "name": "spitter zombie", "species":"ZOMBIE", "symbol":"Z", @@ -1598,7 +1578,7 @@ "morale":100, "speed":95, "melee_skill":6, - "melee_dice":3, + "melee_dice":2, "melee_dice_sides":6, "melee_cut":0, "dodge":1, @@ -1610,12 +1590,11 @@ "special_freq":20, "death_function":"ACID", "special_attack":"ACID", - "description":"A hunched human body with it's eyes pushed up into it's forehead and drooping cheeks, most of it's face is occupied by a puckered mouth. It's stomache is swollen and nearly translucent, with a sickly yellow tint.", + "description":"A hunched human body with its eyes pushed up into its forehead and drooping cheeks, most of its face is occupied by a puckered mouth. Its stomach is swollen and nearly translucent, with a sickly yellow tint.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "ACIDPROOF", "NO_BREATHE", "VIS40", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_electric", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_electric", "name": "shocker zombie", "species":"ZOMBIE", "symbol":"Z", @@ -1635,16 +1614,15 @@ "armor_cut":0, "item_chance":40, "luminance":1, - "hp":60, + "hp":65, "special_freq":25, "death_function":"ZOMBIE", "special_attack":"SHOCKSTORM", "description":"A human body with pale blue flesh, crackling with electrical energy.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "ELECTRIC", "CBM", "NO_BREATHE", "VIS40", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_smoker", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_smoker", "name": "smoker zombie", "species":"ZOMBIE", "symbol":"Z", @@ -1655,8 +1633,8 @@ "aggression":100, "morale":100, "speed":110, - "melee_skill":6, - "melee_dice":2, + "melee_skill":8, + "melee_dice":1, "melee_dice_sides":6, "melee_cut":2, "dodge":4, @@ -1664,16 +1642,15 @@ "armor_cut":0, "item_chance":0, "luminance":0, - "hp":40, + "hp":65, "special_freq":1, "death_function":"SMOKEBURST", "special_attack":"SMOKECLOUD", - "description":"A blackened and twisted naked human body, strips of flesh hang from it's body, and it emits a constant haze of thick black smoke.", + "description":"A blackened and twisted naked human body, strips of flesh hang from its body, and it emits a constant haze of thick black smoke.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "HARDTOSHOOT", "FRIENDLY_SPECIAL", "NO_BREATHE", "VIS50", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_swimmer", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_swimmer", "name": "swimmer zombie", "species":"ZOMBIE", "symbol":"Z", @@ -1685,7 +1662,7 @@ "morale":100, "speed":95, "melee_skill":6, - "melee_dice":3, + "melee_dice":2, "melee_dice_sides":6, "melee_cut":2, "dodge":2, @@ -1697,12 +1674,11 @@ "special_freq":5, "death_function":"ZOMBIE", "special_attack":"BITE", - "description":"A slick and glistening human body. It's hands and feet are webbed, and it is clad in swimwear.", + "description":"A slick and glistening human body. Its hands and feet are webbed, and it is clad in swimwear.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS40", "BLEED", "SWIMS", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_fast", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_fast", "name": "zombie dog", "species":"ZOMBIE", "symbol":"d", @@ -1728,10 +1704,9 @@ "special_attack":"BITE", "description":"The deformed, animated corpse of a canine, a sinewy beast which can easily outpace its two-legged friends.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS50", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_brute", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_brute", "name": "zombie brute", "species":"ZOMBIE", "symbol":"Z", @@ -1757,10 +1732,9 @@ "special_attack":"BITE", "description":"Its entire body bulges with distended muscles and swollen, festering wounds.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS40", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_hulk", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_hulk", "name": "zombie hulk", "species":"ZOMBIE", "symbol":"Z", @@ -1770,26 +1744,25 @@ "diff":50, "aggression":100, "morale":100, - "speed":115, - "melee_skill":7, - "melee_dice":5, - "melee_dice_sides":12, + "speed":130, + "melee_skill":9, + "melee_dice":4, + "melee_dice_sides":8, "melee_cut":0, "dodge":0, - "armor_bash":10, + "armor_bash":12, "armor_cut":8, "item_chance":80, "luminance":0, - "hp":280, + "hp":260, "special_freq":0, "death_function":"ZOMBIE", "special_attack":"NONE", "description":"A human body now swollen to the size of six men, with arms as wide as a trash can.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "DESTROYS", "POISON", "ATTACKMON", "LEATHER", "NO_BREATHE", "VIS50", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_fungus", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_fungus", "name": "fungal zombie", "species":"FUNGUS", "symbol":"Z", @@ -1801,7 +1774,7 @@ "morale":100, "speed":45, "melee_skill":6, - "melee_dice":2, + "melee_dice":1, "melee_dice_sides":6, "melee_cut":0, "dodge":0, @@ -1815,14 +1788,13 @@ "special_attack":"FUNGUS", "description":"Once human, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "flags":["SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS30"] - }, - { - "type":"MONSTER", - "id":"mon_boomer", + },{ + "type" : "MONSTER", + "id" : "mon_boomer", "name": "boomer", "species":"ZOMBIE", "symbol":"Z", - "color":"ltgray", + "color":"pink", "size":"LARGE", "material":"flesh", "diff":8, @@ -1838,16 +1810,15 @@ "armor_cut":0, "item_chance":30, "luminance":0, - "hp":10, + "hp":20, "special_freq":20, "death_function":"BOOMER", "special_attack":"BOOMER", "description":"A rotund human body, bloated beyond belief and layered in rolls of fat. It emits a horrible odor, and a putrid pink sludge dribbles from its mouth.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS40", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_boomer_fungus", + },{ + "type" : "MONSTER", + "id" : "mon_boomer_fungus", "name": "fungal boomer", "species":"FUNGUS", "symbol":"B", @@ -1873,10 +1844,9 @@ "special_attack":"FUNGUS", "description":"A rotund and bloated human body with pasty, fungus-ridden flesh. Its mouth drips with a frothing gray sludge.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS30"] - }, - { - "type":"MONSTER", - "id":"mon_skeleton", + },{ + "type" : "MONSTER", + "id" : "mon_skeleton", "name": "skeleton", "species":"ZOMBIE", "symbol":"Z", @@ -1900,12 +1870,11 @@ "special_freq":5, "death_function":"ZOMBIE", "special_attack":"BITE", - "description":"It's skin so tight the cracked bones are visible beneath it, covered in scar tissue and coils of scabbed black liquid and with eyes so deeply sunken into it's skill they are barely visible, it's a wonder this once-human creature can move at all.", + "description":"With its skin so tight the cracked bones are visible beneath it, covered in scar tissue and coils of scabbed black liquid and with eyes so deeply sunken into its skull they are barely visible, it's a wonder this once-human creature can move at all.", "flags":["SEES", "HEARS", "BLEED", "HARDTOSHOOT", "REVIVES", "NO_BREATHE", "VIS30"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_necro", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_necro", "name": "zombie necromancer", "species":"ZOMBIE", "symbol":"Z", @@ -1932,10 +1901,9 @@ "description":"A twisted mockery of the human form, emaciated, with jet black skin and glowing red eyes. It is somehow painful to look at, awakening fears deep within your psyche, and even the air around it seems more sinister, somehow darker and more dangerous.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS50", "REVIVES"], "anger_triggers":["HURT", "PLAYER_CLOSE", "PLAYER_WEAK"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_scientist", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_scientist", "name": "zombie scientist", "species":"ZOMBIE", "symbol":"Z", @@ -1961,10 +1929,9 @@ "special_attack":"SCIENCE", "description":"Apart from the jet black eyes it would be easy to believe this scientist was still alive. Clad in a tattered lab coat, it looks to have some measure of situational awareness and resourcefulness.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "BLEED", "CBM", "ACIDPROOF", "NO_BREATHE", "VIS50", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_soldier", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_soldier", "name": "zombie soldier", "species":"ZOMBIE", "symbol":"Z", @@ -1991,10 +1958,9 @@ "description":"Once a soldier, it is dressed head to toe in combat gear and carries itself rather steadily for a zombie.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BASHES", "POISON", "BLEED", "NO_BREATHE", "VIS30", "REVIVES"], "categories":["CLASSIC"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_grabber", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_grabber", "name": "grabber zombie", "species":"ZOMBIE", "symbol":"Z", @@ -2018,12 +1984,11 @@ "special_freq":0, "death_function":"ZOMBIE", "special_attack":"NONE", - "description":"A deformed human body, once living. Its arms dangle from its sides like the limbs of some skinless ape, mindlessly groping at their surroundings.", + "description":"A deformed human body, once living. Its arms dangle from its sides like the limbs of some skinless ape, mindlessly groping at their surroundings.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "BLEED", "GRABS", "NO_BREATHE", "VIS30", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_master", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_master", "name": "zombie master", "species":"ZOMBIE", "symbol":"Z", @@ -2047,13 +2012,12 @@ "special_freq":3, "death_function":"ZOMBIE", "special_attack":"UPGRADE", - "description":"Once human, its features have tightened, its lips pulled back into an unnatural grin, revealing rows of blackened teeth beneath its large, piercing eyes. It stands tall, its movements are fluid and tightly controlled. A feeling of danger permeates the air around it, and the light that falls on it somehow harsher and more glaring.", + "description":"Once human, its features have tightened, its lips pulled back into an unnatural grin, revealing rows of blackened teeth beneath its large, piercing eyes. It stands tall and its movements are fluid and tightly controlled. A feeling of danger permeates the air around it, and the light that falls on it somehow harsher and more glaring.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS50", "REVIVES"], "anger_triggers":["HURT", "PLAYER_CLOSE", "PLAYER_WEAK"] - }, - { - "type":"MONSTER", - "id":"mon_beekeeper", + },{ + "type" : "MONSTER", + "id" : "mon_beekeeper", "name": "scarred zombie", "species":"ZOMBIE", "symbol":"Z", @@ -2079,10 +2043,9 @@ "special_attack":"NONE", "description":"A deformed human body, its skin has been transformed into one thick, calloused envelope of scar tissue.", "flags":["HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "POISON", "NO_BREATHE", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_hunter", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_hunter", "name": "feral hunter", "species":"ZOMBIE", "symbol":"Z", @@ -2106,13 +2069,12 @@ "special_freq":5, "death_function":"ZOMBIE", "special_attack":"LEAP", - "description":"This once-human body is barely recognizable, scrambling about on all fours, it's nails and teeth both sharpened into dangerous looking spikes.", + "description":"This once-human body is barely recognizable, scrambling about on all fours, its nails and teeth both sharpened into dangerous looking spikes.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS40", "REVIVES"], "categories":["CLASSIC"] - }, - { - "type":"MONSTER", - "id":"mon_zombie_child", + },{ + "type" : "MONSTER", + "id" : "mon_zombie_child", "name": "zombie child", "species":"ZOMBIE", "symbol":"z", @@ -2136,13 +2098,12 @@ "special_freq":0, "death_function":"ZOMBIE", "special_attack":"NONE", - "description":"It was only a child, and little is different about it now aside from the hungry look in it's eyes. You'd be hard pressed to not feel like you were killing an actual child by putting it down.", + "description":"It was only a child, and little is different about it now aside from the hungry look in its eyes. You'd be hard pressed to not feel like you were killing an actual child by putting it down.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "BLEED", "POISON", "GUILT", "NO_BREATHE", "VIS30", "REVIVES"], "categories":["CLASSIC"] - }, - { - "type":"MONSTER", - "id":"mon_jabberwock", + },{ + "type" : "MONSTER", + "id" : "mon_jabberwock", "name": "jabberwock", "species":"ABERRATION", "symbol":"J", @@ -2152,26 +2113,25 @@ "diff":50, "aggression":100, "morale":100, - "speed":125, - "melee_skill":6, - "melee_dice":6, - "melee_dice_sides":6, - "melee_cut":4, - "dodge":1, - "armor_bash":8, - "armor_cut":4, + "speed":140, + "melee_skill":9, + "melee_dice":4, + "melee_dice_sides":8, + "melee_cut":3, + "dodge":3, + "armor_bash":12, + "armor_cut":8, "item_chance":0, "luminance":0, - "hp":500, + "hp":400, "special_freq":5, "death_function":"NORMAL", "special_attack":"FLESH_GOLEM", - "description":"A putrid amalgamation of body parts from humans and other creatures have fused together in this aberration of flesh. The eyes of all the heads dart about rapidly and the mouths form a chorus of groaning screams.", + "description":"A putrid amalgamation of body parts from humans and other creatures have fused together in this aberration of flesh. The eyes of all the heads dart about rapidly and the mouths form a chorus of groaning screams.", "flags":["SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "DESTROYS", "ATTACKMON", "LEATHER", "BONES", "VIS50", "POISON"] - }, - { - "type":"MONSTER", - "id":"mon_triffid", + },{ + "type" : "MONSTER", + "id" : "mon_triffid", "name": "triffid", "species":"PLANT", "symbol":"F", @@ -2195,12 +2155,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A creeping animate plant, growing as tall as a moose. It has a single bark-covered stalk supporting a flowery head with a paralyzing sting concealed within.", + "description":"A creeping animate plant, growing as tall as a moose. It has a single bark-covered stalk supporting a flowery head with a paralyzing sting concealed within.", "flags":["SEES", "SMELLS", "BASHES", "NOHEAD", "PARALYZEVENOM"] - }, - { - "type":"MONSTER", - "id":"mon_triffid_young", + },{ + "type" : "MONSTER", + "id" : "mon_triffid_young", "name": "triffid sprout", "species":"PLANT", "symbol":"1", @@ -2226,10 +2185,9 @@ "special_attack":"TRIFFID_GROWTH", "description":"A small triffid, only a few feet tall. It has not yet developed bark, but its sting is still sharp and deadly.", "flags":["HEARS", "SMELLS", "NOHEAD", "PARALYZEVENOM"] - }, - { - "type":"MONSTER", - "id":"mon_fungal_fighter", + },{ + "type" : "MONSTER", + "id" : "mon_fungal_fighter", "name": "fungal fighter", "species":"PLANT", "symbol":"F", @@ -2253,12 +2211,11 @@ "special_freq":10, "death_function":"NORMAL", "special_attack":"PARA_STING", - "description":"A stout woody plant that can dig through the ground and flick spines from its branches. The thorns carry a fungicidal compound with paralytic effects.", + "description":"A stout woody plant that can dig through the ground and flick spines from its branches. The thorns carry a fungicidal compound with paralytic effects.", "flags":["HEARS", "SMELLS", "NOHEAD", "BADVENOM", "PARALYZEVENOM", "CAN_DIG"] - }, - { - "type":"MONSTER", - "id":"mon_triffid_queen", + },{ + "type" : "MONSTER", + "id" : "mon_triffid_queen", "name": "triffid queen", "species":"PLANT", "symbol":"F", @@ -2282,12 +2239,11 @@ "special_freq":2, "death_function":"NORMAL", "special_attack":"GROWPLANTS", - "description":"A ponderous and particularly arborescent triffid. It has enormous red petals surrounded by a haze of spores, and two thick barbed vines stick out from the stems like wary harpoons.", + "description":"A ponderous and particularly arborescent triffid. It has enormous red petals surrounded by a haze of spores, and two thick barbed vines stick out from the stems like wary harpoons.", "flags":["HEARS", "SMELLS", "BASHES", "NOHEAD", "PARALYZEVENOM"] - }, - { - "type":"MONSTER", - "id":"mon_creeper_hub", + },{ + "type" : "MONSTER", + "id" : "mon_creeper_hub", "name": "creeper hub", "species":"PLANT", "symbol":"V", @@ -2311,12 +2267,11 @@ "special_freq":2, "death_function":"KILL_VINES", "special_attack":"GROW_VINE", - "description":"A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all directions.", + "description":"A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all directions.", "flags":["NOHEAD", "IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_creeper_vine", + },{ + "type" : "MONSTER", + "id" : "mon_creeper_vine", "name": "creeper vine", "species":"PLANT", "symbol":"v", @@ -2342,10 +2297,9 @@ "special_attack":"VINE", "description":"A thorny vine, twisting wildly as it grows with incredible speed.", "flags":["NOHEAD", "HARDTOSHOOT", "PLASTIC", "IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_biollante", + },{ + "type" : "MONSTER", + "id" : "mon_biollante", "name": "biollante", "species":"PLANT", "symbol":"F", @@ -2369,12 +2323,11 @@ "special_freq":2, "death_function":"NORMAL", "special_attack":"SPIT_SAP", - "description":"A drooped, quivering plant with a thick stalk adorned by a purple flower. Its petals are closed, and pulsate ominously.", + "description":"A drooped, quivering plant with a thick stalk adorned by a purple flower. Its petals are closed, and pulsate ominously.", "flags":["NOHEAD", "IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_vinebeast", + },{ + "type" : "MONSTER", + "id" : "mon_vinebeast", "name": "vine beast", "species":"PLANT", "symbol":"V", @@ -2398,12 +2351,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"An animated mass of roots and vines, creeping along the ground with alarming speed. The tangle is thick enough that the center from which they grow is concealed.", + "description":"An animated mass of roots and vines, creeping along the ground with alarming speed. The tangle is thick enough that the center from which they grow is concealed.", "flags":["HEARS", "GOODHEARING", "NOHEAD", "HARDTOSHOOT", "GRABS", "SWIMS", "PLASTIC"] - }, - { - "type":"MONSTER", - "id":"mon_triffid_heart", + },{ + "type" : "MONSTER", + "id" : "mon_triffid_heart", "name": "triffid heart", "species":"PLANT", "symbol":"T", @@ -2427,12 +2379,11 @@ "special_freq":5, "death_function":"TRIFFID_HEART", "special_attack":"TRIFFID_HEARTBEAT", - "description":"A knot of tubular roots, flowing with sap and beating like a heart. Strands of vascular tissue reach out to the surrounding root walls.", + "description":"A knot of tubular roots, flowing with sap and beating like a heart. Strands of vascular tissue reach out to the surrounding root walls.", "flags":["NOHEAD", "IMMOBILE", "QUEEN"] - }, - { - "type":"MONSTER", - "id":"mon_fungaloid", + },{ + "type" : "MONSTER", + "id" : "mon_fungaloid", "name": "fungaloid", "species":"FUNGUS", "symbol":"F", @@ -2456,12 +2407,11 @@ "special_freq":30, "death_function":"FUNGUS", "special_attack":"FUNGUS", - "description":"A pale white fungus, one meaty gray stalk supporting a bloom at the top. Spores are periodically expelled from its gills, and a few tendrils extend from the base, allowing mobility and some basic means of defense.", + "description":"A pale white fungus, one meaty gray stalk supporting a bloom at the top. Spores are periodically expelled from its gills, and a few tendrils extend from the base, allowing mobility and some basic means of defense.", "flags":["STUMBLES", "POISON", "NO_BREATHE", "NOHEAD"] - }, - { - "type":"MONSTER", - "id":"mon_fungaloid_young", + },{ + "type" : "MONSTER", + "id" : "mon_fungaloid_young", "name": "fungal sporeling", "species":"FUNGUS", "symbol":"1", @@ -2485,12 +2435,11 @@ "special_freq":100, "death_function":"NORMAL", "special_attack":"FUNGUS_GROWTH", - "description":"A fungal stalk several feet in height. Two vicious looking tendrils extend from its thorned and leathery exterior, and it moves about faster than the larger fungaloids.", + "description":"A fungal stalk several feet in height. Two vicious looking tendrils extend from its thorned and leathery exterior, and it moves about faster than the larger fungaloids.", "flags":["HEARS", "POISON", "NO_BREATHE", "NOHEAD"] - }, - { - "type":"MONSTER", - "id":"mon_spore", + },{ + "type" : "MONSTER", + "id" : "mon_spore", "name": "spore cloud", "species":"FUNGUS", "symbol":"o", @@ -2516,10 +2465,9 @@ "special_attack":"PLANT", "description":"A mass of spores the size of a balled fist, wafting around in the air.", "flags":["STUMBLES", "FLIES", "POISON", "NO_BREATHE", "NOHEAD"] - }, - { - "type":"MONSTER", - "id":"mon_fungaloid_queen", + },{ + "type" : "MONSTER", + "id" : "mon_fungaloid_queen", "name": "fungal spire", "species":"FUNGUS", "symbol":"T", @@ -2543,12 +2491,11 @@ "special_freq":10, "death_function":"FUNGUS", "special_attack":"FUNGUS_SPROUT", - "description":"An enormous fungal spire, towering over the ground. It pulsates slowly, continuously growing new defenses.", + "description":"An enormous fungal spire, towering over the ground. It pulsates slowly, continuously growing new defenses.", "flags":["NOHEAD", "POISON", "IMMOBILE", "NO_BREATHE", "QUEEN"] - }, - { - "type":"MONSTER", - "id":"mon_fungal_wall", + },{ + "type" : "MONSTER", + "id" : "mon_fungal_wall", "name": "fungal wall", "species":"FUNGUS", "symbol":"T", @@ -2572,12 +2519,11 @@ "special_freq":10, "death_function":"DISINTEGRATE", "special_attack":"FUNGUS", - "description":"A veritable wall of fungus, grown as a natural defense by the fungal spire. New spores erupt from the surface every few seconds.", + "description":"A veritable wall of fungus, grown as a natural defense by the fungal spire. New spores erupt from the surface every few seconds.", "flags":["NOHEAD", "POISON", "NO_BREATHE", "IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_blob", + },{ + "type" : "MONSTER", + "id" : "mon_blob", "name": "blob", "species":"NETHER", "symbol":"O", @@ -2604,10 +2550,9 @@ "description":"A black blob of viscous goo, oozing across the ground like a glob of living oil.", "flags":["HEARS", "GOODHEARING", "NOHEAD", "POISON", "NO_BREATHE", "ACIDPROOF"], "phase":"LIQUID" - }, - { - "type":"MONSTER", - "id":"mon_blob_small", + },{ + "type" : "MONSTER", + "id" : "mon_blob_small", "name": "small blob", "species":"NETHER", "symbol":"o", @@ -2634,10 +2579,9 @@ "description":"A small black blob of viscous goo, oozing across the ground like a glob of living oil.", "flags":["HEARS", "GOODHEARING", "NOHEAD", "POISON", "NO_BREATHE", "ACIDPROOF"], "phase":"LIQUID" - }, - { - "type":"MONSTER", - "id":"mon_chud", + },{ + "type" : "MONSTER", + "id" : "mon_chud", "name": "subwayman", "species":"MUTANT", "symbol":"@", @@ -2661,12 +2605,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The C.H.U.D. or Cannibalistic Humanoid Underground Dweller. A human being turned pale and mad from years of underground isolation.", + "description":"The C.H.U.D. or Cannibalistic Humanoid Underground Dweller. A human being turned pale and mad from years of underground isolation.", "flags":["SEES", "HEARS", "WARM", "BASHES", "HUMAN", "VIS40", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_one_eye", + },{ + "type" : "MONSTER", + "id" : "mon_one_eye", "name": "cyclopean", "species":"MUTANT", "symbol":"@", @@ -2692,10 +2635,9 @@ "special_attack":"NONE", "description":"A relatively humanoid mutant with purple hair and a grapefruit-sized bloodshot eye.", "flags":["SEES", "HEARS", "WARM", "BASHES", "HUMAN", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_crawler", + },{ + "type" : "MONSTER", + "id" : "mon_crawler", "name": "crawler", "species":"ABERRATION", "symbol":"H", @@ -2722,10 +2664,9 @@ "description":"A conglomeration of human parts fused together in a horrible mishmash of function, slowly dragging its eldritch body across the ground.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BASHES", "POISON", "HUMAN", "VIS40", "BONES"], "fear_triggers":["HURT", "FIRE"] - }, - { - "type":"MONSTER", - "id":"mon_sewer_fish", + },{ + "type" : "MONSTER", + "id" : "mon_sewer_fish", "name": "seweranha", "species":"FISH", "symbol":"t", @@ -2749,12 +2690,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A large mutant variety of carp. It has shimmering green scales and a mouth lined with three jagged rows of razor-sharp teeth.", + "description":"A large mutant variety of carp. It has shimmering green scales and a mouth lined with three jagged rows of razor-sharp teeth.", "flags":["SEES", "SMELLS", "WARM", "AQUATIC", "VIS30", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_sewer_snake", + },{ + "type" : "MONSTER", + "id" : "mon_sewer_snake", "name": "sewer snake", "species":"REPTILE", "symbol":"s", @@ -2778,12 +2718,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"An aggressive mutant variety of the worm snake, turned pale yellow from its underground life. It swarms beneath the ground and is named for its habit of infesting sewer lines.", + "description":"An aggressive mutant variety of the worm snake, turned pale yellow from its underground life. It swarms beneath the ground and is named for its habit of infesting sewer lines.", "flags":["SEES", "SMELLS", "WARM", "VENOM", "SWIMS", "LEATHER", "VIS30", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_rat_king", + },{ + "type" : "MONSTER", + "id" : "mon_rat_king", "name": "rat king", "species":"MAMMAL", "symbol":"&", @@ -2807,11 +2746,10 @@ "special_freq":3, "death_function":"RATKING", "special_attack":"RATKING", - "description":"A towering swarm of mutated rats, their tails knotted together in a filthy mass. A foetid stench flows from its filthy presence." - }, - { - "type":"MONSTER", - "id":"mon_mosquito", + "description":"A towering swarm of mutated rats, their tails knotted together in a filthy mass. A foetid stench flows from its filthy presence." + },{ + "type" : "MONSTER", + "id" : "mon_mosquito", "name": "mosquito", "species":"INSECT", "symbol":".", @@ -2835,12 +2773,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A blood-sucking fly with a needle-like proboscis. Its bite leaves behind itchy welts and can easily spread disease.", + "description":"A blood-sucking fly with a needle-like proboscis. Its bite leaves behind itchy welts and can easily spread disease.", "flags":["SMELLS", "HEARS", "STUMBLES", "VERMIN", "SMALL_BITES", "FLIES"] - }, - { - "type":"MONSTER", - "id":"mon_mosquito_giant", + },{ + "type" : "MONSTER", + "id" : "mon_mosquito_giant", "name": "giant mosquito", "species":"INSECT", "symbol":"y", @@ -2866,10 +2803,9 @@ "special_attack":"NONE", "description":"An enormous mutant mosquito, fluttering erratically, its face dominated by a long, spear-tipped proboscis.", "flags":["SMELLS", "HEARS", "STUMBLES", "VENOM", "FLIES", "HIT_AND_RUN", "CHITIN"] - }, - { - "type":"MONSTER", - "id":"mon_dragonfly", + },{ + "type" : "MONSTER", + "id" : "mon_dragonfly", "name": "dragonfly", "species":"INSECT", "symbol":".", @@ -2897,10 +2833,9 @@ "flags":["SEES", "SMELLS", "FLIES", "VERMIN", "HUNTS_VERMIN"], "anger_triggers":["PLAYER_WEAK"], "fear_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_dragonfly_giant", + },{ + "type" : "MONSTER", + "id" : "mon_dragonfly_giant", "name": "giant dragonfly", "species":"INSECT", "symbol":"y", @@ -2928,10 +2863,9 @@ "flags":["SEES", "SMELLS", "FLIES", "HIT_AND_RUN", "VIS40", "ATTACKMON", "CHITIN"], "anger_triggers":["PLAYER_WEAK"], "fear_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_centipede", + },{ + "type" : "MONSTER", + "id" : "mon_centipede", "name": "centipede", "species":"INSECT", "symbol":".", @@ -2957,10 +2891,9 @@ "special_attack":"NONE", "description":"A predatory segmented arthropod with dozens of legs and a venomous bite.", "flags":["SMELLS", "HEARS", "VERMIN", "SMALL_BITES"] - }, - { - "type":"MONSTER", - "id":"mon_centipede_giant", + },{ + "type" : "MONSTER", + "id" : "mon_centipede_giant", "name": "giant centipede", "species":"INSECT", "symbol":"a", @@ -2986,10 +2919,9 @@ "special_attack":"NONE", "description":"A meter-long centipede with a menacing pair of pincers, moving swiftly on dozens of spindly legs.", "flags":["SMELLS", "HEARS", "VENOM", "ATTACKMON", "CHITIN"] - }, - { - "type":"MONSTER", - "id":"mon_frog", + },{ + "type" : "MONSTER", + "id" : "mon_frog", "name": "bull frog", "species":"AMPHIBIAN", "symbol":".", @@ -3013,13 +2945,12 @@ "special_freq":5, "death_function":"NORMAL", "special_attack":"LEAP", - "description":"The American bullfrog, in its natural habitat. It feeds on insects, mice, lizards and any other living thing it can stuff down its gullet.", + "description":"The American bullfrog, in its natural habitat. It feeds on insects, mice, lizards and any other living thing it can stuff down its gullet.", "flags":["SEES", "SMELLS", "HEARS", "SWIMS", "HUNTS_VERMIN"], "fear_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_frog_giant", + },{ + "type" : "MONSTER", + "id" : "mon_frog_giant", "name": "giant frog", "species":"AMPHIBIAN", "symbol":"M", @@ -3043,13 +2974,12 @@ "special_freq":5, "death_function":"NORMAL", "special_attack":"LEAP", - "description":"A mutated bullfrog taller than you are. It stares with amber eyes as it considers the easiest way to swallow you whole.", + "description":"A mutated bullfrog taller than you are. It stares with amber eyes as it considers the easiest way to swallow you whole.", "flags":["SEES", "SMELLS", "HEARS", "SWIMS", "LEATHER", "VIS40", "ATTACKMON", "BONES"], "anger_triggers":["STALK", "PLAYER_WEAK", "PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_slug", + },{ + "type" : "MONSTER", + "id" : "mon_slug", "name": "slug", "species":"MOLLUSK", "symbol":".", @@ -3076,10 +3006,9 @@ "description":"The leopard slug, an omnivorous gastropod. It consumes decaying matter as well as planted crops, and will attack and eat other slugs that cross its path.", "flags":["SEES", "SMELLS", "VERMIN", "ACIDPROOF"], "fear_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_slug_giant", + },{ + "type" : "MONSTER", + "id" : "mon_slug_giant", "name": "giant slug", "species":"MOLLUSK", "symbol":"S", @@ -3103,13 +3032,12 @@ "special_freq":10, "death_function":"NORMAL", "special_attack":"ACID", - "description":"A mutated leopard slug, as wide as a golf cart. Venom dripping from its fanged maw, it slithers ahead slowly, leaving a trail of glistening slime.", + "description":"A mutated leopard slug, as wide as a golf cart. Venom dripping from its fanged maw, it slithers ahead slowly, leaving a trail of glistening slime.", "flags":["SEES", "SMELLS", "BASHES", "ACIDPROOF", "ACIDTRAIL", "VIS30"], "anger_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_dermatik_larva", + },{ + "type" : "MONSTER", + "id" : "mon_dermatik_larva", "name": "dermatik larva", "species":"INSECT", "symbol":"a", @@ -3135,10 +3063,9 @@ "special_attack":"DERMATIK_GROWTH", "description":"A fat white grub as big as a squirrel, with a pair of large, spadelike mandibles.", "flags":["HEARS", "SMELLS", "POISON", "CAN_DIG"] - }, - { - "type":"MONSTER", - "id":"mon_dermatik", + },{ + "type" : "MONSTER", + "id" : "mon_dermatik", "name": "dermatik", "species":"INSECT", "symbol":"a", @@ -3165,10 +3092,9 @@ "description":"A mutated wasp nearly the size of a cat, with a barbed ovipositor extruding from the abdomen.", "flags":["HEARS", "SMELLS", "STUMBLES", "POISON", "FLIES", "CHITIN"], "anger_triggers":["FRIEND_ATTACKED", "PLAYER_WEAK"] - }, - { - "type":"MONSTER", - "id":"mon_spider_wolf", + },{ + "type" : "MONSTER", + "id" : "mon_spider_wolf", "name": "wolf spider", "species":"SPIDER", "symbol":".", @@ -3192,12 +3118,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A fairly large spider which tracks and catches prey through agility and stealth. Its bite can be irritating even to large animals.", + "description":"A fairly large spider which tracks and catches prey through agility and stealth. Its bite can be irritating even to large animals.", "flags":["SMELLS", "HEARS", "VERMIN", "SMALL_BITES", "HUNTS_VERMIN", "CHITIN"] - }, - { - "type":"MONSTER", - "id":"mon_spider_wolf_giant", + },{ + "type" : "MONSTER", + "id" : "mon_spider_wolf_giant", "name": "giant wolf spider", "species":"SPIDER", "symbol":"s", @@ -3224,10 +3149,9 @@ "description":"A wolf spider mutated to about thirty times its normal size, it moves quickly and aggresively to catch and consume prey.", "flags":["SMELLS", "HEARS", "VENOM", "ATTACKMON", "CHITIN"], "anger_triggers":["STALK", "PLAYER_WEAK", "HURT", "PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_spider_web", + },{ + "type" : "MONSTER", + "id" : "mon_spider_web", "name": "giant web spider", "species":"SPIDER", "symbol":"s", @@ -3253,10 +3177,9 @@ "special_attack":"NONE", "description":"A giant mutated grass spider, it waits for prey to become ensnared in the vast webs that it weaves between the trees.", "flags":["SMELLS", "HEARS", "VENOM", "WEBWALK", "CHITIN"] - }, - { - "type":"MONSTER", - "id":"mon_spider_jumping", + },{ + "type" : "MONSTER", + "id" : "mon_spider_jumping", "name": "jumping spider", "species":"SPIDER", "symbol":".", @@ -3280,13 +3203,12 @@ "special_freq":2, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A little spider with elongated forelegs. It does not build extensive webs, but leaps very quickly, appearing to move instantaneously from one spot to another.", + "description":"A little spider with elongated forelegs. It does not build extensive webs, but leaps very quickly, appearing to move instantaneously from one spot to another.", "flags":["SMELLS", "HEARS", "VERMIN", "HUNTS_VERMIN", "SMALL_BITES"], "anger_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_spider_jumping_giant", + },{ + "type" : "MONSTER", + "id" : "mon_spider_jumping_giant", "name": "giant jumping spider", "species":"SPIDER", "symbol":"s", @@ -3310,13 +3232,12 @@ "special_freq":2, "death_function":"NORMAL", "special_attack":"LEAP", - "description":"A giant spider with big forelegs and two pairs of inquisitive-looking eyes. It can leap quite quickly, even into the treetops.", + "description":"A giant spider with big forelegs and two pairs of inquisitive-looking eyes. It can leap quite quickly, even into the treetops.", "flags":["SMELLS", "HEARS", "VENOM", "HIT_AND_RUN", "CHITIN"], "anger_triggers":["PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_spider_trapdoor", + },{ + "type" : "MONSTER", + "id" : "mon_spider_trapdoor", "name": "trapdoor spider", "species":"SPIDER", "symbol":".", @@ -3340,12 +3261,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A midsized spider with a bulbous thorax. It creates a subterranean nest and lies in wait for prey to draw close enough for capture.", + "description":"A midsized spider with a bulbous thorax. It creates a subterranean nest and lies in wait for prey to draw close enough for capture.", "flags":["SMELLS", "HEARS", "VERMIN", "WEBWALK"] - }, - { - "type":"MONSTER", - "id":"mon_spider_trapdoor_giant", + },{ + "type" : "MONSTER", + "id" : "mon_spider_trapdoor_giant", "name": "giant trapdoor spider", "species":"SPIDER", "symbol":"s", @@ -3369,12 +3289,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A gigantic spider with a bulbous thorax. It digs a deep underground burrow that serves as a pit to trap unwary prey.", + "description":"A gigantic spider with a bulbous thorax. It digs a deep underground burrow that serves as a pit to trap unwary prey.", "flags":["SMELLS", "HEARS", "VENOM", "GRABS", "CAN_DIG", "WEBWALK", "CHITIN"] - }, - { - "type":"MONSTER", - "id":"mon_spider_widow", + },{ + "type" : "MONSTER", + "id" : "mon_spider_widow", "name": "black widow spider", "species":"SPIDER", "symbol":".", @@ -3400,10 +3319,9 @@ "special_attack":"NONE", "description":"An infamous spider with a characteristic red hourglass marking on its black carapace, known for its highly toxic bite.", "flags":["SMELLS", "HEARS", "VERMIN", "HUNTS_VERMIN", "SMALL_BITES", "BADVENOM"] - }, - { - "type":"MONSTER", - "id":"mon_spider_widow_giant", + },{ + "type" : "MONSTER", + "id" : "mon_spider_widow_giant", "name": "giant black widow", "species":"SPIDER", "symbol":"s", @@ -3427,13 +3345,12 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A giant mutated black widow spider. A highly venomous nightmare come to life.", + "description":"A giant mutated black widow spider. A highly venomous nightmare come to life.", "flags":["SMELLS", "HEARS", "BADVENOM", "WEBWALK", "CHITIN"], "anger_triggers":["PLAYER_WEAK", "PLAYER_CLOSE"] - }, - { - "type":"MONSTER", - "id":"mon_dark_wyrm", + },{ + "type" : "MONSTER", + "id" : "mon_dark_wyrm", "name": "dark wyrm", "species":"MUTANT", "symbol":"S", @@ -3457,12 +3374,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A huge mutated worm found deep underground. It has a gaping round mouth lined with dagger-like teeth, and its flesh is slick with bubbling blue slime.", + "description":"A huge mutated worm found deep underground. It has a gaping round mouth lined with dagger-like teeth, and its flesh is slick with bubbling blue slime.", "flags":["SMELLS", "HEARS", "GOODHEARING", "DESTROYS", "POISON", "SUNDEATH", "ACIDPROOF", "ACIDTRAIL"] - }, - { - "type":"MONSTER", - "id":"mon_amigara_horror", + },{ + "type" : "MONSTER", + "id" : "mon_amigara_horror", "name": "amigara horror", "species":"HORROR", "symbol":"&", @@ -3486,12 +3402,11 @@ "special_freq":0, "death_function":"AMIGARA", "special_attack":"FEAR_PARALYZE", - "description":"A hellish, vaguely humanoid horror, two stories tall. Its face is grotesquely stretched out, its limbs deformed to unrecognizable outgrowths.", + "description":"A hellish, vaguely humanoid horror, two stories tall. Its face is grotesquely stretched out, its limbs deformed to unrecognizable outgrowths.", "flags":["SMELLS", "HEARS", "SEES", "STUMBLES", "HARDTOSHOOT"] - }, - { - "type":"MONSTER", - "id":"mon_dog_thing", + },{ + "type" : "MONSTER", + "id" : "mon_dog_thing", "name": "dog", "species":"NETHER", "symbol":"d", @@ -3515,12 +3430,11 @@ "special_freq":40, "death_function":"THING", "special_attack":"DOGTHING", - "description":"A domesticated mongrel of the canine persuasion. In the absence of human society, it has turned feral. You feel a sudden urge to destroy it.", + "description":"A domesticated mongrel of the canine persuasion. In the absence of human society, it has turned feral. You feel a sudden urge to destroy it.", "flags":["SEES", "SMELLS", "HEARS", "ANIMAL", "WARM", "FUR", "FRIENDLY_SPECIAL"] - }, - { - "type":"MONSTER", - "id":"mon_headless_dog_thing", + },{ + "type" : "MONSTER", + "id" : "mon_headless_dog_thing", "name": "tentacle dog", "species":"NETHER", "symbol":"d", @@ -3544,12 +3458,11 @@ "special_freq":5, "death_function":"THING", "special_attack":"TENTACLE", - "description":"A dog's body with a mass of ropy, black tentacles reaching out from its head.", + "description":"A dog's body with a mass of ropey, black tentacles reaching out from its head.", "flags":["SEES", "SMELLS", "HEARS", "BASHES"] - }, - { - "type":"MONSTER", - "id":"mon_thing", + },{ + "type" : "MONSTER", + "id" : "mon_thing", "name": "thing", "species":"NETHER", "symbol":"&", @@ -3575,10 +3488,9 @@ "special_attack":"TENTACLE", "description":"An amorphous black creature, detaching and sprouting tentacles without any apparent pause.", "flags":["SMELLS", "HEARS", "NOHEAD", "BASHES", "SWIMS", "ATTACKMON", "PLASTIC", "ACIDPROOF"] - }, - { - "type":"MONSTER", - "id":"mon_human_snail", + },{ + "type" : "MONSTER", + "id" : "mon_human_snail", "name": "human snail", "species":"ABERRATION", "symbol":"S", @@ -3602,13 +3514,12 @@ "special_freq":15, "death_function":"NORMAL", "special_attack":"ACID", - "description":"An enormous fleshy snail, with an oddly human face. The eyestalks protrude from where the eyes should be.", + "description":"An enormous fleshy snail, with an oddly human face. Eyestalks protrude from where the eyes should be.", "flags":["SMELLS", "HEARS", "POISON", "ACIDPROOF"], "anger_triggers":["PLAYER_WEAK", "FRIEND_DIED"] - }, - { - "type":"MONSTER", - "id":"mon_twisted_body", + },{ + "type" : "MONSTER", + "id" : "mon_twisted_body", "name": "twisted body", "species":"HORROR", "symbol":"h", @@ -3632,12 +3543,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A human body, but with its limbs, neck, and\nhair impossibly twisted. It clambors around swiftly, making awful screeching sounds.", + "description":"A human body, but with its limbs, neck, and hair impossibly twisted. It clambers around swiftly, making awful screeching sounds.", "flags":["SEES", "HEARS", "GOODHEARING", "POISON", "HUMAN", "VIS40"] - }, - { - "type":"MONSTER", - "id":"mon_vortex", + },{ + "type" : "MONSTER", + "id" : "mon_vortex", "name": "vortex", "species":"UNKNOWN", "symbol":"V", @@ -3663,10 +3573,9 @@ "special_attack":"VORTEX", "description":"A twisting spot in the air, with some kind of morphing mass at its center.", "flags":["HEARS", "GOODHEARING", "STUMBLES", "NOHEAD", "HARDTOSHOOT", "FLIES", "PLASTIC", "NO_BREATHE", "FRIENDLY_SPECIAL"] - }, - { - "type":"MONSTER", - "id":"mon_flying_polyp", + },{ + "type" : "MONSTER", + "id" : "mon_flying_polyp", "name": "flying polyp", "species":"NETHER", "symbol":"8", @@ -3692,10 +3601,9 @@ "special_attack":"NONE", "description":"An amorphous mound of twisting black flesh that flits through the air at incredible speeds.", "flags":["SMELLS", "HEARS", "GOODHEARING", "NOHEAD", "BASHES", "FLIES", "ATTACKMON", "PLASTIC", "NO_BREATHE", "HIT_AND_RUN"] - }, - { - "type":"MONSTER", - "id":"mon_hunting_horror", + },{ + "type" : "MONSTER", + "id" : "mon_hunting_horror", "name": "hunting horror", "species":"NETHER", "symbol":"s", @@ -3719,13 +3627,12 @@ "special_freq":0, "death_function":"MELT", "special_attack":"NONE", - "description":"A man-sized wormish creature that swoops around on bat-like wings. Its form dramatically shifts and changes from moment to moment, although its gigantic eyes and teeth are always prominent.", + "description":"A man-sized worm-like creature that swoops around on bat-like wings. Its form dramatically shifts and changes from moment to moment, although its gigantic eyes and teeth are always prominent.", "flags":["SEES", "SMELLS", "HEARS", "NOHEAD", "HARDTOSHOOT", "FLIES", "PLASTIC", "SUNDEATH", "NO_BREATHE", "HIT_AND_RUN"], "anger_triggers":["STALK", "PLAYER_WEAK", "PLAYER_CLOSE", "FRIEND_ATTACKED"] - }, - { - "type":"MONSTER", - "id":"mon_mi_go", + },{ + "type" : "MONSTER", + "id" : "mon_mi_go", "name": "mi-go", "species":"NETHER", "symbol":"&", @@ -3749,12 +3656,11 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"PARROT", - "description":"A flexous monstrosity seeming as a giant crab covered in writhing antennae, clawform tentacles and star-shaped growths, with a head like the insides of a fish but for its dire utterance.", + "description":"A flexuous monstrosity seeming as a giant crab covered in writhing antennae, clawed tentacles, and star-shaped growths, with a head like the insides of a fish but for its dire utterance.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "BASHES", "POISON", "NO_BREATHE", "VIS50"] - }, - { - "type":"MONSTER", - "id":"mon_yugg", + },{ + "type" : "MONSTER", + "id" : "mon_yugg", "name": "yugg", "species":"NETHER", "symbol":"W", @@ -3778,12 +3684,11 @@ "special_freq":20, "death_function":"NORMAL", "special_attack":"GENE_STING", - "description":"An enormous white flatworm that burrows beneath the earth. Its mouth is lined with pointed teeth, and it is covered in fine hairs which can be shed and fired like darts.", + "description":"An enormous white flatworm that burrows beneath the earth. Its mouth is lined with pointed teeth, and it is covered in fine hairs which can be shed and fired like darts.", "flags":["SEES", "SMELLS", "HEARS", "BASHES", "DESTROYS", "POISON", "VENOM", "NO_BREATHE", "DIGS", "VIS40"] - }, - { - "type":"MONSTER", - "id":"mon_gelatin", + },{ + "type" : "MONSTER", + "id" : "mon_gelatin", "name": "amoebic mold", "species":"NETHER", "symbol":"O", @@ -3807,13 +3712,12 @@ "special_freq":4, "death_function":"MELT", "special_attack":"FORMBLOB", - "description":"A formless slime mold the size of a cow. Crusty bits of cytoplasm fall away as it oozes across the ground.", + "description":"A formless slime mold the size of a cow. Crusty bits of cytoplasm fall away as it oozes across the ground.", "flags":["SMELLS", "HEARS", "PLASTIC", "NO_BREATHE", "NOHEAD"], "phase":"LIQUID" - }, - { - "type":"MONSTER", - "id":"mon_flaming_eye", + },{ + "type" : "MONSTER", + "id" : "mon_flaming_eye", "name": "flaming eye", "species":"NETHER", "symbol":"e", @@ -3837,12 +3741,11 @@ "special_freq":12, "death_function":"NORMAL", "special_attack":"STARE", - "description":"An eyeball the size of an easy chair, covered in rolling blue flames. It floats through the air, spinning slowly to draw its gaze in every direction.", + "description":"An eyeball the size of an easy chair, covered in rolling blue flames. It floats through the air, spinning slowly to draw its gaze in every direction.", "flags":["SEES", "WARM", "FLIES", "FIREY", "NO_BREATHE", "NOHEAD"] - }, - { - "type":"MONSTER", - "id":"mon_kreck", + },{ + "type" : "MONSTER", + "id" : "mon_kreck", "name": "kreck", "species":"NETHER", "symbol":"k", @@ -3868,10 +3771,9 @@ "special_attack":"NONE", "description":"A fat humanoid the size of a dog, with twisted red flesh and a distended neck. It scampers around, panting and grunting.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "BASHES", "HIT_AND_RUN", "NO_BREATHE", "VIS50", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_gracke", + },{ + "type" : "MONSTER", + "id" : "mon_gracke", "name": "gracken", "species":"NETHER", "symbol":"h", @@ -3895,12 +3797,11 @@ "special_freq":10, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A bizarre humanoid creature with a calculating stare. Its twitching hands move so fast they appear to be nothing but blurs.", + "description":"A bizarre humanoid creature with a calculating stare. Its twitching hands move so fast they appear to be nothing but blurs.", "flags":["SMELLS", "HEARS", "WARM", "NO_BREATHE", "GRABS", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_blank", + },{ + "type" : "MONSTER", + "id" : "mon_blank", "name": "blank body", "species":"NETHER", "symbol":"@", @@ -3926,10 +3827,9 @@ "special_attack":"SHRIEK", "description":"This looks like a human body, but its flesh is snow-white, and its face is featureless save for a perfectly round mouth.", "flags":["SMELLS", "HEARS", "WARM", "ANIMAL", "SUNDEATH", "NO_BREATHE", "HUMAN", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_gozu", + },{ + "type" : "MONSTER", + "id" : "mon_gozu", "name": "gozu", "species":"NETHER", "symbol":"&", @@ -3953,12 +3853,11 @@ "special_freq":20, "death_function":"NORMAL", "special_attack":"FEAR_PARALYZE", - "description":"A monster with an obese human body and the head of a cow. It treads slowly, and milky white drool drips from its mouth.", + "description":"A monster with an obese human body and the head of a cow. It treads slowly, and milky white drool drips from its mouth.", "flags":["SEES", "SMELLS", "HEARS", "WARM", "BASHES", "ANIMAL", "FUR", "NO_BREATHE", "VIS30", "BONES"] - }, - { - "type":"MONSTER", - "id":"mon_shadow", + },{ + "type" : "MONSTER", + "id" : "mon_shadow", "name": "shadow", "species":"NETHER", "symbol":"A", @@ -3984,10 +3883,9 @@ "special_attack":"DISAPPEAR", "description":"A strange moving darkness, bringing with it the softest of whispers.", "flags":["SEES", "HEARS", "GOODHEARING", "SMELLS", "NOHEAD", "HARDTOSHOOT", "GRABS", "WEBWALK", "FLIES", "PLASTIC", "SUNDEATH", "ELECTRIC", "ACIDPROOF", "HIT_AND_RUN", "NO_BREATHE", "VIS50"] - }, - { - "type":"MONSTER", - "id":"mon_breather_hub", + },{ + "type" : "MONSTER", + "id" : "mon_breather_hub", "name": "breather", "species":"NETHER", "symbol":"O", @@ -4011,12 +3909,11 @@ "special_freq":6, "death_function":"KILL_BREATHERS", "special_attack":"BREATHE", - "description":"A weird mass of immobile pink goo. It seems to breathe.", + "description":"A weird mass of immobile pink goo. It seems to breathe.", "flags":["ACIDPROOF", "IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_breather", + },{ + "type" : "MONSTER", + "id" : "mon_breather", "name": "breather", "species":"NETHER", "symbol":"o", @@ -4040,12 +3937,11 @@ "special_freq":6, "death_function":"MELT", "special_attack":"BREATHE", - "description":"A weird mass of immobile pink goo. It seems to breathe.", + "description":"A weird mass of immobile pink goo. It seems to breathe.", "flags":["IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_shadow_snake", + },{ + "type" : "MONSTER", + "id" : "mon_shadow_snake", "name": "shadow snake", "species":"NETHER", "symbol":"s", @@ -4071,10 +3967,9 @@ "special_attack":"DISAPPEAR", "description":"A translucent black snake, long and fearsome looking.", "flags":["SEES", "SMELLS", "WARM", "SWIMS", "LEATHER", "PLASTIC", "SUNDEATH"] - }, - { - "type":"MONSTER", - "id":"mon_dementia", + },{ + "type" : "MONSTER", + "id" : "mon_dementia", "name": "dementia", "species":"ZOMBIE", "symbol":"@", @@ -4100,10 +3995,9 @@ "special_attack":"NONE", "description":"A crazed individual, the bloody scars on the side of its shaved head suggest some sort of partial lobotomy", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BASHES", "BLEED", "HUMAN", "POISON", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_homunculus", + },{ + "type" : "MONSTER", + "id" : "mon_homunculus", "name": "homunculus", "species":"ZOMBIE", "symbol":"h", @@ -4127,12 +4021,11 @@ "special_freq":0, "death_function":"ZOMBIE", "special_attack":"NONE", - "description":"A pale hairless man with an impressive athletic physique. Its lidless eyes are totally black, and seeping with blood.", + "description":"A pale hairless man with an impressive athletic physique. Its lidless eyes are totally black, and seeping with blood.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BASHES", "BLEED", "HUMAN", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_blood_sacrifice", + },{ + "type" : "MONSTER", + "id" : "mon_blood_sacrifice", "name": "blood sacrifice", "species":"ZOMBIE", "symbol":"Z", @@ -4156,12 +4049,11 @@ "special_freq":0, "death_function":"ZOMBIE", "special_attack":"FEAR_PARALYZE", - "description":"A defiled human body, once living. Tortured to death long ago, it remains chained to the altar, the putrescent flays of its peeled skin quivering like so much flotsam upon a murky pond.", + "description":"A defiled human body, once living. Tortured to death long ago, it remains chained to the altar, the putrescent flays of its peeled skin quivering like so much flotsam upon a murky pond.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BLEED", "IMMOBILE", "GUILT", "POISON", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_flesh_angel", + },{ + "type" : "MONSTER", + "id" : "mon_flesh_angel", "name": "flesh angel", "species":"ZOMBIE", "symbol":"H", @@ -4185,12 +4077,11 @@ "special_freq":0, "death_function":"ZOMBIE", "special_attack":"FEAR_PARALYZE", - "description":"A tall and slender man lacking skin and any normalcy of countenance. Wings of muscle curl forth from its back and a third eye dominates the forehead.", + "description":"A tall and slender man lacking skin and any normalcy of countenance. Wings of muscle curl forth from its back and a third eye dominates the forehead.", "flags":["SEES", "HEARS", "SMELLS", "WARM", "BLEED", "HARDTOSHOOT", "ATTACKMON", "HUMAN", "POISON", "REVIVES"] - }, - { - "type":"MONSTER", - "id":"mon_eyebot", + },{ + "type" : "MONSTER", + "id" : "mon_eyebot", "name": "eyebot", "species":"ROBOT", "symbol":"e", @@ -4216,10 +4107,9 @@ "special_attack":"PHOTOGRAPH", "description":"A fusion-driven UAV largely comprised of a high-resolution camera lens, this spheroid robot hovers above the ground, silent witness to the carnage and mayhem around it.", "flags":["SEES", "FLIES", "ELECTRONIC", "NO_BREATHE", "NOHEAD"] - }, - { - "type":"MONSTER", - "id":"mon_manhack", + },{ + "type" : "MONSTER", + "id" : "mon_manhack", "name": "manhack", "species":"ROBOT", "symbol":"e", @@ -4245,10 +4135,9 @@ "special_attack":"NONE", "description":"Automated anti-personnel drone, a fist-sized robot surrounded by whirring blades.", "flags":["SEES", "FLIES", "NOHEAD", "ELECTRONIC", "HIT_AND_RUN", "NO_BREATHE", "VIS40"] - }, - { - "type":"MONSTER", - "id":"mon_skitterbot", + },{ + "type" : "MONSTER", + "id" : "mon_skitterbot", "name": "skitterbot", "species":"ROBOT", "symbol":"a", @@ -4272,12 +4161,11 @@ "special_freq":5, "death_function":"NORMAL", "special_attack":"TAZER", - "description":"A insectoid robot the size of a small dog, designed for home security. Armed with two close-range tazers, it can skate across the ground with great speed.", + "description":"A insectoid robot the size of a small dog, designed for home security. Armed with two close-range tazers, it can skate across the ground with great speed.", "flags":["SEES", "HEARS", "GOODHEARING", "ATTACKMON", "ELECTRONIC", "NO_BREATHE", "VIS50"] - }, - { - "type":"MONSTER", - "id":"mon_secubot", + },{ + "type" : "MONSTER", + "id" : "mon_secubot", "name": "security bot", "species":"ROBOT", "symbol":"R", @@ -4301,12 +4189,11 @@ "special_freq":2, "death_function":"EXPLODE", "special_attack":"SMG", - "description":"The Northrop Watchman X-1 is a production series of heavily armored combat robots. Initially designed for military patrol and escort service, t rolls on a set of hydraulic treads and is armed with a 3\"/50 caliber gun.", + "description":"The Northrop Watchman X-1 is a production series of heavily armored combat robots. Initially designed for military patrol and escort service, it rolls on a set of hydraulic treads and is armed with a 3\"/50 caliber gun.", "flags":["SEES", "HEARS", "BASHES", "ATTACKMON", "ELECTRONIC", "NO_BREATHE", "VIS50"] - }, - { - "type":"MONSTER", - "id":"mon_hazmatbot", + },{ + "type" : "MONSTER", + "id" : "mon_hazmatbot", "name": "cleaner bot", "species":"ROBOT", "symbol":"R", @@ -4332,10 +4219,9 @@ "special_attack":"NONE", "description":"The Ford Sanitron, a utility robot designed for cleaning up waste material in hazardous conditions.", "flags":["SEES", "HEARS", "BASHES", "ELECTRONIC", "NO_BREATHE", "VIS50"] - }, - { - "type":"MONSTER", - "id":"mon_copbot", + },{ + "type" : "MONSTER", + "id" : "mon_copbot", "name": "police bot", "species":"ROBOT", "symbol":"R", @@ -4359,12 +4245,11 @@ "special_freq":3, "death_function":"NORMAL", "special_attack":"COPBOT", - "description":"One of the many models of armored law enforcement robots employed shortly before the collapse of civilization. Solar powered like many other robots, it maintains its programmed pursuit of law and order, propelled on a trio of omni wheels.", + "description":"One of the many models of armored law enforcement robots employed shortly before the collapse of civilization. Solar powered like many other robots, it maintains its programmed pursuit of law and order, propelled on a trio of omni wheels.", "flags":["SEES", "HEARS", "BASHES", "ATTACKMON", "ELECTRONIC", "NO_BREATHE", "VIS50"] - }, - { - "type":"MONSTER", - "id":"mon_molebot", + },{ + "type" : "MONSTER", + "id" : "mon_molebot", "name": "miner bot", "species":"ROBOT", "symbol":"R", @@ -4390,10 +4275,9 @@ "special_attack":"NONE", "description":"A snake-like, segmented robot built to tunnel into the ground and detonate landmines.", "flags":["HEARS", "GOODHEARING", "DIGS", "NO_BREATHE", "ELECTRONIC"] - }, - { - "type":"MONSTER", - "id":"mon_tripod", + },{ + "type" : "MONSTER", + "id" : "mon_tripod", "name": "tribot", "species":"ROBOT", "symbol":"R", @@ -4417,12 +4301,11 @@ "special_freq":10, "death_function":"NORMAL", "special_attack":"FLAMETHROWER", - "description":"The Honda Regnal, a tall robot walking on three spidery legs. For weapons, it has a trio of spiked retractable cables and a flamethrower mounted on its head.", + "description":"The Honda Regnal, a tall robot walking on three spidery legs. For weapons, it has a trio of spiked retractable cables and a flamethrower mounted on its head.", "flags":["SEES", "HEARS", "GOODHEARING", "BASHES", "NO_BREATHE", "ELECTRONIC"] - }, - { - "type":"MONSTER", - "id":"mon_chickenbot", + },{ + "type" : "MONSTER", + "id" : "mon_chickenbot", "name": "chicken walker", "species":"ROBOT", "symbol":"R", @@ -4446,12 +4329,11 @@ "special_freq":5, "death_function":"EXPLODE", "special_attack":"SMG", - "description":"The Northrop ATSV, a massive, heavily-armed and armored robot walking on a pair of reverse-jointed legs. Armed with a 40 mm Bofors gun, it is an effective automated sentry, though production was limited due to a legal dispute.", + "description":"The Northrop ATSV, a massive, heavily-armed and armored robot walking on a pair of reverse-jointed legs. Armed with a 40 mm Bofors gun, it is an effective automated sentry, though production was limited due to a legal dispute.", "flags":["SEES", "HEARS", "BASHES", "NO_BREATHE", "ELECTRONIC"] - }, - { - "type":"MONSTER", - "id":"mon_tankbot", + },{ + "type" : "MONSTER", + "id" : "mon_tankbot", "name": "tank drone", "species":"ROBOT", "symbol":"R", @@ -4475,12 +4357,11 @@ "special_freq":4, "death_function":"NORMAL", "special_attack":"MULTI_ROBOT", - "description":"The Northrop Emancipator is the first and only model of automated tank, made shortly after the split-up of Northrup Grumman. Clad in depleted uranium plating, and armed with advanced munitions and a 120-mm gun, it is capable of delivering extraordinary firepower.", + "description":"The Northrop Emancipator is the first and only model of automated tank, made shortly after the split-up of Northrup Grumman. Clad in depleted uranium plating, and armed with advanced munitions and a 120-mm gun, it is capable of delivering extraordinary firepower.", "flags":["SEES", "HEARS", "GOODHEARING", "NOHEAD", "BASHES", "DESTROYS", "ATTACKMON", "NO_BREATHE", "ELECTRONIC"] - }, - { - "type":"MONSTER", - "id":"mon_turret", + },{ + "type" : "MONSTER", + "id" : "mon_turret", "name": "turret", "species":"ROBOT", "symbol":"2", @@ -4504,12 +4385,11 @@ "special_freq":1, "death_function":"EXPLODE", "special_attack":"SMG", - "description":"The General Atomics TX-1 Guardian, a small, pill-shaped automated gun turret using state of the art ATR systems to dynamically reorient itself to new friends and enemies alike. The two SMG barrels can swivel a full 360 degrees.", + "description":"The General Atomics TX-1 Guardian, a small, pill-shaped automated gun turret using state of the art ATR systems to dynamically reorient itself to new friends and enemies alike. The two SMG barrels can swivel a full 360 degrees.", "flags":["SEES", "NOHEAD", "ELECTRONIC", "IMMOBILE", "NO_BREATHE", "FRIENDLY_SPECIAL"] - }, - { - "type":"MONSTER", - "id":"mon_exploder", + },{ + "type" : "MONSTER", + "id" : "mon_exploder", "name": "exploder", "species":"ROBOT", "symbol":"2", @@ -4533,12 +4413,11 @@ "special_freq":1, "death_function":"EXPLODE", "special_attack":"NONE", - "description":"A small, round turret which extends from\nthe floor. Two SMG barrels swivel 360\ndegrees.", + "description":"A small, round turret which extends from the floor. Two SMG barrels swivel 360 degrees.", "flags":["IMMOBILE", "NO_BREATHE"] - }, - { - "type":"MONSTER", - "id":"mon_hallu_mom", + },{ + "type" : "MONSTER", + "id" : "mon_hallu_mom", "name": "your mother", "species":"HALLUCINATION", "symbol":"@", @@ -4564,10 +4443,9 @@ "special_attack":"DISAPPEAR", "description":"Mom?", "flags":["SEES", "HEARS", "NO_BREATHE", "SMELLS", "GUILT"] - }, - { - "type":"MONSTER", - "id":"mon_generator", + },{ + "type" : "MONSTER", + "id" : "mon_generator", "name": "generator", "species":"UNKNOWN", "symbol":"4", @@ -4591,12 +4469,11 @@ "special_freq":1, "death_function":"GAMEOVER", "special_attack":"GENERATOR", - "description":"Your precious generator, noisily humming away. Defend it at all costs!", + "description":"Your precious generator, noisily humming away. Defend it at all costs!", "flags":["NOHEAD", "ACIDPROOF", "IMMOBILE"] - }, - { - "type":"MONSTER", - "id":"mon_turkey", + },{ + "type" : "MONSTER", + "id" : "mon_turkey", "name": "turkey", "species":"BIRD", "symbol":"v", @@ -4620,14 +4497,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A large and colorful game bird native to the forests of North America. Its head and beak are covered in fleshy accretions.", + "description":"A large and colorful game bird native to the forests of North America. Its head and beak are covered in fleshy protuberances.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FLIES", "VIS50", "BONES", "FEATHER"], "fear_triggers":["PLAYER_CLOSE", "FRIEND_DIED"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_raccoon", + },{ + "type" : "MONSTER", + "id" : "mon_raccoon", "name": "raccoon", "species":"MAMMAL", "symbol":"r", @@ -4651,14 +4527,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A small mammal native to North America, distinctive for its dextrous paws and facial markings. It is resourceful and agile enough to open sealed containers with its paws.", + "description":"A small mammal native to North America, distinctive for its dextrous paws and facial markings. It is resourceful and agile enough to open sealed containers with its paws.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "KEENNOSE", "BLEED", "BONES", "VIS50"], "anger_triggers":["FRIEND_ATTACKED", "HURT"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_opossum", + },{ + "type" : "MONSTER", + "id" : "mon_opossum", "name": "opossum", "species":"MAMMAL", "symbol":"p", @@ -4682,15 +4557,14 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"The Virginia opossum, a small omnivorous marsupial native to North America. About the size of a cat, it is hardy and adaptive, and a fairly common sight in urban areas.", + "description":"The Virginia opossum, a small omnivorous marsupial native to North America. About the size of a cat, it is hardy and adaptive, and a fairly common sight in urban areas.", "flags":["SEES", "HEARS", "SMELLS", "ANIMAL", "WARM", "FUR", "KEENNOSE", "BLEED", "BONES", "VIS50"], "anger_triggers":["FRIEND_ATTACKED", "HURT"], "fear_triggers":["PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_rattlesnake", + },{ + "type" : "MONSTER", + "id" : "mon_rattlesnake", "name": "rattlesnake", "species":"REPTILE", "symbol":"s", @@ -4714,16 +4588,15 @@ "special_freq":6, "death_function":"NORMAL", "special_attack":"RATTLE", - "description":"The timber rattlesnake is the most venomous viper native to New England. Climatic changes have extended its range far into the north.", + "description":"The timber rattlesnake is the most venomous viper native to New England. Climatic changes have extended its range far into the north.", "flags":["SEES", "HEARS", "SMELLS", "BADVENOM", "HARDTOSHOOT", "SWIMS", "LEATHER", "VIS30", "BONES"], "anger_triggers":["HURT"], "placate_triggers":["PLAYER_WEAK"], "fear_triggers":["PLAYER_CLOSE"], "categories":["WILDLIFE"] - }, - { - "type":"MONSTER", - "id":"mon_giant_crayfish", + },{ + "type" : "MONSTER", + "id" : "mon_giant_crayfish", "name": "giant crayfish", "species":"MUTANT", "symbol":"y", @@ -4747,14 +4620,13 @@ "special_freq":0, "death_function":"NORMAL", "special_attack":"NONE", - "description":"A mutant, landfaring variety of the signal crayfish, this massive crustacean resembles a humongous lobster.", + "description":"A mutant, terrestrial variety of the signal crayfish, this massive crustacean resembles a humongous lobster.", "flags":["SMELLS", "HEARS", "SEES", "CHITIN", "SWIMS", "ATTACKMON", "GRABS"], "anger_triggers":["PLAYER_CLOSE", "HURT"], "fear_triggers":["FIRE"] - }, - { - "type":"MONSTER", - "id":"mon_shia", + },{ + "type" : "MONSTER", + "id" : "mon_shia", "name": "Shia LaBeouf", "species":"ZOMBIE", "symbol":"@", @@ -4782,5 +4654,5 @@ "flags":["SEES", "HEARS", "WARM", "BASHES", "POISON", "BLEED", "NO_BREATHE", "VIS30"], "anger_triggers":["STALK", "PLAYER_WEAK", "HURT", "PLAYER_CLOSE"], "fear_triggers":["FIRE"] - } + } ] diff --git a/data/json/mutations.json b/data/json/mutations.json index 966764a488127..ac3a9ad4919b9 100644 --- a/data/json/mutations.json +++ b/data/json/mutations.json @@ -2,2085 +2,1994 @@ { "type" : "mutation", "id" : "FLEET", - "name": "Fleet-Footed", - "points": 3, - "description": "You can run more quickly than most, resulting in a 15% speed bonus on sure footing.", - "starting_trait": true, - "cancels": ["PONDEROUS1", "PONDEROUS2", "PONDEROUS3"], - "changes_to": ["FLEET2"], - "category": ["MUTCAT_SPIDER"] + "name" : "Fleet-Footed", + "points" : 3, + "description" : "You can run more quickly than most, resulting in a 15% speed bonus on sure footing.", + "starting_trait" : true, + "cancels" : ["PONDEROUS1", "PONDEROUS2", "PONDEROUS3"], + "changes_to" : ["FLEET2"], + "category" : ["MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "PARKOUR", - "name": "Parkour Expert", - "points": 2, - "description": "You're skilled at clearing obstacles; terrain like railings or counters are as easy for you to move on as solid ground.", - "starting_trait": true, - "valid": false + "name" : "Parkour Expert", + "points" : 2, + "description" : "You're skilled at clearing obstacles; terrain like railings or counters are as easy for you to move on as solid ground.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "QUICK", - "name": "Quick", - "points": 3, - "description": "You're just generally quick! You get a 10% bonus to action points.", - "starting_trait": true, - "category": ["MUTCAT_BIRD", "MUTCAT_INSECT", "MUTCAT_TROGLO"] + "name" : "Quick", + "points" : 3, + "description" : "You're just generally quick! You get a 10% bonus to action points.", + "starting_trait" : true, + "category" : ["MUTCAT_BIRD", "MUTCAT_INSECT", "MUTCAT_TROGLO", "MUTCAT_CHIMERA", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "OPTIMISTIC", - "name": "Optimist", - "points": 2, - "description": "Nothing gets you down! You savor the joys of life, ignore its hardships, and are generally happier than most people.", - "starting_trait": true, - "valid": false + "name" : "Optimist", + "points" : 2, + "description" : "Nothing gets you down! You savor the joys of life, ignore its hardships, and are generally happier than most people.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "FASTHEALER", - "name": "Fast Healer", - "points": 2, - "description": "You heal a little faster than most; sleeping will heal more lost HP.", - "starting_trait": true, - "cancels": ["ROT1", "ROT2", "ROT3"], - "changes_to": ["FASTHEALER2"] + "name" : "Fast Healer", + "points" : 2, + "description" : "You heal a little faster than most; sleeping will heal more lost HP.", + "starting_trait" : true, + "cancels" : ["ROT1", "ROT2", "ROT3"], + "changes_to" : ["FASTHEALER2"], + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "LIGHTEATER", - "name": "Light Eater", - "points": 3, - "description": "Your metabolism is a little slower, and you require less food than most.", - "starting_trait": true, - "category": ["MUTCAT_BIRD", "MUTCAT_INSECT", "MUTCAT_TROGLO"] + "name" : "Light Eater", + "points" : 3, + "description" : "Your metabolism is a little slower, and you require less food than most.", + "starting_trait" : true, + "category" : ["MUTCAT_BIRD", "MUTCAT_INSECT", "MUTCAT_TROGLO"] },{ "type" : "mutation", "id" : "PAINRESIST", - "name": "Pain Resistant", - "points": 2, - "description": "You have a high tolerance for pain.", - "starting_trait": true, - "valid": false + "name" : "Pain Resistant", + "points" : 2, + "description" : "You have a high tolerance for pain.", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "NIGHTVISION", - "name": "Night Vision", - "points": 1, - "description": "You possess natural night vision, and can see two squares instead of one in pitch blackness.", - "starting_trait": true, - "changes_to": ["NIGHTVISION2"], - "category": ["MUTCAT_BIRD", "MUTCAT_CATTLE", "MUTCAT_INSECT"] + "name" : "Night Vision", + "points" : 1, + "description" : "You possess natural night vision, and can see two squares instead of one in pitch blackness.", + "starting_trait" : true, + "changes_to" : ["NIGHTVISION2"], + "cancels": ["ELFA_NV", "ELFA_FNV"], + "category" : ["MUTCAT_BIRD", "MUTCAT_CATTLE", "MUTCAT_INSECT"] },{ "type" : "mutation", "id" : "POISRESIST", - "name": "Poison Resistant", - "points": 1, - "description": "Your system is rather tolerant of poisons and toxins, and most will affect you less.", - "starting_trait": true, - "category": ["MUTCAT_INSECT", "MUTCAT_SLIME", "MUTCAT_SPIDER"] + "name" : "Poison Resistant", + "points" : 1, + "description" : "Your system is rather tolerant of poisons and toxins, and most will affect you less.", + "starting_trait" : true, + "category" : [ + "MUTCAT_INSECT", + "MUTCAT_SLIME", + "MUTCAT_SPIDER", + "MUTCAT_MEDICAL" + ] },{ "type" : "mutation", "id" : "FASTREADER", - "name": "Fast Reader", - "points": 1, - "description": "You're a quick reader, and can get through books a lot faster than most.", - "starting_trait": true, - "valid": false, - "cancels": ["ILLITERATE"] + "name" : "Fast Reader", + "points" : 1, + "description" : "You're a quick reader, and can get through books a lot faster than most.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["ILLITERATE"] },{ "type" : "mutation", "id" : "TOUGH", - "name": "Tough", - "points": 3, - "description": "It takes a lot to bring you down! You get a 20% bonus to all hit points.", - "starting_trait": true, - "valid": false, - "cancels": ["FRAIL", "GLASSJAW"] + "name" : "Tough", + "points" : 3, + "description" : "It takes a lot to bring you down! You get a 20% bonus to all hit points.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["FRAIL", "GLASSJAW"] },{ "type" : "mutation", "id" : "THICKSKIN", - "name": "Thick-Skinned", - "points": 2, - "description": "Your skin is tough. Cutting damage is slightly reduced for you. Slightly decreases wet penalties.", - "starting_trait": true, - "category": ["MUTCAT_LIZARD", "MUTCAT_CATTLE"], - "wet_protection":[ - { - "part": "LEGS", - "ignored": 0, - "neutral": 1, - "good": 0 - }, - { - "part": "ARMS", - "neutral": 1 - }, - { - "part": "TORSO", - "neutral": 2 - } - ] + "name" : "Thick-Skinned", + "points" : 2, + "description" : "Your skin is tough. Cutting damage is slightly reduced for you. Slightly decreases wet penalties.", + "starting_trait" : true, + "category" : ["MUTCAT_LIZARD", "MUTCAT_CATTLE", "MUTCAT_CHIMERA", "MUTCAT_RAPTOR"], + "wet_protection" : [ + { + "part" : "LEGS", + "ignored" : 0, + "neutral" : 1, + "good" : 0 + },{ + "part" : "ARMS", + "neutral" : 1 + },{ + "part" : "TORSO", + "neutral" : 2 + } + ] },{ "type" : "mutation", "id" : "PACKMULE", - "name": "Packmule", - "points": 3, - "description": "You can manage to find space for anything! You can carry 40% more volume.", - "starting_trait": true, - "valid": false + "name" : "Packmule", + "points" : 3, + "description" : "You can manage to find space for anything! You can carry 40% more volume.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "FASTLEARNER", - "name": "Fast Learner", - "points": 3, - "description": "You have a flexible mind, allowing you to learn skills much faster than others. Note that this only applies to real-world experience, not to skill gain from other sources like books.", - "starting_trait": true, - "valid": false + "name" : "Fast Learner", + "points" : 3, + "description" : "You have a flexible mind, allowing you to learn skills much faster than others. Note that this only applies to real-world experience, not to skill gain from other sources like books.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "DEFT", - "name": "Deft", - "points": 2, - "description": "While you're not any better at melee combat, you are better at recovering from a miss, and will be able to attempt another strike faster.", - "starting_trait": true, - "category": ["MUTCAT_BIRD", "MUTCAT_BEAST"] + "name" : "Deft", + "points" : 2, + "description" : "While you're not any better at melee combat, you are better at recovering from a miss, and will be able to attempt another strike faster.", + "starting_trait" : true, + "category" : ["MUTCAT_BIRD", "MUTCAT_BEAST", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "DRUNKEN", - "name": "Drunken Master", - "points": 2, - "description": "The ancient arts of drunken brawling come naturally to you! While under the influence of alcohol, your melee skill will rise considerably, especially unarmed combat.", - "starting_trait": true, - "valid": false, - "cancels": ["LIGHTWEIGHT"] + "name" : "Drunken Master", + "points" : 2, + "description" : "The ancient arts of drunken brawling come naturally to you! While under the influence of alcohol, your melee skill will rise considerably, especially unarmed combat.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["LIGHTWEIGHT"] },{ "type" : "mutation", "id" : "GOURMAND", - "name": "Gourmand", - "points": 2, - "description": "You eat faster, and can eat and drink more, than anyone else! You also enjoy food more; delicious food is better for your morale, and you don't mind some unsavory meals.", - "starting_trait": true, - "valid": false + "name" : "Gourmand", + "points" : 2, + "description" : "You eat faster, and can eat and drink more, than anyone else! You also enjoy food more; delicious food is better for your morale, and you don't mind some unsavory meals.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "ANIMALEMPATH", - "name": "Animal Empathy", - "points": 1, - "description": "Peaceful animals will not run away from you, and even aggressive animals are less likely to attack. This only applies to natural animals such as woodland creatures.", - "starting_trait": true, - "category": ["MUTCAT_BEAST"] + "name" : "Animal Empathy", + "points" : 1, + "description" : "Peaceful animals will not run away from you, and even aggressive animals are less likely to attack. This only applies to natural animals such as woodland creatures.", + "starting_trait" : true, + "category" : ["MUTCAT_BEAST"] },{ "type" : "mutation", "id" : "TERRIFYING", - "name": "Terrifying", - "points": 2, - "description": "There's something about you that creatures find frightening, and they are more likely to try to flee.", - "starting_trait": true, - "category": ["MUTCAT_BEAST", "MUTCAT_INSECT"] + "name" : "Terrifying", + "points" : 2, + "description" : "There's something about you that creatures find frightening, and they are more likely to try to flee.", + "starting_trait" : true, + "category" : ["MUTCAT_BEAST", "MUTCAT_INSECT", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "DISRESISTANT", - "name": "Disease Resistant", - "points": 1, - "description": "It's very unlikely that you will catch ambient diseases like a cold or the flu.", - "starting_trait": true, - "changes_to": ["DISIMMUNE"], - "category": ["MUTCAT_CATTLE", "MUTCAT_RAT"] + "name" : "Disease Resistant", + "points" : 1, + "description" : "It's very unlikely that you will catch ambient diseases like a cold or the flu.", + "starting_trait" : true, + "changes_to" : ["DISIMMUNE"], + "category" : ["MUTCAT_CATTLE", "MUTCAT_RAT", "MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "ADRENALINE", - "name": "High Adrenaline", - "points": 3, - "description": "If you are in a very dangerous situation, you may experience a temporary rush which increases your speed and strength significantly.", - "starting_trait": true, - "category": ["MUTCAT_BEAST"] + "name" : "High Adrenaline", + "points" : 3, + "description" : "If you are in a very dangerous situation, you may experience a temporary rush which increases your speed and strength significantly.", + "starting_trait" : true, + "category" : ["MUTCAT_BEAST", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "SELFAWARE", - "name": "Self-aware", - "points": 1, - "description": "You get to see your exact amount of HP remaining, instead of only having a vague idea of whether you're in good condition or not.", - "starting_trait": true, - "valid": false + "name" : "Self-aware", + "points" : 1, + "description" : "You get to see your exact amount of HP remaining, instead of only having a vague idea of whether you're in good condition or not.", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "INCONSPICUOUS", - "name": "Inconspicuous", - "points": 2, - "description": "While sleeping or staying still, it is less likely that monsters will wander close to you.", - "starting_trait": true, - "valid": false + "name" : "Inconspicuous", + "points" : 2, + "description" : "While sleeping or staying still, it is less likely that monsters will wander close to you.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "MASOCHIST", - "name": "Masochist", - "points": 2, - "description": "Although you still suffer the negative effects of pain, it also brings a unique pleasure to you.", - "starting_trait": true, - "valid": false + "name" : "Masochist", + "points" : 2, + "description" : "Although you still suffer the negative effects of pain, it also brings a unique pleasure to you.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "STYLISH", - "name": "Stylish", - "points": 2, - "description": "Practicality is far less important than style. Even at the end of the world, it's important to look your best.", - "starting_trait": true, - "valid": false + "name" : "Stylish", + "points" : 2, + "description" : "Practicality is far less important than style. Your morale is improved by wearing fashionable and attractive clothing.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "LIGHTSTEP", - "name": "Light Step", - "points": 1, - "description": "You make less noise while walking. You're also less likely to set off traps.", - "starting_trait": true, - "category": ["MUTCAT_BIRD"] + "name" : "Light Step", + "points" : 1, + "description" : "You make less noise while walking. You're also less likely to set off traps.", + "starting_trait" : true, + "category" : ["MUTCAT_BIRD", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "ROBUST", - "name": "Robust Genetics", - "points": 2, - "description": "You have a very strong genetic base. If you mutate, the odds that the mutation will be beneficial are greatly increased.", - "starting_trait": true, - "category": ["MUTCAT_SLIME"] + "name" : "Robust Genetics", + "points" : 2, + "description" : "You have a very strong genetic base. If you mutate, the odds that the mutation will be beneficial are greatly increased.", + "starting_trait" : true, + "category" : ["MUTCAT_SLIME", "MUTCAT_ALPHA", "MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "CANNIBAL", - "name": "Cannibal", - "points": 3, - "description": "For your whole life you've been forbidden from indulging in your peculiar tastes. Now the world's ended, and you'll be damned if anyone is going to tell you that you can't eat people.", - "starting_trait": true, - "valid": false, - "cancels": ["VEGETARIAN"] + "name" : "Cannibal", + "points" : 3, + "description" : "For your whole life you've been forbidden from indulging in your peculiar tastes. Now the world's ended, and you'll be damned if anyone is going to tell you that you can't eat people.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["VEGETARIAN"] },{ "type" : "mutation", "id" : "MARTIAL_ARTS", - "name": "Martial Arts Training", - "points": 3, - "description": "You have received some martial arts training at a local dojo. You start with your choice of karate, judo, aikido, tai chi, or taekwondo.", - "starting_trait": true, - "valid": false + "name" : "Martial Arts Training", + "points" : 3, + "description" : "You have received some martial arts training at a local dojo. You start with your choice of karate, judo, aikido, tai chi, or taekwondo.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "MARTIAL_ARTS2", - "name": "Self-Defense Classes", - "points": 3, - "description": "You have taken some self-defense classes at a nearby gym. You start with your choice of Capoeira, Krav Maga, Muay Thai, Ninjutsu, or Zui Quan.", - "starting_trait": true, - "valid": false + "name" : "Self-Defense Classes", + "points" : 3, + "description" : "You have taken some self-defense classes at a nearby gym. You start with your choice of Capoeira, Krav Maga, Muay Thai, Ninjutsu, or Zui Quan.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "LIAR", - "name": "Skilled Liar", - "points": 2, - "description": "You have no qualms about bending the truth, and have practically no tells. Telling lies and otherwise bluffing will be much easier for you.", - "starting_trait": true, - "cancels": ["TRUTHTELLER"] + "name" : "Skilled Liar", + "points" : 2, + "description" : "You have no qualms about bending the truth, and have practically no tells. Telling lies and otherwise bluffing will be much easier for you.", + "starting_trait" : true, + "cancels" : ["TRUTHTELLER"] },{ "type" : "mutation", "id" : "PRETTY", - "name": "Pretty", - "points": 1, - "ugliness": -2, - "description": "You are a sight to behold. NPCs who care about such thing will react more kindly to you.", - "starting_trait": true, - "cancels": ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], - "changes_to": ["BEAUTIFUL"] + "name" : "Pretty", + "points" : 1, + "ugliness" : -2, + "description" : "You are a sight to behold. NPCs who care about such thing will react more kindly to you.", + "starting_trait" : true, + "category" : ["MUTCAT_ALPHA"], + "cancels" : ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], + "changes_to" : ["BEAUTIFUL"] },{ "type" : "mutation", "id" : "MYOPIC", - "name": "Near-Sighted", - "points": -2, - "description": "Without your glasses, your seeing radius is severely reduced! However, while wearing glasses this trait has no effect, and you are guaranteed to start with a pair.", - "starting_trait": true, - "category": ["MUTCAT_BEAST", "MUTCAT_TROGLO"] + "name" : "Near-Sighted", + "points" : -2, + "description" : "Without your glasses, your seeing radius is severely reduced! However, while wearing glasses this trait has no effect, and you are guaranteed to start with a pair.", + "starting_trait" : true, + "category" : ["MUTCAT_BEAST", "MUTCAT_TROGLO"] },{ "type" : "mutation", "id" : "HYPEROPIC", - "name": "Far-Sighted", - "points": -2, - "description": "Without reading glasses, you are unable to read anything, and take penalties on melee accuracy and electronics/tailoring crafting. However, you are guaranteed to start with a pair of reading glasses.", - "starting_trait": true, - "valid": false + "name" : "Far-Sighted", + "points" : -2, + "description" : "Without reading glasses, you are unable to read anything, and take penalties on melee accuracy and electronics/tailoring crafting. However, you are guaranteed to start with a pair of reading glasses.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "HEAVYSLEEPER", - "name": "Heavy Sleeper", - "points": -1, - "description": "You're quite the heavy sleeper. Noises are unlikely to wake you up.", - "starting_trait": true, - "category": ["MUTCAT_INSECT", "MUTCAT_PLANT"] + "name" : "Heavy Sleeper", + "points" : -1, + "description" : "You're quite the heavy sleeper. Noises are unlikely to wake you up.", + "starting_trait" : true, + "category" : ["MUTCAT_INSECT", "MUTCAT_PLANT", "MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "ASTHMA", - "name": "Asthmatic", - "points": -4, - "description": "You will occasionally need to use an inhaler, or else suffer severe physical limitations. However, you are guaranteed to start with an inhaler.", - "starting_trait": true, - "valid": false + "name" : "Asthmatic", + "points" : -4, + "description" : "You will occasionally need to use an inhaler, or else suffer severe physical limitations. However, you are guaranteed to start with an inhaler.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "BADBACK", - "name": "Bad Back", - "points": -3, - "description": "You simply can not carry as much as people with a similar strength could. Your maximum weight carried is reduced by 35%.", - "starting_trait": true, - "category": ["MUTCAT_BIRD"] + "name" : "Bad Back", + "points" : -3, + "description" : "You simply can not carry as much as people with a similar strength could. Your maximum weight carried is reduced by 35%.", + "starting_trait" : true, + "category" : ["MUTCAT_BIRD", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "ILLITERATE", - "name": "Illiterate", - "points": -5, - "description": "You never learned to read! Books and computers are off-limits to you.", - "starting_trait": true, - "valid": false, - "cancels": ["FASTREADER"] + "name" : "Illiterate", + "points" : -5, + "description" : "You never learned to read! Books and computers are off-limits to you.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["FASTREADER"] },{ "type" : "mutation", "id" : "BADHEARING", - "name": "Poor Hearing", - "points": -2, - "description": "Your hearing is poor, and you may not hear quiet or far-off noises.", - "starting_trait": true, - "category": ["MUTCAT_PLANT"] + "name" : "Poor Hearing", + "points" : -2, + "description" : "Your hearing is poor, and you may not hear quiet or far-off noises.", + "starting_trait" : true, + "category" : ["MUTCAT_PLANT"] },{ "type" : "mutation", "id" : "INSOMNIA", - "name": "Insomniac", - "points": -2, - "description": "You have a hard time falling asleep, even under the best circumstances!", - "starting_trait": true, - "valid": false + "name" : "Insomniac", + "points" : -2, + "description" : "You have a hard time falling asleep, even under the best circumstances!", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "VEGETARIAN", - "name": "Meat Intolerance", - "points": -3, - "description": "You have problems with eating meat. It's possible for you to eat it, but you will suffer morale penalties due to nausea.", - "starting_trait": true, - "valid": false, - "cancels": ["CANNIBAL"] + "name" : "Meat Intolerance", + "points" : -3, + "description" : "You have problems with eating meat. It's possible for you to eat it, but you will suffer morale penalties due to nausea.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["CANNIBAL"] },{ "type" : "mutation", "id" : "GLASSJAW", - "name": "Glass Jaw", - "points": -3, - "description": "Your head can't take much abuse. Its maximum HP is 20% lower than usual.", - "starting_trait": true, - "category": ["MUTCAT_BIRD"], - "cancels": ["TOUGH"] + "name" : "Glass Jaw", + "points" : -3, + "description" : "Your head can't take much abuse. Its maximum HP is 20% lower than usual.", + "starting_trait" : true, + "category" : ["MUTCAT_BIRD", "MUTCAT_RAPTOR"], + "cancels" : ["TOUGH"] },{ "type" : "mutation", "id" : "FORGETFUL", - "name": "Forgetful", - "points": -3, - "description": "You have a hard time remembering things. Your skills will erode slightly faster than usual.", - "starting_trait": true, - "category": ["MUTCAT_BEAST", ""] + "name" : "Forgetful", + "points" : -3, + "description" : "You have a hard time remembering things. Your skills will erode slightly faster than usual.", + "starting_trait" : true, + "category" : ["MUTCAT_BEAST", "MUTCAT_MEDICAL", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "LIGHTWEIGHT", - "name": "Lightweight", - "points": -1, - "description": "Alcohol and drugs go straight to your head. You suffer the negative effects of these for longer.", - "starting_trait": true, - "cancels": ["DRUNKEN"] + "name" : "Lightweight", + "points" : -1, + "description" : "Alcohol and drugs go straight to your head. You suffer the negative effects of these for longer.", + "starting_trait" : true, + "category" : ["MUTCAT_MEDICAL"], + "cancels" : ["DRUNKEN"] },{ "type" : "mutation", "id" : "ADDICTIVE", - "name": "Addictive Personality", - "points": -3, - "description": "It's easier for you to become addicted to substances, and harder to rid yourself of these addictions.", - "starting_trait": true, - "valid": false + "name" : "Addictive Personality", + "points" : -3, + "description" : "It's easier for you to become addicted to substances, and harder to rid yourself of these addictions.", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "TRIGGERHAPPY", - "name": "Trigger Happy", - "points": -2, - "description": "On rare occasion, you will go full-auto when you intended to fire a single shot. This has no effect when firing handguns or other semi-automatic firearms.", - "starting_trait": true, - "valid": false + "name" : "Trigger Happy", + "points" : -2, + "description" : "On rare occasion, you will go full-auto when you intended to fire a single shot. This has no effect when firing handguns or other semi-automatic firearms.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "SMELLY", - "name": "Smelly", - "points": -1, - "description": "Your scent is particularly strong. It's not offensive to humans, but animals that track your scent will do so more easily.", - "starting_trait": true, - "changes_to": ["SMELLY2"] + "name" : "Smelly", + "points" : -1, + "description" : "Your scent is particularly strong. It's not offensive to humans, but animals that track your scent will do so more easily.", + "starting_trait" : true, + "changes_to" : ["SMELLY2"] },{ "type" : "mutation", "id" : "CHEMIMBALANCE", - "name": "Chemical Imbalance", - "points": -2, - "description": "You suffer from a minor chemical imbalance, whether mental or physical. Minor changes to your internal chemistry will manifest themselves on occasion, such as hunger, sleepiness, narcotic effects, etc.", - "starting_trait": true, - "category": ["MUTCAT_SLIME"] + "name" : "Chemical Imbalance", + "points" : -2, + "description" : "You suffer from a minor chemical imbalance, whether mental or physical. Minor changes to your internal chemistry will manifest themselves on occasion, such as hunger, sleepiness, narcotic effects, etc.", + "starting_trait" : true, + "category" : ["MUTCAT_SLIME", "MUTCAT_MEDICAL", "MUTCAT_CHIMERA", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "SCHIZOPHRENIC", - "name": "Schizophrenic", - "points": -5, - "description": "You will periodically suffer from delusions, ranging from minor effects to full visual hallucinations. Some of these effects may be controlled through the use of Thorazine.", - "starting_trait": true, - "valid": false + "name" : "Schizophrenic", + "points" : -5, + "description" : "You will periodically suffer from delusions, ranging from minor effects to full visual hallucinations. Some of these effects may be controlled through the use of Thorazine.", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "JITTERY", - "name": "Jittery", - "points": -3, - "description": "During moments of great stress or under the effects of stimulants, you may find your hands shaking uncontrollably, severely reducing your dexterity.", - "starting_trait": true, - "valid": false + "name" : "Jittery", + "points" : -3, + "description" : "During moments of great stress or under the effects of stimulants, you may find your hands shaking uncontrollably, severely reducing your dexterity.", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "HOARDER", - "name": "Hoarder", - "points": -4, - "description": "You don't feel right unless you're carrying as much as you can. You suffer morale penalties for carrying less than maximum volume (weight is ignored). Xanax can help control this anxiety.", - "starting_trait": true, - "valid": false + "name" : "Hoarder", + "points" : -4, + "description" : "You don't feel right unless you're carrying as much as you can. You suffer morale penalties for carrying less than maximum volume (weight is ignored). Xanax can help control this anxiety.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "SAVANT", - "name": "Savant", - "points": -4, - "description": "You tend to specialize in one skill and be poor at all others. You advance at half speed in all skills except your best one. Note that combining this with Fast Learner will come out to a slower rate of learning for all skills.", - "starting_trait": true, - "valid": false + "name" : "Savant", + "points" : -4, + "description" : "You tend to specialize in one skill and be poor at all others. You advance at half speed in all skills except your best one. Note that combining this with Fast Learner will come out to a slower rate of learning for all skills.", + "starting_trait" : true, + "valid" : false },{ "type" : "mutation", "id" : "MOODSWINGS", - "name": "Mood Swings", - "points": -1, - "description": "Your morale will shift up and down at random, often dramatically.", - "starting_trait": true, - "valid": false + "name" : "Mood Swings", + "points" : -1, + "description" : "Your morale will shift up and down at random, often dramatically.", + "starting_trait" : true, + "valid" : false, + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "WEAKSTOMACH", - "name": "Weak Stomach", - "points": -1, - "description": "You are more likely to throw up from food poisoning, alcohol, etc.", - "starting_trait": true, - "changes_to": ["NAUSEA"] + "name" : "Weak Stomach", + "points" : -1, + "description" : "You are more likely to throw up from food poisoning, alcohol, etc.", + "starting_trait" : true, + "changes_to" : ["NAUSEA"] },{ "type" : "mutation", "id" : "WOOLALLERGY", - "name": "Wool Allergy", - "points": -1, - "description": "You are badly allergic to wool, and can not wear any clothing made of the substance.", - "starting_trait": true, - "valid": true + "name" : "Wool Allergy", + "points" : -1, + "description" : "You are badly allergic to wool, and can not wear any clothing made of the substance.", + "starting_trait" : true, + "valid" : true },{ "type" : "mutation", "id" : "TRUTHTELLER", - "name": "Truth Teller", - "points": -2, - "description": "When you try to tell a lie, you blush, stammer, and get all shifty-eyed. Telling lies and otherwise bluffing will be much more difficult for you.", - "starting_trait": true, - "cancels": ["LIAR"] + "name" : "Truth Teller", + "points" : -2, + "description" : "When you try to tell a lie, you blush, stammer, and get all shifty-eyed. Telling lies and otherwise bluffing will be much more difficult for you.", + "starting_trait" : true, + "cancels" : ["LIAR"] },{ "type" : "mutation", "id" : "UGLY", - "name": "Ugly", - "points": -1, - "ugliness": 2, - "description": "You're not much to look at. NPCs who care about such things will react poorly to you.", - "starting_trait": true, - "cancels": ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], - "changes_to": ["DEFORMED"] + "name" : "Ugly", + "points" : -1, + "ugliness" : 2, + "description" : "You're not much to look at. NPCs who care about such things will react poorly to you.", + "starting_trait" : true, + "cancels" : ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], + "changes_to" : ["DEFORMED"], + "categories": ["MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "FRAIL", - "name": "Frail", - "points": -6, - "description": "Your whole body can't take much abuse. Its maximum HP is 75% points lower than usual. Stacks with Glass Jaw. Not for casuals.", - "starting_trait": true, - "valid": false, - "cancels": ["TOUGH"] + "name" : "Frail", + "points" : -6, + "description" : "Your whole body can't take much abuse. Its maximum HP is 75% points lower than usual. Stacks with Glass Jaw. Not for casuals.", + "starting_trait" : true, + "valid" : false, + "cancels" : ["TOUGH"] },{ "type" : "mutation", "id" : "SKIN_ROUGH", - "name": "Rough Skin", - "points": 0, - "visibility": 2, - "ugliness": 1, - "description": "Your skin is slightly rough. This has no gameplay effect.", - "changes_to": ["SCALES", "FEATHERS", "LIGHTFUR", "CHITIN", "PLANTSKIN"], - "category": ["MUTCAT_LIZARD"] + "name" : "Rough Skin", + "points" : 0, + "visibility" : 2, + "ugliness" : 1, + "description" : "Your skin is slightly rough. This has no gameplay effect.", + "changes_to" : ["SCALES", "FEATHERS", "LIGHTFUR", "CHITIN", "PLANTSKIN"], + "category" : ["MUTCAT_LIZARD"] },{ "type" : "mutation", "id" : "NIGHTVISION2", - "name": "High Night Vision", - "points": 3, - "description": "You can see incredibly well in the dark!", - "prereqs": ["NIGHTVISION"], - "changes_to": ["NIGHTVISION3"], - "category": ["MUTCAT_FISH", "MUTCAT_BEAST", "MUTCAT_INSECT", "MUTCAT_RAT"] + "name" : "High Night Vision", + "points" : 3, + "description" : "You can see incredibly well in the dark!", + "prereqs" : ["NIGHTVISION"], + "changes_to" : ["NIGHTVISION3"], + "cancels" : ["ELFA_NV", "ELFA_FNV"], + "category" : ["MUTCAT_FISH", "MUTCAT_BEAST", "MUTCAT_INSECT", "MUTCAT_RAT", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "NIGHTVISION3", - "name": "Full Night Vision", - "points": 5, - "description": "You can see in pitch blackness as if you were wearing night-vision goggles.", - "prereqs": ["NIGHTVISION2"], - "leads_to": ["INFRARED"], - "category": ["MUTCAT_TROGLO", "MUTCAT_SPIDER"] + "name" : "Full Night Vision", + "points" : 5, + "description" : "You can see in pitch blackness as if you were wearing night-vision goggles.", + "prereqs" : ["NIGHTVISION2"], + "leads_to" : ["INFRARED"], + "cancels" : ["ELFA_NV", "ELFA_FNV"], + "category" : ["MUTCAT_TROGLO", "MUTCAT_SPIDER"] + },{ + "type" : "mutation", + "id" : "ELFAEYES", + "name" : "Fey Eyes", + "points" : 1, + "description" : "Your eyes have turned...green. It's tough to tell the exact shade as it seems to shift. The effect is ...pleasant.", + "leads_to" : ["ELFA_NV"], + "valid" : false, + "category" : ["MUTCAT_ELFA"] + },{ + "type" : "mutation", + "id" : "ELFA_NV", + "name" : "Fey Vision", + "points" : 3, + "description" : "The shadows don't seem as dark now.", + "prereqs" : ["ELFAEYES"], + "changes_to" : ["ELFA_FNV"], + "cancels" : ["NIGHTVISION", "NIGHTVISION2", "NIGHTVISION3"], + "category" : ["MUTCAT_ELFA"] + },{ + "type" : "mutation", + "id" : "ELFA_FNV", + "name" : "Fey Nightsight", + "points" : 5, + "description" : "You can see clearly, even in the darkest caves and under moonless skies.", + "prereqs" : ["ELFA_NV"], + "cancels" : ["NIGHTVISION", "NIGHTVISION2", "NIGHTVISION3"], + "category" : ["MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "INFRARED", - "name": "Infrared Vision", - "points": 5, - "description": "Your eyes have mutated to pick up radiation in the infrared spectrum.", - "prereqs": ["NIGHTVISION3"], - "category": ["MUTCAT_LIZARD", "MUTCAT_INSECT", "MUTCAT_TROGLO", "MUTCAT_SPIDER"] + "name" : "Infrared Vision", + "points" : 5, + "description" : "Your eyes have mutated to pick up radiation in the infrared spectrum.", + "prereqs" : ["NIGHTVISION3"], + "category" : ["MUTCAT_INSECT", "MUTCAT_TROGLO", "MUTCAT_SPIDER"] + },{ + "type" : "mutation", + "id" : "LIZ_EYE", + "name" : "Reptilian Eyes", + "points" : 0, + "visibility" : 2, + "ugliness" : 1, + "description" : "Your eyes have mutated, with a brilliant iris and slitted pupil similar to that of a lizard. This is visually striking, but doesn't seem to affect your vision.", + "leads_to" : ["LIZ_IR"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_RAPTOR"] + },{ + "type" : "mutation", + "id" : "LIZ_IR", + "name" : "Reptilian IR", + "points" : 5, + "description" : "Your optic nerves and brain have mutated to catch up with your eyes, allowing you to see in the infrared spectrum.", + "prereqs" : ["LIZ_EYE"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "FASTHEALER2", - "name": "Very Fast Healer", - "points": 5, - "description": "Your flesh regenerates slowly, and you will regain HP even when not sleeping.", - "cancels": ["ROT1", "ROT2", "ROT3"], - "prereqs": ["FASTHEALER"], - "changes_to": ["REGEN"], - "category": ["MUTCAT_PLANT"] + "name" : "Very Fast Healer", + "points" : 5, + "description" : "Your flesh regenerates slowly, and you will regain HP even when not sleeping.", + "cancels" : ["ROT1", "ROT2", "ROT3"], + "prereqs" : ["FASTHEALER"], + "changes_to" : ["REGEN"], + "category" : ["MUTCAT_PLANT"] },{ "type" : "mutation", "id" : "REGEN", - "name": "Regeneration", - "points": 10, - "description": "Your flesh regenerates from wounds incredibly quickly.", - "cancels": ["ROT1", "ROT2", "ROT3"], - "prereqs": ["FASTHEALER2"], - "category": ["MUTCAT_SLIME", "MUTCAT_TROGLO"] + "name" : "Regeneration", + "points" : 10, + "description" : "Your flesh regenerates from wounds incredibly quickly.", + "cancels" : ["ROT1", "ROT2", "ROT3"], + "prereqs" : ["FASTHEALER2"], + "category" : ["MUTCAT_SLIME", "MUTCAT_TROGLO"] },{ "type" : "mutation", "id" : "FANGS", - "name": "Fangs", - "points": 2, - "visibility": 2, - "ugliness": 2, - "description": "Your teeth have grown into two-inch-long fangs, allowing you to make an extra attack when conditions favor it.", - "cancels": ["BEAK"], - "category": ["MUTCAT_LIZARD", "MUTCAT_FISH", "MUTCAT_BEAST"] + "name" : "Fangs", + "points" : 2, + "visibility" : 2, + "ugliness" : 2, + "description" : "Your teeth have grown into two-inch-long fangs, allowing you to make an extra attack when conditions favor it.", + "cancels" : ["BEAK"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_FISH", "MUTCAT_BEAST", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "MEMBRANE", - "name": "Nictitating Membrane", - "points": 1, - "visibility": 1, - "ugliness": 2, - "description": "You have a second set of clear eyelids which lower while underwater, allowing you to see as though you were wearing goggles. Slightly decreases wet penalties.", - "prereqs": ["EYEBULGE"], - "category": ["MUTCAT_LIZARD", "MUTCAT_FISH"], - "wet_protection":[ - { - "part": "EYES", - "neutral": 1 - } - ] + "name" : "Nictitating Membrane", + "points" : 1, + "visibility" : 1, + "ugliness" : 2, + "description" : "You have a second set of clear eyelids which lower while underwater, allowing you to see as though you were wearing goggles. Slightly decreases wet penalties.", + "prereqs" : ["EYEBULGE"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_FISH"], + "wet_protection" : [ + { "part" : "EYES", "neutral" : 1 } + ] },{ "type" : "mutation", "id" : "GILLS", - "name": "Gills", - "points": 3, - "visibility": 5, - "ugliness": 3, - "description": "You've grown a set of gills in your neck, allowing you to breathe underwater. Slightly increases wet benefits.", - "category": ["MUTCAT_FISH", "MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "HEAD", - "good": 1 - } - ] + "name" : "Gills", + "points" : 3, + "visibility" : 5, + "ugliness" : 3, + "description" : "You've grown a set of gills in your neck, allowing you to breathe underwater. Slightly increases wet benefits.", + "category" : ["MUTCAT_FISH", "MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "HEAD", "good" : 1 } + ] },{ "type" : "mutation", "id" : "SCALES", - "name": "Scales", - "points": 6, - "visibility": 10, - "ugliness": 3, - "description": "A set of flexible green scales has grown to cover your body, acting as natural armor. Somewhat reduces wet effects.", - "prereqs": ["SKIN_ROUGH"], - "changes_to": ["THICK_SCALES", "SLEEK_SCALES"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 3 - }, - { - "part": "LEGS", - "ignored": 10 - }, - { - "part": "FEET", - "ignored": 3 - }, - { - "part": "ARMS", - "ignored": 9 - }, - { - "part": "HANDS", - "ignored": 2 - }, - { - "part": "TORSO", - "ignored": 20 - } - ] + "name" : "Scales", + "points" : 6, + "visibility" : 10, + "ugliness" : 3, + "description" : "A set of flexible green scales has grown to cover your body, acting as natural armor. Somewhat reduces wet effects.", + "category" : ["MUTCAT_CHIMERA", "MUTCAT_RAPTOR"], + "prereqs" : ["SKIN_ROUGH"], + "changes_to" : ["THICK_SCALES", "SLEEK_SCALES"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 3 }, + { "part" : "LEGS", "ignored" : 10 }, + { "part" : "FEET", "ignored" : 3 }, + { "part" : "ARMS", "ignored" : 9 }, + { "part" : "HANDS", "ignored" : 2 }, + { "part" : "TORSO", "ignored" : 20 } + ] },{ "type" : "mutation", "id" : "THICK_SCALES", - "name": "Thick Scales", - "points": 6, - "visibility": 10, - "ugliness": 4, - "description": "A set of heavy green scales has grown to cover your body, acting as natural armor. While difficult to penetrate, it also limits your flexibility, resulting in a -2 penalty to Dexterity. Greatly reduces wet effects.", - "prereqs": ["SCALES"], - "cancels": ["SLEEK_SCALES", "FEATHERS"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 5 - }, - { - "part": "LEGS", - "ignored": 16 - }, - { - "part": "FEET", - "ignored": 5 - }, - { - "part": "ARMS", - "ignored": 14 - }, - { - "part": "HANDS", - "ignored": 4 - }, - { - "part": "TORSO", - "ignored": 30 - } - ] + "name" : "Thick Scales", + "points" : 6, + "visibility" : 10, + "ugliness" : 4, + "description" : "A set of heavy green scales has grown to cover your body, acting as natural armor. While difficult to penetrate, it also limits your flexibility, resulting in a -2 penalty to Dexterity. Greatly reduces wet effects.", + "prereqs" : ["SCALES"], + "cancels" : ["SLEEK_SCALES", "FEATHERS"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 5 }, + { "part" : "LEGS", "ignored" : 16 }, + { "part" : "FEET", "ignored" : 5 }, + { "part" : "ARMS", "ignored" : 14 }, + { "part" : "HANDS", "ignored" : 4 }, + { "part" : "TORSO", "ignored" : 30 } + ] },{ "type" : "mutation", "id" : "SLEEK_SCALES", - "name": "Sleek Scales", - "points": 8, - "visibility": 10, - "ugliness": 4, - "description": "A set of very flexible and slick scales has grown to cover your body. These act as weak natural armor, improve your ability to swim, and make you difficult to grab. Mostly reduces wet effects.", - "prereqs": ["SCALES"], - "cancels": ["THICK_SCALES", "FEATHERS"], - "category": ["MUTCAT_FISH"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 7 - }, - { - "part": "LEGS", - "ignored": 21 - }, - { - "part": "FEET", - "ignored": 6 - }, - { - "part": "ARMS", - "ignored": 19 - }, - { - "part": "HANDS", - "ignored": 5 - }, - { - "part": "TORSO", - "ignored": 40 - } - ] + "name" : "Sleek Scales", + "points" : 8, + "visibility" : 10, + "ugliness" : 4, + "description" : "A set of very flexible and slick scales has grown to cover your body. These act as weak natural armor, improve your ability to swim, and make you difficult to grab. Mostly reduces wet effects.", + "prereqs" : ["SCALES"], + "cancels" : ["THICK_SCALES", "FEATHERS"], + "category" : ["MUTCAT_FISH"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 7 }, + { "part" : "LEGS", "ignored" : 21 }, + { "part" : "FEET", "ignored" : 6 }, + { "part" : "ARMS", "ignored" : 19 }, + { "part" : "HANDS", "ignored" : 5 }, + { "part" : "TORSO", "ignored" : 40 } + ] },{ "type" : "mutation", "id" : "LIGHT_BONES", - "name": "Light Bones", - "points": 2, - "description": "Your bones are very light. This enables you to run and attack 10% faster, but also reduces your carrying weight by 20% and makes bashing attacks hurt a little more.", - "changes_to": ["HOLLOW_BONES"] + "name" : "Light Bones", + "points" : 2, + "description" : "Your bones are very light. This enables you to run and attack 10% faster, but also reduces your carrying weight by 20% and makes bashing attacks hurt a little more.", + "changes_to" : ["HOLLOW_BONES"] },{ "type" : "mutation", "id" : "FEATHERS", - "name": "Feathers", - "points": 2, - "visibility": 10, - "ugliness": 3, - "description": "Iridescent feathers have grown to cover your entire body, providing a marginal protection against attacks and minor protection from cold. They also provide a natural waterproofing.", - "prereqs": ["SKIN_ROUGH"], - "cancels": ["THICK_SCALES", "SLEEK_SCALES"], - "category": ["MUTCAT_BIRD"] + "name" : "Feathers", + "points" : 2, + "visibility" : 10, + "ugliness" : 3, + "description" : "Iridescent feathers have grown to cover your entire body, providing a marginal protection against attacks and minor protection from cold. They also provide a natural waterproofing.", + "prereqs" : ["SKIN_ROUGH"], + "cancels" : ["THICK_SCALES", "SLEEK_SCALES"], + "category" : ["MUTCAT_BIRD"] },{ "type" : "mutation", "id" : "LIGHTFUR", - "name": "Lightly Furred", - "points": 1, - "visibility": 6, - "ugliness": 2, - "description": "Light fur has grown to cover your entire body, providing slight protection from cold.", - "prereqs": ["SKIN_ROUGH"], - "cancels": ["SCALES", "FEATHERS", "CHITIN", "PLANTSKIN"], - "changes_to": ["FUR"] + "name" : "Lightly Furred", + "points" : 1, + "visibility" : 6, + "ugliness" : 2, + "description" : "Light fur has grown to cover your entire body, providing slight protection from cold.", + "category" : ["MUTCAT_CHIMERA"], + "prereqs" : ["SKIN_ROUGH"], + "cancels" : ["SCALES", "FEATHERS", "CHITIN", "PLANTSKIN"], + "changes_to" : ["FUR"] },{ "type" : "mutation", "id" : "FUR", - "name": "Furry", - "points": 2, - "visibility": 10, - "ugliness": 3, - "description": "Thick black fur has grown to cover your entire body, providing a marginal protection against attacks, and considerable protection from cold.", - "cancels": ["SCALES", "FEATHERS", "CHITIN", "PLANTSKIN"], - "prereqs": ["LIGHTFUR"], - "category": ["MUTCAT_BEAST", "MUTCAT_CATTLE", "MUTCAT_RAT", "MUTCAT_SPIDER"] + "name" : "Furry", + "points" : 2, + "visibility" : 10, + "ugliness" : 3, + "description" : "Thick black fur has grown to cover your entire body, providing a marginal protection against attacks, and considerable protection from cold.", + "cancels" : ["SCALES", "FEATHERS", "CHITIN", "PLANTSKIN"], + "prereqs" : ["LIGHTFUR"], + "category" : ["MUTCAT_BEAST", "MUTCAT_CATTLE", "MUTCAT_RAT", "MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "CHITIN", - "name": "Chitinous Skin", - "points": 2, - "visibility": 3, - "ugliness": 2, - "description": "Your epidermis has turned into a thin, flexible layer of chitin. It provides minor protection from cutting wounds. Slightly reduces wet effects.", - "prereqs": ["SKIN_ROUGH"], - "cancels": ["SCALES", "FEATHERS", "LIGHTFUR", "PLANTSKIN"], - "changes_to": ["CHITIN2"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 1 - }, - { - "part": "LEGS", - "ignored": 5 - }, - { - "part": "FEET", - "ignored": 1 - }, - { - "part": "ARMS", - "ignored": 4 - }, - { - "part": "HANDS", - "ignored": 1 - }, - { - "part": "TORSO", - "ignored": 10 - } - ] + "name" : "Chitinous Skin", + "points" : 2, + "visibility" : 3, + "ugliness" : 2, + "description" : "Your epidermis has turned into a thin, flexible layer of chitin. It provides minor protection from cutting wounds. Slightly reduces wet effects.", + "prereqs" : ["SKIN_ROUGH"], + "cancels" : ["SCALES", "FEATHERS", "LIGHTFUR", "PLANTSKIN"], + "changes_to" : ["CHITIN2"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 1 }, + { "part" : "LEGS", "ignored" : 5 }, + { "part" : "FEET", "ignored" : 1 }, + { "part" : "ARMS", "ignored" : 4 }, + { "part" : "HANDS", "ignored" : 1 }, + { "part" : "TORSO", "ignored" : 10 } + ] },{ "type" : "mutation", "id" : "CHITIN2", - "name": "Chitinous Armor", - "points": 2, - "visibility": 6, - "ugliness": 3, - "description": "You've grown a chitin exoskeleton, much like that of an insect. It provides considerable physical protection, but reduces your dexterity by 1. Somewhat reduces wet effects.", - "prereqs": ["CHITIN"], - "changes_to": ["CHITIN3"], - "category": ["MUTCAT_INSECT"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 2 - }, - { - "part": "LEGS", - "ignored": 9 - }, - { - "part": "FEET", - "ignored": 2 - }, - { - "part": "ARMS", - "ignored": 8 - }, - { - "part": "HANDS", - "ignored": 2 - }, - { - "part": "TORSO", - "ignored": 18 - } - ] + "name" : "Chitinous Armor", + "points" : 2, + "visibility" : 6, + "ugliness" : 3, + "description" : "You've grown a chitin exoskeleton, much like that of an insect. It provides considerable physical protection, but reduces your dexterity by 1. Somewhat reduces wet effects.", + "prereqs" : ["CHITIN"], + "changes_to" : ["CHITIN3"], + "category" : ["MUTCAT_INSECT"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 2 }, + { "part" : "LEGS", "ignored" : 9 }, + { "part" : "FEET", "ignored" : 2 }, + { "part" : "ARMS", "ignored" : 8 }, + { "part" : "HANDS", "ignored" : 2 }, + { "part" : "TORSO", "ignored" : 18 } + ] },{ "type" : "mutation", "id" : "CHITIN3", - "name": "Chitinous Plate", - "points": 2, - "visibility": 8, - "ugliness": 5, - "description": "You've grown a chitin exoskeleton made of thick, stiff plates. It provides excellent physical protection, but reduces your dexterity by 1 and encumbers all body parts but your eyes and mouth. Greatly reduces wet effects.", - "prereqs": ["CHITIN2"], - "category": ["MUTCAT_SPIDER"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 4 - }, - { - "part": "LEGS", - "ignored": 14 - }, - { - "part": "FEET", - "ignored": 4 - }, - { - "part": "ARMS", - "ignored": 12 - }, - { - "part": "HANDS", - "ignored": 3 - }, - { - "part": "TORSO", - "ignored": 26 - } - ] + "name" : "Chitinous Plate", + "points" : 2, + "visibility" : 8, + "ugliness" : 5, + "description" : "You've grown a chitin exoskeleton made of thick, stiff plates. It provides excellent physical protection, but reduces your dexterity by 1 and encumbers all body parts but your eyes and mouth. Greatly reduces wet effects.", + "prereqs" : ["CHITIN2"], + "category" : ["MUTCAT_SPIDER"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 4 }, + { "part" : "LEGS", "ignored" : 14 }, + { "part" : "FEET", "ignored" : 4 }, + { "part" : "ARMS", "ignored" : 12 }, + { "part" : "HANDS", "ignored" : 3 }, + { "part" : "TORSO", "ignored" : 26 } + ] },{ "type" : "mutation", "id" : "SPINES", - "name": "Spines", - "points": 1, - "description": "Your skin is covered with fine spines. Whenever an unarmed opponent strikes a part of your body that is not covered by clothing, they will receive moderate damage.", - "changes_to": ["QUILLS"] + "name" : "Spines", + "points" : 1, + "description" : "Your skin is covered with fine spines. Whenever an unarmed opponent strikes a part of your body that is not covered by clothing, they will receive moderate damage.", + "changes_to" : ["QUILLS"] },{ "type" : "mutation", "id" : "QUILLS", - "name": "Quills", - "points": 3, - "description": "Your body is covered with large quills. Whenever an unarmed opponent strikes a part of your body that is not covered by clothing, they will receive significant damage.", - "prereqs": ["SPINES"] + "name" : "Quills", + "points" : 3, + "description" : "Your body is covered with large quills. Whenever an unarmed opponent strikes a part of your body that is not covered by clothing, they will receive significant damage.", + "prereqs" : ["SPINES"] },{ "type" : "mutation", "id" : "PLANTSKIN", - "name": "Phelloderm", - "points": 4, - "visibility": 3, - "ugliness": 2, - "description": "Your skin is light green and has a slightly woody quality to it. This provides a weak armor, and helps you retain moisture, resulting in less thirst. Greatly decreases wet penalties.", - "cancels": ["FEATHERS", "LIGHTFUR", "FUR", "CHITIN", "CHITIN2", "CHITIN3", "SCALES"], - "changes_to": ["BARK"], - "leads_to": ["THORNS", "LEAVES"], - "wet_protection":[ - { - "part": "HEAD", - "neutral": 4 - }, - { - "part": "LEGS", - "neutral": 5 - }, - { - "part": "FEET", - "neutral": 1 - }, - { - "part": "ARMS", - "neutral": 4 - }, - { - "part": "HANDS", - "neutral": 1 - }, - { - "part": "TORSO", - "neutral": 10 - } - ] + "name" : "Phelloderm", + "points" : 4, + "visibility" : 3, + "ugliness" : 2, + "description" : "Your skin is light green and has a slightly woody quality to it. This provides a weak armor, and helps you retain moisture, resulting in less thirst. Greatly decreases wet penalties.", + "cancels" : ["FEATHERS", "LIGHTFUR", "FUR", "CHITIN", "CHITIN2", "CHITIN3", "SCALES"], + "changes_to" : ["BARK"], + "leads_to" : ["THORNS", "LEAVES"], + "categories": ["MUTCAT_ELFA"], + "wet_protection" : [ + { "part" : "HEAD", "neutral" : 4 }, + { "part" : "LEGS", "neutral" : 5 }, + { "part" : "FEET", "neutral" : 1 }, + { "part" : "ARMS", "neutral" : 4 }, + { "part" : "HANDS", "neutral" : 1 }, + { "part" : "TORSO", "neutral" : 10 } + ] },{ "type" : "mutation", "id" : "BARK", - "name": "Bark", - "points": 5, - "visibility": 10, - "ugliness": 3, - "description": "Your skin is coated in a light bark, like that of a tree. This provides resistance to bashing and cutting damage and minor protection from fire. Greatly reduces wet effects.", - "prereqs": ["PLANTSKIN"], - "category": ["MUTCAT_PLANT"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 5 - }, - { - "part": "LEGS", - "ignored": 16 - }, - { - "part": "FEET", - "ignored": 5 - }, - { - "part": "ARMS", - "ignored": 14 - }, - { - "part": "HANDS", - "ignored": 4 - }, - { - "part": "TORSO", - "ignored": 30 - } - ] + "name" : "Bark", + "points" : 5, + "visibility" : 10, + "ugliness" : 3, + "description" : "Your skin is coated in a light bark, like that of a tree. This provides resistance to bashing and cutting damage and minor protection from fire. Greatly reduces wet effects.", + "prereqs" : ["PLANTSKIN"], + "category" : ["MUTCAT_PLANT"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 5 }, + { "part" : "LEGS", "ignored" : 16 }, + { "part" : "FEET", "ignored" : 5 }, + { "part" : "ARMS", "ignored" : 14 }, + { "part" : "HANDS", "ignored" : 4 }, + { "part" : "TORSO", "ignored" : 30 } + ] },{ "type" : "mutation", "id" : "THORNS", - "name": "Thorns", - "points": 6, - "visibility": 8, - "ugliness": 4, - "description": "Your skin is covered in small, woody thorns. Whenever an unarmed opponent strikes a part of your body that is not covered by clothing, they will receive minor damage. Your punches may also deal extra damage.", - "prereqs": ["BARK"], - "category": ["MUTCAT_PLANT"] + "name" : "Thorns", + "points" : 6, + "visibility" : 8, + "ugliness" : 4, + "description" : "Your skin is covered in small, woody thorns. Whenever an unarmed opponent strikes a part of your body that is not covered by clothing, they will receive minor damage. Your punches may also deal extra damage.", + "prereqs" : ["BARK"], + "category" : ["MUTCAT_PLANT"] },{ "type" : "mutation", "id" : "LEAVES", - "name": "Leaves", - "points": 6, - "visibility": 8, - "ugliness": 3, - "description": "All the hair on your body has turned to long, grass-like leaves. Apart from being physically striking, these provide you with a minor amount of nutrition while in sunlight. Slightly reduces wet effects.", - "prereqs": ["BARK"], - "category": ["MUTCAT_PLANT"], - "wet_protection":[ - { - "part": "HEAD", - "ignored": 1 - } - ] + "name" : "Leaves", + "points" : 6, + "visibility" : 8, + "ugliness" : 3, + "description" : "All the hair on your body has turned to long, grass-like leaves. Apart from being physically striking, these provide you with a minor amount of nutrition while in sunlight. Slightly reduces wet effects.", + "prereqs" : ["BARK"], + "category" : ["MUTCAT_PLANT", "MUTCAT_ELFA"], + "wet_protection" : [ + { "part" : "HEAD", "ignored" : 1 } + ] },{ "type" : "mutation", "id" : "NAILS", - "name": "Long Fingernails", - "points": 1, - "visibility": 1, - "description": "Your fingernails are long and sharp. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", - "changes_to": ["CLAWS", "TALONS"] + "name" : "Long Fingernails", + "points" : 1, + "visibility" : 1, + "description" : "Your fingernails are long and sharp. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", + "changes_to" : ["CLAWS", "TALONS"] },{ "type" : "mutation", "id" : "CLAWS", - "name": "Claws", - "points": 2, - "visibility": 3, - "ugliness": 2, - "description": "You have claws on the ends of your fingers. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", - "prereqs": ["NAILS"], - "cancels": ["TALONS"], - "category": ["MUTCAT_BEAST", "MUTCAT_RAT"] + "name" : "Claws", + "points" : 2, + "visibility" : 3, + "ugliness" : 2, + "description" : "You have claws on the ends of your fingers. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", + "prereqs" : ["NAILS"], + "cancels" : ["TALONS"], + "category" : ["MUTCAT_BEAST", "MUTCAT_RAT", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "TALONS", - "name": "Large Talons", - "points": 2, - "visibility": 4, - "ugliness": 3, - "description": "Your index fingers have grown into huge talons. After a bit of practice, you find that this does not affect your dexterity, but allows for a deadly unarmed attack. They also prevent you from wearing gloves.", - "prereqs": ["NAILS"], - "cancels": ["CLAWS"], - "category": ["MUTCAT_LIZARD", "MUTCAT_BIRD"] + "name" : "Large Talons", + "points" : 2, + "visibility" : 4, + "ugliness" : 3, + "description" : "Your index fingers have grown into huge talons. After a bit of practice, you find that this does not affect your dexterity, but allows for a deadly unarmed attack. They also prevent you from wearing gloves.", + "prereqs" : ["NAILS"], + "cancels" : ["CLAWS"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_BIRD", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "RADIOGENIC", - "name": "Radiogenic", - "points": 3, - "description": "Your system has adapted to radiation. While irradiated, you will actually heal slowly, converting the radiation into hit points.", - "category": ["MUTCAT_SLIME"] + "name" : "Radiogenic", + "points" : 3, + "description" : "Your system has adapted to radiation. While irradiated, you will actually heal slowly, converting the radiation into hit points.", + "category" : ["MUTCAT_SLIME", "MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "MARLOSS", - "name": "Marloss Carrier", - "points": 4, - "description": "Ever since you ate that Marloss berry, you can't get its scent out of your nose, and you have a strong desire to eat more.", - "valid": false + "name" : "Marloss Carrier", + "points" : 4, + "description" : "Ever since you ate that Marloss berry, you can't get its scent out of your nose, and you have a strong desire to eat more.", + "valid" : false },{ "type" : "mutation", "id" : "PHEROMONE_INSECT", - "name": "Insect Pheromones", - "points": 8, - "description": "Your body produces low-level pheromones, identifying you as a friend to many species of insects. Insects will attack you much less.", - "prereqs": ["SMELLY2"], - "cancels": ["PHEROMONE_MAMMAL"], - "category": ["MUTCAT_INSECT"] + "name" : "Insect Pheromones", + "points" : 8, + "description" : "Your body produces low-level pheromones, identifying you as a friend to many species of insects. Insects will attack you much less.", + "prereqs" : ["SMELLY2"], + "cancels" : ["PHEROMONE_MAMMAL"], + "category" : ["MUTCAT_INSECT"] },{ "type" : "mutation", "id" : "PHEROMONE_MAMMAL", - "name": "Mammal Pheromones", - "points": 8, - "description": "Your body produces low-level pheromones which puts mammals at ease. They will be less likely to attack or flee from you.", - "prereqs": ["SMELLY2"], - "cancels": ["PHEROMONE_INSECT"], - "category": ["MUTCAT_BEAST", "MUTCAT_CATTLE"] + "name" : "Mammal Pheromones", + "points" : 8, + "description" : "Your body produces low-level pheromones which puts mammals at ease. They will be less likely to attack or flee from you.", + "prereqs" : ["SMELLY2"], + "cancels" : ["PHEROMONE_INSECT"], + "category" : ["MUTCAT_BEAST", "MUTCAT_CATTLE"] },{ "type" : "mutation", "id" : "DISIMMUNE", - "name": "Disease Immune", - "points": 6, - "description": "Your body is simply immune to diseases. You will never catch an ambient disease.", - "prereqs": ["DISRESISTANT"], - "category": ["MUTCAT_PLANT", "MUTCAT_SLIME", "MUTCAT_TROGLO"] + "name" : "Disease Immune", + "points" : 6, + "description" : "Your body is simply immune to diseases. You will never catch an ambient disease.", + "prereqs" : ["DISRESISTANT"], + "category" : ["MUTCAT_PLANT", "MUTCAT_SLIME", "MUTCAT_TROGLO"] },{ "type" : "mutation", "id" : "POISONOUS", - "name": "Poisonous", - "points": 8, - "description": "Your body produces a potent venom. Any special attacks from mutations have a chance to poison your target.", - "prereqs": ["POISRESIST"], - "category": ["MUTCAT_SLIME", "MUTCAT_TROGLO", "MUTCAT_SPIDER"] + "name" : "Poisonous", + "points" : 8, + "description" : "Your body produces a potent venom. Any special attacks from mutations have a chance to poison your target.", + "prereqs" : ["POISRESIST"], + "category" : ["MUTCAT_SLIME", "MUTCAT_TROGLO", "MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "SLIME_HANDS", - "name": "Slime Hands", - "points": 4, - "visibility": 5, - "ugliness": 4, - "description": "The skin on your hands is a mucous membrane and produces a thick, acrid slime. Attacks using your hand will cause minor acid damage. Slightly increases wet benefits.", - "prereqs": ["SLIMY"], - "category": ["MUTCAT_SLIME"], - "wet_protection":[ - { - "part": "HANDS", - "good": 5 - } - ] + "name" : "Slime Hands", + "points" : 4, + "visibility" : 5, + "ugliness" : 4, + "description" : "The skin on your hands is a mucous membrane and produces a thick, acrid slime. Attacks using your hand will cause minor acid damage. Slightly increases wet benefits.", + "prereqs" : ["SLIMY"], + "category" : ["MUTCAT_SLIME"], + "wet_protection" : [ + { "part" : "HANDS", "good" : 5 } + ] },{ "type" : "mutation", "id" : "COMPOUND_EYES", - "name": "Compound Eyes", - "points": 2, - "visibility": 9, - "ugliness": 5, - "description": "Your eyes are compound, like those of an insect. This increases your perception by 2 so long as you aren't wearing eyewear.", - "prereqs": ["EYEBULGE"], - "category": ["MUTCAT_SPIDER"] + "name" : "Compound Eyes", + "points" : 2, + "visibility" : 9, + "ugliness" : 5, + "description" : "Your eyes are compound, like those of an insect. This increases your perception by 2 so long as you aren't wearing eyewear.", + "prereqs" : ["EYEBULGE"], + "category" : ["MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "PADDED_FEET", - "name": "Padded Feet", - "points": 1, - "visibility": 1, - "description": "The bottoms of your feet are strongly padded. You receive no movement penalty for not wearing shoes, and even receive a 10% bonus when running barefoot. Slightly decreases wet penalties.", - "cancels": ["HOOVES", "LEG_TENTACLES"], - "category": ["MUTCAT_BEAST"], - "wet_protection":[ - { - "part": "FEET", - "neutral": 2 - } - ] + "name" : "Padded Feet", + "points" : 1, + "visibility" : 1, + "description" : "The bottoms of your feet are strongly padded. You receive no movement penalty for not wearing shoes, and even receive a 10% bonus when running barefoot. Slightly decreases wet penalties.", + "cancels" : ["HOOVES", "LEG_TENTACLES"], + "category" : ["MUTCAT_BEAST"], + "wet_protection" : [ + { "part" : "FEET", "neutral" : 2 } + ] + },{ + "type" : "mutation", + "id" : "RAP_TALONS", + "name" : "Toe Talons", + "points" : -2, + "visibility" : 4, + "ugliness" : 2, + "description" : "You have grown large, curved, and wickedly sharp talons in place of your big toes. Fortunately, they don't get in the way of your walking. Unfortunately, they do prevent you from wearing footgear, which does cause some problems.", + "cancels" : ["PADDED_FEET", "LEG_TENTACLES"], + "category" : ["MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "HOOVES", - "name": "Hooves", - "points": -4, - "visibility": 2, - "ugliness": 2, - "description": "Your feet have fused into hooves. This allows kicking attacks to do much more damage, provides natural armor, and removes the need to wear shoes; however, you can not wear shoes of any kind. Somewhat reduces wet effects.", - "cancels": ["PADDED_FEET", "LEG_TENTACLES"], - "category": ["MUTCAT_CATTLE"], + "name" : "Hooves", + "points" : -4, + "visibility" : 2, + "ugliness" : 2, + "description" : "Your feet have fused into hooves. This allows kicking attacks to do much more damage, provides natural armor, and removes the need to wear shoes; however, you can not wear shoes of any kind. Somewhat reduces wet effects.", + "cancels" : ["PADDED_FEET", "LEG_TENTACLES"], + "category" : ["MUTCAT_CATTLE", "MUTCAT_CHIMERA"], "wet_protection":[ { - "part": "FEET", - "ignored": 6 + "part" : "FEET", + "ignored" : 6 } ] },{ "type" : "mutation", "id" : "SAPROVORE", - "name": "Saprovore", - "points": 4, - "description": "Your digestive system is specialized to allow you to consume decaying material. You can eat rotten food, albeit for less nutrition than usual.", - "prereqs": ["CARNIVORE"], - "cancels": ["HERBIVORE", "RUMINANT"], - "category": ["MUTCAT_TROGLO"] + "name" : "Saprovore", + "points" : 4, + "description" : "Your digestive system is specialized to allow you to consume decaying material. You can eat rotten food, albeit for less nutrition than usual.", + "prereqs" : ["CARNIVORE"], + "cancels" : ["HERBIVORE", "RUMINANT"], + "category" : ["MUTCAT_TROGLO", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "RUMINANT", - "name": "Ruminant", - "points": 5, - "description": "Your digestive system is capable of digesting cellulose and other rough plant material. You can eat underbrush by standing over it and pressing E.", - "prereqs": ["HERBIVORE"], - "cancels": ["CARNIVORE", "SAPROVORE"], - "category": ["MUTCAT_CATTLE"] + "name" : "Ruminant", + "points" : 5, + "description" : "Your digestive system is capable of digesting cellulose and other rough plant material. You can eat underbrush by standing over it and pressing E.", + "prereqs" : ["HERBIVORE"], + "cancels" : ["CARNIVORE", "SAPROVORE"], + "category" : ["MUTCAT_CATTLE"] },{ "type" : "mutation", "id" : "HORNS", - "name": "Horns", - "points": 2, - "visibility": 3, - "ugliness": 1, - "description": "You have a pair of small horns on your head. They allow you to make a weak piercing headbutt attack.", - "prereqs": ["HEADBUMPS"], - "cancels": ["ANTENNAE"], - "changes_to": ["HORNS_CURLED", "HORNS_POINTED", "ANTLERS"], - "category": ["MUTCAT_CATTLE"] + "name" : "Horns", + "points" : 2, + "visibility" : 3, + "ugliness" : 1, + "description" : "You have a pair of small horns on your head. They allow you to make a weak piercing headbutt attack.", + "prereqs" : ["HEADBUMPS"], + "cancels" : ["ANTENNAE"], + "changes_to" : ["HORNS_CURLED", "HORNS_POINTED", "ANTLERS"], + "category" : ["MUTCAT_CATTLE"] },{ "type" : "mutation", "id" : "HORNS_CURLED", - "name": "Curled Horns", - "points": 1, - "visibility": 8, - "ugliness": 2, - "description": "You have a pair of large curled horns, like those of a ram. They allow you to make a strong bashing headbutt attack, but prevent you from wearing any headwear.", - "prereqs": ["HORNS"], - "cancels": ["ANTENNAE", "HORNS_POINTED", "ANTLERS"] + "name" : "Curled Horns", + "points" : 1, + "visibility" : 8, + "ugliness" : 2, + "description" : "You have a pair of large curled horns, like those of a ram. They allow you to make a strong bashing headbutt attack, but prevent you from wearing any headwear.", + "prereqs" : ["HORNS"], + "cancels" : ["ANTENNAE", "HORNS_POINTED", "ANTLERS"], + "category" : ["MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "HORNS_POINTED", - "name": "Pointed Horns", - "points": 2, - "visibility": 8, - "ugliness": 2, - "description": "You have a pair of long, pointed horns, like those of an antelope. They allow you to make a strong piercing headbutt attack, but prevent you from wearing any headwear the is not made of fabric.", - "prereqs": ["HORNS"], - "cancels": ["ANTENNAE", "HORNS_CURLED", "ANTLERS"] + "name" : "Pointed Horns", + "points" : 2, + "visibility" : 8, + "ugliness" : 2, + "description" : "You have a pair of long, pointed horns, like those of an antelope. They allow you to make a strong piercing headbutt attack, but prevent you from wearing any headwear the is not made of fabric.", + "prereqs" : ["HORNS"], + "cancels" : ["ANTENNAE", "HORNS_CURLED", "ANTLERS"] },{ "type" : "mutation", "id" : "ANTLERS", - "name": "Antlers", - "points": -2, - "visibility": 10, - "ugliness": 3, - "description": "You have a huge rack of antlers, like those of a moose. They prevent you from hearing headwear that is not made of fabric, but provide a weak headbutt attack.", - "prereqs": ["HORNS"], - "cancels": ["ANTENNAE", "HORNS_CURLED", "HORNS_POINTED"] + "name" : "Antlers", + "points" : -2, + "visibility" : 10, + "ugliness" : 3, + "description" : "You have a huge rack of antlers, like those of a moose. They prevent you from hearing headwear that is not made of fabric, but provide a weak headbutt attack.", + "prereqs" : ["HORNS"], + "cancels" : ["ANTENNAE", "HORNS_CURLED", "HORNS_POINTED"] },{ "type" : "mutation", "id" : "ANTENNAE", - "name": "Antennae", - "points": 1, - "visibility": 9, - "ugliness": 4, - "description": "You have a pair of antennae. They allow you to detect the presence of monsters up to a few tiles away, even if you can't see or hear them, but prevent you from wearing headwear that is not made of fabric.", - "prereqs": ["HEADBUMPS"], - "cancels": ["HORNS", "HORNS_CURLED", "HORNS_POINTED", "ANTLERS"], - "category": ["MUTCAT_INSECT"] + "name" : "Antennae", + "points" : 1, + "visibility" : 9, + "ugliness" : 4, + "description" : "You have a pair of antennae. They allow you to detect the presence of monsters up to a few tiles away, even if you can't see or hear them, but prevent you from wearing headwear that is not made of fabric.", + "prereqs" : ["HEADBUMPS"], + "cancels" : ["HORNS", "HORNS_CURLED", "HORNS_POINTED", "ANTLERS"], + "category" : ["MUTCAT_INSECT"] },{ "type" : "mutation", "id" : "FLEET2", - "name": "Road-Runner", - "points": 4, - "description": "Your legs are extremely limber and fast-moving. You run 30% faster on flat surfaces.", - "prereqs": ["FLEET"], - "cancels": ["PONDEROUS1", "PONDEROUS2", "PONDEROUS3"], - "category": ["MUTCAT_BIRD"] + "name" : "Road-Runner", + "points" : 4, + "description" : "Your legs are extremely limber and fast-moving. You run 30% faster on flat surfaces.", + "prereqs" : ["FLEET"], + "cancels" : ["PONDEROUS1", "PONDEROUS2", "PONDEROUS3"], + "category" : ["MUTCAT_BIRD"] },{ "type" : "mutation", "id" : "TAIL_STUB", - "name": "Stubby Tail", - "points": 0, - "visibility": 1, - "ugliness": 2, - "description": "You have a short, stubby tail, like a rabbit's. It serves no purpose.", - "changes_to": ["TAIL_LONG", "TAIL_FIN"] + "name" : "Stubby Tail", + "points" : 0, + "visibility" : 1, + "ugliness" : 2, + "description" : "You have a short, stubby tail, like a rabbit's. It serves no purpose.", + "changes_to" : ["TAIL_LONG", "TAIL_LIZARD", "TAIL_FIN"] },{ "type" : "mutation", "id" : "TAIL_FIN", - "name": "Tail Fin", - "points": 1, - "visibility": 4, - "ugliness": 2, - "description": "You have a fin-like tail. It allows you to swim more quickly. Slightly increases wet benefits.", - "prereqs": ["TAIL_STUB"], - "cancels": ["TAIL_LONG", "TAIL_FLUFFY", "TAIL_STING", "TAIL_CLUB"], - "category": ["MUTCAT_FISH"], + "name" : "Tail Fin", + "points" : 1, + "visibility" : 4, + "ugliness" : 2, + "description" : "You have a fin-like tail. It allows you to swim more quickly. Slightly increases wet benefits.", + "prereqs" : ["TAIL_STUB"], + "cancels" : ["TAIL_LONG", "TAIL_FLUFFY", "TAIL_LIZARD", "TAIL_STING", "TAIL_CLUB"], + "category" : ["MUTCAT_FISH"], "wet_protection":[ { - "part": "LEGS", - "good": 3 + "part" : "LEGS", + "good" : 3 } ] },{ "type" : "mutation", "id" : "TAIL_LONG", - "name": "Long Tail", - "points": 2, - "visibility": 6, - "ugliness": 2, - "description": "You have a long, graceful tail, like that of a big cat. It improves your balance, making your ability to dodge higher.", - "prereqs": ["TAIL_STUB"], - "cancels": ["TAIL_FIN"], - "changes_to": ["TAIL_FLUFFY", "TAIL_STING", "TAIL_CLUB"], - "category": ["MUTCAT_CATTLE", "MUTCAT_RAT"] + "name" : "Long Tail", + "points" : 2, + "visibility" : 6, + "ugliness" : 2, + "description" : "You have a long, graceful tail, like that of a big cat. It improves your balance, making your ability to dodge higher.", + "prereqs" : ["TAIL_STUB"], + "cancels" : ["TAIL_FIN"], + "changes_to" : ["TAIL_FLUFFY", "TAIL_STING", "TAIL_CLUB"], + "category" : ["MUTCAT_CATTLE", "MUTCAT_RAT"] + },{ + "type" : "mutation", + "id" : "TAIL_THICK", + "name" : "Thick Tail", + "points" : 3, + "visibility" : 8, + "ugliness" : 2, + "description" : "You have a long, thick, lizardlike tail. It helps you balance a bit but also makes a serviceable whip.", + "prereqs" : ["TAIL_STUB"], + "cancels" : ["TAIL_FIN", "TAIL_FLUFFY", "TAIL_STING"], + "changes_to" : ["TAIL_CLUB"], + "category" : ["MUTCAT_LIZARD"] + },{ + "type" : "mutation", + "id" : "TAIL_RAPTOR", + "name" : "Raptor Tail", + "points" : 3, + "visibility" : 8, + "ugliness" : 2, + "description" : "You have a long and semi-stiff lizardlike tail. You can't effectively lash it in combat, but do find it significantly improves your balance.", + "prereqs" : ["TAIL_STUB"], + "cancels" : ["TAIL_FIN", "TAIL_FLUFFY", "TAIL_STING", "TAIL_CLUB"], + "category" : ["MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "TAIL_FLUFFY", - "name": "Fluffy Tail", - "points": 2, - "visibility": 7, - "description": "You have a long, fluffy-furred tail. It greatly improves your balance, making your ability to dodge much higher.", - "prereqs": ["TAIL_LONG"], - "cancels": ["TAIL_STING", "TAIL_CLUB", "TAIL_FIN"], - "category": ["MUTCAT_BEAST"] + "name" : "Fluffy Tail", + "points" : 2, + "visibility" : 7, + "description" : "You have a long, fluffy-furred tail. It greatly improves your balance, making your ability to dodge much higher.", + "prereqs" : ["TAIL_LONG"], + "cancels" : ["TAIL_STING", "TAIL_CLUB", "TAIL_FIN", "TAIL_LIZARD"], + "category" : ["MUTCAT_BEAST"] },{ "type" : "mutation", "id" : "TAIL_STING", - "name": "Spiked Tail", - "points": 2, - "visibility": 6, - "ugliness": 3, - "description": "You have a long tail that ends in a vicious stinger, like that of a scorpion. It does not improve your balance at all, but allows for a powerful piercing attack.", - "prereqs": ["TAIL_LONG"], - "cancels": ["TAIL_FLUFFY", "TAIL_CLUB", "TAIL_FIN"], - "category": ["MUTCAT_INSECT"] + "name" : "Spiked Tail", + "points" : 2, + "visibility" : 6, + "ugliness" : 3, + "description" : "You have a long tail that ends in a vicious stinger, like that of a scorpion. It does not improve your balance at all, but allows for a powerful piercing attack.", + "prereqs" : ["TAIL_LONG"], + "cancels" : ["TAIL_FLUFFY", "TAIL_CLUB", "TAIL_FIN", "TAIL_LIZARD"], + "category" : ["MUTCAT_INSECT"] },{ "type" : "mutation", "id" : "TAIL_CLUB", - "name": "Club Tail", - "points": 2, - "visibility": 7, - "ugliness": 2, - "description": "You have a long tail that ends in a heavy, bony club. It does not improve your balance at all, but allows for a powerful bashing attack.", - "prereqs": ["TAIL_LONG"], - "cancels": ["TAIL_FLUFFY", "TAIL_STING", "TAIL_FIN"] + "name" : "Club Tail", + "points" : 2, + "visibility" : 7, + "ugliness" : 2, + "description" : "You have a long tail that ends in a heavy, bony club. It does not improve your balance at all, but allows for a powerful bashing attack.", + "prereqs" : ["TAIL_LIZARD"], + "cancels" : ["TAIL_FLUFFY", "TAIL_STING", "TAIL_FIN"], + "category" : ["MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "PAINREC1", - "name": "Pain Recovery", - "points": 3, - "description": "You recover from pain slightly faster than normal.", - "changes_to": ["PAINREC2"] + "name" : "Pain Recovery", + "points" : 3, + "description" : "You recover from pain slightly faster than normal.", + "changes_to" : ["PAINREC2"] },{ "type" : "mutation", "id" : "PAINREC2", - "name": "Quick Pain Recovery", - "points": 5, - "description": "You recover from pain faster than normal.", - "prereqs": ["PAINREC1"], - "changes_to": ["PAINREC3"] + "name" : "Quick Pain Recovery", + "points" : 5, + "description" : "You recover from pain faster than normal.", + "prereqs" : ["PAINREC1"], + "changes_to" : ["PAINREC3"] },{ "type" : "mutation", "id" : "PAINREC3", - "name": "Very Quick Pain Recovery", - "points": 8, - "description": "You recover from pain much faster than normal.", - "prereqs": ["PAINREC2"] + "name" : "Very Quick Pain Recovery", + "points" : 8, + "description" : "You recover from pain much faster than normal.", + "prereqs" : ["PAINREC2"], + "category" : ["MUTCAT_MEDICAL"] },{ "type" : "mutation", "id" : "WINGS_BIRD", - "name": "Bird Wings", - "points": 2, - "visibility": 4, - "ugliness": 2, - "description": "You have a pair of large, feathered wings. Your body is too heavy to be able to fly, but you can use them to slow your descent during a fall, and will not take falling damage under any circumstances.", - "prereqs": ["WINGS_STUB"], - "cancels": ["WINGS_BAT", "WINGS_INSECT"], - "category": ["MUTCAT_BIRD"] + "name" : "Bird Wings", + "points" : 2, + "visibility" : 4, + "ugliness" : 2, + "description" : "You have a pair of large, feathered wings. Your body is too heavy to be able to fly, but you can use them to slow your descent during a fall, and will not take falling damage under any circumstances.", + "prereqs" : ["WINGS_STUB"], + "cancels" : ["WINGS_BAT", "WINGS_INSECT"], + "category" : ["MUTCAT_BIRD"] },{ "type" : "mutation", "id" : "WINGS_INSECT", - "name": "Insect Wings", - "points": 3, - "visibility": 4, - "ugliness": 4, - "description": "You have a pair of large, translucent wings. You buzz them as you run, enabling you to run faster.", - "prereqs": ["WINGS_STUB"], - "cancels": ["WINGS_BIRD", "WINGS_BAT"], - "category": ["MUTCAT_INSECT"] + "name" : "Insect Wings", + "points" : 3, + "visibility" : 4, + "ugliness" : 4, + "description" : "You have a pair of large, translucent wings. You buzz them as you run, enabling you to run faster.", + "prereqs" : ["WINGS_STUB"], + "cancels" : ["WINGS_BIRD", "WINGS_BAT"], + "category" : ["MUTCAT_INSECT"] },{ "type" : "mutation", "id" : "MOUTH_TENTACLES", - "name": "Mouth Tentacles", - "points": 1, - "visibility": 8, - "ugliness": 5, - "description": "A set of tentacles surrounds your mouth. They allow you to eat twice as fast. Slightly decreases wet penalties.", - "prereqs": ["MOUTH_FLAPS"], - "cancels": ["MANDIBLES"], - "category": ["MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "MOUTH", - "neutral": 1 - } - ] + "name" : "Mouth Tentacles", + "points" : 1, + "visibility" : 8, + "ugliness" : 5, + "description" : "A set of tentacles surrounds your mouth. They allow you to eat twice as fast. Slightly decreases wet penalties.", + "prereqs" : ["MOUTH_FLAPS"], + "cancels" : ["MANDIBLES"], + "category" : ["MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "MOUTH", "neutral" : 1 } + ] },{ "type" : "mutation", "id" : "MANDIBLES", - "name": "Mandibles", - "points": 2, - "visibility": 8, - "ugliness": 6, - "description": "A set of insect-like mandibles have grown around your mouth. They allow you to eat faster and provide a slicing unarmed attack, but prevent you from wearing mouthwear. Slightly reduces wet effects.", - "prereqs": ["MOUTH_FLAPS"], - "cancels": ["BEAK", "FANGS", "MOUTH_TENTACLES"], - "category": ["MUTCAT_INSECT", "MUTCAT_SPIDER"], - "wet_protection":[ - { - "part": "MOUTH", - "ignored": 1 - } - ] + "name" : "Mandibles", + "points" : 2, + "visibility" : 8, + "ugliness" : 6, + "description" : "A set of insect-like mandibles have grown around your mouth. They allow you to eat faster and provide a slicing unarmed attack, but prevent you from wearing mouthwear. Slightly reduces wet effects.", + "prereqs" : ["MOUTH_FLAPS"], + "cancels" : ["BEAK", "FANGS", "MOUTH_TENTACLES"], + "category" : ["MUTCAT_INSECT", "MUTCAT_SPIDER"], + "wet_protection" : [ + { "part" : "MOUTH", "ignored" : 1 } + ] },{ "type" : "mutation", "id" : "CANINE_EARS", - "name": "Canine Ears", - "points": 2, - "visibility": 4, - "ugliness": 1, - "description": "Your ears have extended into long, pointed ones, like those of a canine. They enhance your hearing, allowing you to hear at greater distances.", - "category": ["MUTCAT_BEAST", "MUTCAT_CATTLE"] + "name" : "Canine Ears", + "points" : 2, + "visibility" : 4, + "ugliness" : 1, + "description" : "Your ears have extended into long, pointed ones, like those of a canine. They enhance your hearing, allowing you to hear at greater distances.", + "category" : ["MUTCAT_BEAST", "MUTCAT_CATTLE", "MUTCAT_CHIMERA"] + },{ + "type" : "mutation", + "id" : "ELFA_EARS", + "name" : "Pointed Ears", + "points" : 0, + "visibility" : 4, + "ugliness" : 1, + "description" : "Your upper earlobes have grown noticably higher. Fortunately, they don't get in the way of your headgear, much. Unfortunately, they also don't seem to help your hearing any.", + "valid" : false, + "category" : ["MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "WEB_WALKER", - "name": "Web Walker", - "points": 3, - "description": "Your body excretes very fine amounts of a chemical which prevents you from sticking to webs. Walking through webs does not affect you at all.", - "leads_to": ["WEB_WEAVER"] + "name" : "Web Walker", + "points" : 3, + "description" : "Your body excretes very fine amounts of a chemical which prevents you from sticking to webs. Walking through webs does not affect you at all.", + "leads_to" : ["WEB_WEAVER"] },{ "type" : "mutation", "id" : "WEB_WEAVER", - "name": "Web Weaver", - "points": 3, - "description": "Your body produces webs. As you move, there is a chance that you will leave webs in your wake.", - "prereqs": ["WEB_WALKER"], - "cancels": ["SLIMY"], - "category": ["MUTCAT_SPIDER"] + "name" : "Web Weaver", + "points" : 3, + "description" : "Your body produces webs. As you move, there is a chance that you will leave webs in your wake.", + "prereqs" : ["WEB_WALKER"], + "cancels" : ["SLIMY"], + "category" : ["MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "WHISKERS", - "name": "Whiskers", - "points": 1, - "visibility": 3, - "ugliness": 1, - "description": "You have a set of prominent rodent-like whiskers around your mouth. These make you more aware of vibrations in the air, and improve your ability to dodge very slightly.", - "category": ["MUTCAT_RAT"] + "name" : "Whiskers", + "points" : 1, + "visibility" : 3, + "ugliness" : 1, + "description" : "You have a set of prominent rodent-like whiskers around your mouth. These make you more aware of vibrations in the air, and improve your ability to dodge very slightly.", + "category" : ["MUTCAT_RAT"] },{ "type" : "mutation", "id" : "STR_UP", - "name": "Strong", - "points": 1, - "description": "Your muscles are a little stronger. Strength + 1", - "changes_to": ["STR_UP_2"], - "category": ["MUTCAT_INSECT"] + "name" : "Strong", + "points" : 1, + "description" : "Your muscles are a little stronger. Strength + 1", + "changes_to" : ["STR_UP_2"], + "category" : ["MUTCAT_INSECT", "MUTCAT_ELFA", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "STR_UP_2", - "name": "Very Strong", - "points": 2, - "description": "Your muscles are stronger. Strength + 2", - "prereqs": ["STR_UP"], - "changes_to": ["STR_UP_3"], - "category": ["MUTCAT_LIZARD", "MUTCAT_CATTLE", "MUTCAT_PLANT"] + "name" : "Very Strong", + "points" : 2, + "description" : "Your muscles are stronger. Strength + 2", + "prereqs" : ["STR_UP"], + "changes_to" : ["STR_UP_3"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_CATTLE", "MUTCAT_PLANT", "MUTCAT_ALPHA"] },{ "type" : "mutation", "id" : "STR_UP_3", - "name": "Extremely Strong", - "points": 4, - "visibility": 1, - "description": "Your muscles are much stronger. Strength + 4", - "prereqs": ["STR_UP_2"], - "changes_to": ["STR_UP_4"] + "name" : "Extremely Strong", + "points" : 4, + "visibility" : 1, + "description" : "Your muscles are much stronger. Strength + 4", + "prereqs" : ["STR_UP_2"], + "changes_to" : ["STR_UP_4"], + "category" : ["MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "STR_UP_4", - "name": "Insanely Strong", - "points": 7, - "visibility": 2, - "ugliness": 2, - "description": "Your muscles are noticeably bulging. Strength + 7", - "prereqs": ["STR_UP_3"], - "category": ["MUTCAT_BEAST"] + "name" : "Insanely Strong", + "points" : 7, + "visibility" : 2, + "ugliness" : 2, + "description" : "Your muscles are noticeably bulging. Strength + 7", + "prereqs" : ["STR_UP_3"], + "category" : ["MUTCAT_BEAST"] },{ "type" : "mutation", "id" : "DEX_UP", - "name": "Dextrous", - "points": 1, - "description": "You are a little nimbler. Dexterity + 1", - "changes_to": ["DEX_UP_2"], - "category": ["MUTCAT_INSECT", "MUTCAT_SLIME"] + "name" : "Dextrous", + "points" : 1, + "description" : "You are a little nimbler. Dexterity + 1", + "changes_to" : ["DEX_UP_2"], + "category" : ["MUTCAT_INSECT", "MUTCAT_SLIME", "MUTCAT_ALPHA"] },{ "type" : "mutation", "id" : "DEX_UP_2", - "name": "Very Dextrous", - "points": 2, - "description": "You are nimbler. Dexterity + 2", - "prereqs": ["DEX_UP"], - "changes_to": ["DEX_UP_3"], - "category": ["MUTCAT_LIZARD", "MUTCAT_SPIDER"] + "name" : "Very Dextrous", + "points" : 2, + "description" : "You are nimbler. Dexterity + 2", + "prereqs" : ["DEX_UP"], + "changes_to" : ["DEX_UP_3"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_SPIDER", "MUTCAT_CHIMERA", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "DEX_UP_3", - "name": "Extremely Dextrous", - "points": 3, - "description": "You are nimble and quick. Dexterity + 4", - "prereqs": ["DEX_UP_2"], - "changes_to": ["DEX_UP_4"], - "category": ["MUTCAT_BIRD"] + "name" : "Extremely Dextrous", + "points" : 3, + "description" : "You are nimble and quick. Dexterity + 4", + "prereqs" : ["DEX_UP_2"], + "changes_to" : ["DEX_UP_4"], + "category" : ["MUTCAT_BIRD", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "DEX_UP_4", - "name": "Insanely Dextrous", - "points": 4, - "description": "You are much nimbler than before. Dexterity + 7", - "prereqs": ["DEX_UP_3"], - "category": ["MUTCAT_CEPHALOPOD"] + "name" : "Insanely Dextrous", + "points" : 4, + "description" : "You are much nimbler than before. Dexterity + 7", + "prereqs" : ["DEX_UP_3"], + "category" : ["MUTCAT_CEPHALOPOD"] },{ "type" : "mutation", "id" : "INT_UP", - "name": "Smart", - "points": 1, - "description": "You are a little smarter. Intelligence + 1", - "changes_to": ["INT_UP_2"], - "category": ["MUTCAT_SLIME"] + "name" : "Smart", + "points" : 1, + "description" : "You are a little smarter. Intelligence + 1", + "changes_to" : ["INT_UP_2"], + "category" : ["MUTCAT_SLIME", "MUTCAT_ALPHA"] },{ "type" : "mutation", "id" : "INT_UP_2", - "name": "Very Smart", - "points": 2, - "ugliness": 0,"description": "You are smarter. Intelligence + 2", - "prereqs": ["INT_UP"], - "changes_to": ["INT_UP_3"] + "name" : "Very Smart", + "points" : 2, + "ugliness" : 0,"description" : "You are smarter. Intelligence + 2", + "prereqs" : ["INT_UP"], + "changes_to" : ["INT_UP_3"] },{ "type" : "mutation", "id" : "INT_UP_3", - "name": "Extremely Smart", - "points": 3, - "visibility": 1, - "ugliness": 1, - "description": "You are much smarter, and your skull bulges slightly. Intelligence + 4", - "prereqs": ["INT_UP_2"], - "changes_to": ["INT_UP_4"] + "name" : "Extremely Smart", + "points" : 3, + "visibility" : 1, + "ugliness" : 1, + "description" : "You are much smarter, and your skull bulges slightly. Intelligence + 4", + "prereqs" : ["INT_UP_2"], + "changes_to" : ["INT_UP_4"], + "category" : ["MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "INT_UP_4", - "name": "Insanely Smart", - "points": 4, - "visibility": 3, - "ugliness": 3, - "description": "Your skull bulges noticeably with your impressive brain. Intelligence + 7", - "prereqs": ["INT_UP_3"], - "category": ["MUTCAT_CEPHALOPOD"] + "name" : "Insanely Smart", + "points" : 4, + "visibility" : 3, + "ugliness" : 3, + "description" : "Your skull bulges noticeably with your impressive brain. Intelligence + 7", + "prereqs" : ["INT_UP_3"], + "category" : ["MUTCAT_CEPHALOPOD"] },{ "type" : "mutation", "id" : "PER_UP", - "name": "Perceptive", - "points": 1, - "description": "Your senses are a little keener. Perception + 1", - "changes_to": ["PER_UP_2"] + "name" : "Perceptive", + "points" : 1, + "description" : "Your senses are a little keener. Perception + 1", + "changes_to" : ["PER_UP_2"] },{ "type" : "mutation", "id" : "PER_UP_2", - "name": "Very Perceptive", - "points": 2, - "description": "Your senses are keener. Perception + 2", - "prereqs": ["PER_UP"], - "changes_to": ["PER_UP_3"] + "name" : "Very Perceptive", + "points" : 2, + "description" : "Your senses are keener. Perception + 2", + "prereqs" : ["PER_UP"], + "changes_to" : ["PER_UP_3"], + "category" : ["MUTCAT_ALPHA", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "PER_UP_3", - "name": "Extremely Perceptive", - "points": 3, - "description": "Your senses are much keener. Perception + 4", - "prereqs": ["PER_UP_2"], - "changes_to": ["PER_UP_4"] + "name" : "Extremely Perceptive", + "points" : 3, + "description" : "Your senses are much keener. Perception + 4", + "prereqs" : ["PER_UP_2"], + "changes_to" : ["PER_UP_4"], + "category" : ["MUTCAT_ELFA", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "PER_UP_4", - "name": "Insanely Perceptive", - "points": 4, - "description": "You can sense things you never imagined. Perception + 7", - "prereqs": ["PER_UP_3"], - "category": ["MUTCAT_BIRD"] + "name" : "Insanely Perceptive", + "points" : 4, + "description" : "You can sense things you never imagined. Perception + 7", + "prereqs" : ["PER_UP_3"], + "category" : ["MUTCAT_BIRD"] },{ "type" : "mutation", "id" : "HEADBUMPS", - "name": "Head Bumps", - "points": 0, - "visibility": 3, - "ugliness": 3, - "description": "You have a pair of bumps on your skull.", - "changes_to": ["HORNS", "ANTENNAE"] + "name" : "Head Bumps", + "points" : 0, + "visibility" : 3, + "ugliness" : 3, + "description" : "You have a pair of bumps on your skull.", + "changes_to" : ["HORNS", "ANTENNAE"] },{ "type" : "mutation", "id" : "SLIT_NOSTRILS", - "name": "Slit Nostrils", - "points": -2, - "visibility": 7, - "ugliness": 4, - "description": "You have a flattened nose and thin slits for nostrils, giving you a lizard-like appearance. This makes breathing slightly difficult and increases mouth encumbrance by 1.", - "category": ["MUTCAT_LIZARD", "MUTCAT_TROGLO", "MUTCAT_CEPHALOPOD"] + "name" : "Slit Nostrils", + "points" : -2, + "visibility" : 7, + "ugliness" : 4, + "description" : "You have a flattened nose and thin slits for nostrils, giving you a lizard-like appearance. This makes breathing slightly difficult and increases mouth encumbrance by 1.", + "category" : ["MUTCAT_LIZARD", "MUTCAT_TROGLO", "MUTCAT_CEPHALOPOD", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "FORKED_TONGUE", - "name": "Forked Tongue", - "points": 0, - "visibility": 1, - "ugliness": 3, - "description": "Your tongue is forked, like that of a reptile. This has no effect.", - "category": ["MUTCAT_LIZARD"] + "name" : "Forked Tongue", + "points" : 0, + "visibility" : 1, + "ugliness" : 3, + "description" : "Your tongue is forked, like that of a reptile. This has no effect.", + "category" : ["MUTCAT_LIZARD", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "EYEBULGE", - "name": "Bulging Eyes", - "points": 0, - "visibility": 8, - "ugliness": 4, - "description": "Your eyes bulge out several inches from your skull. This does not affect your vision in any way.", - "leads_to": ["MEMBRANE"], - "changes_to": ["COMPOUND_EYES"] + "name" : "Bulging Eyes", + "points" : 0, + "visibility" : 8, + "ugliness" : 4, + "description" : "Your eyes bulge out several inches from your skull. This does not affect your vision in any way.", + "leads_to" : ["MEMBRANE"], + "changes_to" : ["COMPOUND_EYES"] },{ "type" : "mutation", "id" : "MOUTH_FLAPS", - "name": "Mouth Flaps", - "points": -1, - "visibility": 7, - "ugliness": 6, - "description": "Skin tabs and odd flaps of skin surround your mouth. They don't affect your eating, but are unpleasant to look at.", - "leads_to": ["MOUTH_TENTACLES", "MANDIBLES"] + "name" : "Mouth Flaps", + "points" : -1, + "visibility" : 7, + "ugliness" : 6, + "description" : "Skin tabs and odd flaps of skin surround your mouth. They don't affect your eating, but are unpleasant to look at.", + "category" : ["MUTCAT_CHIMERA"], + "leads_to" : ["MOUTH_TENTACLES", "MANDIBLES"] },{ "type" : "mutation", "id" : "WINGS_STUB", - "name": "Wing Stubs", - "points": 0, - "visibility": 2, - "ugliness": 2, - "description": "You have a pair of stubby little wings projecting from your shoulderblades. They can be wiggled at will, but are useless.", - "changes_to": ["WINGS_BIRD", "WINGS_BAT", "WINGS_INSECT"] + "name" : "Wing Stubs", + "points" : 0, + "visibility" : 2, + "ugliness" : 2, + "description" : "You have a pair of stubby little wings projecting from your shoulderblades. They can be wiggled at will, but are useless.", + "changes_to" : ["WINGS_BIRD", "WINGS_BAT", "WINGS_INSECT"] },{ "type" : "mutation", "id" : "WINGS_BAT", - "name": "Bat Wings", - "points": -1, - "visibility": 9, - "ugliness": 4, - "description": "You have a pair of large, leathery wings. You can move them a little, but they are useless, and in fact put you off balance, reducing your ability to dodge slightly.", - "prereqs": ["WINGS_STUB"], - "cancels": ["WINGS_BIRD", "WINGS_INSECT"] + "name" : "Bat Wings", + "points" : -1, + "visibility" : 9, + "ugliness" : 4, + "description" : "You have a pair of large, leathery wings. You can move them a little, but they are useless, and in fact put you off balance, reducing your ability to dodge slightly.", + "prereqs" : ["WINGS_STUB"], + "cancels" : ["WINGS_BIRD", "WINGS_INSECT"] },{ "type" : "mutation", "id" : "PALE", - "name": "Pale Skin", - "points": 0, - "visibility": 3, - "ugliness": 1, - "description": "Your skin is rather pale.", - "changes_to": ["ALBINO"], - "leads_to": ["TROGLO"] + "name" : "Pale Skin", + "points" : 0, + "visibility" : 3, + "ugliness" : 1, + "description" : "Your skin is rather pale.", + "changes_to" : ["ALBINO"], + "leads_to" : ["TROGLO"] },{ "type" : "mutation", "id" : "SPOTS", - "name": "Spots", - "points": 0, - "visibility": 6, - "ugliness": 2, - "description": "Your skin is covered in a pattern of red spots.", - "changes_to": ["SORES"] + "name" : "Spots", + "points" : 0, + "visibility" : 6, + "ugliness" : 2, + "description" : "Your skin is covered in a pattern of red spots.", + "changes_to" : ["SORES"] },{ "type" : "mutation", "id" : "SMELLY2", - "name": "Very Smelly", - "points": -4, - "visibility": 4, - "ugliness": 5, - "description": "You smell awful. Monsters that track scent will find you very easily, and humans will react poorly.", - "prereqs": ["SMELLY"], - "leads_to": ["PHEROMONE_INSECT", "PHEROMONE_MAMMAL"], - "category": ["MUTCAT_FISH", "MUTCAT_BEAST", "MUTCAT_SLIME"] + "name" : "Very Smelly", + "points" : -4, + "visibility" : 4, + "ugliness" : 5, + "description" : "You smell awful. Monsters that track scent will find you very easily, and humans will react poorly.", + "prereqs" : ["SMELLY"], + "leads_to" : ["PHEROMONE_INSECT", "PHEROMONE_MAMMAL"], + "category" : ["MUTCAT_FISH", "MUTCAT_BEAST", "MUTCAT_SLIME", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "DEFORMED", - "name": "Deformed", - "points": -2, - "visibility": 4, - "ugliness": 4, - "description": "You're minorly deformed. Some people will react badly to your appearance.", - "cancels": ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], - "prereqs": ["UGLY"], - "changes_to": ["DEFORMED2"], - "category": ["MUTCAT_FISH", "MUTCAT_CATTLE", "MUTCAT_INSECT", "MUTCAT_CEPHALOPOD"] + "name" : "Deformed", + "points" : -2, + "visibility" : 4, + "ugliness" : 4, + "description" : "You're minorly deformed. Some people will react badly to your appearance.", + "cancels" : ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], + "prereqs" : ["UGLY"], + "changes_to" : ["DEFORMED2"], + "category" : ["MUTCAT_FISH", "MUTCAT_CATTLE", "MUTCAT_INSECT", "MUTCAT_CEPHALOPOD"] },{ "type" : "mutation", "id" : "DEFORMED2", - "name": "Badly Deformed", - "points": -4, - "visibility": 7, - "ugliness": 7, - "description": "You're hideously deformed. Some people will have a strong negative reaction to your appearance.", - "cancels": ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], - "prereqs": ["DEFORMED"], - "changes_to": ["DEFORMED3"], - "category": ["MUTCAT_BEAST", "MUTCAT_PLANT"] + "name" : "Badly Deformed", + "points" : -4, + "visibility" : 7, + "ugliness" : 7, + "description" : "You're hideously deformed. Some people will have a strong negative reaction to your appearance.", + "cancels" : ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], + "prereqs" : ["DEFORMED"], + "changes_to" : ["DEFORMED3"], + "category" : ["MUTCAT_BEAST", "MUTCAT_PLANT"] },{ "type" : "mutation", "id" : "DEFORMED3", - "name": "Grotesque", - "points": -7, - "visibility": 10, - "ugliness": 10, - "description": "Your visage is disgusting and liable to induce vomiting. People will not want to interact with you unless they have a very good reason to.", - "cancels": ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], - "prereqs": ["DEFORMED2"], - "category": ["MUTCAT_SLIME", "MUTCAT_RAT"] + "name" : "Grotesque", + "points" : -7, + "visibility" : 10, + "ugliness" : 10, + "description" : "Your visage is disgusting and liable to induce vomiting. People will not want to interact with you unless they have a very good reason to.", + "cancels" : ["PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3"], + "prereqs" : ["DEFORMED2"], + "category" : ["MUTCAT_SLIME", "MUTCAT_RAT", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "BEAUTIFUL", - "name": "Beautiful", - "points": 2, - "visibility": -4, - "ugliness": -4, - "description": "You're a real head-turner. Some people will react well to your appearance, and most people have an easier time trusting you.", - "cancels": ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], - "prereqs": ["PRETTY"], - "changes_to": ["BEAUTIFUL2"] + "name" : "Beautiful", + "points" : 2, + "visibility" : -4, + "ugliness" : -4, + "description" : "You're a real head-turner. Some people will react well to your appearance, and most people have an easier time trusting you.", + "cancels" : ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], + "prereqs" : ["PRETTY"], + "changes_to" : ["BEAUTIFUL2"] },{ "type" : "mutation", "id" : "BEAUTIFUL2", - "name": "Very Beautiful", - "points": 4, - "visibility": -7, - "ugliness": -7, - "description": "You are a vision of beauty. Some people will react very well to your looks, and most people will trust you immediately.", - "cancels": ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], - "prereqs": ["BEAUTIFUL"], - "changes_to": ["BEAUTIFUL3"] + "name" : "Very Beautiful", + "points" : 4, + "visibility" : -7, + "ugliness" : -7, + "description" : "You are a vision of beauty. Some people will react very well to your looks, and most people will trust you immediately.", + "cancels" : ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], + "prereqs" : ["BEAUTIFUL"], + "changes_to" : ["BEAUTIFUL3"] },{ "type" : "mutation", "id" : "BEAUTIFUL3", - "name": "Glorious", - "points": 7, - "visibility": -10, - "ugliness": -10, - "description": "You are incredibly beautiful. People cannot help themselves for your charms, and will do whatever they can to please you.", - "cancels": ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], - "prereqs": ["BEAUTIFUL2"] + "name" : "Glorious", + "points" : 7, + "visibility" : -10, + "ugliness" : -10, + "description" : "You are incredibly beautiful. People cannot help themselves for your charms, and will do whatever they can to please you.", + "cancels" : ["UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3"], + "prereqs" : ["BEAUTIFUL2"], + "category": ["MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "HOLLOW_BONES", - "name": "Hollow Bones", - "points": -6, - "description": "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is very light as a result, enabling you to run and attack 20% faster, but also frail; you can carry 40% less, and bashing attacks injure you more.", - "prereqs": ["LIGHT_BONES"], - "category": ["MUTCAT_BIRD", "MUTCAT_SLIME"] + "name" : "Hollow Bones", + "points" : -6, + "description" : "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is very light as a result, enabling you to run and attack 20% faster, but also frail; you can carry 40% less, and bashing attacks injure you more.", + "prereqs" : ["LIGHT_BONES"], + "category" : ["MUTCAT_BIRD", "MUTCAT_SLIME", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "NAUSEA", - "name": "Nausea", - "points": -3, - "description": "You feel nauseous almost constantly, and are more liable to throw up from food poisoning, alcohol, etc.", - "prereqs": ["WEAKSTOMACH"], - "changes_to": ["VOMITOUS"] + "name" : "Nausea", + "points" : -3, + "description" : "You feel nauseous almost constantly, and are more liable to throw up from food poisoning, alcohol, etc.", + "prereqs" : ["WEAKSTOMACH"], + "changes_to" : ["VOMITOUS"], + "category" : ["MUTCAT_ALPHA"] },{ "type" : "mutation", "id" : "VOMITOUS", - "name": "Vomitous", - "points": -8, - "description": "You have a major digestive disorder, which causes you to vomit frequently.", - "prereqs": ["NAUSEA"], - "category": ["MUTCAT_SLIME", "MUTCAT_RAT"] + "name" : "Vomitous", + "points" : -8, + "description" : "You have a major digestive disorder, which causes you to vomit frequently.", + "prereqs" : ["NAUSEA"], + "category" : ["MUTCAT_SLIME", "MUTCAT_RAT", "MUTCAT_MEDICAL", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "HUNGER", - "name": "Fast Metabolism", - "points": -2, - "description": "You require more food than most people.", - "category": ["MUTCAT_BEAST", "MUTCAT_SLIME", "MUTCAT_RAT"] + "name" : "Fast Metabolism", + "points" : -2, + "description" : "You require more food than most people.", + "category" : ["MUTCAT_BEAST", "MUTCAT_SLIME", "MUTCAT_RAT", "MUTCAT_ALPHA", "MUTCAT_MEDICAL", "MUTCAT_CHIMERA", "MUTCAT_ELFA", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "THIRST", - "name": "High Thirst", - "points": -3, - "description": "Your body dries out easily; you need to drink a lot more water.", - "category": ["MUTCAT_FISH", "MUTCAT_SLIME", "MUTCAT_CEPHALOPOD"] + "name" : "High Thirst", + "points" : -3, + "description" : "Your body dries out easily; you need to drink a lot more water.", + "category" : ["MUTCAT_FISH", "MUTCAT_SLIME", "MUTCAT_CEPHALOPOD", "MUTCAT_CHIMERA", "MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "ROT1", - "name": "Weakening", - "points": -6, - "description": "You feel as though you are slowly weakening, but it's so slight a feeling that it does not affect you at all.", - "cancels": ["FASTHEALER", "FASTHEALER2", "REGEN"], - "changes_to": ["ROT2"] + "name" : "Weakening", + "points" : -6, + "description" : "You feel as though you are slowly weakening, but it's so slight a feeling that it does not affect you at all.", + "cancels" : ["FASTHEALER", "FASTHEALER2", "REGEN"], + "changes_to" : ["ROT2"], + "category" : ["MUTCAT_ALPHA"] },{ "type" : "mutation", "id" : "ROT2", - "name": "Deterioration", - "points": -8, - "description": "Your body is very slowly wasting away.", - "cancels": ["FASTHEALER", "FASTHEALER2", "REGEN"], - "prereqs": ["ROT1"], - "changes_to": ["ROT3"] + "name" : "Deterioration", + "points" : -8, + "description" : "Your body is very slowly wasting away.", + "cancels" : ["FASTHEALER", "FASTHEALER2", "REGEN"], + "prereqs" : ["ROT1"], + "changes_to" : ["ROT3"], + "category" : ["MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "ROT3", - "name": "Disintegration", - "points": -10, - "description": "Your body is slowly wasting away!", - "cancels": ["FASTHEALER", "FASTHEALER2", "REGEN"], - "prereqs": ["ROT2"] + "name" : "Disintegration", + "points" : -10, + "description" : "Your body is slowly wasting away!", + "cancels" : ["FASTHEALER", "FASTHEALER2", "REGEN"], + "prereqs" : ["ROT2"], + "category": ["MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "ALBINO", - "name": "Albino", - "points": -2, - "description": "Your skin lacks pigment, and is nearly transparent. You suffer serious burns in direct sunlight.", - "prereqs": ["PALE"], - "category": ["MUTCAT_TROGLO"] + "name" : "Albino", + "points" : -2, + "description" : "Your skin lacks pigment, and is nearly transparent. You suffer serious burns in direct sunlight.", + "prereqs" : ["PALE"], + "category" : ["MUTCAT_TROGLO"] },{ "type" : "mutation", "id" : "SORES", - "name": "Sores", - "points": -2, - "visibility": 5, - "ugliness": 6, - "description": "Your body is covered in painful sores. The pain is worse when they are covered in clothing.", - "prereqs": ["SPOTS"], - "category": ["MUTCAT_SLIME"] + "name" : "Sores", + "points" : -2, + "visibility" : 5, + "ugliness" : 6, + "description" : "Your body is covered in painful sores. The pain is worse when they are covered in clothing.", + "prereqs" : ["SPOTS"], + "category" : ["MUTCAT_SLIME"] },{ "type" : "mutation", "id" : "TROGLO", - "name": "Light Sensitive", - "points": -2, - "description": "Sunlight makes you uncomfortable. If you are outdoors and the weather is Sunny, you suffer -1 to all stats.", - "cancels": ["SUNLIGHT_DEPENDENT"], - "changes_to": ["TROGLO2"], - "category": ["MUTCAT_LIZARD", "MUTCAT_BEAST", "MUTCAT_INSECT", "MUTCAT_SLIME", "MUTCAT_SPIDER"] + "name" : "Light Sensitive", + "points" : -2, + "description" : "Sunlight makes you uncomfortable. If you are outdoors and the weather is Sunny, you suffer -1 to all stats.", + "cancels" : ["SUNLIGHT_DEPENDENT"], + "changes_to" : ["TROGLO2"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_BEAST", "MUTCAT_INSECT", "MUTCAT_SLIME", "MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "TROGLO2", - "name": "Very Light Sensitive", - "points": -3, - "description": "Sunlight makes you very uncomfortable. If you are outdoors during the day, you suffer -1 to all stats; -2 if the weather is Sunny.", - "cancels": ["SUNLIGHT_DEPENDENT"], - "prereqs": ["TROGLO"], - "changes_to": ["TROGLO3"], - "category": ["MUTCAT_RAT"] + "name" : "Very Light Sensitive", + "points" : -3, + "description" : "Sunlight makes you very uncomfortable. If you are outdoors during the day, you suffer -1 to all stats; -2 if the weather is Sunny.", + "cancels" : ["SUNLIGHT_DEPENDENT"], + "prereqs" : ["TROGLO"], + "changes_to" : ["TROGLO3"], + "category" : ["MUTCAT_RAT"] },{ "type" : "mutation", "id" : "TROGLO3", - "name": "Troglobite", - "points": -5, - "description": "Sunlight makes you extremely uncomfortable, resulting in large penalties to all stats.", - "cancels": ["SUNLIGHT_DEPENDENT"], - "prereqs": ["TROGLO2"], - "category": ["MUTCAT_TROGLO"] + "name" : "Troglobite", + "points" : -5, + "description" : "Sunlight makes you extremely uncomfortable, resulting in large penalties to all stats.", + "cancels" : ["SUNLIGHT_DEPENDENT"], + "prereqs" : ["TROGLO2"], + "category" : ["MUTCAT_TROGLO"] },{ "type" : "mutation", "id" : "WEBBED", - "name": "Webbed Hands", - "points": -1, - "visibility": 3, - "ugliness": 2, - "description": "Your hands and feet are heavily webbed, reducing your dexterity by 1 and preventing you from wearing gloves. However, you can swim much faster. Slightly decreases wet penalties.", - "category": ["MUTCAT_LIZARD", "MUTCAT_FISH", "MUTCAT_SLIME"], - "wet_protection":[ - { - "part": "HANDS", - "neutral": 3 - } - ] + "name" : "Webbed Hands", + "points" : -1, + "visibility" : 3, + "ugliness" : 2, + "description" : "Your hands and feet are heavily webbed, reducing your dexterity by 1 and preventing you from wearing gloves. However, you can swim much faster. Slightly decreases wet penalties.", + "category" : ["MUTCAT_LIZARD", "MUTCAT_FISH", "MUTCAT_SLIME"], + "wet_protection" : [ + { "part" : "HANDS", "neutral" : 3 } + ] },{ "type" : "mutation", "id" : "BEAK", - "name": "Beak", - "points": -1, - "visibility": 8, - "ugliness": 4, - "description": "You have a beak for a mouth. You can occasionally use it to peck at your enemies, but it is impossible for you to wear mouthgear. Slightly reduces wet effects.", - "cancels": ["FANGS", "MANDIBLES"], - "category": ["MUTCAT_BIRD", "MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "MOUTH", - "ignored": 1 - } - ] + "name" : "Beak", + "points" : -1, + "visibility" : 8, + "ugliness" : 4, + "description" : "You have a beak for a mouth. You can occasionally use it to peck at your enemies, but it is impossible for you to wear mouthgear. Slightly reduces wet effects.", + "cancels" : ["FANGS", "MANDIBLES"], + "category" : ["MUTCAT_BIRD", "MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "MOUTH", "ignored" : 1 } + ] },{ "type" : "mutation", "id" : "UNSTABLE", - "name": "Genetically Unstable", - "points": -4, - "description": "Your DNA has been damaged in a way that causes you to continually develop more mutations.", - "category": ["MUTCAT_SLIME"] + "name" : "Genetically Unstable", + "points" : -4, + "description" : "Your DNA has been damaged in a way that causes you to continually develop more mutations.", + "category" : ["MUTCAT_SLIME", "MUTCAT_MEDICAL", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "RADIOACTIVE1", - "name": "Minor Radioactivity", - "points": -4, - "description": "Your body has become radioactive! You continuously emit low levels of radiation, some of which will be absorbed by you, and some of which will contaminate the world around you.", - "changes_to": ["RADIOACTIVE2"], - "category": ["MUTCAT_SLIME"] + "name" : "Minor Radioactivity", + "points" : -4, + "description" : "Your body has become radioactive! You continuously emit low levels of radiation, some of which will be absorbed by you, and some of which will contaminate the world around you.", + "changes_to" : ["RADIOACTIVE2"], + "category" : ["MUTCAT_SLIME"] },{ "type" : "mutation", "id" : "RADIOACTIVE2", - "name": "Radioactivity", - "points": -4, - "description": "Your body has become radioactive! You continuously emit moderate levels of radiation, some of which will be absorbed by you, and some of which will contaminate the world around you.", - "prereqs": ["RADIOACTIVE1"], - "changes_to": ["RADIOACTIVE3"] + "name" : "Radioactivity", + "points" : -4, + "description" : "Your body has become radioactive! You continuously emit moderate levels of radiation, some of which will be absorbed by you, and some of which will contaminate the world around you.", + "prereqs" : ["RADIOACTIVE1"], + "changes_to" : ["RADIOACTIVE3"], + "category": ["MUTCAT_ELFA"] },{ "type" : "mutation", "id" : "RADIOACTIVE3", - "name": "Severe Radioactivity", - "points": -4, - "description": "Your body has become radioactive! You continuously emit heavy levels of radiation, some of which will be absorbed by you, and some of which will contaminate the world around you.", - "prereqs": ["RADIOACTIVE2"] + "name" : "Severe Radioactivity", + "points" : -4, + "description" : "Your body has become radioactive! You continuously emit heavy levels of radiation, some of which will be absorbed by you, and some of which will contaminate the world around you.", + "prereqs" : ["RADIOACTIVE2"] },{ "type" : "mutation", "id" : "SLIMY", - "name": "Slimy", - "points": 2, - "visibility": 7, - "ugliness": 6, - "description": "Your body is coated with a fine slime, which oozes off of you, leaving a trail. Greatly increases wet benefits.", - "leads_to": ["SLIME_HANDS"], - "category": ["MUTCAT_FISH", "MUTCAT_SLIME", "MUTCAT_TROGLO", "MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "HEAD", - "neutral": 3, - "good": 4 - }, - { - "part": "LEGS", - "neutral": 7, - "good": 14 - }, - { - "part": "FEET", - "neutral": 2, - "good": 4 - }, - { - "part": "ARMS", - "neutral": 7, - "good": 12 - }, - { - "part": "HANDS", - "neutral": 2, - "good": 3 - }, - { - "part": "TORSO", - "neutral": 14, - "good": 26 - } - ] + "name" : "Slimy", + "points" : 2, + "visibility" : 7, + "ugliness" : 6, + "description" : "Your body is coated with a fine slime, which oozes off of you, leaving a trail. Greatly increases wet benefits.", + "leads_to" : ["SLIME_HANDS"], + "category" : ["MUTCAT_FISH", "MUTCAT_SLIME", "MUTCAT_TROGLO", "MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "HEAD", "neutral" : 3, "good" : 4 }, + { "part" : "LEGS", "neutral" : 7, "good" : 14 }, + { "part" : "FEET", "neutral" : 2, "good" : 4 }, + { "part" : "ARMS", "neutral" : 7, "good" : 12 }, + { "part" : "HANDS", "neutral" : 2, "good" : 3 }, + { "part" : "TORSO", "neutral" : 14, "good" : 26 } + ] },{ "type" : "mutation", "id" : "HERBIVORE", - "name": "Herbivore", - "points": -3, - "description": "Your body's ability to digest meat is severely hampered. Eating meat has a good chance of making you vomit it back up; even if you manage to keep it down, its nutritional value is greatly reduced.", - "cancels": ["CARNIVORE", "SAPROVORE"], - "leads_to": ["RUMINANT"] + "name" : "Herbivore", + "points" : -3, + "description" : "Your body's ability to digest meat is severely hampered. Eating meat has a good chance of making you vomit it back up; even if you manage to keep it down, its nutritional value is greatly reduced.", + "cancels" : ["CARNIVORE", "SAPROVORE"], + "leads_to" : ["RUMINANT"] },{ "type" : "mutation", "id" : "CARNIVORE", - "name": "Carnivore", - "points": -3, - "description": "Your body's ability to digest fruits, vegetables and grains is severely hampered. You cannot eat anything besides meat.", - "cancels": ["HERBIVORE", "RUMINANT"], - "leads_to": ["SAPROVORE"], - "category": ["MUTCAT_LIZARD", "MUTCAT_BEAST", "MUTCAT_SPIDER"] + "name" : "Carnivore", + "points" : -3, + "description" : "Your body's ability to digest fruits, vegetables and grains is severely hampered. You cannot eat anything besides meat.", + "cancels" : ["HERBIVORE", "RUMINANT"], + "leads_to" : ["SAPROVORE"], + "category" : ["MUTCAT_LIZARD", "MUTCAT_BEAST", "MUTCAT_SPIDER", "MUTCAT_CHIMERA", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "PONDEROUS1", - "name": "Ponderous", - "points": -3, - "description": "Your muscles are generally slow to move. You run 10% slower.", - "cancels": ["FLEET", "FLEET2"], - "changes_to": ["PONDEROUS2"] + "name" : "Ponderous", + "points" : -3, + "description" : "Your muscles are generally slow to move. You run 10% slower.", + "cancels" : ["FLEET", "FLEET2"], + "changes_to" : ["PONDEROUS2"] },{ "type" : "mutation", "id" : "PONDEROUS2", - "name": "Very Ponderous", - "points": -5, - "description": "Your muscles are quite slow to move. You run 20% slower.", - "cancels": ["FLEET", "FLEET2"], - "prereqs": ["PONDEROUS1"], - "changes_to": ["PONDEROUS3"], - "category": ["MUTCAT_CATTLE"] + "name" : "Very Ponderous", + "points" : -5, + "description" : "Your muscles are quite slow to move. You run 20% slower.", + "cancels" : ["FLEET", "FLEET2"], + "prereqs" : ["PONDEROUS1"], + "changes_to" : ["PONDEROUS3"], + "category" : ["MUTCAT_CATTLE"] },{ "type" : "mutation", "id" : "PONDEROUS3", - "name": "Extremely Ponderous", - "points": -8, - "description": "Your muscles are very slow to move. You run 30% slower.", - "cancels": ["FLEET", "FLEET2"], - "prereqs": ["PONDEROUS2"], - "category": ["MUTCAT_PLANT"] + "name" : "Extremely Ponderous", + "points" : -8, + "description" : "Your muscles are very slow to move. You run 30% slower.", + "cancels" : ["FLEET", "FLEET2"], + "prereqs" : ["PONDEROUS2"], + "category" : ["MUTCAT_PLANT"] },{ "type" : "mutation", "id" : "SUNLIGHT_DEPENDENT", - "name": "Sunlight dependent", - "points": -5, - "description": "You feel very sluggish when not in direct sunlight. You suffer a 5% drop in speed when in shade, and a 10% drop in speed when in the dark.", - "cancels": ["TROGLO", "TROGLO2", "TROGLO3"] + "name" : "Sunlight dependent", + "points" : -5, + "description" : "You feel very sluggish when not in direct sunlight. You suffer a 5% drop in speed when in shade, and a 10% drop in speed when in the dark.", + "cancels" : ["TROGLO", "TROGLO2", "TROGLO3"] },{ "type" : "mutation", "id" : "COLDBLOOD", - "name": "Heat dependent", - "points": -2, - "description": "Your muscle response is dependent on ambient temperatures. You lose 1% of your speed for every 5 degrees below 65 F.", - "changes_to": ["COLDBLOOD2"], - "category": ["MUTCAT_BIRD", "MUTCAT_CEPHALOPOD", "MUTCAT_SPIDER"] + "name" : "Heat dependent", + "points" : -2, + "description" : "Your muscle response is dependent on ambient temperatures. You lose 1% of your speed for every 5 degrees below 65 F.", + "changes_to" : ["COLDBLOOD2"], + "category" : ["MUTCAT_BIRD", "MUTCAT_CEPHALOPOD", "MUTCAT_SPIDER"] },{ "type" : "mutation", "id" : "COLDBLOOD2", - "name": "Very Heat dependent", - "points": -3, - "description": "Your muscle response is highly dependent on ambient temperatures. You lose 1% of your speed for every 3 degrees below 65 F.", - "prereqs": ["COLDBLOOD"], - "changes_to": ["COLDBLOOD3"], - "category": ["MUTCAT_LIZARD", "MUTCAT_FISH"] + "name" : "Very Heat dependent", + "points" : -3, + "description" : "Your muscle response is highly dependent on ambient temperatures. You lose 1% of your speed for every 3 degrees below 65 F.", + "prereqs" : ["COLDBLOOD"], + "changes_to" : ["COLDBLOOD3"], + "category" : ["MUTCAT_FISH", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "COLDBLOOD3", - "name": "Cold Blooded", - "points": -5, - "description": "You are cold-blooded and rely on heat to keep moving. Your lose 1% of your speed for every 2 degrees below 65 F.", - "prereqs": ["COLDBLOOD2"], - "category": ["MUTCAT_INSECT"] + "name" : "Cold Blooded", + "points" : -5, + "description" : "You are cold-blooded and rely on heat to keep moving. Your lose 1% of your speed for every 2 degrees below 65 F.", + "prereqs" : ["COLDBLOOD2"], + "category" : ["MUTCAT_INSECT", "MUTCAT_LIZARD"] },{ "type" : "mutation", "id" : "GROWL", - "name": "Growling Voice", - "points": -1, - "description": "You have a growling, rough voice. Persuading NPCs will be more difficult, but threatening them will be easier.", - "changes_to": ["SNARL"], - "category": ["MUTCAT_RAT"] + "name" : "Growling Voice", + "points" : -1, + "description" : "You have a growling, rough voice. Persuading NPCs will be more difficult, but threatening them will be easier.", + "changes_to" : ["SNARL"], + "category" : ["MUTCAT_RAT"] },{ "type" : "mutation", "id" : "SNARL", - "name": "Snarling Voice", - "points": -2, - "description": "You have a threatening snarl in your voice. Persuading NPCs will be near impossible, but threatening them will be much easier.", - "prereqs": ["GROWL"], - "category": ["MUTCAT_BEAST"] + "name" : "Snarling Voice", + "points" : -2, + "description" : "You have a threatening snarl in your voice. Persuading NPCs will be near impossible, but threatening them will be much easier.", + "prereqs" : ["GROWL"], + "category" : ["MUTCAT_BEAST", "MUTCAT_CHIMERA"] + },{ + "type" : "mutation", + "id" : "HISS", + "name": "Hissing Voice", + "points": -1, + "description": "You hiss when speaking. Persuading NPCs will be more difficult, but threatening them will be easier.", + "category": ["MUTCAT_LIZARD", "MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "SHOUT1", - "name": "Shouter", - "points": -2, - "description": "You occasionally shout uncontrollably.", - "changes_to": ["SHOUT2"] + "name" : "Shouter", + "points" : -2, + "description" : "You occasionally shout uncontrollably.", + "changes_to" : ["SHOUT2"], + "category" : ["MUTCAT_RAPTOR"] },{ "type" : "mutation", "id" : "SHOUT2", - "name": "Screamer", - "points": -3, - "description": "You sometimes scream uncontrollably.", - "prereqs": ["SHOUT1"], - "changes_to": ["SHOUT3"] + "name" : "Screamer", + "points" : -3, + "description" : "You sometimes scream uncontrollably.", + "prereqs" : ["SHOUT1"], + "changes_to" : ["SHOUT3"] },{ "type" : "mutation", "id" : "SHOUT3", - "name": "Howler", - "points": -5, - "description": "You frequently let out a piercing howl.", - "prereqs": ["SHOUT2"], - "category": ["MUTCAT_BEAST"] + "name" : "Howler", + "points" : -5, + "description" : "You frequently let out a piercing howl.", + "prereqs" : ["SHOUT2"], + "category" : ["MUTCAT_BEAST", "MUTCAT_CHIMERA"] },{ "type" : "mutation", "id" : "ARM_TENTACLES", - "name": "Tentacle Arms", - "points": -5, - "visibility": 7, - "ugliness": 4, - "description": "Your arms have transformed into tentacles, resulting in a bonus of 1 to dexterity, permanent hand encumbrance of 3, and inability to wear gloves. Somewhat decreases wet penalties.", - "changes_to": ["ARM_TENTACLES_4"], - "wet_protection":[ - { - "part": "ARMS", - "neutral": 19 - }, - { - "part": "HANDS", - "neutral": 5 - } - ] + "name" : "Tentacle Arms", + "points" : -5, + "visibility" : 7, + "ugliness" : 4, + "description" : "Your arms have transformed into tentacles, resulting in a bonus of 1 to dexterity, permanent hand encumbrance of 3, and inability to wear gloves. Somewhat decreases wet penalties.", + "changes_to" : ["ARM_TENTACLES_4"], + "wet_protection" : [ + { "part" : "ARMS", "neutral" : 19 }, + { "part" : "HANDS", "neutral" : 5 } + ] },{ "type" : "mutation", "id" : "ARM_TENTACLES_4", - "name": "4 Tentacles", - "points": -3, - "visibility": 8, - "ugliness": 5, - "description": "Your arms have transformed into four tentacles, resulting in a bonus of 1 to dexterity, permanent hand encumbrance of 3, and inability to wear gloves. You can make up to 3 extra attacks with them. Somewhat decreases wet penalties.", - "prereqs": ["ARM_TENTACLES"], - "changes_to": ["ARM_TENTACLES_8"], - "wet_protection":[ - { - "part": "ARMS", - "neutral": 19 - }, - { - "part": "HANDS", - "neutral": 5 - } - ] + "name" : "4 Tentacles", + "points" : -3, + "visibility" : 8, + "ugliness" : 5, + "description" : "Your arms have transformed into four tentacles, resulting in a bonus of 1 to dexterity, permanent hand encumbrance of 3, and inability to wear gloves. You can make up to 3 extra attacks with them. Somewhat decreases wet penalties.", + "prereqs" : ["ARM_TENTACLES"], + "changes_to" : ["ARM_TENTACLES_8"], + "wet_protection" : [ + { "part" : "ARMS", "neutral" : 19 }, + { "part" : "HANDS", "neutral" : 5 } + ] },{ "type" : "mutation", "id" : "ARM_TENTACLES_8", - "name": "8 Tentacles", - "points": -2, - "visibility": 9, - "ugliness": 6, - "description": "Your arms have transformed into eight tentacles, resulting in a bonus of 1 to dexterity, permanent hand encumbrance of 3, and inability to wear gloves. You can make up to 7 extra attacks with them. Somewhat decreases wet penalties.", - "prereqs": ["ARM_TENTACLES_4"], - "category": ["MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "ARMS", - "neutral": 19 - }, - { - "part": "HANDS", - "neutral": 5 - } - ] + "name" : "8 Tentacles", + "points" : -2, + "visibility" : 9, + "ugliness" : 6, + "description" : "Your arms have transformed into eight tentacles, resulting in a bonus of 1 to dexterity, permanent hand encumbrance of 3, and inability to wear gloves. You can make up to 7 extra attacks with them. Somewhat decreases wet penalties.", + "prereqs" : ["ARM_TENTACLES_4"], + "category" : ["MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "ARMS", "neutral" : 19 }, + { "part" : "HANDS", "neutral" : 5 } + ] },{ "type" : "mutation", "id" : "SHELL", - "name": "Shell", - "points": -5, - "visibility": 8, - "ugliness": 3, - "description": "You have grown a thick shell over your torso, providing excellent armor. You find you can use the empty space as 16 storage space, but cannot wear anything on your torso. Somewhat reduces wet effects.", - "prereqs": ["CHITIN"], - "cancels": ["CHITIN3"], - "category": ["MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "TORSO", - "ignored": 26 - } - ] + "name" : "Shell", + "points" : -5, + "visibility" : 8, + "ugliness" : 3, + "description" : "You have grown a thick shell over your torso, providing excellent armor. You find you can use the empty space as 16 storage space, but cannot wear anything on your torso. Somewhat reduces wet effects.", + "prereqs" : ["CHITIN"], + "cancels" : ["CHITIN3"], + "category" : ["MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "TORSO", "ignored" : 26 } + ] },{ "type" : "mutation", "id" : "LEG_TENTACLES", - "name": "Leg Tentacles", - "points": -3, - "visibility": 8, - "ugliness": 4, - "description": "Your legs have transformed into six tentacles. This decreases your speed on land by 20%, but makes your movement silent. However, they also increase your swimming speed. Somewhat decreases wet penalties.", - "cancels": ["PADDED_FEET", "HOOVES"], - "category": ["MUTCAT_CEPHALOPOD"], - "wet_protection":[ - { - "part": "LEGS", - "neutral": 21 - }, - { - "part": "FEET", - "neutral": 6 - } - ] + "name" : "Leg Tentacles", + "points" : -3, + "visibility" : 8, + "ugliness" : 4, + "description" : "Your legs have transformed into six tentacles. This decreases your speed on land by 20%, but makes your movement silent. However, they also increase your swimming speed. Somewhat decreases wet penalties.", + "cancels" : ["PADDED_FEET", "HOOVES"], + "category" : ["MUTCAT_CEPHALOPOD"], + "wet_protection" : [ + { "part" : "LEGS", "neutral" : 21 }, + { "part" : "FEET", "neutral" : 6 } + ] } ] diff --git a/data/json/overmap_terrain.json b/data/json/overmap_terrain.json new file mode 100644 index 0000000000000..d755117a30813 --- /dev/null +++ b/data/json/overmap_terrain.json @@ -0,0 +1,1545 @@ +[ + { + "type" : "overmap_terrain", + "id" : "", + "name" : "nothing", + "rotate" : false, + "line_drawing" : false, + "sym" : 37, + "color" : "white", + "see_cost" : 0, + "extras" : "none", + "known_down" : false, + "known_up" : false, + "mondensity" : 0, + "sidewalk" : false, + "allow_road" : false + },{ + "type" : "overmap_terrain", + "id" : "crater", + "name" : "crater", + "sym" : 79, + "color" : "red", + "see_cost" : 2, + "extras" : "field", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "field", + "name" : "field", + "sym" : 46, + "color" : "brown", + "see_cost" : 2, + "extras" : "field", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "forest", + "name" : "forest", + "sym" : 70, + "color" : "green", + "see_cost" : 3, + "extras" : "field", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "forest_thick", + "name" : "forest", + "sym" : 70, + "color" : "green", + "see_cost" : 4, + "extras" : "field", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "forest_water", + "name" : "swamp", + "sym" : 70, + "color" : "cyan", + "see_cost" : 4, + "extras" : "field", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "hiway_ns", + "name" : "highway", + "sym" : 72, + "color" : "dark_gray", + "see_cost" : 2, + "extras" : "road", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "hiway_ew", + "name" : "highway", + "sym" : 61, + "color" : "dark_gray", + "see_cost" : 2, + "extras" : "road", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "road_null", + "name" : "bug-ridden road", + "sym" : 37, + "color" : "magenta", + "see_cost" : 0, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "road", + "name" : "road", + "line_drawing" : true, + "color" : "dark_gray", + "see_cost" : 2, + "extras" : "road", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "road_nesw_manhole", + "name" : "road, manhole", + "sym" : 4194414, + "color" : "yellow", + "see_cost" : 2, + "extras" : "road", + "known_down" : true, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "bridge_ns", + "name" : "bridge", + "sym" : 124, + "color" : "dark_gray", + "see_cost" : 2, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "bridge_ew", + "name" : "bridge", + "sym" : 45, + "color" : "dark_gray", + "see_cost" : 2, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_center", + "name" : "river", + "sym" : 82, + "color" : "blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river", + "name" : "river bank", + "rotate" : true, + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_c_not_ne", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_c_not_nw", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_c_not_se", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_c_not_sw", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_ne", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_se", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_sw", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "river_nw", + "name" : "river bank", + "sym" : 82, + "color" : "light_blue", + "see_cost" : 1, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "house", + "name" : "house", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "light_green", + "see_cost" : 2, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "house_base", + "name" : "house", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "light_green", + "see_cost" : 2, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_lot", + "name" : "parking lot", + "sym" : 79, + "color" : "dark_gray", + "see_cost" : 1, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "park", + "name" : "park", + "sym" : 79, + "color" : "green", + "see_cost" : 2, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "pool", + "name" : "pool", + "sym" : 79, + "color" : "dark_gray", + "see_cost" : 2, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_gas", + "name" : "gas station", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "light_blue", + "see_cost" : 0, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_pharm", + "name" : "pharmacy", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "light_red", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "office_doctor", + "name" : "doctor's office", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "i_ltred", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "office_cubical", + "name" : "office", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "light_gray", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "apartments_con_tower_1_entrance", + "name" : "apartment tower", + "sym" : 65, + "color" : "light_green", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "apartments_con_tower_1", + "name" : "apartment tower", + "sym" : 65, + "color" : "light_green", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "apartments_mod_tower_1_entrance", + "name" : "apartment tower", + "sym" : 65, + "color" : "light_green", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "apartments_mod_tower_1", + "name" : "apartment tower", + "sym" : 65, + "color" : "light_green", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "office_tower_1_entrance", + "name" : "office tower", + "sym" : 84, + "color" : "i_ltgray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "office_tower_1", + "name" : "office tower", + "sym" : 116, + "color" : "i_ltgray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "office_tower_b_entrance", + "name" : "tower parking", + "sym" : 112, + "color" : "i_ltgray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "office_tower_b", + "name" : "tower parking", + "sym" : 112, + "color" : "i_ltgray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "church", + "name" : "church", + "rotate" : true, + "sym" : 67, + "color" : "light_red", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "cathedral_1_entrance", + "name" : "cathedral", + "sym" : 67, + "color" : "i_ltred", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "cathedral_1", + "name" : "cathedral", + "sym" : 67, + "color" : "i_ltred", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "cathedral_b_entrance", + "name" : "cathedral basement", + "sym" : 67, + "color" : "i_ltred", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "cathedral_b", + "name" : "cathedral basement", + "sym" : 67, + "color" : "i_ltred", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_grocery", + "name" : "grocery store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "green", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_hardware", + "name" : "hardware store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "cyan", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_electronics", + "name" : "electronics store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "yellow", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_sports", + "name" : "sporting goods store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "light_cyan", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_liquor", + "name" : "liquor store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "magenta", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_gun", + "name" : "gun store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "red", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_clothes", + "name" : "clothing store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "blue", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_library", + "name" : "library", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "brown", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_restaurant", + "name" : "restaurant", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "pink", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_restaurant_fast", + "name" : "fast food restaurant", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "pink", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_restaurant_coffee", + "name" : "coffee shop", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "pink", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "sub_station", + "name" : "subway station", + "rotate" : true, + "sym" : 83, + "color" : "yellow", + "see_cost" : 5, + "known_down" : true, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "s_garage", + "name" : "garage", + "rotate" : true, + "sym" : 79, + "color" : "white", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "cabin_strange", + "name" : "forest", + "sym" : 70, + "color" : "green", + "see_cost" : 5, + "extras" : "field" + },{ + "type" : "overmap_terrain", + "id" : "cabin_strange_b", + "name" : "cabin basement", + "sym" : 67, + "color" : "i_green", + "see_cost" : 5, + "extras" : "build" + },{ + "type" : "overmap_terrain", + "id" : "cabin", + "name" : "cabin", + "sym" : 67, + "color" : "i_green", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "dirtlot", + "name" : "dirt lot", + "sym" : 79, + "color" : "brown", + "see_cost" : 5, + "extras" : "field" + },{ + "type" : "overmap_terrain", + "id" : "farm", + "name" : "farm", + "sym" : 94, + "color" : "i_brown", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "farm_field", + "name" : "farm field", + "sym" : 35, + "color" : "i_brown", + "see_cost" : 5, + "extras" : "field", + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "police", + "name" : "police station", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "h_yellow", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "bank", + "name" : "bank", + "rotate" : true, + "sym" : 36, + "color" : "light_gray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "bar", + "name" : "bar", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "magenta", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "pawn", + "name" : "pawn shop", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "white", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "mil_surplus", + "name" : "mil. surplus", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "i_ltgray", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "furniture", + "name" : "furniture store", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "i_brown", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "abstorefront", + "name" : "abandoned storefront", + "rotate" : true, + "sym" : [94, 62, 118, 60], + "color" : "h_dkgray", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "megastore_entrance", + "name" : "megastore", + "sym" : 43, + "color" : "light_blue", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "megastore", + "name" : "megastore", + "sym" : 77, + "color" : "blue", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hospital_entrance", + "name" : "hospital", + "sym" : 72, + "color" : "light_red", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hospital", + "name" : "hospital", + "sym" : 72, + "color" : "red", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "public_works_entrance", + "name" : "public works", + "sym" : 87, + "color" : "light_gray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "public_works", + "name" : "public works", + "sym" : 119, + "color" : "light_gray", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_1", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_2", + "name" : "regional school", + "sym" : 83, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_3", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_4", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_5", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_6", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_7", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_8", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "school_9", + "name" : "regional school", + "sym" : 115, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_1", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_2", + "name" : "prison", + "sym" : 80, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_3", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_4", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_5", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_6", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_7", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_8", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_9", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "prison_b", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "prison_b_entrance", + "name" : "prison", + "sym" : 112, + "color" : "i_ltblue", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_1", + "name" : "hotel parking", + "sym" : 104, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_2", + "name" : "hotel parking", + "sym" : 104, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_3", + "name" : "hotel parking", + "sym" : 104, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_4", + "name" : "hotel parking", + "sym" : 104, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_5", + "name" : "hotel entrance", + "sym" : 72, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_6", + "name" : "hotel parking", + "sym" : 104, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_7", + "name" : "hotel tower", + "sym" : 72, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_8", + "name" : "hotel tower", + "sym" : 72, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_1_9", + "name" : "hotel tower", + "sym" : 72, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2, + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_b_1", + "name" : "hotel basement", + "sym" : 66, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_b_2", + "name" : "hotel basement", + "sym" : 66, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "hotel_tower_b_3", + "name" : "hotel basement", + "sym" : 66, + "color" : "light_blue", + "see_cost" : 5, + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "mansion_entrance", + "name" : "mansion", + "sym" : 77, + "color" : "light_green", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "mansion", + "name" : "mansion", + "sym" : 77, + "color" : "green", + "see_cost" : 5, + "extras" : "build", + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "fema_entrance", + "name" : "fema camp", + "sym" : 43, + "color" : "blue", + "see_cost" : 5, + "extras" : "build" + },{ + "type" : "overmap_terrain", + "id" : "fema", + "name" : "fema camp", + "sym" : 70, + "color" : "i_blue", + "see_cost" : 5, + "extras" : "build" + },{ + "type" : "overmap_terrain", + "id" : "station_radio", + "name" : "radio station", + "rotate" : true, + "sym" : 88, + "color" : "i_ltgray", + "see_cost" : 5, + "extras" : "build", + "sidewalk" : true + },{ + "type" : "overmap_terrain", + "id" : "shelter", + "name" : "evac shelter", + "sym" : 43, + "color" : "white", + "see_cost" : 2, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "shelter_under", + "name" : "evac shelter", + "sym" : 43, + "color" : "white", + "see_cost" : 2, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "lmoe", + "name" : "LMOE shelter", + "sym" : 43, + "color" : "red", + "see_cost" : 2, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "lmoe_under", + "name" : "LMOE shelter", + "sym" : 43, + "color" : "red", + "see_cost" : 2, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "lab", + "name" : "science lab", + "sym" : 76, + "color" : "light_blue", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "lab_stairs", + "name" : "science lab", + "sym" : 76, + "color" : "blue", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "lab_core", + "name" : "science lab", + "sym" : 76, + "color" : "light_blue", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "lab_finale", + "name" : "science lab", + "sym" : 76, + "color" : "cyan", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "ice_lab", + "name" : "science lab", + "sym" : 76, + "color" : "light_blue", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "ice_lab_stairs", + "name" : "science lab", + "sym" : 76, + "color" : "blue", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "ice_lab_core", + "name" : "science lab", + "sym" : 76, + "color" : "light_blue", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "ice_lab_finale", + "name" : "science lab", + "sym" : 76, + "color" : "cyan", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "nuke_plant_entrance", + "name" : "nuclear plant", + "sym" : 80, + "color" : "light_green", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "nuke_plant", + "name" : "nuclear plant", + "sym" : 80, + "color" : "light_green", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "bunker", + "name" : "military bunker", + "sym" : 66, + "color" : "dark_gray", + "see_cost" : 2, + "known_down" : true, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "outpost", + "name" : "military outpost", + "sym" : 77, + "color" : "dark_gray", + "see_cost" : 2, + "extras" : "build" + },{ + "type" : "overmap_terrain", + "id" : "silo", + "name" : "missile silo", + "sym" : 48, + "color" : "light_gray", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "silo_finale", + "name" : "missile silo", + "sym" : 48, + "color" : "light_gray", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "temple", + "name" : "strange temple", + "sym" : 84, + "color" : "magenta", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "temple_stairs", + "name" : "strange temple", + "sym" : 84, + "color" : "pink", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "temple_core", + "name" : "strange temple", + "sym" : 84, + "color" : "pink", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "temple_finale", + "name" : "strange temple", + "sym" : 84, + "color" : "yellow", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "sewage_treatment", + "name" : "sewage treatment", + "sym" : 80, + "color" : "red", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "sewage_treatment_hub", + "name" : "sewage treatment", + "sym" : 80, + "color" : "green", + "see_cost" : 5, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "sewage_treatment_under", + "name" : "sewage treatment", + "sym" : 80, + "color" : "green", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "mine_entrance", + "name" : "mine entrance", + "sym" : 77, + "color" : "light_gray", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "mine_shaft", + "name" : "mine shaft", + "sym" : 79, + "color" : "dark_gray", + "see_cost" : 5, + "known_down" : true, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "mine", + "name" : "mine", + "sym" : 77, + "color" : "brown", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "mine_down", + "name" : "mine", + "sym" : 77, + "color" : "brown", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "mine_finale", + "name" : "mine", + "sym" : 77, + "color" : "brown", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "spiral_hub", + "name" : "spiral cavern", + "sym" : 64, + "color" : "pink", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "spiral", + "name" : "spiral cavern", + "sym" : 64, + "color" : "pink", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "radio_tower", + "name" : "radio tower", + "sym" : 88, + "color" : "light_gray", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "toxic_dump", + "name" : "toxic waste dump", + "sym" : 68, + "color" : "pink", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "haz_sar_entrance", + "name" : "hazardous waste sarcophagus", + "sym" : 88, + "color" : "light_red", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "haz_sar", + "name" : "hazardous waste sarcophagus", + "sym" : 88, + "color" : "pink", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "haz_sar_entrance_b1", + "name" : "hazardous waste sarcophagus", + "sym" : 88, + "color" : "pink", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "haz_sar_b1", + "name" : "hazardous waste sarcophagus", + "sym" : 88, + "color" : "pink", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "cave", + "name" : "cave", + "sym" : 67, + "color" : "brown", + "see_cost" : 2, + "extras" : "field" + },{ + "type" : "overmap_terrain", + "id" : "cave_rat", + "name" : "rat cave", + "sym" : 67, + "color" : "dark_gray", + "see_cost" : 2, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "hive", + "name" : "bee hive", + "sym" : 56, + "color" : "yellow", + "see_cost" : 3, + "extras" : "field" + },{ + "type" : "overmap_terrain", + "id" : "fungal_bloom", + "name" : "fungal bloom", + "sym" : 84, + "color" : "light_gray", + "see_cost" : 2, + "extras" : "field" + },{ + "type" : "overmap_terrain", + "id" : "spider_pit", + "name" : "forest", + "sym" : 70, + "color" : "green", + "see_cost" : 3, + "extras" : "field" + },{ + "type" : "overmap_terrain", + "id" : "spider_pit_under", + "name" : "cavern", + "sym" : 48, + "color" : "light_gray", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "anthill", + "name" : "anthill", + "sym" : 37, + "color" : "brown", + "see_cost" : 2, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "slimepit", + "name" : "slime pit", + "sym" : 126, + "color" : "light_green", + "see_cost" : 2 + },{ + "type" : "overmap_terrain", + "id" : "slimepit_down", + "name" : "slime pit", + "sym" : 126, + "color" : "light_green", + "see_cost" : 2, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "triffid_grove", + "name" : "triffid grove", + "sym" : 84, + "color" : "light_red", + "see_cost" : 5, + "known_down" : true + },{ + "type" : "overmap_terrain", + "id" : "triffid_roots", + "name" : "triffid roots", + "sym" : 84, + "color" : "light_red", + "see_cost" : 5, + "known_down" : true, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "triffid_finale", + "name" : "triffid heart", + "sym" : 84, + "color" : "red", + "see_cost" : 5, + "known_up" : true + },{ + "type" : "overmap_terrain", + "id" : "basement", + "name" : "basement", + "sym" : 79, + "color" : "dark_gray", + "see_cost" : 5, + "known_up" : true, + "mondensity" : 2 + },{ + "type" : "overmap_terrain", + "id" : "cavern", + "name" : "cavern", + "sym" : 48, + "color" : "light_gray", + "see_cost" : 5, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "rock", + "name" : "solid rock", + "sym" : 37, + "color" : "dark_gray", + "see_cost" : 5, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "rift", + "name" : "rift", + "sym" : 94, + "color" : "red", + "see_cost" : 2, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "hellmouth", + "name" : "hellmouth", + "sym" : 94, + "color" : "light_red", + "see_cost" : 2, + "known_down" : true, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "subway_station", + "name" : "subway station", + "sym" : 83, + "color" : "yellow", + "see_cost" : 5, + "extras" : "subway", + "known_up" : true, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "subway", + "name" : "subway", + "line_drawing" : true, + "color" : "dark_gray", + "see_cost" : 5, + "extras" : "subway", + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "sewer", + "name" : "sewer", + "line_drawing" : true, + "color" : "green", + "see_cost" : 5, + "allow_road" : true + },{ + "type" : "overmap_terrain", + "id" : "ants", + "name" : "ant tunnel", + "line_drawing" : true, + "color" : "brown", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "ants_food", + "name" : "ant food storage", + "sym" : 79, + "color" : "green", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "ants_larvae", + "name" : "ant larva chamber", + "sym" : 79, + "color" : "white", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "ants_queen", + "name" : "ant queen chamber", + "sym" : 79, + "color" : "red", + "see_cost" : 5 + },{ + "type" : "overmap_terrain", + "id" : "tutorial", + "name" : "tutorial room", + "sym" : 79, + "color" : "cyan", + "see_cost" : 5 + } +] diff --git a/data/json/professions.json b/data/json/professions.json index 201048ae089a3..afc62793cecaf 100644 --- a/data/json/professions.json +++ b/data/json/professions.json @@ -1,19 +1,20 @@ [ { "type": "profession", - "ident": "unemployed", + "ident" : "unemployed", "name": "Unemployed", "description": "They say you don't have any \"useful skills\", but at least your clothes fit well.", "points": 0, "items": [ + "pockknife", + "matches", "jeans", "tshirt", "sneakers" ] - }, - { - "type": "profession", - "ident": "tailor", + },{ + "type" : "profession", + "ident" : "tailor", "name": "Tailor", "description": "You've made and adjusted clothing for some of the biggest names in town. Now, their undead bodies are trying to eat your brains. At least you'll be able to keep your own clothing repaired.", "points": 1, @@ -24,6 +25,8 @@ } ], "items": [ + "pockknife", + "matches", "polo_shirt", "blazer", "pants", @@ -31,14 +34,15 @@ "sewing_kit", "scissors" ] - }, - { - "type": "profession", - "ident": "labtech", + },{ + "type" : "profession", + "ident" : "labtech", "name": "Lab Technician", "description": "It was your first day in the lab when the cataclysm hit. You were evacuated with all the civilians, but at least you kept your lab gear.", "points": 1, "items": [ + "pockknife", + "matches", "dress_shirt", "pants", "boots", @@ -46,10 +50,9 @@ "gloves_rubber", "glasses_safety" ] - }, - { - "type": "profession", - "ident": "mechanic", + },{ + "type" : "profession", + "ident" : "mechanic", "name": "Wannabe Mechanic", "description": "Although you never got your driver's license, you've always loved cars. At least now you'll never be wanting for materials.", "points": 2, @@ -60,6 +63,8 @@ } ], "items": [ + "pockknife", + "matches", "tank_top", "jeans", "boots", @@ -67,10 +72,9 @@ "wrench", "mag_cars" ] - }, - { - "type": "profession", - "ident": "scoundrel", + },{ + "type" : "profession", + "ident" : "scoundrel", "name": "Scoundrel", "description": "Your flexible outlook on law has ensured your survival, but now what? You have some of your \"sundries\", and one additional level of melee.", "points": 2, @@ -81,6 +85,8 @@ } ], "items": [ + "pockknife", + "matches", "tank_top", "hoodie", "pants_cargo", @@ -89,10 +95,9 @@ "rolling_paper", "picklocks" ] - }, - { - "type": "profession", - "ident": "brawler", + },{ + "type" : "profession", + "ident" : "brawler", "name": "Back Alley Brawler", "description": "Your time spent fighting in back-alley brawls just might serve you well in the rough-and-tumble world left behind after the apocalypse.", "points": 2, @@ -107,15 +112,16 @@ } ], "items": [ + "pockknife", + "matches", "tank_top", "pants_cargo", "boots", "knuckle_brass" ] - }, - { - "type": "profession", - "ident": "soldier", + },{ + "type" : "profession", + "ident" : "soldier", "name": "Military Recruit", "description": "You were a high school drop-out with one goal in mind: to join the military. You finally got in, and now it's hell on Earth in cataclysmic proportions. You start out with some military gear, and a level in survival and firearms.", "points": 3, @@ -130,16 +136,17 @@ } ], "items": [ + "pockknife", + "matches", "pants_army", "army_top", "boots_combat", "knife_combat", "binoculars" ] - }, - { - "type": "profession", - "ident": "medic", + },{ + "type" : "profession", + "ident" : "medic", "name": "Pre-Med Student", "description": "You were a pre-med student just starting out in your medical career. You start with some bandages and a level in first aid.", "points": 1, @@ -150,6 +157,8 @@ } ], "items": [ + "pockknife", + "matches", "pants", "dress_shirt", "dress_shoes", @@ -157,10 +166,9 @@ "bandages", "bandages" ] - }, - { - "type": "profession", - "ident": "thug", + },{ + "type" : "profession", + "ident" : "thug", "name": "Mafia Enforcer", "description": "When it came to getting dirty, the boss knew you could be trusted to get the job done. From performing hits to \"attitude adjustment\", you were the best. Now, at the end of the world, you've finally found your place in society.", "points": 2, @@ -171,16 +179,17 @@ } ], "items": [ + "pockknife", + "matches", "suit", "bowhat", "dress_shoes", "cig", "mag_porn" ] - }, - { - "type": "profession", - "ident": "sheriff", + },{ + "type" : "profession", + "ident" : "sheriff", "name": "Local Sheriff", "description": "When you got the call about the disturbances, you came to the rescue only to realize you were in over your head, and needed rescuing yourself. You start with a level in firearms.", "points": 2, @@ -191,6 +200,8 @@ } ], "items": [ + "pockknife", + "matches", "pants_army", "socks", "badge_deputy", @@ -198,14 +209,15 @@ "boots", "holster" ] - }, - { - "type": "profession", - "ident": "smoker", + },{ + "type" : "profession", + "ident" : "smoker", "name": "Chain Smoker", "description": "Everyone at work knew you as the person who always had a cigarette or two in hand. Now, you're down to a single pack, and you hope you find more soon. You start out with a strong nicotine addiction.", "points": -1, "items": [ + "pockknife", + "matches", "pants", "dress_shirt", "dress_shoes", @@ -218,10 +230,9 @@ "type": "nicotine" } ] - }, - { - "type": "profession", - "ident": "salesman", + },{ + "type" : "profession", + "ident" : "salesman", "name": "Used Car Salesman", "description": "You would have sold your own mother for a dollar, and not felt guilty. In fact, you sold her a broken down beater right before the cataclysm. You start with bartering skills.", "points": 1, @@ -232,17 +243,20 @@ } ], "items": [ + "pockknife", + "matches", "suit", "dress_shoes" ] - }, - { - "type": "profession", - "ident": "homeless", + },{ + "type" : "profession", + "ident" : "homeless", "name": "Hobo", "description": "You lived on the streets your whole life because you would rather have a bottle of whiskey than a roof over your head. You start with a strong alcohol addiction.", "points": -4, "items": [ + "pockknife", + "matches", "pants", "whiskey", "can_beans" @@ -253,10 +267,9 @@ "type": "alcohol" } ] - }, - { - "type": "profession", - "ident": "hunter", + },{ + "type" : "profession", + "ident" : "hunter", "name": "Bow Hunter", "description": "Ever since you were a child you loved hunting, and you loved the challenge of hunting with a bow even more. You start with a level in archery and survival.", "points": 2, @@ -271,14 +284,15 @@ } ], "items": [ + "pockknife", + "matches", "army_top", "boots_steel", "jeans" ] - }, - { - "type": "profession", - "ident": "cworker", + },{ + "type" : "profession", + "ident" : "cworker", "name": "Handy Man", "description": "You used to work at a local hardware store, and you did a lot of home renovations yourself. You start with a level in construction.", "points": 2, @@ -289,43 +303,47 @@ } ], "items": [ + "pockknife", + "matches", "tank_top", "boots_steel", "jeans", "hammer", "tool_belt" ] - }, - { - "type": "profession", - "ident": "lumberjack", + },{ + "type" : "profession", + "ident" : "lumberjack", "name": "Lumberjack", "description": "You've worked in the woods your whole life, and start with some woodsman gear.", "points": 1, "items": [ + "pockknife", + "matches", "jeans", "boots", "hat_hunting", - "jacket_flannel" + "jacket_flannel", + "ax" ] - }, - { - "type": "profession", - "ident": "backpacker", + },{ + "type" : "profession", + "ident" : "backpacker", "name": "Backpacker", "description": "You've travelled for a living, sightseeing here and there, and living off your parents' trust fund. But now they're gone, and the only thing between you and death is the open road and your backpack.", "points": 2, "items": [ + "pockknife", + "matches", "backpack_leather", "jeans", "sneakers", "tshirt", "socks" ] - }, - { - "type": "profession", - "ident": "fastfoodcook", + },{ + "type" : "profession", + "ident" : "fastfoodcook", "name": "Fast Food Cook", "description": "You used to work at a fancy fast food joint a week ago, but now you show the meaning of \"fast\" food by running for your life. You start with a level in cooking.", "points": 1, @@ -336,15 +354,16 @@ } ], "items": [ + "pockknife", + "matches", "pants", "sneakers", "tshirt", "socks" ] - }, - { - "type": "profession", - "ident": "survivalist", + },{ + "type" : "profession", + "ident" : "survivalist", "name": "Survivalist", "description": "You were one of those guys who watched one too many survivalist shows. At least you're well-equipped for surviving on your own.", "points": 3, @@ -355,6 +374,8 @@ } ], "items": [ + "pockknife", + "matches", "shorts_cargo", "boots", "blazer", @@ -362,10 +383,9 @@ "socks", "backpack" ] - }, - { - "type": "profession", - "ident": "electrician", + },{ + "type" : "profession", + "ident" : "electrician", "name": "Electrician", "description": "You used to work for some small-time business owner doing minor electrical work, and you just so happened to be working on an evac shelter when the cataclysm struck. You start with a level in electronics.", "points": 2, @@ -376,14 +396,15 @@ } ], "items": [ + "pockknife", + "matches", "jumpsuit", "boots", "tool_belt" ] - }, - { - "type": "profession", - "ident": "hacker", + },{ + "type" : "profession", + "ident" : "hacker", "name": "Computer Hacker", "description": "Caffeine pills and all-nighters in front of a computer screen have given you some basic hacking skills. You start with a level in computers.", "points": 1, @@ -394,41 +415,45 @@ } ], "items": [ + "pockknife", + "matches", "pants", "tshirt", "sneakers" ] - }, - { - "type": "profession", - "ident": "student", + },{ + "type" : "profession", + "ident" : "student", "name": "Student", "description": "You were a high school student until the teachers literally tried to pick your brains. But on the bright side, you'll never have to write a test again.", "points": 2, "items": [ + "pockknife", + "matches", "pants", "tshirt", "sneakers", "ZSG", "backpack" ] - }, - { - "type": "profession", - "ident": "svictim", + },{ + "type" : "profession", + "ident" : "svictim", "name": "Shower Victim", "description": "You were in the middle of a nice shower when the cataclysm struck! You fled without so much as a towel.", "points": -1, "items": [ + ] - }, - { - "type": "profession", - "ident": "biker", + },{ + "type" : "profession", + "ident" : "biker", "name": "Biker", "description": "You spent most of your life on a Harley, and it's only natural you spend the rest of it riding one.", "points": 2, "items": [ + "pockknife", + "matches", "jeans", "tank_top", "chaps_leather", @@ -436,10 +461,9 @@ "bandana", "jacket_leather" ] - }, - { - "type": "profession", - "ident": "dancer", + },{ + "type" : "profession", + "ident" : "dancer", "name": "Ballroom Dancer", "description": "You used to be a ballroom dancer before the cataclysm, and now you use your skills to save your life. You start with a level in dodging.", "points": 1, @@ -450,26 +474,28 @@ } ], "items": [ + "pockknife", + "matches", "tux", "dress_shoes" ] - }, - { - "type": "profession", - "ident": "security", + },{ + "type" : "profession", + "ident" : "security", "name": "Security Guard", "description": "You worked for a small-time security company guarding local businesses, but there's nothing in the company policy for dealing with zombies.", "points": 1, "items": [ + "pockknife", + "matches", "pants", "poncho", "boots_combat", "flashlight" ] - }, - { - "type": "profession", - "ident": "tinkerer", + },{ + "type" : "profession", + "ident" : "tinkerer", "name": "Tinkerer", "description": "You've always loved tinkering with stuff. You know a little bit about mechanics, tailoring, electronics, and carpentry.", "points": 3, @@ -492,19 +518,22 @@ } ], "items": [ + "pockknife", + "matches", "pants", "tshirt", "tool_belt", "sneakers" ] - }, - { - "type": "profession", - "ident": "ddealer", + },{ + "type" : "profession", + "ident" : "ddealer", "name": "Drug Dealer", "description": "You've worked the streets since you were a kid, and now you use your street skills to survive. You kept your gun, but fired the last bullet during your escape.", "points": 2, "items": [ + "pockknife", + "matches", "jeans", "tshirt", "hoodie", @@ -512,10 +541,9 @@ "glock_19", "coke" ] - }, - { - "type": "profession", - "ident": "thug", + },{ + "type" : "profession", + "ident" : "thug", "name": "Street Thug", "description": "You've worked the streets since you were a kid, and now you use your street skills to survive. You've got your trusty switchblade, and the skill to use it.", "points": 2, @@ -526,6 +554,8 @@ } ], "items": [ + "pockknife", + "matches", "jeans", "tshirt", "hoodie", @@ -533,36 +563,39 @@ "gloves_fingerless", "switchblade" ] - }, - { - "type": "profession", - "ident": "groom", + },{ + "type" : "profession", + "ident" : "groom", "name": "Groom", "description": "You were about to marry your bride before the cataclysm, now you spend your days searching for her.", "points": 0, "items": [ + "pockknife", + "matches", "tux", "dress_shoes" ] - }, - { - "type": "profession", - "ident": "bride", + },{ + "type" : "profession", + "ident" : "bride", "name": "Bride", "description": "You chose a bad day for your wedding. You just barely escaped with your wedding dress intact.", "points": 0, "items": [ + "pockknife", + "matches", "dress_wedding", "dress_shoes" ] - }, - { - "type": "profession", - "ident": "punkgirl", + },{ + "type" : "profession", + "ident" : "punkgirl", "name": "Punk Rock Girl", "description": "The apocalypse has been your psychotic dream come true. Now that the system is dead, it's time to party among the bones of the world!", "points": 4, "items": [ + "pockknife", + "matches", "skirt", "corset", "trenchcoat", @@ -574,14 +607,15 @@ "mp3", "ref_lighter" ] - }, - { - "type": "profession", - "ident": "junkie", + },{ + "type" : "profession", + "ident" : "junkie", "name": "Junkie", "description": "Before the apocalypse, you turned to Heroin to soothe your many problems. Now, your habit is your only comfort and your only drive.", "points": -2, "items": [ + "pockknife", + "matches", "pants", "dress_shirt", "dress_shoes", @@ -594,10 +628,9 @@ "intensity": 10 } ] - }, - { - "type": "profession", - "ident": "chef", + },{ + "type" : "profession", + "ident" : "chef", "name": "Chef", "description": "Bork bork! Years in the kitchen have left you carrying a prodigious bulk, but you managed to escape the carnage with a butchers knife and only a small collection of stains on your uniform.", "points": 3, @@ -608,20 +641,23 @@ } ], "items": [ + "pockknife", + "matches", "knife_butcher", "hat_chef", "jacket_chef", "pants_checkered", "dress_shoes" ] - }, - { - "type": "profession", - "ident": "hooker", + },{ + "type" : "profession", + "ident" : "hooker", "name": "Prostitute", "description": "You were on your way to collect your check, when your pimp tried to kill you. You wish that it wasn't a common occurrence. You start with the last of your stash and a strong crack addiction.", "points": -4, "items": [ + "pockknife", + "matches", "skirt", "heels", "tank_top", @@ -634,10 +670,9 @@ "type": "crack" } ] - }, - { - "type": "profession", - "ident": "trapper", + },{ + "type" : "profession", + "ident" : "trapper", "name": "Trapper", "description": "You spent most of your life trapping with your father. Both of you made a decent living off of your catches, and trapping tutorials. You start with a skill in trapping.", "points": 1, @@ -648,16 +683,17 @@ } ], "items": [ + "pockknife", + "matches", "jeans", "boots", "hat_hunting", "jacket_flannel", "beartrap" ] - }, - { - "type": "profession", - "ident": "blacksmith", + },{ + "type" : "profession", + "ident" : "blacksmith", "name": "Blacksmith", "description": "You were going through your community college's metalsmithing program when the world ended. You start with a few related tools and some skill in fabrication.", "points": 2, @@ -668,6 +704,8 @@ } ], "items": [ + "pockknife", + "matches", "jeans", "boots", "tank_top", @@ -675,47 +713,49 @@ "fire_gauntlets", "hammer" ] - }, - { - "type": "profession", - "ident": "clown", + },{ + "type" : "profession", + "ident" : "clown", "name": "Clown", "description": "All you ever wanted was to make people laugh. Dropping out of school and performing at kids' parties was a dream come true until the world ended. There's precious few balloon animals in your future now.", "points": 0, "items": [ + "pockknife", + "matches", "clown_suit", "clownshoes" ] - }, - { - "type": "profession", - "ident": "lost_sub", + },{ + "type" : "profession", + "ident" : "lost_sub", "name": "Lost Submissive", "description": "Early in the rush to safety, you were separated from your master by cruel fate. Now you are on your own with nothing to your name but a suit of really kinky black leather. Unfortunately, there's no safewords in the apocalypse.", "points": 0, "items": [ + "pockknife", + "matches", "bondage_suit", "bondage_mask", "boots" ] - }, - { - "type": "profession", - "ident": "senior", + },{ + "type" : "profession", + "ident" : "senior", "name": "Senior Citizen", "description": "You haven't seen this much blood since the war. The whole world's gone crazy! They ate your grandkids! But dagnabbit, you'll make them all pay for what they've done.", "points": 1, "items": [ + "pockknife", + "matches", "dress_shirt", "pants_checkered", "dress_shoes", "cane", "pocketwatch" ] - }, - { - "type": "profession", - "ident": "paramedic", + },{ + "type" : "profession", + "ident" : "paramedic", "name": "Paramedic", "description": "Being a paramedic put you in a bad spot when it all ended. You had to fight your way out of a hospital full of infected to get to the shelter. You start with some skill in first aid.", "points": 2, @@ -726,20 +766,23 @@ } ], "items": [ + "pockknife", + "matches", "pants", "boots", "polo_shirt", "gloves_medical", "1st_aid" ] - }, - { - "type": "profession", - "ident": "cosplay", + },{ + "type" : "profession", + "ident" : "cosplay", "name": "Otaku", "description": "Late nights with friends watching anime and eating snacks has prepared you for the premier anime convention in the Northeast. It just had to be the day of the apocalypse. At least you were ready in case your costume tore.", "points": 4, "items": [ + "pockknife", + "matches", "shorts", "sneakers", "tank_top", @@ -750,14 +793,15 @@ "fur_collar", "cheeseburger" ] - }, - { - "type": "profession", - "ident": "goalie", + },{ + "type" : "profession", + "ident" : "goalie", "name": "Hockey Player", "description": "You were a minor-league hockey goalie before the rest of your team became zombies. It's just you and your hockey equipment versus the undead, but at least you can cross-check them now.", "points": 2, "items": [ + "pockknife", + "matches", "mask_hockey", "hockey_stick", "jersey", @@ -765,14 +809,15 @@ "sneakers", "puck" ] - }, - { - "type": "profession", - "ident": "batter", + },{ + "type" : "profession", + "ident" : "batter", "name": "Baseball Player", "description": "You were a batter on a local minor league team before the cataclysm. You escaped with your equipment, but how long can you survive until your innings are up?", "points": 2, "items": [ + "pockknife", + "matches", "bat", "helmet_ball", "dress_shirt", @@ -780,14 +825,15 @@ "cleats", "baseball" ] - }, - { - "type": "profession", - "ident": "linebacker", + },{ + "type" : "profession", + "ident" : "linebacker", "name": "Football Player", "description": "You were the star player for the local football team, adored by teammates and fans alike. Now they just adore your brains. You've still got your bulky football gear on.", "points": 4, "items": [ + "pockknife", + "matches", "football_armor", "tank_top", "helmet_football", @@ -795,14 +841,15 @@ "cleats", "football" ] - }, - { - "type": "profession", - "ident": "golfer", + },{ + "type" : "profession", + "ident" : "golfer", "name": "Golfer", "description": "A birdie is 1 under par, but how much is a zombie? Your clubhouse was overrun by the undead, and you fled with your trusty driving wedge.", "points": 1, "items": [ + "pockknife", + "matches", "hat_ball", "dress_shirt", "pants", @@ -812,7 +859,7 @@ }, { "type" : "profession", - "ident": "bionic_thief", + "ident" : "bionic_thief", "name": "Bionic Thief", "description": "You have done many high profile heists, but your gains mean nothing in this world. All you have left is your bionic lockpick that you keep powered via batteries.", "points": 4, @@ -822,6 +869,8 @@ "bio_power_storage_mkII" ], "items":[ + "pockknife", + "matches", "sunglasses", "jeans", "dress_shirt", @@ -830,7 +879,7 @@ }, { "type" : "profession", - "ident": "bionic_patient", + "ident" : "bionic_patient", "name": "Bionic Patient", "description": "Medical advances have saved your body from certain death. You are augmented with bionic muscles and sensors monitoring your blood powered by your own metabolism. Make the most of your second chance at life.", "points": 4, @@ -841,6 +890,8 @@ "bio_power_storage_mkII" ], "items":[ + "pockknife", + "matches", "jeans", "tshirt", "sneakers" @@ -848,9 +899,9 @@ }, { "type" : "profession", - "ident": "bionic_spy", + "ident" : "bionic_spy", "name": "Bionic Spy", - "description": "Your body has several bionics worth millions of dollars, paid for by public taxes. The government employed you as a spy: you have night vision, an alarm and a hacking module powered by your own metabolism.", + "description": "Your body has several bionics worth millions of dollars, paid for by public taxes. The government employed you as a spy: you have night vision, an alarm and a hacking module powered by a battery system.", "points": 6, "CBMs":[ "bio_fingerhack", @@ -860,6 +911,8 @@ "bio_power_storage_mkII" ], "items":[ + "pockknife", + "matches", "boots", "pants_army", "jacket_army", @@ -868,7 +921,7 @@ }, { "type" : "profession", - "ident": "faulty_bionic", + "ident" : "faulty_bionic", "name": "Failed Android", "description": "Your body is a wreck of bionic parts. You have a large capacity for power, but are filled with broken bionics. At least your ethanol power supply still works.", "points": 0, @@ -882,6 +935,8 @@ "bio_power_storage_mkII" ], "items":[ + "pockknife", + "matches", "sneakers", "jeans", "tshirt" @@ -894,6 +949,8 @@ "description" : "Your house has been demolished and your planet destroyed, but at least you still have your towel.", "points" : 0, "items" : [ + "pockknife", + "matches", "house_coat", "towel", "guidebook" diff --git a/data/json/recipes.json b/data/json/recipes.json index f6a29459ad7d7..6e8d11728faef 100644 --- a/data/json/recipes.json +++ b/data/json/recipes.json @@ -60,8 +60,153 @@ [ "battery", 200 ] ] ] +}, { + "type" : "recipe", + "result": "bowl_pewter", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 500, + "reversible": true, + "autolearn": false, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hammer", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "tin", 100 ] + ] + ] +},{ + "type" : "recipe", + "result": "silver", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 500, + "reversible": true, + "autolearn": false, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hammer", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "silver_small", 800 ] + ] + ] +},{ + "type" : "recipe", + "result": "small_relic", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 500, + "reversible": true, + "autolearn": false, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hammer", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "silver_small", 100 ] + ] + ] +},{ + "type" : "recipe", + "result": "badge_deputy", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 500, + "reversible": true, + "autolearn": false, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hammer", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "silver_small", 100 ] + ] + ] +},{ + "type" : "recipe", + "result": "necklace", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 500, + "reversible": true, + "autolearn": false, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hammer", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "silver_small", 100 ] + ] + ] },{ "type" : "recipe", + "result": "ring", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 500, + "reversible": true, + "autolearn": false, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hammer", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "gold_small", 50 ] + ] + ] +}, +{ + "type" : "recipe", "result": "usb_drive", "id_suffix": "uncraft", "category": "CC_NONCRAFT", @@ -752,7 +897,7 @@ "result": "spear_wood", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 2000, "reversible": false, @@ -791,7 +936,7 @@ "result": "javelin", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "survival", 1, "throw", 2 ], + "skills_required": [ "survival", 1, "throw", 2 ], "difficulty": 3, "time": 5000, "reversible": false, @@ -821,12 +966,45 @@ [ "duct_tape", 20 ] ] ] +},{ + "type" : "recipe", + "result": "javelin_iron", + "category": "CC_WEAPON", + "skill_used": "fabrication", + "skills_required": [ "traps", 1 ], + "difficulty": 2, + "time": 60000, + "reversible": false, + "autolearn": true, + "tools": [ [ ["hammer", -1], ["toolset", -1] ], + [ + ["tongs", -1] + ], + [ + ["chisel", -1] + ], + [ + ["anvil", -1] + ], + [ + ["forge", 50], ["char_forge", 10] + ] + ], + "components": + [ + [ + [ "javelin", 1 ] + ], + [ + ["scrap", 1] + ] + ] },{ "type" : "recipe", "result": "spear_knife", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 0, "time": 600, "reversible": true, @@ -857,7 +1035,7 @@ "result": "spear_steel", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "melee", 1 ], + "skills_required": [ "melee", 1 ], "difficulty": 1, "time": 60000, "reversible": false, @@ -894,7 +1072,7 @@ "result": "longbow", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty": 3, "time": 15000, "reversible": true, @@ -919,7 +1097,7 @@ "result": "selfbow", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 0, "time": 12000, "reversible": true, @@ -944,7 +1122,7 @@ "result": "shortbow", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty": 2, "time": 15000, "reversible": true, @@ -969,7 +1147,7 @@ "result": "reflexrecurvebow", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [[ "archery", 7 ]], + "skills_required": [[ "archery", 7 ]], "difficulty": 5, "time": 25000, "reversible": true, @@ -1047,7 +1225,7 @@ "result": "caltrops", "category": "CC_MISC", "skill_used": "fabrication", - "requires_skills": [ "traps", 1 ], + "skills_required": [ "traps", 1 ], "difficulty": 2, "time": 100000, "reversible": false, @@ -1082,7 +1260,7 @@ "id_suffix": "from wire", "category": "CC_MISC", "skill_used": "fabrication", - "requires_skills": [ "traps", 2 ], + "skills_required": [ "traps", 2 ], "difficulty": 3, "time": 300000, "reversible": false, @@ -1152,6 +1330,7 @@ ], [ [ "whiskey", 14 ], + [ "single_malt_whiskey", 14 ], [ "vodka", 14 ], [ "rum", 14 ], [ "tequila", 14 ], @@ -1218,7 +1397,7 @@ "result": "revolver_shotgun", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [[ "gun", 3 ]], + "skills_required": [[ "gun", 3 ]], "difficulty": 3, "time": 6000, "reversible": false, @@ -1267,7 +1446,7 @@ "result": "hand_crossbow", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty": 3, "time": 30000, "reversible": true, @@ -1315,7 +1494,7 @@ "result": "crossbow", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty": 3, "time": 15000, "reversible": true, @@ -1344,7 +1523,7 @@ "result": "huge_crossbow", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty": 6, "time": 60000, "reversible": true, @@ -1403,7 +1582,7 @@ "result": "rep_crossbow", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty": 3, "time": 45000, "reversible": true, @@ -1444,7 +1623,7 @@ "result": "rifle_22", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 12000, "reversible": true, @@ -1472,7 +1651,7 @@ "result": "pipe_shotgun", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 2, "time": 12000, "reversible": true, @@ -1520,7 +1699,7 @@ "result": "rifle_9mm", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 14000, "reversible": true, @@ -1548,7 +1727,7 @@ "result": "smg_9mm", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 18000, "reversible": true, @@ -1586,7 +1765,7 @@ "result": "smg_45", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 20000, "reversible": true, @@ -1624,7 +1803,7 @@ "result": "flamethrower_simple", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 6, "time": 12000, "reversible": true, @@ -1659,7 +1838,7 @@ "result": "launcher_simple", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "launcher", 3 ], + "skills_required": [ "launcher", 3 ], "difficulty": 6, "time": 6000, "reversible": true, @@ -1687,7 +1866,7 @@ "result": "pipe_launcher40mm", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "launcher", 3 ], + "skills_required": [ "launcher", 3 ], "difficulty": 6, "time": 8000, "reversible": false, @@ -1714,7 +1893,7 @@ "result": "u_shotgun", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "shotgun", 3 ], + "skills_required": [ "shotgun", 3 ], "difficulty": 6, "time": 8000, "reversible": false, @@ -1741,7 +1920,7 @@ "result": "shot_he", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 2000, "reversible": false, @@ -1815,7 +1994,7 @@ "result": "grenade", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty": 2, "time": 5000, "reversible": false, @@ -1851,6 +2030,48 @@ [ "gunpowder", 72 ] ] ] +},{ + "type" : "recipe", + "result": "mininuke_mod", + "category": "CC_AMMO", + "skill_used": "fabrication", + "skills_required": ["electronics", 7], + "difficulty": 8, + "time": 95000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + ["screwdriver", -1], + ["toolset", -1] + ], + [ + [ "wrench", -1 ], + [ "toolset", -1 ] + ], + [ + [ "hacksaw", -1 ], + [ "toolset", -1 ] + ], + [ + [ "boltcutters", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + ["mininuke", 1] + ], + [ + [ "cable", 2 ] + ], + [ + [ "circuit", 1 ] + ], + [ + [ "transponder", 1 ] + ] + ] },{ "type" : "recipe", "result": "chainsaw_off", @@ -1901,7 +2122,7 @@ "result": "smokebomb", "category": "CC_WEAPON", "skill_used": "cooking", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty": 3, "time": 7500, "reversible": false, @@ -1941,7 +2162,7 @@ "result": "gasbomb", "category": "CC_WEAPON", "skill_used": "cooking", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty": 4, "time": 8000, "reversible": false, @@ -1976,7 +2197,7 @@ "result": "nx17", "category": "CC_WEAPON", "skill_used": "electronics", - "requires_skills": [ "mechanics", 5 ], + "skills_required": [ "mechanics", 5 ], "difficulty": 8, "time": 40000, "reversible": true, @@ -2007,7 +2228,7 @@ "result": "mininuke", "category": "CC_WEAPON", "skill_used": "mechanics", - "requires_skills": [ "electronics", 5 ], + "skills_required": [ "electronics", 5 ], "difficulty": 10, "time": 40000, "reversible": true, @@ -2092,7 +2313,7 @@ "result": "bearing", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 4 ], + "skills_required": [ "gun", 4 ], "difficulty": 2, "time": 45000, "reversible": false, @@ -2141,7 +2362,7 @@ "result" : "shaft_wood_heavy", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 3, "time" : 5000, "reversible" : false, @@ -2163,7 +2384,7 @@ "result" : "shaft_metal", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 3, "time" : 5000, "reversible" : false, @@ -2192,7 +2413,7 @@ "result" : "arrowhead", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 3, "time" : 5000, "reversible" : false, @@ -2217,7 +2438,7 @@ "result" : "fletching", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 3, "time" : 5000, "reversible" : false, @@ -2240,7 +2461,7 @@ "result" : "arrow_fire_hardened", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 0, "time" : 5000, "reversible" : false, @@ -2263,7 +2484,7 @@ "result" : "arrow_field_point", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 1, "time" : 2000, "reversible" : false, @@ -2296,7 +2517,7 @@ "result" : "arrow_small_game", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty" : 2, "time" : 2000, "reversible" : false, @@ -2320,7 +2541,7 @@ "result" : "arrow_fire_hardened_fletched", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 3, "time" : 3000, "reversible" : false, @@ -2341,7 +2562,7 @@ "result" : "arrow_field_point_fletched", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 3, "time" : 3000, "reversible" : false, @@ -2362,7 +2583,7 @@ "result" : "flamable_arrow", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 3, "time" : 5000, "reversible" : false, @@ -2385,6 +2606,7 @@ ], [ [ "whiskey", 5 ], + [ "single_malt_whiskey", 5 ], [ "vodka", 5 ], [ "rum", 5 ], [ "tequila", 5 ], @@ -2398,7 +2620,7 @@ "result" : "arrow_wood", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 5, "time" : 3000, "reversible" : false, @@ -2422,7 +2644,7 @@ "result" : "arrow_metal_sharpened", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 5, "time" : 5000, "reversible" : false, @@ -2450,7 +2672,7 @@ "result" : "arrow_heavy_fire_hardened_fletched", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 5, "time" : 5000, "reversible" : false, @@ -2476,7 +2698,7 @@ "result" : "arrow_heavy_field_point_fletched", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 3 ], + "skills_required": [ "archery", 3 ], "difficulty" : 5, "time" : 5000, "reversible" : false, @@ -2503,7 +2725,7 @@ "result" : "arrow_wood_heavy", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 5 ], + "skills_required": [ "archery", 5 ], "difficulty" : 5, "time" : 3000, "reversible" : false, @@ -2527,7 +2749,7 @@ "result" : "arrow_metal", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [ "archery", 5 ], + "skills_required": [ "archery", 5 ], "difficulty" : 5, "time" : 5000, "reversible" : false, @@ -2564,7 +2786,7 @@ "result" : "arrow_exploding", "category" : "CC_AMMO", "skill_used" : "fabrication", - "requires_skills": [[ "archery", 5 ], [ "mechanics", 3 ]], + "skills_required": [[ "archery", 5 ], [ "mechanics", 3 ]], "difficulty" : 7, "time" : 7000, "reversible" : false, @@ -2598,7 +2820,7 @@ "result" : "exploding_arrow_warhead", "category" : "CC_MISC", "skill_used" : "fabrication", - "requires_skills": [[ "archery", 5 ], [ "mechanics", 3 ]], + "skills_required": [[ "archery", 5 ], [ "mechanics", 3 ]], "difficulty" : 7, "time" : 5000, "reversible" : false, @@ -2646,7 +2868,7 @@ "result": "quiver", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty": 2, "time": 10000, "reversible": true, @@ -2667,7 +2889,7 @@ "result": "quiver_large", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "archery", 2 ], + "skills_required": [ "archery", 2 ], "difficulty": 3, "time": 20000, "reversible": true, @@ -2699,7 +2921,7 @@ "result": "bolt_wood", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "archery", 1 ], + "skills_required": [ "archery", 1 ], "difficulty": 1, "time": 5000, "reversible": false, @@ -2721,7 +2943,7 @@ "result": "bolt_metal", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": ["archery", 3], + "skills_required": ["archery", 3], "difficulty": 3, "time": 10000, "reversible": false, @@ -2750,7 +2972,7 @@ "result": "bolt_explosive", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": ["archery", 3], + "skills_required": ["archery", 3], "difficulty": 4, "time": 10000, "reversible": false, @@ -2785,7 +3007,7 @@ "result": "9mm", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 25000, "reversible": false, @@ -2812,7 +3034,11 @@ ], [ [ "lead", 200 ], - [ "gold_small", 200 ] + [ "gold_small", 200 ], + [ "silver_small", 200 ], + [ "tin", 200 ], + [ "bismuth", 200 ], + [ "solder_wire", 200 ] ] ] },{ @@ -2820,7 +3046,7 @@ "result": "9mmP", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 12500, "reversible": false, @@ -2847,7 +3073,12 @@ ], [ [ "lead", 100 ], - [ "gold_small", 100 ] + [ "gold_small", 100 ], + [ "silver_small", 100 ], + [ "tin", 100 ], + [ "bismuth", 100 ], + [ "solder_wire", 100 ] + ] ] },{ @@ -2855,7 +3086,7 @@ "result": "9mmP2", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 5000, "reversible": false, @@ -2882,7 +3113,12 @@ ], [ [ "lead", 40 ], - [ "gold_small", 40 ] + [ "gold_small", 40 ], + [ "silver_small", 40 ], + [ "tin", 40 ], + [ "bismuth", 40 ], + [ "solder_wire", 40 ] + ] ] },{ @@ -2890,7 +3126,7 @@ "result": "38_special", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 25000, "reversible": false, @@ -2917,7 +3153,12 @@ ], [ [ "lead", 250 ], - [ "gold_small", 250 ] + [ "gold_small", 250 ], + [ "silver_small", 250 ], + [ "tin", 250 ], + [ "bismuth", 250 ], + [ "solder_wire", 250 ] + ] ] },{ @@ -2925,7 +3166,7 @@ "result": "38_super", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 12500, "reversible": false, @@ -2952,7 +3193,12 @@ ], [ [ "lead", 125 ], - [ "gold_small", 125 ] + [ "gold_small", 125 ], + [ "silver_small", 125 ], + [ "tin", 125 ], + [ "bismuth", 125 ], + [ "solder_wire", 125 ] + ] ] },{ @@ -2960,7 +3206,7 @@ "result": "40sw", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 30000, "reversible": false, @@ -2987,7 +3233,12 @@ ], [ [ "lead", 300 ], - [ "gold_small", 300 ] + [ "gold_small", 300 ], + [ "silver_small", 300 ], + [ "tin", 300 ], + [ "bismuth", 300 ], + [ "solder_wire", 300 ] + ] ] },{ @@ -2995,7 +3246,7 @@ "result": "10mm", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 25000, "reversible": false, @@ -3022,7 +3273,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ] ] },{ @@ -3030,7 +3286,7 @@ "result": "44magnum", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 25000, "reversible": false, @@ -3057,7 +3313,11 @@ ], [ [ "lead", 500 ], - [ "gold_small", 500 ] + [ "gold_small", 500 ], + [ "silver_small", 500 ], + [ "tin", 500 ], + [ "bismuth", 500 ] + ] ] },{ @@ -3065,7 +3325,7 @@ "result": "45_acp", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 25000, "reversible": false, @@ -3092,7 +3352,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ] ] },{ @@ -3100,7 +3365,7 @@ "result": "45_super", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 5000, "reversible": false, @@ -3127,7 +3392,12 @@ ], [ [ "lead", 100 ], - [ "gold_small", 100 ] + [ "gold_small", 100 ], + [ "silver_small", 100 ], + [ "tin", 100 ], + [ "bismuth", 100 ], + [ "solder_wire", 100 ] + ] ] },{ @@ -3135,7 +3405,7 @@ "result": "45_jhp", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 25000, "reversible": false, @@ -3162,7 +3432,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400] + [ "gold_small", 400], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ], [ [ "cu_pipe", 3] @@ -3173,7 +3448,7 @@ "result": "454_Casull", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 7 ], + "skills_required": [ "gun", 7 ], "difficulty": 7, "time": 10000, "reversible": false, @@ -3200,7 +3475,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ], [ [ "cu_pipe", 2 ] @@ -3211,7 +3491,7 @@ "result": "500_Magnum", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 7 ], + "skills_required": [ "gun", 7 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -3238,7 +3518,12 @@ ], [ [ "lead", 450 ], - [ "gold_small", 450] + [ "gold_small", 450], + [ "silver_small", 450 ], + [ "tin", 450 ], + [ "bismuth", 450 ], + [ "solder_wire", 450 ] + ], [ [ "cu_pipe", 2 ] @@ -3249,7 +3534,7 @@ "result": "57mm", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 50000, "reversible": false, @@ -3276,7 +3561,12 @@ ], [ [ "lead", 200 ], - [ "gold_small", 200 ] + [ "gold_small", 200 ], + [ "silver_small", 200 ], + [ "tin", 200 ], + [ "bismuth", 200 ], + [ "solder_wire", 200 ] + ] ] },{ @@ -3284,7 +3574,7 @@ "result": "46mm", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 50000, "reversible": false, @@ -3311,7 +3601,12 @@ ], [ [ "lead", 200 ], - [ "gold_small", 200 ] + [ "gold_small", 200 ], + [ "silver_small", 200 ], + [ "tin", 200 ], + [ "bismuth", 200 ], + [ "solder_wire", 200 ] + ] ] },{ @@ -3319,7 +3614,7 @@ "result": "762_m43", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 40000, "reversible": false, @@ -3346,7 +3641,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ] , + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ], [ [ "cu_pipe", 4 ] @@ -3357,7 +3657,7 @@ "result": "762_m87", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 40000, "reversible": false, @@ -3384,7 +3684,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ], [ [ "cu_pipe", 4 ] @@ -3395,7 +3700,7 @@ "result": "223", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 20000, "reversible": false, @@ -3426,7 +3731,12 @@ ], [ [ "lead", 80 ], - [ "gold_small", 80 ] + [ "gold_small", 80 ] , + [ "silver_small", 80 ], + [ "tin", 80 ], + [ "bismuth", 80 ], + [ "solder_wire", 80 ] + ] ] },{ @@ -3434,7 +3744,7 @@ "result": "556", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 20000, "reversible": false, @@ -3465,7 +3775,12 @@ ], [ [ "lead", 80 ], - [ "gold_small", 80 ] + [ "gold_small", 80 ] , + [ "silver_small", 80 ], + [ "tin", 80 ], + [ "bismuth", 80 ], + [ "solder_wire", 80 ] + ] ] },{ @@ -3473,7 +3788,7 @@ "result": "556_incendiary", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 6, "time": 15000, "reversible": false, @@ -3511,7 +3826,7 @@ "result": "270", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 10000, "reversible": false, @@ -3538,7 +3853,11 @@ ], [ [ "lead", 100 ], - [ "gold_small", 100 ] + [ "gold_small", 100 ], + [ "silver_small", 100 ], + [ "tin", 100 ], + [ "bismuth", 100 ], + [ "solder_wire", 100 ] ], [ [ "cu_pipe", 3 ] @@ -3549,7 +3868,7 @@ "result": "3006", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 5000, "reversible": false, @@ -3576,7 +3895,12 @@ ], [ [ "lead", 80 ], - [ "gold_small", 80 ] + [ "gold_small", 80 ] , + [ "silver_small", 80 ], + [ "tin", 80 ], + [ "bismuth", 80 ], + [ "solder_wire", 80 ] + ], [ [ "cu_pipe", 3 ] @@ -3587,7 +3911,7 @@ "result": "50_incendiary", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 7 ], + "skills_required": [ "gun", 7 ], "difficulty": 8, "time": 9000, "reversible": false, @@ -3616,7 +3940,13 @@ [ "gunpowder", 1000 ] ], [ - [ "lead", 200 ] + [ "lead", 200 ], + [ "gold_small", 200 ], + [ "silver_small", 200 ], + [ "tin", 200 ], + [ "bismuth", 200 ], + [ "solder_wire", 200 ] + ], [ [ "cu_pipe", 3 ] @@ -3627,7 +3957,7 @@ "result": "50ss", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 7 ], + "skills_required": [ "gun", 7 ], "difficulty": 8, "time": 5000, "reversible": false, @@ -3664,7 +3994,7 @@ "result": "50bmg", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 7 ], + "skills_required": [ "gun", 7 ], "difficulty": 8, "time": 5000, "reversible": false, @@ -3690,19 +4020,23 @@ [ "gunpowder", 1000 ] ], [ - [ "lead", 380 ] + [ "lead", 380 ], + [ "gold_small", 380 ], + [ "silver_small", 380 ], + [ "tin", 380 ], + [ "bismuth", 380 ], + [ "solder_wire", 380 ] ], [ [ "cu_pipe", 3 ] ] ] - },{ "type" : "recipe", "result": "3006_incendiary", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 7 ], + "skills_required": [ "gun", 7 ], "difficulty": 7, "time": 2500, "reversible": false, @@ -3739,7 +4073,7 @@ "result": "308", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 10000, "reversible": false, @@ -3766,7 +4100,12 @@ ], [ [ "lead", 120 ], - [ "gold_small", 120 ] + [ "gold_small", 120 ], + [ "silver_small", 120 ], + [ "tin", 120 ], + [ "bismuth", 120 ], + [ "solder_wire", 120 ] + ], [ [ "cu_pipe", 3 ] @@ -3777,7 +4116,7 @@ "result": "762_51", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 5, "time": 10000, "reversible": false, @@ -3804,7 +4143,12 @@ ], [ [ "lead", 120 ], - [ "gold_small", 120 ] + [ "gold_small", 120 ], + [ "silver_small", 120 ], + [ "tin", 120 ], + [ "bismuth", 120 ], + [ "solder_wire", 120 ] + ], [ [ "cu_pipe", 3 ] @@ -3815,7 +4159,7 @@ "result": "762_51_incendiary", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 6, "time": 5000, "reversible": false, @@ -3889,7 +4233,7 @@ "result": "shot_bird", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 2, "time": 12500, "reversible": false, @@ -3916,7 +4260,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ] ] },{ @@ -3924,7 +4273,7 @@ "result": "shot_00", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 12500, "reversible": false, @@ -3951,7 +4300,12 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] + ] ] },{ @@ -3959,7 +4313,7 @@ "result": "shot_slug", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 12500, "reversible": false, @@ -3986,7 +4340,11 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] ] ] },{ @@ -3994,7 +4352,7 @@ "result": "shot_flechette", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 2 ], + "skills_required": [ "gun", 2 ], "difficulty": 3, "time": 12500, "reversible": false, @@ -4024,8 +4382,8 @@ ], [ [ "nail", 160 ] - ] - ] + ] + ] },{ "type" : "recipe", "result": "water_clean", @@ -4104,7 +4462,7 @@ "id_suffix": "from batteries", "category": "CC_CHEM", "skill_used": "electronics", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty": 2, "time": 5000, "reversible": false, @@ -4126,7 +4484,7 @@ "id_suffix": "from electrolysis", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "electronics", 1 ], + "skills_required": [ "electronics", 1 ], "difficulty": 2, "time": 10000, "reversible": false, @@ -4167,6 +4525,7 @@ [ "pointy_stick", -1 ], [ "skewer", -1 ], [ "javelin", -1 ], + [ "javelin_iron", -1 ], [ "spear_knife", -1 ], [ "tongs", -1 ] ] @@ -4209,13 +4568,14 @@ ] },{ "type" : "recipe", - "result": "rehydrated_veggy", + "result": "rehydrated_hflesh", "category": "CC_FOOD", "skill_used": "cooking", "difficulty": 0, "time": 3000, "reversible": false, - "autolearn": true, + "autolearn": false, + "book_learn": [[ "cookbook_human", 1 ]], "tools": [ [ [ "pan", -1 ], @@ -4232,7 +4592,7 @@ ], "components": [ [ - [ "dry_veggy", 2 ] + [ "dry_hflesh", 2 ] ], [ [ "water_clean", 1 ] @@ -4240,7 +4600,7 @@ ] },{ "type" : "recipe", - "result": "rehydrated_fruit", + "result": "rehydrated_veggy", "category": "CC_FOOD", "skill_used": "cooking", "difficulty": 0, @@ -4263,7 +4623,7 @@ ], "components": [ [ - [ "dry_fruit", 2 ] + [ "dry_veggy", 2 ] ], [ [ "water_clean", 1 ] @@ -4271,10 +4631,41 @@ ] },{ "type" : "recipe", - "result": "meat_smoked", + "result": "rehydrated_fruit", "category": "CC_FOOD", "skill_used": "cooking", - "difficulty": 3, + "difficulty": 0, + "time": 3000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "pan", -1 ], + [ "pot", -1 ], + [ "rock_pot", -1 ], + [ "ceramic_cup", -1], + [ "ceramic_bowl", -1], + [ "glass", -1], + [ "glass_bowl", -1], + [ "jar_glass", -1], + [ "can_food", -1 ], + [ "canister_empty", -1 ] + ] + ], + "components": [ + [ + [ "dry_fruit", 2 ] + ], + [ + [ "water_clean", 1 ] + ] + ] +},{ + "type" : "recipe", + "result": "meat_smoked", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 3, "time": 12000, "reversible": false, "autolearn": true, @@ -4316,6 +4707,29 @@ [ "meat", 2 ] ] ] +},{ + "type" : "recipe", + "result": "dry_hflesh", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 2, + "time": 18000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 1 ]], + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "dehydrator", 50 ] + ] + ], + "components": [ + [ + [ "human_flesh", 2 ] + ] + ] },{ "type" : "recipe", "result": "protein_powder", @@ -4525,6 +4939,7 @@ [ "pointy_stick", -1 ], [ "skewer", -1 ], [ "javelin", -1 ], + [ "javelin_iron", -1 ], [ "spear_knife", -1 ], [ "tongs", -1 ] ] @@ -4684,6 +5099,7 @@ [ "pointy_stick", -1 ], [ "skewer", -1 ], [ "javelin", -1 ], + [ "javelin_iron", -1 ], [ "spear_knife", -1 ], [ "tongs", -1 ] ] @@ -5152,6 +5568,29 @@ [ "water_clean", 1 ] ] ] +},{ + "type" : "recipe", + "result": "atomic_coffee", + "category": "CC_DRINK", + "skill_used": "cooking", + "difficulty": 0, + "time": 4000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "atomic_coffeepot", -1 ] + ] + ], + "components": [ + [ + [ "coffee_raw", 1 ] + ], + [ + [ "water", 1 ], + [ "water_clean", 1 ] + ] + ] },{ "type" : "recipe", "result": "milk", @@ -5292,7 +5731,8 @@ "autolearn": true, "components": [ [ - [ "whiskey", 1 ] + [ "whiskey", 1 ], + [ "single_malt_whiskey", 1 ] ], [ [ "coffee_syrup", 1 ] @@ -5596,7 +6036,8 @@ [ "powder_eggs", 5 ] ], [ - [ "meat", 2 ] + [ "meat", 2 ], + [ "dry_meat", 2] ] ] },{ @@ -5622,23 +6063,23 @@ ], "components": [ [ - [ "broth", 2 ], - [ "broth_bone", 2 ] + [ "broth", 1 ], + [ "broth_bone", 1 ] ], [ - [ "meat", 2 ], - [ "meat_smoked", 2 ], - [ "dry_meat", 2 ], - [ "rehydrated_meat", 2 ], + [ "meat", 1 ], + [ "meat_smoked", 1 ], + [ "dry_meat", 1 ], + [ "rehydrated_meat", 1 ], [ "sausage", 1 ], - [ "bacon", 2 ], - [ "powder_eggs", 15 ] + [ "bacon", 1 ], + [ "powder_eggs", 10 ] ], [ - [ "veggy_wild", 2 ], - [ "veggy", 2 ], - [ "rehydrated_veggy", 2 ], - [ "dry_veggy", 2 ] + [ "veggy_wild", 1 ], + [ "veggy", 1 ], + [ "rehydrated_veggy", 1 ], + [ "dry_veggy", 1 ] ] ] },{ @@ -5945,7 +6386,8 @@ [ "cranberries", 1 ], [ "raspberries", 1 ], [ "blackberries", 1 ], - [ "pomegranate", 1 ] + [ "pomegranate", 1 ], + [ "dry_fruit", 1 ] ], [ [ "water", 1 ], @@ -6436,6 +6878,47 @@ [ "water_clean", 1 ] ] ] +},{ + "type" : "recipe", + "result": "pizza_human", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 3, + "time": 20000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 2 ]], + "tools": [ + [ + [ "hotplate", 8 ], + [ "char_smoker", 1 ], + [ "toolset", 1 ], + [ "fire", -1 ] + ], + [ + [ "pan", -1 ] + ] + ], + "components": [ + [ + [ "flour", 2 ] + ], + [ + [ "human_flesh", 2 ], + [ "human_canned", 1 ], + [ "hflesh_vac", 2 ], + [ "rehydrated_hflesh", 2 ], + [ "dry_hflesh", 2 ] + ], + [ + [ "sauce_red", 1 ], + [ "seasoning_italian", 5 ] + ], + [ + [ "water", 1 ], + [ "water_clean", 1 ] + ] + ] },{ "type" : "recipe", "result": "spaghetti_bolognese", @@ -6481,6 +6964,51 @@ [ "dry_meat", 2 ] ] ] +},{ + "type" : "recipe", + "result": "spaghetti_human", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 4, + "time": 20000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 3 ]], + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "hotplate", 6 ], + [ "char_smoker", 1 ], + [ "toolset", 1 ], + [ "fire", -1 ] + ], + [ + [ "pot", -1 ], + [ "rock_pot", -1 ] + ] + ], + "components": [ + [ + [ "spaghetti_raw", 1 ] + ], + [ + [ "water", 1 ], + [ "water_clean", 1 ] + ], + [ + [ "seasoning_italian", 5 ], + [ "sauce_red", 1 ], + [ "tomato", 2 ] + ], + [ + [ "human_flesh", 2 ], + [ "human_canned", 1 ], + [ "rehydrated_hflesh", 2 ], + [ "dry_hflesh", 2 ] + ] + ] },{ "type" : "recipe", "result": "spaghetti_pesto", @@ -6604,7 +7132,7 @@ "result": "poppy_sleep", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 5000, "reversible": false, @@ -6635,7 +7163,7 @@ "result": "poppy_pain", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 5000, "reversible": false, @@ -6666,7 +7194,7 @@ "result": "fungicide", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 5000, "reversible": false, @@ -6756,7 +7284,7 @@ "result": "mutagen", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 8, "time": 10000, "reversible": false, @@ -6795,7 +7323,7 @@ "result": "mutagen_plant", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -6828,7 +7356,7 @@ "result": "mutagen_insect", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -6863,7 +7391,7 @@ "result": "mutagen_spider", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -6896,7 +7424,7 @@ "result": "mutagen_slime", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -6930,7 +7458,7 @@ "result": "mutagen_fish", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -6966,7 +7494,7 @@ "result": "mutagen_rat", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -6999,7 +7527,7 @@ "result": "mutagen_beast", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7032,7 +7560,7 @@ "result": "mutagen_cattle", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7065,7 +7593,7 @@ "result": "mutagen_cephalopod", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7099,7 +7627,7 @@ "result": "mutagen_bird", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7132,7 +7660,7 @@ "result": "mutagen_lizard", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7165,7 +7693,7 @@ "result": "mutagen_troglobite", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7193,6 +7721,42 @@ [ "lye_powder", 100 ] ] ] +},{ + "type" : "recipe", + "result": "mutagen_medical", + "category": "CC_CHEM", + "skill_used": "cooking", + "requires_skills": [ "firstaid", 1 ], + "difficulty": 9, + "time": 10000, + "reversible": false, + "book_learn": [[ "recipe_medicalmut", 9 ]], + "autolearn": false, + "tools": [ + [ + [ "chemistry_set", 25 ], + [ "hotplate", 25 ], + [ "toolset", 2 ], + [ "fire", -1 ] + ], + [ + [ "chemistry_set", -1 ] + ] + ], + "components": [ + [ + [ "mutagen", 1 ] + ], + [ + [ "blood", 1 ] + ], + [ + [ "vitamins", 10 ] + ], + [ + [ "iodine", 10 ] + ] + ] },{ "type" : "recipe", "result": "canister_goo", @@ -7221,7 +7785,7 @@ "result": "purifier", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 9, "time": 10000, "reversible": false, @@ -7252,20 +7816,21 @@ ] ] },{ - "type" : "recipe", - "result": "disinfectant", + "type" : "recipe", + "result": "mutagen_alpha", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 2 ], - "difficulty": 4, - "time": 24000, + "requires_skills": [ "firstaid", 1 ], + "difficulty": 10, + "time": 15000, "reversible": false, - "autolearn": true, + "autolearn": false, + "book_learn": [[ "recipe_alpha", 9 ]], "tools": [ [ - [ "chemistry_set", 25 ], - [ "hotplate", 25 ], - [ "toolset", 2 ], + [ "chemistry_set", 37 ], + [ "hotplate", 37 ], + [ "toolset", 3 ], [ "fire", -1 ] ], [ @@ -7274,35 +7839,33 @@ ], "components": [ [ - [ "whiskey", 7 ], - [ "vodka", 7 ], - [ "rum", 7 ], - [ "tequila", 7 ], - [ "gin", 7 ], - [ "triple_sec", 7 ], - [ "bleach", 1 ] + [ "mutagen_slime", 1 ] ], [ - [ "water_clean", 1 ] + [ "mutagen_plant", 1 ] ], [ - [ "oxy_powder", 10 ] + [ "mutagen_bird", 1 ] + ], + [ + [ "purifier", 3 ] ] ] },{ - "type" : "recipe", - "result": "iodine", + "type" : "recipe", + "result": "mutagen_elfa", "category": "CC_CHEM", "skill_used": "cooking", "requires_skills": [ "firstaid", 1 ], - "difficulty": 6, - "time": 24000, + "difficulty": 10, + "time": 12500, "reversible": false, - "autolearn": true, + "autolearn": false, + "book_learn": [[ "recipe_elfa", 10 ]], "tools": [ [ - [ "chemistry_set", 25 ], - [ "hotplate", 25 ], + [ "chemistry_set", 31 ], + [ "hotplate", 31 ], [ "toolset", 2 ], [ "fire", -1 ] ], @@ -7312,15 +7875,155 @@ ], "components": [ [ - [ "disinfectant", 2 ], - [ "salt", 5 ] + [ "mutagen_slime", 2 ] + ], + [ + [ "mutagen_plant", 1 ] ], [ - [ "aspirin", 10 ] + [ "mutagen_bird", 1 ] ] ] },{ - "type" : "recipe", + "type" : "recipe", + "result": "mutagen_chimera", + "category": "CC_CHEM", + "skill_used": "cooking", + "requires_skills": [ "firstaid", 1 ], + "difficulty": 10, + "time": 15000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "recipe_chimera", 9]], + "tools": [ + [ + [ "chemistry_set", 37 ], + [ "hotplate", 37 ], + [ "toolset", 3 ], + [ "fire", -1 ] + ], + [ + [ "chemistry_set", -1 ] + ] + ], + "components": [ + [ + [ "mutagen_lizard", 1 ] + ], + [ + [ "mutagen_bird", 1 ] + ], + [ + [ "mutagen_beast", 1 ] + ], + [ + [ "mutagen_cattle", 1 ] + ] + ] +},{ + "type" : "recipe", + "result": "mutagen_raptor", + "category": "CC_CHEM", + "skill_used": "cooking", + "requires_skills": [ "firstaid", 1 ], + "difficulty": 10, + "time": 12500, + "reversible": false, + "autolearn": false, + "book_learn": [[ "recipe_raptor", 9 ]], + "tools": [ + [ + [ "chemistry_set", 31 ], + [ "hotplate", 31 ], + [ "toolset", 2 ], + [ "fire", -1 ] + ], + [ + [ "chemistry_set", -1 ] + ] + ], + "components": [ + [ + [ "mutagen_lizard", 1 ] + ], + [ + [ "mutagen_bird", 1 ] + ], + [ + [ "purifier", 1 ] + ] + ] +},{ + "type" : "recipe", + "result": "disinfectant", + "category": "CC_CHEM", + "skill_used": "cooking", + "skills_required": [ "firstaid", 2 ], + "difficulty": 4, + "time": 24000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "chemistry_set", 25 ], + [ "hotplate", 25 ], + [ "toolset", 2 ], + [ "fire", -1 ] + ], + [ + [ "chemistry_set", -1 ] + ] + ], + "components": [ + [ + [ "whiskey", 7 ], + [ "single_malt_whiskey", 7 ], + [ "vodka", 7 ], + [ "rum", 7 ], + [ "tequila", 7 ], + [ "gin", 7 ], + [ "triple_sec", 7 ], + [ "bleach", 1 ] + ], + [ + [ "water_clean", 1 ] + ], + [ + [ "oxy_powder", 10 ] + ] + ] +},{ + "type" : "recipe", + "result": "iodine", + "category": "CC_CHEM", + "skill_used": "cooking", + "skills_required": [ "firstaid", 1 ], + "difficulty": 6, + "time": 24000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "chemistry_set", 25 ], + [ "hotplate", 25 ], + [ "toolset", 2 ], + [ "fire", -1 ] + ], + [ + [ "chemistry_set", -1 ] + ] + ], + "components": [ + [ + [ "disinfectant", 2 ], + [ "salt", 5 ] + ], + [ + [ "aspirin", 10 ] + ] + ] +},{ + "type" : "recipe", "result": "pur_tablets", "category": "CC_CHEM", "skill_used": "cooking", @@ -7566,7 +8269,7 @@ "result": "gunpowder", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "cooking", 1 ], + "skills_required": [ "cooking", 1 ], "difficulty": 4, "time": 8000, "reversible": false, @@ -7598,7 +8301,7 @@ "result": "incendiary", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "cooking", 1 ], + "skills_required": [ "cooking", 1 ], "difficulty": 6, "time": 8000, "reversible": false, @@ -7629,7 +8332,7 @@ "result": "8mm_bootleg", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "cooking", 2 ], + "skills_required": [ "cooking", 2 ], "difficulty": 7, "time": 45000, "reversible": false, @@ -7671,7 +8374,7 @@ "result": "8mm_bootleg_jsp", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "cooking", 2 ], + "skills_required": [ "cooking", 2 ], "difficulty": 8, "time": 45000, "reversible": false, @@ -7711,13 +8414,141 @@ [ "cu_pipe", 5] ] ] +},{ + "type" : "recipe", + "result": "20x66_bootleg_shot", + "category": "CC_AMMO", + "skill_used": "fabrication", + "skills_required": [ "cooking", 2 ], + "difficulty": 8, + "time": 45000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "chemistry_set", 50 ], + [ "press", 50 ], + [ "hotplate", 50 ], + [ "toolset", 4 ] + ], + [ + [ "chemistry_set", -1 ] + ], + [ + [ "press", -1 ] + ] + ], + "components": [ + [ + [ "acid", 1 ] + ], + [ + [ "plastic_chunk", 4 ] + ], + [ + [ "oxy_powder", 120 ] + ], + [ + [ "incendiary", 120 ] + ], + [ + [ "lead", 160 ], + [ "gold_small", 160 ] + ] + ] +},{ + "type" : "recipe", + "result": "20x66_bootleg_flechette", + "category": "CC_AMMO", + "skill_used": "fabrication", + "skills_required": [ "cooking", 2 ], + "difficulty": 8, + "time": 45000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "chemistry_set", 50 ], + [ "press", 50 ], + [ "hotplate", 50 ], + [ "toolset", 4 ] + ], + [ + [ "chemistry_set", -1 ] + ], + [ + [ "boltcutters", -1 ] + ], + [ + [ "press", -1 ] + ] + ], + "components": [ + [ + [ "acid", 1 ] + ], + [ + [ "plastic_chunk", 4 ] + ], + [ + [ "oxy_powder", 120 ] + ], + [ + [ "incendiary", 120 ] + ], + [ + [ "nail", 240 ] + ] + ] +},{ + "type" : "recipe", + "result": "20x66_bootleg_slug", + "category": "CC_AMMO", + "skill_used": "fabrication", + "skills_required": [ "cooking", 2 ], + "difficulty": 8, + "time": 45000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "chemistry_set", 50 ], + [ "press", 50 ], + [ "hotplate", 50 ], + [ "toolset", 4 ] + ], + [ + [ "chemistry_set", -1 ] + ], + [ + [ "press", -1 ] + ] + ], + "components": [ + [ + [ "acid", 1 ] + ], + [ + [ "plastic_chunk", 4 ] + ], + [ + [ "oxy_powder", 160 ] + ], + [ + [ "incendiary", 160 ] + ], + [ + [ "lead", 240 ], + [ "gold_small", 240 ] + ] + ] }, { "type" : "recipe", "result": "smpistol_primer", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 45000, "reversible": false, @@ -7754,7 +8585,7 @@ "result": "lgpistol_primer", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 45000, "reversible": false, @@ -7791,7 +8622,7 @@ "result": "smrifle_primer", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 45000, "reversible": false, @@ -7828,7 +8659,7 @@ "result": "lgrifle_primer", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 45000, "reversible": false, @@ -7865,7 +8696,7 @@ "result": "shotgun_primer", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 3 ], + "skills_required": [ "gun", 3 ], "difficulty": 4, "time": 45000, "reversible": false, @@ -7902,7 +8733,7 @@ "result": "lead", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 2, "time": 30000, "reversible": false, @@ -8172,7 +9003,7 @@ "result": "battery", "category": "CC_ELECTRONIC", "skill_used": "fabrication", - "requires_skills": [ "electronics", 1 ], + "skills_required": [ "electronics", 1 ], "difficulty": 2, "time": 5000, "reversible": false, @@ -8191,7 +9022,6 @@ ], [ [ "steel_chunk", 1 ], - [ "scrap", 3 ], [ "knife_butter", 1 ], [ "knife_steak", 1 ], [ "bolt_steel", 1 ], @@ -8208,7 +9038,7 @@ "result": "battery_compartment", "category": "CC_ELECTRONIC", "skill_used": "fabrication", - "requires_skills": [ "electronics", 3 ], + "skills_required": [ "electronics", 3 ], "difficulty": 3, "time": 15000, "reversible": true, @@ -8238,7 +9068,7 @@ "result": "coilgun", "category": "CC_WEAPON", "skill_used": "electronics", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 25000, "reversible": true, @@ -8370,7 +9200,7 @@ "result": "water_purifier", "category": "CC_ELECTRONIC", "skill_used": "mechanics", - "requires_skills": [ "electronics", 1 ], + "skills_required": [ "electronics", 1 ], "difficulty": 3, "time": 25000, "reversible": true, @@ -8464,6 +9294,39 @@ [ "scrap", 2 ] ] ] +},{ + "type" : "recipe", + "result": "veh_tracker", + "category": "CC_ELECTRONIC", + "skill_used": "electronics", + "difficulty": 4, + "time": 30000, + "reversible": true, + "autolearn": true, + "tools": [ + [ + [ "screwdriver", -1 ], + [ "toolset", -1 ] + ], + [ + [ "soldering_iron", 14 ], + [ "toolset", 1 ] + ] + ], + "components": [ + [ + [ "amplifier", 1 ] + ], + [ + [ "transponder", 1 ] + ], + [ + [ "scrap", 5 ] + ], + [ + [ "cable", 10 ] + ] + ] },{ "type" : "recipe", "result": "two_way_radio", @@ -8508,7 +9371,7 @@ "result": "electrohack", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "computer", 1 ], + "skills_required": [ "computer", 1 ], "difficulty": 4, "time": 35000, "reversible": true, @@ -8580,7 +9443,7 @@ "result": "mp3", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "computer", 1 ], + "skills_required": [ "computer", 1 ], "difficulty": 5, "time": 40000, "reversible": true, @@ -8614,7 +9477,7 @@ "result": "portable_game", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": ["computer", 5], + "skills_required": ["computer", 5], "difficulty": 8, "time": 60000, "reversible": true, @@ -8724,7 +9587,7 @@ "result" : "adv_UPS_off", "category" : "CC_ELECTRONIC", "skill_used" : "electronics", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty" : 9, "time" : 85000, "reversible" : true, @@ -8762,7 +9625,7 @@ "result": "bio_power_storage", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -8798,7 +9661,7 @@ "result": "bio_power_storage_mkII", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 12, "time": 70000, "reversible": true, @@ -8835,7 +9698,7 @@ "result": "bio_solar", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -8870,7 +9733,7 @@ "result": "bio_batteries", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -8902,7 +9765,7 @@ "result": "bio_power_armor_interface", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -8934,7 +9797,7 @@ "result": "bio_power_armor_interface_mkII", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 9, "time": 50000, "reversible": true, @@ -8969,7 +9832,7 @@ "result": "bio_evap", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9002,7 +9865,7 @@ "result": "bio_laser", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 9, "time": 50000, "reversible": true, @@ -9038,7 +9901,7 @@ "result": "bio_flashlight", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -9074,7 +9937,7 @@ "result": "bio_water_extractor", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9110,7 +9973,7 @@ "result": "bio_armor_head", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -9149,7 +10012,7 @@ "result": "bio_armor_arms", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -9188,7 +10051,7 @@ "result": "bio_armor_torso", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -9227,7 +10090,7 @@ "result": "bio_armor_legs", "category": "CC_ELECTRONIC", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 6, "time": 50000, "reversible": true, @@ -9267,7 +10130,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9293,7 +10156,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9319,7 +10182,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9345,7 +10208,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9371,7 +10234,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9397,7 +10260,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9423,7 +10286,7 @@ "id_suffix": "uncraft", "category": "CC_NONCRAFT", "skill_used": "electronics", - "requires_skills": [ "firstaid", 5 ], + "skills_required": [ "firstaid", 5 ], "difficulty": 7, "time": 50000, "reversible": true, @@ -9644,7 +10507,7 @@ "result": "boots_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 40000, "reversible": false, @@ -9989,7 +10852,7 @@ "result": "pants_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 4, "time": 40000, "reversible": false, @@ -10185,27 +11048,81 @@ ], "components": [ [ - [ "fur", 3 ] + [ "fur", 3 ] + ] + ] +},{ + "type" : "recipe", + "result": "hot_pants", + "category": "CC_ARMOR", + "skill_used": "tailor", + "difficulty": 2, + "time": 38000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "needle_bone", 15 ], + [ "sewing_kit", 15 ] + ] + ], + "components": [ + [ + [ "rag", 4 ] + ] + ] +},{ + "type" : "recipe", + "result": "loincloth", + "category": "CC_ARMOR", + "skill_used": "tailor", + "difficulty": 0, + "time": 3000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "needle_bone", 12 ], + [ "sewing_kit", 12 ] + ] + ], + "components": [ + [ + [ "rag", 4 ] + ] + ] +},{ + "type" : "recipe", + "result": "loincloth_fur", + "category": "CC_ARMOR", + "skill_used": "tailor", + "difficulty": 0, + "time": 1000, + "reversible": false, + "autolearn": true, + "components": [ + [ + [ "fur", 1 ] ] ] },{ "type" : "recipe", - "result": "hot_pants", + "result": "loincloth_leather", "category": "CC_ARMOR", "skill_used": "tailor", - "difficulty": 2, - "time": 38000, + "difficulty": 0, + "time": 3000, "reversible": false, "autolearn": true, "tools": [ [ - [ "needle_bone", 15 ], - [ "sewing_kit", 15 ] + [ "needle_bone", 12 ], + [ "sewing_kit", 12 ] ] ], "components": [ [ - [ "rag", 4 ] + [ "leather", 2 ] ] ] },{ @@ -10275,7 +11192,7 @@ "result": "trenchcoat_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 3, "time": 200000, "reversible": false, @@ -10316,7 +11233,7 @@ "result": "coat_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 4, "time": 100000, "reversible": false, @@ -10431,7 +11348,7 @@ "result": "gloves_fingerless_mod", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "fabrication", 1 ], + "skills_required": [ "fabrication", 1 ], "difficulty": 1, "time": 24000, "reversible": false, @@ -10482,7 +11399,7 @@ "result": "gloves_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 16000, "reversible": false, @@ -10669,7 +11586,7 @@ "result": "scarf_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 1, "time": 5000, "reversible": true, @@ -10764,6 +11681,9 @@ "time": 20000, "reversible": true, "autolearn": true, + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], "tools": [ [ [ "welder", 56 ], @@ -10794,7 +11714,7 @@ "result": "goggles_nv", "category": "CC_ARMOR", "skill_used": "electronics", - "requires_skills": [ "tailor", 1 ], + "skills_required": [ "tailor", 1 ], "difficulty": 5, "time": 40000, "reversible": true, @@ -10826,7 +11746,7 @@ "result": "hat_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 40000, "reversible": false, @@ -11035,7 +11955,7 @@ "category": "CC_ARMOR", "skill_used": "cooking", "difficulty": 3, - "requires_skills": [ "tailor", 3 ], + "skills_required": [ "tailor", 3 ], "time": 60000, "reversible": false, "autolearn": true, @@ -11072,7 +11992,7 @@ "category": "CC_ARMOR", "skill_used": "fabrication", "difficulty": 2, - "requires_skills": [ "tailor", 3 ], + "skills_required": [ "tailor", 3 ], "time": 28000, "reversible": false, "autolearn": true, @@ -11183,7 +12103,7 @@ "result": "fur_blanket", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 1, "time": 50000, "reversible": true, @@ -11247,7 +12167,7 @@ "result": "cloak_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 25000, "reversible": true, @@ -11288,7 +12208,7 @@ "result": "sleeping_bag", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 4, "time": 75000, "reversible": true, @@ -11309,7 +12229,7 @@ "result": "sleeping_bag_fur", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 5, "time": 75000, "reversible": true, @@ -11378,6 +12298,40 @@ [ "bone", 1 ] ] ] +},{ + "type" : "recipe", + "result": "primitive_knife", + "category": "CC_MISC", + "skill_used": "survival", + "difficulty": 0, + "time": 60000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "rock", -1 ], + [ "primitive_hammer", -1 ], + [ "hammer", -1 ], + [ "hatchet", -1 ], + [ "toolset", -1 ] + ] + ], + "components": [ + [ + [ "stick", 1 ], + [ "2x4", 1 ], + [ "bone", 1 ] + ], + [ + [ "rock", 1 ] + ], + [ + [ "string_6", 1 ], + [ "sinew", 20 ], + [ "thread", 20 ], + [ "plant_fibre", 20 ] + ] + ] },{ "type" : "recipe", "result": "digging_stick", @@ -11428,7 +12382,7 @@ "result": "leather_pouch", "category": "CC_ARMOR", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 10000, "reversible": false, @@ -11456,7 +12410,7 @@ "result": "rock_pot", "category": "CC_MISC", "skill_used": "survival", - "requires_skills": [ "cooking", 1 ], + "skills_required": [ "cooking", 1 ], "difficulty": 2, "time": 20000, "reversible": false, @@ -11486,7 +12440,7 @@ "result": "primitive_shovel", "category": "CC_MISC", "skill_used": "survival", - "requires_skills": [ "carpentry", 1 ], + "skills_required": [ "carpentry", 1 ], "difficulty": 2, "time": 60000, "reversible": false, @@ -11520,7 +12474,7 @@ "result": "primitive_axe", "category": "CC_MISC", "skill_used": "survival", - "requires_skills": [ "carpentry", 1 ], + "skills_required": [ "carpentry", 1 ], "difficulty": 3, "time": 60000, "reversible": false, @@ -11571,7 +12525,7 @@ "result": "waterskin", "category": "CC_MISC", "skill_used": "tailor", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 2, "time": 30000, "reversible": false, @@ -11617,7 +12571,7 @@ "result": "shelter_kit", "category": "CC_MISC", "skill_used": "survival", - "requires_skills": [ "carpentry", 1 ], + "skills_required": [ "carpentry", 1 ], "difficulty": 2, "time": 50000, "reversible": false, @@ -11649,7 +12603,7 @@ "id_suffix": "repair", "category": "CC_MISC", "skill_used": "survival", - "requires_skills": [ "tailor", 1 ], + "skills_required": [ "tailor", 1 ], "difficulty": 0, "time": 20000, "reversible": false, @@ -11683,7 +12637,7 @@ "result": "fur_rollmat", "category": "CC_MISC", "skill_used": "survival", - "requires_skills": [ "tailor", 1 ], + "skills_required": [ "tailor", 1 ], "difficulty": 1, "time": 20000, "reversible": true, @@ -11708,7 +12662,7 @@ "result": "snare_trigger", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 0, "time": 2000, "reversible": false, @@ -11727,7 +12681,7 @@ "result": "light_snare_kit", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 1, "time": 5000, "reversible": true, @@ -11745,7 +12699,7 @@ "result": "heavy_snare_kit", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 3, "time": 8000, "reversible": true, @@ -12211,12 +13165,43 @@ [ "rope_6", 5 ] ] ] +},{ + "type" : "recipe", + "result": "wire", + "category": "CC_MISC", + "skill_used": "fabrication", + "difficulty": 3, + "time": 30000, + "reversible": false, + "autolearn": true, + "tools": [ [ ["hammer", -1], ["toolset", -1] ], + [ + ["tongs", -1] + ], + [ + ["chisel", -1] + ], + [ + ["anvil", -1] + ], + [ + ["crucible", -1] + ], + [ + ["forge", 50], ["char_forge", 10] + ] + ], + "components": + [ + [ + [ "scrap", 1 ] + ] + ] },{ "type" : "recipe", "result": "wire_barbed", "category": "CC_MISC", "skill_used": "fabrication", - "requires_skills": [ "carpentry", 1 ], "difficulty": 2, "time": 8000, "reversible": false, @@ -12257,6 +13242,7 @@ [ "vodka", 7 ], [ "rum", 7 ], [ "whiskey", 7 ], + [ "single_malt_whiskey", 7 ], [ "tequila", 7 ], [ "gin", 7 ], [ "triple_sec", 7 ] @@ -12282,6 +13268,7 @@ [ "vodka", 7 ], [ "rum", 7 ], [ "whiskey", 7 ], + [ "single_malt_whiskey", 7 ], [ "tequila", 7 ], [ "gin", 7 ], [ "triple_sec", 7 ] @@ -12793,7 +13780,7 @@ "result": "beartrap", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "mechanics", 3 ], + "skills_required": [ "mechanics", 3 ], "difficulty": 2, "time": 3000, "reversible": true, @@ -12817,7 +13804,7 @@ "result": "crossbow_trap", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty": 3, "time": 4500, "reversible": true, @@ -12840,7 +13827,7 @@ "result": "shotgun_trap", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "mechanics", 1 ], + "skills_required": [ "mechanics", 1 ], "difficulty": 3, "time": 5000, "reversible": true, @@ -12862,7 +13849,7 @@ "result": "blade_trap", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "mechanics", 3 ], + "skills_required": [ "mechanics", 3 ], "difficulty": 4, "time": 8000, "reversible": true, @@ -12909,7 +13896,7 @@ "result": "landmine", "category": "CC_MISC", "skill_used": "traps", - "requires_skills": [ "mechanics", 3 ], + "skills_required": [ "mechanics", 3 ], "difficulty": 5, "time": 10000, "reversible": false, @@ -13020,6 +14007,7 @@ [ "vodka", 7 ], [ "rum", 7 ], [ "whiskey", 7 ], + [ "single_malt_whiskey", 7 ], [ "tequila", 7 ], [ "gin", 7 ], [ "triple_sec", 7 ], @@ -13031,7 +14019,7 @@ "result": "arm_splint", "category": "CC_MISC", "skill_used": "firstaid", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 1, "time": 1000, "reversible": false, @@ -13060,7 +14048,7 @@ "result": "leg_splint", "category": "CC_MISC", "skill_used": "firstaid", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 1, "time": 1000, "reversible": false, @@ -13089,7 +14077,7 @@ "result": "suppressor", "category": "CC_MISC", "skill_used": "mechanics", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 1, "time": 650, "reversible": false, @@ -13114,7 +14102,7 @@ "result": "brass_catcher", "category": "CC_MISC", "skill_used": "tailor", - "requires_skills": [ "gun", 1 ], + "skills_required": [ "gun", 1 ], "difficulty": 3, "time": 65000, "reversible": true, @@ -13135,7 +14123,7 @@ "result": "pheromone", "category": "CC_MISC", "skill_used": "cooking", - "requires_skills": [ "survival", 1 ], + "skills_required": [ "survival", 1 ], "difficulty": 3, "time": 1200, "reversible": false, @@ -13161,7 +14149,7 @@ "result": "laser_pack", "category": "CC_MISC", "skill_used": "fabrication", - "requires_skills": [ "electronics", 5 ], + "skills_required": [ "electronics", 5 ], "difficulty": 3, "time": 10000, "reversible": true, @@ -13185,7 +14173,7 @@ "result": "bot_manhack", "category": "CC_MISC", "skill_used": "mechanics", - "requires_skills": [[ "electronics", 5 ], [ "computer", 5 ]], + "skills_required": [[ "electronics", 5 ], [ "computer", 5 ]], "difficulty": 6, "time": 8000, "reversible": true, @@ -13220,7 +14208,7 @@ "result": "bot_turret", "category": "CC_MISC", "skill_used": "mechanics", - "requires_skills": [[ "electronics", 5 ], [ "computer", 5 ], [ "gun", 3 ]], + "skills_required": [[ "electronics", 5 ], [ "computer", 5 ], [ "gun", 3 ]], "difficulty": 7, "time": 9000, "reversible": true, @@ -13456,6 +14444,44 @@ [ "salt", 1 ] ] ] +},{ + "type" : "recipe", + "result": "bag_hflesh_vac", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 4, + "time": 20000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 1 ]], + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "vac_sealer", 10 ] + ], + [ + [ "pot", -1 ], + [ "rock_pot", -1 ] + ] + ], + "components": [ + [ + [ "water", 1 ], + [ "water_clean", 1 ] + ], + [ + [ "bag_plastic", 1 ] + ], + [ + [ "human_flesh", 2 ] + ], + [ + [ "salt_water", 1 ], + [ "salt", 1 ] + ] + ] },{ "type" : "recipe", "result": "bag_veggy_vac", @@ -13701,7 +14727,6 @@ "result": "sword_wood", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "melee", 1 ], "difficulty": 0, "time": 25000, "reversible": false, @@ -13720,7 +14745,6 @@ "result": "sword_nail", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": ["survival", 1], "difficulty": 2, "time": 5000, "reversible": false, @@ -13750,7 +14774,6 @@ "result": "sword_crude", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": ["survival", 2], "difficulty": 2, "time": 20000, "reversible": false, @@ -14306,11 +15329,8 @@ ["metal_tank", 1] ], [ - ["steel_chunk", 1], - [ "scrap", 3 ] - ], - [ - ["scrap", 6] + ["steel_chunk", 3], + [ "scrap", 9 ] ] ] },{ @@ -14356,11 +15376,55 @@ ["metal_tank", 1] ], [ - ["steel_chunk", 2], - [ "scrap", 6] + ["steel_chunk", 3], + [ "scrap", 9] + ] + ] +},{ + "type" : "recipe", + "result": "mininuke_launcher", + "category": "CC_WEAPON", + "skill_used": "mechanics", + "skill_sec": ["gun",3], + "difficulty": 8, + "time": 24000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + ["goggles_welding", -1] + ], + [ + ["hacksaw", -1], ["toolset", -1] ], [ - ["scrap", 4] + ["screwdriver", -1], ["toolset", -1] + ], + [ + ["wrench", -1], ["toolset", -1] + ], + [ + ["welder", 200], ["welder_crude", 300], ["toolset", 8] + ] + ], + "components": [ + [ + ["pipe", 2], + ["rebar", 2] + ], + [ + ["duct_tape", 200] + ], + [ + ["2x4", 2], + ["stick", 2 ] + ], + [ + ["spring", 2] + ], + [ + ["steel_chunk", 3], + ["scrap", 9] ] ] },{ @@ -14454,7 +15518,7 @@ },{ "type" : "recipe", "result": "rebar_rail", - "category": "CC_WEAPON", + "category": "CC_AMMO", "skill_used": "fabrication", "difficulty": 1, "time": 36000, @@ -14480,7 +15544,7 @@ },{ "type" : "recipe", "result": "steel_rail", - "category": "CC_MISC", + "category": "CC_AMMO", "skill_used": "fabrication", "difficulty": 2, "time": 30000, @@ -14588,7 +15652,7 @@ "result": "fertilizer_liquid", "category": "CC_CHEM", "skill_used": "cooking", - "skills_required": ["surivival", 2], + "skills_required": ["survival", 2], "difficulty": 3, "time": 20000, "reversible": false, @@ -14633,7 +15697,7 @@ "result": "rock_quern", "category": "CC_MISC", "skill_used": "fabrication", - "requires_skills": [ ["survival", 1], ["mechanics", 2], ["cooking", 2] ], + "skills_required": [ ["survival", 1], ["mechanics", 2], ["cooking", 2] ], "difficulty": 2, "time": 5000, "reversible": false, @@ -14856,13 +15920,13 @@ "qualities":[ {"id":"CUT","level":1,"amount":1} ], - "tools": [ - [ - ["rock", -1], + "tools": [ + [ + ["rock", -1], ["primitive_hammer", -1], ["hammer", -1], ["hatchet", -1], - ["toolset", -1] + ["toolset", -1] ] ], "components": [ @@ -14906,7 +15970,7 @@ [ ["fire", -1] ] ], "components": [ [ ["meat_tainted", 12] ], [ ["vodka", 2] ], - [ ["whiskey", 2] ], + [ ["whiskey", 2], [ "single_malt_whiskey", 2 ] ], [ ["rum", 2] ] ] },{ "type" : "recipe", @@ -14952,6 +16016,51 @@ [ "ketchup", 1 ], [ "mustard", 1], [ "mayonnaise", 1], [ "bacon", 1 ], [ "seasoning_salt", 15] ] ] +},{ + "type" : "recipe", + "result": "cheeseburgerhuman", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 3, + "time": 9000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 3 ]], + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "hotplate", 10 ], + [ "char_smoker", 1 ], + [ "toolset", 1 ], + [ "fire", -1 ] + ], + [ + [ "pan", -1 ],[ "pot", -1 ],[ "rock_pot", -1 ] + ] + ], + "components": [ + [ + [ "human_flesh", 1 ] + ], + [ + [ "bread", 2 ], + [ "hardtack", 4] + ], + [ + [ "cheese", 2 ], [ "can_cheese", 1] + ], + [ + [ "pickle", 1], + [ "veggy_pickled", 1], + [ "onion", 1], + [ "tomato", 1] + ], + [ + [ "ketchup", 1 ], [ "mustard", 1], [ "mayonnaise", 1], [ "bacon", 1 ], [ "seasoning_salt", 15] + ] + ] },{ "type" : "recipe", "result": "forge", @@ -15807,6 +16916,34 @@ [ "stick", 1 ] ] ] +},{ + "type" : "recipe", + "result" : "lawn_dart", + "category" : "CC_WEAPON", + "skill_used" : "fabrication", + "skills_required" : ["throw", 1], + "difficulty" : 8, + "time" : 30000, + "reversible" : false, + "autolearn" : true, + "tools" : [ [ ["rock", -1], ["primitive_hammer", -1], + ["hammer", -1], ["hatchet", -1], ["toolset", -1] ], + [ + ["mold_plastic", -1] ], + [ + ["hotplate", 10], + ["toolset", 1], + ["fire", -1] + ] + ], + "components" : [ + [ + ["plastic_chunk", 4] + ], + [ + [ "scrap", 2 ] + ] + ] },{ "type" : "recipe", "result": "switchblade", @@ -15965,7 +17102,7 @@ "result": "q_staff", "category": "CC_WEAPON", "skill_used": "fabrication", - "requires_skills": [ "bashing", 2 ], + "skills_required": [ "bashing", 2 ], "difficulty": 2, "time": 18000, "reversible": false, @@ -16038,9 +17175,47 @@ [ "tazer", 1 ] ], [ - [ "cable", 10 ] + [ "cable", 10 ] + ] + ] +},{ + "type" : "recipe", + "result": "blade", + "id_suffix": "from steel", + "category": "CC_MISC", + "skill_used": "fabrication", + "difficulty": 2, + "time": 60000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + ["hammer", -1], + ["toolset", -1] + ], + [ + ["tongs", -1] + ], + [ + ["chisel", -1] + ], + [ + ["swage", -1] + ], + [ + ["anvil", -1] + ], + [ + ["forge", 100], ["char_forge", 20] + ] + ], + "components": + [ + [ + ["steel_chunk", 1], + ["scrap", 3] + ] ] - ] },{ "type" : "recipe", "result": "wrench", @@ -16075,6 +17250,44 @@ [ "scrap", 12 ] ] ] +},{ + "type" : "recipe", + "result": "jack", + "category": "CC_MISC", + "skill_used": "fabrication", + "difficulty": 5, + "skills_required" : [ "mechanics", 3 ], + "time": 300000, + "reversible": false, + "autolearn": true, + "tools": [ [ ["hammer", -1], ["toolset", -1] ], + [ + ["tongs", -1] + ], + [ + ["chisel", -1] + ], + [ + ["anvil", -1] + ], + [ + ["crucible", -1] + ], + [ + ["swage", -1] + ], + [ + ["forge", 200], ["char_forge", 40] + ] + ], + "components": + [ + [ + [ "steel_lump", 1 ], + [ "steel_chunk", 4 ], + [ "scrap", 12 ] + ] + ] },{ "type" : "recipe", "result": "crowbar", @@ -16451,7 +17664,7 @@ "result": "chain", "category": "CC_MISC", "skill_used": "fabrication", - "difficulty": 9, + "difficulty": 6, "time": 520000, "reversible": false, "autolearn": true, @@ -16921,6 +18134,48 @@ [ "ketchup", 1 ], [ "mustard", 1], [ "mayonnaise", 1], [ "bacon", 1 ], [ "seasoning_salt", 15 ] ] ] +},{ + "type" : "recipe", + "result": "bobburger", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 3, + "time": 8000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 1 ]], + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "hotplate", 10 ], + [ "char_smoker", 1 ], + [ "toolset", 1 ], + [ "fire", -1 ] + ], + [ + [ "pan", -1 ],[ "pot", -1 ],[ "rock_pot", -1 ] + ] + ], + "components": [ + [ + [ "human_flesh", 1 ] + ], + [ + [ "bread", 2 ], + [ "hardtack", 4] + ], + [ + [ "pickle", 1], + [ "veggy_pickled", 1], + [ "onion", 1], + [ "tomato", 1] + ], + [ + [ "ketchup", 1 ], [ "mustard", 1], [ "mayonnaise", 1], [ "bacon", 1 ], [ "seasoning_salt", 15 ] + ] + ] },{ "type" : "recipe", "result": "blt", @@ -16959,6 +18214,71 @@ [ "tomato", 1 ] ] ] +},{ + "type" : "recipe", + "result": "sandwich_t", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 1, + "time": 6000, + "reversible": false, + "autolearn": true, + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "hotplate", 10 ], + [ "char_smoker", 1 ], + [ "toolset", 1 ], + [ "fire", -1 ] + ], + [ + [ "pan", -1 ],[ "pot", -1 ],[ "rock_pot", -1 ] + ] + ], + "components": [ + [ + [ "bread", 2 ], + [ "hardtack", 4] + ], + [ + [ "meat", 1 ] + ] + ] +},{ + "type" : "recipe", + "result": "sandwich_human", + "category": "CC_FOOD", + "skill_used": "cooking", + "difficulty": 1, + "time": 6000, + "reversible": false, + "autolearn": false, + "book_learn": [[ "cookbook_human", 1 ]], + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], + "tools": [ + [ + [ "hotplate", 10 ], + [ "char_smoker", 1 ], + [ "toolset", 1 ], + [ "fire", -1 ] + ], + [ + [ "pan", -1 ],[ "pot", -1 ],[ "rock_pot", -1 ] + ] + ], + "components": [ + [ + [ "bread", 2 ], + [ "hardtack", 4] + ], + [ + [ "human_flesh", 1 ] + ] + ] },{ "type" : "recipe", "result": "ketchup", @@ -17197,18 +18517,10 @@ "time": 300000, "reversible": false, "autolearn": true, + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], "tools": [ - [ - [ "scissors", -1 ], - [ "knife_steak", -1 ], - [ "knife_combat", -1 ], - [ "knife_butcher", -1 ], - [ "pockknife", -1 ], - [ "scalpel", -1 ], - [ "machete", -1 ], - [ "broadsword", -1 ], - [ "toolset", -1 ] - ], [ [ "welder", 28 ], [ "soldering_iron", 28 ], @@ -17260,18 +18572,10 @@ "time": 45000, "reversible": false, "autolearn": true, + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], "tools": [ - [ - [ "scissors", -1 ], - [ "knife_steak", -1 ], - [ "knife_combat", -1 ], - [ "knife_butcher", -1 ], - [ "pockknife", -1 ], - [ "scalpel", -1 ], - [ "machete", -1 ], - [ "broadsword", -1 ], - [ "toolset", -1 ] - ], [ [ "welder", 42 ], [ "soldering_iron", 42 ], @@ -17326,18 +18630,10 @@ "time": 60000, "reversible": false, "autolearn": true, + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], "tools": [ - [ - [ "scissors", -1 ], - [ "knife_steak", -1 ], - [ "knife_combat", -1 ], - [ "knife_butcher", -1 ], - [ "pockknife", -1 ], - [ "scalpel", -1 ], - [ "machete", -1 ], - [ "broadsword", -1 ], - [ "toolset", -1 ] - ], [ [ "welder", 28 ], [ "soldering_iron", 28 ], @@ -17383,18 +18679,10 @@ "time": 120000, "reversible": false, "autolearn": true, + "qualities" : [ + {"id":"CUT","level":1,"amount":1} + ], "tools": [ - [ - [ "scissors", -1 ], - [ "knife_steak", -1 ], - [ "knife_combat", -1 ], - [ "knife_butcher", -1 ], - [ "pockknife", -1 ], - [ "scalpel", -1 ], - [ "machete", -1 ], - [ "broadsword", -1 ], - [ "toolset", -1 ] - ], [ [ "welder", 42 ], [ "soldering_iron", 42 ], @@ -17763,7 +19051,7 @@ "result": "quikclot", "category": "CC_CHEM", "skill_used": "cooking", - "requires_skills": [ "firstaid", 1 ], + "skills_required": [ "firstaid", 1 ], "difficulty": 4, "time": 1200, "reversible": false, @@ -17822,7 +19110,7 @@ ], "components": [ - [ + [ ["pilot_light", 1] ], [ @@ -17830,10 +19118,10 @@ [ "steel_chunk", 12 ], [ "scrap", 36 ] ], - [ + [ [ "metal_tank", 1 ] ], - [ + [ [ "pipe", 3] ] ] @@ -17842,7 +19130,7 @@ "result": "char_smoker", "category": "CC_MISC", "skill_used": "fabrication", - "requires_skills": [ "cooking", 2 ], + "skills_required": [ "cooking", 2 ], "difficulty": 2, "time": 70000, "reversible": true, @@ -17870,7 +19158,7 @@ ], "components": [ - [ ["pilot_light", 1] + [ ["pilot_light", 1] ], [ [ "scrap", 4 ] @@ -17915,10 +19203,10 @@ [ "steel_chunk", 20 ], [ "scrap", 60 ] ], - [ + [ [ "metal_tank", 1 ] ], - [ + [ ["pipe", 6] ] ] @@ -17972,7 +19260,7 @@ [ "rag", 4 ] ], [ - [ "charcoal", 10 ] + [ "charcoal", 15 ] ] ] },{ @@ -18227,7 +19515,7 @@ "result": "unbio_blaster_gun", "category": "CC_WEAPON", "skill_used": "electronics", - "requires_skills": [ "fabrication", 4, "gun", 2 ], + "skills_required": [ "fabrication", 4, "gun", 2 ], "difficulty": 6, "time": 30000, "reversible": false, @@ -18260,13 +19548,12 @@ ["plastic_chunk", 3] ] ] -}, - { +},{ "type" : "recipe", "result": "9mmfmj", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 4 ], + "skills_required": [ "gun", 4 ], "difficulty": 4, "time": 30000, "reversible": false, @@ -18293,20 +19580,22 @@ ], [ [ "lead", 150 ], - [ "gold_small", 150 ] + [ "gold_small", 150 ], + [ "silver_small", 150 ], + [ "tin", 150 ], + [ "bismuth", 150 ], + [ "solder_wire", 150 ] ], [ [ "cu_pipe", 2 ] ] ] - }, - - { + },{ "type" : "recipe", "result": "38_fmj", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 4 ], + "skills_required": [ "gun", 4 ], "difficulty": 4, "time": 30000, "reversible": false, @@ -18333,20 +19622,22 @@ ], [ [ "lead", 200 ], - [ "gold_small", 200 ] + [ "gold_small", 200 ], + [ "silver_small", 200 ], + [ "tin", 200 ], + [ "bismuth", 200 ], + [ "solder_wire", 200 ] ], [ [ "cu_pipe", 2 ] ] ] - }, - - { + },{ "type" : "recipe", "result": "40fmj", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 4 ], + "skills_required": [ "gun", 4 ], "difficulty": 4, "time": 35000, "reversible": false, @@ -18373,7 +19664,11 @@ ], [ [ "lead", 250 ], - [ "gold_small", 250 ] + [ "gold_small", 250 ], + [ "silver_small", 250 ], + [ "tin", 250 ], + [ "bismuth", 250 ], + [ "solder_wire", 250 ] ], [ [ "cu_pipe", 2 ] @@ -18384,7 +19679,7 @@ "result": "5x50dart", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 5 ], + "skills_required": [ "gun", 5 ], "difficulty": 6, "time": 8000, "reversible": false, @@ -18415,15 +19710,20 @@ [ [ "lead", 200 ], [ "gold_small", 200 ], + [ "silver_small", 200 ], + [ "tin", 200 ], + [ "bismuth", 200 ], + [ "solder_wire", 200 ], [ "nail", 100 ] ] ] - },{ + }, +{ "type" : "recipe", "result": "power_armor_helmet_basic", "category": "CC_NONCRAFT", "skill_used": "fabrication", - "requires_skills": ["electronics", 4], + "skills_required": ["electronics", 4], "difficulty": 8, "time": 80000, "reversible": true, @@ -18471,7 +19771,7 @@ "result": "power_armor_basic", "category": "CC_NONCRAFT", "skill_used": "fabrication", - "requires_skills": ["electronics", 5], + "skills_required": ["electronics", 5], "difficulty": 7, "time": 80000, "reversible": true, @@ -18558,7 +19858,7 @@ "result": "44fmj", "category": "CC_AMMO", "skill_used": "fabrication", - "requires_skills": [ "gun", 4 ], + "skills_required": [ "gun", 4 ], "difficulty": 5, "time": 25000, "reversible": false, @@ -18585,7 +19885,11 @@ ], [ [ "lead", 400 ], - [ "gold_small", 400 ] + [ "gold_small", 400 ], + [ "silver_small", 400 ], + [ "tin", 400 ], + [ "bismuth", 400 ], + [ "solder_wire", 400 ] ], [ [ "cu_pipe", 3 ] @@ -18824,6 +20128,25 @@ [ "plut_cell", 1 ] ] ] +}, + + { + "type" : "recipe", + "result": "rag", + "id_suffix": "uncraft", + "category": "CC_NONCRAFT", + "difficulty": 0, + "time": 60000, + "reversible": true, + "autolearn": false, + "qualities":[ + {"id":"CUT","level":1,"amount":1} + ], + "components": [ + [ + [ "thread", 100 ] + ] + ] },{ "type" : "recipe", "result": "juice", @@ -18916,9 +20239,6 @@ [ [ "towel", 1 ] ], - [ - [ "rollmat", 1 ] - ], [ [ "boots_combat", 1 ] ], @@ -18956,5 +20276,44 @@ [ "sleeping_bag", 1 ] ] ] +},{ + "type" : "recipe", + "result": "wooden_barrel", + "category": "CC_MISC", + "skill_used": "fabrication", + "difficulty": 3, + "time": 60000, + "reversible": false, + "autolearn": true, + "tools": [ + [ + [ "toolset", -1 ], + [ "saw", -1 ] + ], + [ + [ "toolset", -1 ], + [ "hammer", -1 ], + [ "primitive_hammer", -1 ] + ], + [ + ["goggles_welding", -1] + ], + [ + ["welder", 20], + ["welder_crude", 30], + ["toolset", 1] + ], + [ + ["fire", -1] + ] + ], + "components": [ + [ + [ "2x4", 30 ] + ], + [ + [ "scrap", 6 ] + ] + ] } ] diff --git a/data/json/species.json b/data/json/species.json index f6577df9d0f8a..05b2489ec0f5c 100644 --- a/data/json/species.json +++ b/data/json/species.json @@ -1,75 +1,75 @@ [ { "type" : "SPECIES", - "id":"MAMMAL", - "fear_triggers":["HURT", "FIRE", "FRIEND_DIED"] + "id" : "MAMMAL", + "fear_triggers" : ["HURT", "FIRE", "FRIEND_DIED"] },{ "type" : "SPECIES", - "id":"AMPHIBIAN", - "fear_triggers":["HURT", "FIRE"] + "id" : "AMPHIBIAN", + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"BIRD", - "fear_triggers":["HURT", "SOUND"] + "id" : "BIRD", + "fear_triggers" : ["HURT", "SOUND"] },{ "type" : "SPECIES", - "id":"REPTILE", - "fear_triggers":["HURT", "FIRE"] + "id" : "REPTILE", + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"FISH", - "fear_triggers":["HURT", "FRIEND_ATTACKED"] + "id" : "FISH", + "fear_triggers" : ["HURT", "FRIEND_ATTACKED"] },{ "type" : "SPECIES", - "id":"MUTANT", - "fear_triggers":["FIRE"] + "id" : "MUTANT", + "fear_triggers" : ["FIRE"] },{ "type" : "SPECIES", - "id":"NETHER", - "fear_triggers":["HURT"] + "id" : "NETHER", + "fear_triggers" : ["HURT"] },{ "type" : "SPECIES", - "id":"FUNGUS", - "fear_triggers":["HURT", "FIRE"] + "id" : "FUNGUS", + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"INSECT", - "anger_triggers":["FRIEND_DIED"], - "fear_triggers":["HURT", "FIRE"] + "id" : "INSECT", + "anger_triggers" : ["FRIEND_DIED"], + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"SPIDER", - "anger_triggers":["FRIEND_DIED"], - "fear_triggers":["HURT", "FIRE"] + "id" : "SPIDER", + "anger_triggers" : ["FRIEND_DIED"], + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"PLANT", - "fear_triggers":["HURT", "FIRE"] + "id" : "PLANT", + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"MOLLUSK", - "fear_triggers":["HURT", "FIRE"] + "id" : "MOLLUSK", + "fear_triggers" : ["HURT", "FIRE"] },{ "type" : "SPECIES", - "id":"WORM", - "fear_triggers":["HURT"] + "id" : "WORM", + "fear_triggers" : ["HURT"] },{ "type" : "SPECIES", - "id":"ZOMBIE" + "id" : "ZOMBIE" },{ "type" : "SPECIES", - "id":"ROBOT" + "id" : "ROBOT" },{ "type" : "SPECIES", - "id":"HORROR" + "id" : "HORROR" },{ "type" : "SPECIES", - "id":"ABBERATION" + "id" : "ABBERATION" },{ "type" : "SPECIES", - "id":"HALLUCINATION" + "id" : "HALLUCINATION" },{ "type" : "SPECIES", - "id":"UNKNOWN" - } + "id" : "UNKNOWN" + } ] diff --git a/data/json/techniques.json b/data/json/techniques.json index da0a0b55067e9..c68834f40fe31 100644 --- a/data/json/techniques.json +++ b/data/json/techniques.json @@ -3,23 +3,23 @@ "type" : "technique", "id" : "WIDE", "name" : "Wide Strike", - "unarmed_allowed": true, - "melee_allowed": true, + "unarmed_allowed" : true, + "melee_allowed" : true, "messages" : [ "You swing in a wide arc through %s", " swings in a wide arc through %s" ], "aoe" : "wide", - "quick": true + "quick" : true },{ "type" : "technique", "id" : "BRUTAL", "name" : "Brutal Strike", - "unarmed_allowed": true, - "melee_allowed": true, - "crit_tec": true, - "stun_dur": 1, - "knockback_dist": 1, + "unarmed_allowed" : true, + "melee_allowed" : true, + "crit_tec" : true, + "stun_dur" : 1, + "knockback_dist" : 1, "messages" : [ "You send %s reeling", " sends %s reeling" @@ -28,9 +28,9 @@ "type" : "technique", "id" : "RAPID", "name" : "Rapid Strike", - "min_unarmed": 0, - "unarmed_allowed": true, - "quick": true, + "min_unarmed" : 0, + "unarmed_allowed" : true, + "quick" : true, "messages" : [ "You quickly strike %s", " quickly strikes %s" @@ -39,9 +39,9 @@ "type" : "technique", "id" : "WRAP", "name" : "Wrap attack", - "min_unarmed": 0, - "unarmed_allowed": true, - "stun_dur": 2, + "min_unarmed" : 0, + "unarmed_allowed" : true, + "stun_dur" : 2, "messages" : [ "You wrap up %s", " wraps up %s" @@ -50,9 +50,9 @@ "type" : "technique", "id" : "SWEEP", "name" : "Sweep Attack", - "min_unarmed": 0, - "unarmed_allowed": true, - "down_dur": 2, + "min_unarmed" : 0, + "unarmed_allowed" : true, + "down_dur" : 2, "messages" : [ "You sweep %s", " sweeps %s" @@ -61,63 +61,63 @@ "type" : "technique", "id" : "tec_feint", "name" : "Feint", - "unarmed_allowed": true, - "melee_allowed": true, - "defensive": true, - "miss_recovery": true + "unarmed_allowed" : true, + "melee_allowed" : true, + "defensive" : true, + "miss_recovery" : true },{ "type" : "technique", "id" : "tec_break", "name" : "Grab Break", - "unarmed_allowed": true, - "melee_allowed": true, - "defensive": true, - "grab_break": true + "unarmed_allowed" : true, + "melee_allowed" : true, + "defensive" : true, + "grab_break" : true },{ "type" : "technique", "id" : "tec_precise", "name" : "Precise Strike", - "min_unarmed": 0, - "unarmed_allowed": true, - "melee_allowed": true, - "crit_tec": true, + "min_unarmed" : 0, + "unarmed_allowed" : true, + "melee_allowed" : true, + "crit_tec" : true, "messages" : [ "You jab deftly at %s", " jabs deftly at %s" ], - "stun_dur": 2 + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_karate_rapid", "name" : "quick punch", - "min_unarmed": 0, - "unarmed_allowed": true, + "min_unarmed" : 0, + "unarmed_allowed" : true, "messages" : [ "You quickly punch %s", " quickly punches %s" ], - "quick": true + "quick" : true },{ "type" : "technique", "id" : "tec_karate_precise", "name" : "karate chop", - "min_unarmed": 4, - "unarmed_allowed": true, - "crit_tec": true, + "min_unarmed" : 4, + "unarmed_allowed" : true, + "crit_tec" : true, "messages" : [ "You karate chop %s", " karate chops %s" ], - "stun_dur": 2 + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_aikido_throw", "name" : "throw", - "min_unarmed": 2, - "unarmed_allowed": true, - "down_dur": 1, - "knockback_dist": 1, - "knockback_spread": 1, + "min_unarmed" : 2, + "unarmed_allowed" : true, + "down_dur" : 1, + "knockback_dist" : 1, + "knockback_spread" : 1, "messages" : [ "You throw %s", " throws %s" @@ -126,10 +126,10 @@ "type" : "technique", "id" : "tec_aikido_feint", "name" : "feint at", - "min_unarmed": 2, - "unarmed_allowed": true, - "defensive": true, - "miss_recovery": true, + "min_unarmed" : 2, + "unarmed_allowed" : true, + "defensive" : true, + "miss_recovery" : true, "messages" : [ "You feint at %s", " feints at %s" @@ -138,9 +138,9 @@ "type" : "technique", "id" : "tec_aikido_disarm", "name" : "disarm", - "min_unarmed": 3, - "unarmed_allowed": true, - "disarms": true, + "min_unarmed" : 3, + "unarmed_allowed" : true, + "disarms" : true, "messages" : [ "You disarm %s", " disarms %s" @@ -149,11 +149,11 @@ "type" : "technique", "id" : "tec_judo_throw", "name" : "throw", - "min_unarmed": 3, - "unarmed_allowed": true, - "down_dur": 1, - "knockback_dist": 1, - "knockback_spread": 1, + "min_unarmed" : 3, + "unarmed_allowed" : true, + "down_dur" : 1, + "knockback_dist" : 1, + "knockback_spread" : 1, "messages" : [ "You throw %s", " throws %s" @@ -162,9 +162,9 @@ "type" : "technique", "id" : "tec_judo_grab", "name" : "grab", - "min_unarmed": 2, - "unarmed_allowed": true, - "down_dur": 1, + "min_unarmed" : 2, + "unarmed_allowed" : true, + "down_dur" : 1, "messages" : [ "You grab %s", " grabs %s" @@ -173,9 +173,9 @@ "type" : "technique", "id" : "tec_taichi_disarm", "name" : "disarm", - "min_unarmed": 3, - "unarmed_allowed": true, - "disarms": true, + "min_unarmed" : 3, + "unarmed_allowed" : true, + "disarms" : true, "messages" : [ "You disarm %s", " disarms %s" @@ -184,10 +184,10 @@ "type" : "technique", "id" : "tec_taichi_precise", "name" : "precise strike", - "min_unarmed": 4, - "unarmed_allowed": true, - "crit_tec": true, - "stun_dur": 2, + "min_unarmed" : 4, + "unarmed_allowed" : true, + "crit_tec" : true, + "stun_dur" : 2, "messages" : [ "You strike %s", " strikes %s" @@ -196,10 +196,10 @@ "type" : "technique", "id" : "tec_capoeira_feint", "name" : "feint at", - "min_unarmed": 1, - "unarmed_allowed": true, - "defensive": true, - "miss_recovery": true, + "min_unarmed" : 1, + "unarmed_allowed" : true, + "defensive" : true, + "miss_recovery" : true, "messages" : [ "You feint at %s", " feints at %s" @@ -208,56 +208,56 @@ "type" : "technique", "id" : "tec_muay_thai_elbow", "name" : "elbow", - "min_unarmed": 2, - "unarmed_allowed": true, + "min_unarmed" : 2, + "unarmed_allowed" : true, "messages" : [ "You elbow %s", " elbows %s" ], - "quick": true, - "stun_dur": 1 + "quick" : true, + "stun_dur" : 1 },{ "type" : "technique", "id" : "tec_muay_thai_kick", "name" : "kick", - "min_unarmed": 3, - "unarmed_allowed": true, + "min_unarmed" : 3, + "unarmed_allowed" : true, "messages" : [ "You power-kick %s", " power-kicks %s" ], - "stun_dur": 1 + "stun_dur" : 1 },{ "type" : "technique", "id" : "tec_muay_thai_knee", "name" : "flying knee", - "min_unarmed": 4, - "unarmed_allowed": true, - "crit_tec": true, + "min_unarmed" : 4, + "unarmed_allowed" : true, + "crit_tec" : true, "messages" : [ "You flying knee %s", " flying knees %s" ], - "stun_dur": 1 + "stun_dur" : 1 },{ "type" : "technique", "id" : "tec_krav_maga_rapid", "name" : "quick punch", - "min_unarmed": 2, - "unarmed_allowed": true, + "min_unarmed" : 2, + "unarmed_allowed" : true, "messages" : [ "You quickly punch %s", " quickly punches %s" ], - "quick": true + "quick" : true },{ "type" : "technique", "id" : "tec_krav_maga_feint", "name" : "feint at", - "min_unarmed": 2, - "unarmed_allowed": true, - "defensive": true, - "miss_recovery": true, + "min_unarmed" : 2, + "unarmed_allowed" : true, + "defensive" : true, + "miss_recovery" : true, "messages" : [ "You feint at %s", " feints at %s" @@ -266,21 +266,21 @@ "type" : "technique", "id" : "tec_krav_maga_precise", "name" : "precise strike", - "min_unarmed": 3, - "unarmed_allowed": true, - "crit_tec": true, + "min_unarmed" : 3, + "unarmed_allowed" : true, + "crit_tec" : true, "messages" : [ "You jab %s", " jabs %s" ], - "stun_dur": 2 + "stun_dur" : 2 },{ "type" : "technique", "id" : "tec_krav_maga_disarm", "name" : "disarm", - "min_unarmed": 3, - "unarmed_allowed": true, - "disarms": true, + "min_unarmed" : 3, + "unarmed_allowed" : true, + "disarms" : true, "messages" : [ "You disarm %s", " disarms %s" @@ -289,9 +289,9 @@ "type" : "technique", "id" : "tec_krav_maga_grab", "name" : "grab", - "min_unarmed": 4, - "unarmed_allowed": true, - "down_dur": 1, + "min_unarmed" : 4, + "unarmed_allowed" : true, + "down_dur" : 1, "messages" : [ "You grab %s", " grabs %s" @@ -300,35 +300,35 @@ "type" : "technique", "id" : "tec_krav_maga_break", "name" : "grab break", - "min_unarmed": 4, - "unarmed_allowed": true, - "melee_allowed": true, - "defensive": true, - "grab_break": true + "min_unarmed" : 4, + "unarmed_allowed" : true, + "melee_allowed" : true, + "defensive" : true, + "grab_break" : true },{ "type" : "technique", "id" : "tec_ninjutsu_precise", "name" : "surprise attack", - "min_unarmed": 3, - "min_melee": 3, - "unarmed_allowed": true, - "melee_allowed": true, - "crit_tec": true, + "min_unarmed" : 3, + "min_melee" : 3, + "unarmed_allowed" : true, + "melee_allowed" : true, + "crit_tec" : true, "messages" : [ "You surprise attack %s", " surprise attacks %s" ], - "stun_dur": 2, - "bash_mult": 1.4, - "cut_mult": 2 + "stun_dur" : 2, + "bash_mult" : 1.4, + "cut_mult" : 2 },{ "type" : "technique", "id" : "tec_taekwondo_precise", "name" : "axe-kick", - "min_unarmed": 2, - "unarmed_allowed": true, - "crit_tec": true, - "stun_dur": 2, + "min_unarmed" : 2, + "unarmed_allowed" : true, + "crit_tec" : true, + "stun_dur" : 2, "messages" : [ "You axe-kick %s", " axe-kicks %s" @@ -338,23 +338,267 @@ "id" : "tec_taekwondo_push", "name" : "side kick", "min_unarmed":3, - "unarmed_allowed": true, + "unarmed_allowed" : true, "messages" : [ "You side-kick %s", " side-kicks %s" ], - "stun_dur": 1, - "knockback_dist": 1 + "stun_dur" : 1, + "knockback_dist" : 1 },{ "type" : "technique", "id" : "tec_taekwondo_sweep", "name" : "sweep kick", - "min_unarmed": 4, - "unarmed_allowed": true, + "min_unarmed" : 4, + "unarmed_allowed" : true, "messages" : [ "You sweep-kick %s", " sweep-kicks %s" ], - "down_dur": 2 + "down_dur" : 2 + },{ + "type" : "technique", + "id" : "tec_zuiquan_feint", + "name" : "Drunk feint", + "min_unarmed" : 3, + "unarmed_allowed" : true, + "defensive" : true, + "miss_recovery" : true, + "messages" : [ + "You stumble and leer at %s", + " stumbles and leers at %s" + ] + },{ + "type" : "technique", + "id" : "tec_venom_snake_feint", + "name" : "Viper Hiss", + "unarmed_allowed" : true, + "melee_allowed" : true, + "defensive" : true, + "miss_recovery" : true, + "messages" : [ + "You hiss threateningly at %s", + " hisses threateningly at %s" + ] + },{ + "type" : "technique", + "id" : "tec_venom_snake_rapid", + "name" : "Viper Bite", + "min_unarmed" : 0, + "unarmed_allowed" : true, + "quick" : true, + "messages" : [ + "You Snakebite %s", + " Snakebites %s" + ], + "bash_mult" : 2 + },{ + "type" : "technique", + "id" : "tec_venom_snake_break", + "name" : "Viper Writhe", + "unarmed_allowed" : true, + "melee_allowed" : true, + "defensive" : true, + "grab_break" : true + },{ + "type" : "technique", + "id" : "tec_scorpion_brutal", + "name" : "Stinger Strike", + "unarmed_allowed" : true, + "crit_tec" : true, + "stun_dur" : 3, + "knockback_dist" : 3, + "messages" : [ + "Your Stinger Kick sends %s flying!", + "'s Stinger Kick sends %s flying!" + ], + "bash_mult" : 2 + },{ + "type" : "technique", + "id" : "tec_scorpion_precise", + "name" : "Pincer Strike", + "min_unarmed" : 0, + "unarmed_allowed" : true, + "messages" : [ + "You punch %s with your Pincer Fist!", + " jabs %s with a Pincer Fist!" + ], + "stun_dur" : 2, + "bash_mult" : 1.25 + },{ + "type" : "technique", + "id" : "tec_toad_grab", + "name" : "Toad's Tongue", + "min_unarmed" : 4, + "unarmed_allowed" : true, + "quick" : true, + "down_dur" : 3, + "messages" : [ + "You snatch and clobber %s", + " snatches and clobbers %s" + ], + "bash_mult" : 1.5 + },{ + "type" : "technique", + "id" : "tec_centipede_rapid", + "name" : "Rapid Strike", + "min_unarmed" : 2, + "unarmed_allowed" : true, + "quick" : true, + "messages" : [ + "You swiftly hit %s", + " swiftly hits %s" + ] + },{ + "type" : "technique", + "id" : "tec_snake_rapid", + "name" : "Snake Snap", + "min_unarmed" : 2, + "unarmed_allowed" : true, + "quick" : true, + "messages" : [ + "You swiftly jab %s", + " swiftly jabs %s" + ] + },{ + "type" : "technique", + "id" : "tec_snake_feint", + "name" : "Snake Slide", + "min_unarmed" : 3, + "unarmed_allowed" : true, + "defensive" : true, + "miss_recovery" : true, + "messages" : [ + "You make serpentine hand motions at %s", + " makes serpentine hand motions at %s" + ] + },{ + "type" : "technique", + "id" : "tec_snake_break", + "name" : "Snake Slither", + "min_unarmed" : 4, + "unarmed_allowed" : true, + "defensive" : true, + "grab_break" : true, + "messages" : [ + "You slither free!", + " slithers free!" + ] + },{ + "type" : "technique", + "id" : "tec_snake_precise", + "name" : "Snake Strike", + "min_unarmed" : 4, + "unarmed_allowed" : true, + "crit_tec" : true, + "messages" : [ + "You strike out at %s", + " strikes out at %s" + ], + "stun_dur" : 2 + },{ + "type" : "technique", + "id" : "tec_tiger_grab", + "name" : "Tiger Takedown", + "min_unarmed" : 4, + "unarmed_allowed" : true, + "down_dur" : 1, + "messages" : [ + "You grab and ground %s!", + " grabs and grounds %s!" + ] + },{ + "type" : "technique", + "id" : "tec_leopard_precise", + "name" : "Leopard Fist", + "min_unarmed" : 5, + "unarmed_allowed" : true, + "crit_tec" : true, + "messages" : [ + "You strike out at %s with your Leopard Fist!", + " strikes out at %s with a Leopard Fist!" + ], + "stun_dur" : 2 + },{ + "type" : "technique", + "id" : "tec_leopard_rapid", + "name" : "Leopard Swipe", + "min_unarmed" : 2, + "unarmed_allowed" : true, + "quick" : true, + "messages" : [ + "You quickly swipe at %s", + " quickly swipes at %s" + ] + },{ + "type" : "technique", + "id" : "tec_dragon_grab", + "name" : "Dragon Snatch", + "min_unarmed" : 4, + "unarmed_allowed" : true, + "messages" : [ + "You grab and knee %s!", + " grabs and knees %s!" + ] + },{ + "type" : "technique", + "id" : "tec_dragon_sweep", + "name" : "Dragon Sweeper", + "min_unarmed" : 5, + "unarmed_allowed" : true, + "down_dur" : 2, + "messages" : [ + "You low-roundhouse %s 's legs!", + " low-roundhouses %s 's legs!" + ] + },{ + "type" : "technique", + "id" : "tec_dragon_brutal", + "name" : "Dragon Strike", + "min_unarmed" : 6, + "unarmed_allowed" : true, + "crit_tec" : true, + "stun_dur" : 1, + "knockback_dist" : 1, + "messages" : [ + "You send %s reeling with a Dragon Strike!", + " sends %s reeling with a Dragon Strike!" + ] + },{ + "type" : "technique", + "id" : "tec_crane_feint", + "name" : "Crane Wing", + "min_unarmed" : 2, + "unarmed_allowed" : true, + "defensive" : true, + "miss_recovery" : true, + "messages" : [ + "You raise your arms intimidatingly!", + " performs the Crane Wing!" + ] + },{ + "type" : "technique", + "id" : "tec_crane_break", + "name" : "Crane Flap", + "min_unarmed" : 3, + "unarmed_allowed" : true, + "defensive" : true, + "grab_break" : true, + "messages" : [ + "You swing your arms and break free!", + " flaps free!" + ] + },{ + "type" : "technique", + "id" : "tec_crane_precise", + "name" : "Crane Strike", + "min_unarmed" : 4, + "unarmed_allowed" : true, + "crit_tec" : true, + "messages" : [ + "You hand-peck %s", + " hand-pecks %s" + ], + "stun_dur" : 2 } ] diff --git a/data/json/terrain.json b/data/json/terrain.json index 7a7d4b60670ef..0c371e496220e 100644 --- a/data/json/terrain.json +++ b/data/json/terrain.json @@ -1,63 +1,57 @@ [ { "type": "terrain", - "id": "t_null", + "id" : "t_null", "name": "nothing", "symbol": " ", "color": "white", "move_cost": 2, "flags": ["TRANSPARENT", "DIGGABLE"] - }, - { - "type": "terrain", - "id": "t_hole", + },{ + "type" : "terrain", + "id" : "t_hole", "name": "empty space", "symbol": " ", "color": "black", "move_cost": 2, "trap": "ledge", "flags": ["TRANSPARENT"] - }, - { - "type": "terrain", - "id": "t_dirt", + },{ + "type" : "terrain", + "id" : "t_dirt", "name": "dirt", "symbol": ".", "color": "brown", "move_cost": 2, "flags": ["TRANSPARENT", "DIGGABLE", "FLAT"] - }, - { - "type": "terrain", - "id": "t_sand", + },{ + "type" : "terrain", + "id" : "t_sand", "name": "sand", "symbol": ".", "color": "yellow", "move_cost": 2, "flags": ["TRANSPARENT", "DIGGABLE", "FLAT"] - }, - { - "type": "terrain", - "id": "t_dirtmound", + },{ + "type" : "terrain", + "id" : "t_dirtmound", "name": "mound of dirt", "symbol": "#", "color": "brown", "move_cost": 3, "flags": ["TRANSPARENT", "DIGGABLE"], "examine_action": "dirtmound" - }, - { - "type": "terrain", - "id": "t_pit_shallow", + },{ + "type" : "terrain", + "id" : "t_pit_shallow", "name": "shallow pit", "symbol": "0", "color": "yellow", "move_cost": 8, "flags": ["TRANSPARENT", "DIGGABLE"] - }, - { - "type": "terrain", - "id": "t_pit", + },{ + "type" : "terrain", + "id" : "t_pit", "name": "pit", "symbol": "0", "color": "brown", @@ -65,29 +59,26 @@ "trap": "pit", "flags": ["TRANSPARENT", "DIGGABLE"], "examine_action": "pit" - }, - { - "type": "terrain", - "id": "t_pit_corpsed", + },{ + "type" : "terrain", + "id" : "t_pit_corpsed", "name": "corpse filled pit", "symbol": "#", "color": "green", "move_cost": 5, "flags": ["TRANSPARENT", "DIGGABLE"] - }, - { - "type": "terrain", - "id": "t_pit_covered", + },{ + "type" : "terrain", + "id" : "t_pit_covered", "name": "covered pit", "symbol": "#", "color": "ltred", "move_cost": 2, "flags": ["TRANSPARENT"], "examine_action": "pit_covered" - }, - { - "type": "terrain", - "id": "t_pit_spiked", + },{ + "type" : "terrain", + "id" : "t_pit_spiked", "name": "spiked pit", "symbol": "0", "color": "ltred", @@ -95,123 +86,110 @@ "trap": "spike_pit", "flags": ["TRANSPARENT", "DIGGABLE"], "examine_action": "pit" - }, - { - "type": "terrain", - "id": "t_pit_spiked_covered", + },{ + "type" : "terrain", + "id" : "t_pit_spiked_covered", "name": "covered spiked pit", "symbol": "#", "color": "ltred", "move_cost": 2, "flags": ["TRANSPARENT"], "examine_action": "pit_covered" - }, - { - "type": "terrain", - "id": "t_rock_floor", + },{ + "type" : "terrain", + "id" : "t_rock_floor", "name": "rock floor", "symbol": ".", "color": "ltgray", "move_cost": 2, "flags": ["TRANSPARENT", "INDOORS", "FLAT"] - }, - { - "type": "terrain", - "id": "t_rubble", + },{ + "type" : "terrain", + "id" : "t_rubble", "name": "pile of rubble", "symbol": "^", "color": "ltgray", "move_cost": 4, "flags": ["TRANSPARENT", "ROUGH", "DIGGABLE"], "examine_action": "rubble" - }, - { - "type": "terrain", - "id": "t_ash", + },{ + "type" : "terrain", + "id" : "t_ash", "name": "pile of ash", "symbol": "#", "color": "ltgray", "move_cost": 2, "flags": ["TRANSPARENT", "DIGGABLE"], "examine_action": "rubble" - }, - { - "type": "terrain", - "id": "t_metal", + },{ + "type" : "terrain", + "id" : "t_metal", "name": "twisted metal", "symbol": "#", "color": "cyan", "move_cost": 5, "flags": ["TRANSPARENT", "ROUGH", "SHARP", "PLACE_ITEM"], "examine_action": "wreckage" - }, - { - "type": "terrain", - "id": "t_wreckage", + },{ + "type" : "terrain", + "id" : "t_wreckage", "name": "metal wreckage", "symbol": "#", "color": "cyan", "move_cost": 5, "flags": ["TRANSPARENT", "ROUGH", "SHARP", "PLACE_ITEM"], "examine_action": "wreckage" - }, - { - "type": "terrain", - "id": "t_grass", + },{ + "type" : "terrain", + "id" : "t_grass", "name": "grass", "symbol": ".", "color": "green", "move_cost": 2, "flags": ["TRANSPARENT", "DIGGABLE", "FLAT"] - }, - { - "type": "terrain", - "id": "t_metal_floor", + },{ + "type" : "terrain", + "id" : "t_metal_floor", "name": "metal floor", "symbol": ".", "color": "ltcyan", "move_cost": 2, "flags": ["TRANSPARENT", "INDOORS", "FLAT"] - }, - { - "type": "terrain", - "id": "t_pavement", + },{ + "type" : "terrain", + "id" : "t_pavement", "name": "pavement", "symbol": ".", "color": "dkgray", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_pavement_y", + },{ + "type" : "terrain", + "id" : "t_pavement_y", "name": "yellow pavement", "symbol": ".", "color": "yellow", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_sidewalk", + },{ + "type" : "terrain", + "id" : "t_sidewalk", "name": "sidewalk", "symbol": ".", "color": "ltgray", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_concrete", + },{ + "type" : "terrain", + "id" : "t_concrete", "name": "concrete", "symbol": ".", "color": "ltgray", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_floor", + },{ + "type" : "terrain", + "id" : "t_floor", "name": "floor", "symbol": ".", "color": "cyan", @@ -219,10 +197,9 @@ "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT" ] - }, - { - "type": "terrain", - "id": "t_dirtfloor", + },{ + "type" : "terrain", + "id" : "t_dirtfloor", "name": "dirt floor", "symbol": ".", "color": "brown", @@ -230,37 +207,33 @@ "flags": [ "TRANSPARENT", "DIGGABLE", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT" ] - }, - { - "type": "terrain", - "id": "t_grate", + },{ + "type" : "terrain", + "id" : "t_grate", "name": "metal grate", "symbol": "#", "color": "dkgray", "move_cost": 2, "flags": ["TRANSPARENT"] - }, - { - "type": "terrain", - "id": "t_slime", + },{ + "type" : "terrain", + "id" : "t_slime", "name": "slime", "symbol": "~", "color": "green", "move_cost": 6, "flags": ["TRANSPARENT", "CONTAINER", "FLAMMABLE_ASH", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_bridge", + },{ + "type" : "terrain", + "id" : "t_bridge", "name": "walkway", "symbol": "#", "color": "yellow", "move_cost": 2, "flags": ["TRANSPARENT"] - }, - { - "type": "terrain", - "id": "t_skylight", + },{ + "type" : "terrain", + "id" : "t_skylight", "name": "floor", "comment": "Skylight", "symbol": ".", @@ -269,10 +242,9 @@ "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "FLAT" ] - }, - { - "type": "terrain", - "id": "t_emergency_light_flicker", + },{ + "type" : "terrain", + "id" : "t_emergency_light_flicker", "name": "floor", "comment": "Emergency Light", "symbol": ".", @@ -281,10 +253,9 @@ "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT" ] - }, - { - "type": "terrain", - "id": "t_emergency_light", + },{ + "type" : "terrain", + "id" : "t_emergency_light", "name": "floor", "comment": "Regular Light", "symbol": ".", @@ -293,19 +264,17 @@ "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT" ] - }, - { - "type": "terrain", - "id": "t_wall_log_half", + },{ + "type" : "terrain", + "id" : "t_wall_log_half", "name": "half-built wall", "symbol": "#", "color": "brown", "move_cost": 4, "flags": ["TRANSPARENT", "BASHABLE", "FLAMMABLE_ASH", "NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_wall_log", + },{ + "type" : "terrain", + "id" : "t_wall_log", "name": "log wall", "symbol": "#", "color": "brown", @@ -320,10 +289,9 @@ { "item": "splinter", "amount": 20, "chance": 50} ] } - }, - { - "type": "terrain", - "id": "t_wall_log_chipped", + },{ + "type" : "terrain", + "id" : "t_wall_log_chipped", "name": "chipped log wall", "symbol": "#", "color": "brown", @@ -338,10 +306,9 @@ { "item": "splinter", "amount": 5 } ] } - }, - { - "type": "terrain", - "id": "t_wall_log_broken", + },{ + "type" : "terrain", + "id" : "t_wall_log_broken", "name": "broken log wall", "symbol": "&", "color": "brown", @@ -358,10 +325,9 @@ { "item": "splinter", "amount": 5 } ] } - }, - { - "type": "terrain", - "id": "t_palisade", + },{ + "type" : "terrain", + "id" : "t_palisade", "name": "palisade wall", "symbol": "#", "color": "brown", @@ -378,10 +344,9 @@ { "item": "splinter", "amount": 20, "chance": 50} ] } - }, - { - "type": "terrain", - "id": "t_palisade_gate", + },{ + "type" : "terrain", + "id" : "t_palisade_gate", "name": "palisade gate", "symbol": "+", "color": "ltred", @@ -398,29 +363,26 @@ { "item": "splinter", "amount": 20, "chance": 50} ] } - }, - { - "type": "terrain", - "id": "t_palisade_gate_o", + },{ + "type" : "terrain", + "id" : "t_palisade_gate_o", "name": "dirt", "comment": "Open palisade gate", "symbol": ".", "color": "brown", "move_cost": 2, "flags": ["TRANSPARENT", "FLAMMABLE", "SUPPORTS_ROOF", "FLAT"] - }, - { - "type": "terrain", - "id": "t_wall_half", + },{ + "type" : "terrain", + "id" : "t_wall_half", "name": "half-built wall", "symbol": "#", "color": "ltred", "move_cost": 4, "flags": ["TRANSPARENT", "BASHABLE", "FLAMMABLE_ASH", "NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_wall_wood", + },{ + "type" : "terrain", + "id" : "t_wall_wood", "name": "wooden wall", "symbol": "#", "color": "ltred", @@ -437,10 +399,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_wall_wood_chipped", + },{ + "type" : "terrain", + "id" : "t_wall_wood_chipped", "name": "chipped wood wall", "symbol": "#", "color": "ltred", @@ -457,10 +418,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_wall_wood_broken", + },{ + "type" : "terrain", + "id" : "t_wall_wood_broken", "name": "broken wood wall", "symbol": "&", "color": "ltred", @@ -480,64 +440,57 @@ { "item": "cu_pipe", "amount": 1, "chance": 10} ] } - }, - { - "type": "terrain", - "id": "t_wall_v", + },{ + "type" : "terrain", + "id" : "t_wall_v", "name": "wall", "symbol": "LINE_XOXO", "color": "ltgray", "move_cost": 0, "flags": ["FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_wall_h", + },{ + "type" : "terrain", + "id" : "t_wall_h", "name": "wall", "symbol": "LINE_OXOX", "color": "ltgray", "move_cost": 0, "flags": ["FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_concrete_v", + },{ + "type" : "terrain", + "id" : "t_concrete_v", "name": "concrete wall", "symbol": "LINE_XOXO", "color": "dkgray", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_concrete_h", + },{ + "type" : "terrain", + "id" : "t_concrete_h", "name": "concrete wall", "symbol": "LINE_OXOX", "color": "dkgray", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_wall_metal_v", + },{ + "type" : "terrain", + "id" : "t_wall_metal_v", "name": "metal wall", "symbol": "LINE_XOXO", "color": "cyan", "move_cost": 0, "flags": ["NOITEM", "NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_wall_metal_h", + },{ + "type" : "terrain", + "id" : "t_wall_metal_h", "name": "metal wall", "symbol": "LINE_OXOX", "color": "cyan", "move_cost": 0, "flags": ["NOITEM", "NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_wall_glass_v", + },{ + "type" : "terrain", + "id" : "t_wall_glass_v", "name": "glass wall", "symbol": "LINE_XOXO", "color": "ltcyan", @@ -549,10 +502,9 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_wall_glass_h", + },{ + "type" : "terrain", + "id" : "t_wall_glass_h", "name": "glass wall", "symbol": "LINE_OXOX", "color": "ltcyan", @@ -564,10 +516,9 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_wall_glass_v_alarm", + },{ + "type" : "terrain", + "id" : "t_wall_glass_v_alarm", "name": "glass wall", "symbol": "LINE_XOXO", "color": "ltcyan", @@ -580,10 +531,9 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_wall_glass_h_alarm", + },{ + "type" : "terrain", + "id" : "t_wall_glass_h_alarm", "name": "glass wall", "symbol": "LINE_OXOX", "color": "ltcyan", @@ -596,10 +546,9 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_reinforced_glass_v", + },{ + "type" : "terrain", + "id" : "t_reinforced_glass_v", "name": "reinforced glass", "symbol": "LINE_XOXO", "color": "ltcyan", @@ -611,10 +560,9 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_reinforced_glass_h", + },{ + "type" : "terrain", + "id" : "t_reinforced_glass_h", "name": "reinforced glass", "symbol": "LINE_OXOX", "color": "ltcyan", @@ -626,19 +574,17 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_bars", + },{ + "type" : "terrain", + "id" : "t_bars", "name": "metal bars", "symbol": "\"", "color": "ltgray", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_door_c", + },{ + "type" : "terrain", + "id" : "t_door_c", "name": "closed wood door", "symbol": "+", "color": "brown", @@ -651,10 +597,9 @@ "sound_fail": "whump!", "ter_set": "t_door_b" } - }, - { - "type": "terrain", - "id": "t_door_b", + },{ + "type" : "terrain", + "id" : "t_door_b", "name": "damaged wood door", "symbol": "&", "color": "brown", @@ -673,20 +618,18 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_door_o", + },{ + "type" : "terrain", + "id" : "t_door_o", "name": "open wood door", "symbol": "'", "color": "brown", "move_cost": 2, "flags": ["FLAMMABLE_ASH", "TRANSPARENT", "SUPPORTS_ROOF", "FLAT"], "close": "t_door_c" - }, - { - "type": "terrain", - "id": "t_door_locked_interior", + },{ + "type" : "terrain", + "id" : "t_door_locked_interior", "name": "closed wood door", "symbol": "+", "color": "brown", @@ -703,10 +646,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_door_locked", + },{ + "type" : "terrain", + "id" : "t_door_locked", "name": "closed wood door", "symbol": "+", "color": "brown", @@ -719,10 +661,9 @@ "sound_fail": "whump!", "ter_set": "t_door_b" } - }, - { - "type": "terrain", - "id": "t_door_locked_alarm", + },{ + "type" : "terrain", + "id" : "t_door_locked_alarm", "name": "closed wood door", "symbol": "+", "color": "brown", @@ -736,19 +677,17 @@ "sound_fail": "whump!", "ter_set": "t_door_b" } - }, - { - "type": "terrain", - "id": "t_door_frame", + },{ + "type" : "terrain", + "id" : "t_door_frame", "name": "empty door frame", "symbol": ".", "color": "brown", "move_cost": 2, "flags": ["TRANSPARENT", "SUPPORTS_ROOF", "FLAT"] - }, - { - "type": "terrain", - "id": "t_chaingate_l", + },{ + "type" : "terrain", + "id" : "t_chaingate_l", "name": "locked wire gate", "symbol": "+", "color": "cyan", @@ -764,10 +703,9 @@ { "item": "scrap", "amount": 12, "minamount": 0 } ] } - }, - { - "type": "terrain", - "id": "t_fencegate_c", + },{ + "type" : "terrain", + "id" : "t_fencegate_c", "name": "closed wooden gate", "symbol": "+", "color": "brown", @@ -785,10 +723,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_fencegate_o", + },{ + "type" : "terrain", + "id" : "t_fencegate_o", "name": "open wooden gate", "symbol": ".", "color": "brown", @@ -796,10 +733,9 @@ "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "FLAMMABLE_ASH", "FLAT"], "close": "t_fencegate_c" - }, - { - "type": "terrain", - "id": "t_chaingate_c", + },{ + "type" : "terrain", + "id" : "t_chaingate_c", "name": "closed wire gate", "symbol": "+", "color": "cyan", @@ -816,20 +752,18 @@ { "item": "scrap", "amount": 12, "minamount": 0 } ] } - }, - { - "type": "terrain", - "id": "t_chaingate_o", + },{ + "type" : "terrain", + "id" : "t_chaingate_o", "name": "open wire gate", "symbol": ".", "color": "cyan", "move_cost": 2, "flags": ["TRANSPARENT", "SUPPORTS_ROOF", "FLAT"], "close": "t_chaingate_c" - }, - { - "type": "terrain", - "id": "t_door_boarded", + },{ + "type" : "terrain", + "id" : "t_door_boarded", "name": "boarded up door", "symbol": "#", "color": "brown", @@ -846,40 +780,36 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_door_metal_c", + },{ + "type" : "terrain", + "id" : "t_door_metal_c", "name": "closed metal door", "symbol": "+", "color": "cyan", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"], "open": "t_door_metal_o" - }, - { - "type": "terrain", - "id": "t_door_metal_o", + },{ + "type" : "terrain", + "id" : "t_door_metal_o", "name": "open metal door", "symbol": "'", "color": "cyan", "move_cost": 2, "flags": ["TRANSPARENT", "SUPPORTS_ROOF", "FLAT"], "close": "t_door_metal_c" - }, - { - "type": "terrain", - "id": "t_door_metal_locked", + },{ + "type" : "terrain", + "id" : "t_door_metal_locked", "name": "closed metal door", "comment": "Actually locked", "symbol": "+", "color": "cyan", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_door_bar_c", + },{ + "type" : "terrain", + "id" : "t_door_bar_c", "name": "closed bar door", "comment": "Unlocked, only created at map gen", "symbol": "+", @@ -888,30 +818,27 @@ "flags": ["TRANSPARENT", "NOITEM", "SUPPORTS_ROOF", "WALL"], "open": "t_door_bar_o", "close": "t_door_bar_locked" - }, - { - "type": "terrain", - "id": "t_door_bar_o", + },{ + "type" : "terrain", + "id" : "t_door_bar_o", "name": "open bar door", "symbol": "'", "color": "cyan", "move_cost": 2, "flags": ["TRANSPARENT", "SUPPORTS_ROOF", "FLAT"], "close": "t_door_bar_c" - }, - { - "type": "terrain", - "id": "t_door_bar_locked", + },{ + "type" : "terrain", + "id" : "t_door_bar_locked", "name": "closed bar door", "comment": "Locked", "symbol": "+", "color": "cyan", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_door_glass_c", + },{ + "type" : "terrain", + "id" : "t_door_glass_c", "name": "closed glass door", "symbol": "+", "color": "ltcyan", @@ -925,39 +852,35 @@ "sound_fail": "whack!", "ter_set": "t_floor" } - }, - { - "type": "terrain", - "id": "t_door_glass_o", + },{ + "type" : "terrain", + "id" : "t_door_glass_o", "name": "open glass door", "symbol": "'", "color": "ltcyan", "move_cost": 2, "flags": ["TRANSPARENT", "SUPPORTS_ROOF", "FLAT"], "close": "t_door_glass_c" - }, - { - "type": "terrain", - "id": "t_portcullis", + },{ + "type" : "terrain", + "id" : "t_portcullis", "name": "makeshift portcullis", "symbol": "&", "color": "cyan", "move_cost": 0, "flags": ["NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_recycler", + },{ + "type" : "terrain", + "id" : "t_recycler", "name": "steel compactor", "symbol": "&", "color": "green", "move_cost": 0, "flags": ["TRANSPARENT"], "examine_action": "recycler" - }, - { - "type": "terrain", - "id": "t_window", + },{ + "type" : "terrain", + "id" : "t_window", "name": "window", "symbol": "\"", "color": "ltcyan", @@ -971,10 +894,9 @@ "sound_fail": "whack!", "ter_set": "t_window_frame" } - }, - { - "type": "terrain", - "id": "t_window_taped", + },{ + "type" : "terrain", + "id" : "t_window_taped", "name": "taped window", "symbol": "\"", "color": "dkgray", @@ -988,10 +910,9 @@ "sound_fail": "whack!", "ter_set": "t_window_frame" } - }, - { - "type": "terrain", - "id": "t_window_domestic", + },{ + "type" : "terrain", + "id" : "t_window_domestic", "name": "window", "symbol": "\"", "color": "ltcyan", @@ -1012,10 +933,9 @@ { "item": "string_36", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_window_domestic_taped", + },{ + "type" : "terrain", + "id" : "t_window_domestic_taped", "name": "taped window", "comment": "Taped window with curtains", "symbol": "\"", @@ -1035,20 +955,18 @@ { "item": "string_36", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_window_open", + },{ + "type" : "terrain", + "id" : "t_window_open", "name": "open window", "symbol": "'", "color": "ltcyan", "move_cost": 4, "flags": ["TRANSPARENT", "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "OPENCLOSE_INSIDE", "WALL" ], "close": "t_window_domestic" - }, - { - "type": "terrain", - "id": "t_curtains", + },{ + "type" : "terrain", + "id" : "t_curtains", "name": "closed curtains", "symbol": "\"", "color": "dkgray", @@ -1067,10 +985,9 @@ { "item": "string_36", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_window_alarm", + },{ + "type" : "terrain", + "id" : "t_window_alarm", "name": "window", "symbol": "\"", "color": "ltcyan", @@ -1084,10 +1001,9 @@ "sound_fail": "whack!", "ter_set": "t_window_frame" } - }, - { - "type": "terrain", - "id": "t_window_alarm_taped", + },{ + "type" : "terrain", + "id" : "t_window_alarm_taped", "name": "taped window", "symbol": "\"", "color": "dkgray", @@ -1101,29 +1017,26 @@ "sound_fail": "whack!", "ter_set": "t_window_frame" } - }, - { - "type": "terrain", - "id": "t_window_empty", + },{ + "type" : "terrain", + "id" : "t_window_empty", "name": "empty window", "symbol": "0", "color": "yellow", "move_cost": 8, "flags": ["TRANSPARENT", "FLAMMABLE", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_window_frame", + },{ + "type" : "terrain", + "id" : "t_window_frame", "name": "window frame", "symbol": "0", "color": "ltcyan", "move_cost": 8, "flags": [ "TRANSPARENT", "SHARP", "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_window_boarded", + },{ + "type" : "terrain", + "id" : "t_window_boarded", "name": "boarded up window", "symbol": "#", "color": "brown", @@ -1138,56 +1051,50 @@ { "item": "splinter", "amount": 2, "minamount": 0, "chance": 50 } ] } - }, - { - "type": "terrain", - "id": "t_window_stained_green", + },{ + "type" : "terrain", + "id" : "t_window_stained_green", "name": "high stained glass window", "symbol": "\"", "color": "ltgreen", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_window_stained_red", + },{ + "type" : "terrain", + "id" : "t_window_stained_red", "name": "high stained glass window", "symbol": "\"", "color": "ltred", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_window_stained_blue", + },{ + "type" : "terrain", + "id" : "t_window_stained_blue", "name": "high stained glass window", "symbol": "\"", "color": "ltblue", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_rock", + },{ + "type" : "terrain", + "id" : "t_rock", "name": "solid rock", "symbol": "#", "color": "white", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_fault", + },{ + "type" : "terrain", + "id" : "t_fault", "name": "odd fault", "symbol": "#", "color": "magenta", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"], "examine_action": "fault" - }, - { - "type": "terrain", - "id": "t_paper", + },{ + "type" : "terrain", + "id" : "t_paper", "name": "paper wall", "symbol": "#", "color": "white", @@ -1200,19 +1107,17 @@ "sound_fail": "slap!", "ter_set": "t_dirt" } - }, - { - "type": "terrain", - "id": "t_tree", + },{ + "type" : "terrain", + "id" : "t_tree", "name": "tree", "symbol": "7", "color": "green", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "TREE"] - }, - { - "type": "terrain", - "id": "t_tree_young", + },{ + "type" : "terrain", + "id" : "t_tree_young", "name": "young tree", "symbol": "1", "color": "green", @@ -1227,20 +1132,18 @@ { "item": "stick", "amount": 3, "minamount": 0 } ] } - }, - { - "type": "terrain", - "id": "t_tree_apple", + },{ + "type" : "terrain", + "id" : "t_tree_apple", "name": "apple tree", "symbol": "7", "color": "ltgreen", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "TREE"], "examine_action": "tree_apple" - }, - { - "type": "terrain", - "id": "t_underbrush", + },{ + "type" : "terrain", + "id" : "t_underbrush", "name": "underbrush", "symbol": "#", "color": "ltgreen", @@ -1255,10 +1158,9 @@ "sound_fail": "brush.", "ter_set": "t_dirt" } - }, - { - "type": "terrain", - "id": "t_shrub", + },{ + "type" : "terrain", + "id" : "t_shrub", "name": "shrub", "symbol": "#", "color": "green", @@ -1272,10 +1174,9 @@ "sound_fail": "brush.", "ter_set": "t_underbrush" } - }, - { - "type": "terrain", - "id": "t_shrub_blueberry", + },{ + "type" : "terrain", + "id" : "t_shrub_blueberry", "name": "blueberry bush", "symbol": "#", "color": "ltgreen", @@ -1284,10 +1185,9 @@ "TRANSPARENT", "BASHABLE", "CONTAINER", "FLAMMABLE_ASH", "THIN_OBSTACLE", "SHRUB" ], "examine_action": "shrub_blueberry" - }, - { - "type": "terrain", - "id": "t_shrub_strawberry", + },{ + "type" : "terrain", + "id" : "t_shrub_strawberry", "name": "strawberry bush", "symbol": "#", "color": "ltgreen", @@ -1296,46 +1196,41 @@ "TRANSPARENT", "BASHABLE", "CONTAINER", "FLAMMABLE_ASH", "THIN_OBSTACLE", "SHRUB" ], "examine_action": "shrub_strawberry" - }, - { - "type": "terrain", - "id": "t_trunk", + },{ + "type" : "terrain", + "id" : "t_trunk", "name": "tree trunk", "symbol": "1", "color": "brown", "move_cost": 4, "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "DIGGABLE"] - }, - { - "type": "terrain", - "id": "t_root_wall", + },{ + "type" : "terrain", + "id" : "t_root_wall", "name": "root wall", "symbol": "#", "color": "brown", "move_cost": 0, "flags": ["NOITEM", "SUPPORTS_ROOF", "WALL"] - }, - { - "type": "terrain", - "id": "t_wax", + },{ + "type" : "terrain", + "id" : "t_wax", "name": "wax wall", "symbol": "#", "color": "yellow", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "PLACE_ITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_floor_wax", + },{ + "type" : "terrain", + "id" : "t_floor_wax", "name": "wax floor", "symbol": ".", "color": "yellow", "move_cost": 2, "flags": ["TRANSPARENT", "FLAMMABLE_HARD", "INDOORS", "FLAT"] - }, - { - "type": "terrain", - "id": "t_fence_v", + },{ + "type" : "terrain", + "id" : "t_fence_v", "name": "picket fence", "symbol": "|", "color": "brown", @@ -1345,7 +1240,7 @@ ], "bash": { "str_min": 1, "str_max": 10, - "sound": "crak", + "sound": "crack.", "sound_fail": "whump.", "ter_set": "t_dirt", "items": [ @@ -1354,10 +1249,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_fence_h", + },{ + "type" : "terrain", + "id" : "t_fence_h", "name": "picket fence", "symbol": "-", "color": "brown", @@ -1367,7 +1261,7 @@ ], "bash": { "str_min": 1, "str_max": 10, - "sound": "crak", + "sound": "crack.", "sound_fail": "whump.", "ter_set": "t_dirt", "items": [ @@ -1376,10 +1270,9 @@ { "item": "splinter", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_chainfence_v", + },{ + "type" : "terrain", + "id" : "t_chainfence_v", "name": "chain link fence", "symbol": "|", "color": "cyan", @@ -1397,10 +1290,9 @@ { "item": "wire", "amount": 20, "minamount": 8 } ] } - }, - { - "type": "terrain", - "id": "t_chainfence_h", + },{ + "type" : "terrain", + "id" : "t_chainfence_h", "name": "chain link fence", "symbol": "-", "color": "cyan", @@ -1418,19 +1310,17 @@ { "item": "wire", "amount": 20, "minamount": 8 } ] } - }, - { - "type": "terrain", - "id": "t_chainfence_posts", + },{ + "type" : "terrain", + "id" : "t_chainfence_posts", "name": "metal post", "symbol": "#", "color": "cyan", "move_cost": 2, "flags": ["TRANSPARENT", "THIN_OBSTACLE"] - }, - { - "type": "terrain", - "id": "t_fence_post", + },{ + "type" : "terrain", + "id" : "t_fence_post", "name": "fence post", "symbol": "#", "color": "brown", @@ -1439,65 +1329,59 @@ "examine_action": "fence_post", "bash": { "str_min": 1, "str_max": 10, - "sound": "crak", + "sound": "crack.", "sound_fail": "whump.", "ter_set": "t_dirt", "items": [ { "item": "pointy_stick", "amount": 1 } ] } - }, - { - "type": "terrain", - "id": "t_fence_wire", + },{ + "type" : "terrain", + "id" : "t_fence_wire", "name": "wire fence", "symbol": "$", "color": "blue", "move_cost": 4, "flags": ["TRANSPARENT", "THIN_OBSTACLE"], "examine_action": "remove_fence_wire" - }, - { - "type": "terrain", - "id": "t_fence_barbed", + },{ + "type" : "terrain", + "id" : "t_fence_barbed", "name": "barbed wire fence", "symbol": "$", "color": "blue", "move_cost": 4, "flags": ["TRANSPARENT", "SHARP", "THIN_OBSTACLE"], "examine_action": "remove_fence_barbed" - }, - { - "type": "terrain", - "id": "t_fence_rope", + },{ + "type" : "terrain", + "id" : "t_fence_rope", "name": "rope fence", "symbol": "$", "color": "brown", "move_cost": 3, "flags": ["TRANSPARENT", "THIN_OBSTACLE"], "examine_action": "remove_fence_rope" - }, - { - "type": "terrain", - "id": "t_railing_v", + },{ + "type" : "terrain", + "id" : "t_railing_v", "name": "railing", "symbol": "|", "color": "yellow", "move_cost": 3, "flags": ["TRANSPARENT", "NOITEM", "THIN_OBSTACLE"] - }, - { - "type": "terrain", - "id": "t_railing_h", + },{ + "type" : "terrain", + "id" : "t_railing_h", "name": "railing", "symbol": "-", "color": "yellow", "move_cost": 3, "flags": ["TRANSPARENT", "NOITEM", "THIN_OBSTACLE"] - }, - { - "type": "terrain", - "id": "t_marloss", + },{ + "type" : "terrain", + "id" : "t_marloss", "name": "marloss bush", "symbol": "#", "color": "dkgray", @@ -1510,19 +1394,17 @@ "ter_set": "t_fungus" }, "examine_action": "shrub_marloss" - }, - { - "type": "terrain", - "id": "t_fungus", + },{ + "type" : "terrain", + "id" : "t_fungus", "name": "fungal bed", "symbol": ".", "color": "ltgray", "move_cost": 3, "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "DIGGABLE", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_fungus_floor_in", + },{ + "type" : "terrain", + "id" : "t_fungus_floor_in", "name": "fungal floor", "comment": "roofed", "symbol": ".", @@ -1531,66 +1413,59 @@ "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "FUNGUS" ] - }, - { - "type": "terrain", - "id": "t_fungus_floor_sup", + },{ + "type" : "terrain", + "id" : "t_fungus_floor_sup", "name": "fungal floor", "comment": "supports", "symbol": ".", "color": "ltgray", "move_cost": 2, "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "SUPPORTS_ROOF", "FLAT", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_fungus_floor_out", + },{ + "type" : "terrain", + "id" : "t_fungus_floor_out", "name": "fungal floor", "comment": "outside", "symbol": ".", "color": "ltgray", "move_cost": 2, "flags": ["TRANSPARENT", "FLAMMABLE_ASH", "FLAT", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_fungus_wall", + },{ + "type" : "terrain", + "id" : "t_fungus_wall", "name": "fungal wall", "symbol": "O", "color": "dkgray", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_fungus_wall_v", + },{ + "type" : "terrain", + "id" : "t_fungus_wall_v", "name": "fungal wall", "symbol": "LINE_XOXO", "color": "dkgray", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_fungus_wall_h", + },{ + "type" : "terrain", + "id" : "t_fungus_wall_h", "name": "fungal wall", "symbol": "LINE_OXOX", "color": "dkgray", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_fungus_mound", + },{ + "type" : "terrain", + "id" : "t_fungus_mound", "name": "fungal mound", "symbol": "#", "color": "ltgray", "move_cost": 4, "flags": ["TRANSPARENT", "THIN_OBSTACLE", "FLAMMABLE_ASH", "FUNGUS"] - }, - { - "type": "terrain", - "id": "t_shrub_fungal", + },{ + "type" : "terrain", + "id" : "t_shrub_fungal", "name": "fungal shrub", "symbol": "#", "color": "dkgray", @@ -1598,272 +1473,243 @@ "flags": [ "TRANSPARENT", "BASHABLE", "CONTAINER", "FLAMMABLE_ASH", "THIN_OBSTACLE", "PLACE_ITEM", "SHRUB", "FUNGUS" ] - }, - { - "type": "terrain", - "id": "t_tree_fungal", + },{ + "type" : "terrain", + "id" : "t_tree_fungal", "name": "fungal tree", "symbol": "7", "color": "dkgray", "move_cost": 0, "flags": ["FLAMMABLE_ASH", "NOITEM", "FUNGUS", "TREE"] - }, - { - "type": "terrain", - "id": "t_tree_fungal_young", + },{ + "type" : "terrain", + "id" : "t_tree_fungal_young", "name": "young fungal tree", "symbol": "1", "color": "dkgray", "move_cost": 4, "flags": ["TRANSPARENT", "BASHABLE", "FLAMMABLE_ASH", "NOITEM", "FUNGUS", "YOUNG"] - }, - { - "type": "terrain", - "id": "t_water_sh", + },{ + "type" : "terrain", + "id" : "t_water_sh", "name": "shallow water", "symbol": "~", "color": "ltblue", "move_cost": 5, "flags": ["TRANSPARENT", "LIQUID", "SWIMMABLE"], "examine_action": "water_source" - }, - { - "type": "terrain", - "id": "t_water_dp", + },{ + "type" : "terrain", + "id" : "t_water_dp", "name": "deep water", "symbol": "~", "color": "blue", "move_cost": 0, "flags": ["TRANSPARENT", "LIQUID", "SWIMMABLE"], "examine_action": "water_source" - }, - { - "type": "terrain", - "id": "t_water_pool", + },{ + "type" : "terrain", + "id" : "t_water_pool", "name": "pool water", "symbol": "~", "color": "ltblue", "move_cost": 5, "flags": ["TRANSPARENT", "LIQUID", "SWIMMABLE", "INDOORS"], "examine_action": "water_source" - }, - { - "type": "terrain", - "id": "t_sewage", + },{ + "type" : "terrain", + "id" : "t_sewage", "name": "sewage", "symbol": "~", "color": "ltgreen", "move_cost": 6, "flags": ["TRANSPARENT", "SWIMMABLE"], "examine_action": "water_source" - }, - { - "type": "terrain", - "id": "t_lava", + },{ + "type" : "terrain", + "id" : "t_lava", "name": "lava", "symbol": "~", "color": "red", "move_cost": 4, "trap": "lava", "flags": ["TRANSPARENT", "LIQUID", "DESTROY_ITEM"] - }, - { - "type": "terrain", - "id": "t_sandbox", + },{ + "type" : "terrain", + "id" : "t_sandbox", "name": "sandbox", "symbol": "#", "color": "yellow", "move_cost": 3, "flags": ["TRANSPARENT", "DECONSTRUCT"] - }, - { - "type": "terrain", - "id": "t_slide", + },{ + "type" : "terrain", + "id" : "t_slide", "name": "slide", "symbol": "#", "color": "ltcyan", "move_cost": 4, "flags": ["TRANSPARENT", "DECONSTRUCT"] - }, - { - "type": "terrain", - "id": "t_monkey_bars", + },{ + "type" : "terrain", + "id" : "t_monkey_bars", "name": "monkey bars", "symbol": "#", "color": "cyan", "move_cost": 4, "flags": ["TRANSPARENT", "DECONSTRUCT"] - }, - { - "type": "terrain", - "id": "t_backboard", + },{ + "type" : "terrain", + "id" : "t_backboard", "name": "backboard", "symbol": "7", "color": "red", "move_cost": 0, "flags": ["TRANSPARENT", "DECONSTRUCT", "WALL"] - }, - { - "type": "terrain", - "id": "t_gas_pump", + },{ + "type" : "terrain", + "id" : "t_gas_pump", "name": "gasoline pump", "symbol": "&", "color": "red", "move_cost": 0, "flags": ["TRANSPARENT", "EXPLODES", "NOITEM", "SEALED", "CONTAINER", "WALL"], "examine_action": "gaspump" - }, - { - "type": "terrain", - "id": "t_gas_pump_smashed", + },{ + "type" : "terrain", + "id" : "t_gas_pump_smashed", "name": "smashed gas pump", "symbol": "&", "color": "ltred", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_generator_broken", + },{ + "type" : "terrain", + "id" : "t_generator_broken", "name": "broken generator", "symbol": "&", "color": "ltgray", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_missile", + },{ + "type" : "terrain", + "id" : "t_missile", "name": "missile", "symbol": "#", "color": "ltblue", "move_cost": 0, "flags": ["EXPLODES", "NOITEM"] - }, - { - "type": "terrain", - "id": "t_missile_exploded", + },{ + "type" : "terrain", + "id" : "t_missile_exploded", "name": "blown-out missile", "symbol": "#", "color": "ltgray", "move_cost": 0, "flags": ["NOITEM"] - }, - { - "type": "terrain", - "id": "t_radio_tower", + },{ + "type" : "terrain", + "id" : "t_radio_tower", "name": "radio tower", "symbol": "&", "color": "ltgray", "move_cost": 0, "flags": ["NOITEM"] - }, - { - "type": "terrain", - "id": "t_radio_controls", + },{ + "type" : "terrain", + "id" : "t_radio_controls", "name": "radio controls", "symbol": "6", "color": "green", "move_cost": 0, "flags": ["TRANSPARENT", "BASHABLE", "NOITEM"] - }, - { - "type": "terrain", - "id": "t_console_broken", + },{ + "type" : "terrain", + "id" : "t_console_broken", "name": "broken console", "symbol": "6", "color": "ltgray", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "COLLAPSES", "INDOORS"] - }, - { - "type": "terrain", - "id": "t_console", + },{ + "type" : "terrain", + "id" : "t_console", "name": "computer console", "symbol": "6", "color": "blue", "move_cost": 0, "flags": ["TRANSPARENT", "CONSOLE", "NOITEM", "COLLAPSES", "INDOORS"] - }, - { - "type": "terrain", - "id": "t_gates_mech_control", + },{ + "type" : "terrain", + "id" : "t_gates_mech_control", "name": "mechanical winch", "symbol": "6", "color": "cyan_red", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "COLLAPSES"], "examine_action": "controls_gate" - }, - { - "type": "terrain", - "id": "t_gates_control_concrete", + },{ + "type" : "terrain", + "id" : "t_gates_control_concrete", "name": "mechanical winch", "symbol": "6", "color": "cyan_red", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "COLLAPSES"], "examine_action": "controls_gate" - }, - { - "type": "terrain", - "id": "t_barndoor", + },{ + "type" : "terrain", + "id" : "t_barndoor", "name": "rope and pulley", "symbol": "|", "color": "brown", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "COLLAPSES"], "examine_action": "controls_gate" - }, - { - "type": "terrain", - "id": "t_palisade_pulley", + },{ + "type" : "terrain", + "id" : "t_palisade_pulley", "name": "rope and pulley", "symbol": "|", "color": "brown", "move_cost": 0, "flags": ["TRANSPARENT", "NOITEM", "COLLAPSES"], "examine_action": "controls_gate" - }, - { - "type": "terrain", - "id": "t_sewage_pipe", + },{ + "type" : "terrain", + "id" : "t_sewage_pipe", "name": "sewage pipe", "symbol": "1", "color": "ltgray", "move_cost": 0, "flags": ["TRANSPARENT", "WALL"] - }, - { - "type": "terrain", - "id": "t_sewage_pump", + },{ + "type" : "terrain", + "id" : "t_sewage_pump", "name": "sewage pump", "symbol": "&", "color": "ltgray", "move_cost": 0, "flags": ["NOITEM", "WALL"] - }, - { - "type": "terrain", - "id": "t_centrifuge", + },{ + "type" : "terrain", + "id" : "t_centrifuge", "name": "centrifuge", "symbol": "{", "color": "magenta", "move_cost": 0, "flags": ["TRANSPARENT", "WALL"] - }, - { - "type": "terrain", - "id": "t_column", + },{ + "type" : "terrain", + "id" : "t_column", "name": "column", "symbol": "1", "color": "ltgray", "move_cost": 0, "flags": ["FLAMMABLE", "WALL"] - }, - { - "type": "terrain", - "id": "t_vat", + },{ + "type" : "terrain", + "id" : "t_vat", "name": "cloning vat", "symbol": "0", "color": "ltcyan", @@ -1875,91 +1721,81 @@ "sound_fail": "plunk.", "ter_set": "t_floor" } - }, - { + },{ "type": "terrain", "id": "t_stairs_down", - "name": "stairs down", + "name": "stairs", "symbol": ">", "color": "yellow", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_DOWN", "PLACE_ITEM"] - }, - { + },{ "type": "terrain", "id": "t_stairs_up", - "name": "stairs up", + "name": "stairs", "symbol": "<", "color": "yellow", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_UP", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_manhole", + },{ + "type" : "terrain", + "id" : "t_manhole", "name": "manhole", "symbol": ">", "color": "dkgray", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_DOWN", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_ladder_up", + },{ + "type" : "terrain", + "id" : "t_ladder_up", "name": "ladder", "symbol": "<", "color": "dkgray", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_UP", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_ladder_down", + },{ + "type" : "terrain", + "id" : "t_ladder_down", "name": "ladder", "symbol": ">", "color": "dkgray", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_DOWN", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_slope_down", + },{ + "type" : "terrain", + "id" : "t_slope_down", "name": "downward slope", "symbol": ">", "color": "brown", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_DOWN", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_slope_up", + },{ + "type" : "terrain", + "id" : "t_slope_up", "name": "upward slope", "symbol": "<", "color": "brown", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_UP", "PLACE_ITEM"] - }, - { - "type": "terrain", - "id": "t_rope_up", + },{ + "type" : "terrain", + "id" : "t_rope_up", "name": "rope leading up", "symbol": "<", "color": "white", "move_cost": 2, "flags": ["TRANSPARENT", "GOES_UP"] - }, - { - "type": "terrain", - "id": "t_manhole_cover", + },{ + "type" : "terrain", + "id" : "t_manhole_cover", "name": "manhole cover", "symbol": "0", "color": "dkgray", "move_cost": 2, "flags": ["TRANSPARENT"] - }, - { - "type": "terrain", - "id": "t_card_science", + },{ + "type" : "terrain", + "id" : "t_card_science", "name": "card reader", "comment": "Science", "symbol": "6", @@ -1967,10 +1803,9 @@ "move_cost": 0, "flags": ["NOITEM"], "examine_action": "cardreader" - }, - { - "type": "terrain", - "id": "t_card_military", + },{ + "type" : "terrain", + "id" : "t_card_military", "name": "card reader", "comment": "Military", "symbol": "6", @@ -1978,164 +1813,147 @@ "move_cost": 0, "flags": ["NOITEM"], "examine_action": "cardreader" - }, - { - "type": "terrain", - "id": "t_card_reader_broken", + },{ + "type" : "terrain", + "id" : "t_card_reader_broken", "name": "broken card reader", "symbol": "6", "color": "ltgray", "move_cost": 0, "flags": ["NOITEM"] - }, - { - "type": "terrain", - "id": "t_slot_machine", + },{ + "type" : "terrain", + "id" : "t_slot_machine", "name": "slot machine", "symbol": "6", "color": "green", "move_cost": 0, "flags": ["BASHABLE", "NOITEM", "INDOORS"], "examine_action": "slot_machine" - }, - { - "type": "terrain", - "id": "t_elevator_control", + },{ + "type" : "terrain", + "id" : "t_elevator_control", "name": "elevator controls", "symbol": "6", "color": "ltblue", "move_cost": 0, "flags": ["NOITEM", "INDOORS"], "examine_action": "elevator" - }, - { - "type": "terrain", - "id": "t_elevator_control_off", + },{ + "type" : "terrain", + "id" : "t_elevator_control_off", "name": "powerless controls", "symbol": "6", "color": "ltgray", "move_cost": 0, "flags": ["NOITEM", "INDOORS"] - }, - { - "type": "terrain", - "id": "t_elevator", + },{ + "type" : "terrain", + "id" : "t_elevator", "name": "elevator", "symbol": ".", "color": "magenta", "move_cost": 2, "flags": ["INDOORS", "TRANSPARENT"] - }, - { - "type": "terrain", - "id": "t_pedestal_wyrm", + },{ + "type" : "terrain", + "id" : "t_pedestal_wyrm", "name": "dark pedestal", "symbol": "&", "color": "dkgray", "move_cost": 0, "flags": ["TRANSPARENT"], "examine_action": "pedestal_wyrm" - }, - { - "type": "terrain", - "id": "t_pedestal_temple", + },{ + "type" : "terrain", + "id" : "t_pedestal_temple", "name": "light pedestal", "symbol": "&", "color": "white", "move_cost": 0, "flags": ["TRANSPARENT"], "examine_action": "pedestal_temple" - }, - { - "type": "terrain", - "id": "t_rock_red", + },{ + "type" : "terrain", + "id" : "t_rock_red", "name": "red stone", "symbol": "#", "color": "red", "move_cost": 0, "move_cost": 0, "flags": [] - }, - { - "type": "terrain", - "id": "t_rock_green", + },{ + "type" : "terrain", + "id" : "t_rock_green", "name": "green stone", "symbol": "#", "color": "green", "move_cost": 0, "move_cost": 0, "flags": [] - }, - { - "type": "terrain", - "id": "t_rock_blue", + },{ + "type" : "terrain", + "id" : "t_rock_blue", "name": "blue stone", "symbol": "#", "color": "blue", "move_cost": 0, "move_cost": 0, "flags": [] - }, - { - "type": "terrain", - "id": "t_floor_red", + },{ + "type" : "terrain", + "id" : "t_floor_red", "name": "red floor", "symbol": ".", "color": "red", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_floor_green", + },{ + "type" : "terrain", + "id" : "t_floor_green", "name": "green floor", "symbol": ".", "color": "green", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_floor_blue", + },{ + "type" : "terrain", + "id" : "t_floor_blue", "name": "blue floor", "symbol": ".", "color": "blue", "move_cost": 2, "flags": ["TRANSPARENT", "FLAT"] - }, - { - "type": "terrain", - "id": "t_switch_rg", + },{ + "type" : "terrain", + "id" : "t_switch_rg", "name": "yellow switch", "symbol": "6", "color": "yellow", "move_cost": 0, "flags": ["TRANSPARENT"], "examine_action": "fswitch" - }, - { - "type": "terrain", - "id": "t_switch_gb", + },{ + "type" : "terrain", + "id" : "t_switch_gb", "name": "cyan switch", "symbol": "6", "color": "cyan", "move_cost": 0, "flags": ["TRANSPARENT"], "examine_action": "fswitch" - }, - { - "type": "terrain", - "id": "t_switch_rb", + },{ + "type" : "terrain", + "id" : "t_switch_rb", "name": "purple switch", "symbol": "6", "color": "magenta", "move_cost": 0, "flags": ["TRANSPARENT"], "examine_action": "fswitch" - }, - { - "type": "terrain", - "id": "t_switch_even", + },{ + "type" : "terrain", + "id" : "t_switch_even", "name": "checkered switch", "symbol": "6", "color": "white", diff --git a/data/json/vehicle_parts.json b/data/json/vehicle_parts.json index a06572146b244..3a5aca6a505f7 100644 --- a/data/json/vehicle_parts.json +++ b/data/json/vehicle_parts.json @@ -2,1393 +2,1883 @@ { "type" : "vehicle_part", "id" : "null", - "name": "null part", - "symbol": "?", - "color": "red", - "broken_symbol": "?", - "broken_color": "red", - "durability": 100, - "item": "NULL", - "difficulty": 0, - "flags": ["NOINSTALL"] + "name" : "null part", + "symbol" : "?", + "color" : "red", + "broken_symbol" : "?", + "broken_color" : "red", + "durability" : 100, + "item" : "NULL", + "difficulty" : 0, + "flags" : ["NOINSTALL"], + "breaks_into" : [] },{ "type" : "vehicle_part", "id" : "seat", - "name": "seat", - "symbol": "#", - "color": "red", - "broken_symbol": "*", - "broken_color": "red", - "damage_modifier": 60, - "durability": 300, - "size": 400, - "item": "seat", - "difficulty": 1, - "location": "center", - "flags": [ + "name" : "seat", + "symbol" : "#", + "color" : "red", + "broken_symbol" : "*", + "broken_color" : "red", + "damage_modifier" : 60, + "durability" : 300, + "size" : 400, + "item" : "seat", + "difficulty" : 1, + "location" : "center", + "flags" : [ "SEAT", "BOARDABLE", "CARGO", "BELTABLE" + ], + "breaks_into" : [ + {"item": "leather", "min": 1, "max": 5}, + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 3, "max": 5}, + {"item": "scrap", "min": 3, "max": 5} ] },{ "type" : "vehicle_part", - "id" : "saddle", - "name": "saddle", - "symbol": "#", + "id" : "tracker", + "name": "tracking device", + "symbol": "*", "color": "red", - "broken_symbol": "*", - "broken_color": "red", - "damage_modifier": 20, - "durability": 200, - "item": "saddle", - "difficulty": 1, - "location": "center", + "broken_symbol": "#", + "broken_color": "light_gray", + "damage_modifier": 10, + "durability": 20, + "item": "veh_tracker", + "difficulty": 3, + "power": 6, "flags": [ + "TRACK", "UNMOUNT_ON_DAMAGE" + ], + "breaks_into": [ + {"item": "scrap", "min": 0, "max": 2} + ] + },{ + "type" : "vehicle_part", + "id" : "saddle", + "name" : "saddle", + "symbol" : "#", + "color" : "red", + "broken_symbol" : "*", + "broken_color" : "red", + "damage_modifier" : 20, + "durability" : 200, + "item" : "saddle", + "difficulty" : 1, + "location" : "center", + "flags" : [ "SEAT", "BOARDABLE" + ], + "breaks_into" : [ + {"item": "leather", "min": 0, "max": 1}, + {"item": "scrap", "min": 1, "max": 2} ] },{ "type" : "vehicle_part", "id" : "bed", - "name": "bed", - "symbol": "#", - "color": "magenta", - "broken_symbol": "*", - "broken_color": "magenta", - "damage_modifier": 60, - "durability": 300, - "size": 400, - "item": "seat", - "difficulty": 1, - "location": "center", - "flags": [ + "name" : "bed", + "symbol" : "#", + "color" : "magenta", + "broken_symbol" : "*", + "broken_color" : "magenta", + "damage_modifier" : 60, + "durability" : 300, + "size" : 400, + "item" : "seat", + "difficulty" : 1, + "location" : "center", + "flags" : [ "BED", "BOARDABLE", "CARGO" + ], + "breaks_into" : [ + {"item": "leather", "min": 1, "max": 5}, + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 3, "max": 5}, + {"item": "scrap", "min": 3, "max": 5} ] },{ "type" : "vehicle_part", "id" : "frame_horizontal", - "name": "frame", - "symbol": "h", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "h", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_vertical", - "name": "frame", - "symbol": "j", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "j", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_cross", - "name": "frame", - "symbol": "c", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "c", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_nw", - "name": "frame", - "symbol": "y", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "y", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_ne", - "name": "frame", - "symbol": "u", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "u", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "scrap", "min": 1, "max": 4} + ] },{ "type" : "vehicle_part", "id" : "frame_se", - "name": "frame", - "symbol": "n", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "n", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_sw", - "name": "frame", - "symbol": "b", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "b", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_horizontal_2", - "name": "frame", - "symbol": "=", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "=", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_vertical_2", - "name": "frame", - "symbol": "H", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "H", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_cover", - "name": "frame", - "symbol": "^", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "frame", + "symbol" : "^", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "frame_handle", - "name": "handle", - "symbol": "^", - "color": "light_cyan", - "broken_symbol": "#", - "broken_color": "light_cyan", - "durability": 300, - "item": "frame", - "difficulty": 1, - "location": "structure", - "flags": [] + "name" : "handle", + "symbol" : "^", + "color" : "light_cyan", + "broken_symbol" : "#", + "broken_color" : "light_cyan", + "durability" : 300, + "item" : "frame", + "difficulty" : 1, + "location" : "structure", + "flags" : [], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "board_horizontal", - "name": "board", - "symbol": "h", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE"] + "name" : "board", + "symbol" : "h", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "board_vertical", - "name": "board", - "symbol": "j", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE"] + "name" : "board", + "symbol" : "j", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "board_nw", - "name": "board", - "symbol": "y", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE"] + "name" : "board", + "symbol" : "y", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "board_ne", - "name": "board", - "symbol": "u", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE"] + "name" : "board", + "symbol" : "u", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "board_se", - "name": "board", - "symbol": "n", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE"] + "name" : "board", + "symbol" : "n", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "board_sw", - "name": "board", - "symbol": "b", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE"] + "name" : "board", + "symbol" : "b", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_horizontal", - "name": "quarterpanel", - "symbol": "h", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "h", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_vertical", - "name": "quarterpanel", - "symbol": "j", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "j", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_nw", - "name": "quarterpanel", - "symbol": "y", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "y", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_ne", - "name": "quarterpanel", - "symbol": "u", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "u", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_se", - "name": "quarterpanel", - "symbol": "n", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "n", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_sw", - "name": "quarterpanel", - "symbol": "b", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "b", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_horizontal_2", - "name": "quarterpanel", - "symbol": "=", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "=", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_vertical_2", - "name": "quarterpanel", - "symbol": "H", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "H", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "halfboard_cover", - "name": "quarterpanel", - "symbol": "^", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 500, - "item": "steel_plate", - "difficulty": 1, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "quarterpanel", + "symbol" : "^", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 500, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "center", + "flags" : ["OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "aisle_horizontal", - "name": "aisle", - "symbol": "=", - "color": "white", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "center", - "flags": ["AISLE", "BOARDABLE"] + "name" : "aisle", + "symbol" : "=", + "color" : "white", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "center", + "flags" : ["AISLE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "aisle_vertical", - "name": "aisle", - "symbol": "H", - "color": "white", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "item": "frame", - "difficulty": 1, - "location": "center", - "flags": ["AISLE", "BOARDABLE"] + "name" : "aisle", + "symbol" : "H", + "color" : "white", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "center", + "flags" : ["AISLE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "trunk_floor", - "name": "floor trunk", - "symbol": "=", - "color": "white", - "broken_symbol": "#", - "broken_color": "light_gray", - "durability": 400, - "size": 400, - "item": "frame", - "difficulty": 1, - "location": "center", - "flags": ["AISLE", "BOARDABLE", "CARGO"] + "name" : "floor trunk", + "symbol" : "=", + "color" : "white", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 400, + "size" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "center", + "flags" : ["AISLE", "BOARDABLE", "CARGO"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] + },{ + "type" : "vehicle_part", + "id" : "stowboard_horizontal", + "name" : "stow board", + "symbol" : "h", + "color" : "white", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 700, + "size" : 200, + "item" : "steel_plate", + "difficulty" : 3, + "location" : "center", + "flags" : ["OBSTACLE", "OPAQUE", "CARGO"] + },{ + "type":"vehicle_part", + "id" : "stowboard_vertical", + "name" : "stow board", + "symbol" : "j", + "color" : "white", + "broken_symbol" : "#", + "broken_color" : "light_gray", + "durability" : 700, + "size" : 200, + "item" : "steel_plate", + "difficulty" : 3, + "location" : "center", + "flags" : ["OBSTACLE", "OPAQUE", "CARGO"] },{ "type" : "vehicle_part", "id" : "roof", - "name": "roof", - "symbol": "#", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "dark_gray", - "durability": 1000, - "item": "steel_plate", - "difficulty": 1, - "location": "roof", - "flags": ["ROOF"] + "name" : "roof", + "symbol" : "#", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "dark_gray", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 1, + "location" : "roof", + "flags" : ["ROOF"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "door", - "name": "door", - "symbol": "+", - "color": "cyan", - "broken_symbol": "&", - "broken_color": "cyan", - "damage_modifier": 80, - "durability": 200, - "item": "frame", - "difficulty": 2, - "location": "center", - "flags": ["OBSTACLE", "OPENABLE", "BOARDABLE"] + "name" : "door", + "symbol" : "+", + "color" : "cyan", + "broken_symbol" : "&", + "broken_color" : "cyan", + "damage_modifier" : 80, + "durability" : 200, + "item" : "frame", + "difficulty" : 2, + "location" : "center", + "flags" : ["OBSTACLE", "OPENABLE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "door_opaque", - "name": "opaque door", - "symbol": "+", - "color": "cyan", - "broken_symbol": "&", - "broken_color": "cyan", - "damage_modifier": 80, - "durability": 200, - "item": "frame", - "difficulty": 2, - "location": "center", - "flags": ["OBSTACLE", "OPAQUE", "OPENABLE", "BOARDABLE"] + "name" : "opaque door", + "symbol" : "+", + "color" : "cyan", + "broken_symbol" : "&", + "broken_color" : "cyan", + "damage_modifier" : 80, + "durability" : 200, + "item" : "frame", + "difficulty" : 2, + "location" : "center", + "flags" : ["OBSTACLE", "OPAQUE", "OPENABLE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "door_internal", - "name": "internal door", - "symbol": "+", - "color": "cyan", - "broken_symbol": "&", - "broken_color": "cyan", - "damage_modifier": 75, - "durability": 75, - "item": "frame", - "difficulty": 2, - "location": "center", - "flags": ["OBSTACLE", "OPAQUE", "OPENABLE", "ROOF", "BOARDABLE"] + "name" : "internal door", + "symbol" : "+", + "color" : "cyan", + "broken_symbol" : "&", + "broken_color" : "cyan", + "damage_modifier" : 75, + "durability" : 75, + "item" : "frame", + "difficulty" : 2, + "location" : "center", + "flags" : ["OBSTACLE", "OPAQUE", "OPENABLE", "ROOF", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "windshield", - "name": "windshield", - "symbol": "\"", - "color": "light_cyan", - "broken_symbol": "0", - "broken_color": "light_gray", - "damage_modifier": 70, - "durability": 50, - "item": "glass_sheet", - "difficulty": 1, - "location": "center", - "flags": ["OVER", "OBSTACLE"] + "name" : "windshield", + "symbol" : "\"", + "color" : "light_cyan", + "broken_symbol" : "0", + "broken_color" : "light_gray", + "damage_modifier" : 70, + "durability" : 50, + "item" : "glass_sheet", + "difficulty" : 1, + "location" : "center", + "flags" : ["OVER", "OBSTACLE", "WINDOW"], + "breaks_into" : [] },{ "type" : "vehicle_part", "id" : "blade_horizontal", - "name": "blade", - "symbol": "-", - "color": "white", - "broken_symbol": "x", - "broken_color": "white", - "damage_modifier": 250, - "durability": 100, - "item": "blade", - "difficulty": 2, - "location": "structure", - "flags": ["UNMOUNT_ON_DAMAGE", "SHARP", "PROTRUSION"] + "name" : "blade", + "symbol" : "-", + "color" : "white", + "broken_symbol" : "x", + "broken_color" : "white", + "damage_modifier" : 250, + "durability" : 100, + "item" : "blade", + "difficulty" : 2, + "location" : "structure", + "flags" : ["UNMOUNT_ON_DAMAGE", "SHARP", "PROTRUSION"], + "breaks_into" : [] },{ "type" : "vehicle_part", "id" : "blade_vertical", - "name": "blade", - "symbol": "|", - "color": "white", - "broken_symbol": "x", - "broken_color": "white", - "damage_modifier": 250, - "durability": 100, - "item": "blade", - "difficulty": 2, - "location": "structure", - "flags": ["UNMOUNT_ON_DAMAGE", "SHARP", "PROTRUSION"] + "name" : "blade", + "symbol" : "|", + "color" : "white", + "broken_symbol" : "x", + "broken_color" : "white", + "damage_modifier" : 250, + "durability" : 100, + "item" : "blade", + "difficulty" : 2, + "location" : "structure", + "flags" : ["UNMOUNT_ON_DAMAGE", "SHARP", "PROTRUSION"], + "breaks_into" : [] },{ "type" : "vehicle_part", "id" : "spike", - "name": "spike", - "symbol": ".", - "color": "white", - "broken_symbol": "x", - "broken_color": "white", - "damage_modifier": 300, - "durability": 100, - "item": "spike", - "difficulty": 2, - "location": "structure", - "flags": ["UNMOUNT_ON_DAMAGE", "SHARP", "PROTRUSION"] + "name" : "spike", + "symbol" : ".", + "color" : "white", + "broken_symbol" : "x", + "broken_color" : "white", + "damage_modifier" : 300, + "durability" : 100, + "item" : "spike", + "difficulty" : 2, + "location" : "structure", + "flags" : ["UNMOUNT_ON_DAMAGE", "SHARP", "PROTRUSION"], + "breaks_into" : [] },{ "type" : "vehicle_part", "id" : "wheel", - "name": "wheel", - "symbol": "0", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 200, - "wheel_width": 9, - "item": "wheel", - "difficulty": 4, - "location": "under", - "flags": ["WHEEL", "VARIABLE_SIZE"] + "name" : "wheel", + "symbol" : "0", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 200, + "wheel_width" : 9, + "item" : "wheel", + "difficulty" : 4, + "location" : "under", + "flags" : ["WHEEL", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 2}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "wheel_wide", - "name": "wide wheel", - "symbol": "O", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 400, - "wheel_width": 14, - "item": "wheel_wide", - "difficulty": 5, - "location": "under", - "flags": ["WHEEL", "VARIABLE_SIZE"] - },{ - "type" : "vehicle_part", - "id" : "wheel_underbody", - "name": "wide wheel (underbody)", - "symbol": "H", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 400, - "wheel_width": 14, - "item": "wheel_wide", - "difficulty": 6, - "location": "under", - "flags": ["WHEEL", "VARIABLE_SIZE"] + "name" : "wide wheel", + "symbol" : "O", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 400, + "wheel_width" : 14, + "item" : "wheel_wide", + "difficulty" : 5, + "location" : "under", + "flags" : ["WHEEL", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 2, "max": 3}, + {"item": "steel_chunk", "min": 2, "max": 3}, + {"item": "scrap", "min": 2, "max": 3} + ] },{ "type" : "vehicle_part", "id" : "wheel_unicycle", - "name": "unicycle wheel", - "symbol": "|", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 40, - "wheel_width": 2, - "item": "wheel_bicycle", - "difficulty": 2, - "location": "under", - "flags": ["WHEEL", "STABLE", "VARIABLE_SIZE"] + "name" : "unicycle wheel", + "symbol" : "|", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 40, + "wheel_width" : 2, + "item" : "wheel_bicycle", + "difficulty" : 2, + "location" : "under", + "flags" : ["WHEEL", "STABLE", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 0, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "wheel_bicycle", - "name": "bicycle wheel", - "symbol": "|", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 40, - "wheel_width": 2, - "item": "wheel_bicycle", - "difficulty": 1, - "location": "under", - "flags": ["WHEEL", "VARIABLE_SIZE"] + "name" : "bicycle wheel", + "symbol" : "|", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 40, + "wheel_width" : 2, + "item" : "wheel_bicycle", + "difficulty" : 1, + "location" : "under", + "flags" : ["WHEEL", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 0, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "wheel_motorbike", - "name": "motorbike wheel", - "symbol": "o", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 90, - "wheel_width": 4, - "item": "wheel_motorbike", - "difficulty": 2, - "location": "under", - "flags": ["WHEEL", "VARIABLE_SIZE"] + "name" : "motorbike wheel", + "symbol" : "o", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 90, + "wheel_width" : 4, + "item" : "wheel_motorbike", + "difficulty" : 2, + "location" : "under", + "flags" : ["WHEEL", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 3}, + {"item": "steel_chunk", "min": 1, "max": 3}, + {"item": "scrap", "min": 1, "max": 3} + ] },{ "type" : "vehicle_part", "id" : "wheel_small", - "name": "small wheel", - "symbol": "o", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 70, - "wheel_width": 6, - "item": "wheel_small", - "difficulty": 2, - "location": "under", - "flags": ["WHEEL", "VARIABLE_SIZE"] + "name" : "small wheel", + "symbol" : "o", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 70, + "wheel_width" : 6, + "item" : "wheel_small", + "difficulty" : 2, + "location" : "under", + "flags" : ["WHEEL", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 3}, + {"item": "scrap", "min": 1, "max": 3} + ] },{ "type" : "vehicle_part", "id" : "wheel_caster", - "name": "casters", - "symbol": "o", - "color": "dark_gray", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 50, - "durability": 70, - "wheel_width": 6, - "item": "wheel_caster", - "difficulty": 1, - "location": "under", - "flags": ["WHEEL", "STABLE", "VARIABLE_SIZE"] + "name" : "casters", + "symbol" : "o", + "color" : "dark_gray", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 50, + "durability" : 70, + "wheel_width" : 6, + "item" : "wheel_caster", + "difficulty" : 1, + "location" : "under", + "flags" : ["WHEEL", "STABLE", "VARIABLE_SIZE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 0, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2}] },{ "type" : "vehicle_part", "id" : "engine_1cyl", - "name": "1-cylinder engine", - "symbol": "*", - "color": "light_red", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 150, - "power": 40, - "fuel_type": "gasoline", - "item": "1cyl_combustion", - "difficulty": 2, - "location": "engine_block", - "flags": ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"] + "name" : "1-cylinder engine", + "symbol" : "*", + "color" : "light_red", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 150, + "power" : 40, + "fuel_type" : "gasoline", + "item" : "1cyl_combustion", + "difficulty" : 2, + "location" : "engine_block", + "flags" : ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 5, "max": 10}, + {"item": "steel_chunk", "min": 5, "max": 10}, + {"item": "scrap", "min": 5, "max": 10} + ] },{ "type" : "vehicle_part", "id" : "engine_vtwin", - "name": "V-twin engine", - "symbol": "*", - "color": "light_red", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 200, - "power": 120, - "fuel_type": "gasoline", - "item": "v2_combustion", - "difficulty": 2, - "location": "engine_block", - "flags": ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"] + "name" : "V-twin engine", + "symbol" : "*", + "color" : "light_red", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 200, + "power" : 120, + "fuel_type" : "gasoline", + "item" : "v2_combustion", + "difficulty" : 2, + "location" : "engine_block", + "flags" : ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 10, "max": 20}, + {"item": "steel_chunk", "min": 10, "max": 20}, + {"item": "scrap", "min": 10, "max": 20} + ] },{ "type" : "vehicle_part", "id" : "engine_inline4", - "name": "Inline-4 engine", - "symbol": "*", "color": "light_red", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 300, - "power": 300, - "fuel_type": "gasoline", - "item": "i4_combustion", - "difficulty": 3, - "location": "engine_block", - "flags": ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"] + "name" : "Inline-4 engine", + "symbol" : "*", "color": "light_red", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 300, + "power" : 300, + "fuel_type" : "gasoline", + "item" : "i4_combustion", + "difficulty" : 3, + "location" : "engine_block", + "flags" : ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 20, "max": 30}, + {"item": "steel_chunk", "min": 20, "max": 30}, + {"item": "scrap", "min": 20, "max": 30} + ] },{ "type" : "vehicle_part", "id" : "engine_v6", - "name": "V6 engine", - "symbol": "*", - "color": "light_red", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 400, - "power": 800, - "fuel_type": "gasoline", - "item": "v6_combustion", - "difficulty": 4, - "location": "engine_block", - "flags": ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"] + "name" : "V6 engine", + "symbol" : "*", + "color" : "light_red", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 400, + "power" : 800, + "fuel_type" : "gasoline", + "item" : "v6_combustion", + "difficulty" : 4, + "location" : "engine_block", + "flags" : ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 30, "max": 40}, + {"item": "steel_chunk", "min": 30, "max": 40}, + {"item": "scrap", "min": 30, "max": 40} + ] },{ "type" : "vehicle_part", "id" : "engine_v8", - "name": "V8 engine", - "symbol": "*", - "color": "light_red", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 400, - "power": 800, - "fuel_type": "gasoline", - "item": "v8_combustion", - "difficulty": 4, - "location": "engine_block", - "flags": ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"] + "name" : "V8 engine", + "symbol" : "*", + "color" : "light_red", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 400, + "power" : 800, + "fuel_type" : "gasoline", + "item" : "v8_combustion", + "difficulty" : 4, + "location" : "engine_block", + "flags" : ["ENGINE", "VARIABLE_SIZE", "ALTERNATOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 40, "max": 50}, + {"item": "steel_chunk", "min": 40, "max": 50}, + {"item": "scrap", "min": 40, "max": 50} + ] },{ "type" : "vehicle_part", "id" : "engine_electric", - "name": "electric motor", - "symbol": "*", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 200, - "power": 70, - "fuel_type": "battery", - "item": "motor", - "difficulty": 3, - "location": "engine_block", - "flags": ["ENGINE"] + "name" : "electric motor", + "symbol" : "*", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 200, + "power" : 70, + "fuel_type" : "battery", + "item" : "motor", + "difficulty" : 3, + "location" : "engine_block", + "flags" : ["ENGINE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 3, "max": 5}, + {"item": "scrap", "min": 3, "max": 5} + ] },{ "type" : "vehicle_part", "id" : "engine_electric_large", - "name": "large electric motor", - "symbol": "*", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 400, - "power": 350, - "fuel_type": "battery", - "item": "motor_large", - "difficulty": 4, - "location": "engine_block", - "flags": ["ENGINE"] + "name" : "large electric motor", + "symbol" : "*", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 400, + "power" : 350, + "fuel_type" : "battery", + "item" : "motor_large", + "difficulty" : 4, + "location" : "engine_block", + "flags" : ["ENGINE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 30, "max": 40}, + {"item": "steel_chunk", "min": 30, "max": 40}, + {"item": "scrap", "min": 30, "max": 40} + ] },{ "type" : "vehicle_part", "id" : "engine_plasma", - "name": "plasma engine", - "symbol": "*", - "color": "light_blue", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 250, - "power": 400, - "fuel_type": "plasma", - "item": "plasma_engine", - "difficulty": 6, - "location": "engine_block", - "flags": ["ENGINE", "ALTERNATOR"] + "name" : "plasma engine", + "symbol" : "*", + "color" : "light_blue", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 250, + "power" : 400, + "fuel_type" : "plasma", + "item" : "plasma_engine", + "difficulty" : 6, + "location" : "engine_block", + "flags" : ["ENGINE", "ALTERNATOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 10, "max": 15}, + {"item": "steel_chunk", "min": 10, "max": 15}, + {"item": "scrap", "min": 10, "max": 15} + ] },{ "type" : "vehicle_part", "id" : "foot_pedals", - "name": "Foot pedals", - "symbol": "*", - "color": "light_gray", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 50, - "durability": 50, - "power": 70, - "fuel_type": "muscle", - "item": "foot_crank", - "difficulty": 1, - "location": "engine_block", - "flags": ["ENGINE"] + "name" : "Foot pedals", + "symbol" : "*", + "color" : "light_gray", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 50, + "durability" : 50, + "power" : 70, + "fuel_type" : "muscle", + "item" : "foot_crank", + "difficulty" : 1, + "location" : "engine_block", + "flags" : ["ENGINE"], + "breaks_into" : [ + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 0, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "gas_tank", - "name": "gasoline tank", - "symbol": "O", - "color": "light_red", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 150, - "size": 3000, - "fuel_type": "gasoline", - "item": "metal_tank", - "difficulty": 1, - "location": "fuel_source", - "flags": ["FUEL_TANK"] + "name" : "gasoline tank", + "symbol" : "O", + "color" : "light_red", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 150, + "size" : 3000, + "fuel_type" : "gasoline", + "item" : "metal_tank", + "difficulty" : 1, + "location" : "fuel_source", + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "small_storage_battery", - "name": "small storage battery", - "symbol": "O", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 200, - "size": 1000, - "fuel_type": "battery", - "item": "small_storage_battery", - "difficulty": 1, - "location": "fuel_source", - "flags": ["FUEL_TANK"] + "name" : "small storage battery", + "symbol" : "O", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 200, + "size" : 1000, + "fuel_type" : "battery", + "item" : "small_storage_battery", + "difficulty" : 1, + "location" : "fuel_source", + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "storage_battery", - "name": "storage battery", - "symbol": "O", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 300, - "size": 100000, - "fuel_type": "battery", - "item": "storage_battery", - "difficulty": 2, - "location": "fuel_source", - "flags": ["FUEL_TANK"] + "name" : "storage battery", + "symbol" : "O", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 300, + "size" : 100000, + "fuel_type" : "battery", + "item" : "storage_battery", + "difficulty" : 2, + "location" : "fuel_source", + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 5, "max": 10}, + {"item": "steel_chunk", "min": 5, "max": 10}, + {"item": "scrap", "min": 5, "max": 10} + ] },{ "type" : "vehicle_part", "id" : "minireactor", - "name": "minireactor", - "symbol": "O", - "color": "light_green", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 700, - "size": 10000, - "fuel_type": "plutonium", - "item": "minireactor", - "difficulty": 7, - "location": "fuel_source", - "flags": ["FUEL_TANK"] + "name" : "minireactor", + "symbol" : "O", + "color" : "light_green", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 700, + "size" : 10000, + "fuel_type" : "plutonium", + "item" : "minireactor", + "difficulty" : 7, + "location" : "fuel_source", + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 6, "max": 11}, + {"item": "steel_chunk", "min": 6, "max": 11}, + {"item": "scrap", "min": 6, "max": 11} + ] },{ "type" : "vehicle_part", "id" : "hydrogen_tank", - "name": "hydrogen tank", - "symbol": "O", - "color": "light_blue", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 150, - "size": 3000, - "fuel_type": "plasma", - "item": "metal_tank", - "difficulty": 1, - "location": "fuel_source", - "flags": ["FUEL_TANK"] + "name" : "hydrogen tank", + "symbol" : "O", + "color" : "light_blue", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 150, + "size" : 3000, + "fuel_type" : "plasma", + "item" : "metal_tank", + "difficulty" : 1, + "location" : "fuel_source", + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "water_tank", - "name": "water tank", - "symbol": "O", - "color": "light_cyan", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 80, - "durability": 150, - "size": 400, - "fuel_type": "water", - "item": "metal_tank", - "difficulty": 1, - "location": "fuel_source", - "flags": ["FUEL_TANK"] + "name" : "water tank", + "symbol" : "O", + "color" : "light_cyan", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 80, + "durability" : 150, + "size" : 400, + "fuel_type" : "water", + "item" : "metal_tank", + "difficulty" : 1, + "location" : "fuel_source", + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 2}, + {"item": "scrap", "min": 1, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "minifridge", - "name": "minifridge", - "symbol": "H", - "color": "light_blue", - "broken_symbol": "#", - "broken_color": "light_blue", - "damage_modifier": 80, - "durability": 100, - "size": 400, - "item": "minifridge", - "difficulty": 3, - "location": "center", - "flags": ["CARGO", "OBSTACLE"] + "name" : "minifridge", + "symbol" : "H", + "color" : "light_blue", + "broken_symbol" : "#", + "broken_color" : "light_blue", + "damage_modifier" : 80, + "durability" : 100, + "size" : 400, + "item" : "minifridge", + "difficulty" : 3, + "location" : "center", + "flags" : ["CARGO", "OBSTACLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 8, "max": 13}, + {"item": "steel_chunk", "min": 8, "max": 13}, + {"item": "scrap", "min": 8, "max": 13}, + {"item": "hose", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "trunk", - "name": "trunk", - "symbol": "H", - "color": "brown", - "broken_symbol": "#", - "broken_color": "brown", - "damage_modifier": 80, - "durability": 300, - "size": 400, - "item": "frame", - "difficulty": 1, - "location": "center", - "flags": ["CARGO"] + "name" : "trunk", + "symbol" : "H", + "color" : "brown", + "broken_symbol" : "#", + "broken_color" : "brown", + "damage_modifier" : 80, + "durability" : 300, + "size" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "center", + "flags" : ["CARGO"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "box", - "name": "box", - "symbol": "o", - "color": "brown", - "broken_symbol": "#", - "broken_color": "brown", - "damage_modifier": 60, - "durability": 100, - "size": 400, - "item": "frame", - "difficulty": 1, - "location": "center", - "flags": ["CARGO", "BOARDABLE"] + "name" : "box", + "symbol" : "o", + "color" : "brown", + "broken_symbol" : "#", + "broken_color" : "brown", + "damage_modifier" : 60, + "durability" : 100, + "size" : 400, + "item" : "frame", + "difficulty" : 1, + "location" : "center", + "flags" : ["CARGO", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "controls", - "name": "controls", - "symbol": "$", - "color": "light_gray", - "broken_symbol": "$", - "broken_color": "red", - "damage_modifier": 10, - "durability": 250, - "item": "vehicle_controls", - "difficulty": 3, - "flags": ["CONTROLS"] + "name" : "controls", + "symbol" : "$", + "color" : "light_gray", + "broken_symbol" : "$", + "broken_color" : "red", + "damage_modifier" : 10, + "durability" : 250, + "item" : "vehicle_controls", + "difficulty" : 3, + "flags" : ["CONTROLS"], + "breaks_into" : [ + {"item": "steel_lump", "min": 1, "max": 1}, + {"item": "steel_chunk", "min": 1, "max": 3}, + {"item": "scrap", "min": 1, "max": 3} + ] },{ "type" : "vehicle_part", "id" : "muffler", - "name": "muffler", - "symbol": "/", - "color": "light_gray", - "broken_symbol": "/", - "broken_color": "light_gray", - "damage_modifier": 10, - "durability": 150, - "bonus": 40, - "item": "muffler", - "difficulty": 2, - "flags": ["MUFFLER"] + "name" : "muffler", + "symbol" : "/", + "color" : "light_gray", + "broken_symbol" : "/", + "broken_color" : "light_gray", + "damage_modifier" : 10, + "durability" : 150, + "bonus" : 40, + "item" : "muffler", + "difficulty" : 2, + "flags" : ["MUFFLER"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 5}, + {"item": "steel_chunk", "min": 3, "max": 5}, + {"item": "scrap", "min": 3, "max": 5} + ] },{ "type" : "vehicle_part", "id" : "seatbelt", - "name": "seatbelt", - "symbol": ",", - "color": "light_gray", - "broken_symbol": ",", - "broken_color": "red", - "damage_modifier": 10, + "name" : "seatbelt", + "symbol" : ",", + "color" : "light_gray", + "broken_symbol" : ",", + "broken_color" : "red", + "damage_modifier" : 10, + "durability" : 200, + "bonus" : 25, + "item" : "rope_6", + "difficulty" : 1, + "location" : "on_seat", + "flags" : ["SEATBELT"], + "breaks_into" : [ + {"item": "string_36", "min": 0, "max": 3} + ] + },{ + "type" : "vehicle_part", + "id" : "v_curtain", + "name": "curtain", + "symbol": "\"", + "color": "dark_gray", + "broken_symbol": "0", + "broken_color": "light_gray", + "damage_modifier": 1, "durability": 200, "bonus": 25, - "item": "rope_6", + "item": "sheet", + "location": "on_windshield", "difficulty": 1, - "location": "on_seat", - "flags": ["SEATBELT"] + "flags": ["OPENABLE", "OPENCLOSE_INSIDE", "OPAQUE", "CURTAIN"], + "breaks_into": [] },{ "type" : "vehicle_part", "id" : "solar_panel", - "name": "solar panel", - "symbol": "#", - "color": "yellow", - "broken_symbol": "x", - "broken_color": "yellow", - "damage_modifier": 10, - "durability": 20, - "power": 30, - "item": "solar_panel", - "difficulty": 6, - "location": "on_roof", - "flags": ["SOLAR_PANEL"] + "name" : "solar panel", + "symbol" : "#", + "color" : "yellow", + "broken_symbol" : "x", + "broken_color" : "yellow", + "damage_modifier" : 10, + "durability" : 20, + "power" : 30, + "item" : "solar_panel", + "difficulty" : 6, + "location" : "on_roof", + "flags" : ["SOLAR_PANEL"], + "breaks_into" : [ + {"item": "steel_lump", "min": 2, "max": 4}, + {"item": "steel_chunk", "min": 2, "max": 4}, + {"item": "scrap", "min": 2, "max": 4} + ] },{ "type" : "vehicle_part", "id" : "reinforced_solar_panel", - "name": "solar panel", - "symbol": "#", - "color": "light_blue", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 80, - "durability": 300, - "power": 30, - "item": "reinforced_solar_panel", - "difficulty": 6, - "location": "on_roof", - "flags": ["SOLAR_PANEL"] + "name" : "solar panel", + "symbol" : "#", + "color" : "light_blue", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 80, + "durability" : 300, + "power" : 30, + "item" : "reinforced_solar_panel", + "difficulty" : 6, + "location" : "on_roof", + "flags" : ["SOLAR_PANEL"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 7}, + {"item": "steel_chunk", "min": 4, "max": 7}, + {"item": "scrap", "min": 4, "max": 7} + ] },{ "type" : "vehicle_part", "id" : "kitchen_unit", - "name": "kitchen unit", - "symbol": "&", - "color": "light_cyan", - "broken_symbol": "x", - "broken_color": "light_cyan", - "damage_modifier": 10, - "durability": 20, - "size": 400, - "item": "kitchen_unit", - "difficulty": 4, - "location": "center", - "flags": ["CARGO", "OBSTACLE", "KITCHEN"] + "name" : "kitchen unit", + "symbol" : "&", + "color" : "light_cyan", + "broken_symbol" : "x", + "broken_color" : "light_cyan", + "damage_modifier" : 10, + "durability" : 20, + "size" : 400, + "item" : "kitchen_unit", + "difficulty" : 4, + "location" : "center", + "flags" : ["CARGO", "OBSTACLE", "KITCHEN"], + "breaks_into" : [ + {"item": "steel_lump", "min": 30, "max": 40}, + {"item": "steel_chunk", "min": 30, "max": 40}, + {"item": "scrap", "min": 30, "max": 40}, + {"item": "pan", "min": 0, "max": 1}, + {"item": "pot", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "welding_rig", - "name": "welding rig", - "symbol": "&", - "color": "light_red", - "broken_symbol": "x", - "broken_color": "light_red", - "damage_modifier": 10, - "durability": 20, - "size": 400, - "item": "weldrig", - "difficulty": 4, - "location": "center", - "flags": ["CARGO", "OBSTACLE", "WELDRIG"] + "name" : "welding rig", + "symbol" : "&", + "color" : "light_red", + "broken_symbol" : "x", + "broken_color" : "light_red", + "damage_modifier" : 10, + "durability" : 20, + "size" : 400, + "item" : "weldrig", + "difficulty" : 4, + "location" : "center", + "flags" : ["CARGO", "OBSTACLE", "WELDRIG"], + "breaks_into" : [ + {"item": "steel_lump", "min": 3, "max": 6}, + {"item": "steel_chunk", "min": 3, "max": 6}, + {"item": "scrap", "min": 3, "max": 6}, + {"item": "welder", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "craft_rig", - "name": "FOODCO kitchen buddy", - "symbol": "&", - "color": "light_green", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 10, - "durability": 20, - "size": 400, - "item": "craftrig", - "difficulty": 4, - "location": "center", - "flags": ["CARGO", "OBSTACLE", "CRAFTRIG"] + "name" : "FOODCO kitchen buddy", + "symbol" : "&", + "color" : "light_green", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 10, + "durability" : 20, + "size" : 400, + "item" : "craftrig", + "difficulty" : 4, + "location" : "center", + "flags" : ["CARGO", "OBSTACLE", "CRAFTRIG"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 7}, + {"item": "steel_chunk", "min": 4, "max": 7}, + {"item": "scrap", "min": 4, "max": 7}, + {"item": "pan", "min": 0, "max": 1}, + {"item": "pot", "min": 0, "max": 1}, + {"item": "water_purifier", "min": 0, "max": 1}, + {"item": "vac_sealer", "min": 0, "max": 1}, + {"item": "dehydrator", "min": 0, "max": 1}, + {"item": "press", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "veh_forge", - "name": "mounted electric forge", - "symbol": "&", - "color": "red", - "broken_symbol": "x", - "broken_color": "light_gray", - "damage_modifier": 10, - "durability": 20, - "item": "forge", - "difficulty": 3, - "location": "center", - "flags": ["OBSTACLE", "FORGE"] + "name" : "mounted electric forge", + "symbol" : "&", + "color" : "red", + "broken_symbol" : "x", + "broken_color" : "light_gray", + "damage_modifier" : 10, + "durability" : 20, + "item" : "forge", + "difficulty" : 3, + "location" : "center", + "flags" : ["OBSTACLE", "FORGE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 5}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "m249", - "name": "mounted M249", - "symbol": "t", - "color": "cyan", - "broken_symbol": "#", - "broken_color": "cyan", - "damage_modifier": 80, - "durability": 400, - "fuel_type": "223", - "item": "m249", + "name" : "mounted M249", + "symbol" : "t", + "color" : "cyan", + "broken_symbol" : "#", + "broken_color" : "cyan", + "damage_modifier" : 80, + "durability" : 400, + "fuel_type" : "223", + "item" : "m249", "size" : 40, - "difficulty": 6, - "location": "on_roof", - "flags": ["TURRET", "CARGO"] + "difficulty" : 6, + "location" : "on_roof", + "flags" : ["TURRET", "CARGO"], + "breaks_into" : [ + {"item": "m249", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "flamethrower", - "name": "mounted flamethrower", - "symbol": "t", - "color": "dark_gray", - "broken_symbol": "#", - "broken_color": "dark_gray", - "damage_modifier": 80, - "durability": 400, - "fuel_type": "gasoline", - "item": "flamethrower", - "difficulty": 7, - "location": "on_roof", - "flags": ["TURRET"] + "name" : "mounted flamethrower", + "symbol" : "t", + "color" : "dark_gray", + "broken_symbol" : "#", + "broken_color" : "dark_gray", + "damage_modifier" : 80, + "durability" : 400, + "fuel_type" : "gasoline", + "item" : "flamethrower", + "difficulty" : 7, + "location" : "on_roof", + "flags" : ["TURRET"], + "breaks_into" : [ + {"item": "flamethrower", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "plasma_gun", - "name": "mounted plasma gun", - "symbol": "t", - "color": "light_blue", - "broken_symbol": "#", - "broken_color": "light_blue", - "damage_modifier": 80, - "durability": 400, - "fuel_type": "plasma", - "item": "plasma_rifle", - "difficulty": 7, - "location": "on_roof", - "flags": ["TURRET"] + "name" : "mounted plasma gun", + "symbol" : "t", + "color" : "light_blue", + "broken_symbol" : "#", + "broken_color" : "light_blue", + "damage_modifier" : 80, + "durability" : 400, + "fuel_type" : "plasma", + "item" : "plasma_rifle", + "difficulty" : 7, + "location" : "on_roof", + "flags" : ["TURRET"], + "breaks_into" : [ + {"item": "plasma_rifle", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "fusion_gun", - "name": "mounted fusion gun", - "symbol": "t", - "color": "magenta", - "broken_symbol": "#", - "broken_color": "magenta", - "damage_modifier": 80, - "durability": 400, - "fuel_type": "fusion", - "item": "ftk93", - "difficulty": 7, - "size": 10, - "location": "on_roof", - "flags": ["TURRET", "CARGO"] + "name" : "mounted fusion gun", + "symbol" : "t", + "color" : "magenta", + "broken_symbol" : "#", + "broken_color" : "magenta", + "damage_modifier" : 80, + "durability" : 400, + "fuel_type" : "fusion", + "item" : "ftk93", + "difficulty" : 7, + "size" : 10, + "location" : "on_roof", + "flags" : ["TURRET", "CARGO"], + "breaks_into" : [ + {"item": "ftk93", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "plating_steel", - "name": "steel plating", - "symbol": ")", - "color": "light_cyan", - "broken_symbol": ")", - "broken_color": "light_cyan", - "durability": 1000, - "item": "steel_plate", - "difficulty": 3, - "location": "armor", - "flags": ["ARMOR"] + "name" : "steel plating", + "symbol" : ")", + "color" : "light_cyan", + "broken_symbol" : ")", + "broken_color" : "light_cyan", + "durability" : 1000, + "item" : "steel_plate", + "difficulty" : 3, + "location" : "armor", + "flags" : ["ARMOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "plating_superalloy", - "name": "superalloy plating", - "symbol": ")", - "color": "dark_gray", - "broken_symbol": ")", - "broken_color": "dark_gray", - "durability": 900, - "item": "alloy_plate", - "difficulty": 4, - "location": "armor", - "flags": ["ARMOR"] + "name" : "superalloy plating", + "symbol" : ")", + "color" : "dark_gray", + "broken_symbol" : ")", + "broken_color" : "dark_gray", + "durability" : 900, + "item" : "alloy_plate", + "difficulty" : 4, + "location" : "armor", + "flags" : ["ARMOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "plating_spiked", - "name": "spiked plating", - "symbol": ")", - "color": "red", - "broken_symbol": ")", - "broken_color": "red", - "damage_modifier": 150, - "durability": 900, - "item": "spiked_plate", - "difficulty": 3, - "location": "armor", - "flags": ["ARMOR", "SHARP"] + "name" : "spiked plating", + "symbol" : ")", + "color" : "red", + "broken_symbol" : ")", + "broken_color" : "red", + "damage_modifier" : 150, + "durability" : 900, + "item" : "spiked_plate", + "difficulty" : 3, + "location" : "armor", + "flags" : ["ARMOR", "SHARP"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6}, + {"item": "spike", "min": 0, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "plating_hard", - "name": "hard plating", - "symbol": ")", - "color": "cyan", - "broken_symbol": ")", - "broken_color": "cyan", - "durability": 2300, - "item": "hard_plate", - "difficulty": 4, - "location": "armor", - "flags": ["ARMOR"] + "name" : "hard plating", + "symbol" : ")", + "color" : "cyan", + "broken_symbol" : ")", + "broken_color" : "cyan", + "durability" : 2300, + "item" : "hard_plate", + "difficulty" : 4, + "location" : "armor", + "flags" : ["ARMOR"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "headlight", - "name": "head light", - "symbol": "*", - "color": "white", - "broken_symbol": "*", - "broken_color": "white", - "damage_modifier": 10, - "durability": 20, - "power": 3, - "bonus": 480, - "item": "flashlight", - "difficulty": 1, - "flags": ["CONE_LIGHT"] + "name" : "head light", + "symbol" : "*", + "color" : "white", + "broken_symbol" : "*", + "broken_color" : "white", + "damage_modifier" : 10, + "durability" : 20, + "power" : 3, + "bonus" : 480, + "item" : "flashlight", + "difficulty" : 1, + "flags" : ["CONE_LIGHT"], + "breaks_into" : [ + {"item": "scrap", "min": 0, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "reinforced_windshield", - "name": "reinforced windshield", - "symbol": "\"", - "color": "light_blue", - "broken_symbol": "0", - "broken_color": "light_gray", - "damage_modifier": 80, - "durability": 300, - "item": "reinforced_glass_sheet", - "difficulty": 6, - "location": "center", - "flags": ["OBSTACLE"] + "name" : "reinforced windshield", + "symbol" : "\"", + "color" : "light_blue", + "broken_symbol" : "0", + "broken_color" : "light_gray", + "damage_modifier" : 80, + "durability" : 300, + "item" : "reinforced_glass_sheet", + "difficulty" : 6, + "location" : "center", + "flags" : ["OBSTACLE", "WINDOW"], + "breaks_into" : [] },{ "type" : "vehicle_part", "id" : "horn_bicycle", - "name": "bicycle horn", - "symbol": "*", - "color": "light_gray", - "broken_symbol": "*", - "broken_color": "red", - "damage_modifier": 10, - "durability": 250, - "bonus": 15, - "item": "horn_bicycle", - "difficulty": 1, - "flags": ["HORN"] + "name" : "bicycle horn", + "symbol" : "*", + "color" : "light_gray", + "broken_symbol" : "*", + "broken_color" : "red", + "damage_modifier" : 10, + "durability" : 250, + "bonus" : 15, + "item" : "horn_bicycle", + "difficulty" : 1, + "flags" : ["HORN"], + "breaks_into" : [ + {"item": "scrap", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "horn_car", - "name": "car horn", - "symbol": "*", - "color": "light_gray", - "broken_symbol": "*", - "broken_color": "red", - "damage_modifier": 10, - "durability": 260, - "bonus": 30, - "item": "horn_car", - "difficulty": 3, - "flags": ["HORN"] + "name" : "car horn", + "symbol" : "*", + "color" : "light_gray", + "broken_symbol" : "*", + "broken_color" : "red", + "damage_modifier" : 10, + "durability" : 260, + "bonus" : 30, + "item" : "horn_car", + "difficulty" : 3, + "flags" : ["HORN"], + "breaks_into" : [ + {"item": "scrap", "min": 0, "max": 2} + ] },{ "type" : "vehicle_part", "id" : "horn_big", - "name": "truck horn", - "symbol": "*", - "color": "light_gray", - "broken_symbol": "*", - "broken_color": "red", - "damage_modifier": 10, - "durability": 270, - "bonus": 45, - "item": "horn_big", - "difficulty": 3, - "flags": ["HORN"] + "name" : "truck horn", + "symbol" : "*", + "color" : "light_gray", + "broken_symbol" : "*", + "broken_color" : "red", + "damage_modifier" : 10, + "durability" : 270, + "bonus" : 45, + "item" : "horn_big", + "difficulty" : 3, + "flags" : ["HORN"], + "breaks_into" : [ + {"item": "steel_chunk", "min": 0, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "battery_motorbike", - "name": "motorbike battery", - "symbol": "o", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 30, - "durability": 280, - "size": 12000, - "fuel_type": "battery", - "item": "battery_motorbike", - "difficulty": 2, - "flags": ["FUEL_TANK"] + "name" : "motorbike battery", + "symbol" : "o", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 30, + "durability" : 280, + "size" : 12000, + "fuel_type" : "battery", + "item" : "battery_motorbike", + "difficulty" : 2, + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 7}, + {"item": "steel_chunk", "min": 4, "max": 7}, + {"item": "scrap", "min": 4, "max": 7} + ] },{ "type" : "vehicle_part", "id" : "battery_car", - "name": "car battery", - "symbol": "o", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 50, - "durability": 300, - "size": 30000, - "fuel_type": "battery", - "item": "battery_car", - "difficulty": 2, - "flags": ["FUEL_TANK"] + "name" : "car battery", + "symbol" : "o", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 50, + "durability" : 300, + "size" : 30000, + "fuel_type" : "battery", + "item" : "battery_car", + "difficulty" : 2, + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 6, "max": 9}, + {"item": "steel_chunk", "min": 6, "max": 9}, + {"item": "scrap", "min": 6, "max": 9} + ] },{ "type" : "vehicle_part", "id" : "battery_truck", - "name": "truck battery", - "symbol": "o", - "color": "yellow", - "broken_symbol": "#", - "broken_color": "red", - "damage_modifier": 60, - "durability": 320, - "size": 50000, - "fuel_type": "battery", - "item": "battery_truck", - "difficulty": 2, - "flags": ["FUEL_TANK"] + "name" : "truck battery", + "symbol" : "o", + "color" : "yellow", + "broken_symbol" : "#", + "broken_color" : "red", + "damage_modifier" : 60, + "durability" : 320, + "size" : 50000, + "fuel_type" : "battery", + "item" : "battery_truck", + "difficulty" : 2, + "flags" : ["FUEL_TANK"], + "breaks_into" : [ + {"item": "steel_lump", "min": 8, "max": 12}, + {"item": "steel_chunk", "min": 8, "max": 12}, + {"item": "scrap", "min": 8, "max": 12} + ] },{ "type" : "vehicle_part", "id" : "door_trunk", - "name": "trunk door", - "symbol": "+", - "color": "light_gray", - "broken_symbol": "&", - "broken_color": "light_gray", - "damage_modifier": 80, - "durability": 200, - "item": "frame", - "difficulty": 2, - "location": "center", - "flags": ["OBSTACLE", "OPENABLE", "MULTISQUARE", "BOARDABLE"] + "name" : "trunk door", + "symbol" : "+", + "color" : "light_gray", + "broken_symbol" : "&", + "broken_color" : "light_gray", + "damage_modifier" : 80, + "durability" : 200, + "item" : "frame", + "difficulty" : 2, + "location" : "center", + "flags" : ["OBSTACLE", "OPENABLE", "MULTISQUARE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "door_shutter", - "name": "shutter door", - "symbol": "+", - "color": "white", - "broken_symbol": "&", - "broken_color": "white", - "damage_modifier": 80, - "durability": 200, - "item": "steel_plate", - "difficulty": 3, - "location": "center", - "flags": ["OPAQUE", "OBSTACLE", "OPENABLE", "MULTISQUARE", "BOARDABLE"] + "name" : "shutter door", + "symbol" : "+", + "color" : "white", + "broken_symbol" : "&", + "broken_color" : "white", + "damage_modifier" : 80, + "durability" : 200, + "item" : "steel_plate", + "difficulty" : 3, + "location" : "center", + "flags" : ["OPAQUE", "OBSTACLE", "OPENABLE", "MULTISQUARE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "door_sliding", - "name": "sliding door", - "symbol": "+", - "color": "light_cyan", - "broken_symbol": "&", - "broken_color": "light_cyan", - "damage_modifier": 80, - "durability": 200, - "item": "frame", - "difficulty": 2, - "location": "center", - "flags": ["OBSTACLE", "OPENABLE", "MULTISQUARE", "BOARDABLE"] + "name" : "sliding door", + "symbol" : "+", + "color" : "light_cyan", + "broken_symbol" : "&", + "broken_color" : "light_cyan", + "damage_modifier" : 80, + "durability" : 200, + "item" : "frame", + "difficulty" : 2, + "location" : "center", + "flags" : ["OBSTACLE", "OPENABLE", "MULTISQUARE", "BOARDABLE"], + "breaks_into" : [ + {"item": "steel_lump", "min": 4, "max": 6}, + {"item": "steel_chunk", "min": 4, "max": 6}, + {"item": "scrap", "min": 4, "max": 6} + ] },{ "type" : "vehicle_part", "id" : "light_red", - "name": "red light", - "symbol": "*", - "color": "red", - "broken_symbol": "-", - "broken_color": "dark_red", - "damage_modifier": 10, - "durability": 20, - "power": 2, - "bonus": 350, - "item": "light_emergency_red", - "difficulty": 1, - "location": "on_roof", - "flags": ["CIRCLE_LIGHT", "ODDTURN"] + "name" : "red light", + "symbol" : "*", + "color" : "red", + "broken_symbol" : "-", + "broken_color" : "dark_red", + "damage_modifier" : 10, + "durability" : 20, + "power" : 2, + "bonus" : 350, + "item" : "light_emergency_red", + "difficulty" : 1, + "location" : "on_roof", + "flags" : ["CIRCLE_LIGHT", "ODDTURN"], + "breaks_into" : [ + {"item": "steel_chunk", "min": 0, "max": 1}, + {"item": "scrap", "min": 1, "max": 1} + ] },{ "type" : "vehicle_part", "id" : "light_blue", - "name": "blue light", - "symbol": "*", - "color": "blue", - "broken_symbol": "-", - "broken_color": "dark_blue", - "damage_modifier": 10, - "durability": 20, - "power": 2, - "bonus": 350, - "item": "light_emergency_blue", - "difficulty": 1, - "location": "on_roof", - "flags": ["CIRCLE_LIGHT", "EVENTURN"] + "name" : "blue light", + "symbol" : "*", + "color" : "blue", + "broken_symbol" : "-", + "broken_color" : "dark_blue", + "damage_modifier" : 10, + "durability" : 20, + "power" : 2, + "bonus" : 350, + "item" : "light_emergency_blue", + "difficulty" : 1, + "location" : "on_roof", + "flags" : ["CIRCLE_LIGHT", "EVENTURN"], + "breaks_into" : [ + {"item": "steel_chunk", "min": 0, "max": 1}, + {"item": "scrap", "min": 1, "max": 1} + ] } ] diff --git a/data/json/vehicles.json b/data/json/vehicles.json index 58b8113791cd6..fcd93dfc094de 100644 --- a/data/json/vehicles.json +++ b/data/json/vehicles.json @@ -2,18 +2,18 @@ { "type" : "vehicle", "id" : "custom", - "name": "custom", - "blueprint": "H", - "warning": "Don't remove this vehicle definition!", - "parts": [ + "name" : "custom", + "blueprint" : "H", + "warning" : "Don't remove this vehicle definition!", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"} ] },{ "type" : "vehicle", "id" : "unicycle", - "name": "Unicycle", - "blueprint": "#", - "parts": [ + "name" : "Unicycle", + "blueprint" : "#", + "parts" : [ {"x": 0, "y": 0, "part": "frame_handle"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 0, "y": 0, "part": "controls"}, @@ -23,9 +23,9 @@ },{ "type" : "vehicle", "id" : "bicycle", - "name": "Bicycle", - "blueprint": "o#o", - "parts": [ + "name" : "Bicycle", + "blueprint" : "o#o", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 0, "y": 0, "part": "controls"}, @@ -40,9 +40,9 @@ },{ "type" : "vehicle", "id" : "motorcycle_chassis", - "name": "Motorcycle Chassis", - "blueprint": "o#>", - "parts": [ + "name" : "Motorcycle Chassis", + "blueprint" : "o#>", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 1, "y": 0, "part": "frame_handle"}, @@ -53,9 +53,9 @@ },{ "type" : "vehicle", "id" : "motorcycle", - "name": "Motorcycle", - "blueprint": "o#>o", - "parts": [ + "name" : "Motorcycle", + "blueprint" : "o#>o", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 0, "y": 0, "part": "controls"}, @@ -74,12 +74,12 @@ },{ "type" : "vehicle", "id" : "motorcycle_sidecart", - "name": "Motorcycle", - "blueprint": [ + "name" : "Motorcycle", + "blueprint" : [ ["o#>o"], [" #> "] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_cross"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 0, "y": 0, "part": "controls"}, @@ -103,13 +103,13 @@ },{ "type" : "vehicle", "id" : "quad_bike", - "name": "Quad Bike", - "blueprint": [ + "name" : "Quad Bike", + "blueprint" : [ ["O O"], ["=#>"], ["O O"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 0, "y": 0, "part": "controls"}, @@ -134,13 +134,13 @@ },{ "type" : "vehicle", "id" : "quad_bike_chassis", - "name": "Quad Bike Chassis", - "blueprint": [ + "name" : "Quad Bike Chassis", + "blueprint" : [ ["O O"], ["|#>"], ["O "] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "saddle"}, {"x": 1, "y": 0, "part": "frame_cover"}, @@ -155,14 +155,14 @@ },{ "type" : "vehicle", "id" : "car", - "name": "Car", - "blueprint": [ + "name" : "Car", + "blueprint" : [ ["o-++-o"], ["+=##'|"], ["+=##'|"], ["o-++-o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "seatbelt"}, @@ -234,7 +234,7 @@ {"x": -3, "y": 2, "part": "halfboard_se"}, {"x": -3, "y": 2, "part": "wheel"} ], - "items": [ + "items" : [ {"x": 0, "y": 0, "chance": 16, "items": "cig"}, {"x": 0, "y": 0, "chance": 16, "items": "lighter"}, {"x": 0, "y": 1, "chance": 1, "items": "roadmap"}, @@ -252,14 +252,14 @@ },{ "type" : "vehicle", "id" : "car_chassis", - "name": "Car Chassis", - "blueprint": [ + "name" : "Car Chassis", + "blueprint" : [ ["o----o"], ["|==#-|"], ["|===-|"], ["o----o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 1, "part": "frame_vertical_2"}, @@ -302,14 +302,14 @@ },{ "type" : "vehicle", "id" : "hippie_van", - "name": "Hippie Van", - "blueprint": [ + "name" : "Hippie Van", + "blueprint" : [ ["o---+-o"], ["+=###'|"], ["+===#'|"], ["o-+++-o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "seatbelt"}, @@ -402,22 +402,22 @@ {"x": -4, "y": 2, "part": "wheel"}, {"x": -4, "y": 2, "part": "roof"} ], - "items": [ + "items" : [ {"x": -1, "y": 0, "chance": 2, "items": ["weed", "rolling_paper"]}, {"x": -2, "y": 0, "chance": 2, "items": ["weed", "rolling_paper"]} ] },{ "type" : "vehicle", "id" : "flatbed_truck", - "name": "Flatbed Truck", - "blueprint": [ + "name" : "Flatbed Truck", + "blueprint" : [ ["O--+-O"], ["=='#'|"], ["=='o'>"], ["=='#'|"], ["O--+-O"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical"}, {"x": 0, "y": 0, "part": "box"}, {"x": 0, "y": 0, "part": "roof"}, @@ -496,22 +496,22 @@ {"x": -3, "y": 2, "part": "halfboard_vertical"}, {"x": -3, "y": 2, "part": "wheel_wide"} ], - "items": [ + "items" : [ {"x": 0, "y": 0, "chance": 2, "items": ["beer", "beer", "beer", "beer", "beer", "beer"]}, {"x": -2, "y": 0, "chance": 2, "item_groups": "bigtools"} ] },{ "type" : "vehicle", "id" : "cube_van", - "name": "Cube Van", - "blueprint": [ + "name" : "Cube Van", + "blueprint" : [ ["O---+-O"], ["+==|#'|"], ["+==|o'>"], ["+==|#'|"], ["O---+-O"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical"}, {"x": 0, "y": 0, "part": "box"}, {"x": 0, "y": 0, "part": "roof"}, @@ -617,8 +617,8 @@ },{ "type" : "vehicle", "id" : "semi_truck", - "name": "Semi Truck", - "blueprint": [ + "name" : "Semi Truck", + "blueprint" : [ ["OO ---+-O-"], ["OO=|#|#'|H"], ["++-|o|o'|>"], @@ -626,7 +626,7 @@ ["OO=|#|#'|H"], ["OO ---+=O-"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "box"}, {"x": 0, "y": 0, "part": "roof"}, @@ -763,8 +763,8 @@ },{ "type" : "vehicle", "id" : "truck_trailer", - "name": "Truck Trailer", - "blueprint": [ + "name" : "Truck Trailer", + "blueprint" : [ ["--OO------"], ["||OO||||||"], ["+|++|=|++|"], @@ -772,7 +772,7 @@ ["||OO||||||"], ["--OO------"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "aisle_horizontal"}, {"x": 0, "y": 0, "part": "roof"}, @@ -937,14 +937,14 @@ },{ "type" : "vehicle", "id" : "beetle", - "name": "Beetle", - "blueprint": [ + "name" : "Beetle", + "blueprint" : [ ["o+-o"], ["|=|="], ["|=|="], ["o+-o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "seatbelt"}, @@ -996,15 +996,15 @@ },{ "type" : "vehicle", "id" : "bubble_car", - "name": "Bubble Car", - "blueprint": [ + "name" : "Bubble Car", + "blueprint" : [ [" --- "], ["+o#o-"], ["|=##|"], ["+o#o-"], [" --- "] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "engine_electric"}, @@ -1069,12 +1069,12 @@ },{ "type" : "vehicle", "id" : "golf_cart", - "name": "Golf Cart", - "blueprint": [ + "name" : "Golf Cart", + "blueprint" : [ ["o|o"], ["o|o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_horizontal"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "roof"}, @@ -1100,9 +1100,9 @@ },{ "type" : "vehicle", "id" : "scooter", - "name": "Scooter", - "blueprint": "o>o", - "parts": [ + "name" : "Scooter", + "blueprint" : "o>o", + "parts" : [ {"x": 0, "y": 0, "part": "frame_handle"}, {"x": 0, "y": 0, "part": "headlight"}, {"x": 0, "y": 0, "part": "saddle"}, @@ -1118,15 +1118,15 @@ },{ "type" : "vehicle", "id" : "military_cargo_truck", - "name": "Military Cargo Truck", - "blueprint": [ + "name" : "Military Cargo Truck", + "blueprint" : [ ["-OO--+-O-"], ["#OO#'#'|>"], ["||||'#'=>"], ["#OO#'#'|>"], ["-OO--+-O-"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "reinforced_windshield"}, {"x": 0, "y": -1, "part": "frame_horizontal"}, @@ -1261,15 +1261,15 @@ },{ "type" : "vehicle", "id" : "schoolbus", - "name": "Schoolbus", - "blueprint": [ + "name" : "Schoolbus", + "blueprint" : [ ["''O'''''''O"], ["'########'H"], ["+........'>"], ["'#######.'H"], ["''O'''''+'O"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "aisle_vertical"}, {"x": 0, "y": 0, "part": "roof"}, @@ -1420,14 +1420,14 @@ },{ "type" : "vehicle", "id" : "electric_car", - "name": "Electric Car", - "blueprint": [ + "name" : "Electric Car", + "blueprint" : [ ["o#++-o"], ["+=##'|"], ["+=##'|"], ["o#++-o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "seatbelt"}, @@ -1503,15 +1503,15 @@ },{ "type" : "vehicle", "id" : "rv", - "name": "RV", - "blueprint": [ + "name" : "RV", + "blueprint" : [ ["+OO---+-O"], ["|&==#|#'|"], ["|====+H'|"], ["|#==H|#'|"], ["+OO-+-+-O"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "aisle_horizontal"}, {"x": 0, "y": 0, "part": "engine_v6"}, @@ -1659,9 +1659,9 @@ },{ "type" : "vehicle", "id" : "shopping_cart", - "name": "Shopping Cart", - "blueprint": "o", - "parts": [ + "name" : "Shopping Cart", + "blueprint" : "o", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "wheel_caster"}, {"x": 0, "y": 0, "part": "box"} @@ -1669,23 +1669,23 @@ },{ "type" : "vehicle", "id" : "welding_cart", - "name": "Welding Cart", - "blueprint": "&", - "parts": [ + "name" : "Welding Cart", + "blueprint" : "&", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "wheel_caster"}, {"x": 0, "y": 0, "part": "small_storage_battery"}, {"x": 0, "y": 0, "part": "welding_rig"} ], - "items": [ + "items" : [ {"x": 0, "y": 0, "chance": 30, "items": ["goggles_welding"]} ] },{ "type" : "vehicle", "id" : "ice_cream_cart", - "name": "Ice Cream Cart", - "blueprint": "#", - "parts": [ + "name" : "Ice Cream Cart", + "blueprint" : "#", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "wheel_caster"}, {"x": 0, "y": 0, "part": "small_storage_battery"}, @@ -1694,12 +1694,12 @@ },{ "type" : "vehicle", "id" : "food_cart", - "name": "Food Vendor Cart", - "blueprint": [ + "name" : "Food Vendor Cart", + "blueprint" : [ ["&"], ["H"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "wheel_caster"}, {"x": 0, "y": 0, "part": "small_storage_battery"}, @@ -1711,9 +1711,9 @@ },{ "type" : "vehicle", "id" : "wheelbarrow", - "name": "Wheelbarrow", - "blueprint": "o", - "parts": [ + "name" : "Wheelbarrow", + "blueprint" : "o", + "parts" : [ {"x": 0, "y": 0, "part": "frame_handle"}, {"x": 0, "y": 0, "part": "wheel_small"}, {"x": 0, "y": 0, "part": "box"} @@ -1721,9 +1721,9 @@ },{ "type" : "vehicle", "id" : "luggage_cart", - "name": "Luggage Cart", - "blueprint": "o", - "parts": [ + "name" : "Luggage Cart", + "blueprint" : "o", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "wheel_caster"}, {"x": 0, "y": 0, "part": "box"} @@ -1731,9 +1731,9 @@ },{ "type" : "vehicle", "id" : "swivel_chair", - "name": "Swivel Chair", - "blueprint": "#", - "parts": [ + "name" : "Swivel Chair", + "blueprint" : "#", + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "wheel_caster"}, {"x": 0, "y": 0, "part": "seat"} @@ -1741,15 +1741,15 @@ },{ "type" : "vehicle", "id" : "armored_car", - "name": "Armored Car", - "blueprint": [ + "name" : "Armored Car", + "blueprint" : [ ["O-++-O>"], ["|H##'|>"], ["t###'t>"], ["|H##'|>"], ["O-++-O>"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "engine_v6"}, {"x": 0, "y": 0, "part": "battery_truck"}, @@ -1866,14 +1866,14 @@ },{ "type" : "vehicle", "id" : "policecar", - "name": "Police Car", - "blueprint": [ + "name" : "Police Car", + "blueprint" : [ ["o-++-o"], ["+=##'|"], ["+=##'|"], ["o-++-o"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical_2"}, {"x": 0, "y": 0, "part": "seat"}, {"x": 0, "y": 0, "part": "seatbelt"}, @@ -1950,15 +1950,15 @@ },{ "type" : "vehicle", "id" : "ambulance", - "name": "Ambulance", - "blueprint": [ + "name" : "Ambulance", + "blueprint" : [ ["O----+-O"], ["|===|#'|"], ["+=#=|o'>"], ["|===|#'|"], ["O--+-+-O"] ], - "parts": [ + "parts" : [ {"x": 0, "y": 0, "part": "frame_vertical"}, {"x": 0, "y": 0, "part": "box"}, {"x": 0, "y": 0, "part": "roof"}, @@ -2086,15 +2086,15 @@ { "type":"vehicle", "id" : "fire_truck", - "name": "Fire Truck", - "blueprint": [ + "name" : "Fire Truck", + "blueprint" : [ ["|+++-+-+-"], ["|===|#*#*"], ["+===|=*H|"], ["|===|#*#*"], ["|+++-+-+-"] ], - "parts": [ + "parts" : [ {"x": 2, "y": -2, "part": "frame_nw"}, {"x": 2, "y": -2, "part": "halfboard_nw"}, {"x": 2, "y": -1, "part": "frame_horizontal"}, @@ -2199,7 +2199,7 @@ {"x": -3, "y": 2, "part": "board_se"}, {"x": -3, "y": 2, "part": "roof"}, {"x": -4, "y": -2, "part": "frame_vertical"}, - {"x": -4, "y": -2, "part": "door_shutter"}, + {"x": -4, "y": -2, "part": "stowboard_vertical"}, {"x": -4, "y": -2, "part": "roof"}, {"x": -4, "y": -1, "part": "frame_horizontal"}, {"x": -4, "y": -1, "part": "trunk"}, @@ -2211,12 +2211,12 @@ {"x": -4, "y": 1, "part": "trunk"}, {"x": -4, "y": 1, "part": "roof"}, {"x": -4, "y": 2, "part": "frame_vertical"}, - {"x": -4, "y": 2, "part": "door_shutter"}, + {"x": -4, "y": 2, "part": "stowboard_vertical"}, {"x": -4, "y": 2, "part": "roof"}, {"x": -5, "y": -2, "part": "frame_vertical"}, {"x": -5, "y": -2, "part": "wheel_wide"}, {"x": -5, "y": -2, "part": "gas_tank"}, - {"x": -5, "y": -2, "part": "door_shutter"}, + {"x": -5, "y": -2, "part": "stowboard_vertical"}, {"x": -5, "y": -2, "part": "roof"}, {"x": -5, "y": -1, "part": "frame_horizontal"}, {"x": -5, "y": -1, "part": "trunk"}, @@ -2230,22 +2230,23 @@ {"x": -5, "y": 2, "part": "frame_vertical"}, {"x": -5, "y": 2, "part": "wheel_wide"}, {"x": -5, "y": 2, "part": "gas_tank"}, - {"x": -5, "y": 2, "part": "door_shutter"}, + {"x": -5, "y": 2, "part": "stowboard_vertical"}, {"x": -5, "y": 2, "part": "roof"}, {"x": -6, "y": -2, "part": "frame_vertical"}, - {"x": -6, "y": -2, "part": "door_shutter"}, + {"x": -6, "y": -2, "part": "stowboard_vertical"}, {"x": -6, "y": -2, "part": "roof"}, {"x": -6, "y": -1, "part": "frame_horizontal"}, {"x": -6, "y": -1, "part": "trunk"}, {"x": -6, "y": -1, "part": "roof"}, {"x": -6, "y": 0, "part": "frame_horizontal"}, + {"x": -6, "y": 0, "part": "muffler"}, {"x": -6, "y": 0, "part": "aisle_vertical"}, {"x": -6, "y": 0, "part": "roof"}, {"x": -6, "y": 1, "part": "frame_horizontal"}, {"x": -6, "y": 1, "part": "trunk"}, {"x": -6, "y": 1, "part": "roof"}, {"x": -6, "y": 2, "part": "frame_vertical"}, - {"x": -6, "y": 2, "part": "door_shutter"}, + {"x": -6, "y": 2, "part": "stowboard_vertical"}, {"x": -6, "y": 2, "part": "roof"}, {"x": -7, "y": -2, "part": "frame_sw"}, {"x": -7, "y": -2, "part": "board_sw"}, @@ -2263,20 +2264,21 @@ {"x": -7, "y": 2, "part": "board_se"}, {"x": -7, "y": 2, "part": "roof"} ], - "items": [ + "items" : [ {"x": 0, "y": 0, "chance": 1, "items": "roadmap"}, {"x": -1, "y": 0, "chance": 8, "items": "1st_aid"}, {"x": -1, "y": 0, "chance": 12, "items": "extinguisher"}, {"x": -1, "y": 0, "chance": 1, "items": "GUITAR"}, {"x": -4, "y": 1, "chance": 4, "items": ["hose", "flashlight"]}, {"x": -4, "y": -1, "chance": 8, "items": "flashlight"}, - {"x": -4, "y": -1, "chance": 4, "items": "hammer_sledge"}, - {"x": -5, "y": 1, "chance": 2, "items": "chainsaw_off"}, - {"x": -5, "y": 1, "chance": 8, "items": "ax"}, - {"x": -5, "y": -1, "chance": 5, "items": "shovel"}, - {"x": -5, "y": -1, "chance": 5, "items": "crowbar"}, - {"x": -6, "y": 1, "chance": 5, "items": ["hazmat_suit", "mask_gas"]}, - {"x": -6, "y": -1, "chance": 5, "items": ["hazmat_suit", "mask_gas"]} + {"x": -4, "y": -2, "chance": 4, "items": "hammer_sledge"}, + {"x": -5, "y": -1, "chance": 1, "items": ["hazmat_suit", "mask_gas"]}, + {"x": -5, "y": -2, "chance": 7, "items": "ax"}, + {"x": -5, "y": 2, "chance": 2, "items": "chainsaw_off"}, + {"x": -6, "y": -1, "chance": 1, "items": ["hazmat_suit", "mask_gas"]}, + {"x": -6, "y": -2, "chance": 5, "items": "shovel"}, + {"x": -6, "y": 1, "chance": 1, "items": ["hazmat_suit", "mask_gas"]}, + {"x": -6, "y": 2, "chance": 5, "items": "crowbar"} ] } ] diff --git a/data/main.lua b/data/main.lua new file mode 100644 index 0000000000000..1c00c96fe9529 --- /dev/null +++ b/data/main.lua @@ -0,0 +1,164 @@ +-- Main mod file that will be executed by the game. + +function testui() + local ui = game.create_uimenu() + + local selections = {"Foo", "Bar", "Baz", "Too many options"} + for _, value in ipairs(selections) do + ui:addentry(value) + end + ui:query() + game.add_msg("You selected: "..selections[ui.selected+1]) +end + +function testter() + local ter_id = map:ter(1, 1) + local ter = game.get_terrain_type(ter_id) + game.add_msg("Terrain name: "..ter.name) +end + +function testmon() + local monsters = game.get_monsters() + game.add_msg("There are "..#monsters.." monsters loaded.") + if #monsters > 0 then + game.add_msg("The first of which is a "..monsters[1]:name()) + end +end + +function hiccup(item, active) + item_store = item + game.add_msg("You hiccup because of "..item.id) +end + +function makehungry(player, item, active) + game.add_msg("You suddenly feel hungry.. Your hunger is now "..player.hunger) + player.hunger = player.hunger + 10 +end + +function tellstuff(item, active) + game.add_msg("Your foo tells you: str "..player.str_cur.."/"..player.str_max) + game.add_msg("Are you hot around the legs? "..tostring(player:has_disease("hot_legs"))) + player:add_disease("hot_feet", 10, 1, 3) + player.fatigue = 0 + game.add_msg("Fatigue: "..player.fatigue) +end + +function custom_prozac(item, active) + if not player:has_disease("took_prozac") and player:morale_level() < 0 then + player:add_disease("took_prozac", 7200, 0, -1) + else + player.stim = player.stim + 3 + end +end + +function custom_sleep(item, active) + player.fatigue = player.fatigue + 40 + if not player:is_npc() then + game.add_msg("You feel very sleepy...") + end +end + +function custom_iodine(item, active) + player:add_disease("iodine", 1200, 0, -1) + if not player:is_npc() then + game.add_msg("You take an iodine tablet.") + end +end + +function custom_flumed(item, active) + player:add_disease("took_flumed", 6000, 0, -1) + if not player:is_npc() then + game.add_msg("You take some "..item.name..".") + end +end + +monster_move = {} +function monster_move.dog(monster) + monster.friendly = 1000 + local hp_percentage = 100 * monster.hp / monster:max_hp() + local master_distance = game.distance(monster.posx, monster.posy, player.posx, player.posy) + + -- Is there edible meat at our current location? + if monster.hp < monster:max_hp() then + local items = game.items_at(monster.posx, monster.posy) + for _, item in ipairs(items) do + if item:made_of("flesh") then + game.add_msg("The dog eats the "..item:tname()) + monster.hp = monster.hp + 30 + game.remove_item(monster.posx, monster.posy, item) + end + + if monster.hp >= monster:max_hp() then + break + end + end + end + + -- Our offensiveness depends on our current health. + local max_offensive_distance = math.floor(20 * hp_percentage / 100) + local retreat_mode = false -- retreat mode means we're not fighting at all + -- except to protect our master + + -- We're guarding the player so get the closest enemy to that. + local closest_enemy = monster:get_closest_enemy_monster(player.posx, player.posy) + + local closest_enemy_strong = false + if closest_enemy then + -- todo: check for more things than just hp + local factor = monster.hp * monster:max_hp() / (closest_enemy.hp * closest_enemy:max_hp()) + closest_enemy_strong = factor < 0.1 + end + + -- a few possible conditions for retreat mode: + -- 1. our master went missing, try to catch up to them + -- 2. very low HP + -- 3. closest enemy significantly stronger than self + -- 4. too many enemies in area + if hp_percentage <= 40 or (not monster:can_see(player.posx, player.posy)) or closest_enemy_strong or monster:get_num_visible_enemies() > 8 then + retreat_mode = true + end + + -- if the closest enemy is fighting the player right now, that overrides retreat mode + if closest_enemy and game.distance(player.posx, player.posy, closest_enemy.posx, closest_enemy.posy) <= 1 then + retreat_mode = false + end + + -- retreat mode may make the dog whimper + if retreat_mode and game.rng(0, 20) == 0 then + game.add_msg("The dog whimpers.") + end + + local distance + if closest_enemy then + distance = game.distance(monster.posx, monster.posy, closest_enemy.posx, closest_enemy.posy) + end + + if closest_enemy and distance < max_offensive_distance and not retreat_mode then + -- maybe we can attack outright? + if distance == 1 then + monster:attack_at(closest_enemy.posx, closest_enemy.posy) + monster.moves = monster.moves - 100 + else + monster:step_towards(closest_enemy.posx, closest_enemy.posy) + end + -- possibly add: monster:can_see(player.posx, player.posy) + -- but we'll just pretend the dog remembered where the player went + elseif master_distance > 3 or retreat_mode then + local ox = 0 + local oy = 0 + if game.rng(0, 3) == 0 then + ox = game.rng(-1, 1) + oy = game.rng(-1, 1) + end + monster:step_towards(player.posx + ox, player.posy + oy) + else + -- Avoid infinite loop + monster.moves = monster.moves - 100 + end +end + +game.register_iuse("HICCUP", hiccup) +game.register_iuse("TELLSTUFF", tellstuff) +game.register_iuse("CUSTOM_PROZAC", custom_prozac) +game.register_iuse("CUSTOM_SLEEP", custom_sleep) +game.register_iuse("CUSTOM_FLUMED", custom_flumed) diff --git a/data/motd b/data/motd index c650f6a629a6f..b2ed8a18f36cf 100644 --- a/data/motd +++ b/data/motd @@ -1,14 +1,14 @@ # This message may be 16 lines long at maximum. # Max length of a line is 68 characters; the following line is for reference #################################################################### -Major features v0.8 Romero: -* Tiles! -* Optional huge cities packed with zombies! -* Player memorial file. -* Save compatability moving forward. -* Russian and Chinese translations. -* Farming. -* Shopping carts. +Major features v0.9 Ma: +* World Factory: Multiple worlds managed at once. +* New mutation categories. +* TsuTiles. +* Basic mouse support in SDL builds. +* Vehicle constructon system rework. +* Backward compatability with 0.8 saves. +* Unbelievable amount of new content. For latest discussions and news on Cataclysm DDA, please visit: Homepage: http://www.cataclysmdda.com/ diff --git a/data/raw/keybindings.json b/data/raw/keybindings.json index d5ab07ff2b9a3..ad631de770c96 100644 --- a/data/raw/keybindings.json +++ b/data/raw/keybindings.json @@ -287,5 +287,134 @@ "key":"JOY_3" } ] + }, + { + "id":"QUIT", + "name":"Exit Screen", + "bindings":[ + { + "input_method":"keyboard", + "key":"ESC" + }, + { + "input_method":"gamepad", + "key":"JOY_3" + } + ] + }, + { + "id":"FIRE", + "name":"Fire Weapon", + "bindings":[ + { + "input_method":"keyboard", + "key":"f" + }, + { + "input_method":"keyboard", + "key":"F" + }, + { + "input_method":"keyboard", + "key":"." + }, + { + "input_method":"keyboard", + "key":"RETURN" + }, + { + "input_method":"mouse", + "key":"MOUSE_RIGHT" + } + ] + }, + { + "id":"PREV_TARGET", + "name":"Prev Target", + "bindings":[ + { + "input_method":"mouse", + "key":"SCROLL_UP" + }, + { + "input_method":"keyboard", + "key":"<" + } + ] + }, + { + "id":"NEXT_TARGET", + "name":"Next Target", + "bindings":[ + { + "input_method":"mouse", + "key":"SCROLL_DOWN" + }, + { + "input_method":"keyboard", + "key":">" + } + ] + }, + { + "id":"SELECT", + "name":"Select", + "bindings":[ + { + "input_method":"mouse", + "key":"MOUSE_LEFT" + } + ] + }, + { + "id":"SEC_SELECT", + "name":"Select", + "bindings":[ + { + "input_method":"mouse", + "key":"MOUSE_RIGHT" + } + ] + }, + { + "id":"SELECT", + "name":"Select", + "category":"LOOK", + "bindings":[ + { + "input_method":"mouse", + "key":"MOUSE_LEFT" + } + ] + }, + { + "id":"MOUSE_MOVE", + "name":"Mouse Move", + "bindings":[ + { + "input_method":"mouse", + "key":"MOUSE_MOVE" + } + ] + }, + { + "id":"TOGGLE_FAST_SCROLL", + "name":"Toggle Fast Scroll", + "bindings":[ + { + "input_method":"keyboard", + "key":"f" + } + ] + }, + { + "id":"TOGGLE_SNAP_TO_TARGET", + "name":"Toggle Snap to Target", + "bindings":[ + { + "input_method":"keyboard", + "key":"*" + } + ] } ] diff --git a/code_doc/CODE_STYLE.txt b/doc/CODE_STYLE.txt similarity index 66% rename from code_doc/CODE_STYLE.txt rename to doc/CODE_STYLE.txt index 6f9c53444c197..dcf0828d0bdc2 100644 --- a/code_doc/CODE_STYLE.txt +++ b/doc/CODE_STYLE.txt @@ -2,7 +2,7 @@ Current policy is to update code to the standard style when changing a substantial portion of it. Blocks of code can be passed through astyle to ensure that their formatting is correct: -astyle --style=1tbs --indent=spaces=4 --align-pointer=name --max-code-length=100 --break-after-logical --indent-classes --indent-switches --indent-preprocessor --indent-col1-comments --min-conditional-indent=0 --pad-oper --add-brackets --convert-tabs +astyle --style=1tbs --indent=spaces=4 --align-pointer=name --max-code-length=100 --break-after-logical --indent-classes --indent-preprocessor --indent-col1-comments --min-conditional-indent=0 --pad-oper --add-brackets --convert-tabs For example, from vi, set marks a and b around the block, then: -:'a,'b ! astyle --style=1tbs --indent-spaces=4 --align-pointer=name --max-code-length=100 --break-after-logical --indent-classes --indent-switches --indent-preprocessor --indent-col1-comments --min-conditional-indent=0 --pad-oper --add-brackets --convert-tabs +:'a,'b ! astyle --style=1tbs --indent-spaces=4 --align-pointer=name --max-code-length=100 --break-after-logical --indent-classes --indent-preprocessor --indent-col1-comments --min-conditional-indent=0 --pad-oper --add-brackets --convert-tabs diff --git a/code_doc/DEVELOPER_FAQ.md b/doc/DEVELOPER_FAQ.md similarity index 100% rename from code_doc/DEVELOPER_FAQ.md rename to doc/DEVELOPER_FAQ.md diff --git a/code_doc/ENUMS.md b/doc/ENUMS.md similarity index 100% rename from code_doc/ENUMS.md rename to doc/ENUMS.md diff --git a/code_doc/GAMEMODES.md b/doc/GAMEMODES.md similarity index 100% rename from code_doc/GAMEMODES.md rename to doc/GAMEMODES.md diff --git a/code_doc/GAME_BALANCE.txt b/doc/GAME_BALANCE.txt similarity index 100% rename from code_doc/GAME_BALANCE.txt rename to doc/GAME_BALANCE.txt diff --git a/code_doc/JSON_INFO.md b/doc/JSON_INFO.md similarity index 97% rename from code_doc/JSON_INFO.md rename to doc/JSON_INFO.md index f992750ecd4d0..8fee4c1478997 100644 --- a/code_doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -96,8 +96,12 @@ { "monster" : "mon_thing", // Monsters id "freq" : 100, // Chance of occurence, out of a thousand "multiplier" : 0, // How many monsters each monster in this definition should count as, if spawning a limited number of monsters - "pack_size" : [3,5], // The minimum and maximum number of monsters in this group that should spawn together. Optional, defaults [1,1] - "conditions" : ["TWILIGHT","SUMMER"] // Conditions limiting when monsters spawn. Valid options: SUMMER, WINTER, AUTUMN, SPRING, DAY, NIGHT, DUSK, DAWN, TWILIGHT + // The minimum and maximum number of monsters in this group that should spawn together. Optional, defaults [1,1] + "pack_size" : [3,5], + // Conditions limiting when monsters spawn. Valid options: SUMMER, WINTER, AUTUMN, SPRING, DAY, NIGHT, DUSK, DAWN + // Multiple Time-of-day conditions (DAY, NIGHT, DUSK, DAWN) will be combined together so that any of those conditions makes the spawn valid + // Multiple Season conditions (SUMMER, WINTER, AUTUMN, SPRING) will be combined together so that any of those conditions makes the spawn valid + "conditions" : ["DUSK","DAWN","SUMMER"] } ``` ###NAMES diff --git a/doc/LUA_SUPPORT.md b/doc/LUA_SUPPORT.md new file mode 100644 index 0000000000000..9f6ccb5c3b1a0 --- /dev/null +++ b/doc/LUA_SUPPORT.md @@ -0,0 +1,141 @@ +File Layout +=========== + +- src/catalua.cpp - Core of the lua mod, glueing lua to the cataclysm C++ engine. +- src/catalua.h - Export of some public lua-related functions, do not use these outside #ifdef LUA +- lua/autoexec.lua - Lua-side initialization of important data structures(metatables for classes etc.) +- lua/class_definitions.lua - Definitions of classes and functions that bindings will be generated from +- lua/generate_bindings.lua - Custom binding generator for cataclysm, can generate class and function bindings. +- lua/catabindings.cpp - Output of generate_bindings.lua +- data/main.lua - Script that will be called on cataclysm startup. You can define functions here and call them in the lua debug interpreter. + +Adding new functionality +======================== + +Generally, adding new functionality to lua is pretty straightforward. You have several options. + +Manually defining a new lua function in catalua.cpp +--------------------------------------------------- + +This is the most straightforward, and also most difficult method. You basically define a new C function that does all the lua stack handling etc. manually, then register it in the lua function table. More information on this can be found at: http://www.lua.org/manual/5.1/manual.html#3 + +An example of such a function would be: + +```c++ +// items = game.items_at(x, y) +static int game_items_at(lua_State *L) { + int x = lua_tointeger(L, 1); + int y = lua_tointeger(L, 2); + + std::vector& items = g->m.i_at(x, y); + + lua_createtable(L, items.size(), 0); // Preallocate enough space for all our items. + + // Iterate over the monster list and insert each monster into our returned table. + for(int i=0; i < items.size(); i++) { + // The stack will look like this: + // 1 - t, table containing item + // 2 - k, index at which the next item will be inserted + // 3 - v, next item to insert + // + // lua_rawset then does t[k] = v and pops v and k from the stack + + lua_pushnumber(L, i + 1); + item** item_userdata = (item**) lua_newuserdata(L, sizeof(item*)); + *item_userdata = &(items[i]); + luah_setmetatable(L, "item_metatable"); + lua_rawset(L, -3); + } + + return 1; // 1 return values +} + +static const struct luaL_Reg global_funcs [] = { + {"register_iuse", game_register_iuse}, + {"items_at", game_items_at}, // Don't forget to register your function in here! + {NULL, NULL} +}; +``` + +Defining a global function in catalua.cpp and registering it in lua/class_definitions.lua +--------------------------------------------------------------------------------------------- + +This method involves a bit more buerocracy, but is much easier to pull off and less prone to errors. Unless you wish to do something that the binding generator can't handle, this method is recommended for functions. + +First, define your function however you like in catalua.cpp + +```c++ +// game.remove_item(x, y, item) +void game_remove_item(int x, int y, item *it) { + std::vector& items = g->m.i_at(x, y); + + for(int i=0; iadd_msg`(works because g is a global). `args` is simply a list of the argument types, most common C++ types should work, as well as any classes that are wrapped by lua. `rval` is similarly the type of the return value, and since C++ has no multi-return, rval is not a list. + +Of note is the special argument type `game`. If that type is found, the binding generator will not wrap that parameter, but instead always pass `g` to that argument. So say you have a function foo(game* g, int a), then you should set `args = {"game", "int"}`, and from lua you would simply call foo(5), the game parameter being implicitly set to `g`. + + +Wrapping class member variables +------------------------------- + +Wrapping member variables is simply a matter of adding the relevant entries to the class definition in lua/class_definitions.lua. + +```lua +classes = { + player = { + attributes = { + posx = { + type = "int", + writable = false + }, +``` + +`type` works the same as for global functions, `writable` specifies whether a setter should be generated for this attribute. + +Wrapping class member functions +------------------------------- + +This process is nearly identical to wrapping global functions. + +```lua +classes = { + player = { + [...] + functions = { + has_disease = { + args = { "string" }, + rval = "bool" + }, +``` + +As you can see, the way functions are defined here is identical to global functions. The only difference is that there's an implicit first argument that will always be present, `self`, which enables us to call `player:has_disease("foo")`. + + +Adding new classes +------------------ + +To add a new wrapped class, you have to do several things: +- Add a new entry to `classes` in lua/class_definitions.lua +- Add the relevant metatable to lua/autoexec.lua, e.g. `monster_metatable = generate_metatable("monster", classes.monster)` + +Eventually, the latter should be automated, but right now it's necessary. Note that the class name should be the exact same in lua as in C++, otherwise the binding generator will fail. That limitation might be removed at some point. diff --git a/code_doc/MODDING.txt b/doc/MODDING.txt similarity index 100% rename from code_doc/MODDING.txt rename to doc/MODDING.txt diff --git a/code_doc/OLD_TODO.txt b/doc/OLD_TODO.txt similarity index 100% rename from code_doc/OLD_TODO.txt rename to doc/OLD_TODO.txt diff --git a/code_doc/RELEASE_CHECKLIST b/doc/RELEASE_CHECKLIST similarity index 100% rename from code_doc/RELEASE_CHECKLIST rename to doc/RELEASE_CHECKLIST diff --git a/code_doc/TESTING.txt b/doc/TESTING.txt similarity index 100% rename from code_doc/TESTING.txt rename to doc/TESTING.txt diff --git a/code_doc/TRANSLATING.md b/doc/TRANSLATING.md similarity index 100% rename from code_doc/TRANSLATING.md rename to doc/TRANSLATING.md diff --git a/doc/contrib/verify_json.sh b/doc/contrib/verify_json.sh new file mode 100755 index 0000000000000..f8c1ab152d1e8 --- /dev/null +++ b/doc/contrib/verify_json.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# run ./cataclysm with --jsonverify, spamming spacebar for debugmsg and stripping ncurses control sequences for +# TERM = screen, xterm, vt100, linux, xterm-color. Exit code > 0 means error +export TERM=xterm +unset LC_CMAP +unset LANG +unset TERMCAP +out=$(yes ' ' |./cataclysm --jsonverify 2>&1) +rc=$? +echo -n "$out" | + sed -r -e "s/.\x08//g" \ + -e "s/\x1B(\[\??([0-9]{1,4}(;[0-9]{1,2})?)?[a-zA-Z]|[\(\)><=][A-Z]?)//g" \ + -e "s/[\x00-\x09\x0B-\x1F]//g" \ + -e "/^ Press spacebar\.\.\.$/ d" +exit $rc diff --git a/input_defs.h b/input_defs.h deleted file mode 100644 index a42e3bbee0bd6..0000000000000 --- a/input_defs.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef _INPUT_DEFS_H_ -#define _INPUT_DEFS_H_ - -#include - -// Common input definitions across Windows (including Cygwin) and Linux - -enum input_event_t { - CATA_INPUT_ERROR, - CATA_INPUT_KEYBOARD, - CATA_INPUT_GAMEPAD, - CATA_INPUT_MOUSE -}; - -enum mouse_buttons { MOUSE_BUTTON_LEFT=1, MOUSE_BUTTON_RIGHT=2 }; - -/** - * An instance of an input, like a keypress etc. - * - * Gamepad, mouse and keyboard keypresses will be represented as `long`. - * Whether a gamepad, mouse or keyboard was used can be checked using the - * `type` member. - * - */ -struct input_event { - input_event_t type; - - std::vector modifiers; // Keys that need to be held down for - // this event to be activated. - - std::vector sequence; // The sequence of key or mouse events that - // triggers this event. For single-key - // events, simply make this of size 1. - - int mouse_x, mouse_y; // Mouse click co-ordinates, if applicable - - input_event() - { - mouse_x = mouse_y = 0; - } - - long get_first_input() const - { - if (sequence.size() == 0) { - return 0; - } - - return sequence[0]; - } - - void add_input(const long input) - { - sequence.push_back(input); - } - - bool operator==(const input_event& other) const - { - if(type != other.type) { - return false; - } - - if(sequence.size() != other.sequence.size()) { - return false; - } - for(int i=0; i\n" "Language-Team: LANGUAGE \n" @@ -11402,6 +11402,10 @@ msgstr "" msgid "charcoal" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "UPS" msgstr "" @@ -11718,6 +11722,20 @@ msgstr "" msgid "You yearn for a cool, dark place to hide." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "Consumed purifier." msgstr "" @@ -12222,6 +12240,18 @@ msgstr "" msgid "You turn the noise emitter on." msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp vehicle.cpp msgid "honk." msgstr "" @@ -14632,6 +14662,15 @@ msgstr "" msgid "Your dreams give you a strange scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14720,6 +14759,22 @@ msgstr "" msgid "Your dreams give you a strange fuzzy feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbing dream of bathing in the sun on a rock." msgstr "" @@ -14729,6 +14784,16 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "You have strange dreams of soaring through the sky." msgstr "" @@ -14821,6 +14886,24 @@ msgstr "" msgid "In your dream you see a group of rats that look almost like yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14829,6 +14912,18 @@ msgstr "" msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You have a realistic dream of flying south with your flock for the winter." @@ -14923,6 +15018,23 @@ msgstr "" msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_furniture.py lang/json/json_terrain.py msgid "nothing" msgstr "" @@ -15708,8215 +15820,7688 @@ msgid "" msgstr "" #: lang/json/json_items.py -msgid "socks" +msgid "steel frame" msgstr "" #: lang/json/json_items.py -msgid "Socks. Put 'em on your feet." +msgid "A large frame made of steel. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "wool socks" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "seat" msgstr "" #: lang/json/json_items.py -msgid "Warm socks made of wool." +msgid "A soft car seat covered with leather." msgstr "" -#: lang/json/json_items.py -msgid "sneakers" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "saddle" msgstr "" #: lang/json/json_items.py -msgid "Guaranteed to make you run faster and jump higher!" +msgid "A leather-covered seat designed to be straddled." msgstr "" -#: lang/json/json_items.py -msgid "cleats" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "muffler" msgstr "" #: lang/json/json_items.py msgid "" -"Sport shoes with hard undersides, and studs on the bottom designed to dig " -"into the grass." +"A muffler from a car. Very unwieldy as a weapon. Useful in a few crafting " +"recipes." msgstr "" #: lang/json/json_items.py -msgid "football armor" +msgid "vehicle controls" msgstr "" #: lang/json/json_items.py -msgid "" -"Heavy plastic armor for your upper torso. Normally worn by football players." +msgid "A set of various vehicle controls. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "football helmet" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "electric motor" msgstr "" #: lang/json/json_items.py -msgid "A heavy plastic helmet normally worn by football players." +msgid "A powerful electric motor. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "boots" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "large electric motor" msgstr "" #: lang/json/json_items.py -msgid "Tough leather boots. Very durable." +msgid "A large and very powerful electric motor. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "fur boots" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "plasma engine" msgstr "" #: lang/json/json_items.py -msgid "Boots lined with fur for warmth." +msgid "High technology engine, working on hydrogen fuel." msgstr "" #: lang/json/json_items.py -msgid "steeltoed boots" +msgid "foot crank" msgstr "" #: lang/json/json_items.py -msgid "Leather boots with a steel toe. Extremely durable." +msgid "The pedal and gear assembly from a bicycle." msgstr "" #: lang/json/json_items.py -msgid "combat boots" +msgid "metal tank" msgstr "" #: lang/json/json_items.py -msgid "Modern reinforced tactical combat boots. Very durable." +msgid "A metal tank for holding liquids. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "hiking boots" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "small storage battery" msgstr "" #: lang/json/json_items.py -msgid "Tough yet light leather boots. Very durable and comfortable." +msgid "A small storage battery. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "winter boots" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "motorbike battery" msgstr "" #: lang/json/json_items.py -msgid "Cumbersome boots designed for warmth." +msgid "" +"A 12v lead-acid battery used to power smaller vehicles' electrical systems." msgstr "" -#: lang/json/json_items.py -msgid "mocassins" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "car battery" msgstr "" #: lang/json/json_items.py -msgid "Simple shoes made from animal pelts." +msgid "A 12v lead-acid battery used to power car electrical systems." msgstr "" -#: lang/json/json_items.py -msgid "flip-flops" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "truck battery" msgstr "" #: lang/json/json_items.py -msgid "Simple sandals. Very difficult to run in." +msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" -#: lang/json/json_items.py -msgid "dress shoes" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "storage battery" msgstr "" #: lang/json/json_items.py -msgid "Fancy patent leather shoes. Not designed for running in." +msgid "A large storage battery. Useful for crafting." msgstr "" -#: lang/json/json_items.py -msgid "heels" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "minireactor" msgstr "" #: lang/json/json_items.py -msgid "A pair of high heels. Difficult to even walk in." +msgid "A small portable plutonium reactor. Handle with great care!" msgstr "" -#: lang/json/json_items.py -msgid "chitinous boots" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +#: lang/json/json_vehicle_parts.py +msgid "solar panel" msgstr "" #: lang/json/json_items.py -msgid "Boots made from the exoskeletons of insects. Light and durable." +msgid "" +"Electronic device that can convert solar radiation into electric power. " +"Useful for crafting." msgstr "" #: lang/json/json_items.py -msgid "bone armor boots" +msgid "reinforced solar panel" msgstr "" #: lang/json/json_items.py msgid "" -"Leather boots armored with reinforcements made from bone. Light and strong." +"A solar panel that has been covered with a pane of reinforced glass to " +"protect the delicate solar cells from zombies or errant baseballs. Useful " +"for crafting." msgstr "" -#: lang/json/json_items.py -msgid "leather armor boots" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "minifridge" msgstr "" #: lang/json/json_items.py msgid "" -"Thick leather boots made specifically to protect the feet. Light and tough." +"A very small fridge for keeping food cool, but without electricity it's just " +"a very heavy box with shelves inside." msgstr "" #: lang/json/json_items.py -msgid "swimming trunks" +msgid "solar cell" msgstr "" #: lang/json/json_items.py -msgid "A pair of swimming trunks, with netting." +msgid "" +"A small electronic device that can convert solar radiation into electric " +"power. Useful for crafting." msgstr "" #: lang/json/json_items.py -msgid "shorts" +msgid "sheet metal" msgstr "" #: lang/json/json_items.py -msgid "A pair of khaki shorts." +msgid "A thin sheet of metal." msgstr "" -#: lang/json/json_items.py -msgid "cargo shorts" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "steel plating" msgstr "" #: lang/json/json_items.py -msgid "A pair of shorts lined with pockets, offering decent storage." +msgid "A piece of armor plating made of steel." msgstr "" -#: lang/json/json_items.py -msgid "jeans" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "superalloy plating" msgstr "" #: lang/json/json_items.py -msgid "A pair of blue jeans with two deep pockets." +msgid "A piece of armor plating made of sturdy superalloy." msgstr "" #: lang/json/json_items.py -msgid "pants" +msgid "superalloy sheet" msgstr "" #: lang/json/json_items.py -msgid "A pair of khaki pants. Slightly warmer than jeans." +msgid "A sheet sturdy superalloy, incredibly hard, yet incredibly malleable." msgstr "" -#: lang/json/json_items.py -msgid "leather pants" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "spiked plating" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of black leather pants. Very tough, but cumbersome and without much " -"storage." +"A piece of armor plating made of steel. It is covered by menacing spikes." msgstr "" -#: lang/json/json_items.py -msgid "leather chaps" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "hard plating" msgstr "" #: lang/json/json_items.py -msgid "" -"A pair of black leather chaps. Very tough, and light, but doesn't offer any " -"storage." +msgid "A piece of very thick armor plating made of steel." msgstr "" #: lang/json/json_items.py -msgid "cargo pants" +msgid "RV kitchen unit" msgstr "" #: lang/json/json_items.py -msgid "A pair of pants lined with pockets, offering lots of storage." +msgid "" +"A vehicle mountable electric range and sink unit with integrated tool " +"storage for cooking utensils." msgstr "" #: lang/json/json_items.py -msgid "army pants" +msgid "vehicle welding rig" msgstr "" #: lang/json/json_items.py -msgid "A tough pair of pants lined with pockets. Favored by the military." +msgid "" +"A welding rig made to run off a vehicle's storage battery. It has a " +"soldering iron attachment for delicate work, and a compartment to store your " +"extra tools in." msgstr "" -#: lang/json/json_items.py -msgid "army jacket" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "FOODCO kitchen buddy" msgstr "" #: lang/json/json_items.py -msgid "A tough jacket with lots of pockets. Favored by the military." +msgid "" +"Assembled from a set of instructions you found in an old book of DIY " +"projects, the *FOODCO kitchen buddy* claims to be *the perfect solution to " +"all your home-cooking needs!*. While it is surprisingly handy for vacuum-" +"sealing as well as dehydrating food, the cheery sales pitch neglected to " +"mention A - how awkward the damn thing is, and B - how it doesn't take " +"batteries. You're going to have to weld it to a vehicle, or something else " +"with a supply of electricity, if you want to use it. In addition to the " +"cooking features, it also has a water-purification system, a drawer for " +"holding extra tools, and for some insane reason, a press and die set for " +"hand-loading ammunition." msgstr "" #: lang/json/json_items.py -msgid "ski pants" +msgid "emergency vehicle light (red)" msgstr "" #: lang/json/json_items.py -msgid "A pair of pants meant for alpine skiing." +msgid "" +"One of the red-colored lights from the top of an emergency services vehicle. " +"When turned on, the lights rotate to shine in all directions." msgstr "" #: lang/json/json_items.py -msgid "fur pants" +msgid "emergency vehicle light (blue)" msgstr "" #: lang/json/json_items.py -msgid "A hefty pair of fur-lined pants." +msgid "" +"One of the blue-colored lights from the top of an emergency services " +"vehicle. When turned on, the lights rotate to shine in all directions." msgstr "" #: lang/json/json_items.py -msgid "long underwear top" +msgid "plastic bag" msgstr "" #: lang/json/json_items.py -msgid "A long underwear top that helps to maintain body temperature." +msgid "A small, open plastic bag. Essentially trash." msgstr "" #: lang/json/json_items.py -msgid "long underwear bottom" +msgid "plastic bottle" msgstr "" #: lang/json/json_items.py -msgid "A pair of long underwear that help to maintain body temperature." +msgid "A resealable plastic bottle, holds 500 ml of liquid." msgstr "" #: lang/json/json_items.py -msgid "union suit" +msgid "glass bottle" msgstr "" #: lang/json/json_items.py -msgid "" -"A one-piece suit of full-body long underwear that helps to maintain body " -"temperature." +msgid "A resealable glass bottle, holds 750 ml of liquid." msgstr "" #: lang/json/json_items.py -msgid "arm warmers" +msgid "aluminum can" msgstr "" #: lang/json/json_items.py -msgid "Snug, soft cloth sleeves to keep your arms warm." +msgid "An aluminum can, like what soda comes in." msgstr "" #: lang/json/json_items.py -msgid "leg warmers" +msgid "tin can" msgstr "" #: lang/json/json_items.py -msgid "Snug, soft cloth sleeves to keep your legs warm." +msgid "A tin can, like what beans come in." msgstr "" #: lang/json/json_items.py -msgid "skirt" +msgid "sm. cardboard box" msgstr "" #: lang/json/json_items.py -msgid "" -"A short, breezy cotton skirt. Easy to move in, but only has a single small " -"pocket." +msgid "A small cardboard box. No bigger than a foot in dimension." msgstr "" #: lang/json/json_items.py -msgid "jumpsuit" +msgid "plastic canteen" msgstr "" #: lang/json/json_items.py msgid "" -"A thin, short-sleeved jumpsuit; similar to those worn by prisoners. Provides " -"decent storage and is not very encumbering." +"A large military-style water canteen, with a 1.5 liter capacity and strap." msgstr "" #: lang/json/json_items.py -msgid "wolf suit" +msgid "plastic jerrycan" msgstr "" #: lang/json/json_items.py msgid "" -"A full body fursuit in the form of an anthropomorphic wolf. It is quite " -"encumbering and has little storage but is very warm." +"A bulky plastic jerrycan, meant to carry fuel, but can carry other liquids\n" +"in a pinch. It has a capacity of 10 liters." msgstr "" #: lang/json/json_items.py -msgid "clown suit" +msgid "gallon jug" msgstr "" #: lang/json/json_items.py -msgid "" -"A colorful and ridiculous costume fit for a clown. Provides decent storage." +msgid "A standard plastic jug used for household cleaning chemicals." msgstr "" #: lang/json/json_items.py -msgid "clown shoes" +msgid "glass flask" msgstr "" #: lang/json/json_items.py -msgid "Gigantic shoes fit for a clown. Incredibly difficult to walk in." +msgid "A 250 ml laboratory conical flask, with a rubber bung." msgstr "" #: lang/json/json_items.py -msgid "bondage suit" +msgid "waterskin" msgstr "" #: lang/json/json_items.py -msgid "" -"A suit of snug, black leather. Has no pockets, but does feature an abundance " -"of unusually located zippers." +msgid "A watertight leather bag, can hold 1.5 liters of water." msgstr "" #: lang/json/json_items.py -msgid "bondage mask" +msgid "steel jerrycan" msgstr "" #: lang/json/json_items.py msgid "" -"A tight mask made of black leather. The eyes and mouth can be closed using " -"zippers." +"A steel jerrycan, meant to carry fuel, but can carry other liquids\n" +"in a pinch. It has a capacity of 25 liters." msgstr "" #: lang/json/json_items.py -msgid "leather corset" +msgid "aluminum keg" msgstr "" #: lang/json/json_items.py msgid "" -"A snug, black leather corset. Has no pockets, but its thick material " -"provides good protection from harm." +"A reusable aluminum keg, used for shipping beer.\n" +"It has a capacity of 50 liters." msgstr "" #: lang/json/json_items.py -msgid "wetsuit" +msgid "glass jar" msgstr "" #: lang/json/json_items.py -msgid "A full-body neoprene wetsuit." +msgid "A half-litre glass jar with a metal screw top lid, used for canning." msgstr "" #: lang/json/json_items.py -msgid "swimming booties" +msgid "3l glass jar" msgstr "" #: lang/json/json_items.py -msgid "A pair of neoprene swimming booties, with individual toes." +msgid "A three-litre glass jar with a metal screw top lid, used for canning." msgstr "" #: lang/json/json_items.py -msgid "swimming gloves" +msgid "hip flask" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of very flexible neoprene-silicon rubber gloves, suitable for " -"underwater use." +"A 250 ml metal flask with a hinged screw-on lid, commonly used to discreetly " +"transport alcohol." msgstr "" #: lang/json/json_items.py -msgid "spring suit" +msgid "plastic bowl" msgstr "" #: lang/json/json_items.py msgid "" -"A long-sleeved spring wetsuit with pink color details and cleavage-" -"enhancing, hip-accentuating construction. Not as protective as a full-body " -"suit, but also less oppressive." +"A plastic bowl. Can be used as a container or as a tool. Holds 250 ml of " +"liquid." msgstr "" #: lang/json/json_items.py -msgid "dress" +msgid "paper wrapper" msgstr "" #: lang/json/json_items.py -msgid "" -"A long cotton dress. Though comfortable to wear, it lacks any storage space." +msgid "Just a piece of butcher's paper. Good for starting fires." msgstr "" #: lang/json/json_items.py -msgid "sundress" +msgid ".45 caliber conversion kit" msgstr "" #: lang/json/json_items.py msgid "" -"A light and breezy cotton dress. Though cool and comfortable to wear, it " -"lacks any storage space." +"Replacing several key parts of a 9mm, .38, .40 or .44 firearm converts it to " +"a .45 firearm. The conversion results in reduced accuracy and increased " +"recoil." msgstr "" #: lang/json/json_items.py -msgid "lowtop tennis shoes" +msgid "suppressor" msgstr "" #: lang/json/json_items.py -msgid "Lightweight shoes made of cloth and rubber." +msgid "" +"Using a suppressor is almost an imperative in zombie-infested regions. " +"Gunfire is very noisy, and will attract predators. Its only drawback is a " +"reduced muzzle velocity, resulting in less accuracy and damage." msgstr "" #: lang/json/json_items.py -msgid "wedding dress" +msgid "enhanced grip" msgstr "" #: lang/json/json_items.py -msgid "A beautiful white wedding dress. What good will it be now?" +msgid "" +"A grip placed forward on the barrel allows for greater control and accuracy. " +"Aside from increased weight, there are no drawbacks." msgstr "" #: lang/json/json_items.py -msgid "chitinous armor" +msgid "barrel extension" msgstr "" #: lang/json/json_items.py msgid "" -"Leg and body armor made from the exoskeletons of insects. Light and durable." +"A longer barrel increases the muzzle velocity of a firearm, contributing to " +"both accuracy and damage. However, the longer barrel tends to vibrate after " +"firing, greatly increasing recoil." msgstr "" #: lang/json/json_items.py -msgid "bone body armor" +msgid "shortened barrel" msgstr "" #: lang/json/json_items.py msgid "" -"Body armor consisting of a leather backing suit with bone reinforcement. " -"Light and strong." +"A shortened barrel results in markedly reduced accuracy, and a minor " +"increase in noise, but also reduces recoil greatly as a result of the " +"improved manageability of the firearm." msgstr "" #: lang/json/json_items.py -msgid "leather body armor" +msgid "rifled barrel" msgstr "" #: lang/json/json_items.py -msgid "Thick leather body armor. Light and comfortable." +msgid "" +"Rifling a shotgun barrel is mainly done in order to improve its accuracy " +"when firing slugs. The rifling makes the gun less suitable for shot, however." msgstr "" #: lang/json/json_items.py -msgid "boiled leather armor" +msgid "extended magazine" msgstr "" #: lang/json/json_items.py +#, no-python-format msgid "" -"Thick leather body armor that has been hardened via chemical treatment. " -"Light and strong." +"Increases the ammunition capacity of your firearm by 50%, but the added bulk " +"reduces accuracy slightly." msgstr "" #: lang/json/json_items.py -msgid "fur body armor" +msgid "double magazine" msgstr "" #: lang/json/json_items.py -msgid "Thick body armor made from furs. Warm and comfortable." +msgid "" +"Completely doubles the ammunition capacity of your firearm, but the added " +"bulk reduces accuracy and increases recoil." msgstr "" #: lang/json/json_items.py -msgid "plated leather armor" +msgid "spare magazine" msgstr "" #: lang/json/json_items.py msgid "" -"Thick leather body armor that has been reinforced with strategically-placed " -"metal plates. Strong and comfortable." +"A spare magazine you can keep on hand to make reloads faster, but must " +"itself be reloaded before it can be used again." msgstr "" #: lang/json/json_items.py -msgid "leather touring suit" +msgid "brass catcher" msgstr "" #: lang/json/json_items.py msgid "" -"A thick leather body suit made for protection while riding motorcycles. " -"Light and very comfortable." +"A bag that hangs off the side of your gun and catches ejected casings so you " +"don't have to pick them up." msgstr "" #: lang/json/json_items.py -msgid "suit" +msgid "gyroscopic stabilizer" msgstr "" #: lang/json/json_items.py msgid "" -"A full-body cotton suit. Makes the apocalypse a truly gentlemanly experience." +"An advanced unit that straps onto the side of your firearm and reduces " +"vibration, greatly reducing recoil and increasing accuracy. However, it " +"also takes up space in the magazine slot, reducing ammo capacity." msgstr "" #: lang/json/json_items.py -msgid "tuxedo" +msgid "rapid blowback" msgstr "" #: lang/json/json_items.py -msgid "A full-body tuxedo. Makes the apocalypse feel a little more classy." +msgid "" +"An improved blowback mechanism makes your firearm's automatic fire faster, " +"at the cost of reduced accuracy and increased noise." msgstr "" #: lang/json/json_items.py -msgid "cleansuit" +msgid "auto-fire mechanism" msgstr "" #: lang/json/json_items.py msgid "" -"A simple hazardous materials handling suit. Though somewhat restrictive and " -"fragile, wearing it will provide excellent protection against ambient " -"radiation." +"A simple mechanism that converts a pistol to a fully-automatic weapon, with " +"a burst size of three rounds. However, it reduces accuracy, and increases " +"noise and recoil." msgstr "" #: lang/json/json_items.py -msgid "AEP suit" +msgid "9mm caliber conversion kit" msgstr "" #: lang/json/json_items.py msgid "" -"An armored environmental protection suit. Custom-built from a cleansuit and " -"body armor, it provides excellent protection against both physical harm and " -"ambient radiation." +"Replacing several key parts of a .38, .40, .44 or .45 firearm converts it to " +"a 9mm firearm. The conversion results in a slight reduction in accuracy." msgstr "" #: lang/json/json_items.py -msgid "hazmat suit" +msgid ".22 caliber conversion kit" msgstr "" #: lang/json/json_items.py msgid "" -"An impermeable whole-body garment worn as protection against hazardous " -"materials. Though very restrictive and fragile, wearing it will provide " -"complete protection against ambient radiation." +"Replacing several key parts of a 9mm, .38, .40, 5.7mm, 4.6mm, 7.62mm or .223 " +"firearm converts it to a .22 firearm. The conversion results in a slight " +"reduction in accuracy." msgstr "" #: lang/json/json_items.py -msgid "ANBC suit" +msgid "5.7mm caliber conversion kit" msgstr "" #: lang/json/json_items.py msgid "" -"An armored, impermeable whole-body garment worn as protection against danger " -"of all sorts, functioning as body armor as well as protecting from nuclear, " -"biological, and chemical hazards." +"FN Hestal sells a conversion kit, used to convert .22, 9mm, or .38 firearms " +"to their proprietary 5.7x28mm, a round designed for accuracy and armor " +"penetration." msgstr "" #: lang/json/json_items.py -msgid "survivor mask" +msgid "4.6mm caliber conversion kit" msgstr "" #: lang/json/json_items.py msgid "" -"A custom-built, reinforced gas mask that covers the face and eyes. Provides " -"excellent protection from smoke, teargas, and shrapnel." +"Heckler and Koch sells a conversion kit, used to convert .22, 9mm, or .38 " +"firearms to their proprietary 4.6x30mm, a round designed for accuracy and " +"armor penetration." msgstr "" #: lang/json/json_items.py -msgid "survivor vest" +msgid ".308 caliber conversion kit" msgstr "" #: lang/json/json_items.py msgid "" -"A custom-built light vest covered with pockets and pouches. Durable and " -"carefully crafted to be comfortable to wear." -msgstr "" - -#: lang/json/json_items.py -msgid "ornamental plate armor" +"This kit is used to convert a shotgun or 7.62mm, .223 or .30-06 rifle to the " +"popular and powerful .308 caliber. The conversion results in reduced ammo " +"capacity and a slight reduction in accuracy." msgstr "" #: lang/json/json_items.py -msgid "An extremely heavy ornamental suit of armor." +msgid ".223 caliber conversion kit" msgstr "" #: lang/json/json_items.py -msgid "t shirt" +msgid "" +"This kit is used to convert a shotgun or 7.62mm, .30-06, or .308 rifle to " +"the popular, accurate, and damaging .223 caliber. The conversion results in " +"slight reductions in both accuracy and ammo capacity." msgstr "" #: lang/json/json_items.py -msgid "A short-sleeved cotton shirt." +msgid "battle rifle conversion" msgstr "" #: lang/json/json_items.py -msgid "long-sleeved shirt" +msgid "" +"This is a complete conversion kit, designed to turn a rifle into a powerful " +"battle rifle. It reduces accuracy, and increases noise and recoil, but also " +"increases damage, ammo capacity, and fire rate." msgstr "" #: lang/json/json_items.py -msgid "A long-sleeved cotton shirt." +msgid "sniper conversion" msgstr "" #: lang/json/json_items.py -msgid "flag shirt" -msgstr "" - -#: lang/json/json_items.py -msgid "A t-shirt embroidered with the pattern of an American flag." +msgid "" +"This is a complete conversion kit, designed to turn a rifle into a deadly " +"sniper rifle. It decreases ammo capacity, and removes any automatic fire " +"capabilities, but also increases accuracy and damage." msgstr "" #: lang/json/json_items.py -msgid "polo shirt" +msgid "M203" msgstr "" #: lang/json/json_items.py -msgid "A short-sleeved cotton shirt, slightly thicker than a t-shirt." +msgid "" +"The M203 was originally designed for use with M16 variants but today can be " +"attached to almost any rifle. It allows a single 40mm grenade to be loaded " +"and fired." msgstr "" #: lang/json/json_items.py -msgid "dress shirt" +msgid "40mm pipe launcher" msgstr "" #: lang/json/json_items.py -msgid "A white button-down shirt with long sleeves. Looks professional!" +msgid "" +"This is a home built launcher tube that can be attached to almost any rifle. " +"It allows a single 40mm grenade to be loaded and fired." msgstr "" #: lang/json/json_items.py -msgid "sheriff's shirt" +msgid "bayonet" msgstr "" #: lang/json/json_items.py -msgid "A tan button-down shirt with long sleeves." +msgid "" +"A bayonet is a stabbing weapon that can be attached to the front of a " +"shotgun, sub-machinegun or rifle, allowing a melee attack to deal piercing " +"damage. The added length increases recoil slightly." msgstr "" #: lang/json/json_items.py -msgid "camo tank top" +msgid "sword bayonet" msgstr "" #: lang/json/json_items.py -msgid "A sleeveless cotton shirt with camouflage dye. Very easy to move in." +msgid "" +"A sword bayonet is a large slashing weapon that can be attached to the front " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " +"added length increases recoil substantially." msgstr "" #: lang/json/json_items.py -msgid "tank top" +msgid "pistol bayonet" msgstr "" #: lang/json/json_items.py -msgid "A sleeveless cotton shirt. Very easy to move in." +msgid "" +"A pistol bayonet is a stabbing weapon that can be attached to the front of a " +"handgun, allowing a melee attack to deal piercing damage. The added length " +"reduces the gun's overall handling somewhat." msgstr "" #: lang/json/json_items.py -msgid "bikini top" +msgid "underslung shotgun" msgstr "" #: lang/json/json_items.py -msgid "A simple bikini top." +msgid "" +"A miniaturized shotgun with 2 barrels, which can be mounted under the barrel " +"of many rifles. It allows two shotgun shells to be loaded and fired." msgstr "" #: lang/json/json_items.py -msgid "leather bikini top" +msgid "masterkey shotgun" msgstr "" #: lang/json/json_items.py -msgid "A simple leather bikini top." +msgid "" +"A minimalist pump action shotgun, which can be mounted under the barrel of " +"many rifles. It allows a total of four shotgun shells to be loaded and fired." msgstr "" #: lang/json/json_items.py -msgid "fur bikini top" +msgid "rail-mounted crossbow" msgstr "" #: lang/json/json_items.py -msgid "A simple fur bikini top." +msgid "" +"A kit to attach a pair of crossbow arms and a firing rail to the barrel of a " +"long firearm. It allows crossbow bolts to be fired." msgstr "" #: lang/json/json_items.py -msgid "hot pants" +msgid "laser sight" msgstr "" #: lang/json/json_items.py -msgid "A simple pair of short shorts." +msgid "" +"A small visible-light laser that mounts on a firearm to enhance ease and " +"speed of target acquisition. Aside from increased weight, there are no " +"drawbacks." msgstr "" #: lang/json/json_items.py -msgid "leather hot pants" +msgid "improved iron sights" msgstr "" #: lang/json/json_items.py -msgid "A simple pair of leather short shorts." +msgid "Improves the weapon's ironsights, increasing accuracy. No drawbacks." msgstr "" #: lang/json/json_items.py -msgid "fur hot pants" +msgid "red dot sight" msgstr "" #: lang/json/json_items.py -msgid "A simple pair of fur short shorts." +msgid "" +"Adds a red dot optic to the top of your gun, replacing the iron sights. " +"Increases accuracy and weight." msgstr "" #: lang/json/json_items.py -msgid "sweatshirt" +msgid "holographic sight" msgstr "" #: lang/json/json_items.py -msgid "A thick cotton shirt. Provides warmth and a bit of padding." +msgid "" +"Adds a holographic sight. Used extensively by military forces, it increases " +"accuracy and weight but is a step up from a red dot sight." msgstr "" #: lang/json/json_items.py -msgid "sweater" +msgid "rifle scope" msgstr "" #: lang/json/json_items.py -msgid "A wool shirt. Provides warmth." +msgid "" +"A long ranged rifle scope used by civilians and military alike, increases " +"weight but improves accuracy greatly." msgstr "" #: lang/json/json_items.py -msgid "hoodie" +msgid "ported barrel" msgstr "" #: lang/json/json_items.py msgid "" -"A sweatshirt with a hood and a \"kangaroo pocket\" in front for storage." +"A ported barrel redirects exhaust gases to compensate for muzzle climb, " +"improves recoil but increases noise and reduces accuracy slightly." msgstr "" #: lang/json/json_items.py -msgid "sports jersey" +msgid "ergonomic grip" msgstr "" #: lang/json/json_items.py msgid "" -"A shirt made of thick material imprinted with the name and logo of a sports " -"team." +"A set of ergonomic replacement furniture for a pistol, improves recoil and " +"accuracy. Aside from increased weight, there are no drawbacks." msgstr "" #: lang/json/json_items.py -msgid "under armor" +msgid "adjustable stock" msgstr "" #: lang/json/json_items.py -msgid "Sports wear that clings to your chest to maintain body temperature." +msgid "" +"An adjustable replacement stock, improves recoil and accuracy. Aside from " +"increased weight, there are no drawbacks." msgstr "" #: lang/json/json_items.py -msgid "tights" +msgid "pistol stock" msgstr "" #: lang/json/json_items.py msgid "" -"A snug cloth garment which clings tightly to the legs and can help maintain " -"body temperature." +"An add on stock for handguns, improves recoil and accuracy. Aside from " +"increased weight, there are no drawbacks." msgstr "" #: lang/json/json_items.py -msgid "light jacket" +msgid "bipod" msgstr "" #: lang/json/json_items.py -msgid "A thin cotton jacket with a hood. Good for brisk weather." +msgid "" +"Bipods are commonly used on rifles and machine guns to provide a forward " +"rest and reduce motion. Aside from increased weight, there are no drawbacks." msgstr "" #: lang/json/json_items.py -msgid "jean jacket" +msgid "arrowhead" msgstr "" #: lang/json/json_items.py -msgid "A jacket made from denim. Provides decent protection from cuts." +msgid "" +"Heads for an arrow. Placing these on an arrow will make the arrow more " +"damaging and piercing." msgstr "" #: lang/json/json_items.py -msgid "flannel jacket" +msgid "fletching" msgstr "" #: lang/json/json_items.py msgid "" -"A jacket made from flannel style denim favored by woodsman. Provides decent " -"protection from cuts." +"Also known as a flight, this item provides aerodynamic stabilization of " +"arrows." msgstr "" #: lang/json/json_items.py -msgid "blazer" +msgid "wood arrow shaft" msgstr "" #: lang/json/json_items.py -msgid "A professional-looking wool blazer. Quite cumbersome." +msgid "" +"A crude shaft made from wood. It needs arrowheads and fletching to become a " +"functional arrow. You can, however, fire it from a bow." msgstr "" #: lang/json/json_items.py -msgid "leather jacket" +msgid "heavy wood arrow shaft" msgstr "" #: lang/json/json_items.py msgid "" -"A jacket made from thick leather. Cumbersome, but offers excellent " -"protection from cuts." +"A heavy shaft made from wood. It needs arrowheads and fletching to become a " +"functional arrow. You can, however, fire it from a bow." msgstr "" #: lang/json/json_items.py -msgid "kevlar vest" +msgid "metal arrow shaft" msgstr "" #: lang/json/json_items.py -msgid "A heavy bulletproof vest. The best protection from cuts and bullets." +msgid "" +"A heavy shaft made from scrap metal. It needs arrowheads and fletching to " +"become a functional arrow. You can, however, fire it from a bow." msgstr "" #: lang/json/json_items.py -msgid "rain coat" +msgid "fire hardened wood arrow" msgstr "" #: lang/json/json_items.py msgid "" -"A plastic coat with two very large pockets. Provides protection from rain " -"and some protection from acid rain." +"A simple arrow shaft that has had a point carved into it and then fire " +"hardened." msgstr "" #: lang/json/json_items.py -msgid "rain hood" +msgid "field point wood arrow" msgstr "" #: lang/json/json_items.py msgid "" -"A waterproof hood made to be worn in bad weather. Provides extra protection " -"from rain." +"A simple arrow shaft that has a crude arrow head. Useful for hunting small " +"woodland creatures." msgstr "" #: lang/json/json_items.py -msgid "fishing waders" +msgid "small game arrow" msgstr "" #: lang/json/json_items.py -msgid "Waterproof plastic fishing waders with a single large front pocket." +msgid "" +"A simple arrow shaft that has a wide blunt head. Useful for hunting small " +"woodland creatures without splattering them all over the ground." msgstr "" #: lang/json/json_items.py -msgid "wool poncho" +msgid "fletched fire hardened wood arrow" msgstr "" #: lang/json/json_items.py -msgid "" -"A simple wool garment worn over the torso. Provides a bit of protection." +msgid "This simple arrow has a fire hardened point and some fletchings." msgstr "" #: lang/json/json_items.py -msgid "trenchcoat" +msgid "fletched field point wood arrow" msgstr "" #: lang/json/json_items.py -msgid "A thin cotton trenchcoat, lined with pockets. Great for storage." +msgid "" +"A simple arrow shaft that has a crude arrow head and some fletchings. Useful " +"for hunting small woodland creatures or as a last ditch defense against " +"zombies." msgstr "" #: lang/json/json_items.py -msgid "flotation vest" +msgid "wood arrow" msgstr "" #: lang/json/json_items.py msgid "" -"A brightly-colored vest designed to keep you upright and floating in water." +"A basic wooden arrow, it has a metal arrow head and some fletchings. It's " +"light-weight, does some damage, and is so-so on accuracy. Stands a good " +"chance of remaining intact once fired." msgstr "" #: lang/json/json_items.py -msgid "leather trenchcoat" +msgid "heavy fletched fire hardened arrow" msgstr "" #: lang/json/json_items.py -msgid "A thick leather trenchcoat, lined with pockets. Great for storage." +msgid "" +"This arrow is significantly sturdier than other wooden arrows. It has a " +"firehardened point and some fletchings." msgstr "" #: lang/json/json_items.py -msgid "fur trenchcoat" +msgid "heavy fletched field point arrow" msgstr "" #: lang/json/json_items.py -msgid "A thick fur trenchcoat, lined with pockets. Great for storage." +msgid "" +"This arrow is significantly sturdier than other wooden arrows. It has a " +"crude field point head and some fletchings." msgstr "" #: lang/json/json_items.py -msgid "winter coat" +msgid "heavy wood arrow" msgstr "" #: lang/json/json_items.py -msgid "A padded coat with deep pockets and a hood. Very warm." +msgid "" +"A heavy wooden arrow, it has a metal arrow head and some fletchings. It's " +"much heavier than other wooden arrows, as a result it does more damage and " +"is more stable in flight, resulting in better accuracy over a longer range. " +"Stands a very good chance of remaining intact once fired." msgstr "" #: lang/json/json_items.py -msgid "fur coat" +msgid "sharpened metal arrow" msgstr "" #: lang/json/json_items.py -msgid "A fur coat with a couple small pockets. Extremely warm." +msgid "" +"This metal shaft has been carefully sharpened so that it has a crude point " +"at the end." msgstr "" #: lang/json/json_items.py -msgid "peacoat" +msgid "metal arrow" msgstr "" #: lang/json/json_items.py -msgid "A heavy wool coat. Cumbersome, but warm and with deep pockets." +msgid "This metal arrow has a steel arrow head and some fletchings." msgstr "" #: lang/json/json_items.py -msgid "utility vest" +msgid "carbon fiber arrow" msgstr "" #: lang/json/json_items.py -msgid "A light vest covered in pockets and straps for storage." +msgid "" +"High-tech carbon fiber shafts and 100 grain broadheads. Very light weight, " +"fast, and notoriously fragile." msgstr "" #: lang/json/json_items.py -msgid "leather vest" +msgid "exploding arrow" msgstr "" #: lang/json/json_items.py -msgid "A vest made from thick leather. Offers excellent protection from cuts." +msgid "" +"This arrow has a small IED strapped to its tip. Horribly inaccurate, heavy, " +"and bulky, not only does this contraption require expert hands to pull off a " +"shot, it requires one to loose this with a small measure of confidence the " +"shooter won't be caught in the blast radius." msgstr "" #: lang/json/json_items.py -msgid "tool belt" +msgid "exploding arrowhead" msgstr "" #: lang/json/json_items.py -msgid "A common belt with pockets widely used by handymen, and electricians." +msgid "" +"This simple IED is designed to be attached to an arrow and detonate on " +"impact. Theoretically you could throw it but who would want to do that?" msgstr "" #: lang/json/json_items.py -msgid "chest rig" +msgid "flaming arrow" msgstr "" #: lang/json/json_items.py msgid "" -"A light vest covered in webbing, pockets and straps. This variety is favored " -"by the military." +"This arrow has a flaming rag wrapped around the shaft near the head. You " +"should shoot it soon before it burns your bow." msgstr "" #: lang/json/json_items.py -msgid "lab coat" +msgid "wood crossbow bolt" msgstr "" #: lang/json/json_items.py -msgid "A long white coat with several large pockets." +msgid "" +"A sharpened bolt carved from wood. It's very light, but doesn't do much " +"damage and isn't particularly accurate. Stands a good chance of remaining " +"intact once fired." msgstr "" #: lang/json/json_items.py -msgid "soft arm sleeves" +msgid "metal crossbow bolt" msgstr "" #: lang/json/json_items.py -msgid "A pair of soft neoprene arm sleeves, often used in contact sports." +msgid "" +"A sharpened bolt made from metal of some kind. It's heavy and unwieldy, " +"providing moderate damage and accuracy. Stands a good chance of remaining " +"intact once fired." msgstr "" #: lang/json/json_items.py -msgid "hard arm guards" +msgid "steel crossbow bolt" msgstr "" #: lang/json/json_items.py -msgid "A pair of neoprene arm sleeves covered with molded plastic sheaths." +msgid "" +"A sharp bolt made from steel. Deadly in skilled hands. Stands an excellent " +"chance of remaining intact once fired." msgstr "" #: lang/json/json_items.py -msgid "elbow pads" +msgid "explosive crossbow bolt" msgstr "" #: lang/json/json_items.py -msgid "A pair of elbow pads made of stout plastic and cloth." +msgid "" +"A sharpened bolt made from metal of some kind. It's light but unwieldy, " +"providing moderate accuracy, because it's been filled with explosives and " +"fitted with an impact trigger." msgstr "" #: lang/json/json_items.py -msgid "chitin arm guards" +msgid "self bow" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of arm guards made from the exoskeletons of insects. Light and " -"durable." +"A bow made from a single piece of wood. It is made specifically for the " +"person using it." msgstr "" #: lang/json/json_items.py -msgid "metal arm guards" +msgid "short bow" msgstr "" #: lang/json/json_items.py -msgid "A pair of arm guards hammered out from metal. Very stylish." +msgid "" +"A shorter bow than the longbow, easier to draw than the longbow but " +"sacrifices power. Arrows fired from this weapon have a good chance of " +"remaining intact for re-use. It requires 8 strength to fire" msgstr "" #: lang/json/json_items.py -msgid "glove liners" +msgid "compound bow" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of thin cotton gloves. Often used as a liner beneath other gloves." +"A bow with cams that fires high velocity arrows. Weaker people can use " +"compound bows more easily. Arrows fired from this weapon have a good chance " +"of remaining intact for re-use. It requires 8 strength to fire" msgstr "" #: lang/json/json_items.py -msgid "light gloves" +msgid "composite bow" msgstr "" #: lang/json/json_items.py -msgid "A pair of cotton gloves." +msgid "" +"A bow made from more than one material so it is able to store more energy. " +"Arrows fired from this weapon have a good chance of remaining intact for re-" +"use. It requires 10 strength to fire" msgstr "" #: lang/json/json_items.py -msgid "mittens" +msgid "recurve bow" msgstr "" #: lang/json/json_items.py -msgid "A pair of warm mittens. They are extremely cumbersome." +msgid "" +"A bow that curves away from the archer at the tips allowing more power to be " +"stored in the bow. Arrows fired from this weapon have a good chance of " +"remaining intact for re-use. It requires 10 strength to fire" msgstr "" #: lang/json/json_items.py -msgid "fur gloves" +msgid "reflex bow" msgstr "" #: lang/json/json_items.py -msgid "A pair of warm fur gloves. They are somewhat cumbersome." +msgid "" +"A bow that has limbs which curve away from the archer sacrificing accuracy " +"for power. Arrows fired from this weapon have a good chance of remaining " +"intact for re-use. It requires 10 strength to fire" msgstr "" #: lang/json/json_items.py -msgid "wool gloves" +msgid "longbow" msgstr "" #: lang/json/json_items.py -msgid "A thick pair of wool gloves. Cumbersome but warm." +msgid "" +"A six-foot wooden bow that fires arrows. This takes a fair amount of " +"strength to draw. Arrows fired from this weapon have a good chance of " +"remaining intact for re-use. It requires 10 strength to fire" msgstr "" #: lang/json/json_items.py -msgid "winter gloves" +msgid "reflex recurve bow" msgstr "" #: lang/json/json_items.py -msgid "A pair of padded gloves. Cumbersome but warm." +msgid "" +"A bow that combines the traits from both the reflex and the recurve bows. " +"Both the limbs and the tips curve away from the archer. This dramatically " +"increases the power while increasing the strength to draw the bow " +"significantly. It requires 12 strength to fire efficiently." msgstr "" #: lang/json/json_items.py -msgid "leather gloves" +msgid "pistol crossbow" msgstr "" #: lang/json/json_items.py -msgid "A thin pair of black leather gloves." +msgid "" +"A small concealable pistol like crossbow. It is weak due to it's small size " +"and draw, good for hunting small game. Bolts fired from this weapon have a " +"good chance of remaining intact for re-use." msgstr "" #: lang/json/json_items.py -msgid "tactical gloves" +msgid "crossbow" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of reinforced kevlar tactical gloves. Commonly used by police and " -"military units." +"A slow-loading hand weapon that launches bolts. Stronger people can reload " +"it much faster. Bolts fired from this weapon have a good chance of remaining " +"intact for re-use." msgstr "" #: lang/json/json_items.py -msgid "fingerless gloves" +msgid "Ganz-Rustung" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of leather gloves with no fingers, allowing greater manual dexterity." +"A HUGE very slow-loading medieval crossbow from Germany. It's tension is so " +"powerful that you feel it shake after firing. Un-skilled users will find it " +"very hard to reload. Bolts fired from this weapon have a good chance of " +"remaining intact for re-use." msgstr "" #: lang/json/json_items.py -msgid "armored fingerless gloves" +msgid "repeating crossbow" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of leather gloves with no fingers, allowing greater manual dexterity. " -"These have been crudely reinforced with steel guards across the back." +"A custom made mechanical large crossbow, with a wooden magazine that holds " +"10 bolts. Single bolt reload. Bolts fired from this weapon have a good " +"chance of remaining intact for re-use." msgstr "" #: lang/json/json_items.py -msgid "rubber gloves" +msgid "plastic shaft" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of rubber gloves, often used while cleaning with caustic materials." +"A crude shaft made from plastic. It needs arrowheads and fletching to become " +"a functional arrow. You can, however, fire it from a bow." msgstr "" #: lang/json/json_items.py -msgid "rubber boots" +msgid "plastic arrowhead" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of rubber boots, often used while cleaning with caustic materials." +"Plastic heads for an arrow. Placing these on an arrow will make the arrow " +"more damaging and piercing." msgstr "" #: lang/json/json_items.py -msgid "medical gloves" +msgid "throwing knife" msgstr "" #: lang/json/json_items.py -msgid "A pair of thin latex gloves, designed to limit the spread of disease." +msgid "" +"A thin and flat knife made for throwing. Its ineffective cutting edge and " +"odd shape makes it unsuitable for use as a tool." msgstr "" #: lang/json/json_items.py -msgid "fire gauntlets" +msgid "throwing axe" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy pair of leather gloves, used by firefighters and metalworkers for " -"heat protection." -msgstr "" - -#: lang/json/json_items.py -msgid "chitinous gauntlets" +"A lightweight hatchet made for throwing. Its ineffective cutting edge and " +"light weight makes it unsuitable for use as a tool." msgstr "" #: lang/json/json_items.py -msgid "" -"Gauntlets made from the exoskeletons of insects. Very light and durable." +msgid "plastic arrow" msgstr "" #: lang/json/json_items.py -msgid "bone armor gauntlets" +msgid "This plastic arrow has a plastic arrow head and some fletchings." msgstr "" #: lang/json/json_items.py -msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." +msgid "" +"A set of universal batteries. Used to charge almost any electronic device." msgstr "" #: lang/json/json_items.py -msgid "leather armor gauntlets" +msgid "A small quantity of thread that could be used to refill a sewing kit." msgstr "" #: lang/json/json_items.py -msgid "Heavy fingerless leather gloves. Very flexible and comfortable." +msgid "sinew" msgstr "" #: lang/json/json_items.py -msgid "dust mask" +msgid "A tough sinew cut from a corpse, usable as thread." msgstr "" #: lang/json/json_items.py -msgid "" -"A simple piece of cotton that straps over the mouth. Provides a small amount " -"of protection from air-borne illness and dust." +msgid "plant fibre" msgstr "" #: lang/json/json_items.py -msgid "bandana" +msgid "Tough thin fibres, taken from a plant. Can be used as thread." msgstr "" #: lang/json/json_items.py -msgid "" -"A cotton bandana, worn over the mouth for warmth and minor protection from " -"dust and other contaminants." +msgid "duct tape" msgstr "" #: lang/json/json_items.py -msgid "scarf" +msgid "A roll of incredibly strong tape. Its uses are innumerable." msgstr "" #: lang/json/json_items.py -msgid "A long wool scarf, worn over the mouth for warmth." +msgid "copper wire" msgstr "" #: lang/json/json_items.py -msgid "A long fur scarf, worn over the mouth for warmth." +msgid "Plastic jacketed copper cable of the type used in small electronics." msgstr "" #: lang/json/json_items.py -msgid "filter mask" +msgid "plutonium cell" msgstr "" #: lang/json/json_items.py msgid "" -"A mask that straps over your mouth and nose and filters air. Protects from " -"smoke, dust, and other contaminants quite well." +"A nuclear-powered battery. Used to charge advanced and rare electronics." msgstr "" #: lang/json/json_items.py -msgid "gas mask" +msgid "A box of nails, mainly useful with a hammer." msgstr "" #: lang/json/json_items.py -msgid "" -"A full gas mask that covers the face and eyes. Provides excellent protection " -"from smoke, teargas, and other contaminants." +msgid "A handful of pebbles, useful as ammunition for slings." msgstr "" #: lang/json/json_items.py -msgid "eyeglasses" +msgid "darts" msgstr "" #: lang/json/json_items.py -msgid "A pair of glasses for the near-sighted. Useless for anyone else." +msgid "A handful of darts, useful as ammunition for blowguns." msgstr "" #: lang/json/json_items.py -msgid "reading glasses" +msgid "bearings" msgstr "" #: lang/json/json_items.py -msgid "A pair of glasses for the far-sighted. Useless for anyone else." +msgid "A box of ball bearings, useful as ammunition for slings." msgstr "" #: lang/json/json_items.py -msgid "bifocal glasses" +msgid "BB" msgstr "" #: lang/json/json_items.py -msgid "" -"A pair of bifocal glasses for those who are both near-sighted and far-" -"sighted." +msgid "A box of small steel balls. They deal virtually no damage." msgstr "" #: lang/json/json_items.py -msgid "safety glasses" +msgid "feather" msgstr "" #: lang/json/json_items.py -msgid "" -"A pair of plastic glasses, used in workshops, sports, chemistry labs, and " -"many other places. Provides great protection from damage." +msgid "Feathers from a bird. Useful for fletching arrows" msgstr "" #: lang/json/json_items.py -msgid "swim goggles" +msgid "birdshot" msgstr "" #: lang/json/json_items.py msgid "" -"A small pair of goggles. Distorts vision above water, but allows you to see " -"much further under water." +"Weak shotgun ammunition. Designed for hunting birds and other small game, " +"its applications in combat are very limited." msgstr "" #: lang/json/json_items.py -msgid "ski goggles" +msgid "00 shot" msgstr "" #: lang/json/json_items.py msgid "" -"A large pair of goggles that completely seal off your eyes. Excellent " -"protection from environmental dangers." +"A shell filled with iron pellets. Extremely damaging, plus the spread makes " +"it very accurate at short range. Favored by SWAT forces." msgstr "" #: lang/json/json_items.py -msgid "welding goggles" +msgid "shotgun slug" msgstr "" #: lang/json/json_items.py msgid "" -"A dark pair of goggles. They make seeing very difficult, but protect you " -"from bright flashes." +"A heavy metal slug used with shotguns to give them the range capabilities of " +"a rifle. Extremely damaging but rather inaccurate. Works best in a shotgun " +"with a rifled barrel." msgstr "" #: lang/json/json_items.py -msgid "light amp goggles" +msgid "explosive slug" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of goggles that amplify ambient light, allowing you to see in the " -"dark. You must be carrying a powered-on unified power supply, or UPS, to " -"use them." +"A shotgun slug loaded with concussive explosives. While the slug itself will " +"not do much damage to its target, it will explode on contact." msgstr "" #: lang/json/json_items.py -msgid "ballistic glasses" +msgid "flechette shell" msgstr "" #: lang/json/json_items.py msgid "" -"Modern tactical eyewear that protects from small projectiles and fragments. " -"Excellent protection from environmental dangers." +"A shotgun shell filled with tiny steel darts. Extremely damaging, plus the " +"spread makes it very accurate at short range. Slices through most forms of " +"armor with ease." msgstr "" #: lang/json/json_items.py -msgid "monocle" +msgid ".22 LR" msgstr "" #: lang/json/json_items.py msgid "" -"An essential article of the gentleman's apparel. Also negates near-sight." +"One of the smallest calibers available, the .22 Long Rifle cartridge has " +"maintained popularity for nearly two centuries. Its minimal recoil, low cost " +"and low noise are offset by its paltry damage." msgstr "" #: lang/json/json_items.py -msgid "sunglasses" +msgid ".22 FMJ" msgstr "" #: lang/json/json_items.py -msgid "A pair of sunglasses, good for keeping the glare out of your eyes." +msgid "A brass-jacketed .22 caliber round with superior penetration capacity." msgstr "" #: lang/json/json_items.py -msgid "stylish sunglasses" +msgid ".22 CB" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of stylish sunglasses, look good while keeping the glare out of your " -"eyes." +"Conical Ball .22 is a variety of .22 ammunition with a very small propellant " +"charge and generally lacks gunpowder. The end result is a subsonic round. It " +"is nearly silent, but is so weak as to be nearly useless." msgstr "" #: lang/json/json_items.py -msgid "baseball cap" +msgid ".22 rat-shot" msgstr "" #: lang/json/json_items.py -msgid "A Red Sox cap. It provides a little bit of warmth." +msgid "" +"Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " +"other small vermin while being unable to damage walls. It has an extremely " +"short range and is unable to injure all but the smallest creatures." msgstr "" #: lang/json/json_items.py -msgid "boonie hat" +msgid "" +"9 millimeter parabellum is generally regarded as the most popular handgun " +"cartridge and used by the majority of US police forces. It is also a very " +"popular round in sub-machine guns." msgstr "" #: lang/json/json_items.py -msgid "Also called a \"bucket hat.\" Often used in the military." +msgid "9mm +P" msgstr "" #: lang/json/json_items.py -msgid "cotton hat" +msgid "" +"Attempts to improve the ballistics of 9mm ammunition lead to high-pressure " +"rounds. Increased velocity results in superior accuracy and damage." msgstr "" #: lang/json/json_items.py -msgid "A snug-fitting cotton hat. Quite warm." +msgid "9mm +P+" msgstr "" #: lang/json/json_items.py -msgid "knit hat" +msgid "" +"A step beyond the high-pressure 9mm +P round, the +P+ has an even higher " +"internal pressure that offers a degree of armor-penetrating ability." msgstr "" #: lang/json/json_items.py -msgid "A snug-fitting wool hat. Very warm." -msgstr "" - -#: lang/json/json_items.py -msgid "hunting cap" +msgid "9mm FMJ" msgstr "" #: lang/json/json_items.py -msgid "A red plaid hunting cap with ear flaps. Notably warm." +msgid "" +"A brass-jacketed 9mm Parabellum round. This increases penetration slightly " +"at the cost of reduced expansion." msgstr "" #: lang/json/json_items.py -msgid "fur hat" +msgid "7.62mm Type P" msgstr "" #: lang/json/json_items.py -msgid "A hat made from the pelts of animals. Extremely warm." +msgid "" +"This small caliber pistol round offers good armor penetration at the cost of " +"slightly less damage. It is rarely used outside of the Chinese army." msgstr "" #: lang/json/json_items.py -msgid "balaclava" +msgid ".38 Special" msgstr "" #: lang/json/json_items.py -msgid "A warm covering that protects the head and face from cold." +msgid "" +"The .38 Smith & Wesson Special enjoyed popularity among US police forces " +"throughout the 20th century. It is most commonly used in revolvers." msgstr "" #: lang/json/json_items.py -msgid "hard hat" +msgid ".38 Super" msgstr "" #: lang/json/json_items.py msgid "" -"A hard plastic hat worn in constructions sites. Excellent protection from " -"cuts and percussion." +"The .38 Super is a high-pressure load of the .38 Special caliber. It is a " +"popular choice in pistol competitions for its high accuracy, while its " +"stopping power keeps it popular for self-defense." msgstr "" #: lang/json/json_items.py -msgid "pickelhaube" +msgid ".38 FMJ" msgstr "" #: lang/json/json_items.py msgid "" -"A spiked helmet once worn by German military officers. The spike is very " -"sharp." +"A brass-jacketed .38 round. This increases penetration slightly at the cost " +"of reduced expansion." msgstr "" #: lang/json/json_items.py -msgid "beret" +msgid "10mm Auto" msgstr "" #: lang/json/json_items.py -msgid "A soft cotton hat commonly worn by armed forces and existentialists." +msgid "" +"Originally used by the FBI, the organization eventually abandoned the round " +"due to its high recoil. Although respected for its versatility and power, it " +"has largely been supplanted by the downgraded .40 S&W." msgstr "" #: lang/json/json_items.py -msgid "wool beret" +msgid ".40 S&W" msgstr "" #: lang/json/json_items.py -msgid "A soft wool hat commonly worn by armed forces and existentialists." +msgid "" +"The .40 Smith & Wesson round was developed as an alternative to 10mm Auto " +"for the FBI after they complained of high recoil. It is as accurate as 9mm, " +"but has greater stopping power, leading to widespread use in law enforcement." msgstr "" #: lang/json/json_items.py -msgid "bike helmet" +msgid ".40 FMJ" msgstr "" #: lang/json/json_items.py -msgid "A thick foam helmet. Designed to protect against concussion." +msgid "" +"A brass-jacketed .40 Smith & Wesson round. This increases penetration " +"slightly at the cost of reduced expansion." msgstr "" #: lang/json/json_items.py -msgid "skid lid" +msgid ".44 Magnum" msgstr "" #: lang/json/json_items.py msgid "" -"A small metal helmet that covers the head and protects against cuts and " -"percussion." +"Described (in 1971) by Dirty Harry as \"the most powerful handgun in the " +"world,\" the .44 Magnum gained widespread popularity due to its depictions " +"in the media. In reality, its intense recoil makes it unsuitable in most " +"cases." msgstr "" #: lang/json/json_items.py -msgid "baseball helmet" +msgid ".44 FMJ" msgstr "" #: lang/json/json_items.py msgid "" -"A hard plastic helmet that covers the head and ears. Designed to protect " -"against a baseball to the head." +"A brass-jacketed variant of the .44 Magnum round. This increases " +"penetration slightly at the cost of reduced damage from expansion." msgstr "" #: lang/json/json_items.py -msgid "army helmet" +msgid ".45 ACP" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy helmet that provides excellent protection from all sorts of damage." +"The .45 round was one of the most popular and powerful handgun rounds " +"through the 20th century. It features very good accuracy and stopping power, " +"but suffers from moderate recoil and poor armor penetration." msgstr "" #: lang/json/json_items.py -msgid "helmet liner" +msgid ".45 FMJ" msgstr "" #: lang/json/json_items.py -msgid "A helmet liner that goes inside a helmet to make it warmer." +msgid "" +"Full Metal Jacket .45 rounds are designed to overcome the poor armor " +"penetration of the standard ACP round. However, they are less likely to " +"expand upon impact, resulting in reduced damage overall." msgstr "" #: lang/json/json_items.py -msgid "riot helmet" +msgid ".45 Super" msgstr "" #: lang/json/json_items.py -msgid "A helmet with a plastic shield that covers your entire face." +msgid "" +"The .45 Super round is an updated variant of .45 ACP. It is overloaded, " +"resulting in a great increase in muzzle velocity. This translates to higher " +"accuracy and range, a minor armor piercing capability, and greater recoil." msgstr "" #: lang/json/json_items.py -msgid "motorcycle helmet" +msgid ".454 Casull" msgstr "" #: lang/json/json_items.py msgid "" -"A helmet with covers for your head and chin, leaving space in-between for " -"you to wear goggles." +"The .454 Casull round a very powerful revolver round capable of killing huge " +"game, like elephants, with ease. It's designed to be used with the Taurus " +"Raging Bull." msgstr "" #: lang/json/json_items.py -msgid "chitinous helmet" +msgid ".500 S&W Magnum" msgstr "" #: lang/json/json_items.py msgid "" -"A helmet made from the exoskeletons of insects. Covers the entire head; very " -"light and durable." +"Claimed to be the world's most powerful handgun round, the .500 S&W Magnum " +"was developed in tandem with the revolutionary S&W 500 Revolver." msgstr "" #: lang/json/json_items.py -msgid "bone armor helmet" +msgid "5.7x28mm" msgstr "" #: lang/json/json_items.py msgid "" -"A grotesque, horned helmet carved from bone. Covers the entire head; very " -"light and strong." +"The 5.7x28mm round is a proprietary round developed by FN Hestal for use in " +"their P90 SMG. While it is a very small round, comparable in power to .22, " +"it features incredible armor-piercing capabilities and very low recoil." msgstr "" #: lang/json/json_items.py -msgid "great helm" +msgid "4.6x30mm" msgstr "" #: lang/json/json_items.py msgid "" -"A medieval helmet that provides excellent protection to the entire head, at " -"the cost of great encumbrance." +"Designed by Heckler & Koch to compete with the 5.7x28mm round, 4.6x30mm is, " +"like the 5.7, designed to minimize weight and recoil while increasing " +"penetration of body armor. Its low recoil makes it ideal for automatic fire." msgstr "" #: lang/json/json_items.py -msgid "top hat" +msgid "7.62x39mm M43" msgstr "" #: lang/json/json_items.py msgid "" -"The only hat for a gentleman. Look exquisite while laughing in the face of " -"danger!" +"Designed during World War II by the Soviet Union, the popularity of the " +"AK-47 and the SKS contributed to the widespread adoption of the 7.62x39mm " +"rifle round. However, due to its lack of yaw, this round deals less damage " +"than most." msgstr "" #: lang/json/json_items.py -msgid "bowler hat" +msgid "7.62x39mm M67" msgstr "" #: lang/json/json_items.py msgid "" -"The only hat for a made man. Look like a real good fella while laughing in " -"the face of your foes!" +"The M67 variant of the popular 7.62x39mm rifle round was designed to improve " +"yaw. This causes the round to tumble inside a target, causing significantly " +"more damage. It is still outdone by shattering rounds." msgstr "" #: lang/json/json_items.py -msgid "backpack" +msgid ".223 Remington" msgstr "" #: lang/json/json_items.py -msgid "A small backpack, good storage for a little encumbrance." +msgid "" +"The .223 rifle round is a civilian variant of the 5.56 NATO round. It is " +"designed to tumble or fragment inside a target, dealing devastating damage. " +"The lower pressure of the .223 compared to the 5.56 results in lower " +"accuracy." msgstr "" #: lang/json/json_items.py -msgid "leather backpack" +msgid "5.56 NATO" msgstr "" #: lang/json/json_items.py -msgid "A small leather backpack, good storage for a little encumbrance." +msgid "" +"This rifle round has enjoyed widespread use in NATO countries, thanks to its " +"very light weight and high damage. It is designed to shatter inside a " +"target, inflicting massive damage." msgstr "" #: lang/json/json_items.py -msgid "military rucksack" +msgid "5.56 incendiary" msgstr "" #: lang/json/json_items.py -msgid "A huge military rucksack, provides a lot of storage." +msgid "" +"A variant of the widely-used 5.56 NATO round, incendiary rounds are designed " +"to burn hotly upon impact, piercing armor and igniting flammable substances." msgstr "" #: lang/json/json_items.py -msgid "duffel bag" +msgid ".270 Winchester" msgstr "" #: lang/json/json_items.py -msgid "A huge duffel bag, provides plenty of storage but severely encumbering." +msgid "" +"Based off the military .30-03 round, the .270 rifle round is compatible with " +"most guns that fire .30-06 rounds. However, it is designed for hunting, and " +"is less powerful than the military rounds, with nearly no armor penetration." msgstr "" #: lang/json/json_items.py -msgid "purse" +msgid ".30-06 AP" msgstr "" #: lang/json/json_items.py -msgid "A bit cumbersome to wear, but provides some storage." +msgid "" +"The .30-06 is a very powerful rifle round designed for long-range use. Its " +"stupendous accuracy and armor piercing capabilities make it one of the most " +"deadly rounds available, offset only by its drastic recoil and noise." msgstr "" #: lang/json/json_items.py -msgid "messenger bag" +msgid ".30-06 FMJ" msgstr "" #: lang/json/json_items.py -msgid "Light and easy to wear, but doesn't offer much storage." +msgid "" +"A brass-jacketed variant of the .30-06 round. Both penetration and stopping " +"power are between the military and other civilian versions of the round." msgstr "" #: lang/json/json_items.py -msgid "fanny pack" +msgid ".30-06 incendiary" msgstr "" #: lang/json/json_items.py -msgid "Provides a bit of extra storage without encumbering you at all." +msgid "" +"A variant of the powerful .30-06 sniper round, incendiary rounds are " +"designed to burn hotly upon impact, piercing armor and igniting flammable " +"substances." msgstr "" #: lang/json/json_items.py -msgid "tactical dump pouch" +msgid ".308 Winchester" msgstr "" #: lang/json/json_items.py msgid "" -"An expandable pouch secured with straps. Provides a bit of extra storage " -"without encumbering you at all." -msgstr "" - -#: lang/json/json_items.py -msgid "holster" +"The .308 Winchester is a rifle round, the commercial equivalent of the " +"military 7.62x51mm round. Its high accuracy and phenomenal damage have made " +"it the most popular hunting round in the world." msgstr "" #: lang/json/json_items.py -msgid "bootstrap" +msgid "7.62x51mm" msgstr "" #: lang/json/json_items.py -msgid "A small holster worn on the ankle." +msgid "" +"The 7.62x51mm largely replaced the .30-06 round as the standard military " +"rifle round. It is lighter, but offers similar velocities, resulting in " +"greater accuracy and reduced recoil." msgstr "" #: lang/json/json_items.py -msgid "quiver" +msgid "7.62x51mm incendiary" msgstr "" #: lang/json/json_items.py msgid "" -"A leather quiver worn on the back or at the hip that can hold 20 arrows. Its " -"small size won't encumber you." +"A variant of the powerful 7.62x51mm round, incendiary rounds are designed to " +"burn hotly upon impact, piercing armor and igniting flammable substances." msgstr "" #: lang/json/json_items.py -msgid "large quiver" +msgid "fusion pack" msgstr "" #: lang/json/json_items.py msgid "" -"A large leather quiver trimmed with metal, worn on the back, that can hold " -"80 arrows.\n" -"Historically used by horse archers, rather than foot archers, but neither of " -"THEM had to fight zombies." +"In the middle of the 21st Century, military powers began to look towards " +"energy based weapons. The result was the standard fusion pack, capable of " +"delivering bolts of superheated gas at near light speed with no recoil." msgstr "" #: lang/json/json_items.py -msgid "pouch" +msgid "40mm concussive" msgstr "" #: lang/json/json_items.py -msgid "" -"A makeshift bag, cobbled together from rags. Really gets in the way, but " -"provides a decent amount of storage." +msgid "A 40mm grenade with a concussive explosion load." msgstr "" #: lang/json/json_items.py -msgid "leather pouch" +msgid "40mm frag" msgstr "" #: lang/json/json_items.py msgid "" -"A bag stitched together from leather scraps. Doesn't hold an awful lot but " -"is easy to wear." +"A 40mm grenade with a small explosive load and a high number of damaging " +"fragments." msgstr "" #: lang/json/json_items.py -msgid "gold ring" +msgid "40mm incendiary" msgstr "" #: lang/json/json_items.py msgid "" -"A flashy gold ring. You can wear it if you like, but it won't provide any " -"effects." +"A 40mm grenade with a small napalm load, designed to create a burst of flame." msgstr "" #: lang/json/json_items.py -msgid "silver necklace" +msgid "40mm teargas" msgstr "" #: lang/json/json_items.py msgid "" -"A nice silver necklace. You can wear it if you like, but it won't provide " -"any effects." +"A 40mm grenade with a teargas load. It will burst in a cloud of highly " +"incapacitating gas." msgstr "" #: lang/json/json_items.py -msgid "small relic" +msgid "40mm smoke cover" msgstr "" #: lang/json/json_items.py msgid "" -"A small relic from a forgotten saint. As extraordinary as the world has " -"become it may have some power yet." +"A 40mm grenade with a smoke load. It will burst in a cloud of harmless gas, " +"and will also leave a streak of smoke cover in its wake." msgstr "" #: lang/json/json_items.py -msgid "radiation badge" +msgid "40mm flashbang" msgstr "" #: lang/json/json_items.py msgid "" -"A plastic badge with an embedded film strip. The film strip changes color " -"as it is exposed to radiation. Wear on your lapel so you can notice if it " -"changes." +"A 40mm grenade with a flashbang load. It will detonate with a blast of light " +"and sound, designed to blind, deafen, and disorient anyone nearby." msgstr "" #: lang/json/json_items.py -msgid "deputy badge" +msgid "40mm acid bomb" msgstr "" #: lang/json/json_items.py -msgid "A tarnished gold star gives an air of authority to the wearer." +msgid "A 40mm grenade with an acid bomb load." msgstr "" #: lang/json/json_items.py -msgid "american flag" +msgid "40mm buckshot" msgstr "" #: lang/json/json_items.py -msgid "A large American flag made to fly in even the worst conditions." +msgid "A 40mm grenade with a buckshot load." msgstr "" #: lang/json/json_items.py -msgid "blanket" +msgid "40mm flechette" msgstr "" #: lang/json/json_items.py -msgid "Hiding under here will not protect you from the monsters." +msgid "A 40mm grenade with an armor-piercing flechette load." msgstr "" #: lang/json/json_items.py -msgid "fur blanket" +msgid "66mm HEAT" msgstr "" #: lang/json/json_items.py -msgid "A heavy fur blanket that covers most of your body." +msgid "" +"A 60mm High Explosive Anti Tank round. It could blow through up to two feet " +"of concrete." msgstr "" #: lang/json/json_items.py -msgid "emergency blanket" +msgid "H&K 12mm" msgstr "" #: lang/json/json_items.py -msgid "A compact wool blanket that covers your most important body parts." +msgid "" +"The Heckler & Koch 12mm projectiles are used in H&K railguns. It's made of a " +"ferromagnetic metal, probably cobalt." msgstr "" #: lang/json/json_items.py -msgid "sleeping bag" +msgid "" +"A canister of hydrogen. With proper equipment, it could be heated to plasma." msgstr "" #: lang/json/json_items.py -msgid "A large sleeping bag that covers you head to toe." +msgid "charge" msgstr "" #: lang/json/json_items.py -msgid "fur sleeping bag" +msgid "A weak plasma charge." msgstr "" #: lang/json/json_items.py -msgid "A large sleeping bag lined with fur. Who needs a tent?" +msgid "shotgun hull" msgstr "" #: lang/json/json_items.py -msgid "housecoat" +msgid "An empty hull from a shotgun round." msgstr "" #: lang/json/json_items.py -msgid "Makes you wish you had running water to take a shower." +msgid "9mm casing" msgstr "" #: lang/json/json_items.py -msgid "snuggie" +msgid "An empty casing from a 9mm round." msgstr "" #: lang/json/json_items.py -msgid "Perfect for reading all those books you stole." +msgid ".22 casing" msgstr "" #: lang/json/json_items.py -msgid "cloak" +msgid "An empty casing from a .22 round." msgstr "" #: lang/json/json_items.py -msgid "A heavy cloak that is thrown over your body." +msgid ".38 casing" msgstr "" #: lang/json/json_items.py -msgid "fur cloak" +msgid "An empty casing from a .38 round." msgstr "" #: lang/json/json_items.py -msgid "A heavy fur cloak that is thrown over your body." +msgid ".40 casing" msgstr "" #: lang/json/json_items.py -msgid "leather cloak" +msgid "An empty casing from a .40 round." msgstr "" #: lang/json/json_items.py -msgid "" -"A heavy leather cloak that is thrown over your body. Provides decent " -"protection." +msgid ".44 casing" msgstr "" #: lang/json/json_items.py -msgid "jedi cloak" +msgid "An empty casing from a .44 round." msgstr "" #: lang/json/json_items.py -msgid "Stylish cloak." +msgid ".45 casing" msgstr "" #: lang/json/json_items.py -msgid "basic power armor" +msgid "An empty casing from a .45 round." msgstr "" #: lang/json/json_items.py -msgid "" -"The DoubleTech Power Armor, Mk. I: A heavy suit of basic power armor, " -"offering very good protection against attacks, but hard to move in." +msgid ".454 Casull casing" msgstr "" #: lang/json/json_items.py -msgid "basic power armor helmet" +msgid "An empty casing from a .454 Casull round." msgstr "" #: lang/json/json_items.py -msgid "" -"A basic helmet, designed for use with the DoubleTech Power Armor, Mk. I. " -"Offers excellent protection from both attacks and environmental hazards." +msgid ".500 S&W Magnum casing" msgstr "" #: lang/json/json_items.py -msgid "light power armor" +msgid "An empty casing from a .500 S&W Magnum round." msgstr "" #: lang/json/json_items.py -msgid "" -"A suit of DoubleTech Power Armor, Mk. II-L. This model offers several " -"improvements over the Mk. I, most notably the weight." +msgid "5.7x28mm casing" msgstr "" #: lang/json/json_items.py -msgid "light power armor helmet" +msgid "An empty casing from a 5.7x28mm round." msgstr "" #: lang/json/json_items.py -msgid "" -"A power armor helmet designed for use with the DoubleTech Power Armor, Mk. " -"II-L. This improved design is lighter and cooler than the Mk. I helmet." +msgid "4.6x30mm casing" msgstr "" #: lang/json/json_items.py -msgid "heavy power armor" +msgid "An empty casing from a 4.6x30mm round." msgstr "" #: lang/json/json_items.py -msgid "" -"A suit of DoubleTech Power Armor, Mk. II-H. This model offers several " -"improvements over the Mk. I, most notably the its environmental protection." +msgid "7.62x39mm casing" msgstr "" #: lang/json/json_items.py -msgid "heavy power armor helmet" +msgid "An empty casing from a 7.62x39mm round." msgstr "" #: lang/json/json_items.py -msgid "" -"A power armor helmet designed for use with the DoubleTech Power Armor, Mk. " -"II-H. This improved design is heavier than the Mk. I helmet, but cooler, and " -"offers better environmental protection." +msgid ".223 casing" msgstr "" #: lang/json/json_items.py -msgid "power armor hauling frame" +msgid "An empty casing from a .223 round." msgstr "" #: lang/json/json_items.py -msgid "A heavy duty hauling frame designed to interface with power armor." +msgid ".30-06 casing" msgstr "" #: lang/json/json_items.py -msgid "salvaged power armor" +msgid "An empty casing from a .30-06 round." msgstr "" #: lang/json/json_items.py -msgid "" -"The DoubleTech Power Armor, Mk. I: A heavy suit of basic power armor, " -"offering very good protection against attacks, but hard to move in. This " -"suit has had its servos and cooling system stripped out, meaning it no " -"longer requires power, but also encumbers you greatly and doesn't provide " -"internal thermal regulation." +msgid ".308 casing" msgstr "" #: lang/json/json_items.py -msgid "salvaged power armor helmet" +msgid "An empty casing from a .308 round." msgstr "" #: lang/json/json_items.py -msgid "" -"A basic helmet, designed for use with the DoubleTech Power Armor, Mk. I. " -"Offers excellent protection from both attacks and environmental hazards. " -"This suit has had its internal computer and cooling system stripped out, " -"meaning it no longer requires power, but it has no internal chronometer and " -"doesn't provide internal thermal regulation." +msgid "40mm canister" msgstr "" #: lang/json/json_items.py -msgid "arm splint" +msgid "A large canister from a spent 40mm grenade." msgstr "" #: lang/json/json_items.py -msgid "A tool to help set bones and hold them in place." +msgid "gunpowder" msgstr "" #: lang/json/json_items.py -msgid "leg splint" +msgid "Firearm quality gunpowder." msgstr "" #: lang/json/json_items.py -msgid "hard leg guards" +msgid "oxidizer powder" msgstr "" #: lang/json/json_items.py -msgid "A pair of polyurethane leg guards with neoprene backing." +msgid "Volatile powdered chemical oxidizer." msgstr "" #: lang/json/json_items.py -msgid "knee pads" +msgid "lye powder" msgstr "" #: lang/json/json_items.py -msgid "A pair of knee pads made of stout plastic and cloth." +msgid "Powdered caustic soda." msgstr "" #: lang/json/json_items.py -msgid "metal leg guards" +msgid "shotgun primer" msgstr "" #: lang/json/json_items.py -msgid "A pair of leg guards hammered out from metal. Very stylish." +msgid "Primer from a shotgun round." msgstr "" #: lang/json/json_items.py -msgid "wrist watch" +msgid "small pistol primer" msgstr "" #: lang/json/json_items.py -msgid "A simple wristwatch. Tells the time and has an alarm clock feature." +msgid "Primer from a small caliber pistol round." msgstr "" #: lang/json/json_items.py -msgid "toque" +msgid "large pistol primer" msgstr "" #: lang/json/json_items.py -msgid "" -"A traditional chefs hat, standing tall and proud against the vulgarities of " -"the world." +msgid "Primer from a large caliber pistol round." msgstr "" #: lang/json/json_items.py -msgid "chefs jacket" +msgid "small rifle primer" msgstr "" #: lang/json/json_items.py -msgid "" -"This double-breasted uniform is unusually thick to protect against the heat " -"of the kitchen." +msgid "Primer from a small caliber rifle round." msgstr "" #: lang/json/json_items.py -msgid "checkered pants" +msgid "large rifle primer" msgstr "" #: lang/json/json_items.py -msgid "In a pinch, these pants can be used for an impromptu game of checkers." +msgid "Primer from a large caliber rifle round." msgstr "" #: lang/json/json_items.py -msgid "scrap suit" +msgid "lead" msgstr "" #: lang/json/json_items.py msgid "" -"A suit of armor forged from scraps of metal; provides decent protection, but " -"the loose collection of plates jangles and clangs as you walk, attracting " -"the attention of all nearby." +"Assorted bullet materials, useful in constructing a variety of ammunition." msgstr "" #: lang/json/json_items.py -msgid "bookplate" +msgid "gold" msgstr "" #: lang/json/json_items.py msgid "" -"A crude form of armor made from stacked paper and rolls of duct tape, this " -"breastplate offers a surprising amount of protection." +"Small gold bits. Before the cataclysm these would have been worth quite a " +"bit. Still usable in making ammunition." msgstr "" #: lang/json/json_items.py -msgid "light survivor suit" +msgid "incendiary" msgstr "" #: lang/json/json_items.py msgid "" -"A lightweight home built combination armor made from a cut down bulletproof " -"vest and a reinforced jumpsuit made out of fabric. Protects from the " -"elements as well as from harm." +"Material from an incendiary round, useful in constructing incendiary " +"ammunition." msgstr "" #: lang/json/json_items.py -msgid "survivor suit" +msgid "" +"Gasoline is a highly flammable liquid. When under pressure, it has the " +"potential for violent explosion." msgstr "" #: lang/json/json_items.py -msgid "" -"A home built combination armor made from a bulletproof vest and a reinforced " -"jumpsuit made out of leather. Protects from the elements as well as from " -"harm." +msgid "medical tape" msgstr "" #: lang/json/json_items.py -msgid "armored boots" +msgid "A roll of medical tape, similar to duct tape." msgstr "" #: lang/json/json_items.py -msgid "An extremely heavy set of armor plated boots." +msgid "shotgun beanbag" msgstr "" #: lang/json/json_items.py -msgid "armored gauntlets" +msgid "A beanbag round for shotguns, not deadly but designed to disable." msgstr "" #: lang/json/json_items.py -msgid "An extremely heavy set of armor plated gloves." +msgid "40mm beanbag" msgstr "" #: lang/json/json_items.py -msgid "heavy survivor suit" +msgid "A 40mm beanbag that deals massive non lethal force." msgstr "" #: lang/json/json_items.py msgid "" -"A heavy home built combination armor made from a reinforced bulletproof vest " -"and a metal armor plated jumpsuit made out of leather. Protects from the " -"elements as well as from harm." +"8x40mm caseless rounds. Proprietary ammunition for Rivtech firearms. Being " +"caseless rounds, these cannot be disassembled or reloaded." msgstr "" #: lang/json/json_items.py -msgid "winter survivor suit" +msgid "handmade 8x40mm caseless" msgstr "" #: lang/json/json_items.py msgid "" -"A warm and heavy, home built combination armor made from a reinforced " -"bulletproof vest and an insulated jumpsuit made out of leather. Protects " -"from the elements as well as from harm." +"Handcrafted, bootleg duplicates of Rivtech 8x40mm caseless rounds. Being " +"caseless rounds, these cannot be disassembled or reloaded." msgstr "" #: lang/json/json_items.py -msgid "survivor boots" +msgid "handmade 8x40mm caseless JSP" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of customized, heavily armored boots, modified to provide maximum " -"protection from harm and the elements, even when knee-deep in the dead." +"Handcrafted, bootleg, jacketed soft point duplicates of Rivtech 8x40mm " +"caseless rounds. Being caseless rounds, these cannot be disassembled or " +"reloaded." msgstr "" #: lang/json/json_items.py -msgid "survivor gloves" +msgid "8x40mm FMJ caseless" msgstr "" #: lang/json/json_items.py msgid "" -"A pair of heavily customized, armored gloves, modified to be easy of wear " -"while providing maximum protection under extreme conditions." +"8x40mm caseless rounds, full metal jacket. Military grade ammunition for " +"Rivtech firearms. Being caseless rounds, these cannot be disassembled or " +"reloaded." msgstr "" #: lang/json/json_items.py -msgid "survivor helmet" +msgid "8x40mm JHP caseless" msgstr "" #: lang/json/json_items.py msgid "" -"A customized, heavily armored helmet, modified to provide maximum comfort " -"and protection from harm." +"8x40mm caseless rounds, jacketed hollowpoint. Military grade ammunition for " +"Rivtech firearms. Being caseless rounds, these cannot be disassembled or " +"reloaded." msgstr "" #: lang/json/json_items.py -msgid "SWAT armor" +msgid "8x40mm incendiary caseless" msgstr "" #: lang/json/json_items.py msgid "" -"A suit of black bulletproof armor with lots of pockets. The word SWAT is " -"emblazoned across the back." +"8x40mm caseless rounds, incendiary type. Military grade ammunition for " +"Rivtech firearms. Being caseless rounds, these cannot be disassembled or " +"reloaded." msgstr "" #: lang/json/json_items.py -msgid "tactical helmet" +msgid "8x40mm HVP" msgstr "" #: lang/json/json_items.py msgid "" -"A lightweight black helmet that provides excellent protection from all sorts " -"of damage." +"8x40mm caseless rounds, saboted high-velocity penetrator type. Advanced " +"military grade, armor-piercing ammunition that fires a single depleted " +"uranium flechette. Being caseless rounds, these cannot be disassembled or " +"reloaded." msgstr "" #: lang/json/json_items.py -msgid "tactical full helmet" +msgid "FFV441B HE rocket" msgstr "" #: lang/json/json_items.py msgid "" -"An all-encompassing black helmet that covers your entire face and neck, " -"providing excellent protection from all sorts of damage." +"A 84x246mm High Explosive anti-personnel round for the Carl Gustav M3 " +"recoilless rifle. Designed to be highly effective against personnel." msgstr "" #: lang/json/json_items.py -msgid "plate armor" +msgid "FFV502 HEDP rocket" msgstr "" #: lang/json/json_items.py -msgid "A suit of gothic plate armor." +msgid "" +"A 84x246mm High Explosive Dual Purpose anti-materiel round for the Carl " +"Gustav M3 recoilless rifle. Designed to be highly effective against vehicles " +"and structures." msgstr "" #: lang/json/json_items.py -msgid "barbute helm" +msgid "FFV469 smoke rocket" msgstr "" #: lang/json/json_items.py msgid "" -"A medieval helmet that provides excellent protection for the head, with a Y " -"shaped opening for the face." +"A 84x246mm smoke marker round for the Carl Gustav M3 recoilless rifle. " +"Commonly used for signalling, target designation, and for screening troop " +"movements." msgstr "" #: lang/json/json_items.py -msgid "leather armor helmet" +msgid "PG-7VL rocket" msgstr "" #: lang/json/json_items.py -msgid "A thick leather helmet that provides excellent protection for the head." +msgid "93mm single-stage high-explosive ammunition for the RPG-7." msgstr "" #: lang/json/json_items.py -msgid "Ō-yoroi" +msgid "M235 TPA rocket" msgstr "" #: lang/json/json_items.py -msgid "An ornamental suit of Japanese samurai armor." +msgid "" +"66mm incendiary rockets used in the M202 FLASH rocket launcher. Their " +"warheads are filled with thickened pyrophoric agent which burns at 2200 " +"degrees fahrenheit." msgstr "" #: lang/json/json_items.py -msgid "kabuto" +msgid "placeholder ammunition" +msgstr "" + +#: lang/json/json_items.py +msgid "RA110 5x50mm flechette" msgstr "" #: lang/json/json_items.py msgid "" -"A medieval Japanese helmet with a scowling facemask that provides excellent " -"protection to the entire head and face." +"Designed to defeat modern body armor, the Rivtech 5x50mm flechette round " +"features a biodegradable sabot and a single, fin-stabilized penetrator." msgstr "" #: lang/json/json_items.py -msgid "leather apron" +msgid "5x50mm hull" msgstr "" #: lang/json/json_items.py -msgid "" -"An apron made of thick leather. Cumbersome, but offers excellent protection " -"from cuts." +msgid "An empty plastic hull from a 5x50mm flechette round." msgstr "" #: lang/json/json_items.py -msgid "ballistic mask" +msgid "" +"Charcoal is a flammable carbon based material obtained by removing water and " +"other volatile constituents from animal and vegetation substances. It is " +"produced by slowly heating wood or other substances in the absence of oxygen." msgstr "" #: lang/json/json_items.py msgid "" -"A protective reinforced kevlar mask that covers the face. Provides excellent " -"protection from ballistic threats." +"The .50 BMG is a very powerful rifle round designed for long-range use. Its " +"stupendous accuracy and armor piercing capabilities make it one of the most " +"deadly rounds available, offset only by its drastic recoil and noise." msgstr "" #: lang/json/json_items.py -msgid "hockey mask" +msgid ".50 BMG SS" msgstr "" #: lang/json/json_items.py msgid "" -"A protective face mask made of thick plastic. Commonly worn by hockey " -"goalies." +"A solid steel copper jacketed variant of the .50 BMG round. Penetration is " +"increased, but damage is reduced." msgstr "" #: lang/json/json_items.py -msgid "drop leg pouches" +msgid ".50 BMG incendiary" msgstr "" #: lang/json/json_items.py msgid "" -"A set of pouches that can be worn on the thighs using buckled straps. This " -"variety is favored by the military." +"A variant of the powerful .50 BMG sniper round, incendiary rounds are " +"designed to burn hotly upon impact, piercing armor and igniting flammable " +"substances." msgstr "" #: lang/json/json_items.py -msgid "leather cat ears" +msgid "" +"A heavy plastic cartridge made for use in flare guns. It appears to be a " +"modified 12 gauge shotgun shell." +msgstr "" + +#: lang/json/json_items.py +msgid "rebar rail" msgstr "" #: lang/json/json_items.py msgid "" -"A shiny pair of black cat ears on a headband. It does nothing, but there's " -"no reason not to look good even if no one's looking." +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." msgstr "" #: lang/json/json_items.py -msgid "fuzzy cat ears" +msgid "steel rail" msgstr "" #: lang/json/json_items.py msgid "" -"A fuzzy pair of brownish cat ears on a headband. It does nothing, but " -"there's no reason not to look good even if no one's looking." +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." msgstr "" #: lang/json/json_items.py -msgid "leather cat tail" +msgid ".50 BMG casing" msgstr "" #: lang/json/json_items.py msgid "" -"A glossy black leather tail weighted down with tiny beads of plastic. Sways " -"behind you when you walk." +"An empty casing from a .50 BMG round. These are rare, so you might want to " +"hold onto these." msgstr "" #: lang/json/json_items.py -msgid "fuzzy cat tail" +msgid "withered plant" msgstr "" #: lang/json/json_items.py -msgid "" -"A fuzzy tawny tail weighted down with tiny beads of plastic. Sways behind " -"you when you walk." +msgid "A dead plant. Good for starting fires." msgstr "" #: lang/json/json_items.py -msgid "fur kitty collar" +msgid "fur pelt" msgstr "" #: lang/json/json_items.py -msgid "" -"A decorative 'collar' made out of fur. Complete with a little bell hanging " -"from the front. Don't worry, it's silent." +msgid "A small bolt of fur from an animal. Can be made into warm clothing." msgstr "" #: lang/json/json_items.py -msgid "pot helmet" +msgid "leather patch" msgstr "" #: lang/json/json_items.py -msgid "" -"A helmet made from a soup pot. It's not very good protection, but it's " -"better than nothing." +msgid "A smallish patch of leather, could be used to make tough clothing." msgstr "" #: lang/json/json_items.py -msgid "leather collar" +msgid "superglue" msgstr "" #: lang/json/json_items.py -msgid "" -"A black leather 'collar' with a bell dangling from the front. Don't worry, " -"the bell is silent." +msgid "A tube of strong glue. Used in many crafting recipes." msgstr "" #: lang/json/json_items.py -msgid "Guitar" +msgid "science ID card" msgstr "" #: lang/json/json_items.py msgid "" -"An acoustic six-string guitar. A bit out of tune, but in good shape " -"otherwise." +"This ID card once belonged to a scientist of some sort. It has a magnetic " +"stripe on the back; perhaps it can be used on a control panel." msgstr "" #: lang/json/json_items.py -msgid "Bongo" +msgid "military ID card" msgstr "" #: lang/json/json_items.py msgid "" -"A handheld drum. Suitable for making loud noises into all hours of the night." +"This ID card once belonged to a military officer with high-level clearance. " +"It has a magnetic stripe on the back; perhaps it can be used on a control " +"panel." msgstr "" #: lang/json/json_items.py -msgid "plastic bag" +msgid "electrohack" msgstr "" #: lang/json/json_items.py -msgid "A small, open plastic bag. Essentially trash." +msgid "" +"This device has many ports attached, allowing to to connect to almost any " +"control panel or other electronic machine (but not computers). With a little " +"skill, it can be used to crack passwords and more." msgstr "" #: lang/json/json_items.py -msgid "plastic bottle" +msgid "string - 6 in" msgstr "" #: lang/json/json_items.py -msgid "A resealable plastic bottle, holds 500 ml of liquid." +msgid "A small piece of cotton string." msgstr "" #: lang/json/json_items.py -msgid "glass bottle" +msgid "string - 3 ft" msgstr "" #: lang/json/json_items.py -msgid "A resealable glass bottle, holds 750 ml of liquid." +msgid "" +"A long piece of cotton string. Use scissors on it to cut it into smaller " +"pieces." msgstr "" #: lang/json/json_items.py -msgid "aluminum can" +msgid "rope - 30 ft" msgstr "" #: lang/json/json_items.py -msgid "An aluminum can, like what soda comes in." +msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" #: lang/json/json_items.py -msgid "tin can" +msgid "processor board" msgstr "" #: lang/json/json_items.py -msgid "A tin can, like what beans come in." +msgid "A central processor unit, useful in advanced electronics crafting." msgstr "" #: lang/json/json_items.py -msgid "sm. cardboard box" +msgid "RAM" msgstr "" #: lang/json/json_items.py -msgid "A small cardboard box. No bigger than a foot in dimension." +msgid "A stick of memory. Useful in advanced electronics crafting." msgstr "" #: lang/json/json_items.py -msgid "plastic canteen" +msgid "power converter" msgstr "" #: lang/json/json_items.py -msgid "" -"A large military-style water canteen, with a 1.5 liter capacity and strap." +msgid "A power supply unit. Useful in lots of electronics recipes." msgstr "" #: lang/json/json_items.py -msgid "plastic jerrycan" +msgid "amplifier circuit" msgstr "" #: lang/json/json_items.py msgid "" -"A bulky plastic jerrycan, meant to carry fuel, but can carry other liquids\n" -"in a pinch. It has a capacity of 10 liters." +"A circuit designed to amplify the strength of a signal. Useful in lots of " +"electronics recipes." msgstr "" #: lang/json/json_items.py -msgid "gallon jug" +msgid "transponder circuit" msgstr "" #: lang/json/json_items.py -msgid "A standard plastic jug used for household cleaning chemicals." +msgid "" +"A circuit designed to repeat a signal. Useful for crafting communications " +"equipment." msgstr "" #: lang/json/json_items.py -msgid "glass flask" +msgid "signal receiver" msgstr "" #: lang/json/json_items.py -msgid "A 250 ml laboratory conical flask, with a rubber bung." +msgid "" +"A module designed to receive many forms of signals. Useful for crafting " +"communications equipment." msgstr "" #: lang/json/json_items.py -msgid "waterskin" +msgid "small LCD screen" msgstr "" #: lang/json/json_items.py -msgid "A watertight leather bag, can hold 1.5 liters of water." +msgid "" +"A small backlit screen, used for displaying images. Useful in some " +"electronics recipes." msgstr "" #: lang/json/json_items.py -msgid "steel jerrycan" +msgid "high-quality lens" msgstr "" #: lang/json/json_items.py -msgid "" -"A steel jerrycan, meant to carry fuel, but can carry other liquids\n" -"in a pinch. It has a capacity of 25 liters." +msgid "A high-quality lens, useful for focusing or diffusing light." msgstr "" #: lang/json/json_items.py -msgid "aluminum keg" +msgid "burnt out bionic" msgstr "" #: lang/json/json_items.py msgid "" -"A reusable aluminum keg, used for shipping beer.\n" -"It has a capacity of 50 liters." +"Once a valuable bionic implant, it's not held up well under repeated use. " +"This object has been destroyed by excessive electric current and is now " +"useless." msgstr "" #: lang/json/json_items.py -msgid "glass jar" +msgid "antenna" msgstr "" #: lang/json/json_items.py -msgid "A half-litre glass jar with a metal screw top lid, used for canning." +msgid "A simple thin aluminum shaft. Useful in lots of electronics recipes." msgstr "" #: lang/json/json_items.py -msgid "3l glass jar" +msgid "circuit board" msgstr "" #: lang/json/json_items.py -msgid "A three-litre glass jar with a metal screw top lid, used for canning." +msgid "" +"A printed card that supports and electrically connects electronic components " +"on a non-conductive substrate." msgstr "" #: lang/json/json_items.py -msgid "hip flask" +msgid "electronic scrap" msgstr "" #: lang/json/json_items.py msgid "" -"A 250 ml metal flask with a hinged screw-on lid, commonly used to discreetly " -"transport alcohol." +"A random collection of resistors, capacitors, and diodes which have been " +"stripped from printed circuits." msgstr "" #: lang/json/json_items.py -msgid "plastic bowl" +msgid "chunk of steel" msgstr "" #: lang/json/json_items.py msgid "" -"A plastic bowl. Can be used as a container or as a tool. Holds 250 ml of " -"liquid." -msgstr "" - -#: lang/json/json_items.py -msgid "paper wrapper" +"A misshapen chunk of steel. Makes a decent weapon in a pinch, and is also " +"useful for some crafting recipes." msgstr "" #: lang/json/json_items.py -msgid "Just a piece of butcher's paper. Good for starting fires." +msgid "lump of steel" msgstr "" #: lang/json/json_items.py -msgid "nail gun" +msgid "A misshapen heavy piece of steel. Useful for some crafting recipes." msgstr "" #: lang/json/json_items.py msgid "" -"A tool used to drive nails into wood or other material. It could also be " -"used as a ad-hoc weapon." +"An assortment of small bits of metal and scrap useful in all kinds of " +"crafting" msgstr "" #: lang/json/json_items.py -msgid "nail rifle" +msgid "sheet of glass" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a nailgun that has been jury-rigged to be a more effective weapon " -"with the addition of a short barrel, a stock, and a hand guard." +msgid "A large sheet of glass. Easily shattered. Useful for re-paning windows." msgstr "" #: lang/json/json_items.py -msgid "BB gun" +msgid "sheet of reinforced glass" msgstr "" #: lang/json/json_items.py -msgid "" -"Popular among children. It's fairly accurate, but BBs deal nearly no damage." +msgid "A large sheet of glass strengthened with steel wiring." msgstr "" #: lang/json/json_items.py -msgid "sling" +msgid "pane of reinforced glass" msgstr "" #: lang/json/json_items.py -msgid "" -"A leather sling, it is easy to use and accurate, but pebbles do little " -"damage." +msgid "A small pane of glass strengthened with steel wiring." msgstr "" -#: lang/json/json_items.py -msgid "slingshot" +#: lang/json/json_items.py lang/json/json_terrain.py +msgid "manhole cover" msgstr "" #: lang/json/json_items.py msgid "" -"A wooden slingshot, it is easy to use and accurate, but pebbles do little " -"damage. Pebbles are used as ammunition." +"A heavy iron disc that typically covers a ladder into the sewers. Lifting it " +"from the manhole is impossible without a crowbar." msgstr "" #: lang/json/json_items.py -msgid "blowgun" +msgid "heavy stick" msgstr "" #: lang/json/json_items.py msgid "" -"A wooden blowgun, it isn't hard to use, and is very accurate. Darts are used " -"as ammunition." +"A sturdy, heavy stick. Makes a decent melee weapon, and can be cut into two " +"by fours for crafting." msgstr "" #: lang/json/json_items.py -msgid "pipe rifle: .22" +msgid "sharpened rebar" msgstr "" #: lang/json/json_items.py msgid "" -"A home-made rifle. It is simply a pipe attached to a stock, with a hammer to " -"strike the single round it holds." +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" msgstr "" #: lang/json/json_items.py -msgid "pipe rifle: 9mm" +msgid "cudgel" msgstr "" #: lang/json/json_items.py -msgid "pipe SMG: 9mm" +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." msgstr "" #: lang/json/json_items.py -msgid "" -"A home-made machine pistol. It features a rudimentary blowback system, which " -"allows for small bursts." +msgid "quarterstaff" msgstr "" #: lang/json/json_items.py -msgid "pipe SMG: .45" +msgid "" +"A smooth and sturdy staff with a leather-wrapped grip. Light and well-" +"balanced, it is surprisingly easy to handle." msgstr "" #: lang/json/json_items.py -msgid "SIG Mosquito" +msgid "ironshod quarterstaff" msgstr "" #: lang/json/json_items.py msgid "" -"A popular, very small .22 pistol. \"Ergonomically designed to give the best " -"shooting experience.\" --SIG Sauer official website" +"A smooth and sturdy staff with a leather-wrapped grip, which has been " +"reinforced with metal bands and caps. Durable and well-balanced, it is " +"surprisingly easy to handle." msgstr "" #: lang/json/json_items.py -msgid "S&W 22A" +msgid "hatchet" msgstr "" #: lang/json/json_items.py msgid "" -"A popular .22 pistol. \"Ideal for competitive target shooting or " -"recreational shooting.\" --Smith & Wesson official website" +"A one-handed hatchet. Makes a great melee weapon, and is useful both for " +"cutting wood, and for use as a hammer." msgstr "" #: lang/json/json_items.py -msgid "Glock 19" +msgid "pot" msgstr "" #: lang/json/json_items.py -msgid "" -"Possibly the most popular pistol in existence. The Glock 19 is often derided " -"for its plastic construction, but it is easy to shoot." +msgid "Useful for boiling water when cooking spaghetti and more." msgstr "" #: lang/json/json_items.py -msgid "USP 9mm" +msgid "frying pan" msgstr "" #: lang/json/json_items.py -msgid "" -"A popular 9mm pistol, widely used among law enforcement. Extensively tested " -"for durability, it has been found to stay accurate even after subjected to " -"extreme abuse." +msgid "A cast-iron pan. Makes a decent melee weapon, and is used for cooking." msgstr "" #: lang/json/json_items.py -msgid "S&W 619" +msgid "teapot" msgstr "" #: lang/json/json_items.py -msgid "" -"A seven-round .38 revolver sold by Smith & Wesson. It features a fixed rear " -"sight and a reinforced frame." +msgid "A small metal teapot. Teatime wouldn't be complete without one." msgstr "" #: lang/json/json_items.py -msgid "Taurus Pro .38" +msgid "butter knife" msgstr "" #: lang/json/json_items.py -msgid "" -"A popular .38 pistol. Designed with numerous safety features and built from " -"high-quality, durable materials." +msgid "A dull knife, absolutely worthless in combat." msgstr "" #: lang/json/json_items.py -msgid "SIG Pro .40" +msgid "chunk of chitin" msgstr "" #: lang/json/json_items.py -msgid "" -"Originally marketed as a lightweight and compact alternative to older SIG " -"handguns, the Pro .40 is popular among European police forces." +msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "" #: lang/json/json_items.py -msgid "S&W 610" +msgid "biollante bud" msgstr "" #: lang/json/json_items.py msgid "" -"The Smith and Wesson 610 is a classic six-shooter revolver chambered for " -"10mm rounds, or for S&W's own .40 round." +"An unopened biollante flower, brilliant purple in color. It may still have " +"its sap-producing organ intact." msgstr "" #: lang/json/json_items.py -msgid "S&W 500" +msgid "empty canister" msgstr "" #: lang/json/json_items.py msgid "" -"The Smith and Wesson 500 is a five-shooter revolver, it fires the most " -"powerful handgun cartridge the .500 S&W Magnum, it's one of world's best " -"revolvers." +"An empty canister, which may have once held tear gas or other substances." msgstr "" #: lang/json/json_items.py -msgid "Taurus Raging Bull" +msgid "gold bar" msgstr "" #: lang/json/json_items.py msgid "" -"The Taurus Raging Bull is a five-shooter revolver, it fires the very " -"powerful handgun cartridge the .454 Casull round, it has a distinct red " -"strip along it's rubber grip." +"A large bar of gold. Before the apocalypse, this would've been worth a small " +"fortune; now its value is greatly diminished." msgstr "" #: lang/json/json_items.py -msgid "Ruger Redhawk" +msgid "coal pallet" msgstr "" #: lang/json/json_items.py -msgid "" -"One of the most powerful handguns in the world when it was released in 1979, " -"the Redhawk offers very sturdy construction, with an appearance that is " -"reminiscent of \"Wild West\" revolvers." +msgid "A large block of semi-processed coal." msgstr "" #: lang/json/json_items.py -msgid "Desert Eagle .44" +msgid "petrified eye" msgstr "" #: lang/json/json_items.py msgid "" -"One of the most recognizable handguns due to its popularity in movies, the " -"\"Deagle\" is better known for its menacing appearance than its performance. " -"It's highly inaccurate, but its heavy weight reduces recoil." +"A fist-sized eyeball with a cross-shaped pupil. It seems to be made of " +"stone, but doesn't look like it was carved." msgstr "" #: lang/json/json_items.py -msgid "USP .45" +msgid "spiral stone" msgstr "" #: lang/json/json_items.py msgid "" -"A popular .45 pistol, widely used among law enforcement. Extensively tested " -"for durability, it has been found to stay accurate even after subjected to " -"extreme abuse." +"A rock the size of your fist. It is covered with intricate spirals; it is " +"impossible to tell whether they are carved, naturally formed, or some kind " +"of fossil." msgstr "" #: lang/json/json_items.py -msgid "M1911" +msgid "binoculars" msgstr "" #: lang/json/json_items.py msgid "" -"The M1911 was the standard-issue sidearm from the US Military for most of " -"the 20th Century. It remains one of the most popular .45 pistols today." +"A tool useful for seeing long distances. Simply carrying this item in your " +"inventory will double the distance that is mapped around you during your " +"travels." msgstr "" #: lang/json/json_items.py -msgid "FN Five-Seven" +msgid "USB drive" msgstr "" #: lang/json/json_items.py -msgid "" -"Designed to work with FN's proprietary 5.7x28mm round, the Five-Seven is a " -"lightweight pistol with a very high capacity, best used against armored " -"opponents." +msgid "A USB thumb drive. Useful for holding software." msgstr "" #: lang/json/json_items.py -msgid "H&K UCP" +msgid "pool ball" msgstr "" #: lang/json/json_items.py -msgid "" -"Designed to work with H&K's proprietary 4.6x30mm round, the UCP is a small " -"pistol with a very high capacity, best used against armored opponents." +msgid "A colorful, hard ball. Essentially a rock." msgstr "" #: lang/json/json_items.py -msgid "Tokarev TT-30" +msgid "candlestick" msgstr "" #: lang/json/json_items.py -msgid "" -"The Norinco manufactured Tokarev TT-30 is the standard sidearm of the " -"Chinese military, it does not see extensive use outside of China." +msgid "A gold candlestick." msgstr "" -#: lang/json/json_items.py -msgid "sawn-off shotgun" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +#: lang/json/json_vehicle_parts.py +msgid "blade" msgstr "" #: lang/json/json_items.py msgid "" -"The barrels of shotguns are often sawed in half to make it more maneuverable " -"and concealable. This has the added effect of reducing accuracy greatly." +"A large, relatively sharp blade. Could be used to make bladed weaponry, or " +"attached to a car." msgstr "" #: lang/json/json_items.py -msgid "sawn-off Saiga 12" +msgid "wire" msgstr "" #: lang/json/json_items.py msgid "" -"The Saiga-12 shotgun is designed on the same Kalashnikov pattern as the AK47 " -"rifle. It reloads with a magazine, rather than one shell at a time like most " -"shotguns. This one has had the barrel cut short, vastly reducing accuracy " -"but making it more portable" +"A length of thin, relatively stiff, steel wire. Like the sort you find in " +"wire fences." msgstr "" #: lang/json/json_items.py -msgid "single barrel shotgun" +msgid "barbed wire" msgstr "" #: lang/json/json_items.py -msgid "" -"An old shotgun, possibly antique. It is little more than a barrel, a wood " -"stock, and a hammer to strike the cartridge. Its simple design keeps it both " -"light and accurate." +msgid "A length of stiff wire, covered in sharp barbs." msgstr "" #: lang/json/json_items.py -msgid "double barrel shotgun" +msgid "rebar" msgstr "" #: lang/json/json_items.py msgid "" -"An old shotgun, possibly antique. It is little more than a pair of barrels, " -"a wood stock, and a hammer to strike the cartridges." +"A length of rebar, makes a nice melee weapon, and could be handy in " +"constructing tougher walls and such." msgstr "" #: lang/json/json_items.py -msgid "Remington 870" +msgid "log" msgstr "" #: lang/json/json_items.py msgid "" -"One of the most popular shotguns on the market, the Remington 870 is used by " -"hunters and law enforcement agencies alike thanks to its high accuracy and " -"muzzle velocity." +"A large log, cut from a tree. (a)ctivate a wood axe or wood saw to cut it " +"into planks" msgstr "" #: lang/json/json_items.py -msgid "Mossberg 500" +msgid "splintered wood" msgstr "" #: lang/json/json_items.py -msgid "" -"The Mossberg 500 is a popular series of pump-action shotguns, often acquired " -"for military use. It is noted for its high durability and low recoil." +msgid "A splintered piece of wood, useless as anything but kindling" msgstr "" #: lang/json/json_items.py -msgid "Saiga-12" +msgid "skewer" msgstr "" #: lang/json/json_items.py -msgid "" -"The Saiga-12 shotgun is designed on the same Kalashnikov pattern as the AK47 " -"rifle. It reloads with a magazine, rather than one shell at a time like most " -"shotguns." +msgid "A thin wooden skewer. Squirrel on a stick, anyone?" msgstr "" #: lang/json/json_items.py -msgid "American-180" +msgid "burnt out torch" msgstr "" #: lang/json/json_items.py msgid "" -"The American-180 is a submachine gun developed in the 1960's that fires .22 " -"LR, unusual for an SMG. Though the round is low-powered, the high rate of " -"fire and large magazine makes the 180 a formidable weapon." +"A torch that has consumed all its fuel; it can be recrafted into another " +"torch" msgstr "" #: lang/json/json_items.py -msgid "Uzi 9mm" +msgid "spring" msgstr "" #: lang/json/json_items.py msgid "" -"The Uzi 9mm has enjoyed immense popularity, selling more units than any " -"other submachine gun. It is widely used as a personal defense weapon, or as " -"a primary weapon by elite frontline forces." +"A large, heavy-duty spring. Expands with significant force when compressed." msgstr "" #: lang/json/json_items.py -msgid "TEC-9" +msgid "lawnmower" msgstr "" #: lang/json/json_items.py msgid "" -"The TEC-9 is a machine pistol made of cheap polymers and machine stamped " -"parts. Its rise in popularity among criminals is largely due to its " -"intimidating looks and low price." +"A motorized pushmower that seems to be broken. You could take it apart if " +"you had a wrench." msgstr "" #: lang/json/json_items.py -msgid "Calico M960" +msgid "sheet" msgstr "" #: lang/json/json_items.py msgid "" -"The Calico M960 is an automatic carbine with a unique circular magazine that " -"allows for high capacities and reduced recoil." +"A large fabric sheet, could be used as a curtain or bedsheets; or cut up for " +"a bunch of rags." msgstr "" #: lang/json/json_items.py -msgid "H&K MP5" +msgid "damaged tent" msgstr "" #: lang/json/json_items.py msgid "" -"The Heckler & Koch MP5 is one of the most widely-used submachine guns in the " -"world, and has been adopted by special police forces and militaries alike. " -"Its high degree of accuracy and low recoil are universally praised." +"A small tent, just big enough to fit a person comfortably. This tent is " +"broken and cannot be deployed" msgstr "" #: lang/json/json_items.py -msgid "MAC-10" +msgid "heating element" msgstr "" #: lang/json/json_items.py -msgid "" -"The MAC-10 is a popular machine pistol originally designed for military use. " -"For many years they were the most inexpensive automatic weapon in the US, " -"and enjoyed great popularity among criminals less concerned with quality " -"firearms." +msgid "A heating element, like the ones used in hotplates or kettles." msgstr "" #: lang/json/json_items.py -msgid "H&K UMP45" +msgid "television" msgstr "" #: lang/json/json_items.py -msgid "" -"Developed as a successor to the MP5 submachine gun, the UMP45 retains the " -"earlier model's supreme accuracy and low recoil, but in the higher .45 " -"caliber." +msgid "A large cathode ray tube television, full of delicious electronics." msgstr "" #: lang/json/json_items.py -msgid "TDI Vector" +msgid "pilot light" msgstr "" #: lang/json/json_items.py msgid "" -"The TDI Vector is a submachine gun with a unique, in-line design that makes " -"recoil very managable, even in the powerful .45 caliber." +"A pilot light from a gas-burning device, this particular one is a simple " +"piezo electric igniter." msgstr "" #: lang/json/json_items.py -msgid "FN P90" +msgid "toaster" msgstr "" #: lang/json/json_items.py -msgid "" -"The first in a new genre of guns, termed \"personal defense weapons.\" FN " -"designed the P90 to use their proprietary 5.7x28mm ammunition. It is made " -"for firing bursts manageably." +msgid "A small two slice toaster, not much use as anything but spare parts" msgstr "" #: lang/json/json_items.py -msgid "H&K MP7" +msgid "microwave" msgstr "" #: lang/json/json_items.py msgid "" -"Designed by Heckler & Koch as a competitor to the FN P90, as well as a " -"successor to the extremely popular H&K MP5. Using H&K's proprietary 4.6x30mm " -"ammunition, it is designed for burst fire." +"A home microwave, has probably seen its share of baked beans. Good for scrap " +"parts." msgstr "" #: lang/json/json_items.py -msgid "PPSh-41" +msgid "laptop computer" msgstr "" #: lang/json/json_items.py -msgid "" -"The Soviet made PPSh-41, chambered in 7.62 Tokarev provides a relatively " -"large ammunition capacity, coupled with low recoil and decent accuracy." +msgid "A broken laptop, basically a paperweight now" msgstr "" #: lang/json/json_items.py -msgid "Marlin 39A" +msgid "desk fan" msgstr "" #: lang/json/json_items.py -msgid "" -"The oldest and longest-produced shoulder firearm in the world. Though it " -"fires the weak .22 round, it is highly accurate and damaging, and has " -"essentially no recoil." +msgid "A small fan, used to propel air around a room." msgstr "" #: lang/json/json_items.py -msgid "Ruger 10/22" +msgid "ceramic plate" msgstr "" #: lang/json/json_items.py -msgid "" -"A popular and highly accurate .22 rifle. At the time of its introduction in " -"1964, it was one of the first modern .22 rifles designed for quality, and " -"not as a gun for children." +msgid "A ceramic dinner plate, you could probably play frisbee with it" msgstr "" #: lang/json/json_items.py -msgid "Cx4 Storm" +msgid "ceramic bowl" msgstr "" #: lang/json/json_items.py -msgid "" -"A small pistol caliber carbine designed for police use and civilian self-" -"defense, the CX4 Storm uses magazines that are interchangeable with " -"handguns of the same series." +msgid "A shallow dessert bowl, not a lot of use for it really." msgstr "" #: lang/json/json_items.py -msgid "Browning BLR" +msgid "ceramic cup" msgstr "" #: lang/json/json_items.py -msgid "" -"A very popular rifle for hunting and sniping. Its low ammo capacity is " -"offset by the very powerful .30-06 round it fires." +msgid "A ceramic teacup, pinky out!" msgstr "" #: lang/json/json_items.py -msgid "Remington 700" +msgid "glass plate" msgstr "" #: lang/json/json_items.py -msgid "" -"A very popular and durable hunting or sniping rifle. Popular among SWAT and " -"US Marine snipers. Highly damaging, but perhaps not as accurate as the " -"competing Browning BLR." +msgid "A glass dinner plate, you could probably play frisbee with it" msgstr "" #: lang/json/json_items.py -msgid "SKS" +msgid "glass bowl" msgstr "" #: lang/json/json_items.py -msgid "" -"Developed by the Soviets in 1945, this rifle was quickly replaced by the " -"full-auto AK47. However, due to its superb accuracy and low recoil, this gun " -"maintains immense popularity." +msgid "A glass dessert bowl, not a lot of use for it really." msgstr "" #: lang/json/json_items.py -msgid "M14" +msgid "glass" msgstr "" #: lang/json/json_items.py -msgid "" -"The child of the M1 Garand World War 2 rifle, the M14 is a semi-automatic " -"rifle favored for it's accuracy and modular use." +msgid "A tall glass, just begging for a frosty one!" msgstr "" #: lang/json/json_items.py -msgid "Ruger Mini-14" +msgid "tin plate" msgstr "" #: lang/json/json_items.py -msgid "" -"A small, lightweight semi-auto carbine designed for military use. Its superb " -"accuracy and low recoil makes it more suitable than full-auto rifles for " -"some situations." +msgid "A tin dinner plate, you could probably play frisbee with it" msgstr "" #: lang/json/json_items.py -msgid "Savage 111F" +msgid "fork" msgstr "" #: lang/json/json_items.py msgid "" -"A very accurate rifle chambered for the powerful .308 round. Its very low " -"ammo capacity is offset by its accuracy and near-complete lack of recoil." +"A fork, if you stab something with it you eat it right away. Wait.. " +"nevermind." msgstr "" #: lang/json/json_items.py -msgid "H&K G3" +msgid "Do not try to bend the spoon. That is impossible." msgstr "" #: lang/json/json_items.py -msgid "" -"An early battle rifle developed after the end of WWII. The G3 is designed to " -"unload large amounts of deadly ammunition, but it is less suitable over long " -"ranges." +msgid "spork" msgstr "" #: lang/json/json_items.py -msgid "H&K G36" +msgid "Foons are for scrubs, real men use sporks." msgstr "" #: lang/json/json_items.py -msgid "" -"Designed as a replacement for the early H&K G3 battle rifle, the G36 is more " -"accurate, and uses the much-lighter .223 round, allowing for a higher ammo " -"capacity." +msgid "foon" msgstr "" #: lang/json/json_items.py -msgid "AK-47" +msgid "Clearly the superior instrument. Sporks are just imitators." msgstr "" #: lang/json/json_items.py -msgid "" -"One of the most recognizable assault rifles ever made, the AK-47 is renowned " -"for its durability even under the worst conditions." +msgid "blood soaked rag" msgstr "" #: lang/json/json_items.py -msgid "FN FAL" +msgid "A large rag, drenched in blood. It could be cleaned with boiling water." msgstr "" #: lang/json/json_items.py -msgid "" -"A Belgian-designed battle rifle, the FN FAL is not very accurate for a " -"rifle, but its high fire rate and powerful .308 ammunition have made it one " -"of the most widely-used battle rifles in the world." +msgid "clock" msgstr "" #: lang/json/json_items.py -msgid "Bushmaster ACR" +msgid "A small mechanical clock, it's stopped at 10:10." msgstr "" #: lang/json/json_items.py -msgid "" -"This carbine was developed for military use in the early 21st century. It is " -"damaging and accurate, though its rate of fire is a bit slower than " -"competing .223 carbines." +msgid "clockworks" msgstr "" #: lang/json/json_items.py -msgid "AR-15" +msgid "A small assortment of gears and other clockwork gubbins." msgstr "" #: lang/json/json_items.py -msgid "" -"A widely used assault rifle and the father of popular rifles such as the " -"M16. It is light and accurate, but not very durable." +msgid "stone pot" msgstr "" #: lang/json/json_items.py -msgid "M4A1" +msgid "A large stone, roughly hollowed out into a pot." +msgstr "" + +#: lang/json/json_items.py +msgid "rock" msgstr "" #: lang/json/json_items.py msgid "" -"A popular carbine, long used by the US military. Though accurate, small, and " -"lightweight, it is infamous for its fragility, particularly in less-than- " -"ideal terrain." +"A rock the size of a baseball. Makes a decent melee weapon, and is also good " +"for throwing at enemies." msgstr "" #: lang/json/json_items.py -msgid "FN SCAR-L" +msgid "baseball" msgstr "" #: lang/json/json_items.py msgid "" -"A modular assault rifle designed for use by US Special Ops units. The 'L' in " -"its name stands for light, as it uses the lightweight .223 round. It is very " -"accurate and low on recoil." +"A baseball, good for throwing at enemies. Getting hit with one of these " +"hurts a lot more than you might think." msgstr "" #: lang/json/json_items.py -msgid "FN SCAR-H" +msgid "hockey puck" msgstr "" #: lang/json/json_items.py msgid "" -"A modular assault rifle designed for use by US Special Ops units. The 'H' in " -"its name stands for heavy, as it uses the powerful .308 round. It is fairly " -"accurate and low on recoil." +"A heavy circular block of solid rubber, normally used for playing hockey. " +"You can throw it to cause some serious harm." msgstr "" #: lang/json/json_items.py -msgid "Steyr AUG" +msgid "football" msgstr "" #: lang/json/json_items.py msgid "" -"The Steyr AUG is an Austrian assault rifle that uses a bullpup design. It is " -"used in the armed forces and police forces of many nations, and enjoys low " -"recoil and high accuracy." +"An oval made of leather and string, it's easily thrown but does little " +"damage. You could take it apart into leather if you wanted." msgstr "" #: lang/json/json_items.py -msgid "M249" +msgid "fertilizer" msgstr "" #: lang/json/json_items.py -msgid "" -"The M249 is a mountable machine gun used by the US military and SWAT teams. " -"Quite innaccurate and difficult to control, the M249 is designed to fire " -"many rounds very quickly." +msgid "A token, representing fertilization of a plant." msgstr "" #: lang/json/json_items.py -msgid "V29 laser pistol" +msgid "syringe" msgstr "" #: lang/json/json_items.py -msgid "" -"The V29 laser pistol was designed in the mid-21st century, and was one of " -"the first firearms to use fusion as its ammunition. It is larger than most " -"traditional handguns, but displays no recoil whatsoever." +msgid "A medical syringe. Used for administering heroin and other drugs." msgstr "" #: lang/json/json_items.py -msgid "FTK-93 fusion gun" +msgid "pointy stick" msgstr "" #: lang/json/json_items.py -msgid "" -"A very powerful fusion rifle developed shortly before the influx of " -"monsters. It can only hold two rounds at a time, but a special superheating " -"unit causes its bolts to be extremely deadly." +msgid "A simple wood pole with one end sharpened." msgstr "" #: lang/json/json_items.py -msgid "NX-17 charge rifle" +msgid "2-by-sword" msgstr "" #: lang/json/json_items.py msgid "" -"A multi-purpose rifle, designed for use in conjunction with a unified power " -"supply, or UPS. It does not reload normally; instead, press fire once to " -"start charging it from your UPS, then again to unload the charge." +"A two by four with a cross guard and whittled down point; not much for " +"slashing, but much better than your bare hands." msgstr "" #: lang/json/json_items.py -msgid "simple flamethr." +msgid "nord" msgstr "" #: lang/json/json_items.py msgid "" -"A simple, home-made flamethrower. While its capacity is not superb, it is " -"more than capable of igniting terrain and monsters alike." +"The nail sword, or nord for short. This wooden sword has a dozen nails " +"sticking at jagged angles from edge of the blade, making it much better at " +"chopping than slashing." msgstr "" #: lang/json/json_items.py -msgid "flamethrower" +msgid "crude sword" msgstr "" #: lang/json/json_items.py msgid "" -"A large flamethrower with substantial gas reserves. Very menacing and deadly." +"Several bits of thin scrap metal crudely beat into the semblance of an edge " +"over a wooden sword. The added weight is unbalanced, but the jagged edge " +"offers a good bit of slashing power." msgstr "" #: lang/json/json_items.py -msgid "tube 40mm launcher" +msgid "forged sword" msgstr "" #: lang/json/json_items.py msgid "" -"A simple, home-made grenade launcher. Basically a tube with a pin firing " -"mechanism to activate the grenade." +"A common short sword, forged from several pieces of steel. The pointy end is " +"the dangerous one." msgstr "" #: lang/json/json_items.py -msgid "M79 launcher" +msgid "rope - 6 ft" msgstr "" #: lang/json/json_items.py -msgid "" -"A widely-used grenade launcher that first saw use by American forces in the " -"Vietnam war. Though mostly replaced by more modern launchers, the M79 still " -"sees use with many units worldwide." +msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" #: lang/json/json_items.py -msgid "M320 launcher" +msgid "steel chain" msgstr "" #: lang/json/json_items.py msgid "" -"Developed by Heckler & Koch, the M320 grenade launcher has the functionality " -"of larger launchers in a very small package. However, its smaller size " -"contributes to a lack of accuracy." +"A heavy steel chain. Useful as a weapon, or for crafting. It has a chance to " +"wrap around your target, allowing for a bonus unarmed attack." msgstr "" #: lang/json/json_items.py -msgid "Milkor MGL" +msgid "broom" msgstr "" #: lang/json/json_items.py msgid "" -"The Milkor Multi-Grenade Launcher is designed to compensate for the drawback " -"of single-shot grenade launchers by allowing sustained heavy firepower. " -"However, it is still slow to reload and must be used with careful planning." +"A long-handled broom. Makes a terrible weapon unless you're chasing cats." msgstr "" #: lang/json/json_items.py -msgid "M72 LAW" +msgid "sledge hammer" msgstr "" #: lang/json/json_items.py msgid "" -"A disposable light anti-tank rocket launcher. Once fired, it cannot be " -"reloaded and must be disposed of." +"A large, heavy hammer. Makes a good melee weapon for the very strong, but is " +"nearly useless in the hands of the weak." msgstr "" #: lang/json/json_items.py -msgid "coilgun" +msgid "nail board" msgstr "" #: lang/json/json_items.py msgid "" -"A homemade gun, using electromagnets to accelerate a ferromagnetic " -"projectile to high velocity. Powered by UPS." +"A long piece of wood with several nails through one end; essentially a " +"simple mace. Makes a great melee weapon." msgstr "" #: lang/json/json_items.py -msgid "H&K G80 Railgun" +msgid "nail bat" msgstr "" #: lang/json/json_items.py msgid "" -"Developed by Heckler & Koch in 2033, the railgun magnetically propels a " -"ferromagnetic projectile using an alternating current. This makes it silent " -"while still deadly. Powered by UPS." +"A baseball bat with several nails driven through it, an excellent melee " +"weapon." msgstr "" #: lang/json/json_items.py -msgid "Boeing XM-P plasma rifle" +msgid "nail knuckles" msgstr "" #: lang/json/json_items.py msgid "" -"Boeing developed the focused plasma weaponry together with DARPA. It heats " -"hydrogen to create plasma and envelops it with polymers to reduce blooming. " -"While powerful, it suffers from short range. Powered by UPS." +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." msgstr "" #: lang/json/json_items.py -msgid "shotgun revolver" +msgid "homewrecker" msgstr "" #: lang/json/json_items.py msgid "" -"A shotgun modified to use a revolver cylinder mechanism, it can hold 6 " -"cartridges." +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." msgstr "" #: lang/json/json_items.py -msgid "pipe shotgun" +msgid "two by four" msgstr "" #: lang/json/json_items.py msgid "" -"A home-made shotgun. It is simply a pipe attached to a stock, with a hammer " -"to strike the single round it holds." +"A plank of wood. Makes a decent melee weapon, and can be used to board up " +"doors and windows if you have a hammer and nails." msgstr "" #: lang/json/json_items.py -msgid "sawn pipe shotgun" +msgid "pipe" msgstr "" #: lang/json/json_items.py msgid "" -"A home-made sawn off shotgun. It is simply a short pipe attached to a stock, " -"with a hammer to strike the single round it holds." +"A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." msgstr "" #: lang/json/json_items.py -msgid "LACP laser pistol" +msgid "baseball bat" msgstr "" #: lang/json/json_items.py -msgid "" -"The LACP laser pistol was based on the v29 laser pistol designed in the " -"mid-21st century, while little more then duct tape and electonics it uses " -"the powerful fusion pack." +msgid "A sturdy wood bat. Makes a great melee weapon." msgstr "" #: lang/json/json_items.py -msgid "RM51 assault rifle" +msgid "aluminium bat" msgstr "" #: lang/json/json_items.py msgid "" -"Barely making it past the prototype stage before the world ended, the " -"Rivtech RM51 assault rifle was designed for durability and ease of use under " -"less than ideal circumstances." +"An aluminium baseball bat, lighter than a wooden bat and a little easier to " +"swing as a result." msgstr "" #: lang/json/json_items.py -msgid "RM88 battle rifle" +msgid "wood spear" msgstr "" #: lang/json/json_items.py -msgid "" -"Barely making it past the prototype stage before the world ended, the " -"Rivtech RM88 battle rifle was designed for durability and extreme firepower " -"under less than ideal circumstances." +msgid "A stout pole with an improvised grip and a fire-hardened point." msgstr "" #: lang/json/json_items.py -msgid "RM614 LMG" +msgid "steel spear" msgstr "" #: lang/json/json_items.py -msgid "" -"Utilizing a powerful and unusual caliber, the Rivtech RM614 light machine " -"gun was designed for durability and extreme volume of sustained fire under " -"the worst possible circumstances." +msgid "A stout metal pole with a sharp point." msgstr "" #: lang/json/json_items.py -msgid "RM2000 submachine gun" +msgid "expandable baton" msgstr "" #: lang/json/json_items.py msgid "" -"Utilizing a powerful and unusual caliber, the Rivtech RM2000 submachine gun " -"was designed for durability and ease of carrying under less than ideal " -"circumstances." +"A telescoping baton that collapses for easy storage. Makes an excellent " +"melee weapon." msgstr "" #: lang/json/json_items.py -msgid "RM99 revolver" +msgid "bee sting" msgstr "" #: lang/json/json_items.py -msgid "" -"Considered overkill by some, the Rivtech M99 remains an exceedingly powerful " -"addition to the arsenal of any gunslinger." +msgid "A six-inch stinger from a giant bee. Makes a good melee weapon." msgstr "" #: lang/json/json_items.py -msgid "RM103A automagnum" +msgid "fungal fighter sting" msgstr "" #: lang/json/json_items.py -msgid "" -"Considered overkill by many, the Rivtech M103A remains one of the most " -"powerful sidearms ever developed." +msgid "A short dart from a fungal fighter. Makes an average melee weapon." msgstr "" #: lang/json/json_items.py -msgid "pneumatic assault rifle" +msgid "wasp sting" msgstr "" #: lang/json/json_items.py -msgid "" -"A multistroke pneumatic rifle handcrafted from scrap. It is very quiet and " -"deadly." +msgid "A six-inch stinger from a giant wasp. Makes a good melee weapon." msgstr "" #: lang/json/json_items.py -msgid "pneumatic bolt driver" +msgid "walking cane" msgstr "" #: lang/json/json_items.py msgid "" -"An eight-shot, revolving barrel, pneumatic bolt driver handcrafted from " -"scrap. It is very quiet and deadly." +"Handicapped or not, you always walk in style. Consisting of a metal " +"headpiece and a wooden body, this makes a great bashing weapon in a pinch." msgstr "" #: lang/json/json_items.py -msgid "12 gauge pistol" +msgid "mace" msgstr "" #: lang/json/json_items.py msgid "" -"A single shot pistol that loads 12 gauge shotgun shells, handcrafted from " -"scrap." +"A medieval weapon consisting of a wood handle with a heavy iron end. It is " +"heavy and slow, but its crushing damage is devastating." msgstr "" #: lang/json/json_items.py -msgid "flaregun" +msgid "morningstar" msgstr "" #: lang/json/json_items.py -msgid "A plastic single shot pistol made to fire signal flares." +msgid "" +"A medieval weapon consisting of a wood handle with a heavy, spiked iron ball " +"on the end. It deals devastating crushing damage, with a small amount of " +"piercing to boot." msgstr "" #: lang/json/json_items.py -msgid "A7 laser rifle" +msgid "pool cue" msgstr "" #: lang/json/json_items.py msgid "" -"A state of the art laser rifle, made by Aerial Industries; turn those foes " -"into ash!" +"A hard-wood stick designed for hitting colorful balls around a felt table. " +"Truly, the coolest of sports." msgstr "" -#: lang/json/json_items.py -msgid "spraycan flamethrower" +#: lang/json/json_items.py lang/json/json_vehicle_parts.py +msgid "spike" msgstr "" #: lang/json/json_items.py msgid "" -"A favourite of hooligans around the world, this lighter duct-taped to a " -"spray can is probably as dangerous to the user as anyone else. The nozzle " -"has been crudely modified to disperse gasoline, and a small pump attached to " -"the side allows for repressurization, though this process takes takes a few " -"minutes." +"A large and slightly misshapen spike, could do some damage mounted on a " +"vehicle." msgstr "" #: lang/json/json_items.py -msgid "M3 recoilless rifle" +msgid "wooden javelin" msgstr "" #: lang/json/json_items.py msgid "" -"Manufactured in Sweden, the Carl Gustav M3 is a breech-loading 84 millimeter " -"man-portable, reusable, multi-role recoilless rifle commonly used by the US " -"military." +"A wooden spear, honed to a sharper point and fire hardened for toughness. " +"The grip area has also be carved and covered for better grip." msgstr "" #: lang/json/json_items.py -msgid "M202 FLASH" +msgid "poppy flower" msgstr "" #: lang/json/json_items.py -msgid "" -"A massive and deadly four shot 66 millimeter man-portable, reusable, " -"thermobaric rocket launcher." +msgid "A poppy stalk with some petals." msgstr "" #: lang/json/json_items.py -msgid "RPG-7" +msgid "a poppy bud" msgstr "" #: lang/json/json_items.py -msgid "" -"The famous RPG-7 rocket launcher. This ubiquitous rocket launcher is cheap " -"to maufacture and is easy to handle. Often used by terrorists, it's not as " -"precise as other weapons." +msgid "Contains some substances commonly produced by mutated poppy flower" msgstr "" #: lang/json/json_items.py -msgid "RM216 SPIW" +msgid "adamantite claws" msgstr "" #: lang/json/json_items.py -msgid "" -"This light carbine fires 5x50mm armor-piercing flechette cartridges. " -"Classified as a special purpose individual weapon, this advanced firearm was " -"developed by Rivtech for the US military shortly before the end of the " -"world. Designed to be fired in bursts, it excels in close combat." +msgid "Short and sharp claws made from a high-tech metal." msgstr "" #: lang/json/json_items.py -msgid "fusion blaster rifle" +msgid "punch dagger" msgstr "" #: lang/json/json_items.py msgid "" -"A cyborg's fusion blaster arm, cannibalized and converted into a rifle. This " -"improvised weapon is powered by a standard UPS connection." +"A short and sharp double edged dagger made to be gripped in the palm, with " +"the blade protruding between the fingers." msgstr "" #: lang/json/json_items.py -msgid "Barrett M107A1" +msgid "10 plastic bags" msgstr "" #: lang/json/json_items.py msgid "" -"A large, shoulder-fired, .50 caliber anti-materiel rifle. Its large size, " -"recoil, and noise is offset by its damage and range." +"10 plastic bags, folded smooth and wrapped tightly together with a string." msgstr "" #: lang/json/json_items.py -msgid "withered plant" +msgid "money bundle" msgstr "" #: lang/json/json_items.py -msgid "A dead plant. Good for starting fires." +msgid "A bundle holding many 20 dollar bills, pretty useless now though" msgstr "" #: lang/json/json_items.py -msgid "fur pelt" +msgid "cell phone" msgstr "" #: lang/json/json_items.py -msgid "A small bolt of fur from an animal. Can be made into warm clothing." +msgid "" +"A simple cell phone. Nowadays only useful for telling the time or as an " +"alarm clock. Can also be disassembled into some useful parts." msgstr "" #: lang/json/json_items.py -msgid "leather patch" +msgid "pocket watch" msgstr "" #: lang/json/json_items.py -msgid "A smallish patch of leather, could be used to make tough clothing." +msgid "" +"An old fashioned pocket watch. This one tells you the time and looks good " +"doing it. Can also be disassembled into some useful parts." msgstr "" #: lang/json/json_items.py -msgid "superglue" +msgid "umbrella" msgstr "" #: lang/json/json_items.py -msgid "A tube of strong glue. Used in many crafting recipes." +msgid "An umbrella with a pointy end, useful for keeping dry when wielded." msgstr "" #: lang/json/json_items.py -msgid "science ID card" +msgid "A fish bowl" msgstr "" #: lang/json/json_items.py msgid "" -"This ID card once belonged to a scientist of some sort. It has a magnetic " -"stripe on the back; perhaps it can be used on a control panel." +"A filled fish bowl, the tag says to Ed and the fish's name Hoss. It appears " +"the fish has tiny antlers" msgstr "" #: lang/json/json_items.py -msgid "military ID card" +msgid "steel knuckles" msgstr "" #: lang/json/json_items.py msgid "" -"This ID card once belonged to a military officer with high-level clearance. " -"It has a magnetic stripe on the back; perhaps it can be used on a control " -"panel." +"A mass of scrap metal crudely beat into shape, with folded rags underneath " +"to protect the wearers knuckles. A good, quick weapon - but you have to get " +"within punching range to use it." msgstr "" #: lang/json/json_items.py -msgid "electrohack" +msgid "razorbar katar" msgstr "" #: lang/json/json_items.py msgid "" -"This device has many ports attached, allowing to to connect to almost any " -"control panel or other electronic machine (but not computers). With a little " -"skill, it can be used to crack passwords and more." +"Five pieces of rebar sharpened to cruel points and strapped to a brace " +"fastened at wrist and forearm on both arms. The next bub better watch out." msgstr "" #: lang/json/json_items.py -msgid "string - 6 in" +msgid "cestus" msgstr "" #: lang/json/json_items.py -msgid "A small piece of cotton string." +msgid "" +"A heavy metal guard that covers the fist and increases striking power, with " +"stout padding underneath to protect the wearers hand." msgstr "" #: lang/json/json_items.py -msgid "string - 3 ft" +msgid "brass knuckles" msgstr "" #: lang/json/json_items.py msgid "" -"A long piece of cotton string. Use scissors on it to cut it into smaller " -"pieces." +"A metal weapon made of brass, designed to be gripped in the palm and cause " +"punches to do extra damage. A good, quick weapon - but you have to get " +"within punching range to use it." msgstr "" #: lang/json/json_items.py -msgid "rope - 30 ft" +msgid "hockey stick" msgstr "" #: lang/json/json_items.py -msgid "A long nylon rope. Useful for keeping yourself safe from falls." +msgid "" +"A curved wooden stick with a wide and flat end. Commonly used by hockey " +"players." msgstr "" #: lang/json/json_items.py -msgid "processor board" +msgid "golf club" msgstr "" #: lang/json/json_items.py -msgid "A central processor unit, useful in advanced electronics crafting." +msgid "" +"A long handle with a big metal head, flat on one side, for driving golf " +"balls. Fore!" msgstr "" #: lang/json/json_items.py -msgid "RAM" +msgid "rock in a sock" msgstr "" #: lang/json/json_items.py -msgid "A stick of memory. Useful in advanced electronics crafting." +msgid "" +"A sock with a rock tied into the end of it. A true weapon of desperation." msgstr "" #: lang/json/json_items.py -msgid "power converter" +msgid "charcoal kiln" msgstr "" #: lang/json/json_items.py -msgid "A power supply unit. Useful in lots of electronics recipes." +msgid "" +"A stout metal box used for producing charcoal via pyrolysis; the incomplete " +"burning of organic materials in the absence of oxygen." msgstr "" #: lang/json/json_items.py -msgid "amplifier circuit" +msgid "tonfa" msgstr "" #: lang/json/json_items.py msgid "" -"A circuit designed to amplify the strength of a signal. Useful in lots of " -"electronics recipes." +"A hard plastic truncheon commonly employed by police. Originally an Okinawan " +"weapon, it consists of a stick with a perpendicular handle attached a third " +"of the way down its length." msgstr "" #: lang/json/json_items.py -msgid "transponder circuit" +msgid "wooden tonfa" msgstr "" #: lang/json/json_items.py msgid "" -"A circuit designed to repeat a signal. Useful for crafting communications " -"equipment." +"A stout wooden truncheon of the sort commonly employed by police. Originally " +"an Okinawan weapon, it consists of a stick with a perpendicular handle " +"attached a third of the way down its length." msgstr "" #: lang/json/json_items.py -msgid "signal receiver" +msgid "atomic nightlight" msgstr "" #: lang/json/json_items.py msgid "" -"A module designed to receive many forms of signals. Useful for crafting " -"communications equipment." +"Enjoy the serene Cherenkov-blue glow of the Rivtech atomic nightlight, and " +"feel confident that you won't have to worry about depleting its power supply " +"for at least 160 million years of faithful service." msgstr "" #: lang/json/json_items.py -msgid "small LCD screen" +msgid "atomic coffee maker" msgstr "" #: lang/json/json_items.py msgid "" -"A small backlit screen, used for displaying images. Useful in some " -"electronics recipes." +"Never sacrifice taste for convenience, when you can have both with the " +"Rivtech atomic coffee maker! Its simple and robust atomic-age construction " +"guarantees a service life of at least 160 million years." msgstr "" #: lang/json/json_items.py -msgid "high-quality lens" +msgid "copper tubing" msgstr "" #: lang/json/json_items.py -msgid "A high-quality lens, useful for focusing or diffusing light." +msgid "" +"A copper tube, too thin to be much use ad a melee weapon, but will do if " +"nothing else is available. Useful in a few crafting recipes." msgstr "" #: lang/json/json_items.py -msgid "burnt out bionic" +msgid "nail gun" msgstr "" #: lang/json/json_items.py msgid "" -"Once a valuable bionic implant, it's not held up well under repeated use. " -"This object has been destroyed by excessive electric current and is now " -"useless." +"A tool used to drive nails into wood or other material. It could also be " +"used as a ad-hoc weapon." msgstr "" #: lang/json/json_items.py -msgid "antenna" +msgid "nail rifle" msgstr "" #: lang/json/json_items.py -msgid "A simple thin aluminum shaft. Useful in lots of electronics recipes." +msgid "" +"This is a nailgun that has been jury-rigged to be a more effective weapon " +"with the addition of a short barrel, a stock, and a hand guard." msgstr "" #: lang/json/json_items.py -msgid "circuit board" +msgid "BB gun" msgstr "" #: lang/json/json_items.py msgid "" -"A printed card that supports and electrically connects electronic components " -"on a non-conductive substrate." +"Popular among children. It's fairly accurate, but BBs deal nearly no damage." msgstr "" #: lang/json/json_items.py -msgid "electronic scrap" +msgid "sling" msgstr "" #: lang/json/json_items.py msgid "" -"A random collection of resistors, capacitors, and diodes which have been " -"stripped from printed circuits." +"A leather sling, it is easy to use and accurate, but pebbles do little " +"damage." msgstr "" #: lang/json/json_items.py -msgid "chunk of steel" +msgid "slingshot" msgstr "" #: lang/json/json_items.py msgid "" -"A misshapen chunk of steel. Makes a decent weapon in a pinch, and is also " -"useful for some crafting recipes." -msgstr "" - -#: lang/json/json_items.py -msgid "lump of steel" +"A wooden slingshot, it is easy to use and accurate, but pebbles do little " +"damage. Pebbles are used as ammunition." msgstr "" #: lang/json/json_items.py -msgid "A misshapen heavy piece of steel. Useful for some crafting recipes." +msgid "blowgun" msgstr "" #: lang/json/json_items.py msgid "" -"An assortment of small bits of metal and scrap useful in all kinds of " -"crafting" +"A wooden blowgun, it isn't hard to use, and is very accurate. Darts are used " +"as ammunition." msgstr "" #: lang/json/json_items.py -msgid "sheet of glass" +msgid "pipe rifle: .22" msgstr "" #: lang/json/json_items.py -msgid "A large sheet of glass. Easily shattered. Useful for re-paning windows." +msgid "" +"A home-made rifle. It is simply a pipe attached to a stock, with a hammer to " +"strike the single round it holds." msgstr "" #: lang/json/json_items.py -msgid "sheet of reinforced glass" +msgid "pipe rifle: 9mm" msgstr "" #: lang/json/json_items.py -msgid "A large sheet of glass strengthened with steel wiring." +msgid "pipe SMG: 9mm" msgstr "" #: lang/json/json_items.py -msgid "pane of reinforced glass" +msgid "" +"A home-made machine pistol. It features a rudimentary blowback system, which " +"allows for small bursts." msgstr "" #: lang/json/json_items.py -msgid "A small pane of glass strengthened with steel wiring." +msgid "pipe SMG: .45" msgstr "" -#: lang/json/json_items.py lang/json/json_terrain.py -msgid "manhole cover" +#: lang/json/json_items.py +msgid "SIG Mosquito" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy iron disc that typically covers a ladder into the sewers. Lifting it " -"from the manhole is impossible without a crowbar." +"A popular, very small .22 pistol. \"Ergonomically designed to give the best " +"shooting experience.\" --SIG Sauer official website" msgstr "" #: lang/json/json_items.py -msgid "heavy stick" +msgid "S&W 22A" msgstr "" #: lang/json/json_items.py msgid "" -"A sturdy, heavy stick. Makes a decent melee weapon, and can be cut into two " -"by fours for crafting." +"A popular .22 pistol. \"Ideal for competitive target shooting or " +"recreational shooting.\" --Smith & Wesson official website" msgstr "" #: lang/json/json_items.py -msgid "quarterstaff" +msgid "Glock 19" msgstr "" #: lang/json/json_items.py msgid "" -"A smooth and sturdy staff with a leather-wrapped grip. Light and well-" -"balanced, it is surprisingly easy to handle." +"Possibly the most popular pistol in existence. The Glock 19 is often derided " +"for its plastic construction, but it is easy to shoot." msgstr "" #: lang/json/json_items.py -msgid "ironshod quarterstaff" +msgid "USP 9mm" msgstr "" #: lang/json/json_items.py msgid "" -"A smooth and sturdy staff with a leather-wrapped grip, which has been " -"reinforced with metal bands and caps. Durable and well-balanced, it is " -"surprisingly easy to handle." +"A popular 9mm pistol, widely used among law enforcement. Extensively tested " +"for durability, it has been found to stay accurate even after subjected to " +"extreme abuse." msgstr "" #: lang/json/json_items.py -msgid "hatchet" +msgid "S&W 619" msgstr "" #: lang/json/json_items.py msgid "" -"A one-handed hatchet. Makes a great melee weapon, and is useful both for " -"cutting wood, and for use as a hammer." +"A seven-round .38 revolver sold by Smith & Wesson. It features a fixed rear " +"sight and a reinforced frame." msgstr "" #: lang/json/json_items.py -msgid "pot" +msgid "Taurus Pro .38" msgstr "" #: lang/json/json_items.py -msgid "Useful for boiling water when cooking spaghetti and more." +msgid "" +"A popular .38 pistol. Designed with numerous safety features and built from " +"high-quality, durable materials." msgstr "" #: lang/json/json_items.py -msgid "frying pan" +msgid "SIG Pro .40" msgstr "" #: lang/json/json_items.py -msgid "A cast-iron pan. Makes a decent melee weapon, and is used for cooking." +msgid "" +"Originally marketed as a lightweight and compact alternative to older SIG " +"handguns, the Pro .40 is popular among European police forces." msgstr "" #: lang/json/json_items.py -msgid "teapot" +msgid "S&W 610" msgstr "" #: lang/json/json_items.py -msgid "A small metal teapot. Teatime wouldn't be complete without one." +msgid "" +"The Smith and Wesson 610 is a classic six-shooter revolver chambered for " +"10mm rounds, or for S&W's own .40 round." msgstr "" #: lang/json/json_items.py -msgid "butter knife" +msgid "S&W 500" msgstr "" #: lang/json/json_items.py -msgid "A dull knife, absolutely worthless in combat." +msgid "" +"The Smith and Wesson 500 is a five-shooter revolver, it fires the most " +"powerful handgun cartridge the .500 S&W Magnum, it's one of world's best " +"revolvers." msgstr "" #: lang/json/json_items.py -msgid "chunk of chitin" +msgid "Taurus Raging Bull" msgstr "" #: lang/json/json_items.py -msgid "A piece of an insect's exoskeleton. It is light and very durable." +msgid "" +"The Taurus Raging Bull is a five-shooter revolver, it fires the very " +"powerful handgun cartridge the .454 Casull round, it has a distinct red " +"strip along it's rubber grip." msgstr "" #: lang/json/json_items.py -msgid "biollante bud" +msgid "Ruger Redhawk" msgstr "" #: lang/json/json_items.py msgid "" -"An unopened biollante flower, brilliant purple in color. It may still have " -"its sap-producing organ intact." +"One of the most powerful handguns in the world when it was released in 1979, " +"the Redhawk offers very sturdy construction, with an appearance that is " +"reminiscent of \"Wild West\" revolvers." msgstr "" #: lang/json/json_items.py -msgid "empty canister" +msgid "Desert Eagle .44" msgstr "" #: lang/json/json_items.py msgid "" -"An empty canister, which may have once held tear gas or other substances." +"One of the most recognizable handguns due to its popularity in movies, the " +"\"Deagle\" is better known for its menacing appearance than its performance. " +"It's highly inaccurate, but its heavy weight reduces recoil." msgstr "" #: lang/json/json_items.py -msgid "gold bar" +msgid "USP .45" msgstr "" #: lang/json/json_items.py msgid "" -"A large bar of gold. Before the apocalypse, this would've been worth a small " -"fortune; now its value is greatly diminished." +"A popular .45 pistol, widely used among law enforcement. Extensively tested " +"for durability, it has been found to stay accurate even after subjected to " +"extreme abuse." msgstr "" #: lang/json/json_items.py -msgid "coal pallet" +msgid "M1911" msgstr "" #: lang/json/json_items.py -msgid "A large block of semi-processed coal." +msgid "" +"The M1911 was the standard-issue sidearm from the US Military for most of " +"the 20th Century. It remains one of the most popular .45 pistols today." msgstr "" #: lang/json/json_items.py -msgid "petrified eye" +msgid "FN Five-Seven" msgstr "" #: lang/json/json_items.py msgid "" -"A fist-sized eyeball with a cross-shaped pupil. It seems to be made of " -"stone, but doesn't look like it was carved." +"Designed to work with FN's proprietary 5.7x28mm round, the Five-Seven is a " +"lightweight pistol with a very high capacity, best used against armored " +"opponents." msgstr "" #: lang/json/json_items.py -msgid "spiral stone" +msgid "H&K UCP" msgstr "" #: lang/json/json_items.py msgid "" -"A rock the size of your fist. It is covered with intricate spirals; it is " -"impossible to tell whether they are carved, naturally formed, or some kind " -"of fossil." +"Designed to work with H&K's proprietary 4.6x30mm round, the UCP is a small " +"pistol with a very high capacity, best used against armored opponents." msgstr "" #: lang/json/json_items.py -msgid "binoculars" +msgid "Tokarev TT-30" msgstr "" #: lang/json/json_items.py msgid "" -"A tool useful for seeing long distances. Simply carrying this item in your " -"inventory will double the distance that is mapped around you during your " -"travels." +"The Norinco manufactured Tokarev TT-30 is the standard sidearm of the " +"Chinese military, it does not see extensive use outside of China." msgstr "" #: lang/json/json_items.py -msgid "USB drive" +msgid "sawn-off shotgun" msgstr "" #: lang/json/json_items.py -msgid "A USB thumb drive. Useful for holding software." +msgid "" +"The barrels of shotguns are often sawed in half to make it more maneuverable " +"and concealable. This has the added effect of reducing accuracy greatly." msgstr "" #: lang/json/json_items.py -msgid "pool ball" +msgid "sawn-off Saiga 12" msgstr "" #: lang/json/json_items.py -msgid "A colorful, hard ball. Essentially a rock." +msgid "" +"The Saiga-12 shotgun is designed on the same Kalashnikov pattern as the AK47 " +"rifle. It reloads with a magazine, rather than one shell at a time like most " +"shotguns. This one has had the barrel cut short, vastly reducing accuracy " +"but making it more portable" msgstr "" #: lang/json/json_items.py -msgid "candlestick" +msgid "single barrel shotgun" msgstr "" #: lang/json/json_items.py -msgid "A gold candlestick." +msgid "" +"An old shotgun, possibly antique. It is little more than a barrel, a wood " +"stock, and a hammer to strike the cartridge. Its simple design keeps it both " +"light and accurate." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -#: lang/json/json_vehicle_parts.py -msgid "blade" +#: lang/json/json_items.py +msgid "double barrel shotgun" msgstr "" #: lang/json/json_items.py msgid "" -"A large, relatively sharp blade. Could be used to make bladed weaponry, or " -"attached to a car." +"An old shotgun, possibly antique. It is little more than a pair of barrels, " +"a wood stock, and a hammer to strike the cartridges." msgstr "" #: lang/json/json_items.py -msgid "wire" +msgid "Remington 870" msgstr "" #: lang/json/json_items.py msgid "" -"A length of thin, relatively stiff, steel wire. Like the sort you find in " -"wire fences." +"One of the most popular shotguns on the market, the Remington 870 is used by " +"hunters and law enforcement agencies alike thanks to its high accuracy and " +"muzzle velocity." msgstr "" #: lang/json/json_items.py -msgid "barbed wire" +msgid "Mossberg 500" msgstr "" #: lang/json/json_items.py -msgid "A length of stiff wire, covered in sharp barbs." +msgid "" +"The Mossberg 500 is a popular series of pump-action shotguns, often acquired " +"for military use. It is noted for its high durability and low recoil." msgstr "" #: lang/json/json_items.py -msgid "rebar" +msgid "Saiga-12" msgstr "" #: lang/json/json_items.py msgid "" -"A length of rebar, makes a nice melee weapon, and could be handy in " -"constructing tougher walls and such." +"The Saiga-12 shotgun is designed on the same Kalashnikov pattern as the AK47 " +"rifle. It reloads with a magazine, rather than one shell at a time like most " +"shotguns." msgstr "" #: lang/json/json_items.py -msgid "log" +msgid "American-180" msgstr "" #: lang/json/json_items.py msgid "" -"A large log, cut from a tree. (a)ctivate a wood axe or wood saw to cut it " -"into planks" +"The American-180 is a submachine gun developed in the 1960's that fires .22 " +"LR, unusual for an SMG. Though the round is low-powered, the high rate of " +"fire and large magazine makes the 180 a formidable weapon." msgstr "" #: lang/json/json_items.py -msgid "splintered wood" +msgid "Uzi 9mm" msgstr "" #: lang/json/json_items.py -msgid "A splintered piece of wood, useless as anything but kindling" +msgid "" +"The Uzi 9mm has enjoyed immense popularity, selling more units than any " +"other submachine gun. It is widely used as a personal defense weapon, or as " +"a primary weapon by elite frontline forces." msgstr "" #: lang/json/json_items.py -msgid "skewer" +msgid "TEC-9" msgstr "" #: lang/json/json_items.py -msgid "A thin wooden skewer. Squirrel on a stick, anyone?" +msgid "" +"The TEC-9 is a machine pistol made of cheap polymers and machine stamped " +"parts. Its rise in popularity among criminals is largely due to its " +"intimidating looks and low price." msgstr "" #: lang/json/json_items.py -msgid "burnt out torch" +msgid "Calico M960" msgstr "" #: lang/json/json_items.py msgid "" -"A torch that has consumed all its fuel; it can be recrafted into another " -"torch" +"The Calico M960 is an automatic carbine with a unique circular magazine that " +"allows for high capacities and reduced recoil." msgstr "" #: lang/json/json_items.py -msgid "spring" +msgid "H&K MP5" msgstr "" #: lang/json/json_items.py msgid "" -"A large, heavy-duty spring. Expands with significant force when compressed." +"The Heckler & Koch MP5 is one of the most widely-used submachine guns in the " +"world, and has been adopted by special police forces and militaries alike. " +"Its high degree of accuracy and low recoil are universally praised." msgstr "" #: lang/json/json_items.py -msgid "lawnmower" +msgid "MAC-10" msgstr "" #: lang/json/json_items.py msgid "" -"A motorized pushmower that seems to be broken. You could take it apart if " -"you had a wrench." +"The MAC-10 is a popular machine pistol originally designed for military use. " +"For many years they were the most inexpensive automatic weapon in the US, " +"and enjoyed great popularity among criminals less concerned with quality " +"firearms." msgstr "" #: lang/json/json_items.py -msgid "sheet" +msgid "H&K UMP45" msgstr "" #: lang/json/json_items.py msgid "" -"A large fabric sheet, could be used as a curtain or bedsheets; or cut up for " -"a bunch of rags." +"Developed as a successor to the MP5 submachine gun, the UMP45 retains the " +"earlier model's supreme accuracy and low recoil, but in the higher .45 " +"caliber." msgstr "" #: lang/json/json_items.py -msgid "damaged tent" +msgid "TDI Vector" msgstr "" #: lang/json/json_items.py msgid "" -"A small tent, just big enough to fit a person comfortably. This tent is " -"broken and cannot be deployed" +"The TDI Vector is a submachine gun with a unique, in-line design that makes " +"recoil very managable, even in the powerful .45 caliber." msgstr "" #: lang/json/json_items.py -msgid "heating element" +msgid "FN P90" msgstr "" #: lang/json/json_items.py -msgid "A heating element, like the ones used in hotplates or kettles." +msgid "" +"The first in a new genre of guns, termed \"personal defense weapons.\" FN " +"designed the P90 to use their proprietary 5.7x28mm ammunition. It is made " +"for firing bursts manageably." msgstr "" #: lang/json/json_items.py -msgid "television" +msgid "H&K MP7" msgstr "" #: lang/json/json_items.py -msgid "A large cathode ray tube television, full of delicious electronics." +msgid "" +"Designed by Heckler & Koch as a competitor to the FN P90, as well as a " +"successor to the extremely popular H&K MP5. Using H&K's proprietary 4.6x30mm " +"ammunition, it is designed for burst fire." msgstr "" #: lang/json/json_items.py -msgid "pilot light" +msgid "PPSh-41" msgstr "" #: lang/json/json_items.py msgid "" -"A pilot light from a gas-burning device, this particular one is a simple " -"piezo electric igniter." +"The Soviet made PPSh-41, chambered in 7.62 Tokarev provides a relatively " +"large ammunition capacity, coupled with low recoil and decent accuracy." msgstr "" #: lang/json/json_items.py -msgid "toaster" +msgid "Marlin 39A" msgstr "" #: lang/json/json_items.py -msgid "A small two slice toaster, not much use as anything but spare parts" +msgid "" +"The oldest and longest-produced shoulder firearm in the world. Though it " +"fires the weak .22 round, it is highly accurate and damaging, and has " +"essentially no recoil." msgstr "" #: lang/json/json_items.py -msgid "microwave" +msgid "Ruger 10/22" msgstr "" #: lang/json/json_items.py msgid "" -"A home microwave, has probably seen its share of baked beans. Good for scrap " -"parts." +"A popular and highly accurate .22 rifle. At the time of its introduction in " +"1964, it was one of the first modern .22 rifles designed for quality, and " +"not as a gun for children." msgstr "" #: lang/json/json_items.py -msgid "laptop computer" +msgid "Cx4 Storm" msgstr "" #: lang/json/json_items.py -msgid "A broken laptop, basically a paperweight now" +msgid "" +"A small pistol caliber carbine designed for police use and civilian self-" +"defense, the CX4 Storm uses magazines that are interchangeable with " +"handguns of the same series." msgstr "" #: lang/json/json_items.py -msgid "desk fan" +msgid "Browning BLR" msgstr "" #: lang/json/json_items.py -msgid "A small fan, used to propel air around a room." +msgid "" +"A very popular rifle for hunting and sniping. Its low ammo capacity is " +"offset by the very powerful .30-06 round it fires." msgstr "" #: lang/json/json_items.py -msgid "ceramic plate" +msgid "Remington 700" msgstr "" #: lang/json/json_items.py -msgid "A ceramic dinner plate, you could probably play frisbee with it" +msgid "" +"A very popular and durable hunting or sniping rifle. Popular among SWAT and " +"US Marine snipers. Highly damaging, but perhaps not as accurate as the " +"competing Browning BLR." msgstr "" #: lang/json/json_items.py -msgid "ceramic bowl" +msgid "SKS" msgstr "" #: lang/json/json_items.py -msgid "A shallow dessert bowl, not a lot of use for it really." +msgid "" +"Developed by the Soviets in 1945, this rifle was quickly replaced by the " +"full-auto AK47. However, due to its superb accuracy and low recoil, this gun " +"maintains immense popularity." msgstr "" #: lang/json/json_items.py -msgid "ceramic cup" +msgid "M14" msgstr "" #: lang/json/json_items.py -msgid "A ceramic teacup, pinky out!" +msgid "" +"The child of the M1 Garand World War 2 rifle, the M14 is a semi-automatic " +"rifle favored for it's accuracy and modular use." msgstr "" #: lang/json/json_items.py -msgid "glass plate" +msgid "Ruger Mini-14" msgstr "" #: lang/json/json_items.py -msgid "A glass dinner plate, you could probably play frisbee with it" +msgid "" +"A small, lightweight semi-auto carbine designed for military use. Its superb " +"accuracy and low recoil makes it more suitable than full-auto rifles for " +"some situations." msgstr "" #: lang/json/json_items.py -msgid "glass bowl" +msgid "Savage 111F" msgstr "" #: lang/json/json_items.py -msgid "A glass dessert bowl, not a lot of use for it really." +msgid "" +"A very accurate rifle chambered for the powerful .308 round. Its very low " +"ammo capacity is offset by its accuracy and near-complete lack of recoil." msgstr "" #: lang/json/json_items.py -msgid "glass" +msgid "H&K G3" msgstr "" #: lang/json/json_items.py -msgid "A tall glass, just begging for a frosty one!" +msgid "" +"An early battle rifle developed after the end of WWII. The G3 is designed to " +"unload large amounts of deadly ammunition, but it is less suitable over long " +"ranges." msgstr "" #: lang/json/json_items.py -msgid "tin plate" +msgid "H&K G36" msgstr "" #: lang/json/json_items.py -msgid "A tin dinner plate, you could probably play frisbee with it" +msgid "" +"Designed as a replacement for the early H&K G3 battle rifle, the G36 is more " +"accurate, and uses the much-lighter .223 round, allowing for a higher ammo " +"capacity." msgstr "" #: lang/json/json_items.py -msgid "fork" +msgid "AK-47" msgstr "" #: lang/json/json_items.py msgid "" -"A fork, if you stab something with it you eat it right away. Wait.. " -"nevermind." -msgstr "" - -#: lang/json/json_items.py -msgid "Do not try to bend the spoon. That is impossible." +"One of the most recognizable assault rifles ever made, the AK-47 is renowned " +"for its durability even under the worst conditions." msgstr "" #: lang/json/json_items.py -msgid "spork" +msgid "FN FAL" msgstr "" #: lang/json/json_items.py -msgid "Foons are for scrubs, real men use sporks." +msgid "" +"A Belgian-designed battle rifle, the FN FAL is not very accurate for a " +"rifle, but its high fire rate and powerful .308 ammunition have made it one " +"of the most widely-used battle rifles in the world." msgstr "" #: lang/json/json_items.py -msgid "foon" +msgid "Bushmaster ACR" msgstr "" #: lang/json/json_items.py -msgid "Clearly the superior instrument. Sporks are just imitators." +msgid "" +"This carbine was developed for military use in the early 21st century. It is " +"damaging and accurate, though its rate of fire is a bit slower than " +"competing .223 carbines." msgstr "" #: lang/json/json_items.py -msgid "blood soaked rag" +msgid "AR-15" msgstr "" #: lang/json/json_items.py -msgid "A large rag, drenched in blood. It could be cleaned with boiling water." +msgid "" +"A widely used assault rifle and the father of popular rifles such as the " +"M16. It is light and accurate, but not very durable." msgstr "" #: lang/json/json_items.py -msgid "clock" +msgid "M4A1" msgstr "" #: lang/json/json_items.py -msgid "A small mechanical clock, it's stopped at 10:10." +msgid "" +"A popular carbine, long used by the US military. Though accurate, small, and " +"lightweight, it is infamous for its fragility, particularly in less-than- " +"ideal terrain." msgstr "" #: lang/json/json_items.py -msgid "clockworks" +msgid "FN SCAR-L" msgstr "" #: lang/json/json_items.py -msgid "A small assortment of gears and other clockwork gubbins." +msgid "" +"A modular assault rifle designed for use by US Special Ops units. The 'L' in " +"its name stands for light, as it uses the lightweight .223 round. It is very " +"accurate and low on recoil." msgstr "" #: lang/json/json_items.py -msgid "stone pot" +msgid "FN SCAR-H" msgstr "" #: lang/json/json_items.py -msgid "A large stone, roughly hollowed out into a pot." +msgid "" +"A modular assault rifle designed for use by US Special Ops units. The 'H' in " +"its name stands for heavy, as it uses the powerful .308 round. It is fairly " +"accurate and low on recoil." msgstr "" #: lang/json/json_items.py -msgid "rock" +msgid "Steyr AUG" msgstr "" #: lang/json/json_items.py msgid "" -"A rock the size of a baseball. Makes a decent melee weapon, and is also good " -"for throwing at enemies." +"The Steyr AUG is an Austrian assault rifle that uses a bullpup design. It is " +"used in the armed forces and police forces of many nations, and enjoys low " +"recoil and high accuracy." msgstr "" #: lang/json/json_items.py -msgid "baseball" +msgid "M249" msgstr "" #: lang/json/json_items.py msgid "" -"A baseball, good for throwing at enemies. Getting hit with one of these " -"hurts a lot more than you might think." +"The M249 is a mountable machine gun used by the US military and SWAT teams. " +"Quite innaccurate and difficult to control, the M249 is designed to fire " +"many rounds very quickly." msgstr "" #: lang/json/json_items.py -msgid "hockey puck" +msgid "V29 laser pistol" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy circular block of solid rubber, normally used for playing hockey. " -"You can throw it to cause some serious harm." +"The V29 laser pistol was designed in the mid-21st century, and was one of " +"the first firearms to use fusion as its ammunition. It is larger than most " +"traditional handguns, but displays no recoil whatsoever." msgstr "" #: lang/json/json_items.py -msgid "football" +msgid "FTK-93 fusion gun" msgstr "" #: lang/json/json_items.py msgid "" -"An oval made of leather and string, it's easily thrown but does little " -"damage. You could take it apart into leather if you wanted." +"A very powerful fusion rifle developed shortly before the influx of " +"monsters. It can only hold two rounds at a time, but a special superheating " +"unit causes its bolts to be extremely deadly." msgstr "" #: lang/json/json_items.py -msgid "fertilizer" +msgid "NX-17 charge rifle" msgstr "" #: lang/json/json_items.py -msgid "A token, representing fertilization of a plant." +msgid "" +"A multi-purpose rifle, designed for use in conjunction with a unified power " +"supply, or UPS. It does not reload normally; instead, press fire once to " +"start charging it from your UPS, then again to unload the charge." msgstr "" #: lang/json/json_items.py -msgid "syringe" +msgid "simple flamethr." msgstr "" #: lang/json/json_items.py -msgid "A medical syringe. Used for administering heroin and other drugs." +msgid "" +"A simple, home-made flamethrower. While its capacity is not superb, it is " +"more than capable of igniting terrain and monsters alike." msgstr "" #: lang/json/json_items.py -msgid "pointy stick" +msgid "flamethrower" msgstr "" #: lang/json/json_items.py -msgid "A simple wood pole with one end sharpened." +msgid "" +"A large flamethrower with substantial gas reserves. Very menacing and deadly." msgstr "" #: lang/json/json_items.py -msgid "2-by-sword" +msgid "tube 40mm launcher" msgstr "" #: lang/json/json_items.py msgid "" -"A two by four with a cross guard and whittled down point; not much for " -"slashing, but much better than your bare hands." +"A simple, home-made grenade launcher. Basically a tube with a pin firing " +"mechanism to activate the grenade." msgstr "" #: lang/json/json_items.py -msgid "nord" +msgid "M79 launcher" msgstr "" #: lang/json/json_items.py msgid "" -"The nail sword, or nord for short. This wooden sword has a dozen nails " -"sticking at jagged angles from edge of the blade, making it much better at " -"chopping than slashing." +"A widely-used grenade launcher that first saw use by American forces in the " +"Vietnam war. Though mostly replaced by more modern launchers, the M79 still " +"sees use with many units worldwide." msgstr "" #: lang/json/json_items.py -msgid "crude sword" +msgid "M320 launcher" msgstr "" #: lang/json/json_items.py msgid "" -"Several bits of thin scrap metal crudely beat into the semblance of an edge " -"over a wooden sword. The added weight is unbalanced, but the jagged edge " -"offers a good bit of slashing power." +"Developed by Heckler & Koch, the M320 grenade launcher has the functionality " +"of larger launchers in a very small package. However, its smaller size " +"contributes to a lack of accuracy." msgstr "" #: lang/json/json_items.py -msgid "forged sword" +msgid "Milkor MGL" msgstr "" #: lang/json/json_items.py msgid "" -"A common short sword, forged from several pieces of steel. The pointy end is " -"the dangerous one." +"The Milkor Multi-Grenade Launcher is designed to compensate for the drawback " +"of single-shot grenade launchers by allowing sustained heavy firepower. " +"However, it is still slow to reload and must be used with careful planning." msgstr "" #: lang/json/json_items.py -msgid "rope - 6 ft" +msgid "M72 LAW" msgstr "" #: lang/json/json_items.py -msgid "A short piece of nylon rope. Too small to be of much use." +msgid "" +"A disposable light anti-tank rocket launcher. Once fired, it cannot be " +"reloaded and must be disposed of." msgstr "" #: lang/json/json_items.py -msgid "steel chain" +msgid "coilgun" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy steel chain. Useful as a weapon, or for crafting. It has a chance to " -"wrap around your target, allowing for a bonus unarmed attack." +"A homemade gun, using electromagnets to accelerate a ferromagnetic " +"projectile to high velocity. Powered by UPS." msgstr "" #: lang/json/json_items.py -msgid "broom" +msgid "H&K G80 Railgun" msgstr "" #: lang/json/json_items.py msgid "" -"A long-handled broom. Makes a terrible weapon unless you're chasing cats." +"Developed by Heckler & Koch in 2033, the railgun magnetically propels a " +"ferromagnetic projectile using an alternating current. This makes it silent " +"while still deadly. Powered by UPS." msgstr "" #: lang/json/json_items.py -msgid "sledge hammer" +msgid "Boeing XM-P plasma rifle" msgstr "" #: lang/json/json_items.py msgid "" -"A large, heavy hammer. Makes a good melee weapon for the very strong, but is " -"nearly useless in the hands of the weak." +"Boeing developed the focused plasma weaponry together with DARPA. It heats " +"hydrogen to create plasma and envelops it with polymers to reduce blooming. " +"While powerful, it suffers from short range. Powered by UPS." msgstr "" #: lang/json/json_items.py -msgid "nail board" +msgid "shotgun revolver" msgstr "" #: lang/json/json_items.py msgid "" -"A long piece of wood with several nails through one end; essentially a " -"simple mace. Makes a great melee weapon." +"A shotgun modified to use a revolver cylinder mechanism, it can hold 6 " +"cartridges." msgstr "" #: lang/json/json_items.py -msgid "nail bat" +msgid "pipe shotgun" msgstr "" #: lang/json/json_items.py msgid "" -"A baseball bat with several nails driven through it, an excellent melee " -"weapon." +"A home-made shotgun. It is simply a pipe attached to a stock, with a hammer " +"to strike the single round it holds." msgstr "" #: lang/json/json_items.py -msgid "two by four" +msgid "sawn pipe shotgun" msgstr "" #: lang/json/json_items.py msgid "" -"A plank of wood. Makes a decent melee weapon, and can be used to board up " -"doors and windows if you have a hammer and nails." +"A home-made sawn off shotgun. It is simply a short pipe attached to a stock, " +"with a hammer to strike the single round it holds." msgstr "" #: lang/json/json_items.py -msgid "pipe" +msgid "LACP laser pistol" msgstr "" #: lang/json/json_items.py msgid "" -"A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." +"The LACP laser pistol was based on the v29 laser pistol designed in the " +"mid-21st century, while little more then duct tape and electonics it uses " +"the powerful fusion pack." msgstr "" #: lang/json/json_items.py -msgid "baseball bat" +msgid "RM51 assault rifle" msgstr "" #: lang/json/json_items.py -msgid "A sturdy wood bat. Makes a great melee weapon." +msgid "" +"Barely making it past the prototype stage before the world ended, the " +"Rivtech RM51 assault rifle was designed for durability and ease of use under " +"less than ideal circumstances." msgstr "" #: lang/json/json_items.py -msgid "aluminium bat" +msgid "RM88 battle rifle" msgstr "" #: lang/json/json_items.py msgid "" -"An aluminium baseball bat, lighter than a wooden bat and a little easier to " -"swing as a result." +"Barely making it past the prototype stage before the world ended, the " +"Rivtech RM88 battle rifle was designed for durability and extreme firepower " +"under less than ideal circumstances." msgstr "" #: lang/json/json_items.py -msgid "wood spear" +msgid "RM614 LMG" msgstr "" #: lang/json/json_items.py -msgid "A stout pole with an improvised grip and a fire-hardened point." +msgid "" +"Utilizing a powerful and unusual caliber, the Rivtech RM614 light machine " +"gun was designed for durability and extreme volume of sustained fire under " +"the worst possible circumstances." msgstr "" #: lang/json/json_items.py -msgid "steel spear" +msgid "RM2000 submachine gun" msgstr "" #: lang/json/json_items.py -msgid "A stout metal pole with a sharp point." +msgid "" +"Utilizing a powerful and unusual caliber, the Rivtech RM2000 submachine gun " +"was designed for durability and ease of carrying under less than ideal " +"circumstances." msgstr "" #: lang/json/json_items.py -msgid "expandable baton" +msgid "RM99 revolver" msgstr "" #: lang/json/json_items.py msgid "" -"A telescoping baton that collapses for easy storage. Makes an excellent " -"melee weapon." +"Considered overkill by some, the Rivtech M99 remains an exceedingly powerful " +"addition to the arsenal of any gunslinger." msgstr "" #: lang/json/json_items.py -msgid "bee sting" +msgid "RM103A automagnum" msgstr "" #: lang/json/json_items.py -msgid "A six-inch stinger from a giant bee. Makes a good melee weapon." +msgid "" +"Considered overkill by many, the Rivtech M103A remains one of the most " +"powerful sidearms ever developed." msgstr "" #: lang/json/json_items.py -msgid "fungal fighter sting" +msgid "pneumatic assault rifle" msgstr "" #: lang/json/json_items.py -msgid "A short dart from a fungal fighter. Makes an average melee weapon." +msgid "" +"A multistroke pneumatic rifle handcrafted from scrap. It is very quiet and " +"deadly." msgstr "" #: lang/json/json_items.py -msgid "wasp sting" +msgid "pneumatic bolt driver" msgstr "" #: lang/json/json_items.py -msgid "A six-inch stinger from a giant wasp. Makes a good melee weapon." +msgid "" +"An eight-shot, revolving barrel, pneumatic bolt driver handcrafted from " +"scrap. It is very quiet and deadly." msgstr "" #: lang/json/json_items.py -msgid "walking cane" +msgid "12 gauge pistol" msgstr "" #: lang/json/json_items.py msgid "" -"Handicapped or not, you always walk in style. Consisting of a metal " -"headpiece and a wooden body, this makes a great bashing weapon in a pinch." +"A single shot pistol that loads 12 gauge shotgun shells, handcrafted from " +"scrap." msgstr "" #: lang/json/json_items.py -msgid "mace" +msgid "flaregun" msgstr "" #: lang/json/json_items.py -msgid "" -"A medieval weapon consisting of a wood handle with a heavy iron end. It is " -"heavy and slow, but its crushing damage is devastating." +msgid "A plastic single shot pistol made to fire signal flares." msgstr "" #: lang/json/json_items.py -msgid "morningstar" +msgid "A7 laser rifle" msgstr "" #: lang/json/json_items.py msgid "" -"A medieval weapon consisting of a wood handle with a heavy, spiked iron ball " -"on the end. It deals devastating crushing damage, with a small amount of " -"piercing to boot." +"A state of the art laser rifle, made by Aerial Industries; turn those foes " +"into ash!" msgstr "" #: lang/json/json_items.py -msgid "pool cue" +msgid "spraycan flamethrower" msgstr "" #: lang/json/json_items.py msgid "" -"A hard-wood stick designed for hitting colorful balls around a felt table. " -"Truly, the coolest of sports." +"A favourite of hooligans around the world, this lighter duct-taped to a " +"spray can is probably as dangerous to the user as anyone else. The nozzle " +"has been crudely modified to disperse gasoline, and a small pump attached to " +"the side allows for repressurization, though this process takes takes a few " +"minutes." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "spike" +#: lang/json/json_items.py +msgid "M3 recoilless rifle" msgstr "" #: lang/json/json_items.py msgid "" -"A large and slightly misshapen spike, could do some damage mounted on a " -"vehicle." +"Manufactured in Sweden, the Carl Gustav M3 is a breech-loading 84 millimeter " +"man-portable, reusable, multi-role recoilless rifle commonly used by the US " +"military." msgstr "" #: lang/json/json_items.py -msgid "wooden javelin" +msgid "M202 FLASH" msgstr "" #: lang/json/json_items.py msgid "" -"A wooden spear, honed to a sharper point and fire hardened for toughness. " -"The grip area has also be carved and covered for better grip." +"A massive and deadly four shot 66 millimeter man-portable, reusable, " +"thermobaric rocket launcher." msgstr "" #: lang/json/json_items.py -msgid "poppy flower" +msgid "RPG-7" msgstr "" #: lang/json/json_items.py -msgid "A poppy stalk with some petals." +msgid "" +"The famous RPG-7 rocket launcher. This ubiquitous rocket launcher is cheap " +"to maufacture and is easy to handle. Often used by terrorists, it's not as " +"precise as other weapons." msgstr "" #: lang/json/json_items.py -msgid "a poppy bud" +msgid "RM216 SPIW" msgstr "" #: lang/json/json_items.py -msgid "Contains some substances commonly produced by mutated poppy flower" +msgid "" +"This light carbine fires 5x50mm armor-piercing flechette cartridges. " +"Classified as a special purpose individual weapon, this advanced firearm was " +"developed by Rivtech for the US military shortly before the end of the " +"world. Designed to be fired in bursts, it excels in close combat." msgstr "" #: lang/json/json_items.py -msgid "adamantite claws" +msgid "fusion blaster rifle" msgstr "" #: lang/json/json_items.py -msgid "Short and sharp claws made from a high-tech metal." +msgid "" +"A cyborg's fusion blaster arm, cannibalized and converted into a rifle. This " +"improvised weapon is powered by a standard UPS connection." msgstr "" #: lang/json/json_items.py -msgid "punch dagger" +msgid "ferromagnetic rail rifle" msgstr "" #: lang/json/json_items.py msgid "" -"A short and sharp double edged dagger made to be gripped in the palm, with " -"the blade protruding between the fingers." +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." msgstr "" #: lang/json/json_items.py -msgid "10 plastic bags" +msgid "Barrett M107A1" msgstr "" #: lang/json/json_items.py msgid "" -"10 plastic bags, folded smooth and wrapped tightly together with a string." +"A large, shoulder-fired, .50 caliber anti-materiel rifle. Its large size, " +"recoil, and noise is offset by its damage and range." msgstr "" #: lang/json/json_items.py -msgid "money bundle" +msgid "socks" msgstr "" #: lang/json/json_items.py -msgid "A bundle holding many 20 dollar bills, pretty useless now though" +msgid "Socks. Put 'em on your feet." msgstr "" #: lang/json/json_items.py -msgid "cell phone" +msgid "wool socks" msgstr "" #: lang/json/json_items.py -msgid "" -"A simple cell phone. Nowadays only useful for telling the time or as an " -"alarm clock. Can also be disassembled into some useful parts." +msgid "Warm socks made of wool." msgstr "" #: lang/json/json_items.py -msgid "pocket watch" +msgid "sneakers" msgstr "" #: lang/json/json_items.py -msgid "" -"An old fashioned pocket watch. This one tells you the time and looks good " -"doing it. Can also be disassembled into some useful parts." +msgid "Guaranteed to make you run faster and jump higher!" msgstr "" #: lang/json/json_items.py -msgid "umbrella" +msgid "cleats" msgstr "" #: lang/json/json_items.py -msgid "An umbrella with a pointy end, useful for keeping dry when wielded." +msgid "" +"Sport shoes with hard undersides, and studs on the bottom designed to dig " +"into the grass." msgstr "" #: lang/json/json_items.py -msgid "A fish bowl" +msgid "football armor" msgstr "" #: lang/json/json_items.py msgid "" -"A filled fish bowl, the tag says to Ed and the fish's name Hoss. It appears " -"the fish has tiny antlers" +"Heavy plastic armor for your upper torso. Normally worn by football players." msgstr "" #: lang/json/json_items.py -msgid "steel knuckles" +msgid "football helmet" msgstr "" #: lang/json/json_items.py -msgid "" -"A mass of scrap metal crudely beat into shape, with folded rags underneath " -"to protect the wearers knuckles. A good, quick weapon - but you have to get " -"within punching range to use it." +msgid "A heavy plastic helmet normally worn by football players." msgstr "" #: lang/json/json_items.py -msgid "razorbar katar" +msgid "boots" msgstr "" #: lang/json/json_items.py -msgid "" -"Five pieces of rebar sharpened to cruel points and strapped to a brace " -"fastened at wrist and forearm on both arms. The next bub better watch out." +msgid "Tough leather boots. Very durable." msgstr "" #: lang/json/json_items.py -msgid "cestus" +msgid "fur boots" msgstr "" #: lang/json/json_items.py -msgid "" -"A heavy metal guard that covers the fist and increases striking power, with " -"stout padding underneath to protect the wearers hand." +msgid "Boots lined with fur for warmth." msgstr "" #: lang/json/json_items.py -msgid "brass knuckles" +msgid "steeltoed boots" msgstr "" #: lang/json/json_items.py -msgid "" -"A metal weapon made of brass, designed to be gripped in the palm and cause " -"punches to do extra damage. A good, quick weapon - but you have to get " -"within punching range to use it." +msgid "Leather boots with a steel toe. Extremely durable." msgstr "" #: lang/json/json_items.py -msgid "hockey stick" +msgid "combat boots" msgstr "" #: lang/json/json_items.py -msgid "" -"A curved wooden stick with a wide and flat end. Commonly used by hockey " -"players." +msgid "Modern reinforced tactical combat boots. Very durable." msgstr "" #: lang/json/json_items.py -msgid "golf club" +msgid "hiking boots" msgstr "" #: lang/json/json_items.py -msgid "" -"A long handle with a big metal head, flat on one side, for driving golf " -"balls. Fore!" +msgid "Tough yet light leather boots. Very durable and comfortable." msgstr "" #: lang/json/json_items.py -msgid "rock in a sock" +msgid "winter boots" msgstr "" #: lang/json/json_items.py -msgid "" -"A sock with a rock tied into the end of it. A true weapon of desperation." +msgid "Cumbersome boots designed for warmth." msgstr "" #: lang/json/json_items.py -msgid "charcoal kiln" +msgid "mocassins" msgstr "" #: lang/json/json_items.py -msgid "" -"A stout metal box used for producing charcoal via pyrolysis; the incomplete " -"burning of organic materials in the absence of oxygen." +msgid "Simple shoes made from animal pelts." msgstr "" #: lang/json/json_items.py -msgid "tonfa" +msgid "flip-flops" msgstr "" #: lang/json/json_items.py -msgid "" -"A hard plastic truncheon commonly employed by police. Originally an Okinawan " -"weapon, it consists of a stick with a perpendicular handle attached a third " -"of the way down its length." +msgid "Simple sandals. Very difficult to run in." msgstr "" #: lang/json/json_items.py -msgid "wooden tonfa" +msgid "dress shoes" msgstr "" #: lang/json/json_items.py -msgid "" -"A stout wooden truncheon of the sort commonly employed by police. Originally " -"an Okinawan weapon, it consists of a stick with a perpendicular handle " -"attached a third of the way down its length." +msgid "Fancy patent leather shoes. Not designed for running in." msgstr "" #: lang/json/json_items.py -msgid "atomic nightlight" +msgid "heels" msgstr "" #: lang/json/json_items.py -msgid "" -"Enjoy the serene Cherenkov-blue glow of the Rivtech atomic nightlight, and " -"feel confident that you won't have to worry about depleting its power supply " -"for at least 160 million years of faithful service." +msgid "A pair of high heels. Difficult to even walk in." msgstr "" #: lang/json/json_items.py -msgid "atomic coffee maker" +msgid "chitinous boots" msgstr "" #: lang/json/json_items.py -msgid "" -"Never sacrifice taste for convenience, when you can have both with the " -"Rivtech atomic coffee maker! Its simple and robust atomic-age construction " -"guarantees a service life of at least 160 million years." +msgid "Boots made from the exoskeletons of insects. Light and durable." msgstr "" #: lang/json/json_items.py -msgid "copper tubing" +msgid "bone armor boots" msgstr "" #: lang/json/json_items.py msgid "" -"A copper tube, too thin to be much use ad a melee weapon, but will do if " -"nothing else is available. Useful in a few crafting recipes." +"Leather boots armored with reinforcements made from bone. Light and strong." msgstr "" #: lang/json/json_items.py -msgid "" -"A set of universal batteries. Used to charge almost any electronic device." +msgid "leather armor boots" msgstr "" #: lang/json/json_items.py -msgid "A small quantity of thread that could be used to refill a sewing kit." +msgid "" +"Thick leather boots made specifically to protect the feet. Light and tough." msgstr "" #: lang/json/json_items.py -msgid "sinew" +msgid "swimming trunks" msgstr "" #: lang/json/json_items.py -msgid "A tough sinew cut from a corpse, usable as thread." +msgid "A pair of swimming trunks, with netting." msgstr "" #: lang/json/json_items.py -msgid "plant fibre" +msgid "shorts" msgstr "" #: lang/json/json_items.py -msgid "Tough thin fibres, taken from a plant. Can be used as thread." +msgid "A pair of khaki shorts." msgstr "" #: lang/json/json_items.py -msgid "duct tape" +msgid "cargo shorts" msgstr "" #: lang/json/json_items.py -msgid "A roll of incredibly strong tape. Its uses are innumerable." +msgid "A pair of shorts lined with pockets, offering decent storage." msgstr "" #: lang/json/json_items.py -msgid "copper wire" +msgid "jeans" msgstr "" #: lang/json/json_items.py -msgid "Plastic jacketed copper cable of the type used in small electronics." +msgid "A pair of blue jeans with two deep pockets." msgstr "" #: lang/json/json_items.py -msgid "plutonium cell" +msgid "pants" msgstr "" #: lang/json/json_items.py -msgid "" -"A nuclear-powered battery. Used to charge advanced and rare electronics." +msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" #: lang/json/json_items.py -msgid "A box of nails, mainly useful with a hammer." +msgid "leather pants" msgstr "" #: lang/json/json_items.py -msgid "A handful of pebbles, useful as ammunition for slings." +msgid "" +"A pair of black leather pants. Very tough, but cumbersome and without much " +"storage." msgstr "" #: lang/json/json_items.py -msgid "darts" +msgid "leather chaps" msgstr "" #: lang/json/json_items.py -msgid "A handful of darts, useful as ammunition for blowguns." +msgid "" +"A pair of black leather chaps. Very tough, and light, but doesn't offer any " +"storage." msgstr "" #: lang/json/json_items.py -msgid "bearings" +msgid "cargo pants" msgstr "" #: lang/json/json_items.py -msgid "A box of ball bearings, useful as ammunition for slings." +msgid "A pair of pants lined with pockets, offering lots of storage." msgstr "" #: lang/json/json_items.py -msgid "BB" +msgid "army pants" msgstr "" #: lang/json/json_items.py -msgid "A box of small steel balls. They deal virtually no damage." +msgid "A tough pair of pants lined with pockets. Favored by the military." msgstr "" #: lang/json/json_items.py -msgid "feather" +msgid "army jacket" msgstr "" #: lang/json/json_items.py -msgid "Feathers from a bird. Useful for fletching arrows" +msgid "A tough jacket with lots of pockets. Favored by the military." msgstr "" #: lang/json/json_items.py -msgid "birdshot" +msgid "ski pants" msgstr "" #: lang/json/json_items.py -msgid "" -"Weak shotgun ammunition. Designed for hunting birds and other small game, " -"its applications in combat are very limited." +msgid "A pair of pants meant for alpine skiing." msgstr "" #: lang/json/json_items.py -msgid "00 shot" +msgid "fur pants" msgstr "" #: lang/json/json_items.py -msgid "" -"A shell filled with iron pellets. Extremely damaging, plus the spread makes " -"it very accurate at short range. Favored by SWAT forces." +msgid "A hefty pair of fur-lined pants." msgstr "" #: lang/json/json_items.py -msgid "shotgun slug" +msgid "long underwear top" msgstr "" #: lang/json/json_items.py -msgid "" -"A heavy metal slug used with shotguns to give them the range capabilities of " -"a rifle. Extremely damaging but rather inaccurate. Works best in a shotgun " -"with a rifled barrel." +msgid "A long underwear top that helps to maintain body temperature." msgstr "" #: lang/json/json_items.py -msgid "explosive slug" +msgid "long underwear bottom" msgstr "" #: lang/json/json_items.py -msgid "" -"A shotgun slug loaded with concussive explosives. While the slug itself will " -"not do much damage to its target, it will explode on contact." +msgid "A pair of long underwear that help to maintain body temperature." msgstr "" #: lang/json/json_items.py -msgid "flechette shell" +msgid "union suit" msgstr "" #: lang/json/json_items.py msgid "" -"A shotgun shell filled with tiny steel darts. Extremely damaging, plus the " -"spread makes it very accurate at short range. Slices through most forms of " -"armor with ease." +"A one-piece suit of full-body long underwear that helps to maintain body " +"temperature." msgstr "" #: lang/json/json_items.py -msgid ".22 LR" +msgid "arm warmers" msgstr "" #: lang/json/json_items.py -msgid "" -"One of the smallest calibers available, the .22 Long Rifle cartridge has " -"maintained popularity for nearly two centuries. Its minimal recoil, low cost " -"and low noise are offset by its paltry damage." +msgid "Snug, soft cloth sleeves to keep your arms warm." msgstr "" #: lang/json/json_items.py -msgid ".22 FMJ" +msgid "leg warmers" msgstr "" #: lang/json/json_items.py -msgid "A brass-jacketed .22 caliber round with superior penetration capacity." +msgid "Snug, soft cloth sleeves to keep your legs warm." msgstr "" #: lang/json/json_items.py -msgid ".22 CB" +msgid "skirt" msgstr "" #: lang/json/json_items.py msgid "" -"Conical Ball .22 is a variety of .22 ammunition with a very small propellant " -"charge and generally lacks gunpowder. The end result is a subsonic round. It " -"is nearly silent, but is so weak as to be nearly useless." +"A short, breezy cotton skirt. Easy to move in, but only has a single small " +"pocket." msgstr "" #: lang/json/json_items.py -msgid ".22 rat-shot" +msgid "jumpsuit" msgstr "" #: lang/json/json_items.py msgid "" -"Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " -"other small vermin while being unable to damage walls. It has an extremely " -"short range and is unable to injure all but the smallest creatures." +"A thin, short-sleeved jumpsuit; similar to those worn by prisoners. Provides " +"decent storage and is not very encumbering." +msgstr "" + +#: lang/json/json_items.py +msgid "wolf suit" msgstr "" #: lang/json/json_items.py msgid "" -"9 millimeter parabellum is generally regarded as the most popular handgun " -"cartridge and used by the majority of US police forces. It is also a very " -"popular round in sub-machine guns." +"A full body fursuit in the form of an anthropomorphic wolf. It is quite " +"encumbering and has little storage but is very warm." msgstr "" #: lang/json/json_items.py -msgid "9mm +P" +msgid "clown suit" msgstr "" #: lang/json/json_items.py msgid "" -"Attempts to improve the ballistics of 9mm ammunition lead to high-pressure " -"rounds. Increased velocity results in superior accuracy and damage." +"A colorful and ridiculous costume fit for a clown. Provides decent storage." msgstr "" #: lang/json/json_items.py -msgid "9mm +P+" +msgid "clown shoes" msgstr "" #: lang/json/json_items.py -msgid "" -"A step beyond the high-pressure 9mm +P round, the +P+ has an even higher " -"internal pressure that offers a degree of armor-penetrating ability." +msgid "Gigantic shoes fit for a clown. Incredibly difficult to walk in." msgstr "" #: lang/json/json_items.py -msgid "9mm FMJ" +msgid "bondage suit" msgstr "" #: lang/json/json_items.py msgid "" -"A brass-jacketed 9mm Parabellum round. This increases penetration slightly " -"at the cost of reduced expansion." +"A suit of snug, black leather. Has no pockets, but does feature an abundance " +"of unusually located zippers." msgstr "" #: lang/json/json_items.py -msgid "7.62mm Type P" +msgid "bondage mask" msgstr "" #: lang/json/json_items.py msgid "" -"This small caliber pistol round offers good armor penetration at the cost of " -"slightly less damage. It is rarely used outside of the Chinese army." +"A tight mask made of black leather. The eyes and mouth can be closed using " +"zippers." msgstr "" #: lang/json/json_items.py -msgid ".38 Special" +msgid "leather corset" msgstr "" #: lang/json/json_items.py msgid "" -"The .38 Smith & Wesson Special enjoyed popularity among US police forces " -"throughout the 20th century. It is most commonly used in revolvers." +"A snug, black leather corset. Has no pockets, but its thick material " +"provides good protection from harm." msgstr "" #: lang/json/json_items.py -msgid ".38 Super" +msgid "wetsuit" msgstr "" #: lang/json/json_items.py -msgid "" -"The .38 Super is a high-pressure load of the .38 Special caliber. It is a " -"popular choice in pistol competitions for its high accuracy, while its " -"stopping power keeps it popular for self-defense." +msgid "A full-body neoprene wetsuit." msgstr "" #: lang/json/json_items.py -msgid ".38 FMJ" +msgid "swimming booties" msgstr "" #: lang/json/json_items.py -msgid "" -"A brass-jacketed .38 round. This increases penetration slightly at the cost " -"of reduced expansion." +msgid "A pair of neoprene swimming booties, with individual toes." msgstr "" #: lang/json/json_items.py -msgid "10mm Auto" +msgid "swimming gloves" msgstr "" #: lang/json/json_items.py msgid "" -"Originally used by the FBI, the organization eventually abandoned the round " -"due to its high recoil. Although respected for its versatility and power, it " -"has largely been supplanted by the downgraded .40 S&W." +"A pair of very flexible neoprene-silicon rubber gloves, suitable for " +"underwater use." msgstr "" #: lang/json/json_items.py -msgid ".40 S&W" +msgid "spring suit" msgstr "" #: lang/json/json_items.py msgid "" -"The .40 Smith & Wesson round was developed as an alternative to 10mm Auto " -"for the FBI after they complained of high recoil. It is as accurate as 9mm, " -"but has greater stopping power, leading to widespread use in law enforcement." +"A long-sleeved spring wetsuit with pink color details and cleavage-" +"enhancing, hip-accentuating construction. Not as protective as a full-body " +"suit, but also less oppressive." msgstr "" #: lang/json/json_items.py -msgid ".40 FMJ" +msgid "dress" msgstr "" #: lang/json/json_items.py msgid "" -"A brass-jacketed .40 Smith & Wesson round. This increases penetration " -"slightly at the cost of reduced expansion." +"A long cotton dress. Though comfortable to wear, it lacks any storage space." msgstr "" #: lang/json/json_items.py -msgid ".44 Magnum" +msgid "sundress" msgstr "" #: lang/json/json_items.py msgid "" -"Described (in 1971) by Dirty Harry as \"the most powerful handgun in the " -"world,\" the .44 Magnum gained widespread popularity due to its depictions " -"in the media. In reality, its intense recoil makes it unsuitable in most " -"cases." +"A light and breezy cotton dress. Though cool and comfortable to wear, it " +"lacks any storage space." msgstr "" #: lang/json/json_items.py -msgid ".44 FMJ" +msgid "lowtop tennis shoes" msgstr "" #: lang/json/json_items.py -msgid "" -"A brass-jacketed variant of the .44 Magnum round. This increases " -"penetration slightly at the cost of reduced damage from expansion." +msgid "Lightweight shoes made of cloth and rubber." msgstr "" #: lang/json/json_items.py -msgid ".45 ACP" +msgid "wedding dress" msgstr "" #: lang/json/json_items.py -msgid "" -"The .45 round was one of the most popular and powerful handgun rounds " -"through the 20th century. It features very good accuracy and stopping power, " -"but suffers from moderate recoil and poor armor penetration." +msgid "A beautiful white wedding dress. What good will it be now?" msgstr "" #: lang/json/json_items.py -msgid ".45 FMJ" +msgid "chitinous armor" msgstr "" #: lang/json/json_items.py msgid "" -"Full Metal Jacket .45 rounds are designed to overcome the poor armor " -"penetration of the standard ACP round. However, they are less likely to " -"expand upon impact, resulting in reduced damage overall." +"Leg and body armor made from the exoskeletons of insects. Light and durable." msgstr "" #: lang/json/json_items.py -msgid ".45 Super" +msgid "bone body armor" msgstr "" #: lang/json/json_items.py msgid "" -"The .45 Super round is an updated variant of .45 ACP. It is overloaded, " -"resulting in a great increase in muzzle velocity. This translates to higher " -"accuracy and range, a minor armor piercing capability, and greater recoil." +"Body armor consisting of a leather backing suit with bone reinforcement. " +"Light and strong." msgstr "" #: lang/json/json_items.py -msgid ".454 Casull" +msgid "leather body armor" msgstr "" #: lang/json/json_items.py -msgid "" -"The .454 Casull round a very powerful revolver round capable of killing huge " -"game, like elephants, with ease. It's designed to be used with the Taurus " -"Raging Bull." +msgid "Thick leather body armor. Light and comfortable." msgstr "" #: lang/json/json_items.py -msgid ".500 S&W Magnum" +msgid "boiled leather armor" msgstr "" #: lang/json/json_items.py msgid "" -"Claimed to be the world's most powerful handgun round, the .500 S&W Magnum " -"was developed in tandem with the revolutionary S&W 500 Revolver." +"Thick leather body armor that has been hardened via chemical treatment. " +"Light and strong." msgstr "" #: lang/json/json_items.py -msgid "5.7x28mm" +msgid "fur body armor" msgstr "" #: lang/json/json_items.py -msgid "" -"The 5.7x28mm round is a proprietary round developed by FN Hestal for use in " -"their P90 SMG. While it is a very small round, comparable in power to .22, " -"it features incredible armor-piercing capabilities and very low recoil." +msgid "Thick body armor made from furs. Warm and comfortable." msgstr "" #: lang/json/json_items.py -msgid "4.6x30mm" +msgid "plated leather armor" msgstr "" #: lang/json/json_items.py msgid "" -"Designed by Heckler & Koch to compete with the 5.7x28mm round, 4.6x30mm is, " -"like the 5.7, designed to minimize weight and recoil while increasing " -"penetration of body armor. Its low recoil makes it ideal for automatic fire." +"Thick leather body armor that has been reinforced with strategically-placed " +"metal plates. Strong and comfortable." msgstr "" #: lang/json/json_items.py -msgid "7.62x39mm M43" +msgid "leather touring suit" msgstr "" #: lang/json/json_items.py msgid "" -"Designed during World War II by the Soviet Union, the popularity of the " -"AK-47 and the SKS contributed to the widespread adoption of the 7.62x39mm " -"rifle round. However, due to its lack of yaw, this round deals less damage " -"than most." +"A thick leather body suit made for protection while riding motorcycles. " +"Light and very comfortable." msgstr "" #: lang/json/json_items.py -msgid "7.62x39mm M67" +msgid "suit" msgstr "" #: lang/json/json_items.py msgid "" -"The M67 variant of the popular 7.62x39mm rifle round was designed to improve " -"yaw. This causes the round to tumble inside a target, causing significantly " -"more damage. It is still outdone by shattering rounds." +"A full-body cotton suit. Makes the apocalypse a truly gentlemanly experience." msgstr "" #: lang/json/json_items.py -msgid ".223 Remington" +msgid "tuxedo" msgstr "" #: lang/json/json_items.py -msgid "" -"The .223 rifle round is a civilian variant of the 5.56 NATO round. It is " -"designed to tumble or fragment inside a target, dealing devastating damage. " -"The lower pressure of the .223 compared to the 5.56 results in lower " -"accuracy." +msgid "A full-body tuxedo. Makes the apocalypse feel a little more classy." msgstr "" #: lang/json/json_items.py -msgid "5.56 NATO" +msgid "cleansuit" msgstr "" #: lang/json/json_items.py msgid "" -"This rifle round has enjoyed widespread use in NATO countries, thanks to its " -"very light weight and high damage. It is designed to shatter inside a " -"target, inflicting massive damage." +"A simple hazardous materials handling suit. Though somewhat restrictive and " +"fragile, wearing it will provide excellent protection against ambient " +"radiation." msgstr "" #: lang/json/json_items.py -msgid "5.56 incendiary" +msgid "AEP suit" msgstr "" #: lang/json/json_items.py msgid "" -"A variant of the widely-used 5.56 NATO round, incendiary rounds are designed " -"to burn hotly upon impact, piercing armor and igniting flammable substances." +"An armored environmental protection suit. Custom-built from a cleansuit and " +"body armor, it provides excellent protection against both physical harm and " +"ambient radiation." msgstr "" #: lang/json/json_items.py -msgid ".270 Winchester" +msgid "hazmat suit" msgstr "" #: lang/json/json_items.py msgid "" -"Based off the military .30-03 round, the .270 rifle round is compatible with " -"most guns that fire .30-06 rounds. However, it is designed for hunting, and " -"is less powerful than the military rounds, with nearly no armor penetration." +"An impermeable whole-body garment worn as protection against hazardous " +"materials. Though very restrictive and fragile, wearing it will provide " +"complete protection against ambient radiation." msgstr "" #: lang/json/json_items.py -msgid ".30-06 AP" +msgid "ANBC suit" msgstr "" #: lang/json/json_items.py msgid "" -"The .30-06 is a very powerful rifle round designed for long-range use. Its " -"stupendous accuracy and armor piercing capabilities make it one of the most " -"deadly rounds available, offset only by its drastic recoil and noise." +"An armored, impermeable whole-body garment worn as protection against danger " +"of all sorts, functioning as body armor as well as protecting from nuclear, " +"biological, and chemical hazards." msgstr "" #: lang/json/json_items.py -msgid ".30-06 FMJ" +msgid "survivor mask" msgstr "" #: lang/json/json_items.py msgid "" -"A brass-jacketed variant of the .30-06 round. Both penetration and stopping " -"power are between the military and other civilian versions of the round." +"A custom-built, reinforced gas mask that covers the face and eyes. Provides " +"excellent protection from smoke, teargas, and shrapnel." msgstr "" #: lang/json/json_items.py -msgid ".30-06 incendiary" +msgid "survivor vest" msgstr "" #: lang/json/json_items.py msgid "" -"A variant of the powerful .30-06 sniper round, incendiary rounds are " -"designed to burn hotly upon impact, piercing armor and igniting flammable " -"substances." +"A custom-built light vest covered with pockets and pouches. Durable and " +"carefully crafted to be comfortable to wear." msgstr "" #: lang/json/json_items.py -msgid ".308 Winchester" +msgid "ornamental plate armor" msgstr "" #: lang/json/json_items.py -msgid "" -"The .308 Winchester is a rifle round, the commercial equivalent of the " -"military 7.62x51mm round. Its high accuracy and phenomenal damage have made " -"it the most popular hunting round in the world." +msgid "An extremely heavy ornamental suit of armor." msgstr "" #: lang/json/json_items.py -msgid "7.62x51mm" +msgid "t shirt" msgstr "" #: lang/json/json_items.py -msgid "" -"The 7.62x51mm largely replaced the .30-06 round as the standard military " -"rifle round. It is lighter, but offers similar velocities, resulting in " -"greater accuracy and reduced recoil." +msgid "A short-sleeved cotton shirt." msgstr "" #: lang/json/json_items.py -msgid "7.62x51mm incendiary" +msgid "long-sleeved shirt" msgstr "" #: lang/json/json_items.py -msgid "" -"A variant of the powerful 7.62x51mm round, incendiary rounds are designed to " -"burn hotly upon impact, piercing armor and igniting flammable substances." +msgid "A long-sleeved cotton shirt." msgstr "" #: lang/json/json_items.py -msgid "fusion pack" +msgid "flag shirt" msgstr "" #: lang/json/json_items.py -msgid "" -"In the middle of the 21st Century, military powers began to look towards " -"energy based weapons. The result was the standard fusion pack, capable of " -"delivering bolts of superheated gas at near light speed with no recoil." +msgid "A t-shirt embroidered with the pattern of an American flag." msgstr "" #: lang/json/json_items.py -msgid "40mm concussive" +msgid "polo shirt" msgstr "" #: lang/json/json_items.py -msgid "A 40mm grenade with a concussive explosion load." +msgid "A short-sleeved cotton shirt, slightly thicker than a t-shirt." msgstr "" #: lang/json/json_items.py -msgid "40mm frag" +msgid "dress shirt" msgstr "" #: lang/json/json_items.py -msgid "" -"A 40mm grenade with a small explosive load and a high number of damaging " -"fragments." +msgid "A white button-down shirt with long sleeves. Looks professional!" msgstr "" #: lang/json/json_items.py -msgid "40mm incendiary" +msgid "sheriff's shirt" msgstr "" #: lang/json/json_items.py -msgid "" -"A 40mm grenade with a small napalm load, designed to create a burst of flame." +msgid "A tan button-down shirt with long sleeves." msgstr "" #: lang/json/json_items.py -msgid "40mm teargas" +msgid "camo tank top" msgstr "" #: lang/json/json_items.py -msgid "" -"A 40mm grenade with a teargas load. It will burst in a cloud of highly " -"incapacitating gas." +msgid "A sleeveless cotton shirt with camouflage dye. Very easy to move in." msgstr "" #: lang/json/json_items.py -msgid "40mm smoke cover" +msgid "tank top" msgstr "" #: lang/json/json_items.py -msgid "" -"A 40mm grenade with a smoke load. It will burst in a cloud of harmless gas, " -"and will also leave a streak of smoke cover in its wake." +msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" #: lang/json/json_items.py -msgid "40mm flashbang" +msgid "bikini top" msgstr "" #: lang/json/json_items.py -msgid "" -"A 40mm grenade with a flashbang load. It will detonate with a blast of light " -"and sound, designed to blind, deafen, and disorient anyone nearby." +msgid "A simple bikini top." msgstr "" #: lang/json/json_items.py -msgid "40mm acid bomb" +msgid "leather bikini top" msgstr "" #: lang/json/json_items.py -msgid "A 40mm grenade with an acid bomb load." +msgid "A simple leather bikini top." msgstr "" #: lang/json/json_items.py -msgid "40mm buckshot" +msgid "fur bikini top" msgstr "" #: lang/json/json_items.py -msgid "A 40mm grenade with a buckshot load." +msgid "A simple fur bikini top." msgstr "" #: lang/json/json_items.py -msgid "40mm flechette" +msgid "hot pants" msgstr "" #: lang/json/json_items.py -msgid "A 40mm grenade with an armor-piercing flechette load." +msgid "A simple pair of short shorts." msgstr "" #: lang/json/json_items.py -msgid "66mm HEAT" +msgid "leather hot pants" msgstr "" #: lang/json/json_items.py -msgid "" -"A 60mm High Explosive Anti Tank round. It could blow through up to two feet " -"of concrete." +msgid "A simple pair of leather short shorts." msgstr "" #: lang/json/json_items.py -msgid "H&K 12mm" +msgid "fur hot pants" msgstr "" #: lang/json/json_items.py -msgid "" -"The Heckler & Koch 12mm projectiles are used in H&K railguns. It's made of a " -"ferromagnetic metal, probably cobalt." +msgid "A simple pair of fur short shorts." +msgstr "" + +#: lang/json/json_items.py +msgid "loincloth" msgstr "" #: lang/json/json_items.py msgid "" -"A canister of hydrogen. With proper equipment, it could be heated to plasma." +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." msgstr "" #: lang/json/json_items.py -msgid "charge" +msgid "fur loincloth" msgstr "" #: lang/json/json_items.py -msgid "A weak plasma charge." +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." msgstr "" #: lang/json/json_items.py -msgid "shotgun hull" +msgid "leather loincloth" msgstr "" #: lang/json/json_items.py -msgid "An empty hull from a shotgun round." +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." msgstr "" #: lang/json/json_items.py -msgid "9mm casing" +msgid "sweatshirt" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a 9mm round." +msgid "A thick cotton shirt. Provides warmth and a bit of padding." msgstr "" #: lang/json/json_items.py -msgid ".22 casing" +msgid "sweater" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .22 round." +msgid "A wool shirt. Provides warmth." msgstr "" #: lang/json/json_items.py -msgid ".38 casing" +msgid "hoodie" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .38 round." +msgid "" +"A sweatshirt with a hood and a \"kangaroo pocket\" in front for storage." msgstr "" #: lang/json/json_items.py -msgid ".40 casing" +msgid "sports jersey" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .40 round." +msgid "" +"A shirt made of thick material imprinted with the name and logo of a sports " +"team." msgstr "" #: lang/json/json_items.py -msgid ".44 casing" +msgid "under armor" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .44 round." +msgid "Sports wear that clings to your chest to maintain body temperature." msgstr "" #: lang/json/json_items.py -msgid ".45 casing" +msgid "tights" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .45 round." +msgid "" +"A snug cloth garment which clings tightly to the legs and can help maintain " +"body temperature." msgstr "" #: lang/json/json_items.py -msgid ".454 Casull casing" +msgid "light jacket" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .454 Casull round." +msgid "A thin cotton jacket with a hood. Good for brisk weather." msgstr "" #: lang/json/json_items.py -msgid ".500 S&W Magnum casing" +msgid "jean jacket" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .500 S&W Magnum round." +msgid "A jacket made from denim. Provides decent protection from cuts." msgstr "" #: lang/json/json_items.py -msgid "5.7x28mm casing" +msgid "flannel jacket" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a 5.7x28mm round." +msgid "" +"A jacket made from flannel style denim favored by woodsman. Provides decent " +"protection from cuts." msgstr "" #: lang/json/json_items.py -msgid "4.6x30mm casing" +msgid "blazer" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a 4.6x30mm round." +msgid "A professional-looking wool blazer. Quite cumbersome." msgstr "" #: lang/json/json_items.py -msgid "7.62x39mm casing" +msgid "leather jacket" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a 7.62x39mm round." +msgid "" +"A jacket made from thick leather. Cumbersome, but offers excellent " +"protection from cuts." msgstr "" #: lang/json/json_items.py -msgid ".223 casing" +msgid "kevlar vest" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .223 round." +msgid "A heavy bulletproof vest. The best protection from cuts and bullets." msgstr "" #: lang/json/json_items.py -msgid ".30-06 casing" +msgid "rain coat" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .30-06 round." +msgid "" +"A plastic coat with two very large pockets. Provides protection from rain " +"and some protection from acid rain." msgstr "" #: lang/json/json_items.py -msgid ".308 casing" +msgid "rain hood" msgstr "" #: lang/json/json_items.py -msgid "An empty casing from a .308 round." +msgid "" +"A waterproof hood made to be worn in bad weather. Provides extra protection " +"from rain." msgstr "" #: lang/json/json_items.py -msgid "40mm canister" +msgid "fishing waders" msgstr "" #: lang/json/json_items.py -msgid "A large canister from a spent 40mm grenade." +msgid "Waterproof plastic fishing waders with a single large front pocket." msgstr "" #: lang/json/json_items.py -msgid "gunpowder" +msgid "wool poncho" msgstr "" #: lang/json/json_items.py -msgid "Firearm quality gunpowder." +msgid "" +"A simple wool garment worn over the torso. Provides a bit of protection." msgstr "" #: lang/json/json_items.py -msgid "oxidizer powder" +msgid "trenchcoat" msgstr "" #: lang/json/json_items.py -msgid "Volatile powdered chemical oxidizer." +msgid "A thin cotton trenchcoat, lined with pockets. Great for storage." msgstr "" #: lang/json/json_items.py -msgid "lye powder" +msgid "flotation vest" msgstr "" #: lang/json/json_items.py -msgid "Powdered caustic soda." +msgid "" +"A brightly-colored vest designed to keep you upright and floating in water." msgstr "" #: lang/json/json_items.py -msgid "shotgun primer" +msgid "leather trenchcoat" msgstr "" #: lang/json/json_items.py -msgid "Primer from a shotgun round." +msgid "A thick leather trenchcoat, lined with pockets. Great for storage." msgstr "" #: lang/json/json_items.py -msgid "small pistol primer" +msgid "fur trenchcoat" msgstr "" #: lang/json/json_items.py -msgid "Primer from a small caliber pistol round." +msgid "A thick fur trenchcoat, lined with pockets. Great for storage." msgstr "" #: lang/json/json_items.py -msgid "large pistol primer" +msgid "winter coat" msgstr "" #: lang/json/json_items.py -msgid "Primer from a large caliber pistol round." +msgid "A padded coat with deep pockets and a hood. Very warm." msgstr "" #: lang/json/json_items.py -msgid "small rifle primer" +msgid "fur coat" msgstr "" #: lang/json/json_items.py -msgid "Primer from a small caliber rifle round." +msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" #: lang/json/json_items.py -msgid "large rifle primer" +msgid "peacoat" msgstr "" #: lang/json/json_items.py -msgid "Primer from a large caliber rifle round." +msgid "A heavy wool coat. Cumbersome, but warm and with deep pockets." msgstr "" #: lang/json/json_items.py -msgid "lead" +msgid "utility vest" msgstr "" #: lang/json/json_items.py -msgid "" -"Assorted bullet materials, useful in constructing a variety of ammunition." +msgid "A light vest covered in pockets and straps for storage." msgstr "" #: lang/json/json_items.py -msgid "gold" +msgid "leather vest" msgstr "" #: lang/json/json_items.py -msgid "" -"Small gold bits. Before the cataclysm these would have been worth quite a " -"bit. Still usable in making ammunition." +msgid "A vest made from thick leather. Offers excellent protection from cuts." msgstr "" #: lang/json/json_items.py -msgid "incendiary" +msgid "tool belt" msgstr "" #: lang/json/json_items.py -msgid "" -"Material from an incendiary round, useful in constructing incendiary " -"ammunition." +msgid "A common belt with pockets widely used by handymen, and electricians." msgstr "" #: lang/json/json_items.py -msgid "" -"Gasoline is a highly flammable liquid. When under pressure, it has the " -"potential for violent explosion." +msgid "chest rig" msgstr "" #: lang/json/json_items.py -msgid "medical tape" +msgid "" +"A light vest covered in webbing, pockets and straps. This variety is favored " +"by the military." msgstr "" #: lang/json/json_items.py -msgid "A roll of medical tape, similar to duct tape." +msgid "lab coat" msgstr "" #: lang/json/json_items.py -msgid "shotgun beanbag" +msgid "A long white coat with several large pockets." msgstr "" #: lang/json/json_items.py -msgid "A beanbag round for shotguns, not deadly but designed to disable." +msgid "soft arm sleeves" msgstr "" #: lang/json/json_items.py -msgid "40mm beanbag" +msgid "A pair of soft neoprene arm sleeves, often used in contact sports." msgstr "" #: lang/json/json_items.py -msgid "A 40mm beanbag that deals massive non lethal force." +msgid "hard arm guards" msgstr "" #: lang/json/json_items.py -msgid "" -"8x40mm caseless rounds. Proprietary ammunition for Rivtech firearms. Being " -"caseless rounds, these cannot be disassembled or reloaded." +msgid "A pair of neoprene arm sleeves covered with molded plastic sheaths." msgstr "" #: lang/json/json_items.py -msgid "handmade 8x40mm caseless" +msgid "elbow pads" msgstr "" #: lang/json/json_items.py -msgid "" -"Handcrafted, bootleg duplicates of Rivtech 8x40mm caseless rounds. Being " -"caseless rounds, these cannot be disassembled or reloaded." +msgid "A pair of elbow pads made of stout plastic and cloth." msgstr "" #: lang/json/json_items.py -msgid "handmade 8x40mm caseless JSP" +msgid "chitin arm guards" msgstr "" #: lang/json/json_items.py msgid "" -"Handcrafted, bootleg, jacketed soft point duplicates of Rivtech 8x40mm " -"caseless rounds. Being caseless rounds, these cannot be disassembled or " -"reloaded." +"A pair of arm guards made from the exoskeletons of insects. Light and " +"durable." msgstr "" #: lang/json/json_items.py -msgid "8x40mm FMJ caseless" +msgid "metal arm guards" msgstr "" #: lang/json/json_items.py -msgid "" -"8x40mm caseless rounds, full metal jacket. Military grade ammunition for " -"Rivtech firearms. Being caseless rounds, these cannot be disassembled or " -"reloaded." +msgid "A pair of arm guards hammered out from metal. Very stylish." msgstr "" #: lang/json/json_items.py -msgid "8x40mm JHP caseless" +msgid "glove liners" msgstr "" #: lang/json/json_items.py msgid "" -"8x40mm caseless rounds, jacketed hollowpoint. Military grade ammunition for " -"Rivtech firearms. Being caseless rounds, these cannot be disassembled or " -"reloaded." +"A pair of thin cotton gloves. Often used as a liner beneath other gloves." msgstr "" #: lang/json/json_items.py -msgid "8x40mm incendiary caseless" +msgid "light gloves" msgstr "" #: lang/json/json_items.py -msgid "" -"8x40mm caseless rounds, incendiary type. Military grade ammunition for " -"Rivtech firearms. Being caseless rounds, these cannot be disassembled or " -"reloaded." +msgid "A pair of cotton gloves." msgstr "" #: lang/json/json_items.py -msgid "8x40mm HVP" +msgid "mittens" msgstr "" #: lang/json/json_items.py -msgid "" -"8x40mm caseless rounds, saboted high-velocity penetrator type. Advanced " -"military grade, armor-piercing ammunition that fires a single depleted " -"uranium flechette. Being caseless rounds, these cannot be disassembled or " -"reloaded." +msgid "A pair of warm mittens. They are extremely cumbersome." msgstr "" #: lang/json/json_items.py -msgid "FFV441B HE rocket" +msgid "fur gloves" msgstr "" #: lang/json/json_items.py -msgid "" -"A 84x246mm High Explosive anti-personnel round for the Carl Gustav M3 " -"recoilless rifle. Designed to be highly effective against personnel." +msgid "A pair of warm fur gloves. They are somewhat cumbersome." msgstr "" #: lang/json/json_items.py -msgid "FFV502 HEDP rocket" +msgid "wool gloves" msgstr "" #: lang/json/json_items.py -msgid "" -"A 84x246mm High Explosive Dual Purpose anti-materiel round for the Carl " -"Gustav M3 recoilless rifle. Designed to be highly effective against vehicles " -"and structures." +msgid "A thick pair of wool gloves. Cumbersome but warm." msgstr "" #: lang/json/json_items.py -msgid "FFV469 smoke rocket" +msgid "winter gloves" msgstr "" #: lang/json/json_items.py -msgid "" -"A 84x246mm smoke marker round for the Carl Gustav M3 recoilless rifle. " -"Commonly used for signalling, target designation, and for screening troop " -"movements." +msgid "A pair of padded gloves. Cumbersome but warm." msgstr "" #: lang/json/json_items.py -msgid "PG-7VL rocket" +msgid "leather gloves" msgstr "" #: lang/json/json_items.py -msgid "93mm single-stage high-explosive ammunition for the RPG-7." +msgid "A thin pair of black leather gloves." msgstr "" #: lang/json/json_items.py -msgid "M235 TPA rocket" +msgid "tactical gloves" msgstr "" #: lang/json/json_items.py msgid "" -"66mm incendiary rockets used in the M202 FLASH rocket launcher. Their " -"warheads are filled with thickened pyrophoric agent which burns at 2200 " -"degrees fahrenheit." +"A pair of reinforced kevlar tactical gloves. Commonly used by police and " +"military units." msgstr "" #: lang/json/json_items.py -msgid "placeholder ammunition" +msgid "fingerless gloves" msgstr "" #: lang/json/json_items.py -msgid "RA110 5x50mm flechette" +msgid "" +"A pair of leather gloves with no fingers, allowing greater manual dexterity." msgstr "" #: lang/json/json_items.py -msgid "" -"Designed to defeat modern body armor, the Rivtech 5x50mm flechette round " -"features a biodegradable sabot and a single, fin-stabilized penetrator." +msgid "armored fingerless gloves" msgstr "" #: lang/json/json_items.py -msgid "5x50mm hull" +msgid "" +"A pair of leather gloves with no fingers, allowing greater manual dexterity. " +"These have been crudely reinforced with steel guards across the back." msgstr "" #: lang/json/json_items.py -msgid "An empty plastic hull from a 5x50mm flechette round." +msgid "rubber gloves" msgstr "" #: lang/json/json_items.py msgid "" -"Charcoal is a flammable carbon based material obtained by removing water and " -"other volatile constituents from animal and vegetation substances. It is " -"produced by slowly heating wood or other substances in the absence of oxygen." +"A pair of rubber gloves, often used while cleaning with caustic materials." msgstr "" #: lang/json/json_items.py -msgid "" -"The .50 BMG is a very powerful rifle round designed for long-range use. Its " -"stupendous accuracy and armor piercing capabilities make it one of the most " -"deadly rounds available, offset only by its drastic recoil and noise." +msgid "rubber boots" msgstr "" #: lang/json/json_items.py -msgid ".50 BMG SS" +msgid "" +"A pair of rubber boots, often used while cleaning with caustic materials." msgstr "" #: lang/json/json_items.py -msgid "" -"A solid steel copper jacketed variant of the .50 BMG round. Penetration is " -"increased, but damage is reduced." +msgid "medical gloves" msgstr "" #: lang/json/json_items.py -msgid ".50 BMG incendiary" +msgid "A pair of thin latex gloves, designed to limit the spread of disease." msgstr "" #: lang/json/json_items.py -msgid "" -"A variant of the powerful .50 BMG sniper round, incendiary rounds are " -"designed to burn hotly upon impact, piercing armor and igniting flammable " -"substances." +msgid "fire gauntlets" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy plastic cartridge made for use in flare guns. It appears to be a " -"modified 12 gauge shotgun shell." +"A heavy pair of leather gloves, used by firefighters and metalworkers for " +"heat protection." msgstr "" #: lang/json/json_items.py -msgid ".50 BMG casing" +msgid "chitinous gauntlets" msgstr "" #: lang/json/json_items.py msgid "" -"An empty casing from a .50 BMG round. These are rare, so you might want to " -"hold onto these." +"Gauntlets made from the exoskeletons of insects. Very light and durable." msgstr "" #: lang/json/json_items.py -msgid "Playboy" +msgid "bone armor gauntlets" msgstr "" #: lang/json/json_items.py -msgid "You can read it for the articles. Or not." +msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" #: lang/json/json_items.py -msgid "photo album" +msgid "leather armor gauntlets" msgstr "" #: lang/json/json_items.py -msgid "" -"A leather album full of photos of somebody's family. You don't know any of " -"the people in them, but seeing these pictures still makes you think of " -"happier times." +msgid "Heavy fingerless leather gloves. Very flexible and comfortable." msgstr "" #: lang/json/json_items.py -msgid "car buyer's guide" +msgid "dust mask" msgstr "" #: lang/json/json_items.py msgid "" -"Normally this glossy, ad-filled magazine about cars would be pointless, but " -"it has a series of articles on haggling techniques." +"A simple piece of cotton that straps over the mouth. Provides a small amount " +"of protection from air-borne illness and dust." msgstr "" #: lang/json/json_items.py -msgid "Computer World" +msgid "bandana" msgstr "" #: lang/json/json_items.py msgid "" -"An informative magazine all about computers, both hardware and software." +"A cotton bandana, worn over the mouth for warmth and minor protection from " +"dust and other contaminants." msgstr "" #: lang/json/json_items.py -msgid "Ham Radio Illustrated" +msgid "scarf" msgstr "" #: lang/json/json_items.py -msgid "" -"An amusing magazine about ham radio, with lots of diagrams and illustrations " -"for making your own electronic devices." +msgid "A long wool scarf, worn over the mouth for warmth." msgstr "" #: lang/json/json_items.py -msgid "Popular Mechanics" +msgid "A long fur scarf, worn over the mouth for warmth." +msgstr "" + +#: lang/json/json_items.py +msgid "filter mask" msgstr "" #: lang/json/json_items.py msgid "" -"A magazine about mechanical innovations. Full of entertaining articles and " -"advertisements for esoteric gadgets." +"A mask that straps over your mouth and nose and filters air. Protects from " +"smoke, dust, and other contaminants quite well." msgstr "" #: lang/json/json_items.py -msgid "Outdoor Adventures" +msgid "gas mask" msgstr "" #: lang/json/json_items.py msgid "" -"A glossy magazine about surviving and hunting in the wilderness. There's an " -"exciting article about a bear attack in the back pages." +"A full gas mask that covers the face and eyes. Provides excellent protection " +"from smoke, teargas, and other contaminants." msgstr "" #: lang/json/json_items.py -msgid "Through the Lens" +msgid "eyeglasses" msgstr "" #: lang/json/json_items.py -msgid "" -"A colorful digest devoted to backpacking and wilderness photography. The " -"photos are beautiful, though the terminology in the sections on " -"survivalcraft assume some proficiency." +msgid "A pair of glasses for the near-sighted. Useless for anyone else." msgstr "" #: lang/json/json_items.py -msgid "Trapper's Life" +msgid "reading glasses" msgstr "" #: lang/json/json_items.py -msgid "" -"An in-depth magazine about trapping game. There are lots of articles and " -"diagrams that explain simple trap designs." +msgid "A pair of glasses for the far-sighted. Useless for anyone else." msgstr "" #: lang/json/json_items.py -msgid "Survival Under Atomic Attack" +msgid "bifocal glasses" msgstr "" #: lang/json/json_items.py msgid "" -"A wordy and intricate guide to wilderness and urban survival in a worst case " -"scenario. While filled with loads of useful information, the madman who " -"wrote this was a terrible writer, and gleaning knowledge from the rants is a " -"chore." +"A pair of bifocal glasses for those who are both near-sighted and far-" +"sighted." msgstr "" #: lang/json/json_items.py -msgid "The Trapper's Companion" +msgid "safety glasses" msgstr "" #: lang/json/json_items.py msgid "" -"A folksy guide to trapping wild game using time-tested methods. A bit in-" -"depth for the beginner, it can provide a wealth of information to a " -"knowledgeable trapper." +"A pair of plastic glasses, used in workshops, sports, chemistry labs, and " +"many other places. Provides great protection from damage." msgstr "" #: lang/json/json_items.py -msgid "Batter Up!" +msgid "swim goggles" msgstr "" #: lang/json/json_items.py msgid "" -"A baseball magazine that focuses on batting tips. There are lots of " -"colorful, full-page photos of skilled athletes demonstrating proper form and " -"technique." +"A small pair of goggles. Distorts vision above water, but allows you to see " +"much further under water." msgstr "" #: lang/json/json_items.py -msgid "tactical baton defense manual" +msgid "ski goggles" msgstr "" #: lang/json/json_items.py msgid "" -"An informative guide to self-defense using clubs and batons. Aimed at the " -"law enforcement and military market, it is packed with time tested, no-" -"nonsense information and written to be understandable for beginners." +"A large pair of goggles that completely seal off your eyes. Excellent " +"protection from environmental dangers." msgstr "" #: lang/json/json_items.py -msgid "All About Swords" +msgid "welding goggles" msgstr "" #: lang/json/json_items.py msgid "" -"An interesting magazine that contains information about swords and " -"swordfighting techniques from all across the world." +"A dark pair of goggles. They make seeing very difficult, but protect you " +"from bright flashes." msgstr "" #: lang/json/json_items.py -msgid "knife fighter's notes" +msgid "light amp goggles" msgstr "" #: lang/json/json_items.py msgid "" -"It seems to be a guide to edged weapon combat, poorly photocopied and " -"released on spiral- bound paper. Still, there are lots of useful tips for " -"beginners." +"A pair of goggles that amplify ambient light, allowing you to see in the " +"dark. You must be carrying a powered-on unified power supply, or UPS, to " +"use them." msgstr "" #: lang/json/json_items.py -msgid "CQB Monthly" +msgid "ballistic glasses" msgstr "" #: lang/json/json_items.py msgid "" -"An in-depth look at various styles of close quarters fighting. There's an " -"amusing essay about dirty tricks in the front section." +"Modern tactical eyewear that protects from small projectiles and fragments. " +"Excellent protection from environmental dangers." msgstr "" #: lang/json/json_items.py -msgid "Close Quarter Fighting Manual" +msgid "monocle" msgstr "" #: lang/json/json_items.py msgid "" -"A well-thumbed hardbound book which illustrates simple strategies and " -"techniques for close quarters combat encounters." +"An essential article of the gentleman's apparel. Also negates near-sight." msgstr "" #: lang/json/json_items.py -msgid "Duelist's Annual" +msgid "sunglasses" msgstr "" #: lang/json/json_items.py -msgid "" -"An annual publication about fencing and dueling. There are many good " -"illustrations which describe proper technique and form." +msgid "A pair of sunglasses, good for keeping the glare out of your eyes." msgstr "" #: lang/json/json_items.py -msgid "Boxing Monthly" +msgid "stylish sunglasses" msgstr "" #: lang/json/json_items.py msgid "" -"An exciting monthly magazine about boxing. There are lots of large, colorful " -"photos of pugilistic exploits." +"A pair of stylish sunglasses, look good while keeping the glare out of your " +"eyes." msgstr "" #: lang/json/json_items.py -msgid "High Explosives Quarterly" +msgid "baseball cap" msgstr "" #: lang/json/json_items.py -msgid "" -"An interesting quarterly report about rocket launchers and recoilless " -"rifles. There are lots of large, exciting photos of explosions and weaponry." +msgid "A Red Sox cap. It provides a little bit of warmth." msgstr "" #: lang/json/json_items.py -msgid "Jane's Mortars and Rocket Launchers" +msgid "boonie hat" msgstr "" #: lang/json/json_items.py -msgid "" -"An incredibly detailed guide to modern rockets, mortars, grenade launchers, " -"and recoilless weaponry. Lavishly illustrated with color photographs, it " -"contains a wealth of information." +msgid "Also called a \"bucket hat.\" Often used in the military." msgstr "" #: lang/json/json_items.py -msgid "Tactical Handgun Digest" +msgid "cotton hat" msgstr "" #: lang/json/json_items.py -msgid "" -"A glossy magazine all about handguns and shooting. There is a good article " -"about proper sighting near the middle." +msgid "A snug-fitting cotton hat. Quite warm." msgstr "" #: lang/json/json_items.py -msgid "The Tao of the Handgun" +msgid "knit hat" msgstr "" #: lang/json/json_items.py -msgid "" -"This introspective volume covers proper usage of handguns, from safety and " -"stance, to maintenance and proper sighting technique." +msgid "A snug-fitting wool hat. Very warm." msgstr "" #: lang/json/json_items.py -msgid "Modern Rifleman" +msgid "hunting cap" msgstr "" #: lang/json/json_items.py -msgid "" -"An informative magazine all about rifles and shooting. There is an excellent " -"article about proper maintenance in this issue." +msgid "A red plaid hunting cap with ear flaps. Notably warm." msgstr "" #: lang/json/json_items.py -msgid "FM 23-16 Army marksmanship manual" +msgid "fur hat" msgstr "" #: lang/json/json_items.py -msgid "" -"A hefty military field manual about automatic rifle usage and techniques " -"which improve marksmanship and proper weapons-handling." +msgid "A hat made from the pelts of animals. Extremely warm." msgstr "" #: lang/json/json_items.py -msgid "Trap and Field" +msgid "balaclava" msgstr "" #: lang/json/json_items.py -msgid "" -"An in-depth magazine all about shotguns and shooting. There is an " -"informative article about proper shooting stance in the back pages." +msgid "A warm covering that protects the head and face from cold." msgstr "" #: lang/json/json_items.py -msgid "Shotguns: The art and science" +msgid "hard hat" msgstr "" #: lang/json/json_items.py msgid "" -"This book claims to address every problem the shotgunner is likely to face, " -"and offers solutions to ensure that shooters can make every shot count." +"A hard plastic hat worn in constructions sites. Excellent protection from " +"cuts and percussion." msgstr "" #: lang/json/json_items.py -msgid "Submachine Gun Enthusiast" +msgid "pickelhaube" msgstr "" #: lang/json/json_items.py msgid "" -"An in-depth magazine about submachine guns and shooting. There is an " -"exhaustive article about close quarter combat techniques in the front." +"A spiked helmet once worn by German military officers. The spike is very " +"sharp." msgstr "" #: lang/json/json_items.py -msgid "The Submachine Gun Handbook" +msgid "beret" msgstr "" #: lang/json/json_items.py -msgid "" -"This concise guide details the proper care and operation of most forms of " -"machine pistols and submachine guns currently used by regular armed and " -"reserve forces as well as several obsolete weapons." +msgid "A soft cotton hat commonly worn by armed forces and existentialists." msgstr "" #: lang/json/json_items.py -msgid "First Responder Handbook" +msgid "wool beret" msgstr "" #: lang/json/json_items.py -msgid "" -"A hardbound book detailing advanced first aid techniques and field-expedient " -"medical care." +msgid "A soft wool hat commonly worn by armed forces and existentialists." msgstr "" #: lang/json/json_items.py -msgid "Principles of Effective Communication" +msgid "bike helmet" msgstr "" #: lang/json/json_items.py -msgid "A hardbound book devoted to being an effective and persuasive speaker." +msgid "A thick foam helmet. Designed to protect against concussion." msgstr "" #: lang/json/json_items.py -msgid "Outdoor Survival Guide" +msgid "skid lid" msgstr "" #: lang/json/json_items.py msgid "" -"A thick soft-cover book filled with vital information about surviving in the " -"wild, aimed at the experienced backpacker." +"A small metal helmet that covers the head and protects against cuts and " +"percussion." msgstr "" #: lang/json/json_items.py -msgid "Autobiography of a Mountain Man" +msgid "baseball helmet" msgstr "" #: lang/json/json_items.py msgid "" -"An amusing historical novel filled with detailed descriptions of surviving " -"in the wild, potentially containing great knowledge an experienced " -"outdoorsman." +"A hard plastic helmet that covers the head and ears. Designed to protect " +"against a baseball to the head." msgstr "" #: lang/json/json_items.py -msgid "The Compleat Trapper" +msgid "army helmet" msgstr "" #: lang/json/json_items.py msgid "" -"An in-depth book about trapping game animals, covering methods both modern " -"and ancient." +"A heavy helmet that provides excellent protection from all sorts of damage." msgstr "" #: lang/json/json_items.py -msgid "US Weekly" +msgid "helmet liner" msgstr "" #: lang/json/json_items.py -msgid "Weekly news about a bunch of famous people who're all (un)dead now." +msgid "A helmet liner that goes inside a helmet to make it warmer." msgstr "" #: lang/json/json_items.py -msgid "TIME magazine" +msgid "riot helmet" msgstr "" #: lang/json/json_items.py -msgid "Current events concerning a bunch of people who're all (un)dead now." +msgid "A helmet with a plastic shield that covers your entire face." msgstr "" #: lang/json/json_items.py -msgid "Top Gear magazine" +msgid "motorcycle helmet" msgstr "" #: lang/json/json_items.py -msgid "Lots of articles about cars and driving techniques." +msgid "" +"A helmet with covers for your head and chin, leaving space in-between for " +"you to wear goggles." msgstr "" #: lang/json/json_items.py -msgid "Bon Appetit" +msgid "chitinous helmet" msgstr "" #: lang/json/json_items.py msgid "" -"Exciting recipes and restaurant reviews. Full of handy tips about cooking." +"A helmet made from the exoskeletons of insects. Covers the entire head; very " +"light and durable." msgstr "" #: lang/json/json_items.py -msgid "Glamopolitan" +msgid "bone armor helmet" msgstr "" #: lang/json/json_items.py msgid "" -"This is a full-size glossy women's magazine. There are a few unoriginal " -"recipes and some simple cooking tips somewhere in between the fashion photos " -"and the sex advice columns." +"A grotesque, horned helmet carved from bone. Covers the entire head; very " +"light and strong." msgstr "" #: lang/json/json_items.py -msgid "Beauty Magazine" +msgid "great helm" msgstr "" #: lang/json/json_items.py msgid "" -"This is a full-size glossy women's magazine. There are a few simple patterns " -"and basic sewing tips somewhere in between the fashion photos and the makeup " -"advertisements." +"A medieval helmet that provides excellent protection to the entire head, at " +"the cost of great encumbrance." msgstr "" #: lang/json/json_items.py -msgid "Alpha Male Quarterly" +msgid "top hat" msgstr "" #: lang/json/json_items.py msgid "" -"This is a full-size glossy men's magazine. There's a brief article about " -"hiking and a list of simple wilderness survival tips somewhere in between " -"the photos of bikini-clad women and the gadget advertisements." +"The only hat for a gentleman. Look exquisite while laughing in the face of " +"danger!" msgstr "" #: lang/json/json_items.py -msgid "Birdhouse Monthly" +msgid "bowler hat" msgstr "" #: lang/json/json_items.py -msgid "A riveting periodical all about birdhouses and their construction." +msgid "" +"The only hat for a made man. Look like a real good fella while laughing in " +"the face of your foes!" msgstr "" #: lang/json/json_items.py -msgid "Guns n Ammo" +msgid "cowboy hat" msgstr "" #: lang/json/json_items.py -msgid "Reviews of firearms, and various useful tips about their use." +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." msgstr "" #: lang/json/json_items.py -msgid "The Gun Owner's Handbook" +msgid "ten-gallon hat" msgstr "" #: lang/json/json_items.py msgid "" -"A thick soft-cover book that claims to be a complete guide to safely " -"operating, maintaining, and repairing firearms." +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." msgstr "" #: lang/json/json_items.py -msgid "Archery for Kids" +msgid "backpack" msgstr "" #: lang/json/json_items.py -msgid "" -"Will you be able to place the arrow right into the bullseye? It is not that " -"easy, but once you know how it's done, you will have a lot of fun with " -"archery." +msgid "A small backpack, good storage for a little encumbrance." msgstr "" #: lang/json/json_items.py -msgid "Zen and the Art of Archery" +msgid "leather backpack" msgstr "" #: lang/json/json_items.py -msgid "" -"This massive book contains a wealth of vital information for the novice " -"archer." +msgid "A small leather backpack, good storage for a little encumbrance." msgstr "" #: lang/json/json_items.py -msgid "Lessons for the Novice Bowhunter" +msgid "military rucksack" msgstr "" #: lang/json/json_items.py -msgid "" -"This hefty paperback book contains all the information needed for novice " -"archers to get started hunting with a variety of bows and crossbows." +msgid "A huge military rucksack, provides a lot of storage." msgstr "" #: lang/json/json_items.py -msgid "Computer Gaming" +msgid "duffel bag" msgstr "" #: lang/json/json_items.py -msgid "" -"Reviews of recently released computer games and previews of upcoming titles." +msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" #: lang/json/json_items.py -msgid "comic book" +msgid "purse" msgstr "" #: lang/json/json_items.py -msgid "A super-hero comic." +msgid "A bit cumbersome to wear, but provides some storage." msgstr "" #: lang/json/json_items.py -msgid "Paramedics" +msgid "messenger bag" msgstr "" #: lang/json/json_items.py -msgid "An educational magazine for EMTs." +msgid "Light and easy to wear, but doesn't offer much storage." msgstr "" #: lang/json/json_items.py -msgid "Dance Dance Dance!" +msgid "fanny pack" msgstr "" #: lang/json/json_items.py -msgid "Learn the moves of the trendiest dances right now." +msgid "Provides a bit of extra storage without encumbering you at all." msgstr "" #: lang/json/json_items.py -msgid "The Book of Dances" +msgid "tactical dump pouch" msgstr "" #: lang/json/json_items.py msgid "" -"This massive antique book documents dances from all around the world in " -"great detail. A perceptive reader could learn a lot about defensive footwork " -"from some of the war dances." +"An expandable pouch secured with straps. Provides a bit of extra storage " +"without encumbering you at all." msgstr "" #: lang/json/json_items.py -msgid "Diskobolus" +msgid "holster" msgstr "" #: lang/json/json_items.py -msgid "A biannual magazine devoted to discus throw." +msgid "bootstrap" msgstr "" #: lang/json/json_items.py -msgid "The Complete Guide to Pitching" +msgid "A small holster worn on the ankle." +msgstr "" + +#: lang/json/json_items.py +msgid "quiver" msgstr "" #: lang/json/json_items.py msgid "" -"A detailed guide for baseball pitchers that combines time-tested techniques " -"and information mixed with a common sense approach to pitching." +"A leather quiver worn on the back or at the hip that can hold 20 arrows. Its " +"small size won't encumber you." msgstr "" #: lang/json/json_items.py -msgid "Swim Planet" +msgid "large quiver" msgstr "" #: lang/json/json_items.py -msgid "The world's leading resource about aquatic sports." +msgid "" +"A large leather quiver trimmed with metal, worn on the back, that can hold " +"80 arrows.\n" +"Historically used by horse archers, rather than foot archers, but neither of " +"THEM had to fight zombies." msgstr "" #: lang/json/json_items.py -msgid "Water Survival Training Field Manual" +msgid "pouch" msgstr "" #: lang/json/json_items.py msgid "" -"A commercially produced survival guide that details swimming and deep water " -"survival techniques tailored to emergency scenarios." +"A makeshift bag, cobbled together from rags. Really gets in the way, but " +"provides a decent amount of storage." msgstr "" #: lang/json/json_items.py -msgid "romance novel" +msgid "leather pouch" msgstr "" #: lang/json/json_items.py -msgid "Drama and mild smut." +msgid "" +"A bag stitched together from leather scraps. Doesn't hold an awful lot but " +"is easy to wear." msgstr "" #: lang/json/json_items.py -msgid "spy novel" +msgid "gold ring" msgstr "" #: lang/json/json_items.py msgid "" -"A tale of intrigue and espionage amongst Nazis, no, Commies, no, Iraqis!" +"A flashy gold ring. You can wear it if you like, but it won't provide any " +"effects." msgstr "" #: lang/json/json_items.py -msgid "thriller novel" +msgid "silver necklace" msgstr "" #: lang/json/json_items.py -msgid "A suspenseful tale of betrayal and revenge." +msgid "" +"A nice silver necklace. You can wear it if you like, but it won't provide " +"any effects." msgstr "" #: lang/json/json_items.py -msgid "crime novel" +msgid "small relic" msgstr "" #: lang/json/json_items.py msgid "" -"After their diamond heist goes wrong, the surviving criminals begin to " -"suspect that one of them is a police informant." +"A small relic from a forgotten saint. As extraordinary as the world has " +"become it may have some power yet." msgstr "" #: lang/json/json_items.py -msgid "scifi novel" +msgid "radiation badge" msgstr "" #: lang/json/json_items.py -msgid "Aliens, ray guns, and space ships." +msgid "" +"A plastic badge with an embedded film strip. The film strip changes color " +"as it is exposed to radiation. Wear on your lapel so you can notice if it " +"changes." msgstr "" #: lang/json/json_items.py -msgid "drama novel" +msgid "deputy badge" msgstr "" #: lang/json/json_items.py -msgid "A real book for real adults." +msgid "A tarnished gold star gives an air of authority to the wearer." msgstr "" #: lang/json/json_items.py -msgid "coming of age novel" +msgid "american flag" msgstr "" #: lang/json/json_items.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." +msgid "A large American flag made to fly in even the worst conditions." msgstr "" #: lang/json/json_items.py -msgid "buddy novel" +msgid "blanket" msgstr "" #: lang/json/json_items.py -msgid "" -"A gripping tale of two friends struggling to survive on the streets of New " -"York City." +msgid "Hiding under here will not protect you from the monsters." msgstr "" #: lang/json/json_items.py -msgid "road novel" +msgid "fur blanket" msgstr "" #: lang/json/json_items.py -msgid "" -"A tale about a group of friends who wander the USA in the 1960s against a " -"backdrop of jazz, poetry and drug use." +msgid "A heavy fur blanket that covers most of your body." msgstr "" #: lang/json/json_items.py -msgid "adventure novel" +msgid "emergency blanket" msgstr "" #: lang/json/json_items.py -msgid "" -"The stirring tale of a race against time, in search of a lost city located " -"in the dark heart of the African continent." +msgid "A compact wool blanket that covers your most important body parts." msgstr "" #: lang/json/json_items.py -msgid "experimental novel" +msgid "sleeping bag" msgstr "" #: lang/json/json_items.py -msgid "" -"A bizarre play about the philosophy of existential absurdity. Or maybe it's " -"about two guys waiting for their friend to show up. It's confusing." +msgid "A large sleeping bag that covers you head to toe." msgstr "" #: lang/json/json_items.py -msgid "children's book" +msgid "fur sleeping bag" msgstr "" #: lang/json/json_items.py -msgid "" -"A little book for little readers. The colorful cartoon characters and sweet " -"stories contained herein belong to a different time, before the dead walked " -"and the world moved on." +msgid "A large sleeping bag lined with fur. Who needs a tent?" msgstr "" #: lang/json/json_items.py -msgid "war novel" +msgid "housecoat" msgstr "" #: lang/json/json_items.py -msgid "" -"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." +msgid "Makes you wish you had running water to take a shower." msgstr "" #: lang/json/json_items.py -msgid "western novel" +msgid "snuggie" msgstr "" #: lang/json/json_items.py -msgid "" -"The classic tale of a gunfighting stranger who comes to a small settlement " -"and is hired to help the townsfolk defend themselves from a band of " -"marauding outlaws." +msgid "Perfect for reading all those books you stole." msgstr "" #: lang/json/json_items.py -msgid "samurai novel" +msgid "cloak" msgstr "" #: lang/json/json_items.py -msgid "" -"The classic tale of a wandering swordsman who comes to a small settlement " -"and is hired to help the townsfolk defend themselves from a band of " -"marauding outlaws." +msgid "A heavy cloak that is thrown over your body." msgstr "" #: lang/json/json_items.py -msgid "swashbuckling novel" +msgid "fur cloak" msgstr "" #: lang/json/json_items.py -msgid "" -"An exciting seventeenth century tale of how an enslaved irish doctor and his " -"comrades-in-chains escape and become heroic pirates of the Robin Hood " -"variety." +msgid "A heavy fur cloak that is thrown over your body." msgstr "" #: lang/json/json_items.py -msgid "sports novel" +msgid "leather cloak" msgstr "" #: lang/json/json_items.py msgid "" -"The dramatic tale of a small-time boxer who gets a rare chance to fight the " -"heavy-weight champion, and seize his one chance to make a better life for " -"himself while impressing the cute girl who works in the pet store." +"A heavy leather cloak that is thrown over your body. Provides decent " +"protection." msgstr "" #: lang/json/json_items.py -msgid "fantasy novel" +msgid "jedi cloak" msgstr "" #: lang/json/json_items.py -msgid "Basic sword & sorcery." +msgid "Stylish cloak." msgstr "" #: lang/json/json_items.py -msgid "mystery novel" +msgid "basic power armor" msgstr "" #: lang/json/json_items.py -msgid "A detective investigates an unusual murder in a secluded location." +msgid "" +"The DoubleTech Power Armor, Mk. I: A heavy suit of basic power armor, " +"offering very good protection against attacks, but hard to move in." msgstr "" #: lang/json/json_items.py -msgid "horror novel" +msgid "basic power armor helmet" msgstr "" #: lang/json/json_items.py -msgid "Maybe not the best reading material considering the situation." +msgid "" +"A basic helmet, designed for use with the DoubleTech Power Armor, Mk. I. " +"Offers excellent protection from both attacks and environmental hazards." msgstr "" #: lang/json/json_items.py -msgid "erotic novel" +msgid "light power armor" msgstr "" #: lang/json/json_items.py -msgid "Hackneyed narrative concealing low-grade literary smut." +msgid "" +"A suit of DoubleTech Power Armor, Mk. II-L. This model offers several " +"improvements over the Mk. I, most notably the weight." msgstr "" #: lang/json/json_items.py -msgid "book of poetry" +msgid "light power armor helmet" msgstr "" #: lang/json/json_items.py msgid "" -"A collection of poetry by various authors from around the world, including " -"writings by Dickinson, Goethe, Thoreau, and Yeats." +"A power armor helmet designed for use with the DoubleTech Power Armor, Mk. " +"II-L. This improved design is lighter and cooler than the Mk. I helmet." msgstr "" #: lang/json/json_items.py -msgid "book of tall tales" +msgid "heavy power armor" msgstr "" #: lang/json/json_items.py msgid "" -"An entertaining collection of early American folklore, featuring tales of " -"larger than life individuals and their amazing adventures." +"A suit of DoubleTech Power Armor, Mk. II-H. This model offers several " +"improvements over the Mk. I, most notably the its environmental protection." msgstr "" #: lang/json/json_items.py -msgid "book of fairy tales" +msgid "heavy power armor helmet" msgstr "" #: lang/json/json_items.py msgid "" -"An amusing collection of folklore featuring the usual cast of fairies, " -"goblins, and trolls." +"A power armor helmet designed for use with the DoubleTech Power Armor, Mk. " +"II-H. This improved design is heavier than the Mk. I helmet, but cooler, and " +"offers better environmental protection." msgstr "" #: lang/json/json_items.py -msgid "tragedy novel" +msgid "power armor hauling frame" msgstr "" #: lang/json/json_items.py -msgid "" -"The story of two young lovers whose feuding families threaten to keep them " -"apart." +msgid "A heavy duty hauling frame designed to interface with power armor." msgstr "" #: lang/json/json_items.py -msgid "book of plays" +msgid "salvaged power armor" msgstr "" #: lang/json/json_items.py msgid "" -"A collection of plays by various authors from around the world, including " -"scripts by Wilde, Beckett, Checkov, and Shakespeare." +"The DoubleTech Power Armor, Mk. I: A heavy suit of basic power armor, " +"offering very good protection against attacks, but hard to move in. This " +"suit has had its servos and cooling system stripped out, meaning it no " +"longer requires power, but also encumbers you greatly and doesn't provide " +"internal thermal regulation." msgstr "" #: lang/json/json_items.py -msgid "pulp novel" +msgid "salvaged power armor helmet" msgstr "" #: lang/json/json_items.py msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "" - -#: lang/json/json_items.py -msgid "book of essays" +"A basic helmet, designed for use with the DoubleTech Power Armor, Mk. I. " +"Offers excellent protection from both attacks and environmental hazards. " +"This suit has had its internal computer and cooling system stripped out, " +"meaning it no longer requires power, but it has no internal chronometer and " +"doesn't provide internal thermal regulation." msgstr "" #: lang/json/json_items.py -msgid "" -"A collection of essays by various authors from around the world, including " -"works by Churchill, Mailer, Eco, and Voltaire." +msgid "arm splint" msgstr "" #: lang/json/json_items.py -msgid "book of philosophy" +msgid "A tool to help set bones and hold them in place." msgstr "" #: lang/json/json_items.py -msgid "" -"A deep discussion of morality with an emphasis on epistemology and logic." +msgid "leg splint" msgstr "" #: lang/json/json_items.py -msgid "satire novel" +msgid "hard leg guards" msgstr "" #: lang/json/json_items.py -msgid "" -"A political satire of the pre-apocalypse world. Looking back on it from this " -"side of armageddon makes it seem all the more ridiculous." +msgid "A pair of polyurethane leg guards with neoprene backing." msgstr "" #: lang/json/json_items.py -msgid "big book of short stories" +msgid "knee pads" msgstr "" #: lang/json/json_items.py -msgid "" -"This humongous volume contains a vast collection of short stories by " -"different authors, spanning a wide variety of topics and genres." +msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" #: lang/json/json_items.py -msgid "Zombie Survival Guide" +msgid "metal leg guards" msgstr "" #: lang/json/json_items.py -msgid "" -"While this seems like it would be very useful in this situation, the sheer " -"amount of misinformation present makes it practically useless." +msgid "A pair of leg guards hammered out from metal. Very stylish." msgstr "" #: lang/json/json_items.py -msgid "101 Wrestling Moves" +msgid "wrist watch" msgstr "" #: lang/json/json_items.py -msgid "" -"It seems to be a wrestling manual, poorly photocopied and released on " -"spiral- bound paper. Still, there are lots of useful tips for unarmed combat." +msgid "A simple wristwatch. Tells the time and has an alarm clock feature." msgstr "" #: lang/json/json_items.py -msgid "Spetsnaz Knife Techniques" +msgid "toque" msgstr "" #: lang/json/json_items.py -msgid "A classic Soviet text on the art of attacking with a blade." +msgid "" +"A traditional chefs hat, standing tall and proud against the vulgarities of " +"the world." msgstr "" #: lang/json/json_items.py -msgid "FM 23-25 Army bayonet manual" +msgid "chefs jacket" msgstr "" #: lang/json/json_items.py -msgid "A hefty military field manual about bayonet usage and combat theory." +msgid "" +"This double-breasted uniform is unusually thick to protect against the heat " +"of the kitchen." msgstr "" #: lang/json/json_items.py -msgid "Under the Hood" +msgid "checkered pants" msgstr "" #: lang/json/json_items.py -msgid "An advanced mechanics manual, covering all sorts of topics." +msgid "In a pinch, these pants can be used for an impromptu game of checkers." msgstr "" #: lang/json/json_items.py -msgid "Pitching a Tent" +msgid "scrap suit" msgstr "" #: lang/json/json_items.py -msgid "A guide detailing the basics of woodsmanship and outdoor survival." +msgid "" +"A suit of armor forged from scraps of metal; provides decent protection, but " +"the loose collection of plates jangles and clangs as you walk, attracting " +"the attention of all nearby." msgstr "" #: lang/json/json_items.py -msgid "Self-Esteem for Dummies" +msgid "bookplate" msgstr "" #: lang/json/json_items.py -msgid "Full of useful tips for showing confidence in your speech." +msgid "" +"A crude form of armor made from stacked paper and rolls of duct tape, this " +"breastplate offers a surprising amount of protection." msgstr "" #: lang/json/json_items.py -msgid "How to Succeed in Business" +msgid "2-by-arm guards" msgstr "" #: lang/json/json_items.py -msgid "Useful if you want to get a good deal when purchasing goods." +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." msgstr "" #: lang/json/json_items.py -msgid "The Big Book of First Aid" +msgid "2-by-shin guards" msgstr "" #: lang/json/json_items.py -msgid "It's big and heavy, but full of great information about first aid." +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." msgstr "" #: lang/json/json_items.py -msgid "Pocket Guide to First Aid" +msgid "hand wraps" msgstr "" #: lang/json/json_items.py msgid "" -"This pocket-sized leather-bound guide to first aid combines a wealth of " -"concise information with simple to follow instructions and easy to read " -"illustrations." +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." msgstr "" #: lang/json/json_items.py -msgid "Pocket Survival Guide" +msgid "light survivor suit" msgstr "" #: lang/json/json_items.py msgid "" -"This pocket-sized leather-bound survival guide combines a wealth of concise " -"information with simple to follow instructions and easy to read " -"illustrations." +"A lightweight home built combination armor made from a cut down bulletproof " +"vest and a reinforced jumpsuit made out of fabric. Protects from the " +"elements as well as from harm." msgstr "" #: lang/json/json_items.py -msgid "Pocket Guide to Firearm Safety" +msgid "survivor suit" msgstr "" #: lang/json/json_items.py msgid "" -"This pocket-sized leather-bound guide to firearm safety combines a wealth of " -"concise information with simple to follow instructions and easy to read " -"illustrations." +"A home built combination armor made from a bulletproof vest and a reinforced " +"jumpsuit made out of leather. Protects from the elements as well as from " +"harm." msgstr "" #: lang/json/json_items.py -msgid "How to Browse the Web" +msgid "armored boots" msgstr "" #: lang/json/json_items.py -msgid "Very beginner-level information about computers." +msgid "An extremely heavy set of armor plated boots." msgstr "" #: lang/json/json_items.py -msgid "Computer Science 101" +msgid "armored gauntlets" msgstr "" #: lang/json/json_items.py -msgid "An entry-level textbook about computers." +msgid "An extremely heavy set of armor plated gloves." msgstr "" #: lang/json/json_items.py -msgid "Cooking on a Budget" +msgid "heavy survivor suit" msgstr "" #: lang/json/json_items.py msgid "" -"A nice cook book that goes beyond recipes and into the chemistry of food." +"A heavy home built combination armor made from a reinforced bulletproof vest " +"and a metal armor plated jumpsuit made out of leather. Protects from the " +"elements as well as from harm." msgstr "" #: lang/json/json_items.py -msgid "To Serve Man" +msgid "winter survivor suit" msgstr "" #: lang/json/json_items.py -msgid "It's... it's a cookbook!" +msgid "" +"A warm and heavy, home built combination armor made from a reinforced " +"bulletproof vest and an insulated jumpsuit made out of leather. Protects " +"from the elements as well as from harm." msgstr "" #: lang/json/json_items.py -msgid "Cucina Italiana" +msgid "survivor boots" msgstr "" #: lang/json/json_items.py msgid "" -"This cookbook is written in Italian, but handily illustrated with step by " -"step photo instructions." +"A pair of customized, heavily armored boots, modified to provide maximum " +"protection from harm and the elements, even when knee-deep in the dead." msgstr "" #: lang/json/json_items.py -msgid "What's a Transistor?" +msgid "survivor gloves" msgstr "" #: lang/json/json_items.py -msgid "A basic manual of electronics and circuit design." +msgid "" +"A pair of heavily customized, armored gloves, modified to be easy of wear " +"while providing maximum protection under extreme conditions." msgstr "" #: lang/json/json_items.py -msgid "Sew What? Clothing!" +msgid "survivor helmet" msgstr "" #: lang/json/json_items.py -msgid "A colorful book about tailoring." +msgid "" +"A customized, heavily armored helmet, modified to provide maximum comfort " +"and protection from harm." msgstr "" #: lang/json/json_items.py -msgid "Sew Awesome Monthly" +msgid "SWAT armor" msgstr "" #: lang/json/json_items.py msgid "" -"A well presented monthly magazine all about knitting, crocheting, and " -"needlepoint. Filled with ideas and project patterns." +"A suit of black bulletproof armor with lots of pockets. The word SWAT is " +"emblazoned across the back." msgstr "" #: lang/json/json_items.py -msgid "Sewing Techniques for Designers" +msgid "tactical helmet" msgstr "" #: lang/json/json_items.py msgid "" -"A massive, hardbound book full of a wealth of information for the " -"professional clothing designer." +"A lightweight black helmet that provides excellent protection from all sorts " +"of damage." msgstr "" #: lang/json/json_items.py -msgid "clothing designer's portfolio" +msgid "tactical full helmet" msgstr "" #: lang/json/json_items.py msgid "" -"A leather bound portfolio that once belonged to a clothing designer. Filled " -"with sketches and notes, a skilled tailor could learn a lot from this volume." +"An all-encompassing black helmet that covers your entire face and neck, " +"providing excellent protection from all sorts of damage." msgstr "" #: lang/json/json_items.py -msgid "How to Trap Anything" +msgid "plate armor" msgstr "" #: lang/json/json_items.py -msgid "" -"A worn manual that describes how to set and disarm a wide variety of traps." +msgid "A suit of gothic plate armor." msgstr "" #: lang/json/json_items.py -msgid "The Modern Trapper" +msgid "barbute helm" msgstr "" #: lang/json/json_items.py -msgid "An extensive volume that details numerous methods of trapping game." +msgid "" +"A medieval helmet that provides excellent protection for the head, with a Y " +"shaped opening for the face." msgstr "" #: lang/json/json_items.py -msgid "Building for Beginners" +msgid "leather armor helmet" msgstr "" #: lang/json/json_items.py -msgid "" -"A large, paperback book detailing several beginner's projects in " -"construction." +msgid "A thick leather helmet that provides excellent protection for the head." msgstr "" #: lang/json/json_items.py -msgid "101 Home Repairs" +msgid "Ō-yoroi" msgstr "" #: lang/json/json_items.py -msgid "" -"A paperback book detailing 101 home repair projects the novice carpenter." +msgid "An ornamental suit of Japanese samurai armor." msgstr "" #: lang/json/json_items.py -msgid "The Rules of the Road" +msgid "kabuto" msgstr "" #: lang/json/json_items.py msgid "" -"A thick textbook for beginning drivers. It contains chapters on laws, safe " -"vehicle operation, and defensive driving concepts." +"A medieval Japanese helmet with a scowling facemask that provides excellent " +"protection to the entire head and face." msgstr "" #: lang/json/json_items.py -msgid "Principles of Advanced Programming" +msgid "leather apron" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy textbook dedicated to advanced-level software design, written for " -"several different programming languages." +"An apron made of thick leather. Cumbersome, but offers excellent protection " +"from cuts." msgstr "" #: lang/json/json_items.py -msgid "Computer Science 301" +msgid "ballistic mask" msgstr "" #: lang/json/json_items.py -msgid "A college textbook on computer science." +msgid "" +"A protective reinforced kevlar mask that covers the face. Provides excellent " +"protection from ballistic threats." msgstr "" #: lang/json/json_items.py -msgid "Advanced Electronics" +msgid "hockey mask" msgstr "" #: lang/json/json_items.py -msgid "A college textbook on circuit design." +msgid "" +"A protective face mask made of thick plastic. Commonly worn by hockey " +"goalies." msgstr "" #: lang/json/json_items.py -msgid "Electronic Circuit Theory" +msgid "drop leg pouches" msgstr "" #: lang/json/json_items.py msgid "" -"An advanced college textbook on circuit theory, design, and organization." +"A set of pouches that can be worn on the thighs using buckled straps. This " +"variety is favored by the military." msgstr "" #: lang/json/json_items.py -msgid "Amateur Home Radio for Enthusiasts" +msgid "leather cat ears" msgstr "" #: lang/json/json_items.py msgid "" -"A book about ham radio and citizen's band radio. It contains numerous " -"diagrams and illustrations explaining the science behind the electronics." +"A shiny pair of black cat ears on a headband. It does nothing, but there's " +"no reason not to look good even if no one's looking." msgstr "" #: lang/json/json_items.py -msgid "Advanced Economics" +msgid "fuzzy cat ears" msgstr "" #: lang/json/json_items.py -msgid "A college textbook on economics." +msgid "" +"A fuzzy pair of brownish cat ears on a headband. It does nothing, but " +"there's no reason not to look good even if no one's looking." msgstr "" #: lang/json/json_items.py -msgid "Mechanical Mastery" +msgid "leather cat tail" msgstr "" #: lang/json/json_items.py msgid "" -"An advanced guide on mechanics and welding, covering topics like \"Grinding " -"off rust\" and \"Making cursive E's\"." +"A glossy black leather tail weighted down with tiny beads of plastic. Sways " +"behind you when you walk." msgstr "" #: lang/json/json_items.py -msgid "Internal Combustion Fundamentals" +msgid "fuzzy cat tail" msgstr "" #: lang/json/json_items.py msgid "" -"A college-level textbook that details the operation, maintenance, and repair " -"of internal combustion engines." +"A fuzzy tawny tail weighted down with tiny beads of plastic. Sways behind " +"you when you walk." msgstr "" #: lang/json/json_items.py -msgid "chemistry textbook" +msgid "fur kitty collar" msgstr "" #: lang/json/json_items.py -msgid "A college textbook on chemistry." +msgid "" +"A decorative 'collar' made out of fur. Complete with a little bell hanging " +"from the front. Don't worry, it's silent." msgstr "" #: lang/json/json_items.py -msgid "family cookbook" +msgid "pot helmet" msgstr "" #: lang/json/json_items.py msgid "" -"A big binder full of somebody's family recipes. The well-turned pages and " -"creased corners speak volumes of the culinary knowledge contained within. " -"You could probably learn a lot about cooking from studying this domestic " -"artifact." +"A helmet made from a soup pot. It's not very good protection, but it's " +"better than nothing." msgstr "" #: lang/json/json_items.py -msgid "Advanced Physical Chemistry" +msgid "leather collar" msgstr "" #: lang/json/json_items.py msgid "" -"A university-level textbook on advanced principles of chemistry, both " -"organic and inorganic." +"A black leather 'collar' with a bell dangling from the front. Don't worry, " +"the bell is silent." msgstr "" #: lang/json/json_items.py -msgid "Engineering 301" +msgid "go bag" msgstr "" #: lang/json/json_items.py -msgid "A textbook on civil engineering and construction." +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." msgstr "" #: lang/json/json_items.py -msgid "SICP" +msgid "water" msgstr "" #: lang/json/json_items.py -msgid "" -"A classic text, \"The Structure and Interpretation of Computer Programs.\" " -"Written with examples in LISP, but applicable to any language." +msgid "Water, the stuff of life, the best thirst-quencher available." msgstr "" #: lang/json/json_items.py -msgid "Robots for Fun & Profit" +msgid "Fresh, clean water. Truly the best thing to quench your thirst." msgstr "" #: lang/json/json_items.py -msgid "" -"A rare book on the design of robots, with lots of helpful step-by-step " -"guides." +msgid "sewage sample" msgstr "" #: lang/json/json_items.py -msgid "Guide to Advanced Emergency Care" +msgid "A sample of sewage from a treatment plant. Gross." msgstr "" #: lang/json/json_items.py -msgid "" -"A thick textbook for paramedics describing advanced lifesaving procedures " -"and field-expedient care methods." +msgid "salt water" msgstr "" #: lang/json/json_items.py -msgid "The Complete Home Repair Guide" +msgid "Water with salt added. Not good for drinking." msgstr "" #: lang/json/json_items.py -msgid "" -"A massive book that details virtually every aspect of remodeling and " -"repairing a home, with concise terminology aimed at experienced carpenters." +msgid "orange juice" msgstr "" #: lang/json/json_items.py -msgid "national weather transcripts" +msgid "Freshly-squeezed from real oranges! Tasty and nutritious." msgstr "" #: lang/json/json_items.py -msgid "Old weather records are about as interesting as a rock." +msgid "apple cider" msgstr "" #: lang/json/json_items.py -msgid "patient treatment records" +msgid "Pressed from fresh apples. Tasty and nutritious." msgstr "" #: lang/json/json_items.py -msgid "A massive stack of medical records that contain every gory detail." +msgid "lemonade" msgstr "" #: lang/json/json_items.py -msgid "corporate accounting ledger" +msgid "" +"Lemon juice mixed with water and sugar to dull the sourness. Delicious and " +"refreshing." msgstr "" #: lang/json/json_items.py -msgid "If you knew what to look for something might stand out..." +msgid "cranberry juice" msgstr "" #: lang/json/json_items.py -msgid "black box transcript" +msgid "Made from real Massachusetts cranberries. Delicious and nutritious." +msgstr "" + +#: lang/json/json_items.py +msgid "sports drink" msgstr "" #: lang/json/json_items.py msgid "" -"A full flight log for a military aircraft. Nothing of interest stands out." +"Consisting of a special blend of electrolytes and simple sugars, this " +"beverage tastes like bottled sweat but rehydrates the body faster than water." msgstr "" #: lang/json/json_items.py -msgid "priest's diary" +msgid "energy drink" msgstr "" #: lang/json/json_items.py -msgid "A small book filled with journal entries in Latin." +msgid "Popular among those who need to stay up late working." msgstr "" #: lang/json/json_items.py -msgid "Visions in Solitude" +msgid "cola" msgstr "" #: lang/json/json_items.py -msgid "A small book detailing 'visions' a prisoner had on death row." +msgid "Things go better with cola. Sugar water with caffeine added." msgstr "" #: lang/json/json_items.py -msgid "Crafty Crafter's Quarterly" +msgid "root beer" msgstr "" #: lang/json/json_items.py -msgid "" -"A fun quarterly magazine all about macaroni art and things you can make by " -"supergluing found objects together." +msgid "Like cola, but without caffeine. Still not that healthy." msgstr "" #: lang/json/json_items.py -msgid "101 Crafts for Beginners" +msgid "grape drink" msgstr "" #: lang/json/json_items.py msgid "" -"A large, paperback book detailing a hundred and one beginner's projects in " -"fabrication." +"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." msgstr "" #: lang/json/json_items.py -msgid "DIY Compendium" +msgid "milk" msgstr "" #: lang/json/json_items.py -msgid "" -"A thick, hardbound book detailing countless projects for inventions that " -"claim to improve all aspects of life." +msgid "Baby cow food, appropriated for adult humans. Spoils rapidly." msgstr "" #: lang/json/json_items.py -msgid "Welding and Metallurgy" +msgid "condensed milk" msgstr "" #: lang/json/json_items.py msgid "" -"A rather technical textbook that illustrates the science and technique of " -"becoming a better welder." +"Baby cow food, appropriated for adult humans. Having been canned, this milk " +"should last for a very long time." msgstr "" #: lang/json/json_items.py -msgid "The Historic Weaponsmith" +msgid "V8" msgstr "" #: lang/json/json_items.py -msgid "" -"This in-depth and technical text details various forms of ancient European " -"weaponsmithing, and is well illustrated with step by step photo instructions." +msgid "Contains up to 8 vegetables! Nutritious and tasty." msgstr "" #: lang/json/json_items.py -msgid "The Swords of the Samurai" +msgid "broth" msgstr "" #: lang/json/json_items.py -msgid "" -"This in-depth and technical text details various forms of ancient Japanese " -"swordsmithing, and is well illustrated with step by step photo instructions." +msgid "Vegetable stock. Tasty and fairly nutritious." msgstr "" #: lang/json/json_items.py -msgid "Studies in Historic Armorsmithing" +msgid "bone broth" msgstr "" #: lang/json/json_items.py -msgid "" -"This in-depth and technical text details various forms of ancient European " -"armor crafting, and is well illustrated with lots of photos." +msgid "A tasty and nutritious broth made from bones." msgstr "" #: lang/json/json_items.py -msgid "The Art of Japenese Armormaking" +msgid "vegetable soup" msgstr "" #: lang/json/json_items.py -msgid "" -"This in-depth and technical text details various forms of ancient Japanese " -"armor crafting, and is well illustrated with lots of photos." +msgid "A nutritious and delicious hearty vegetable soup." msgstr "" #: lang/json/json_items.py -msgid "The Hitchhiker's Guide to the Cataclysm" +msgid "meat soup" msgstr "" #: lang/json/json_items.py -msgid "" -"Inscribed on the cover in large, friendly letters, is the message \"Don't " -"Panic\"." +msgid "A nutritious and delicious hearty meat soup." msgstr "" #: lang/json/json_items.py -msgid "arrowhead" +msgid "woods soup" msgstr "" #: lang/json/json_items.py -msgid "" -"Heads for an arrow. Placing these on an arrow will make the arrow more " -"damaging and piercing." +msgid "A nutritious and delicious soup, made of gifts of nature." msgstr "" #: lang/json/json_items.py -msgid "fletching" +msgid "sap soup" msgstr "" #: lang/json/json_items.py -msgid "" -"Also known as a flight, this item provides aerodynamic stabilization of " -"arrows." +msgid "A soup made from someone who is a far better meal than person." msgstr "" #: lang/json/json_items.py -msgid "wood arrow shaft" +msgid "riesling" msgstr "" #: lang/json/json_items.py -msgid "" -"A crude shaft made from wood. It needs arrowheads and fletching to become a " -"functional arrow. You can, however, fire it from a bow." +msgid "Sparkling white wine, made from the world's noblest grape." msgstr "" #: lang/json/json_items.py -msgid "heavy wood arrow shaft" +msgid "chardonnay" msgstr "" #: lang/json/json_items.py -msgid "" -"A heavy shaft made from wood. It needs arrowheads and fletching to become a " -"functional arrow. You can, however, fire it from a bow." +msgid "America's most popular wine, and for good reason." msgstr "" #: lang/json/json_items.py -msgid "metal arrow shaft" +msgid "cabernet sauvignon" msgstr "" #: lang/json/json_items.py -msgid "" -"A heavy shaft made from scrap metal. It needs arrowheads and fletching to " -"become a functional arrow. You can, however, fire it from a bow." +msgid "The heavily disputed king of red wines. Pairs well red meats and pasta." msgstr "" #: lang/json/json_items.py -msgid "fire hardened wood arrow" +msgid "pinot noir" msgstr "" #: lang/json/json_items.py msgid "" -"A simple arrow shaft that has had a point carved into it and then fire " -"hardened." +"Prized by collectors and adored by critics, it is one of the rarer and more " +"elegant wines." msgstr "" #: lang/json/json_items.py -msgid "field point wood arrow" +msgid "whiskey" msgstr "" #: lang/json/json_items.py -msgid "" -"A simple arrow shaft that has a crude arrow head. Useful for hunting small " -"woodland creatures." +msgid "Made from, by, and for real Southern colonels!" msgstr "" #: lang/json/json_items.py -msgid "small game arrow" +msgid "vodka" msgstr "" #: lang/json/json_items.py -msgid "" -"A simple arrow shaft that has a wide blunt head. Useful for hunting small " -"woodland creatures without splattering them all over the ground." +msgid "In Soviet Russia, vodka drinks you!" msgstr "" #: lang/json/json_items.py -msgid "fletched fire hardened wood arrow" +msgid "gin" msgstr "" #: lang/json/json_items.py -msgid "This simple arrow has a fire hardened point and some fletchings." +msgid "Smells faintly of elderberries, but mostly booze." msgstr "" #: lang/json/json_items.py -msgid "fletched field point wood arrow" +msgid "rum" msgstr "" #: lang/json/json_items.py -msgid "" -"A simple arrow shaft that has a crude arrow head and some fletchings. Useful " -"for hunting small woodland creatures or as a last ditch defense against " -"zombies." +msgid "Drinking this might make you feel like a pirate. Or not." msgstr "" #: lang/json/json_items.py -msgid "wood arrow" +msgid "tequila" msgstr "" #: lang/json/json_items.py -msgid "" -"A basic wooden arrow, it has a metal arrow head and some fletchings. It's " -"light-weight, does some damage, and is so-so on accuracy. Stands a good " -"chance of remaining intact once fired." +msgid "Don't eat the worm! Wait, there's no worm in this bottle." msgstr "" #: lang/json/json_items.py -msgid "heavy fletched fire hardened arrow" +msgid "triple sec" msgstr "" #: lang/json/json_items.py -msgid "" -"This arrow is significantly sturdier than other wooden arrows. It has a " -"firehardened point and some fletchings." +msgid "An orange flavored liquor used in many mixed drinks." msgstr "" #: lang/json/json_items.py -msgid "heavy fletched field point arrow" +msgid "cheap wine" msgstr "" #: lang/json/json_items.py -msgid "" -"This arrow is significantly sturdier than other wooden arrows. It has a " -"crude field point head and some fletchings." +msgid "Really cheap fortified wine." msgstr "" #: lang/json/json_items.py -msgid "heavy wood arrow" +msgid "Irish coffee" msgstr "" #: lang/json/json_items.py msgid "" -"A heavy wooden arrow, it has a metal arrow head and some fletchings. It's " -"much heavier than other wooden arrows, as a result it does more damage and " -"is more stable in flight, resulting in better accuracy over a longer range. " -"Stands a very good chance of remaining intact once fired." +"Sweetened coffee and whiskey. Start your day the closeted alcoholic way!" msgstr "" #: lang/json/json_items.py -msgid "sharpened metal arrow" +msgid "long island iced tea" msgstr "" #: lang/json/json_items.py msgid "" -"This metal shaft has been carefully sharpened so that it has a crude point " -"at the end." +"A blend of incredibly strong-flavored liquors that somehow tastes like none " +"of them." msgstr "" #: lang/json/json_items.py -msgid "metal arrow" +msgid "screwdriver" msgstr "" #: lang/json/json_items.py -msgid "This metal arrow has a steel arrow head and some fletchings." +msgid "The surreptitious drunkard mechanic's drink of choice." msgstr "" #: lang/json/json_items.py -msgid "carbon fiber arrow" +msgid "wild apple" msgstr "" #: lang/json/json_items.py -msgid "" -"High-tech carbon fiber shafts and 100 grain broadheads. Very light weight, " -"fast, and notoriously fragile." +msgid "Like apple cider, only with vodka." msgstr "" #: lang/json/json_items.py -msgid "exploding arrow" +msgid "rum & cola" msgstr "" #: lang/json/json_items.py -msgid "" -"This arrow has a small IED strapped to its tip. Horribly inaccurate, heavy, " -"and bulky, not only does this contraption require expert hands to pull off a " -"shot, it requires one to loose this with a small measure of confidence the " -"shooter won't be caught in the blast radius." +msgid "Suitable for tropical retreats and Canadian artists alike." msgstr "" #: lang/json/json_items.py -msgid "exploding arrowhead" +msgid "beer" msgstr "" #: lang/json/json_items.py msgid "" -"This simple IED is designed to be attached to an arrow and detonate on " -"impact. Theoretically you could throw it but who would want to do that?" +"Best served cold, in a glass, and with a lime - but you're not that lucky." msgstr "" #: lang/json/json_items.py -msgid "flaming arrow" +msgid "bleach" msgstr "" #: lang/json/json_items.py msgid "" -"This arrow has a flaming rag wrapped around the shaft near the head. You " -"should shoot it soon before it burns your bow." +"This is sodium hypochlorite, a common household cleaning agent. It is highly " +"unsafe to drink." msgstr "" #: lang/json/json_items.py -msgid "wood crossbow bolt" +msgid "ammonia" msgstr "" #: lang/json/json_items.py msgid "" -"A sharpened bolt carved from wood. It's very light, but doesn't do much " -"damage and isn't particularly accurate. Stands a good chance of remaining " -"intact once fired." +"This is ammonium hydroxide, a common household cleaning agent. It is highly " +"unsafe to drink." msgstr "" #: lang/json/json_items.py -msgid "metal crossbow bolt" +msgid "plant food" msgstr "" #: lang/json/json_items.py -msgid "" -"A sharpened bolt made from metal of some kind. It's heavy and unwieldy, " -"providing moderate damage and accuracy. Stands a good chance of remaining " -"intact once fired." +msgid "Don't drink it; feed it to your plants!" msgstr "" #: lang/json/json_items.py -msgid "steel crossbow bolt" +msgid "acid water" msgstr "" #: lang/json/json_items.py msgid "" -"A sharp bolt made from steel. Deadly in skilled hands. Stands an excellent " -"chance of remaining intact once fired." +"Water collected during an acid rainstorm. Don't drink it. Boiling it " +"concentrates the acid." msgstr "" #: lang/json/json_items.py -msgid "explosive crossbow bolt" +msgid "weak acid water" msgstr "" #: lang/json/json_items.py msgid "" -"A sharpened bolt made from metal of some kind. It's light but unwieldy, " -"providing moderate accuracy, because it's been filled with explosives and " -"fitted with an impact trigger." +"A mixture of rain and acid rain. Don't drink it. Boiling it concentrates the " +"acid." msgstr "" #: lang/json/json_items.py -msgid "self bow" +msgid "concentrated acid" msgstr "" #: lang/json/json_items.py -msgid "" -"A bow made from a single piece of wood. It is made specifically for the " -"person using it." +msgid "Concentrated acid. Don't drink it." msgstr "" #: lang/json/json_items.py -msgid "short bow" +msgid "mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A shorter bow than the longbow, easier to draw than the longbow but " -"sacrifices power. Arrows fired from this weapon have a good chance of " -"remaining intact for re-use. It requires 8 strength to fire" -msgstr "" - #: lang/json/json_items.py -msgid "compound bow" +#: lang/json/json_items.py +#: lang/json/json_items.py +#: lang/json/json_items.py +#: lang/json/json_items.py +#: lang/json/json_items.py +msgid "A rare substance of uncertain origins. Causes you to mutate." msgstr "" #: lang/json/json_items.py -msgid "" -"A bow with cams that fires high velocity arrows. Weaker people can use " -"compound bows more easily. Arrows fired from this weapon have a good chance " -"of remaining intact for re-use. It requires 8 strength to fire" +msgid "plant mutagen" msgstr "" #: lang/json/json_items.py -msgid "composite bow" +msgid "insect mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A bow made from more than one material so it is able to store more energy. " -"Arrows fired from this weapon have a good chance of remaining intact for re-" -"use. It requires 10 strength to fire" +msgid "spider mutagen" msgstr "" #: lang/json/json_items.py -msgid "recurve bow" +msgid "slime mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A bow that curves away from the archer at the tips allowing more power to be " -"stored in the bow. Arrows fired from this weapon have a good chance of " -"remaining intact for re-use. It requires 10 strength to fire" +msgid "fish mutagen" msgstr "" #: lang/json/json_items.py -msgid "reflex bow" +msgid "rat mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A bow that has limbs which curve away from the archer sacrificing accuracy " -"for power. Arrows fired from this weapon have a good chance of remaining " -"intact for re-use. It requires 10 strength to fire" +msgid "beast mutagen" msgstr "" #: lang/json/json_items.py -msgid "longbow" +msgid "cattle mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A six-foot wooden bow that fires arrows. This takes a fair amount of " -"strength to draw. Arrows fired from this weapon have a good chance of " -"remaining intact for re-use. It requires 10 strength to fire" +msgid "cephalopod mutagen" msgstr "" #: lang/json/json_items.py -msgid "reflex recurve bow" +msgid "bird mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A bow that combines the traits from both the reflex and the recurve bows. " -"Both the limbs and the tips curve away from the archer. This dramatically " -"increases the power while increasing the strength to draw the bow " -"significantly. It requires 12 strength to fire efficiently." +msgid "lizard mutagen" msgstr "" #: lang/json/json_items.py -msgid "pistol crossbow" +msgid "troglobite mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A small concealable pistol like crossbow. It is weak due to it's small size " -"and draw, good for hunting small game. Bolts fired from this weapon have a " -"good chance of remaining intact for re-use." +msgid "medical mutagen" msgstr "" #: lang/json/json_items.py -msgid "crossbow" +msgid "purifier" msgstr "" #: lang/json/json_items.py msgid "" -"A slow-loading hand weapon that launches bolts. Stronger people can reload " -"it much faster. Bolts fired from this weapon have a good chance of remaining " -"intact for re-use." +"A rare stem-cell treatment that causes mutations and other genetic defects " +"to fade away." msgstr "" #: lang/json/json_items.py -msgid "Ganz-Rustung" +msgid "chimera mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A HUGE very slow-loading medieval crossbow from Germany. It's tension is so " -"powerful that you feel it shake after firing. Un-skilled users will find it " -"very hard to reload. Bolts fired from this weapon have a good chance of " -"remaining intact for re-use." +msgid "An extremely rare mutagen cocktail." msgstr "" #: lang/json/json_items.py -msgid "repeating crossbow" +msgid "alpha mutagen" msgstr "" #: lang/json/json_items.py -msgid "" -"A custom made mechanical large crossbow, with a wooden magazine that holds " -"10 bolts. Single bolt reload. Bolts fired from this weapon have a good " -"chance of remaining intact for re-use." +msgid "tea" msgstr "" #: lang/json/json_items.py -msgid "plastic shaft" +msgid "Tea, the beverage of gentlemen everywhere." msgstr "" #: lang/json/json_items.py -msgid "" -"A crude shaft made from plastic. It needs arrowheads and fletching to become " -"a functional arrow. You can, however, fire it from a bow." +msgid "kompot" msgstr "" #: lang/json/json_items.py -msgid "plastic arrowhead" +msgid "Clear juice obtained by cooking fruit in a large volume of water" msgstr "" #: lang/json/json_items.py -msgid "" -"Plastic heads for an arrow. Placing these on an arrow will make the arrow " -"more damaging and piercing." +msgid "coffee" msgstr "" #: lang/json/json_items.py -msgid "throwing knife" +msgid "Coffee. The morning ritual of the pre-apocalypse world." msgstr "" #: lang/json/json_items.py -msgid "" -"A thin and flat knife made for throwing. Its ineffective cutting edge and " -"odd shape makes it unsuitable for use as a tool." +msgid "chocolate drink" msgstr "" #: lang/json/json_items.py -msgid "throwing axe" +msgid "" +"A chocolate flavored beverage made of artifical flavoring and milk " +"byproducts. Shelf stable and vaguely appetizing even when lukewarm." msgstr "" #: lang/json/json_items.py -msgid "" -"A lightweight hatchet made for throwing. Its ineffective cutting edge and " -"light weight makes it unsuitable for use as a tool." +msgid "blood" msgstr "" #: lang/json/json_items.py -msgid "plastic arrow" +msgid "Blood, possibly that of a human. Disgusting!" msgstr "" #: lang/json/json_items.py -msgid "This plastic arrow has a plastic arrow head and some fletchings." +msgid "bone" msgstr "" #: lang/json/json_items.py -msgid "water" +msgid "" +"A bone from some creature or other, could be eaten or used to make some " +"stuff, like needles." msgstr "" #: lang/json/json_items.py -msgid "Water, the stuff of life, the best thirst-quencher available." +msgid "fluid sac" msgstr "" #: lang/json/json_items.py -msgid "Fresh, clean water. Truly the best thing to quench your thirst." +msgid "" +"A fluid bladder from a plant based lifeform, not very nutritious, but fine " +"to eat anyway." msgstr "" #: lang/json/json_items.py -msgid "sewage sample" +msgid "chunk of meat" msgstr "" #: lang/json/json_items.py -msgid "A sample of sewage from a treatment plant. Gross." +msgid "Freshly butchered meat. You could eat it raw, but cooking it is better." msgstr "" #: lang/json/json_items.py -msgid "salt water" +msgid "plant marrow" msgstr "" #: lang/json/json_items.py -msgid "Water with salt added. Not good for drinking." +msgid "A nutrient rich chunk of plant matter, could be eaten raw or cooked." msgstr "" #: lang/json/json_items.py -msgid "orange juice" +msgid "human flesh" msgstr "" #: lang/json/json_items.py -msgid "Freshly-squeezed from real oranges! Tasty and nutritious." +msgid "Freshly butchered from a human body." msgstr "" #: lang/json/json_items.py -msgid "apple cider" +msgid "wild vegetables" msgstr "" #: lang/json/json_items.py -msgid "Pressed from fresh apples. Tasty and nutritious." +msgid "" +"An assortment of edible-looking wild plants. Most are quite bitter-tasting." msgstr "" #: lang/json/json_items.py -msgid "lemonade" +msgid "tainted meat" msgstr "" #: lang/json/json_items.py msgid "" -"Lemon juice mixed with water and sugar to dull the sourness. Delicious and " -"refreshing." +"Meat that's obviously unhealthy. You could eat it, but it will poison you." msgstr "" #: lang/json/json_items.py -msgid "cranberry juice" +msgid "blob glob" msgstr "" #: lang/json/json_items.py -msgid "Made from real Massachusetts cranberries. Delicious and nutritious." +msgid "" +"A little hunk of glop that fell off a blob monster. It doesn't seem " +"hostile, but it does wiggle occasionally." msgstr "" #: lang/json/json_items.py -msgid "sports drink" +msgid "tainted veggy" msgstr "" #: lang/json/json_items.py msgid "" -"Consisting of a special blend of electrolytes and simple sugars, this " -"beverage tastes like bottled sweat but rehydrates the body faster than water." +"Vegetable that looks poisonous. You could eat it, but it will poison you." msgstr "" #: lang/json/json_items.py -msgid "energy drink" +msgid "cooked meat" msgstr "" #: lang/json/json_items.py -msgid "Popular among those who need to stay up late working." +msgid "Freshly cooked meat. Very nutritious." msgstr "" #: lang/json/json_items.py -msgid "cola" +msgid "smoked meat" msgstr "" #: lang/json/json_items.py -msgid "Things go better with cola. Sugar water with caffeine added." +msgid "Tasty meat that has been heavily smoked for long term preservation." msgstr "" #: lang/json/json_items.py -msgid "root beer" -msgstr "" - -#: lang/json/json_items.py -msgid "Like cola, but without caffeine. Still not that healthy." -msgstr "" - -#: lang/json/json_items.py -msgid "grape drink" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"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." -msgstr "" - -#: lang/json/json_items.py -msgid "milk" -msgstr "" - -#: lang/json/json_items.py -msgid "Baby cow food, appropriated for adult humans. Spoils rapidly." -msgstr "" - -#: lang/json/json_items.py -msgid "condensed milk" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Baby cow food, appropriated for adult humans. Having been canned, this milk " -"should last for a very long time." -msgstr "" - -#: lang/json/json_items.py -msgid "V8" -msgstr "" - -#: lang/json/json_items.py -msgid "Contains up to 8 vegetables! Nutritious and tasty." -msgstr "" - -#: lang/json/json_items.py -msgid "broth" -msgstr "" - -#: lang/json/json_items.py -msgid "Vegetable stock. Tasty and fairly nutritious." -msgstr "" - -#: lang/json/json_items.py -msgid "bone broth" -msgstr "" - -#: lang/json/json_items.py -msgid "A tasty and nutritious broth made from bones." -msgstr "" - -#: lang/json/json_items.py -msgid "vegetable soup" -msgstr "" - -#: lang/json/json_items.py -msgid "A nutritious and delicious hearty vegetable soup." -msgstr "" - -#: lang/json/json_items.py -msgid "meat soup" -msgstr "" - -#: lang/json/json_items.py -msgid "A nutritious and delicious hearty meat soup." -msgstr "" - -#: lang/json/json_items.py -msgid "woods soup" -msgstr "" - -#: lang/json/json_items.py -msgid "A nutritious and delicious soup, made of gifts of nature." -msgstr "" - -#: lang/json/json_items.py -msgid "sap soup" -msgstr "" - -#: lang/json/json_items.py -msgid "A soup made from someone who is a far better meal than person." -msgstr "" - -#: lang/json/json_items.py -msgid "riesling" -msgstr "" - -#: lang/json/json_items.py -msgid "Sparkling white wine, made from the world's noblest grape." -msgstr "" - -#: lang/json/json_items.py -msgid "chardonnay" -msgstr "" - -#: lang/json/json_items.py -msgid "America's most popular wine, and for good reason." -msgstr "" - -#: lang/json/json_items.py -msgid "cabernet sauvignon" -msgstr "" - -#: lang/json/json_items.py -msgid "The heavily disputed king of red wines. Pairs well red meats and pasta." -msgstr "" - -#: lang/json/json_items.py -msgid "pinot noir" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Prized by collectors and adored by critics, it is one of the rarer and more " -"elegant wines." -msgstr "" - -#: lang/json/json_items.py -msgid "whiskey" -msgstr "" - -#: lang/json/json_items.py -msgid "Made from, by, and for real Southern colonels!" -msgstr "" - -#: lang/json/json_items.py -msgid "vodka" -msgstr "" - -#: lang/json/json_items.py -msgid "In Soviet Russia, vodka drinks you!" -msgstr "" - -#: lang/json/json_items.py -msgid "gin" -msgstr "" - -#: lang/json/json_items.py -msgid "Smells faintly of elderberries, but mostly booze." -msgstr "" - -#: lang/json/json_items.py -msgid "rum" -msgstr "" - -#: lang/json/json_items.py -msgid "Drinking this might make you feel like a pirate. Or not." -msgstr "" - -#: lang/json/json_items.py -msgid "tequila" -msgstr "" - -#: lang/json/json_items.py -msgid "Don't eat the worm! Wait, there's no worm in this bottle." -msgstr "" - -#: lang/json/json_items.py -msgid "triple sec" -msgstr "" - -#: lang/json/json_items.py -msgid "An orange flavored liquor used in many mixed drinks." -msgstr "" - -#: lang/json/json_items.py -msgid "cheap wine" -msgstr "" - -#: lang/json/json_items.py -msgid "Really cheap fortified wine." -msgstr "" - -#: lang/json/json_items.py -msgid "Irish coffee" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Sweetened coffee and whiskey. Start your day the closeted alcoholic way!" -msgstr "" - -#: lang/json/json_items.py -msgid "long island iced tea" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A blend of incredibly strong-flavored liquors that somehow tastes like none " -"of them." -msgstr "" - -#: lang/json/json_items.py -msgid "screwdriver" -msgstr "" - -#: lang/json/json_items.py -msgid "The surreptitious drunkard mechanic's drink of choice." -msgstr "" - -#: lang/json/json_items.py -msgid "wild apple" -msgstr "" - -#: lang/json/json_items.py -msgid "Like apple cider, only with vodka." -msgstr "" - -#: lang/json/json_items.py -msgid "rum & cola" -msgstr "" - -#: lang/json/json_items.py -msgid "Suitable for tropical retreats and Canadian artists alike." -msgstr "" - -#: lang/json/json_items.py -msgid "beer" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Best served cold, in a glass, and with a lime - but you're not that lucky." -msgstr "" - -#: lang/json/json_items.py -msgid "bleach" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"This is sodium hypochlorite, a common household cleaning agent. It is highly " -"unsafe to drink." -msgstr "" - -#: lang/json/json_items.py -msgid "ammonia" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"This is ammonium hydroxide, a common household cleaning agent. It is highly " -"unsafe to drink." -msgstr "" - -#: lang/json/json_items.py -msgid "plant food" -msgstr "" - -#: lang/json/json_items.py -msgid "Don't drink it; feed it to your plants!" -msgstr "" - -#: lang/json/json_items.py -msgid "acid water" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Water collected during an acid rainstorm. Don't drink it. Boiling it " -"concentrates the acid." -msgstr "" - -#: lang/json/json_items.py -msgid "weak acid water" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A mixture of rain and acid rain. Don't drink it. Boiling it concentrates the " -"acid." -msgstr "" - -#: lang/json/json_items.py -msgid "concentrated acid" -msgstr "" - -#: lang/json/json_items.py -msgid "Concentrated acid. Don't drink it." -msgstr "" - -#: lang/json/json_items.py -msgid "mutagen" -msgstr "" - -#: lang/json/json_items.py -#: lang/json/json_items.py -#: lang/json/json_items.py -#: lang/json/json_items.py -#: lang/json/json_items.py -#: lang/json/json_items.py -#: lang/json/json_items.py -msgid "A rare substance of uncertain origins. Causes you to mutate." -msgstr "" - -#: lang/json/json_items.py -msgid "plant mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "insect mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "spider mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "slime mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "fish mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "rat mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "beast mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "cattle mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "cephalopod mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "bird mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "lizard mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "troglobite mutagen" -msgstr "" - -#: lang/json/json_items.py -msgid "purifier" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A rare stem-cell treatment that causes mutations and other genetic defects " -"to fade away." -msgstr "" - -#: lang/json/json_items.py -msgid "tea" -msgstr "" - -#: lang/json/json_items.py -msgid "Tea, the beverage of gentlemen everywhere." -msgstr "" - -#: lang/json/json_items.py -msgid "kompot" -msgstr "" - -#: lang/json/json_items.py -msgid "Clear juice obtained by cooking fruit in a large volume of water" -msgstr "" - -#: lang/json/json_items.py -msgid "coffee" -msgstr "" - -#: lang/json/json_items.py -msgid "Coffee. The morning ritual of the pre-apocalypse world." -msgstr "" - -#: lang/json/json_items.py -msgid "chocolate drink" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A chocolate flavored beverage made of artifical flavoring and milk " -"byproducts. Shelf stable and vaguely appetizing even when lukewarm." -msgstr "" - -#: lang/json/json_items.py -msgid "blood" -msgstr "" - -#: lang/json/json_items.py -msgid "Blood, possibly that of a human. Disgusting!" -msgstr "" - -#: lang/json/json_items.py -msgid "bone" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A bone from some creature or other, could be eaten or used to make some " -"stuff, like needles." -msgstr "" - -#: lang/json/json_items.py -msgid "fluid sac" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A fluid bladder from a plant based lifeform, not very nutritious, but fine " -"to eat anyway." -msgstr "" - -#: lang/json/json_items.py -msgid "chunk of meat" -msgstr "" - -#: lang/json/json_items.py -msgid "Freshly butchered meat. You could eat it raw, but cooking it is better." -msgstr "" - -#: lang/json/json_items.py -msgid "plant marrow" -msgstr "" - -#: lang/json/json_items.py -msgid "A nutrient rich chunk of plant matter, could be eaten raw or cooked." -msgstr "" - -#: lang/json/json_items.py -msgid "human flesh" -msgstr "" - -#: lang/json/json_items.py -msgid "Freshly butchered from a human body." -msgstr "" - -#: lang/json/json_items.py -msgid "wild vegetables" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"An assortment of edible-looking wild plants. Most are quite bitter-tasting." -msgstr "" - -#: lang/json/json_items.py -msgid "tainted meat" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Meat that's obviously unhealthy. You could eat it, but it will poison you." -msgstr "" - -#: lang/json/json_items.py -msgid "blob glob" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"A little hunk of glop that fell off a blob monster. It doesn't seem " -"hostile, but it does wiggle occasionally." -msgstr "" - -#: lang/json/json_items.py -msgid "tainted veggy" -msgstr "" - -#: lang/json/json_items.py -msgid "" -"Vegetable that looks poisonous. You could eat it, but it will poison you." -msgstr "" - -#: lang/json/json_items.py -msgid "cooked meat" -msgstr "" - -#: lang/json/json_items.py -msgid "Freshly cooked meat. Very nutritious." -msgstr "" - -#: lang/json/json_items.py -msgid "smoked meat" -msgstr "" - -#: lang/json/json_items.py -msgid "Tasty meat that has been heavily smoked for long term preservation." -msgstr "" - -#: lang/json/json_items.py -msgid "sausage" +msgid "sausage" msgstr "" #: lang/json/json_items.py @@ -25812,3095 +25397,3858 @@ msgid "A smooth-skinned fruit, related to the peach." msgstr "" #: lang/json/json_items.py -msgid "lighter" +msgid "Playboy" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a disposable plastic lighter. A lighter must be carried to use " -"various drugs, like cigarettes, or to light things like molotov cocktails. " -"You can also use a lighter to light nearby items on fire." +msgid "You can read it for the articles. Or not." msgstr "" #: lang/json/json_items.py -msgid "matchbook" +msgid "photo album" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small book of matches, with a coarse strike surface on the outside " -"flap. Matches must be carried to use various drugs like cigarettes, or to " -"light things like molotov cocktails. You can also use matches to light " -"nearby items on fire." +"A leather album full of photos of somebody's family. You don't know any of " +"the people in them, but seeing these pictures still makes you think of " +"happier times." msgstr "" #: lang/json/json_items.py -msgid "fire drill" +msgid "car buyer's guide" msgstr "" #: lang/json/json_items.py msgid "" -"This is a fire drill is a simple item for firestarting, made from two pieces " -"of wood and some string. Although it is constructed out of simple materials, " -"it's slow and rather difficult to get a fire started with this tool." +"Normally this glossy, ad-filled magazine about cars would be pointless, but " +"it has a series of articles on haggling techniques." msgstr "" #: lang/json/json_items.py -msgid "rolling papers" +msgid "Computer World" msgstr "" #: lang/json/json_items.py msgid "" -"These are thin paper strips intended for the rolling of cigarettes. These " -"could also be used to make cartridges for a cap and ball revolver." +"An informative magazine all about computers, both hardware and software." msgstr "" #: lang/json/json_items.py -msgid "quern" +msgid "Ham Radio Illustrated" msgstr "" #: lang/json/json_items.py -msgid "This is a simple hand-powered stone quern for grinding grain." +msgid "" +"An amusing magazine about ham radio, with lots of diagrams and illustrations " +"for making your own electronic devices." msgstr "" #: lang/json/json_items.py -msgid "sewing kit" +msgid "Popular Mechanics" msgstr "" #: lang/json/json_items.py msgid "" -"This is a plastic kit with a variety of needles, some plastic spools for " -"thread, and a few other useful textile tools. Use a sewing kit on an article " -"of clothing to attempt to repair or reinforce that clothing. This uses your " -"tailoring skill." +"A magazine about mechanical innovations. Full of entertaining articles and " +"advertisements for esoteric gadgets." msgstr "" #: lang/json/json_items.py -msgid "scissors" +msgid "Outdoor Adventures" msgstr "" #: lang/json/json_items.py msgid "" -"These are a long pair of heavy duty scissors. Use scissors to cut items made " -"from cotton (like clothing) into rags." +"A glossy magazine about surviving and hunting in the wilderness. There's an " +"exciting article about a bear attack in the back pages." msgstr "" #: lang/json/json_items.py -msgid "hammer" +msgid "Through the Lens" msgstr "" #: lang/json/json_items.py msgid "" -"This is a steel demagnetized hammer with a rubber grip. With a hammer, nails " -"and two by fours in your inventory, you could board up adjacent doors and " -"windows. It has myriad other uses as well." +"A colorful digest devoted to backpacking and wilderness photography. The " +"photos are beautiful, though the terminology in the sections on " +"survivalcraft assume some proficiency." msgstr "" #: lang/json/json_items.py -msgid "fire extinguisher" +msgid "Trapper's Life" msgstr "" #: lang/json/json_items.py msgid "" -"This is a large emergency fire extinguisher. It would be useful for putting " -"out adjacent fires." +"An in-depth magazine about trapping game. There are lots of articles and " +"diagrams that explain simple trap designs." msgstr "" #: lang/json/json_items.py -msgid "extra battery mod" +msgid "Survival Under Atomic Attack" msgstr "" #: lang/json/json_items.py msgid "" -"This is a patchwork capacitance device made with spare electronics. With " -"enough electronics skill, you could attach this to your devices to increase " -"their battery capacity." +"A wordy and intricate guide to wilderness and urban survival in a worst case " +"scenario. While filled with loads of useful information, the madman who " +"wrote this was a terrible writer, and gleaning knowledge from the rants is a " +"chore." msgstr "" #: lang/json/json_items.py -msgid "gasoline lantern (off)" +msgid "The Trapper's Companion" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small gasoline powered lantern. It does not provide much light, " -"but it lasts a long time. Use it to turn it on." +"A folksy guide to trapping wild game using time-tested methods. A bit in-" +"depth for the beginner, it can provide a wealth of information to a " +"knowledgeable trapper." msgstr "" #: lang/json/json_items.py -msgid "gasoline lantern (on)" +msgid "Batter Up!" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small gasoline powered lantern. It does not provide much light, " -"but it lasts a long time. It is turned on. Use it to turn it off." +"A baseball magazine that focuses on batting tips. There are lots of " +"colorful, full-page photos of skilled athletes demonstrating proper form and " +"technique." msgstr "" #: lang/json/json_items.py -msgid "flashlight (off)" +msgid "tactical baton defense manual" msgstr "" #: lang/json/json_items.py msgid "" -"This is a heavy duty LED flashlight. Using this flashlight will turn it on, " -"assuming it is charged with batteries. A turned-on flashlight will provide " -"light during the night or while underground." +"An informative guide to self-defense using clubs and batons. Aimed at the " +"law enforcement and military market, it is packed with time tested, no-" +"nonsense information and written to be understandable for beginners." msgstr "" #: lang/json/json_items.py -msgid "flashlight (on)" +msgid "All About Swords" msgstr "" #: lang/json/json_items.py msgid "" -"This is a heavy duty LED flashlight. This flashlight is turned on, and " -"continually draining its batteries. It provides light during the night or " -"while underground. Use it to turn it off." +"An interesting magazine that contains information about swords and " +"swordfighting techniques from all across the world." msgstr "" #: lang/json/json_items.py -msgid "lightstrip (dead)" +msgid "knife fighter's notes" msgstr "" #: lang/json/json_items.py msgid "" -"This is a burnt-out lightstrip. You could disassemble this to recover the " -"amplifier circuit." +"It seems to be a guide to edged weapon combat, poorly photocopied and " +"released on spiral- bound paper. Still, there are lots of useful tips for " +"beginners." msgstr "" #: lang/json/json_items.py -msgid "lightstrip (inactive)" +msgid "CQB Monthly" msgstr "" #: lang/json/json_items.py msgid "" -"This is a light-emitting circuit wired directly to some batteries. Once it " -"is activated, it will provide 25 hours of light per 3 (battery) charges. " -"When the batteries die, you'll need to scrap it to recover the components " -"that are reusable." +"An in-depth look at various styles of close quarters fighting. There's an " +"amusing essay about dirty tricks in the front section." msgstr "" #: lang/json/json_items.py -msgid "lightstrip (active)" +msgid "Close Quarter Fighting Manual" msgstr "" #: lang/json/json_items.py msgid "" -"This is a light-emitting circuit wired directly to some batteries. It " -"provides some weak light, lasting 25 hours per 3 (battery) charges. When the " -"batteries die, you'll need to scrap it to recover the components that are " -"reusable." +"A well-thumbed hardbound book which illustrates simple strategies and " +"techniques for close quarters combat encounters." msgstr "" #: lang/json/json_items.py -msgid "glowstick" +msgid "Duelist's Annual" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small blue light glowstick. Use it to bend the plastic and break " -"the glass cylinder inside to start the reaction. It will produce a very " -"small amount of light." +"An annual publication about fencing and dueling. There are many good " +"illustrations which describe proper technique and form." msgstr "" #: lang/json/json_items.py -msgid "active glowstick" +msgid "Boxing Monthly" msgstr "" #: lang/json/json_items.py msgid "" -"This is an active glowstick and is producing light. It will last for a few " -"hours before burning out." +"An exciting monthly magazine about boxing. There are lots of large, colorful " +"photos of pugilistic exploits." msgstr "" #: lang/json/json_items.py -msgid "dead glowstick" +msgid "High Explosives Quarterly" msgstr "" #: lang/json/json_items.py -msgid "This is a spent glowstick. It is essentially trash." +msgid "" +"An interesting quarterly report about rocket launchers and recoilless " +"rifles. There are lots of large, exciting photos of explosions and weaponry." msgstr "" #: lang/json/json_items.py -msgid "flare" +msgid "Jane's Mortars and Rocket Launchers" msgstr "" #: lang/json/json_items.py msgid "" -"This is a slow-burning magnesium flare. Use it to strike the striker and " -"light it. It will produce a bright light for about a half hour." +"An incredibly detailed guide to modern rockets, mortars, grenade launchers, " +"and recoilless weaponry. Lavishly illustrated with color photographs, it " +"contains a wealth of information." msgstr "" #: lang/json/json_items.py -msgid "active flare" +msgid "Tactical Handgun Digest" msgstr "" #: lang/json/json_items.py msgid "" -"This burning magnesium flare is producing light. It will last for about a " -"half hour before burning out." +"A glossy magazine all about handguns and shooting. There is a good article " +"about proper sighting near the middle." msgstr "" #: lang/json/json_items.py -msgid "dead flare" +msgid "The Tao of the Handgun" msgstr "" #: lang/json/json_items.py -msgid "This is a spent magnesium flare. It is essentially trash." +msgid "" +"This introspective volume covers proper usage of handguns, from safety and " +"stance, to maintenance and proper sighting technique." msgstr "" #: lang/json/json_items.py -msgid "hotplate" +msgid "Modern Rifleman" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small heating element on a stand, powered by batteries. It is " -"indispensable for cooking and chemistry. Try not to burn yourself." +"An informative magazine all about rifles and shooting. There is an excellent " +"article about proper maintenance in this issue." msgstr "" #: lang/json/json_items.py -msgid "soldering iron" +msgid "FM 23-16 Army marksmanship manual" msgstr "" #: lang/json/json_items.py msgid "" -"This is a device with a metal tip that can get very hot. It is necessary for " -"advanced electronics crafting. You could also use it to cauterize wounds, if " -"you had to." +"A hefty military field manual about automatic rifle usage and techniques " +"which improve marksmanship and proper weapons-handling." msgstr "" #: lang/json/json_items.py -msgid "water purifier" +msgid "Trap and Field" msgstr "" #: lang/json/json_items.py msgid "" -"This is a a device with a sieve, some tubing, and an activated carbon core. " -"Using this item on a container full of water will purify the water. It could " -"be useful for water taken from uncertain sources like a river, as it may be " -"non-potable." +"An in-depth magazine all about shotguns and shooting. There is an " +"informative article about proper shooting stance in the back pages." msgstr "" #: lang/json/json_items.py -msgid "two-way radio" +msgid "Shotguns: The art and science" msgstr "" #: lang/json/json_items.py msgid "" -"This is a radio with a transmitting unit. Using this allows you to send out " -"a distress signal. You could send either a general SOS, or send a direct " -"call to a faction you are in contact with." +"This book claims to address every problem the shotgunner is likely to face, " +"and offers solutions to ensure that shooters can make every shot count." msgstr "" #: lang/json/json_items.py -msgid "radio (off)" +msgid "Submachine Gun Enthusiast" msgstr "" #: lang/json/json_items.py msgid "" -"This is a portable radio. Using this radio turns it on. It will pick up any " -"nearby signals being broadcast and play them audibly." +"An in-depth magazine about submachine guns and shooting. There is an " +"exhaustive article about close quarter combat techniques in the front." msgstr "" #: lang/json/json_items.py -msgid "radio (on)" +msgid "The Submachine Gun Handbook" msgstr "" #: lang/json/json_items.py msgid "" -"This portable radio is turned on, and continually draining its batteries. It " -"is playing the broadcast being sent from any nearby radio towers." +"This concise guide details the proper care and operation of most forms of " +"machine pistols and submachine guns currently used by regular armed and " +"reserve forces as well as several obsolete weapons." msgstr "" #: lang/json/json_items.py -msgid "directional antenna" +msgid "First Responder Handbook" msgstr "" #: lang/json/json_items.py msgid "" -"This is an antenna designed to pick up signals better when pointed at the " -"source. You could use this with a radio to receive faint signals." +"A hardbound book detailing advanced first aid techniques and field-expedient " +"medical care." msgstr "" #: lang/json/json_items.py -msgid "military black box" +msgid "Principles of Effective Communication" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a black box, seemingly pulled from some sort of military vehicle " -"wreckage. If you can find a system to analyze this you may find something of " -"interest." +msgid "A hardbound book devoted to being an effective and persuasive speaker." msgstr "" #: lang/json/json_items.py -msgid "sarcophagus access code" +msgid "Outdoor Survival Guide" msgstr "" #: lang/json/json_items.py msgid "" -"This printout is a string of numbers to access the elevator in the hazardous " -"waste sarcophagus." +"A thick soft-cover book filled with vital information about surviving in the " +"wild, aimed at the experienced backpacker." msgstr "" #: lang/json/json_items.py -msgid "noise emitter (off)" +msgid "Autobiography of a Mountain Man" msgstr "" #: lang/json/json_items.py msgid "" -"This device was constructed by 'enhancing' a radio with some amplifier " -"circuits. It's completely lost its ability to pick up a station, but it's " -"nice and loud now. It could be useful to distract zombies." +"An amusing historical novel filled with detailed descriptions of surviving " +"in the wild, potentially containing great knowledge an experienced " +"outdoorsman." msgstr "" #: lang/json/json_items.py -msgid "noise emitter (on)" +msgid "The Compleat Trapper" msgstr "" #: lang/json/json_items.py msgid "" -"This device has been turned on and is emitting horrible sounds of radio " -"static. Quick, get away from it before it draws zombies to you!" +"An in-depth book about trapping game animals, covering methods both modern " +"and ancient." msgstr "" #: lang/json/json_items.py -msgid "road map" +msgid "US Weekly" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a road map for the local area. Use it to read points of interest, " -"including, but not limited to, location(s) of hospital(s) nearby." +msgid "Weekly news about a bunch of famous people who're all (un)dead now." msgstr "" #: lang/json/json_items.py -msgid "crowbar" +msgid "TIME magazine" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a hefty prying tool. Use it to open locked doors without destroying " -"them or to lift manhole covers. You could also wield it to bash some heads " -"in." +msgid "Current events concerning a bunch of people who're all (un)dead now." msgstr "" #: lang/json/json_items.py -msgid "makeshift crowbar" +msgid "Top Gear magazine" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a pipe whose ends have been bent and hammered flat to resemble a " -"crowbar. Use it to open locked doors without destroying them, or to lift " -"manhole covers. You could also wield it to fight with, in a pinch." +msgid "Lots of articles about cars and driving techniques." msgstr "" #: lang/json/json_items.py -msgid "hoe" +msgid "Bon Appetit" msgstr "" #: lang/json/json_items.py msgid "" -"This is a farming implement. Use it to turn tillable land into a slow-to-" -"cross pile of dirt." +"Exciting recipes and restaurant reviews. Full of handy tips about cooking." msgstr "" #: lang/json/json_items.py -msgid "shovel" +msgid "Glamopolitan" msgstr "" #: lang/json/json_items.py -msgid "This is a digging tool. Use it to dig pits adjacent to your location." +msgid "" +"This is a full-size glossy women's magazine. There are a few unoriginal " +"recipes and some simple cooking tips somewhere in between the fashion photos " +"and the sex advice columns." msgstr "" #: lang/json/json_items.py -msgid "stethoscope" +msgid "Beauty Magazine" msgstr "" #: lang/json/json_items.py -msgid "This is a medical listening tool. Use it to listen to things. Closely." +msgid "" +"This is a full-size glossy women's magazine. There are a few simple patterns " +"and basic sewing tips somewhere in between the fashion photos and the makeup " +"advertisements." msgstr "" #: lang/json/json_items.py -msgid "rubber hose" +msgid "Alpha Male Quarterly" msgstr "" #: lang/json/json_items.py msgid "" -"This is a flexible rubber hose. It could be used for crafting, or siphoning " -"fuel from a vehicle." +"This is a full-size glossy men's magazine. There's a brief article about " +"hiking and a list of simple wilderness survival tips somewhere in between " +"the photos of bikini-clad women and the gadget advertisements." msgstr "" #: lang/json/json_items.py -msgid "chainsaw (off)" +msgid "Birdhouse Monthly" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a lumbering tool moonlighting as weapon of opportunity. Using this " -"item will, if loaded with gas, cause it to turn on, making a very powerful, " -"but slow, unwieldy, and noisy, melee weapon (if wielded)." +msgid "A riveting periodical all about birdhouses and their construction." msgstr "" #: lang/json/json_items.py -msgid "chainsaw (on)" +msgid "Guns n Ammo" msgstr "" #: lang/json/json_items.py -msgid "" -"This chainsaw is on, and is continuously draining gasoline. Use it to turn " -"it off." +msgid "Reviews of firearms, and various useful tips about their use." msgstr "" #: lang/json/json_items.py -msgid "jackhammer" +msgid "The Gun Owner's Handbook" msgstr "" #: lang/json/json_items.py msgid "" -"This is a construction tool for drilling through hard rock or other " -"surfaces. It runs on gasoline. Use it (if loaded) to blast a hole in " -"adjacent solid terrain." +"A thick soft-cover book that claims to be a complete guide to safely " +"operating, maintaining, and repairing firearms." msgstr "" #: lang/json/json_items.py -msgid "jacqueshammer" +msgid "Archery for Kids" msgstr "" #: lang/json/json_items.py msgid "" -"Ce jacqueshammer marche a l'essence. Utilisez-le (si charge) pour creuser un " -"trou dans un terrain solide adjacent." +"Will you be able to place the arrow right into the bullseye? It is not that " +"easy, but once you know how it's done, you will have a lot of fun with " +"archery." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "bubble wrap" +#: lang/json/json_items.py +msgid "Zen and the Art of Archery" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sheet of plastic covered with air-filled bubbles. Use it to set it " -"on the ground, creating a trap that will warn you with noise when something " -"steps on it." +"This massive book contains a wealth of vital information for the novice " +"archer." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "bear trap" +#: lang/json/json_items.py +msgid "Lessons for the Novice Bowhunter" msgstr "" #: lang/json/json_items.py msgid "" -"This is a spring-loaded pair of steel jaws connected to a sensitive pressure " -"plate. Use it to set it on the ground, creating a trap that will ensnare and " -"damage anything that steps on it. If you are carrying a shovel, you will " -"have the option of burying it." +"This hefty paperback book contains all the information needed for novice " +"archers to get started hunting with a variety of bows and crossbows." msgstr "" #: lang/json/json_items.py -msgid "nailboard trap" +msgid "Computer Gaming" msgstr "" #: lang/json/json_items.py msgid "" -"These are several pieces of wood nailed together, with some nails sticking " -"straight up. If an unsuspecting victim steps on it, they'll get nails " -"through the foot." +"Reviews of recently released computer games and previews of upcoming titles." msgstr "" #: lang/json/json_items.py -msgid "loose caltrops" +msgid "comic book" msgstr "" #: lang/json/json_items.py -msgid "" -"These are small metal objects covered with many sharp points. If an " -"unsuspecting victim steps on one, they'll get a spine through the foot." +msgid "A super-hero comic." msgstr "" #: lang/json/json_items.py -msgid "tripwire trap" +msgid "Paramedics" msgstr "" #: lang/json/json_items.py -msgid "" -"This is some thin strong cable with some affixing tools on either end. A " -"tripwire trap must be placed across a doorway or other thin passage. Its " -"purpose is to trip up bypassers, causing them to stumble and possibly hurt " -"themselves slightly." +msgid "An educational magazine for EMTs." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "crossbow trap" +#: lang/json/json_items.py +msgid "Dance Dance Dance!" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a simple tripwire, which is attached to the trigger of a loaded " -"crossbow. When pulled, the crossbow fires. Only a single round can be used, " -"after which the trap is disabled." +msgid "Learn the moves of the trendiest dances right now." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "shotgun trap" +#: lang/json/json_items.py +msgid "The Book of Dances" msgstr "" #: lang/json/json_items.py msgid "" -"This is a simple tripwire is attached to the trigger of a loaded sawn-off " -"shotgun. When pulled, the shotgun fires. Two shells are loaded; the first " -"time the trigger is pulled, one or both shells may be discharged." +"This massive antique book documents dances from all around the world in " +"great detail. A perceptive reader could learn a lot about defensive footwork " +"from some of the war dances." msgstr "" #: lang/json/json_items.py -msgid "blade trap" +msgid "Diskobolus" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a machete attached laterally to a motor, with a tripwire controlling " -"its throttle. When the tripwire is pulled, the blade is swung around with " -"great force. The trap forms a 3x3 area of effect." +msgid "A biannual magazine devoted to discus throw." msgstr "" #: lang/json/json_items.py -msgid "light snare kit" +msgid "The Complete Guide to Pitching" msgstr "" #: lang/json/json_items.py msgid "" -"This is a kit for a simple trap consisting of a string noose and a snare " -"trigger. It requires a young tree nearby. It is effective at trapping and " -"killing some small animals." +"A detailed guide for baseball pitchers that combines time-tested techniques " +"and information mixed with a common sense approach to pitching." msgstr "" #: lang/json/json_items.py -msgid "heavy snare kit" +msgid "Swim Planet" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a kit for a simple trap consisting of a rope noose and a snare " -"trigger. It requires a tree nearby. It is effective at trapping monsters." +msgid "The world's leading resource about aquatic sports." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "land mine" +#: lang/json/json_items.py +msgid "Water Survival Training Field Manual" msgstr "" #: lang/json/json_items.py msgid "" -"This is an military anti-personnel mine that is triggered when stepped upon." +"A commercially produced survival guide that details swimming and deep water " +"survival techniques tailored to emergency scenarios." msgstr "" #: lang/json/json_items.py -msgid "geiger ctr (off)" +msgid "romance novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a tool for measuring radiation. Using it will prompt you to choose " -"whether to scan yourself or the terrain, or to turn it on, which will " -"provide continuous feedback on ambient radiation. It is currently off." +msgid "Drama and mild smut." msgstr "" #: lang/json/json_items.py -msgid "geiger ctr (on)" +msgid "spy novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a tool for measuring radiation. It is in continuous scan mode, and " -"will produce quiet clicking sounds in the presence of ambient radiation. " -"Using it allows you to turn it off, or scan yourself or the ground. It is " -"currently on." +"A tale of intrigue and espionage amongst Nazis, no, Commies, no, Iraqis!" msgstr "" #: lang/json/json_items.py -msgid "teleporter" +msgid "thriller novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This is an arcane device, powered by plutonium fuel cells. Using it will " -"cause you to teleport a short distance away." +msgid "A suspenseful tale of betrayal and revenge." msgstr "" #: lang/json/json_items.py -msgid "goo canister" +msgid "crime novel" msgstr "" #: lang/json/json_items.py msgid "" -"There is a label on this canister: \"Warning: contains highly toxic and " -"corrosive materials. Contents may be sentient. Open at your own risk.\" You " -"think you can feel something moving inside it." +"After their diamond heist goes wrong, the surviving criminals begin to " +"suspect that one of them is a police informant." msgstr "" #: lang/json/json_items.py -msgid "pipe bomb" +msgid "scifi novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a section of a pipe filled with explosive materials. Use this item " -"with to light the fuse, which gives you three turns to get away from it " -"before it detonates. You'll need a lighter or some matches to use it. It is " -"somewhat unreliable, and may fail to detonate." +msgid "Aliens, ray guns, and space ships." msgstr "" #: lang/json/json_items.py -msgid "active pipe bomb" +msgid "drama novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This pipe bomb's fuse is lit, and it will explode any second now. Throw it " -"immediately!" +msgid "A real book for real adults." msgstr "" #: lang/json/json_items.py -msgid "grenade" +msgid "coming of age novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a military grade fragmentary hand grenade. Use this item to pull the " -"pin and light the fuse. You will then have five turns before it explodes; " -"throwing it would be a good idea." +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." msgstr "" #: lang/json/json_items.py -msgid "active grenade" +msgid "buddy novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is an active grenade, and will explode any second now. Better throw it!" +"A gripping tale of two friends struggling to survive on the streets of New " +"York City." msgstr "" #: lang/json/json_items.py -msgid "Granade" +msgid "road novel" msgstr "" #: lang/json/json_items.py msgid "" -"Attached to this grenade is a name tag with the name Kevin written on it." +"A tale about a group of friends who wander the USA in the 1960s against a " +"backdrop of jazz, poetry and drug use." msgstr "" #: lang/json/json_items.py -msgid "active Granade" +msgid "adventure novel" msgstr "" #: lang/json/json_items.py msgid "" -"Attached to this active grenade is a name tag with the name Kevin written on " -"it. Better throw it!" +"The stirring tale of a race against time, in search of a lost city located " +"in the dark heart of the African continent." msgstr "" #: lang/json/json_items.py -msgid "flashbang" +msgid "experimental novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a military police style flashbang. Use this item to pull the pin and " -"light the fuse. You will then have five turns before it detonates with " -"intense light and sound, blinding, deafening and disorienting anyone nearby." +"A bizarre play about the philosophy of existential absurdity. Or maybe it's " +"about two guys waiting for their friend to show up. It's confusing." msgstr "" #: lang/json/json_items.py -msgid "active flashbang" +msgid "children's book" msgstr "" #: lang/json/json_items.py msgid "" -"This flashbang is active, and will soon detonate with intense light and " -"sound, blinding, deafening and disorienting anyone nearby. It may be a good " -"idea to throw it!" +"A little book for little readers. The colorful cartoon characters and sweet " +"stories contained herein belong to a different time, before the dead walked " +"and the world moved on." msgstr "" #: lang/json/json_items.py -msgid "EMP grenade" +msgid "war novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a grenade that generates a electromagnetic pulse with a tiny nuclear " -"explosion. Use this item to pull the pin and light the fuse, turning it into " -"an active EMP grenade. You will then have three turns before it detonates, " -"creating an EMP field that damages robots and drains bionic energy." +"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." msgstr "" #: lang/json/json_items.py -msgid "active EMP grenade" +msgid "western novel" msgstr "" #: lang/json/json_items.py msgid "" -"This EMP grenade is active, and will shortly detonate, creating a large EMP " -"field that damages robots and drains bionic energy. You may not want to be " -"holding it much longer." +"The classic tale of a gunfighting stranger who comes to a small settlement " +"and is hired to help the townsfolk defend themselves from a band of " +"marauding outlaws." msgstr "" #: lang/json/json_items.py -msgid "scrambler grenade" +msgid "samurai novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a highly modified EMP grenade, designed to scramble robots' IFF " -"control chips, rather than destroy them. This converts the robot to your " -"side for a short time, before the backup systems kick in. Use this item to " -"pull the pin and light the fuse, turning it into an active scrambler grenade." +"The classic tale of a wandering swordsman who comes to a small settlement " +"and is hired to help the townsfolk defend themselves from a band of " +"marauding outlaws." msgstr "" #: lang/json/json_items.py -msgid "active scrambler grenade" +msgid "swashbuckling novel" msgstr "" #: lang/json/json_items.py msgid "" -"This scrambler grenade is active, and will soon detonate, releasing a " -"control wave that temporarily converts robots to your side." +"An exciting seventeenth century tale of how an enslaved irish doctor and his " +"comrades-in-chains escape and become heroic pirates of the Robin Hood " +"variety." msgstr "" #: lang/json/json_items.py -msgid "teargas canister" +msgid "sports novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a canister grenade filled with noxious irritant. Use this item to " -"pull the pin and light the fuse, turning it into an active teargas grenade. " -"In five turns it will begin to expel a highly toxic gas for some time. This " -"gas damages and slows those who enter it, as well as obscuring vision and " -"scent." +"The dramatic tale of a small-time boxer who gets a rare chance to fight the " +"heavy-weight champion, and seize his one chance to make a better life for " +"himself while impressing the cute girl who works in the pet store." msgstr "" #: lang/json/json_items.py -msgid "active teargas grenade" +msgid "fantasy novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This canister of teargas has had its pin removed, indicating that it is (or " -"will shortly be) expelling highly toxic gas. You should consider getting rid " -"of it soon." +msgid "Basic sword & sorcery." msgstr "" #: lang/json/json_items.py -msgid "smoke bomb" +msgid "mystery novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a canister grenade filled with a variety of pyrotechnic chemicals. " -"Use this item to pull the pin and light the fuse, turning it into an active " -"smoke bomb. Five turns after you do that, it will begin to expel a thick " -"black smoke. This smoke will slow those who enter it, as well as obscuring " -"vision and scent." +msgid "A detective investigates an unusual murder in a secluded location." msgstr "" #: lang/json/json_items.py -msgid "active smoke bomb" +msgid "horror novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This smoke bomb has had its pin removed, indicating that it is (or will " -"shortly be) expelling thick smoke." +msgid "Maybe not the best reading material considering the situation." msgstr "" #: lang/json/json_items.py -msgid "flammable arrow" +msgid "erotic novel" msgstr "" #: lang/json/json_items.py -msgid "" -"This arrow has a rag soaked in a flammable liquid wrapped around the shaft " -"near the head. You need to light it before shooting." +msgid "Hackneyed narrative concealing low-grade literary smut." msgstr "" #: lang/json/json_items.py -msgid "molotov cocktail" +msgid "book of poetry" msgstr "" #: lang/json/json_items.py msgid "" -"A bottle of flammable liquid with a rag inserted. Use this item to light the " -"rag. You will, of course, need a lighter or matches in your inventory to do " -"this. After lighting it, throw it to cause fires." +"A collection of poetry by various authors from around the world, including " +"writings by Dickinson, Goethe, Thoreau, and Yeats." msgstr "" #: lang/json/json_items.py -msgid "molotov cocktail (lit)" +msgid "book of tall tales" msgstr "" #: lang/json/json_items.py msgid "" -"A bottle of flammable liquid with a flaming rag inserted. Throwing it will " -"cause the bottle to break, spreading fire. The flame may go out shortly if " -"you do not throw it. Dropping it while lit is not safe." +"An entertaining collection of early American folklore, featuring tales of " +"larger than life individuals and their amazing adventures." msgstr "" #: lang/json/json_items.py -msgid "acid bomb" +msgid "book of fairy tales" msgstr "" #: lang/json/json_items.py msgid "" -"This is a glass vial, split into two chambers. The divider is removable, " -"which will cause the chemicals to mix. If this mixture is exposed to air " -"(perhaps by throwing the vial) they will spill out as a pool of potent acid." +"An amusing collection of folklore featuring the usual cast of fairies, " +"goblins, and trolls." msgstr "" #: lang/json/json_items.py -msgid "acid bomb (active)" +msgid "tragedy novel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a glass vial, with two chemicals mixing inside. The vial feels " -"colder and the contents are frothing. If this mixture is exposed to air (as " -"could happen if you throw the vial), it will spill out as a pool of potent " -"acid." +"The story of two young lovers whose feuding families threaten to keep them " +"apart." msgstr "" #: lang/json/json_items.py -msgid "dynamite" +msgid "book of plays" msgstr "" #: lang/json/json_items.py msgid "" -"These are several sticks of explosives with a fuse attached. Use this item " -"to light the fuse. You will, of course, need a lighter or matches in your " -"inventory to do this. Shortly after lighting the fuse, this item will " -"explode, so get away!" +"A collection of plays by various authors from around the world, including " +"scripts by Wilde, Beckett, Checkov, and Shakespeare." msgstr "" #: lang/json/json_items.py -msgid "dynamite (lit)" +msgid "pulp novel" msgstr "" #: lang/json/json_items.py msgid "" -"The fuse on this dynamite is lit and hissing. It'll explode any moment now." +"A hardboiled detective tale filled with hard hitting action and intrigue." msgstr "" #: lang/json/json_items.py -msgid "pack of firecrackers" +msgid "book of essays" msgstr "" #: lang/json/json_items.py msgid "" -"This is a pack of 25 firecrackers with a starter fuse. Use this item to " -"light the fuse. Of course, you will need a lighter or some matches to do so. " -"Shortly after you light the fuse they will begin to explode, so throw them " -"quickly!" +"A collection of essays by various authors from around the world, including " +"works by Churchill, Mailer, Eco, and Voltaire." msgstr "" #: lang/json/json_items.py -msgid "pack of firecrackers (lit)" +msgid "book of philosophy" msgstr "" #: lang/json/json_items.py msgid "" -"A pack of 25 firecrackers that has been lit; the fuse is hissing. Throw them " -"quickly before the start to explode." +"A deep discussion of morality with an emphasis on epistemology and logic." msgstr "" #: lang/json/json_items.py -msgid "firecracker" +msgid "satire novel" msgstr "" #: lang/json/json_items.py msgid "" -"A solitary firecracker with a short fuse. Use this item to light the fuse. " -"Of course, you will need a lighter or some matches to do so. Shortly after " -"you light the fuse it will explode, so throw it quickly!" +"A political satire of the pre-apocalypse world. Looking back on it from this " +"side of armageddon makes it seem all the more ridiculous." msgstr "" #: lang/json/json_items.py -msgid "firecracker (lit)" +msgid "big book of short stories" msgstr "" #: lang/json/json_items.py msgid "" -"A firecracker that has been lit; the fuse is hissing. Throw it quickly " -"before it explodes." +"This humongous volume contains a vast collection of short stories by " +"different authors, spanning a wide variety of topics and genres." msgstr "" -#: lang/json/json_items.py npctalk.cpp -msgid "mininuke" +#: lang/json/json_items.py +msgid "Zombie Survival Guide" msgstr "" #: lang/json/json_items.py msgid "" -"This is an extremely powerful weapon--essentially a hand-held nuclear bomb. " -"Use it to activate the timer. Ten turns later it will explode, leaving " -"behind a radioactive crater. You guess that the explosion would be large " -"enough to take out a house." +"While this seems like it would be very useful in this situation, the sheer " +"amount of misinformation present makes it practically useless." msgstr "" #: lang/json/json_items.py -msgid "mininuke (active)" +msgid "101 Wrestling Moves" msgstr "" #: lang/json/json_items.py msgid "" -"This miniature nuclear bomb has a light blinking on the side, showing that " -"it will soon explode. You should probably get far, far away from it." +"It seems to be a wrestling manual, poorly photocopied and released on " +"spiral- bound paper. Still, there are lots of useful tips for unarmed combat." msgstr "" #: lang/json/json_items.py -msgid "zombie pheromone" +msgid "Spetsnaz Knife Techniques" msgstr "" #: lang/json/json_items.py -msgid "" -"This is some kind of disgusting ball of rotting meat. Squeezing it causes a " -"small cloud of pheromones to spray into the air, causing nearby zombies to " -"become friendly for a short period of time." +msgid "A classic Soviet text on the art of attacking with a blade." msgstr "" #: lang/json/json_items.py -msgid "portal generator" +msgid "FM 23-25 Army bayonet manual" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a rare, bizarre, and arcane device of an otherworldly nature. It's " -"giving you a headache just looking at it. It is covered in alien markings." +msgid "A hefty military field manual about bayonet usage and combat theory." msgstr "" #: lang/json/json_items.py -msgid "inactive manhack" +msgid "Under the Hood" msgstr "" #: lang/json/json_items.py -msgid "" -"This is an inactive manhack. Manhacks are fist-sized robots that fly through " -"the air. They are covered with whirring blades and attack by throwing " -"themselves against their target. Use this item to activate the manhack." +msgid "An advanced mechanics manual, covering all sorts of topics." msgstr "" #: lang/json/json_items.py -msgid "inactive turret" +msgid "Pitching a Tent" msgstr "" #: lang/json/json_items.py -msgid "" -"This is an inactive turret. Using this item involves turning it on and " -"placing it on the ground, where it will attach itself. The turret will then " -"identify you as a friendly, and attack all enemies with an built-in SMG." +msgid "A guide detailing the basics of woodsmanship and outdoor survival." msgstr "" #: lang/json/json_items.py -msgid "UPS (off)" +msgid "Self-Esteem for Dummies" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a unified power supply, or UPS. It is a device developed jointly by " -"military and scientific interests for use in combat and the field. The UPS " -"is designed to power armor and some guns, but drains batteries quickly. It " -"is currently off." +msgid "Full of useful tips for showing confidence in your speech." msgstr "" #: lang/json/json_items.py -msgid "UPS (on)" +msgid "How to Succeed in Business" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a unified power supply, or UPS. It is a device developed jointly by " -"military and scientific interests for use in combat and the field. The UPS " -"is designed to power armor and some guns, but drains batteries quickly. It " -"is currently on." +msgid "Useful if you want to get a good deal when purchasing goods." msgstr "" #: lang/json/json_items.py -msgid "advanced UPS (off)" +msgid "The Big Book of First Aid" msgstr "" #: lang/json/json_items.py -msgid "" -"This is an advanced version of the unified power supply, or UPS. This device " -"has been significantly redesigned to provide better efficiency as well as to " -"consume plutonium fuel cells rather than batteries. It is currently off." +msgid "It's big and heavy, but full of great information about first aid." msgstr "" #: lang/json/json_items.py -msgid "advanced UPS (on)" +msgid "Pocket Guide to First Aid" msgstr "" #: lang/json/json_items.py msgid "" -"This is an advanced version of the unified power supply, or UPS. This device " -"has been significantly redesigned to provide better efficiency as well as to " -"consume plutonium fuel cells rather than batteries. It is currently on." +"This pocket-sized leather-bound guide to first aid combines a wealth of " +"concise information with simple to follow instructions and easy to read " +"illustrations." msgstr "" #: lang/json/json_items.py -msgid "tazer" +msgid "Pocket Survival Guide" msgstr "" #: lang/json/json_items.py msgid "" -"This is a high-powered stun gun. Use this item to attempt to electrocute an " -"adjacent enemy, damaging and temporarily paralyzing them. Because the shock " -"can actually jump through the air, it is difficult to miss." +"This pocket-sized leather-bound survival guide combines a wealth of concise " +"information with simple to follow instructions and easy to read " +"illustrations." msgstr "" #: lang/json/json_items.py -msgid "tactical tonfa (off)" +msgid "Pocket Guide to Firearm Safety" msgstr "" #: lang/json/json_items.py msgid "" -"This is a reinforced plastic tonfa, with the core hollowed out and filled " -"with capacitors and a high-yield rechargable storage battery. When a switch " -"on the handle is pressed, a high-voltage current is transmitted to the two " -"electrodes mounted in the end of the tonfa, and by extension to anyone " -"unfortunate enough to be in contact with them. It also has a nifty " -"flashlight, which is off at the moment." +"This pocket-sized leather-bound guide to firearm safety combines a wealth of " +"concise information with simple to follow instructions and easy to read " +"illustrations." msgstr "" #: lang/json/json_items.py -msgid "tactical tonfa (on)" +msgid "How to Browse the Web" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a reinforced plastic tonfa, with the core hollowed out and filled " -"with capacitors and a high-yield rechargable storage battery. When a switch " -"on the handle is pressed, a high-voltage current is transmitted to the two " -"electrodes mounted in the end of the weapon, and by extension to anyone " -"unfortunate enough to be in contact with them. The integral flashlight is " -"turned on, continually draining power and lighting the surrounding area." +msgid "Very beginner-level information about computers." msgstr "" #: lang/json/json_items.py -msgid "mp3 player (off)" +msgid "Computer Science 101" msgstr "" #: lang/json/json_items.py -msgid "" -"This battery-devouring device is loaded up with someone's music collection. " -"Fortunately, there's lots of songs you like, and listening to it will raise " -"your morale slightly. Use it to turn it on." +msgid "An entry-level textbook about computers." msgstr "" #: lang/json/json_items.py -msgid "mp3 player (on)" +msgid "Cooking on a Budget" msgstr "" #: lang/json/json_items.py msgid "" -"This mp3 player is turned on and playing some great tunes, raising your " -"morale steadily while on your person. It runs through batteries quickly; you " -"can turn it off by using it. It also obscures your hearing." +"A nice cook book that goes beyond recipes and into the chemistry of food." msgstr "" #: lang/json/json_items.py -msgid "handheld game system" +msgid "To Serve Man" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a portable games console in working condition, with a backlit screen " -"allowing you to play in the dark. You can use it to play it for a little " -"while, but this requires batteries." +msgid "It's... it's a cookbook!" msgstr "" #: lang/json/json_items.py -msgid "vortex stone" +msgid "Cucina Italiana" msgstr "" #: lang/json/json_items.py msgid "" -"This is a stone with spirals all over it, and holes around its perimeter. " -"Though it is fairly large, it weighs next to nothing. Air seems to gather " -"around it." +"This cookbook is written in Italian, but handily illustrated with step by " +"step photo instructions." msgstr "" #: lang/json/json_items.py -msgid "etched human skull" +msgid "What's a Transistor?" msgstr "" #: lang/json/json_items.py -msgid "This is a human skull with strange etchings covering it." +msgid "A basic manual of electronics and circuit design." msgstr "" #: lang/json/json_items.py -msgid "dog food" +msgid "Sew What? Clothing!" msgstr "" #: lang/json/json_items.py -msgid "This is food for dogs. It smells strange, but dogs seem to love it." +msgid "A colorful book about tailoring." msgstr "" #: lang/json/json_items.py -msgid "cat food" +msgid "Sew Awesome Monthly" msgstr "" #: lang/json/json_items.py -msgid "This is food for cats. It smells strange, but cats seem to love it." +msgid "" +"A well presented monthly magazine all about knitting, crocheting, and " +"needlepoint. Filled with ideas and project patterns." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "booby trap" +#: lang/json/json_items.py +msgid "Sewing Techniques for Designers" msgstr "" #: lang/json/json_items.py msgid "" -"This is a crude explosive device triggered by a piece of string. Use it to " -"setup and watch some poor bastard trigger it." +"A massive, hardbound book full of a wealth of information for the " +"professional clothing designer." msgstr "" #: lang/json/json_items.py -msgid "C4-Explosive" +msgid "clothing designer's portfolio" msgstr "" #: lang/json/json_items.py msgid "" -"This is military grade RDX composition explosive. A label reads: \"Highly " -"explosive, use with extreme caution!\" It comes with a small timer." +"A leather bound portfolio that once belonged to a clothing designer. Filled " +"with sketches and notes, a skilled tailor could learn a lot from this volume." msgstr "" #: lang/json/json_items.py -msgid "C4-Explosive (armed)" +msgid "How to Trap Anything" msgstr "" #: lang/json/json_items.py msgid "" -"This is military grade RDX composition explosive. A label reads: \"Highly " -"explosive, use with extreme caution!\" It comes with a small timer, which is " -"currently ticking down." +"A worn manual that describes how to set and disarm a wide variety of traps." msgstr "" #: lang/json/json_items.py -msgid "dog whistle" +msgid "The Modern Trapper" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a small whistle. When used, it produces a high tone that causes " -"nearby friendly dogs to either follow you closely and stop attacking, or " -"start attacking enemies if they are currently docile." +msgid "An extensive volume that details numerous methods of trapping game." msgstr "" #: lang/json/json_items.py -msgid "vacutainer" +msgid "Building for Beginners" msgstr "" #: lang/json/json_items.py msgid "" -"This is a tool for drawing blood, including a vacuum-sealed test tube for " -"holding the sample. Use this tool to draw blood, either from yourself or " -"from a corpse you are standing on." +"A large, paperback book detailing several beginner's projects in " +"construction." msgstr "" #: lang/json/json_items.py -msgid "welder" +msgid "101 Home Repairs" msgstr "" #: lang/json/json_items.py msgid "" -"This is a battery powered tool for welding metal pieces together. It is an " -"indispensable tool for construction or repair." +"A paperback book detailing 101 home repair projects the novice carpenter." msgstr "" -#: lang/json/json_items.py trapdef.cpp -msgid "cot" +#: lang/json/json_items.py +msgid "The Rules of the Road" msgstr "" #: lang/json/json_items.py msgid "" -"This is a military style fold up cot. While it may not be quite as " -"comfortable as a bed,its better than slumming it on the ground." +"A thick textbook for beginning drivers. It contains chapters on laws, safe " +"vehicle operation, and defensive driving concepts." msgstr "" #: lang/json/json_items.py -msgid "rollmat" +msgid "Principles of Advanced Programming" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sheet of foam which can be rolled tightly for storage. It " -"insulates you from the floor, making it easier to sleep. Use it to unroll " -"and place on the ground." +"A heavy textbook dedicated to advanced-level software design, written for " +"several different programming languages." msgstr "" #: lang/json/json_items.py -msgid "fur rollmat" +msgid "Computer Science 301" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a bedroll made of pelts which can be rolled up for transport. It " -"insulates you from the floor, making it easier to sleep. Use it to unroll " -"and place on the ground." +msgid "A college textbook on computer science." msgstr "" #: lang/json/json_items.py -msgid "X-Acto knife" +msgid "Advanced Electronics" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a small, sharp knife, designed for making precise cuts for textiles " -"or crafts. It could cause decent damage, but is difficult to hit things with " -"it. Its small, sharp blade allows for precision strikes in the hands of the " -"skilled. It is too small to butcher corpses with." +msgid "A college textbook on circuit design." msgstr "" #: lang/json/json_items.py -msgid "scalpel" +msgid "Electronic Circuit Theory" msgstr "" #: lang/json/json_items.py msgid "" -"This is a very sharp knife designed for surgical cutting. It's small, sharp " -"blade allows for precision strikes in the hands of the skilled." +"An advanced college textbook on circuit theory, design, and organization." msgstr "" #: lang/json/json_items.py -msgid "machete" +msgid "Amateur Home Radio for Enthusiasts" msgstr "" #: lang/json/json_items.py msgid "" -"This is large bladed tool for cutting down large vegetation or other " -"'obstacles.' This huge iron knife makes an excellent melee weapon." +"A book about ham radio and citizen's band radio. It contains numerous " +"diagrams and illustrations explaining the science behind the electronics." msgstr "" #: lang/json/json_items.py -msgid "No. 9 (off)" +msgid "Advanced Economics" msgstr "" #: lang/json/json_items.py -msgid "" -"This huge iron knife has been modified with a fuel tank, insulated handguard " -"and ignition system. When filled with gasoline, a system of torches heats " -"the blade, burning your target." +msgid "A college textbook on economics." msgstr "" #: lang/json/json_items.py -msgid "No. 9 (on)" +msgid "Mechanical Mastery" msgstr "" #: lang/json/json_items.py msgid "" -"This huge iron knife has been modified with a fuel tank, insulated handguard " -"and ignition system. The blade is glowing with heat, making it a great plant " -"scorcher and nightlight." +"An advanced guide on mechanics and welding, covering topics like \"Grinding " +"off rust\" and \"Making cursive E's\"." msgstr "" #: lang/json/json_items.py -msgid "katana" +msgid "Internal Combustion Fundamentals" msgstr "" #: lang/json/json_items.py msgid "" -"This is a rare sword from Japan. Deadly against unarmored targets, and still " -"very effective against armor." +"A college-level textbook that details the operation, maintenance, and repair " +"of internal combustion engines." msgstr "" #: lang/json/json_items.py -msgid "Rising Sun (off)" +msgid "chemistry textbook" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a katana with a nozzles just behind the the cutting edge of the " -"blade. People love fire, and people love katanas, so why not put them " -"together? The gas burners attached to this blade can really turn up the heat " -"on your foes. Use to ignite." +msgid "A college textbook on chemistry." msgstr "" #: lang/json/json_items.py -msgid "Rising Sun (on)" +msgid "family cookbook" msgstr "" #: lang/json/json_items.py msgid "" -"This is a katana that glows with the fury and heat of the SUN! Well, okay " -"it's not THAT hot, but getting hit with it still stings like the dickens. " -"Use to shut off the gas." +"A big binder full of somebody's family recipes. The well-turned pages and " +"creased corners speak volumes of the culinary knowledge contained within. " +"You could probably learn a lot about cooking from studying this domestic " +"artifact." msgstr "" #: lang/json/json_items.py -msgid "knife spear" +msgid "Advanced Physical Chemistry" msgstr "" #: lang/json/json_items.py -msgid "This is a simple wood pole made deadlier by the blade tied to it." +msgid "" +"A university-level textbook on advanced principles of chemistry, both " +"organic and inorganic." msgstr "" #: lang/json/json_items.py -msgid "rapier" +msgid "Engineering 301" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a thin sword with an ornate hand guard. It looks like the preferred " -"weapon of gentlemen and swashbucklers. Light and quick, it makes any battle " -"a stylish battle." +msgid "A textbook on civil engineering and construction." msgstr "" #: lang/json/json_items.py -msgid "awl pike" +msgid "SICP" msgstr "" #: lang/json/json_items.py msgid "" -"This is a medieval weapon consisting of a wood shaft, tipped with an iron " -"spike. Though large and heavy compared to other spears, its accuracy and " -"damage are unparalled." +"A classic text, \"The Structure and Interpretation of Computer Programs.\" " +"Written with examples in LISP, but applicable to any language." msgstr "" #: lang/json/json_items.py -msgid "broadsword" +msgid "Robots for Fun & Profit" msgstr "" #: lang/json/json_items.py msgid "" -"This is an early modern sword seeing use in the 16th, 17th and 18th " -"centuries. Called 'broad' to contrast with the slimmer rapiers." +"A rare book on the design of robots, with lots of helpful step-by-step " +"guides." msgstr "" #: lang/json/json_items.py -msgid "zweihänder" +msgid "Guide to Advanced Emergency Care" msgstr "" #: lang/json/json_items.py -msgid "This is a huge two-handed sword from Germany. It packs a real whallop." +msgid "" +"A thick textbook for paramedics describing advanced lifesaving procedures " +"and field-expedient care methods." msgstr "" #: lang/json/json_items.py -msgid "flammenschwert (aus)" +msgid "The Complete Home Repair Guide" msgstr "" #: lang/json/json_items.py msgid "" -"Ein großes zweihändiges Schwert aus Deutschland, an dessen Klinge sich, " -"unter zuführung von Benzin, eine anhaltende Flamme erzeugen lässt. Es ist " -"eine sehr mächtige Waffe." +"A massive book that details virtually every aspect of remodeling and " +"repairing a home, with concise terminology aimed at experienced carpenters." msgstr "" #: lang/json/json_items.py -msgid "flammenschwert (an)" +msgid "national weather transcripts" msgstr "" #: lang/json/json_items.py -msgid "firebrand (off)" +msgid "Old weather records are about as interesting as a rock." msgstr "" #: lang/json/json_items.py -msgid "" -"This is a combination of two Dark-Age conflict-resolution classics, the " -"broadsword and the torch. Use to light it up and show those heathen zombies " -"who's Lord around here." +msgid "patient treatment records" msgstr "" #: lang/json/json_items.py -msgid "firebrand (on)" +msgid "A massive stack of medical records that contain every gory detail." msgstr "" #: lang/json/json_items.py -msgid "" -"This is a combination of two Dark-Age conflict-resolution classics, the " -"broadsword and the torch. The blade is glowing with heat. Excalibur can eat " -"it's heart out. Use to shut it off." +msgid "corporate accounting ledger" msgstr "" #: lang/json/json_items.py -msgid "makeshift machete" +msgid "If you knew what to look for something might stand out..." +msgstr "" + +#: lang/json/json_items.py +msgid "black box transcript" msgstr "" #: lang/json/json_items.py msgid "" -"This is a large blade that has had a portion of the handle wrapped in duct " -"tape, making it easier to wield as a rough machete." +"A full flight log for a military aircraft. Nothing of interest stands out." msgstr "" #: lang/json/json_items.py -msgid "shishkebab (off)" +msgid "priest's diary" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a large blade with a fuel pipe on the side, and a small tank and " -"igniter built into the insulated hilt. When filled with gasoline, the blade " -"can be made scorching hot to singe enemies and light your way. Use to ignite." +msgid "A small book filled with journal entries in Latin." msgstr "" #: lang/json/json_items.py -msgid "shishkebab (on)" +msgid "Visions in Solitude" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a large blade with a fuel pipe on the side, and a small tank and " -"igniter built into the insulated hilt. The blade is glowing brightly. Use " -"to shut off the gas." +msgid "A small book detailing 'visions' a prisoner had on death row." msgstr "" #: lang/json/json_items.py -msgid "makeshift halberd" +msgid "Crafty Crafter's Quarterly" msgstr "" #: lang/json/json_items.py msgid "" -"This is large blade attached to a long stick. It could do a considerable " -"amount of damage." +"A fun quarterly magazine all about macaroni art and things you can make by " +"supergluing found objects together." msgstr "" #: lang/json/json_items.py -msgid "steak knife" +msgid "101 Crafts for Beginners" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sharp knife, designed for cutting meat. It makes a poor melee " -"weapon, but is decent at butchering corpses." +"A large, paperback book detailing a hundred and one beginner's projects in " +"fabrication." msgstr "" #: lang/json/json_items.py -msgid "butcher knife" +msgid "DIY Compendium" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sharp, heavy knife. It makes a good melee weapon, and is an ideal " -"item for butchering corpses." +"A thick, hardbound book detailing countless projects for inventions that " +"claim to improve all aspects of life." msgstr "" #: lang/json/json_items.py -msgid "combat knife" +msgid "Welding and Metallurgy" msgstr "" #: lang/json/json_items.py msgid "" -"This is a military combat knife designed for close quarters conflict. It is " -"light and extremely sharp, and could be deadly in the right hands. It could " -"be used to butcher corpses." +"A rather technical textbook that illustrates the science and technique of " +"becoming a better welder." msgstr "" #: lang/json/json_items.py -msgid "wood saw" +msgid "The Historic Weaponsmith" msgstr "" #: lang/json/json_items.py -msgid "This is a thin saw, useful for cutting through wood objects." +msgid "" +"This in-depth and technical text details various forms of ancient European " +"weaponsmithing, and is well illustrated with step by step photo instructions." msgstr "" #: lang/json/json_items.py -msgid "wood axe" +msgid "The Swords of the Samurai" msgstr "" #: lang/json/json_items.py msgid "" -"This is a large, two-handed wood axe. It makes a good melee weapon, but is a " -"bit slow to recover between swings." +"This in-depth and technical text details various forms of ancient Japanese " +"swordsmithing, and is well illustrated with step by step photo instructions." msgstr "" #: lang/json/json_items.py -msgid "hacksaw" +msgid "Studies in Historic Armorsmithing" msgstr "" #: lang/json/json_items.py -msgid "This is a sturdy saw, useful for cutting through metal objects." +msgid "" +"This in-depth and technical text details various forms of ancient European " +"armor crafting, and is well illustrated with lots of photos." msgstr "" #: lang/json/json_items.py -msgid "tent" +msgid "The Art of Japenese Armormaking" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small personal tent, it's just big enough to fit you comfortably." +"This in-depth and technical text details various forms of ancient Japanese " +"armor crafting, and is well illustrated with lots of photos." msgstr "" #: lang/json/json_items.py -msgid "torch" +msgid "PE023 \"Medical\": Application and Findings" msgstr "" #: lang/json/json_items.py msgid "" -"This is a large stick, wrapped in gasoline soaked rags. When lit, produces a " -"fair amount of light. You'll need a lighter or matches to light it." +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + +#: lang/json/json_items.py +msgid "The Hitchhiker's Guide to the Cataclysm" msgstr "" #: lang/json/json_items.py msgid "" -"This is a large stick, wrapped in gasoline soaked rags. This is burning, " -"producing plenty of light." +"Inscribed on the cover in large, friendly letters, is the message \"Don't " +"Panic\"." msgstr "" #: lang/json/json_items.py -msgid "Louisville Slaghterer" +msgid "PE050 \"Alpha\": Preliminary Report" msgstr "" #: lang/json/json_items.py msgid "" -"This is sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " -"ball game will REALLY heat up. You'll need a lighter or matches to light it." +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." msgstr "" #: lang/json/json_items.py -msgid "Louisville Slaghterer (lit)" +msgid "PE065 \"Chimera\": Best Practices" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " -"brightly, and makes it much easier to see the baselines at night games (It " -"also makes the umpire FAR more likely to call a ball instead of a strike)." +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." msgstr "" #: lang/json/json_items.py -msgid "candle" +msgid "lighter" msgstr "" #: lang/json/json_items.py msgid "" -"This is a thick candle. It doesn't provide very much light, but it can burn " -"for quite a long time. You'll need a lighter or matches to light it." +"This is a disposable plastic lighter. A lighter must be carried to use " +"various drugs, like cigarettes, or to light things like molotov cocktails. " +"You can also use a lighter to light nearby items on fire." msgstr "" #: lang/json/json_items.py -msgid "candle (lit)" +msgid "matchbook" msgstr "" #: lang/json/json_items.py msgid "" -"This is a thick candle. It doesn't provide very much light, but it can burn " -"for quite a long time. This candle is lit." +"This is a small book of matches, with a coarse strike surface on the outside " +"flap. Matches must be carried to use various drugs like cigarettes, or to " +"light things like molotov cocktails. You can also use matches to light " +"nearby items on fire." +msgstr "" + +#: lang/json/json_items.py +msgid "fire drill" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a fire drill is a simple item for firestarting, made from two pieces " +"of wood and some string. Although it is constructed out of simple materials, " +"it's slow and rather difficult to get a fire started with this tool." +msgstr "" + +#: lang/json/json_items.py +msgid "rolling papers" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"These are thin paper strips intended for the rolling of cigarettes. These " +"could also be used to make cartridges for a cap and ball revolver." +msgstr "" + +#: lang/json/json_items.py +msgid "quern" +msgstr "" + +#: lang/json/json_items.py +msgid "This is a simple hand-powered stone quern for grinding grain." +msgstr "" + +#: lang/json/json_items.py +msgid "sewing kit" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a plastic kit with a variety of needles, some plastic spools for " +"thread, and a few other useful textile tools. Use a sewing kit on an article " +"of clothing to attempt to repair or reinforce that clothing. This uses your " +"tailoring skill." +msgstr "" + +#: lang/json/json_items.py +msgid "scissors" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"These are a long pair of heavy duty scissors. Use scissors to cut items made " +"from cotton (like clothing) into rags." +msgstr "" + +#: lang/json/json_items.py +msgid "hammer" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a steel demagnetized hammer with a rubber grip. With a hammer, nails " +"and two by fours in your inventory, you could board up adjacent doors and " +"windows. It has myriad other uses as well." +msgstr "" + +#: lang/json/json_items.py +msgid "fire extinguisher" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a large emergency fire extinguisher. It would be useful for putting " +"out adjacent fires." +msgstr "" + +#: lang/json/json_items.py +msgid "extra battery mod" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a patchwork capacitance device made with spare electronics. With " +"enough electronics skill, you could attach this to your devices to increase " +"their battery capacity." +msgstr "" + +#: lang/json/json_items.py +msgid "gasoline lantern (off)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a small gasoline powered lantern. It does not provide much light, " +"but it lasts a long time. Use it to turn it on." +msgstr "" + +#: lang/json/json_items.py +msgid "gasoline lantern (on)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a small gasoline powered lantern. It does not provide much light, " +"but it lasts a long time. It is turned on. Use it to turn it off." +msgstr "" + +#: lang/json/json_items.py +msgid "flashlight (off)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a heavy duty LED flashlight. Using this flashlight will turn it on, " +"assuming it is charged with batteries. A turned-on flashlight will provide " +"light during the night or while underground." +msgstr "" + +#: lang/json/json_items.py +msgid "flashlight (on)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a heavy duty LED flashlight. This flashlight is turned on, and " +"continually draining its batteries. It provides light during the night or " +"while underground. Use it to turn it off." +msgstr "" + +#: lang/json/json_items.py +msgid "lightstrip (dead)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a burnt-out lightstrip. You could disassemble this to recover the " +"amplifier circuit." +msgstr "" + +#: lang/json/json_items.py +msgid "lightstrip (inactive)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a light-emitting circuit wired directly to some batteries. Once it " +"is activated, it will provide 25 hours of light per 3 (battery) charges. " +"When the batteries die, you'll need to scrap it to recover the components " +"that are reusable." +msgstr "" + +#: lang/json/json_items.py +msgid "lightstrip (active)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a light-emitting circuit wired directly to some batteries. It " +"provides some weak light, lasting 25 hours per 3 (battery) charges. When the " +"batteries die, you'll need to scrap it to recover the components that are " +"reusable." +msgstr "" + +#: lang/json/json_items.py +msgid "glowstick" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a small blue light glowstick. Use it to bend the plastic and break " +"the glass cylinder inside to start the reaction. It will produce a very " +"small amount of light." +msgstr "" + +#: lang/json/json_items.py +msgid "active glowstick" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an active glowstick and is producing light. It will last for a few " +"hours before burning out." +msgstr "" + +#: lang/json/json_items.py +msgid "dead glowstick" +msgstr "" + +#: lang/json/json_items.py +msgid "This is a spent glowstick. It is essentially trash." +msgstr "" + +#: lang/json/json_items.py +msgid "flare" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a slow-burning magnesium flare. Use it to strike the striker and " +"light it. It will produce a bright light for about a half hour." +msgstr "" + +#: lang/json/json_items.py +msgid "active flare" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This burning magnesium flare is producing light. It will last for about a " +"half hour before burning out." +msgstr "" + +#: lang/json/json_items.py +msgid "dead flare" +msgstr "" + +#: lang/json/json_items.py +msgid "This is a spent magnesium flare. It is essentially trash." +msgstr "" + +#: lang/json/json_items.py +msgid "hotplate" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a small heating element on a stand, powered by batteries. It is " +"indispensable for cooking and chemistry. Try not to burn yourself." +msgstr "" + +#: lang/json/json_items.py +msgid "soldering iron" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a device with a metal tip that can get very hot. It is necessary for " +"advanced electronics crafting. You could also use it to cauterize wounds, if " +"you had to." +msgstr "" + +#: lang/json/json_items.py +msgid "water purifier" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a a device with a sieve, some tubing, and an activated carbon core. " +"Using this item on a container full of water will purify the water. It could " +"be useful for water taken from uncertain sources like a river, as it may be " +"non-potable." +msgstr "" + +#: lang/json/json_items.py +msgid "two-way radio" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a radio with a transmitting unit. Using this allows you to send out " +"a distress signal. You could send either a general SOS, or send a direct " +"call to a faction you are in contact with." +msgstr "" + +#: lang/json/json_items.py +msgid "radio (off)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a portable radio. Using this radio turns it on. It will pick up any " +"nearby signals being broadcast and play them audibly." +msgstr "" + +#: lang/json/json_items.py +msgid "radio (on)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This portable radio is turned on, and continually draining its batteries. It " +"is playing the broadcast being sent from any nearby radio towers." +msgstr "" + +#: lang/json/json_items.py +msgid "directional antenna" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an antenna designed to pick up signals better when pointed at the " +"source. You could use this with a radio to receive faint signals." +msgstr "" + +#: lang/json/json_items.py +msgid "military black box" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a black box, seemingly pulled from some sort of military vehicle " +"wreckage. If you can find a system to analyze this you may find something of " +"interest." +msgstr "" + +#: lang/json/json_items.py +msgid "sarcophagus access code" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This printout is a string of numbers to access the elevator in the hazardous " +"waste sarcophagus." +msgstr "" + +#: lang/json/json_items.py +msgid "noise emitter (off)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This device was constructed by 'enhancing' a radio with some amplifier " +"circuits. It's completely lost its ability to pick up a station, but it's " +"nice and loud now. It could be useful to distract zombies." +msgstr "" + +#: lang/json/json_items.py +msgid "noise emitter (on)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This device has been turned on and is emitting horrible sounds of radio " +"static. Quick, get away from it before it draws zombies to you!" +msgstr "" + +#: lang/json/json_items.py +msgid "road map" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a road map for the local area. Use it to read points of interest, " +"including, but not limited to, location(s) of hospital(s) nearby." +msgstr "" + +#: lang/json/json_items.py +msgid "crowbar" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a hefty prying tool. Use it to open locked doors without destroying " +"them or to lift manhole covers. You could also wield it to bash some heads " +"in." +msgstr "" + +#: lang/json/json_items.py +msgid "makeshift crowbar" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a pipe whose ends have been bent and hammered flat to resemble a " +"crowbar. Use it to open locked doors without destroying them, or to lift " +"manhole covers. You could also wield it to fight with, in a pinch." +msgstr "" + +#: lang/json/json_items.py +msgid "hoe" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a farming implement. Use it to turn tillable land into a slow-to-" +"cross pile of dirt." +msgstr "" + +#: lang/json/json_items.py +msgid "shovel" +msgstr "" + +#: lang/json/json_items.py +msgid "This is a digging tool. Use it to dig pits adjacent to your location." +msgstr "" + +#: lang/json/json_items.py +msgid "stethoscope" +msgstr "" + +#: lang/json/json_items.py +msgid "This is a medical listening tool. Use it to listen to things. Closely." +msgstr "" + +#: lang/json/json_items.py +msgid "rubber hose" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a flexible rubber hose. It could be used for crafting, or siphoning " +"fuel from a vehicle." +msgstr "" + +#: lang/json/json_items.py +msgid "chainsaw (off)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a lumbering tool moonlighting as weapon of opportunity. Using this " +"item will, if loaded with gas, cause it to turn on, making a very powerful, " +"but slow, unwieldy, and noisy, melee weapon (if wielded)." +msgstr "" + +#: lang/json/json_items.py +msgid "chainsaw (on)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This chainsaw is on, and is continuously draining gasoline. Use it to turn " +"it off." +msgstr "" + +#: lang/json/json_items.py +msgid "jackhammer" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a construction tool for drilling through hard rock or other " +"surfaces. It runs on gasoline. Use it (if loaded) to blast a hole in " +"adjacent solid terrain." +msgstr "" + +#: lang/json/json_items.py +msgid "jacqueshammer" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"Ce jacqueshammer marche a l'essence. Utilisez-le (si charge) pour creuser un " +"trou dans un terrain solide adjacent." msgstr "" #: lang/json/json_items.py trapdef.cpp -msgid "brazier" +msgid "bubble wrap" msgstr "" #: lang/json/json_items.py msgid "" -"This is large metal stand with slots in the side. Use it and place it " -"somewhere then set fires in it with no risk of spreading." +"This is a sheet of plastic covered with air-filled bubbles. Use it to set it " +"on the ground, creating a trap that will warn you with noise when something " +"steps on it." msgstr "" #: lang/json/json_items.py trapdef.cpp -msgid "funnel" +msgid "bear trap" msgstr "" #: lang/json/json_items.py msgid "" -"This is a funnel used to collect rainwater. Use it outside and place a " -"container beneath it to collect water when it rains." +"This is a spring-loaded pair of steel jaws connected to a sensitive pressure " +"plate. Use it to set it on the ground, creating a trap that will ensnare and " +"damage anything that steps on it. If you are carrying a shovel, you will " +"have the option of burying it." +msgstr "" + +#: lang/json/json_items.py +msgid "nailboard trap" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"These are several pieces of wood nailed together, with some nails sticking " +"straight up. If an unsuspecting victim steps on it, they'll get nails " +"through the foot." +msgstr "" + +#: lang/json/json_items.py +msgid "loose caltrops" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"These are small metal objects covered with many sharp points. If an " +"unsuspecting victim steps on one, they'll get a spine through the foot." +msgstr "" + +#: lang/json/json_items.py +msgid "tripwire trap" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is some thin strong cable with some affixing tools on either end. A " +"tripwire trap must be placed across a doorway or other thin passage. Its " +"purpose is to trip up bypassers, causing them to stumble and possibly hurt " +"themselves slightly." msgstr "" #: lang/json/json_items.py trapdef.cpp -msgid "makeshift funnel" +msgid "crossbow trap" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small, makeshift funnel used to collect rainwater. Use it outside " -"and place a container beneath it to collect water when it rains." +"This is a simple tripwire, which is attached to the trigger of a loaded " +"crossbow. When pulled, the crossbow fires. Only a single round can be used, " +"after which the trap is disabled." +msgstr "" + +#: lang/json/json_items.py trapdef.cpp +msgid "shotgun trap" msgstr "" #: lang/json/json_items.py -msgid "kinetic bullet puller" +msgid "" +"This is a simple tripwire is attached to the trigger of a loaded sawn-off " +"shotgun. When pulled, the shotgun fires. Two shells are loaded; the first " +"time the trigger is pulled, one or both shells may be discharged." msgstr "" #: lang/json/json_items.py -msgid "This is a tool used for properly disassembling firearm ammunition." +msgid "blade trap" msgstr "" #: lang/json/json_items.py -msgid "hand press & die set" +msgid "" +"This is a machete attached laterally to a motor, with a tripwire controlling " +"its throttle. When the tripwire is pulled, the blade is swung around with " +"great force. The trap forms a 3x3 area of effect." +msgstr "" + +#: lang/json/json_items.py +msgid "light snare kit" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small hand press for hand loading firearm ammunition. It comes " -"with everything you need to start hand loading your own munitions." +"This is a kit for a simple trap consisting of a string noose and a snare " +"trigger. It requires a young tree nearby. It is effective at trapping and " +"killing some small animals." +msgstr "" + +#: lang/json/json_items.py +msgid "heavy snare kit" msgstr "" #: lang/json/json_items.py msgid "" -"This is a philips-head screwdriver. It is important for almost all " -"electronics crafting and most mechanics crafting, and has many more uses." +"This is a kit for a simple trap consisting of a rope noose and a snare " +"trigger. It requires a tree nearby. It is effective at trapping monsters." +msgstr "" + +#: lang/json/json_items.py trapdef.cpp +msgid "land mine" msgstr "" #: lang/json/json_items.py -msgid "wrench" +msgid "" +"This is an military anti-personnel mine that is triggered when stepped upon." +msgstr "" + +#: lang/json/json_items.py +msgid "geiger ctr (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is an adjustable crescent wrench. It could be a decent melee weapon, " -"and is used in many mechanics crafting recipes." +"This is a tool for measuring radiation. Using it will prompt you to choose " +"whether to scan yourself or the terrain, or to turn it on, which will " +"provide continuous feedback on ambient radiation. It is currently off." msgstr "" #: lang/json/json_items.py -msgid "snare trigger" +msgid "geiger ctr (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a stick that has been cut into a trigger mechanism for a snare trap." +"This is a tool for measuring radiation. It is in continuous scan mode, and " +"will produce quiet clicking sounds in the presence of ambient radiation. " +"Using it allows you to turn it off, or scan yourself or the ground. It is " +"currently on." +msgstr "" + +#: lang/json/json_items.py +msgid "teleporter" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an arcane device, powered by plutonium fuel cells. Using it will " +"cause you to teleport a short distance away." +msgstr "" + +#: lang/json/json_items.py +msgid "goo canister" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"There is a label on this canister: \"Warning: contains highly toxic and " +"corrosive materials. Contents may be sentient. Open at your own risk.\" You " +"think you can feel something moving inside it." +msgstr "" + +#: lang/json/json_items.py +msgid "pipe bomb" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a section of a pipe filled with explosive materials. Use this item " +"with to light the fuse, which gives you three turns to get away from it " +"before it detonates. You'll need a lighter or some matches to use it. It is " +"somewhat unreliable, and may fail to detonate." +msgstr "" + +#: lang/json/json_items.py +msgid "active pipe bomb" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This pipe bomb's fuse is lit, and it will explode any second now. Throw it " +"immediately!" +msgstr "" + +#: lang/json/json_items.py +msgid "grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a military grade fragmentary hand grenade. Use this item to pull the " +"pin and light the fuse. You will then have five turns before it explodes; " +"throwing it would be a good idea." +msgstr "" + +#: lang/json/json_items.py +msgid "active grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an active grenade, and will explode any second now. Better throw it!" +msgstr "" + +#: lang/json/json_items.py +msgid "Granade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"Attached to this grenade is a name tag with the name Kevin written on it." +msgstr "" + +#: lang/json/json_items.py +msgid "active Granade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"Attached to this active grenade is a name tag with the name Kevin written on " +"it. Better throw it!" +msgstr "" + +#: lang/json/json_items.py +msgid "flashbang" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a military police style flashbang. Use this item to pull the pin and " +"light the fuse. You will then have five turns before it detonates with " +"intense light and sound, blinding, deafening and disorienting anyone nearby." +msgstr "" + +#: lang/json/json_items.py +msgid "active flashbang" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This flashbang is active, and will soon detonate with intense light and " +"sound, blinding, deafening and disorienting anyone nearby. It may be a good " +"idea to throw it!" +msgstr "" + +#: lang/json/json_items.py +msgid "EMP grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a grenade that generates a electromagnetic pulse with a tiny nuclear " +"explosion. Use this item to pull the pin and light the fuse, turning it into " +"an active EMP grenade. You will then have three turns before it detonates, " +"creating an EMP field that damages robots and drains bionic energy." +msgstr "" + +#: lang/json/json_items.py +msgid "active EMP grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This EMP grenade is active, and will shortly detonate, creating a large EMP " +"field that damages robots and drains bionic energy. You may not want to be " +"holding it much longer." +msgstr "" + +#: lang/json/json_items.py +msgid "scrambler grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a highly modified EMP grenade, designed to scramble robots' IFF " +"control chips, rather than destroy them. This converts the robot to your " +"side for a short time, before the backup systems kick in. Use this item to " +"pull the pin and light the fuse, turning it into an active scrambler grenade." +msgstr "" + +#: lang/json/json_items.py +msgid "active scrambler grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This scrambler grenade is active, and will soon detonate, releasing a " +"control wave that temporarily converts robots to your side." +msgstr "" + +#: lang/json/json_items.py +msgid "teargas canister" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a canister grenade filled with noxious irritant. Use this item to " +"pull the pin and light the fuse, turning it into an active teargas grenade. " +"In five turns it will begin to expel a highly toxic gas for some time. This " +"gas damages and slows those who enter it, as well as obscuring vision and " +"scent." +msgstr "" + +#: lang/json/json_items.py +msgid "active teargas grenade" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This canister of teargas has had its pin removed, indicating that it is (or " +"will shortly be) expelling highly toxic gas. You should consider getting rid " +"of it soon." +msgstr "" + +#: lang/json/json_items.py +msgid "smoke bomb" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a canister grenade filled with a variety of pyrotechnic chemicals. " +"Use this item to pull the pin and light the fuse, turning it into an active " +"smoke bomb. Five turns after you do that, it will begin to expel a thick " +"black smoke. This smoke will slow those who enter it, as well as obscuring " +"vision and scent." +msgstr "" + +#: lang/json/json_items.py +msgid "active smoke bomb" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This smoke bomb has had its pin removed, indicating that it is (or will " +"shortly be) expelling thick smoke." +msgstr "" + +#: lang/json/json_items.py +msgid "flammable arrow" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This arrow has a rag soaked in a flammable liquid wrapped around the shaft " +"near the head. You need to light it before shooting." +msgstr "" + +#: lang/json/json_items.py +msgid "molotov cocktail" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A bottle of flammable liquid with a rag inserted. Use this item to light the " +"rag. You will, of course, need a lighter or matches in your inventory to do " +"this. After lighting it, throw it to cause fires." +msgstr "" + +#: lang/json/json_items.py +msgid "molotov cocktail (lit)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A bottle of flammable liquid with a flaming rag inserted. Throwing it will " +"cause the bottle to break, spreading fire. The flame may go out shortly if " +"you do not throw it. Dropping it while lit is not safe." +msgstr "" + +#: lang/json/json_items.py +msgid "acid bomb" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a glass vial, split into two chambers. The divider is removable, " +"which will cause the chemicals to mix. If this mixture is exposed to air " +"(perhaps by throwing the vial) they will spill out as a pool of potent acid." +msgstr "" + +#: lang/json/json_items.py +msgid "acid bomb (active)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a glass vial, with two chemicals mixing inside. The vial feels " +"colder and the contents are frothing. If this mixture is exposed to air (as " +"could happen if you throw the vial), it will spill out as a pool of potent " +"acid." +msgstr "" + +#: lang/json/json_items.py +msgid "dynamite" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"These are several sticks of explosives with a fuse attached. Use this item " +"to light the fuse. You will, of course, need a lighter or matches in your " +"inventory to do this. Shortly after lighting the fuse, this item will " +"explode, so get away!" +msgstr "" + +#: lang/json/json_items.py +msgid "dynamite (lit)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"The fuse on this dynamite is lit and hissing. It'll explode any moment now." +msgstr "" + +#: lang/json/json_items.py +msgid "pack of firecrackers" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a pack of 25 firecrackers with a starter fuse. Use this item to " +"light the fuse. Of course, you will need a lighter or some matches to do so. " +"Shortly after you light the fuse they will begin to explode, so throw them " +"quickly!" +msgstr "" + +#: lang/json/json_items.py +msgid "pack of firecrackers (lit)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pack of 25 firecrackers that has been lit; the fuse is hissing. Throw them " +"quickly before the start to explode." +msgstr "" + +#: lang/json/json_items.py +msgid "firecracker" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A solitary firecracker with a short fuse. Use this item to light the fuse. " +"Of course, you will need a lighter or some matches to do so. Shortly after " +"you light the fuse it will explode, so throw it quickly!" +msgstr "" + +#: lang/json/json_items.py +msgid "firecracker (lit)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A firecracker that has been lit; the fuse is hissing. Throw it quickly " +"before it explodes." +msgstr "" + +#: lang/json/json_items.py npctalk.cpp +msgid "mininuke" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an extremely powerful weapon--essentially a hand-held nuclear bomb. " +"Use it to activate the timer. Ten turns later it will explode, leaving " +"behind a radioactive crater. You guess that the explosion would be large " +"enough to take out a house." +msgstr "" + +#: lang/json/json_items.py +msgid "mininuke (active)" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This miniature nuclear bomb has a light blinking on the side, showing that " +"it will soon explode. You should probably get far, far away from it." +msgstr "" + +#: lang/json/json_items.py +msgid "zombie pheromone" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is some kind of disgusting ball of rotting meat. Squeezing it causes a " +"small cloud of pheromones to spray into the air, causing nearby zombies to " +"become friendly for a short period of time." +msgstr "" + +#: lang/json/json_items.py +msgid "portal generator" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is a rare, bizarre, and arcane device of an otherworldly nature. It's " +"giving you a headache just looking at it. It is covered in alien markings." +msgstr "" + +#: lang/json/json_items.py +msgid "inactive manhack" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an inactive manhack. Manhacks are fist-sized robots that fly through " +"the air. They are covered with whirring blades and attack by throwing " +"themselves against their target. Use this item to activate the manhack." +msgstr "" + +#: lang/json/json_items.py +msgid "inactive turret" +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This is an inactive turret. Using this item involves turning it on and " +"placing it on the ground, where it will attach itself. The turret will then " +"identify you as a friendly, and attack all enemies with an built-in SMG." msgstr "" #: lang/json/json_items.py -msgid "bolt cutters" +msgid "UPS (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is large pair of bolt cutters. You could use them to cut padlocks or " -"heavy gauge wire." +"This is a unified power supply, or UPS. It is a device developed jointly by " +"military and scientific interests for use in combat and the field. The UPS " +"is designed to power armor and some guns, but drains batteries quickly. It " +"is currently off." msgstr "" #: lang/json/json_items.py -msgid "mop" +msgid "UPS (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is an unwieldy mop. Good for cleaning up spills. Use to mop up any " -"'mess' you may have made." +"This is a unified power supply, or UPS. It is a device developed jointly by " +"military and scientific interests for use in combat and the field. The UPS " +"is designed to power armor and some guns, but drains batteries quickly. It " +"is currently on." msgstr "" #: lang/json/json_items.py -msgid "picklock kit" +msgid "advanced UPS (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a locksmith's set of sturdy steel picklocks. It is essential for " -"silently and quickly opening locks, provided you have some mechanical skill." +"This is an advanced version of the unified power supply, or UPS. This device " +"has been significantly redesigned to provide better efficiency as well as to " +"consume plutonium fuel cells rather than batteries. It is currently off." msgstr "" #: lang/json/json_items.py -msgid "improvised picklock" +msgid "advanced UPS (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is an improvised set of picks and torsion wrenches made from scrap " -"metal. It needs MacGyver like skills to open locks with these and they are " -"brittle, but it lessens the chances of alarms being set off." +"This is an advanced version of the unified power supply, or UPS. This device " +"has been significantly redesigned to provide better efficiency as well as to " +"consume plutonium fuel cells rather than batteries. It is currently on." msgstr "" #: lang/json/json_items.py -msgid "safe deposit box" +msgid "tazer" msgstr "" #: lang/json/json_items.py msgid "" -"This is secure combination lock box. Sadly, you don't know the combination. " -"Breaking inside it would destroy anything of value." +"This is a high-powered stun gun. Use this item to attempt to electrocute an " +"adjacent enemy, damaging and temporarily paralyzing them. Because the shock " +"can actually jump through the air, it is difficult to miss." msgstr "" #: lang/json/json_items.py -msgid "pickaxe" +msgid "tactical tonfa (off)" msgstr "" #: lang/json/json_items.py -msgid "This is a large steel pickaxe, strike the earth (or your enemies)!" +msgid "" +"This is a reinforced plastic tonfa, with the core hollowed out and filled " +"with capacitors and a high-yield rechargable storage battery. When a switch " +"on the handle is pressed, a high-voltage current is transmitted to the two " +"electrodes mounted in the end of the tonfa, and by extension to anyone " +"unfortunate enough to be in contact with them. It also has a nifty " +"flashlight, which is off at the moment." msgstr "" #: lang/json/json_items.py -msgid "spray can" +msgid "tactical tonfa (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a spray can, filled with paint. Use this tool to make graffiti on " -"the floor." +"This is a reinforced plastic tonfa, with the core hollowed out and filled " +"with capacitors and a high-yield rechargable storage battery. When a switch " +"on the handle is pressed, a high-voltage current is transmitted to the two " +"electrodes mounted in the end of the weapon, and by extension to anyone " +"unfortunate enough to be in contact with them. The integral flashlight is " +"turned on, continually draining power and lighting the surrounding area." msgstr "" #: lang/json/json_items.py -msgid "permanent marker" +msgid "mp3 player (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a King Size(tm) industrial strength permanent marker, about halfway " -"between a typical marker and a can of spray paint in size. Use it to write " -"something down. However, writing 'Elbereth' probably won't help you." +"This battery-devouring device is loaded up with someone's music collection. " +"Fortunately, there's lots of songs you like, and listening to it will raise " +"your morale slightly. Use it to turn it on." msgstr "" #: lang/json/json_items.py -msgid "rag" +msgid "mp3 player (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a largish piece of cloth, useful in crafting and possibly for " -"staunching bleeding." +"This mp3 player is turned on and playing some great tunes, raising your " +"morale steadily while on your person. It runs through batteries quickly; you " +"can turn it off by using it. It also obscures your hearing." msgstr "" #: lang/json/json_items.py -msgid "plastic chunk" +msgid "handheld game system" msgstr "" #: lang/json/json_items.py msgid "" -"This is a piece of plastic. It doesn't have much use except to repair " -"plastic items." +"This is a portable games console in working condition, with a backlit screen " +"allowing you to play in the dark. You can use it to play it for a little " +"while, but this requires batteries." msgstr "" #: lang/json/json_items.py -msgid "kevlar plate" +msgid "vortex stone" msgstr "" #: lang/json/json_items.py msgid "" -"This is a plate of reinforced kevlar. It could be used used to repair items " -"made of kevlar." +"This is a stone with spirals all over it, and holes around its perimeter. " +"Though it is fairly large, it weighs next to nothing. Air seems to gather " +"around it." msgstr "" #: lang/json/json_items.py -msgid "PDA" +msgid "etched human skull" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a small, multipurpose electronic device. It can be loaded with a " -"variety of apps, providing all kinds of functionality." +msgid "This is a human skull with strange etchings covering it." msgstr "" #: lang/json/json_items.py -msgid "PDA - Flashlight" +msgid "dog food" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a small, multipurpose electronic device. This PDA has its flashlight " -"app on, and is providing light." +msgid "This is food for dogs. It smells strange, but dogs seem to love it." msgstr "" #: lang/json/json_items.py -msgid "pocket knife" +msgid "cat food" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a small pocket knife. It isn't great for combat, but it's better " -"than nothing. It's sharp enough to butcher with." +msgid "This is food for cats. It smells strange, but cats seem to love it." msgstr "" -#: lang/json/json_items.py -msgid "bone needle" +#: lang/json/json_items.py trapdef.cpp +msgid "booby trap" msgstr "" #: lang/json/json_items.py msgid "" -"This is sharp needle made from a bone. It would be useful for making rough " -"clothing and items" +"This is a crude explosive device triggered by a piece of string. Use it to " +"setup and watch some poor bastard trigger it." msgstr "" #: lang/json/json_items.py -msgid "stone hammer" +msgid "C4-Explosive" msgstr "" #: lang/json/json_items.py msgid "" -"This is a rock affixed to a stick, in the crude facsimile of a hammer. It " -"functions adequately as a hammer, but really can't compare to a proper one." +"This is military grade RDX composition explosive. A label reads: \"Highly " +"explosive, use with extreme caution!\" It comes with a small timer." msgstr "" #: lang/json/json_items.py -msgid "stone axe" +msgid "C4-Explosive (armed)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sharpened stone affixed to a stick. It works passably well as an " -"axe but really can't compare to a proper axe." +"This is military grade RDX composition explosive. A label reads: \"Highly " +"explosive, use with extreme caution!\" It comes with a small timer, which is " +"currently ticking down." msgstr "" #: lang/json/json_items.py -msgid "stone shovel" +msgid "dog whistle" msgstr "" #: lang/json/json_items.py msgid "" -"This is a flattened stone affixed to a stick. It works passably well as a " -"shovel but really can't compare to a real shovel." +"This is a small whistle. When used, it produces a high tone that causes " +"nearby friendly dogs to either follow you closely and stop attacking, or " +"start attacking enemies if they are currently docile." msgstr "" #: lang/json/json_items.py -msgid "entrenching tool" +msgid "vacutainer" msgstr "" #: lang/json/json_items.py msgid "" -"This is a stout collapsible spade. It's commonly used by military forces and " -"favored by hikers for digging." +"This is a tool for drawing blood, including a vacuum-sealed test tube for " +"holding the sample. Use this tool to draw blood, either from yourself or " +"from a corpse you are standing on." msgstr "" #: lang/json/json_items.py -msgid "digging stick" +msgid "welder" msgstr "" #: lang/json/json_items.py msgid "" -"This is a large stick, with the end carved into a broad blade for digging. " -"It could be used to dig shallow pits, but not deep ones." +"This is a battery powered tool for welding metal pieces together. It is an " +"indispensable tool for construction or repair." msgstr "" -#: lang/json/json_items.py -msgid "shelter kit" +#: lang/json/json_items.py trapdef.cpp +msgid "cot" msgstr "" #: lang/json/json_items.py -msgid "This is a small shelter, made of sticks and skins. Use it to place." +msgid "" +"This is a military style fold up cot. While it may not be quite as " +"comfortable as a bed,its better than slumming it on the ground." msgstr "" #: lang/json/json_items.py -msgid "damaged shelter kit" +msgid "rollmat" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small shelter, made of sticks and skins. Use it to place. This " -"shelter has been damaged, and needs repairs." +"This is a sheet of foam which can be rolled tightly for storage. It " +"insulates you from the floor, making it easier to sleep. Use it to unroll " +"and place on the ground." msgstr "" #: lang/json/json_items.py -msgid "heatpack" +msgid "fur rollmat" msgstr "" #: lang/json/json_items.py msgid "" -"This is a chemical heatpack. It's used to treat sports injuries and heat " -"food. It is usable only once." +"This is a bedroll made of pelts which can be rolled up for transport. It " +"insulates you from the floor, making it easier to sleep. Use it to unroll " +"and place on the ground." msgstr "" #: lang/json/json_items.py -msgid "used heatpack" +msgid "X-Acto knife" msgstr "" #: lang/json/json_items.py msgid "" -"This is a chemical heatpack. It's used to treat sports injuries and heat " -"food. This one has been used and is chemically inert, rendering it useless." +"This is a small, sharp knife, designed for making precise cuts for textiles " +"or crafts. It could cause decent damage, but is difficult to hit things with " +"it. Its small, sharp blade allows for precision strikes in the hands of the " +"skilled. It is too small to butcher corpses with." msgstr "" #: lang/json/json_items.py -msgid "packed M72 LAW" +msgid "scalpel" msgstr "" #: lang/json/json_items.py msgid "" -"This is an M72 LAW, packed in its storage form. Use it to pop it out and " -"make it ready to fire. Once it is activated, it cannot be repacked." +"This is a very sharp knife designed for surgical cutting. It's small, sharp " +"blade allows for precision strikes in the hands of the skilled." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of canned meat" +msgid "machete" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sealed glass jar containing some meat. Use to open and eat to " -"enjoy." +"This is large bladed tool for cutting down large vegetation or other " +"'obstacles.' This huge iron knife makes an excellent melee weapon." msgstr "" #: lang/json/json_items.py -msgid "sealed 3-litre jar of kompot" +msgid "No. 9 (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sealed glass jar containing kompot. Use to open and eat to enjoy." +"This huge iron knife has been modified with a fuel tank, insulated handguard " +"and ignition system. When filled with gasoline, a system of torches heats " +"the blade, burning your target." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of soylent slices" +msgid "No. 9 (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sealed glass jar containing human meat. Use to open and eat, if " -"you really want to, to enjoy." +"This huge iron knife has been modified with a fuel tank, insulated handguard " +"and ignition system. The blade is glowing with heat, making it a great plant " +"scorcher and nightlight." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of canned veggy" +msgid "katana" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sealed glass jar containing mixed vegetables. Use to open and eat " -"to enjoy." +"This is a rare sword from Japan. Deadly against unarmored targets, and still " +"very effective against armor." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of canned fruit" +msgid "Rising Sun (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sealed glass jar containing sliced fruits. Use to open and eat to " -"enjoy." +"This is a katana with a nozzles just behind the the cutting edge of the " +"blade. People love fire, and people love katanas, so why not put them " +"together? The gas burners attached to this blade can really turn up the heat " +"on your foes. Use to ignite." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of pickled vegetable" +msgid "Rising Sun (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a sealed glass jar containing pickled vegetables. Use to open and " -"eat to enjoy." +"This is a katana that glows with the fury and heat of the SUN! Well, okay " +"it's not THAT hot, but getting hit with it still stings like the dickens. " +"Use to shut off the gas." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of pickled meat" +msgid "knife spear" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a sealed glass jar containing pickled meat. Use to open and eat to " -"enjoy." +msgid "This is a simple wood pole made deadlier by the blade tied to it." msgstr "" #: lang/json/json_items.py -msgid "sealed jar of pickled human flesh" +msgid "rapier" msgstr "" #: lang/json/json_items.py msgid "" -"This is sealed glass jar containing pickled human flesh. Use to open. You " -"might even enjoy it." +"This is a thin sword with an ornate hand guard. It looks like the preferred " +"weapon of gentlemen and swashbucklers. Light and quick, it makes any battle " +"a stylish battle." msgstr "" #: lang/json/json_items.py -msgid "cordless drill" +msgid "awl pike" msgstr "" #: lang/json/json_items.py msgid "" -"This is a cordless drill with a selection of drill bits. The charger base " -"contains a battery draining attachment so the drill can be charged in lieu " -"of mains power." +"This is a medieval weapon consisting of a wood shaft, tipped with an iron " +"spike. Though large and heavy compared to other spears, its accuracy and " +"damage are unparalled." msgstr "" #: lang/json/json_items.py -msgid "vacuum sealer" +msgid "broadsword" msgstr "" #: lang/json/json_items.py msgid "" -"This is a portable heat sealer unit with an air pump. It's used for vacuum " -"packing food to preserve it." +"This is an early modern sword seeing use in the 16th, 17th and 18th " +"centuries. Called 'broad' to contrast with the slimmer rapiers." msgstr "" #: lang/json/json_items.py -msgid "vacuum-packed meat slices" +msgid "zweihänder" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a bag of vacuum packed meat slices in plastic packaging. Use to " -"open and eat to enjoy." +msgid "This is a huge two-handed sword from Germany. It packs a real whallop." msgstr "" #: lang/json/json_items.py -msgid "vacuum-packed veggy chunks" +msgid "flammenschwert (aus)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a bag of vacuum packed vegetable slices in plastic packaging. Use " -"to open and eat to enjoy." -msgstr "" - -#: lang/json/json_items.py -msgid "vacuum-packed fruit slices" +"Ein großes zweihändiges Schwert aus Deutschland, an dessen Klinge sich, " +"unter zuführung von Benzin, eine anhaltende Flamme erzeugen lässt. Es ist " +"eine sehr mächtige Waffe." msgstr "" #: lang/json/json_items.py -msgid "" -"This is a bag of vacuum packed fruit slices in plastic packaging. Use to " -"open and eat to enjoy." +msgid "flammenschwert (an)" msgstr "" #: lang/json/json_items.py -msgid "medical gauze" +msgid "firebrand (off)" msgstr "" #: lang/json/json_items.py msgid "" -"This is decent sized piece of cotton, sterilized and sealed. It's designed " -"for medical purposes." +"This is a combination of two Dark-Age conflict-resolution classics, the " +"broadsword and the torch. Use to light it up and show those heathen zombies " +"who's Lord around here." msgstr "" #: lang/json/json_items.py -msgid "talking doll" +msgid "firebrand (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a talking doll, meant for children. Fortunately it still works, and " -"you could unload the batteries out of it." +"This is a combination of two Dark-Age conflict-resolution classics, the " +"broadsword and the torch. The blade is glowing with heat. Excalibur can eat " +"it's heart out. Use to shut it off." msgstr "" #: lang/json/json_items.py -msgid "towel" +msgid "makeshift machete" msgstr "" #: lang/json/json_items.py msgid "" -"This is a fluffy and large towel. It could be used to dry yourself. Any " -"person that can travel the length and breadth of the apocalypse, rough it, " -"slum it, struggle against terrible odds, win through and still know where " -"their towel is, is clearly a force to be reckoned with." +"This is a large blade that has had a portion of the handle wrapped in duct " +"tape, making it easier to wield as a rough machete." msgstr "" #: lang/json/json_items.py -msgid "folding bicycle" +msgid "shishkebab (off)" msgstr "" #: lang/json/json_items.py -msgid "This is a bicycle folded into a relatively portable package." +msgid "" +"This is a large blade with a fuel pipe on the side, and a small tank and " +"igniter built into the insulated hilt. When filled with gasoline, the blade " +"can be made scorching hot to singe enemies and light your way. Use to ignite." msgstr "" #: lang/json/json_items.py -msgid "makeshift welder" +msgid "shishkebab (on)" msgstr "" #: lang/json/json_items.py msgid "" -"This crude welder has been fashioned from a bundle of copper wire, scrap " -"metal, and complete disregard for personal safety. While it's not as " -"efficient as a factory welder, it will serve in a pinch." +"This is a large blade with a fuel pipe on the side, and a small tank and " +"igniter built into the insulated hilt. The blade is glowing brightly. Use " +"to shut off the gas." msgstr "" #: lang/json/json_items.py -msgid "still" +msgid "makeshift halberd" msgstr "" #: lang/json/json_items.py msgid "" -"This is a still. It's useful for creating distillation of alcohol and other, " -"more curious substances." +"This is large blade attached to a long stick. It could do a considerable " +"amount of damage." msgstr "" #: lang/json/json_items.py -msgid "plastic mold" +msgid "steak knife" msgstr "" #: lang/json/json_items.py msgid "" -"This is a plastic mold. It could be shaped and used to craft items made of " -"plastic." +"This is a sharp knife, designed for cutting meat. It makes a poor melee " +"weapon, but is decent at butchering corpses." msgstr "" #: lang/json/json_items.py -msgid "chemistry set" +msgid "butcher knife" msgstr "" #: lang/json/json_items.py msgid "" -"This is a chemistry set stored in a bag. The contents include glass " -"containers, hoses, metal wire, a hotplate, and safety glasses. It might be " -"used to craft some chemistry projects if you're so inclined." +"This is a sharp, heavy knife. It makes a good melee weapon, and is an ideal " +"item for butchering corpses." msgstr "" #: lang/json/json_items.py -msgid "crack pipe" +msgid "combat knife" msgstr "" #: lang/json/json_items.py msgid "" -"This is a fine glass tube with a bulb with an bowl on one end. It's used in " -"partaking of certain illicit substances." +"This is a military combat knife designed for close quarters conflict. It is " +"light and extremely sharp, and could be deadly in the right hands. It could " +"be used to butcher corpses." msgstr "" #: lang/json/json_items.py -msgid "glass pipe" +msgid "wood saw" msgstr "" #: lang/json/json_items.py -msgid "" -"This is hand-blown glass pipe. It's of the type of pipe most commonly used " -"to smoke hallucinatory plants." +msgid "This is a thin saw, useful for cutting through wood objects." msgstr "" #: lang/json/json_items.py -msgid "tobacco pipe" +msgid "wood axe" msgstr "" #: lang/json/json_items.py msgid "" -"This is a hand-carved wooden smoking pipe. It's designed to facilitate " -"consumption of fire cured tobacco leaves." +"This is a large, two-handed wood axe. It makes a good melee weapon, but is a " +"bit slow to recover between swings." msgstr "" #: lang/json/json_items.py -msgid "electric forge" +msgid "hacksaw" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a portable electric metalworking forge, powered by batteries. " -"Combined with the right tools, you could use this for metalworking. With a " -"little mechanical know-how, you could probably even hook it directly to a " -"vehicle's power system." +msgid "This is a sturdy saw, useful for cutting through metal objects." msgstr "" #: lang/json/json_items.py -msgid "crucible" +msgid "tent" msgstr "" #: lang/json/json_items.py msgid "" -"This is a small metalworking crucible. It's used in some metalworking " -"fabrication recipes." +"This is a small personal tent, it's just big enough to fit you comfortably." msgstr "" #: lang/json/json_items.py -msgid "anvil" +msgid "torch" msgstr "" #: lang/json/json_items.py msgid "" -"This is an enormously heavy block of oddly shaped steel with a chisel-like " -"projection set into the corner. It's used in most metalworking fabrication " -"recipes." -msgstr "" - -#: lang/json/json_items.py -msgid "steel tongs" +"This is a large stick, wrapped in gasoline soaked rags. When lit, produces a " +"fair amount of light. You'll need a lighter or matches to light it." msgstr "" #: lang/json/json_items.py msgid "" -"These are long, steel tongs. They are is commonly used for cooking or in " -"metalworking fabrication recipes. You could swing them around as a melee " -"weapon in a pinch." +"This is a large stick, wrapped in gasoline soaked rags. This is burning, " +"producing plenty of light." msgstr "" #: lang/json/json_items.py -msgid "metalworking chisel" +msgid "Louisville Slaghterer" msgstr "" #: lang/json/json_items.py msgid "" -"This is a short, stout metalworking chisel. It's used in some metalworking " -"fabrication recipes." +"This is sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " +"ball game will REALLY heat up. You'll need a lighter or matches to light it." msgstr "" #: lang/json/json_items.py -msgid "swage and die set" +msgid "Louisville Slaghterer (lit)" msgstr "" #: lang/json/json_items.py msgid "" -"These are a set of swages and dies for metalsmithing. These loops and metal " -"blocks are used in some metalworking fabrication recipes." +"This is a sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " +"brightly, and makes it much easier to see the baselines at night games (It " +"also makes the umpire FAR more likely to call a ball instead of a strike)." msgstr "" #: lang/json/json_items.py -msgid "nodachi" +msgid "candle" msgstr "" #: lang/json/json_items.py msgid "" -"This is a huge, curved, two-handed sword from Japan. It is surprisingly " -"light for its size." +"This is a thick candle. It doesn't provide very much light, but it can burn " +"for quite a long time. You'll need a lighter or matches to light it." msgstr "" #: lang/json/json_items.py -msgid "match head bomb" +msgid "candle (lit)" msgstr "" #: lang/json/json_items.py msgid "" -"This is a bottle filled with match heads and equipped with a fuse. Use this " -"item to light the fuse; you will, of course, need a lighter in your " -"inventory to do this. After lighting it, throw it to cause fires." +"This is a thick candle. It doesn't provide very much light, but it can burn " +"for quite a long time. This candle is lit." msgstr "" -#: lang/json/json_items.py -msgid "match head bomb (lit)" +#: lang/json/json_items.py trapdef.cpp +msgid "brazier" msgstr "" #: lang/json/json_items.py msgid "" -"This is a bottle filled with match heads and equipped with a fuse. This one " -"has been lit, and its fuse is rapidly burning down. You may not want to hold " -"onto it much longer." +"This is large metal stand with slots in the side. Use it and place it " +"somewhere then set fires in it with no risk of spreading." msgstr "" -#: lang/json/json_items.py -msgid "refillable lighter" +#: lang/json/json_items.py trapdef.cpp +msgid "funnel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a lighter featuring a flip top cover and refuelable tank. A lighter " -"must be carried to use various drugs, like cigarettes, or to light things " -"like molotov cocktails. You can also use a lighter to light nearby items on " -"fire." +"This is a funnel used to collect rainwater. Use it outside and place a " +"container beneath it to collect water when it rains." msgstr "" -#: lang/json/json_items.py -msgid "charcoal forge" +#: lang/json/json_items.py trapdef.cpp +msgid "makeshift funnel" msgstr "" #: lang/json/json_items.py msgid "" -"This is a portable, charcoal fired, metalworking forge. If combined with the " -"right tools, you could use this for metalworking." +"This is a small, makeshift funnel used to collect rainwater. Use it outside " +"and place a container beneath it to collect water when it rains." msgstr "" #: lang/json/json_items.py -msgid "charcoal smoker" +msgid "kinetic bullet puller" msgstr "" #: lang/json/json_items.py -msgid "" -"This is a portable charcoal smoker. Good for weekend barbecuing and " -"preserving meat with smoke." +msgid "This is a tool used for properly disassembling firearm ammunition." msgstr "" #: lang/json/json_items.py -msgid "charcoal water purifier" +msgid "hand press & die set" msgstr "" #: lang/json/json_items.py msgid "" -"Using this item on a container full of water will purify the water using " -"layered charcoal. Once the charcoal has purified enough water, it will " -"become unusable and can be disassembled and recycled. Water taken from " -"uncertain sources like a river may be dirty." -msgstr "" - -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "bicycle horn" +"This is a small hand press for hand loading firearm ammunition. It comes " +"with everything you need to start hand loading your own munitions." msgstr "" #: lang/json/json_items.py msgid "" -"This is a simple bulb horn, found on many bicycles. Use to honk. Honk honk." +"This is a philips-head screwdriver. It is important for almost all " +"electronics crafting and most mechanics crafting, and has many more uses." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "car horn" +#: lang/json/json_items.py +msgid "wrench" msgstr "" #: lang/json/json_items.py -msgid "This is a car horn meant to be attached to a car's electrical system." +msgid "" +"This is an adjustable crescent wrench. It could be a decent melee weapon, " +"and is used in many mechanics crafting recipes." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "truck horn" +#: lang/json/json_items.py +msgid "snare trigger" msgstr "" #: lang/json/json_items.py -msgid "This is a very loud horn, usually found on large trucks like semis." +msgid "" +"This is a stick that has been cut into a trigger mechanism for a snare trap." msgstr "" #: lang/json/json_items.py -msgid "wrapped radiation badge" +msgid "bolt cutters" msgstr "" #: lang/json/json_items.py msgid "" -"This is a badge that detects radiation dosage sealed in a radiation-blocking " -"bag. Use it to remove it from the bag." +"This is large pair of bolt cutters. You could use them to cut padlocks or " +"heavy gauge wire." msgstr "" #: lang/json/json_items.py -msgid "food dehydrator" +msgid "mop" msgstr "" #: lang/json/json_items.py msgid "" -"This is a portable electric food dehydrator. It's powered by batteries, and " -"could be invaluable in preserving food." +"This is an unwieldy mop. Good for cleaning up spills. Use to mop up any " +"'mess' you may have made." msgstr "" #: lang/json/json_items.py -msgid "trench knife" +msgid "picklock kit" msgstr "" #: lang/json/json_items.py msgid "" -"This stout combat knife features a steel guard to protect the user's " -"knuckles. The guard can also be used for striking or blocking, and the knife " -"can also be used to butcher corpses." +"This is a locksmith's set of sturdy steel picklocks. It is essential for " +"silently and quickly opening locks, provided you have some mechanical skill." msgstr "" #: lang/json/json_items.py -msgid "small fire extinguisher" +msgid "improvised picklock" msgstr "" #: lang/json/json_items.py msgid "" -"This is small emergency fire extinguisher. It would be useful for putting " -"out adjacent fires." +"This is an improvised set of picks and torsion wrenches made from scrap " +"metal. It needs MacGyver like skills to open locks with these and they are " +"brittle, but it lessens the chances of alarms being set off." msgstr "" #: lang/json/json_items.py -msgid "switchblade" +msgid "safe deposit box" msgstr "" #: lang/json/json_items.py msgid "" -"This is a long and thin knife with a spring-loaded blade that rests inside " -"the handle while not in use." +"This is secure combination lock box. Sadly, you don't know the combination. " +"Breaking inside it would destroy anything of value." msgstr "" #: lang/json/json_items.py -msgid "jack" +msgid "pickaxe" msgstr "" #: lang/json/json_items.py -msgid "This is a common hydraulic jack, used when changing tires." +msgid "This is a large steel pickaxe, strike the earth (or your enemies)!" msgstr "" #: lang/json/json_items.py -msgid "scythe" +msgid "spray can" msgstr "" #: lang/json/json_items.py msgid "" -"This is an old-fashioned farming tool used to cut tall grass. While it may " -"be a giant blade on the end of a stick, it is incredibly awkward to use for " -"anything but its intended purpose." +"This is a spray can, filled with paint. Use this tool to make graffiti on " +"the floor." msgstr "" #: lang/json/json_items.py -msgid "war scythe" +msgid "permanent marker" msgstr "" #: lang/json/json_items.py msgid "" -"This farming tool has been modified into a weapon by reinforcing and " -"rotating its blade 90 degrees, transforming it into a deadly giant blade on " -"the end of a stick." +"This is a King Size(tm) industrial strength permanent marker, about halfway " +"between a typical marker and a can of spray paint in size. Use it to write " +"something down. However, writing 'Elbereth' probably won't help you." msgstr "" #: lang/json/json_items.py -msgid "sickle" +msgid "rag" msgstr "" #: lang/json/json_items.py msgid "" -"This is an old-fashioned farming tool used to cut tall grass. While it may " -"be a massive curved blade on a handle, it is incredibly awkward to use for " -"anything but its intended purpose." +"This is a largish piece of cloth, useful in crafting and possibly for " +"staunching bleeding." msgstr "" #: lang/json/json_items.py -msgid "powered quarterstaff" +msgid "plastic chunk" msgstr "" #: lang/json/json_items.py msgid "" -"This is an ironshod quarterstaff that has a high-voltage stun gun built into " -"the handle. The stun gun is wired to the metal caps at either end of the " -"staff, allowing you to zap a dangerous opponent should beating them " -"senseless with it prove too hazardous." +"This is a piece of plastic. It doesn't have much use except to repair " +"plastic items." msgstr "" #: lang/json/json_items.py -msgid ".45 caliber conversion kit" +msgid "kevlar plate" msgstr "" #: lang/json/json_items.py msgid "" -"Replacing several key parts of a 9mm, .38, .40 or .44 firearm converts it to " -"a .45 firearm. The conversion results in reduced accuracy and increased " -"recoil." +"This is a plate of reinforced kevlar. It could be used used to repair items " +"made of kevlar." msgstr "" #: lang/json/json_items.py -msgid "suppressor" +msgid "PDA" msgstr "" #: lang/json/json_items.py msgid "" -"Using a suppressor is almost an imperative in zombie-infested regions. " -"Gunfire is very noisy, and will attract predators. Its only drawback is a " -"reduced muzzle velocity, resulting in less accuracy and damage." +"This is a small, multipurpose electronic device. It can be loaded with a " +"variety of apps, providing all kinds of functionality." msgstr "" #: lang/json/json_items.py -msgid "enhanced grip" +msgid "PDA - Flashlight" msgstr "" #: lang/json/json_items.py msgid "" -"A grip placed forward on the barrel allows for greater control and accuracy. " -"Aside from increased weight, there are no drawbacks." +"This is a small, multipurpose electronic device. This PDA has its flashlight " +"app on, and is providing light." msgstr "" #: lang/json/json_items.py -msgid "barrel extension" +msgid "pocket knife" msgstr "" #: lang/json/json_items.py msgid "" -"A longer barrel increases the muzzle velocity of a firearm, contributing to " -"both accuracy and damage. However, the longer barrel tends to vibrate after " -"firing, greatly increasing recoil." +"This is a small pocket knife. It isn't great for combat, but it's better " +"than nothing. It's sharp enough to butcher with." msgstr "" #: lang/json/json_items.py -msgid "shortened barrel" +msgid "makeshift knife" msgstr "" #: lang/json/json_items.py msgid "" -"A shortened barrel results in markedly reduced accuracy, and a minor " -"increase in noise, but also reduces recoil greatly as a result of the " -"improved manageability of the firearm." +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." msgstr "" #: lang/json/json_items.py -msgid "rifled barrel" +msgid "bone needle" msgstr "" #: lang/json/json_items.py msgid "" -"Rifling a shotgun barrel is mainly done in order to improve its accuracy " -"when firing slugs. The rifling makes the gun less suitable for shot, however." +"This is sharp needle made from a bone. It would be useful for making rough " +"clothing and items" msgstr "" #: lang/json/json_items.py -msgid "extended magazine" +msgid "stone hammer" msgstr "" #: lang/json/json_items.py -#, no-python-format msgid "" -"Increases the ammunition capacity of your firearm by 50%, but the added bulk " -"reduces accuracy slightly." +"This is a rock affixed to a stick, in the crude facsimile of a hammer. It " +"functions adequately as a hammer, but really can't compare to a proper one." msgstr "" #: lang/json/json_items.py -msgid "double magazine" +msgid "stone axe" msgstr "" #: lang/json/json_items.py msgid "" -"Completely doubles the ammunition capacity of your firearm, but the added " -"bulk reduces accuracy and increases recoil." +"This is a sharpened stone affixed to a stick. It works passably well as an " +"axe but really can't compare to a proper axe." msgstr "" #: lang/json/json_items.py -msgid "spare magazine" +msgid "stone shovel" msgstr "" #: lang/json/json_items.py msgid "" -"A spare magazine you can keep on hand to make reloads faster, but must " -"itself be reloaded before it can be used again." +"This is a flattened stone affixed to a stick. It works passably well as a " +"shovel but really can't compare to a real shovel." msgstr "" #: lang/json/json_items.py -msgid "brass catcher" +msgid "entrenching tool" msgstr "" #: lang/json/json_items.py msgid "" -"A bag that hangs off the side of your gun and catches ejected casings so you " -"don't have to pick them up." +"This is a stout collapsible spade. It's commonly used by military forces and " +"favored by hikers for digging." msgstr "" #: lang/json/json_items.py -msgid "gyroscopic stabilizer" +msgid "digging stick" msgstr "" #: lang/json/json_items.py msgid "" -"An advanced unit that straps onto the side of your firearm and reduces " -"vibration, greatly reducing recoil and increasing accuracy. However, it " -"also takes up space in the magazine slot, reducing ammo capacity." +"This is a large stick, with the end carved into a broad blade for digging. " +"It could be used to dig shallow pits, but not deep ones." msgstr "" #: lang/json/json_items.py -msgid "rapid blowback" +msgid "shelter kit" msgstr "" #: lang/json/json_items.py -msgid "" -"An improved blowback mechanism makes your firearm's automatic fire faster, " -"at the cost of reduced accuracy and increased noise." +msgid "This is a small shelter, made of sticks and skins. Use it to place." msgstr "" #: lang/json/json_items.py -msgid "auto-fire mechanism" +msgid "damaged shelter kit" msgstr "" #: lang/json/json_items.py msgid "" -"A simple mechanism that converts a pistol to a fully-automatic weapon, with " -"a burst size of three rounds. However, it reduces accuracy, and increases " -"noise and recoil." +"This is a small shelter, made of sticks and skins. Use it to place. This " +"shelter has been damaged, and needs repairs." msgstr "" #: lang/json/json_items.py -msgid "9mm caliber conversion kit" +msgid "heatpack" msgstr "" #: lang/json/json_items.py msgid "" -"Replacing several key parts of a .38, .40, .44 or .45 firearm converts it to " -"a 9mm firearm. The conversion results in a slight reduction in accuracy." +"This is a chemical heatpack. It's used to treat sports injuries and heat " +"food. It is usable only once." msgstr "" #: lang/json/json_items.py -msgid ".22 caliber conversion kit" +msgid "used heatpack" msgstr "" #: lang/json/json_items.py msgid "" -"Replacing several key parts of a 9mm, .38, .40, 5.7mm, 4.6mm, 7.62mm or .223 " -"firearm converts it to a .22 firearm. The conversion results in a slight " -"reduction in accuracy." +"This is a chemical heatpack. It's used to treat sports injuries and heat " +"food. This one has been used and is chemically inert, rendering it useless." msgstr "" #: lang/json/json_items.py -msgid "5.7mm caliber conversion kit" +msgid "packed M72 LAW" msgstr "" #: lang/json/json_items.py msgid "" -"FN Hestal sells a conversion kit, used to convert .22, 9mm, or .38 firearms " -"to their proprietary 5.7x28mm, a round designed for accuracy and armor " -"penetration." +"This is an M72 LAW, packed in its storage form. Use it to pop it out and " +"make it ready to fire. Once it is activated, it cannot be repacked." msgstr "" #: lang/json/json_items.py -msgid "4.6mm caliber conversion kit" +msgid "sealed jar of canned meat" msgstr "" #: lang/json/json_items.py msgid "" -"Heckler and Koch sells a conversion kit, used to convert .22, 9mm, or .38 " -"firearms to their proprietary 4.6x30mm, a round designed for accuracy and " -"armor penetration." +"This is a sealed glass jar containing some meat. Use to open and eat to " +"enjoy." msgstr "" #: lang/json/json_items.py -msgid ".308 caliber conversion kit" +msgid "sealed 3-litre jar of kompot" msgstr "" #: lang/json/json_items.py msgid "" -"This kit is used to convert a shotgun or 7.62mm, .223 or .30-06 rifle to the " -"popular and powerful .308 caliber. The conversion results in reduced ammo " -"capacity and a slight reduction in accuracy." +"This is a sealed glass jar containing kompot. Use to open and eat to enjoy." msgstr "" #: lang/json/json_items.py -msgid ".223 caliber conversion kit" +msgid "sealed jar of soylent slices" msgstr "" #: lang/json/json_items.py msgid "" -"This kit is used to convert a shotgun or 7.62mm, .30-06, or .308 rifle to " -"the popular, accurate, and damaging .223 caliber. The conversion results in " -"slight reductions in both accuracy and ammo capacity." +"This is a sealed glass jar containing human meat. Use to open and eat, if " +"you really want to, to enjoy." msgstr "" #: lang/json/json_items.py -msgid "battle rifle conversion" +msgid "sealed jar of canned veggy" msgstr "" #: lang/json/json_items.py msgid "" -"This is a complete conversion kit, designed to turn a rifle into a powerful " -"battle rifle. It reduces accuracy, and increases noise and recoil, but also " -"increases damage, ammo capacity, and fire rate." +"This is a sealed glass jar containing mixed vegetables. Use to open and eat " +"to enjoy." msgstr "" #: lang/json/json_items.py -msgid "sniper conversion" +msgid "sealed jar of canned fruit" msgstr "" #: lang/json/json_items.py msgid "" -"This is a complete conversion kit, designed to turn a rifle into a deadly " -"sniper rifle. It decreases ammo capacity, and removes any automatic fire " -"capabilities, but also increases accuracy and damage." +"This is a sealed glass jar containing sliced fruits. Use to open and eat to " +"enjoy." msgstr "" #: lang/json/json_items.py -msgid "M203" +msgid "sealed jar of pickled vegetable" msgstr "" #: lang/json/json_items.py msgid "" -"The M203 was originally designed for use with M16 variants but today can be " -"attached to almost any rifle. It allows a single 40mm grenade to be loaded " -"and fired." +"This is a sealed glass jar containing pickled vegetables. Use to open and " +"eat to enjoy." msgstr "" #: lang/json/json_items.py -msgid "40mm pipe launcher" +msgid "sealed jar of pickled meat" msgstr "" #: lang/json/json_items.py msgid "" -"This is a home built launcher tube that can be attached to almost any rifle. " -"It allows a single 40mm grenade to be loaded and fired." +"This is a sealed glass jar containing pickled meat. Use to open and eat to " +"enjoy." msgstr "" #: lang/json/json_items.py -msgid "bayonet" +msgid "sealed jar of pickled human flesh" msgstr "" #: lang/json/json_items.py msgid "" -"A bayonet is a stabbing weapon that can be attached to the front of a " -"shotgun, sub-machinegun or rifle, allowing a melee attack to deal piercing " -"damage. The added length increases recoil slightly." +"This is sealed glass jar containing pickled human flesh. Use to open. You " +"might even enjoy it." msgstr "" #: lang/json/json_items.py -msgid "sword bayonet" +msgid "cordless drill" msgstr "" #: lang/json/json_items.py msgid "" -"A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " -"added length increases recoil substantially." +"This is a cordless drill with a selection of drill bits. The charger base " +"contains a battery draining attachment so the drill can be charged in lieu " +"of mains power." msgstr "" #: lang/json/json_items.py -msgid "pistol bayonet" +msgid "vacuum sealer" msgstr "" #: lang/json/json_items.py msgid "" -"A pistol bayonet is a stabbing weapon that can be attached to the front of a " -"handgun, allowing a melee attack to deal piercing damage. The added length " -"reduces the gun's overall handling somewhat." +"This is a portable heat sealer unit with an air pump. It's used for vacuum " +"packing food to preserve it." msgstr "" #: lang/json/json_items.py -msgid "underslung shotgun" +msgid "vacuum-packed meat slices" msgstr "" #: lang/json/json_items.py msgid "" -"A miniaturized shotgun with 2 barrels, which can be mounted under the barrel " -"of many rifles. It allows two shotgun shells to be loaded and fired." +"This is a bag of vacuum packed meat slices in plastic packaging. Use to " +"open and eat to enjoy." msgstr "" #: lang/json/json_items.py -msgid "masterkey shotgun" +msgid "vacuum-packed veggy chunks" msgstr "" #: lang/json/json_items.py msgid "" -"A minimalist pump action shotgun, which can be mounted under the barrel of " -"many rifles. It allows a total of four shotgun shells to be loaded and fired." +"This is a bag of vacuum packed vegetable slices in plastic packaging. Use " +"to open and eat to enjoy." msgstr "" #: lang/json/json_items.py -msgid "rail-mounted crossbow" +msgid "vacuum-packed fruit slices" msgstr "" #: lang/json/json_items.py msgid "" -"A kit to attach a pair of crossbow arms and a firing rail to the barrel of a " -"long firearm. It allows crossbow bolts to be fired." +"This is a bag of vacuum packed fruit slices in plastic packaging. Use to " +"open and eat to enjoy." msgstr "" #: lang/json/json_items.py -msgid "laser sight" +msgid "medical gauze" msgstr "" #: lang/json/json_items.py msgid "" -"A small visible-light laser that mounts on a firearm to enhance ease and " -"speed of target acquisition. Aside from increased weight, there are no " -"drawbacks." +"This is decent sized piece of cotton, sterilized and sealed. It's designed " +"for medical purposes." msgstr "" #: lang/json/json_items.py -msgid "improved iron sights" +msgid "talking doll" msgstr "" #: lang/json/json_items.py -msgid "Improves the weapon's ironsights, increasing accuracy. No drawbacks." +msgid "" +"This is a talking doll, meant for children. Fortunately it still works, and " +"you could unload the batteries out of it." msgstr "" #: lang/json/json_items.py -msgid "red dot sight" +msgid "towel" msgstr "" #: lang/json/json_items.py msgid "" -"Adds a red dot optic to the top of your gun, replacing the iron sights. " -"Increases accuracy and weight." +"This is a fluffy and large towel. It could be used to dry yourself. Any " +"person that can travel the length and breadth of the apocalypse, rough it, " +"slum it, struggle against terrible odds, win through and still know where " +"their towel is, is clearly a force to be reckoned with." msgstr "" #: lang/json/json_items.py -msgid "holographic sight" +msgid "folding bicycle" msgstr "" #: lang/json/json_items.py -msgid "" -"Adds a holographic sight. Used extensively by military forces, it increases " -"accuracy and weight but is a step up from a red dot sight." +msgid "This is a bicycle folded into a relatively portable package." msgstr "" #: lang/json/json_items.py -msgid "rifle scope" +msgid "makeshift welder" msgstr "" #: lang/json/json_items.py msgid "" -"A long ranged rifle scope used by civilians and military alike, increases " -"weight but improves accuracy greatly." +"This crude welder has been fashioned from a bundle of copper wire, scrap " +"metal, and complete disregard for personal safety. While it's not as " +"efficient as a factory welder, it will serve in a pinch." msgstr "" #: lang/json/json_items.py -msgid "ported barrel" +msgid "still" msgstr "" #: lang/json/json_items.py msgid "" -"A ported barrel redirects exhaust gases to compensate for muzzle climb, " -"improves recoil but increases noise and reduces accuracy slightly." +"This is a still. It's useful for creating distillation of alcohol and other, " +"more curious substances." msgstr "" #: lang/json/json_items.py -msgid "ergonomic grip" +msgid "plastic mold" msgstr "" #: lang/json/json_items.py msgid "" -"A set of ergonomic replacement furniture for a pistol, improves recoil and " -"accuracy. Aside from increased weight, there are no drawbacks." +"This is a plastic mold. It could be shaped and used to craft items made of " +"plastic." msgstr "" #: lang/json/json_items.py -msgid "adjustable stock" +msgid "chemistry set" msgstr "" #: lang/json/json_items.py msgid "" -"An adjustable replacement stock, improves recoil and accuracy. Aside from " -"increased weight, there are no drawbacks." +"This is a chemistry set stored in a bag. The contents include glass " +"containers, hoses, metal wire, a hotplate, and safety glasses. It might be " +"used to craft some chemistry projects if you're so inclined." msgstr "" #: lang/json/json_items.py -msgid "pistol stock" +msgid "crack pipe" msgstr "" #: lang/json/json_items.py msgid "" -"An add on stock for handguns, improves recoil and accuracy. Aside from " -"increased weight, there are no drawbacks." +"This is a fine glass tube with a bulb with an bowl on one end. It's used in " +"partaking of certain illicit substances." msgstr "" #: lang/json/json_items.py -msgid "bipod" +msgid "glass pipe" msgstr "" #: lang/json/json_items.py msgid "" -"Bipods are commonly used on rifles and machine guns to provide a forward " -"rest and reduce motion. Aside from increased weight, there are no drawbacks." +"This is hand-blown glass pipe. It's of the type of pipe most commonly used " +"to smoke hallucinatory plants." msgstr "" #: lang/json/json_items.py -msgid "steel frame" +msgid "tobacco pipe" msgstr "" #: lang/json/json_items.py -msgid "A large frame made of steel. Useful for crafting." +msgid "" +"This is a hand-carved wooden smoking pipe. It's designed to facilitate " +"consumption of fire cured tobacco leaves." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "seat" +#: lang/json/json_items.py +msgid "electric forge" msgstr "" #: lang/json/json_items.py -msgid "A soft car seat covered with leather." +msgid "" +"This is a portable electric metalworking forge, powered by batteries. " +"Combined with the right tools, you could use this for metalworking. With a " +"little mechanical know-how, you could probably even hook it directly to a " +"vehicle's power system." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "saddle" +#: lang/json/json_items.py +msgid "crucible" msgstr "" #: lang/json/json_items.py -msgid "A leather-covered seat designed to be straddled." +msgid "" +"This is a small metalworking crucible. It's used in some metalworking " +"fabrication recipes." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "muffler" +#: lang/json/json_items.py +msgid "anvil" msgstr "" #: lang/json/json_items.py msgid "" -"A muffler from a car. Very unwieldy as a weapon. Useful in a few crafting " +"This is an enormously heavy block of oddly shaped steel with a chisel-like " +"projection set into the corner. It's used in most metalworking fabrication " "recipes." msgstr "" #: lang/json/json_items.py -msgid "vehicle controls" +msgid "steel tongs" msgstr "" #: lang/json/json_items.py -msgid "A set of various vehicle controls. Useful for crafting." +msgid "" +"These are long, steel tongs. They are is commonly used for cooking or in " +"metalworking fabrication recipes. You could swing them around as a melee " +"weapon in a pinch." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "electric motor" +#: lang/json/json_items.py +msgid "metalworking chisel" msgstr "" #: lang/json/json_items.py -msgid "A powerful electric motor. Useful for crafting." +msgid "" +"This is a short, stout metalworking chisel. It's used in some metalworking " +"fabrication recipes." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "large electric motor" +#: lang/json/json_items.py +msgid "swage and die set" msgstr "" #: lang/json/json_items.py -msgid "A large and very powerful electric motor. Useful for crafting." +msgid "" +"These are a set of swages and dies for metalsmithing. These loops and metal " +"blocks are used in some metalworking fabrication recipes." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "plasma engine" +#: lang/json/json_items.py +msgid "nodachi" msgstr "" #: lang/json/json_items.py -msgid "High technology engine, working on hydrogen fuel." +msgid "" +"This is a huge, curved, two-handed sword from Japan. It is surprisingly " +"light for its size." msgstr "" #: lang/json/json_items.py -msgid "foot crank" +msgid "match head bomb" msgstr "" #: lang/json/json_items.py -msgid "The pedal and gear assembly from a bicycle." +msgid "" +"This is a bottle filled with match heads and equipped with a fuse. Use this " +"item to light the fuse; you will, of course, need a lighter in your " +"inventory to do this. After lighting it, throw it to cause fires." msgstr "" #: lang/json/json_items.py -msgid "metal tank" +msgid "match head bomb (lit)" msgstr "" #: lang/json/json_items.py -msgid "A metal tank for holding liquids. Useful for crafting." +msgid "" +"This is a bottle filled with match heads and equipped with a fuse. This one " +"has been lit, and its fuse is rapidly burning down. You may not want to hold " +"onto it much longer." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "small storage battery" +#: lang/json/json_items.py +msgid "refillable lighter" msgstr "" #: lang/json/json_items.py -msgid "A small storage battery. Useful for crafting." +msgid "" +"This is a lighter featuring a flip top cover and refuelable tank. A lighter " +"must be carried to use various drugs, like cigarettes, or to light things " +"like molotov cocktails. You can also use a lighter to light nearby items on " +"fire." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "motorbike battery" +#: lang/json/json_items.py +msgid "charcoal forge" msgstr "" #: lang/json/json_items.py msgid "" -"A 12v lead-acid battery used to power smaller vehicles' electrical systems." +"This is a portable, charcoal fired, metalworking forge. If combined with the " +"right tools, you could use this for metalworking." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "car battery" +#: lang/json/json_items.py +msgid "charcoal smoker" msgstr "" #: lang/json/json_items.py -msgid "A 12v lead-acid battery used to power car electrical systems." +msgid "" +"This is a portable charcoal smoker. Good for weekend barbecuing and " +"preserving meat with smoke." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "truck battery" +#: lang/json/json_items.py +msgid "charcoal water purifier" msgstr "" #: lang/json/json_items.py -msgid "A large 12v lead-acid battery used to power truck electrical systems." +msgid "" +"Using this item on a container full of water will purify the water using " +"layered charcoal. Once the charcoal has purified enough water, it will " +"become unusable and can be disassembled and recycled. Water taken from " +"uncertain sources like a river may be dirty." msgstr "" #: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "storage battery" +msgid "bicycle horn" msgstr "" #: lang/json/json_items.py -msgid "A large storage battery. Useful for crafting." +msgid "" +"This is a simple bulb horn, found on many bicycles. Use to honk. Honk honk." msgstr "" #: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "minireactor" +msgid "car horn" msgstr "" #: lang/json/json_items.py -msgid "A small portable plutonium reactor. Handle with great care!" +msgid "This is a car horn meant to be attached to a car's electrical system." msgstr "" #: lang/json/json_items.py lang/json/json_vehicle_parts.py -#: lang/json/json_vehicle_parts.py -msgid "solar panel" +msgid "truck horn" msgstr "" #: lang/json/json_items.py -msgid "" -"Electronic device that can convert solar radiation into electric power. " -"Useful for crafting." +msgid "This is a very loud horn, usually found on large trucks like semis." msgstr "" #: lang/json/json_items.py -msgid "reinforced solar panel" +msgid "wrapped radiation badge" msgstr "" #: lang/json/json_items.py msgid "" -"A solar panel that has been covered with a pane of reinforced glass to " -"protect the delicate solar cells from zombies or errant baseballs. Useful " -"for crafting." +"This is a badge that detects radiation dosage sealed in a radiation-blocking " +"bag. Use it to remove it from the bag." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "minifridge" +#: lang/json/json_items.py +msgid "food dehydrator" msgstr "" #: lang/json/json_items.py msgid "" -"A very small fridge for keeping food cool, but without electricity it's just " -"a very heavy box with shelves inside." +"This is a portable electric food dehydrator. It's powered by batteries, and " +"could be invaluable in preserving food." msgstr "" #: lang/json/json_items.py -msgid "solar cell" +msgid "trench knife" msgstr "" #: lang/json/json_items.py msgid "" -"A small electronic device that can convert solar radiation into electric " -"power. Useful for crafting." +"This stout combat knife features a steel guard to protect the user's " +"knuckles. The guard can also be used for striking or blocking, and the knife " +"can also be used to butcher corpses." msgstr "" #: lang/json/json_items.py -msgid "sheet metal" +msgid "small fire extinguisher" msgstr "" #: lang/json/json_items.py -msgid "A thin sheet of metal." -msgstr "" - -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "steel plating" +msgid "" +"This is small emergency fire extinguisher. It would be useful for putting " +"out adjacent fires." msgstr "" #: lang/json/json_items.py -msgid "A piece of armor plating made of steel." -msgstr "" - -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "superalloy plating" +msgid "switchblade" msgstr "" #: lang/json/json_items.py -msgid "A piece of armor plating made of sturdy superalloy." +msgid "" +"This is a long and thin knife with a spring-loaded blade that rests inside " +"the handle while not in use." msgstr "" #: lang/json/json_items.py -msgid "superalloy sheet" +msgid "jack" msgstr "" #: lang/json/json_items.py -msgid "A sheet sturdy superalloy, incredibly hard, yet incredibly malleable." +msgid "This is a common hydraulic jack, used when changing tires." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "spiked plating" +#: lang/json/json_items.py +msgid "scythe" msgstr "" #: lang/json/json_items.py msgid "" -"A piece of armor plating made of steel. It is covered by menacing spikes." +"This is an old-fashioned farming tool used to cut tall grass. While it may " +"be a giant blade on the end of a stick, it is incredibly awkward to use for " +"anything but its intended purpose." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "hard plating" +#: lang/json/json_items.py +msgid "war scythe" msgstr "" #: lang/json/json_items.py -msgid "A piece of very thick armor plating made of steel." +msgid "" +"This farming tool has been modified into a weapon by reinforcing and " +"rotating its blade 90 degrees, transforming it into a deadly giant blade on " +"the end of a stick." msgstr "" #: lang/json/json_items.py -msgid "RV kitchen unit" +msgid "sickle" msgstr "" #: lang/json/json_items.py msgid "" -"A vehicle mountable electric range and sink unit with integrated tool " -"storage for cooking utensils." +"This is an old-fashioned farming tool used to cut tall grass. While it may " +"be a massive curved blade on a handle, it is incredibly awkward to use for " +"anything but its intended purpose." msgstr "" #: lang/json/json_items.py -msgid "vehicle welding rig" +msgid "compressed air horn" msgstr "" #: lang/json/json_items.py msgid "" -"A welding rig made to run off a vehicle's storage battery. It has a " -"soldering iron attachment for delicate work, and a compartment to store your " -"extra tools in." +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." msgstr "" -#: lang/json/json_items.py lang/json/json_vehicle_parts.py -msgid "FOODCO kitchen buddy" +#: lang/json/json_items.py +msgid "powered quarterstaff" msgstr "" #: lang/json/json_items.py msgid "" -"Assembled from a set of instructions you found in an old book of DIY " -"projects, the *FOODCO kitchen buddy* claims to be *the perfect solution to " -"all your home-cooking needs!*. While it is surprisingly handy for vacuum-" -"sealing as well as dehydrating food, the cheery sales pitch neglected to " -"mention A - how awkward the damn thing is, and B - how it doesn't take " -"batteries. You're going to have to weld it to a vehicle, or something else " -"with a supply of electricity, if you want to use it. In addition to the " -"cooking features, it also has a water-purification system, a drawer for " -"holding extra tools, and for some insane reason, a press and die set for " -"hand-loading ammunition." +"This is an ironshod quarterstaff that has a high-voltage stun gun built into " +"the handle. The stun gun is wired to the metal caps at either end of the " +"staff, allowing you to zap a dangerous opponent should beating them " +"senseless with it prove too hazardous." msgstr "" #: lang/json/json_items.py -msgid "emergency vehicle light (red)" +msgid "Guitar" msgstr "" #: lang/json/json_items.py msgid "" -"One of the red-colored lights from the top of an emergency services vehicle. " -"When turned on, the lights rotate to shine in all directions." +"An acoustic six-string guitar. A bit out of tune, but in good shape " +"otherwise." msgstr "" #: lang/json/json_items.py -msgid "emergency vehicle light (blue)" +msgid "Bongo" msgstr "" #: lang/json/json_items.py msgid "" -"One of the blue-colored lights from the top of an emergency services " -"vehicle. When turned on, the lights rotate to shine in all directions." +"A handheld drum. Suitable for making loud noises into all hours of the night." msgstr "" #: lang/json/json_keybindings.py @@ -28995,6 +29343,23 @@ msgid "" "the subject returned to baseline state with no apparent side effects." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "We have made a fascinating discovery; by creating a miniature portal with " @@ -29003,6 +29368,15 @@ msgid "" "so quickly that none were even aware that they had visited lower planes." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Our research on teleportation has ground to a halt. For some reason, the " @@ -29732,8 +30106,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -33125,6 +33500,27 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "Very Fast Healer" msgstr "" @@ -33590,6 +33986,16 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "Fluffy Tail" msgstr "" @@ -45398,6 +45804,280 @@ msgstr "" msgid " sweep-kicks %s" msgstr "" +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " Snakebites %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + #: lang/json/json_terrain.py msgid "empty space" msgstr "" @@ -47492,6 +48172,21 @@ msgstr "" msgid "%s clubs %s with her tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + #: melee.cpp #, c-format msgid "You slap %s with your tentacle!" @@ -49255,6 +49950,11 @@ msgstr "" msgid "The %1$s hits your %2$s." msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp msgid "You stop reloading." msgstr "" @@ -54192,25 +54892,26 @@ msgstr "" msgid "%6.2f per minute" msgstr "" -#: player.cpp -#, c-format -msgid "Weapon: %s" +#: player.cpp ranged.cpp +msgid "Burst" msgstr "" #: player.cpp -msgid "Recoil" +#, c-format +msgid "Weapon: %s" msgstr "" #: player.cpp -msgid "No Style" +#, c-format +msgid "Weapon: %s (%s)" msgstr "" #: player.cpp -msgid "Normal" +msgid "Recoil" msgstr "" #: player.cpp -msgid "Burst" +msgid "No Style" msgstr "" #: player.cpp @@ -54672,11 +55373,11 @@ msgid "You feast upon the human flesh." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -55275,6 +55976,11 @@ msgstr "" msgid "Range: %d" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fzzt!" msgstr "" diff --git a/lang/po/cs.po b/lang/po/cs.po index 986bf2745adc1..82eb7ed1a9662 100644 --- a/lang/po/cs.po +++ b/lang/po/cs.po @@ -7,16 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-10-21 15:41+0000\n" -"Last-Translator: Radim Kolbe \n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 05:00+0000\n" +"Last-Translator: FULL NAME \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:27+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:39+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -11291,6 +11291,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11814,6 +11818,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12694,6 +12702,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -12846,6 +12860,10 @@ msgstr "" msgid "You damage your %s!" msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "" @@ -12959,6 +12977,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -12979,6 +13001,10 @@ msgstr "" msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "" @@ -13126,6 +13152,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -14596,6 +14626,10 @@ msgstr "" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14647,6 +14681,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14664,6 +14704,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14672,6 +14716,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14680,6 +14733,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14696,6 +14754,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14721,10 +14783,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14738,6 +14810,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14790,6 +14867,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14802,6 +14889,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14822,10 +14914,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -14874,6 +14974,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -14883,10 +14987,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -15864,6 +15976,14 @@ msgstr "" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -16905,6 +17025,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17266,6 +17392,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17304,6 +17437,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17584,6 +17723,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -17979,6 +18124,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -17991,6 +18150,12 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18503,6 +18668,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18660,6 +18839,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -18683,6 +18870,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -18904,6 +19097,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19047,7 +19246,7 @@ msgstr "" #: lang/json/json_items.py msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" @@ -19856,6 +20055,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21106,6 +21309,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21137,6 +21346,13 @@ msgstr "" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -21488,6 +21704,18 @@ msgstr "" msgid "PDA - Flashlight" msgstr "" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -21676,6 +21904,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -22573,6 +22807,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -22669,6 +22909,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23668,6 +23914,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24262,6 +24514,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -24505,6 +24771,12 @@ msgstr "" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -24624,6 +24896,10 @@ msgstr "" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "" @@ -25328,6 +25604,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "" @@ -25484,6 +25764,10 @@ msgstr "" msgid "compound bow" msgstr "" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "" @@ -25572,6 +25856,10 @@ msgstr "" msgid "cotton hat" msgstr "" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "" @@ -25616,6 +25904,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "" @@ -25848,6 +26140,10 @@ msgstr "" msgid "feather" msgstr "" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26120,6 +26416,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "" @@ -26220,6 +26520,10 @@ msgstr "" msgid "glowstick" msgstr "" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -26284,6 +26588,10 @@ msgstr "" msgid "hand press & die set" msgstr "" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -26424,6 +26732,10 @@ msgstr "" msgid "holster" msgstr "" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "" @@ -26680,6 +26992,10 @@ msgstr "" msgid "leather jacket" msgstr "" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "" @@ -26776,6 +27092,10 @@ msgstr "" msgid "log" msgstr "" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "" @@ -26836,6 +27156,10 @@ msgstr "" msgid "makeshift halberd" msgstr "" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "" @@ -26908,6 +27232,10 @@ msgstr "" msgid "medical gloves" msgstr "" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "" @@ -27084,6 +27412,10 @@ msgstr "" msgid "nail gun" msgstr "" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -27608,6 +27940,10 @@ msgstr "" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "" @@ -27904,6 +28240,10 @@ msgstr "" msgid "sharpened metal arrow" msgstr "" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "" @@ -28220,6 +28560,10 @@ msgstr "" msgid "steel plating" msgstr "" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -28468,6 +28812,10 @@ msgstr "" msgid "television" msgstr "" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "" @@ -29008,6 +29356,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29235,6 +29592,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -29243,6 +29608,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -29519,8 +29893,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -33072,6 +33447,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -33260,6 +33643,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -33625,6 +34012,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34078,6 +34471,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34193,6 +34593,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -44999,6 +45405,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45019,6 +45434,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45029,11 +45448,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45044,6 +45488,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45059,21 +45517,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45089,6 +45577,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45104,14 +45602,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45120,10 +45663,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45132,6 +45715,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45162,6 +45750,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45177,11 +45785,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45192,21 +45815,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45222,11 +45883,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45237,6 +45912,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47215,6 +47895,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -47501,6 +48191,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49133,6 +49828,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -53516,7 +54216,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -53570,7 +54270,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "" @@ -54048,10 +54748,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -54499,6 +55195,11 @@ msgstr "" msgid "Weapon: %s" msgstr "" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -54700,7 +55401,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55106,6 +55807,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" diff --git a/lang/po/de.po b/lang/po/de.po index d9697d3c3d698..6a81cb8cf7248 100644 --- a/lang/po/de.po +++ b/lang/po/de.po @@ -1,47 +1,47 @@ -# German translations for Cataclysm-DDA package. -# Copyright (C) 2013 CleverRaven and Cataclysm-DDA Contributors -# This file is distributed under the same license as the Cataclysm-DDA package. -# YOUR NAME , 2013. +# German translation for cdda +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the cdda package. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: 0.7-git\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-01 07:37+0000\n" -"Last-Translator: Pux \n" -"Language-Team: German\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-13 23:49+0000\n" +"Last-Translator: Wuzzy \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:29+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:29+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp msgid " ('_' (underscore)" -msgstr "" +msgstr " (»_« [Unterstrich]" #: action.cpp msgid " (underscore)" -msgstr "" +msgstr " (Unterstrich)" #: action.cpp help.cpp msgid " or " -msgstr "" +msgstr " oder " #: action.cpp msgid " or '" -msgstr "" +msgstr " oder '" #: action.cpp msgid "' or " -msgstr "" +msgstr "' oder " #: action.cpp msgid "'_' (underscore)" -msgstr "" +msgstr "»_« (Unterstrich)" #: action.cpp msgid "Advanced Inventory management" @@ -61,7 +61,7 @@ msgstr "Treppen hochsteigen" #: action.cpp msgid "Burst-Fire Wielded Item" -msgstr "" +msgstr "Feuerstoß an/aus" #: action.cpp msgid "Butcher" @@ -89,7 +89,7 @@ msgstr "Zwei Gegenstände vergleichen" #: action.cpp msgid "Construct Terrain" -msgstr "" +msgstr "Gelände bebauen" #: action.cpp msgid "Control Vehicle" @@ -129,7 +129,7 @@ msgstr "Essen" #: action.cpp msgid "Examine Nearby Terrain" -msgstr "" +msgstr "Benachbartes Gelände untersuchen" #: action.cpp msgid "Fire Wielded Item" @@ -241,7 +241,7 @@ msgstr "Gegenstände aufnehmen" #: action.cpp msgid "Press " -msgstr "" +msgstr "Drücke " #: action.cpp msgid "Quicksave" @@ -249,7 +249,7 @@ msgstr "Schnellspeichern" #: action.cpp msgid "Re-layer armour/clothing" -msgstr "" +msgstr "Bekleidungsschichten umsortieren" #: action.cpp msgid "Read" @@ -277,7 +277,7 @@ msgstr "Schlafen" #: action.cpp msgid "Smash Nearby Terrain" -msgstr "" +msgstr "Benachbartes Gelände zerschmettern" #: action.cpp msgid "Swap Inventory Letters" @@ -349,11 +349,11 @@ msgstr "Spielerinfo anzeigen" #: action.cpp msgid "View Scentmap" -msgstr "" +msgstr "Geruchskarte anzeigen" #: action.cpp msgid "View/Activate Bionics" -msgstr "" +msgstr "Bioniken betrachten/aktivieren" #: action.cpp msgid "Wait for Several Minutes" @@ -369,7 +369,7 @@ msgstr "In die Hand nehmen" #: action.cpp msgid "or '_' (underscore)" -msgstr "" +msgstr "oder »_« (Unterstrich)" #: addiction.cpp msgid "Alcohol Withdrawal" @@ -408,14 +408,16 @@ msgid "" "Perception - 1; Intelligence - 1; Occasional Cravings;\n" "Risk of delirium tremens" msgstr "" +"Wahrnehmung − 1; Intelligenz − 1; gelegentliches Verlangen;\n" +"Risiko von Delirium tremens" #: addiction.cpp msgid "Perception - 1; Intelligence - 1; Frequent cravings." -msgstr "" +msgstr "Wahrnehmung −1; Intelligenz −1; Häufiges Verlangen." #: addiction.cpp msgid "Perception - 2; Intelligence - 2; Frequent cravings." -msgstr "" +msgstr "Wahrnehmung −2; Intelligenz −2; Häufiges Verlangen." #: addiction.cpp msgid "Sleeping Pill Dependance" @@ -427,6 +429,8 @@ msgid "" "Strength - %d; Perception - 1; Dexterity - 1;\n" "Depression and physical pain to some degree. Frequent cravings. Vomiting." msgstr "" +"Stärke −%d; Wahrnehmung −1; Geschicklichkeit −1;\n" +"Teilweise Depression und physicher Schmerz. Häufiges Verlangen. Erbrechen." #: addiction.cpp msgid "" @@ -434,6 +438,9 @@ msgid "" "Movement rate reduction. Depression. Weak immune system. Frequent " "cravings." msgstr "" +"Stärke −1; Intelligenz −1;\n" +"Geschwindigkeitsreduktion. Depression. Schwaches Immunsystem. Häufiges " +"Verlangen." #: addiction.cpp msgid "Strength - 1; Slight sluggishness; Occasional cravings" @@ -547,10 +554,12 @@ msgstr " (SATT)" #: advanced_inv.cpp msgid "1-9 (or GHJKLYUBNI) to select square for active tab, 0 for inventory," msgstr "" +"1–9 (oder GHJKLYUBNI), um Feld für aktiven Registerkartenreiter zu wählen, 0 " +"fürs Inventar," #: advanced_inv.cpp msgid "< [?] show help >" -msgstr "" +msgstr "< [?] Hilfe anzeigen >" #: advanced_inv.cpp msgid "< [?] show log >" @@ -559,7 +568,7 @@ msgstr "< [?] Protokoll anzeigen >" #: advanced_inv.cpp #, c-format msgid "< [s]ort: %s >" -msgstr "" +msgstr "< [s]ortieren: %s >" #: advanced_inv.cpp msgid "All 9 squares" @@ -567,7 +576,7 @@ msgstr "Alle 9 Quadrate" #: advanced_inv.cpp msgid "Can't move stuff to the same place." -msgstr "" +msgstr "Sachen können nicht zum Selben Feld bewegt werden." #: advanced_inv.cpp newcharacter.cpp msgid "DESCRIPTION" @@ -575,30 +584,33 @@ msgstr "BESCHREIBUNG" #: advanced_inv.cpp msgid "Destination area has too many items. Remove some first." -msgstr "" +msgstr "Zielbereich hat zu viele Items. Entferne zuerst ein paar." #: advanced_inv.cpp msgid "Destination area is full. Remove some items first" -msgstr "" +msgstr "Zielbereich ist voll. Entferne zuerst ein paar Items." #: advanced_inv.cpp msgid "Destination area is full. Remove some items first." -msgstr "" +msgstr "Zielbereich ist voll. Entferne zuerst ein paar Items." #: advanced_inv.cpp #, c-format msgid "Destination can only hold %d! Move how many? (0 to cancel) " msgstr "" +"Zielbereich kann nur %d enthalten! Wieviele bewegen? (0 zum Abbrechen) " #: advanced_inv.cpp #, c-format msgid "" "Destination full. %d / %d moved. Please report a bug if items have vanished." msgstr "" +"Ziel voll. %d/%d bewegt. Bitte melde einen Bug, falls Items verschwunden " +"sind." #: advanced_inv.cpp msgid "Destination full. Please report a bug if items have vanished." -msgstr "" +msgstr "Ziel voll. Bitte melde einen Bug, wenn Items verschwunden sind." #: advanced_inv.cpp msgid "Directly below you" @@ -647,7 +659,7 @@ msgstr "Sortieren nach... " #: advanced_inv.cpp #, c-format msgid "Source area is the same as destination (%s)." -msgstr "" +msgstr "Quellbereich ist der Selbe wie das Ziel (%s)." #: advanced_inv.cpp msgid "South" @@ -667,15 +679,15 @@ msgstr "Benachbarte Gegend" #: advanced_inv.cpp msgid "There's no room in your inventory." -msgstr "" +msgstr "In deinem Inventar ist kein Platz." #: advanced_inv.cpp msgid "This is too heavy!" -msgstr "" +msgstr "Dies ist zu schwer!" #: advanced_inv.cpp msgid "Too many items." -msgstr "" +msgstr "Zu viele Items." #: advanced_inv.cpp msgid "Unsorted (recently added first)" @@ -687,16 +699,16 @@ msgstr "Westen" #: advanced_inv.cpp msgid "You can't pick up a liquid." -msgstr "" +msgstr "Du kannst keine Flüssigkeit aufsammeln." #: advanced_inv.cpp msgid "You can't put items there" -msgstr "" +msgstr "Du kannst hier keine Items ablegen" #: advanced_inv.cpp #, c-format msgid "[<] page %d of %d [>]" -msgstr "" +msgstr "[<] Seite %d von %d [>]" #: advanced_inv.cpp msgid "[F]ilter" @@ -709,6 +721,8 @@ msgstr "[Runter / Bild ab] nächstes" #: advanced_inv.cpp msgid "[e]xamine item, [s]ort display, toggle auto[p]ickup, [q]uit." msgstr "" +"unt[e]rsuche Item, Anzeige [s]ortieren, [p] Auto-aufheben ein/aus, [q] " +"verlassen" #: advanced_inv.cpp msgid "[up / page up] previous" @@ -754,6 +768,8 @@ msgstr "Schusswaffen" #: advanced_inv.cpp msgid "hjkl or arrow keys to move cursor, [m]ove item between panes," msgstr "" +"hjkl oder Cursortasten zum Bewegen des Cursors, [m], um Items zwischen " +"Spalten zu bewegen" #: advanced_inv.cpp msgid "mods" @@ -773,7 +789,7 @@ msgstr "Anderes" #: advanced_inv.cpp msgid "same square!" -msgstr "" +msgstr "Gleiches Feld!" #. ~ advanced inventory; "source", "weight", "volume"; 14 letters #: advanced_inv.cpp @@ -915,11 +931,11 @@ msgstr "" #: artifact.cpp msgid "A glow of light forms around you." -msgstr "" +msgstr "Ein Feuer aus Licht formt sich um dich herum." #: artifact.cpp msgid "Ancient" -msgstr "" +msgstr "Antik" #: artifact.cpp msgid "Bladed" @@ -931,7 +947,7 @@ msgstr "" #: artifact.cpp msgid "Boots" -msgstr "" +msgstr "Stiefel" #: artifact.cpp msgid "Coat" @@ -939,11 +955,11 @@ msgstr "" #: artifact.cpp msgid "Cube" -msgstr "" +msgstr "Würfel" #: artifact.cpp msgid "Cursed" -msgstr "" +msgstr "Verflucht" #: artifact.cpp msgid "Cyclopean" @@ -951,7 +967,7 @@ msgstr "" #: artifact.cpp msgid "Dagger" -msgstr "" +msgstr "Dolch" #: artifact.cpp #, c-format @@ -964,35 +980,35 @@ msgstr "" #: artifact.cpp msgid "Eldritch" -msgstr "" +msgstr "Eldritch" #: artifact.cpp msgid "Forbidden" -msgstr "" +msgstr "Verboten" #: artifact.cpp msgid "Forgotten" -msgstr "" +msgstr "Vergessen" #: artifact.cpp msgid "Frigid" -msgstr "" +msgstr "Eisig" #: artifact.cpp msgid "Fungal" -msgstr "" +msgstr "Pilzartig" #: artifact.cpp msgid "Gelatinous" -msgstr "" +msgstr "Gallertartig" #: artifact.cpp msgid "Gloves" -msgstr "" +msgstr "Handschuhe" #: artifact.cpp lang/json/json_mutations.py msgid "Grotesque" -msgstr "" +msgstr "Grotesk" #: artifact.cpp msgid "Harp" @@ -1000,15 +1016,15 @@ msgstr "" #: artifact.cpp msgid "Heavy" -msgstr "" +msgstr "Schwer" #: artifact.cpp msgid "Helm" -msgstr "" +msgstr "Helm" #: artifact.cpp msgid "Hideous" -msgstr "" +msgstr "Grässlich" #: artifact.cpp #, c-format @@ -1017,11 +1033,11 @@ msgstr "" #: artifact.cpp msgid "Knobbed" -msgstr "" +msgstr "Knorrig" #: artifact.cpp msgid "Mask" -msgstr "" +msgstr "Maske" #: artifact.cpp #, c-format @@ -1030,31 +1046,31 @@ msgstr "" #: artifact.cpp msgid "Repellent" -msgstr "" +msgstr "Abstoßend" #: artifact.cpp msgid "Ring" -msgstr "" +msgstr "Ring" #: artifact.cpp msgid "Robe" -msgstr "" +msgstr "Robe" #: artifact.cpp msgid "Shadowy" -msgstr "" +msgstr "Geheimnisvoll" #: artifact.cpp msgid "Shattered" -msgstr "" +msgstr "Zerbrochen" #: artifact.cpp msgid "Silent" -msgstr "" +msgstr "Still" #: artifact.cpp msgid "Sleeping" -msgstr "" +msgstr "Schlafend" #: artifact.cpp #, c-format @@ -1063,11 +1079,11 @@ msgstr "" #: artifact.cpp msgid "Spiked" -msgstr "" +msgstr "Stachelig" #: artifact.cpp msgid "Staff" -msgstr "" +msgstr "Stab" #: artifact.cpp #, c-format @@ -1076,7 +1092,7 @@ msgstr "" #: artifact.cpp msgid "Sword" -msgstr "" +msgstr "Schwert" #: artifact.cpp #, c-format @@ -1107,72 +1123,72 @@ msgstr "" #: artifact.cpp msgid "Undying" -msgstr "" +msgstr "Unsterblich" #: artifact.cpp npc.cpp msgid "Unknown" -msgstr "" +msgstr "Unbekannt" #: artifact.cpp msgid "Unspeakable" -msgstr "" +msgstr "Unaussprechlich" #: artifact.cpp msgid "You can see through everything!" -msgstr "" +msgstr "Du kannst durch alles sehen!" #: artifact.cpp msgid "You can see through walls!" -msgstr "" +msgstr "Du kannst durch Wände sehen!" #: artifact.cpp msgid "You fade into invisibility!" -msgstr "" +msgstr "Du verlasst zur Unsichtbarkeit!" #: artifact.cpp msgid "You feel a force pulling you inwards." -msgstr "" +msgstr "Du fühlst eine Kraft, die dich hereinzieht." #: artifact.cpp msgid "You feel a tickle of insanity." -msgstr "" +msgstr "Du spürst einen Kitzel des Wahnsinns." #: artifact.cpp msgid "You feel an evil presence..." -msgstr "" +msgstr "Du spürst eine böse Gegenwart …" #: artifact.cpp msgid "You feel an otherworldly attention upon you..." -msgstr "" +msgstr "Du spürst, wie etwas aus dem Jenseits dich beobachtet." #: artifact.cpp msgid "You feel hungry." -msgstr "" +msgstr "Du hast Hunger." #: artifact.cpp msgid "You feel insulated." -msgstr "" +msgstr "Du fühlst dich isoliert." #: artifact.cpp msgid "You feel storms coming." -msgstr "" +msgstr "Du merkst, wie Stürme aufziehen." #: artifact.cpp msgid "You feel thirsty." -msgstr "" +msgstr "Du hast Durst." #: artifact.cpp msgid "You feel your body decaying." -msgstr "" +msgstr "Du spürst deinen Körper verwesen." #: artifact.cpp msgid "You feel your genetic makeup degrading." -msgstr "" +msgstr "Du fühlst dein Erbgut sich abbauen." #: artifact.cpp #, c-format msgid "You have an urge to wear the %s." -msgstr "" +msgstr "Du hast ein Verlangen danach, %s zu tragen." #: artifact.cpp #, c-format @@ -1181,15 +1197,15 @@ msgstr "" #: artifact.cpp msgid "You hear a rattling noise coming from inside yourself." -msgstr "" +msgstr "Du hörst ein Rasseln aus deinem Innerem." #: artifact.cpp player.cpp msgid "You suddenly feel sharp pain for no reason." -msgstr "" +msgstr "Du fühlt plötzlich grundlos einen stechenden Schmerz." #: artifact.cpp msgid "Your back feels strengthened." -msgstr "" +msgstr "Dein Rücken fühlt sich stärker an." #: artifact.cpp msgid "Your mental state feels protected." @@ -1197,7 +1213,7 @@ msgstr "" #: artifact.cpp msgid "Your skin feels slithery." -msgstr "" +msgstr "Deine Haut fühlt sich schlüpfrig an." #: artifact.cpp msgid "Your skin prickles with radiation." @@ -1205,7 +1221,7 @@ msgstr "" #: artifact.cpp msgid "Your steps stop making noise." -msgstr "" +msgstr "Deine Schritte hören auf, Geräusche zu machen." #: artifact.cpp msgid "beads" @@ -1213,7 +1229,7 @@ msgstr "Perlen" #: artifact.cpp msgid "breathing" -msgstr "" +msgstr "atmend" #: artifact.cpp msgid "covered in pockets." @@ -1221,7 +1237,7 @@ msgstr "" #: artifact.cpp msgid "crackling" -msgstr "" +msgstr "knisternd" #: artifact.cpp msgid "crescent" @@ -1237,7 +1253,7 @@ msgstr "Kristall" #: artifact.cpp msgid "dead" -msgstr "" +msgstr "tot" #: artifact.cpp msgid "disc" @@ -1245,35 +1261,35 @@ msgstr "Scheibe" #: artifact.cpp msgid "disgustingly furry." -msgstr "" +msgstr "ekelerregend pelzig." #: artifact.cpp msgid "electric" -msgstr "" +msgstr "elektrisch" #: artifact.cpp msgid "engraved" -msgstr "" +msgstr "eingraviert" #: artifact.cpp msgid "extremely bulky." -msgstr "" +msgstr "extrem sperrig." #: artifact.cpp msgid "feels slimy" -msgstr "" +msgstr "fühlt sich schleimig an" #: artifact.cpp msgid "fractal" -msgstr "" +msgstr "fraktal" #: artifact.cpp msgid "glittering" -msgstr "" +msgstr "funkelnd" #: artifact.cpp msgid "glitters faintly under direct light" -msgstr "" +msgstr "funkeld schwach unter direktem Licht" #: artifact.cpp msgid "glowing" @@ -1281,16 +1297,18 @@ msgstr "glühend" #: artifact.cpp msgid "glows faintly" -msgstr "" +msgstr "leuchtet ein bisschen" #: artifact.cpp msgid "" "has a self-similar pattern which repeats until it is too small for you to see" msgstr "" +"hat ein selbtähnliches Muster, welches sich wiederholt bis es zu klein für " +"deine Augen ist" #: artifact.cpp msgid "has a surface reminiscent of reptile scales" -msgstr "" +msgstr "hat eine Oberfläche, die an Reptilienschuppen erinnert" #: artifact.cpp msgid "hollow tube" @@ -1302,11 +1320,11 @@ msgstr "hohler, transparenter Würfel" #: artifact.cpp msgid "humming" -msgstr "" +msgstr "summend" #: artifact.cpp msgid "hums very quietly" -msgstr "" +msgstr "summt sehr leise" #: artifact.cpp msgid "is constantly wriggling" @@ -1314,19 +1332,19 @@ msgstr "windet sich die ganze Zeit" #: artifact.cpp msgid "is covered with odd etchings" -msgstr "" +msgstr "ist mit seltsamen Ätzungen überzogen" #: artifact.cpp msgid "is icy cold to the touch" -msgstr "" +msgstr "ist vollkommen eiskalt" #: artifact.cpp msgid "is warm to the touch" -msgstr "" +msgstr "fühlt sich warm an" #: artifact.cpp msgid "itchy" -msgstr "" +msgstr "kratzig" #: artifact.cpp msgid "jelly" @@ -1342,27 +1360,27 @@ msgstr "Lampe" #: artifact.cpp msgid "leather-padded." -msgstr "" +msgstr "ledergepolstert." #: artifact.cpp msgid "makes a rattling sound when moved" -msgstr "" +msgstr "rasselt beim Bewegen" #: artifact.cpp msgid "makes very faint whispering sounds" -msgstr "" +msgstr "macht sehr schwache Flüstergeräusche" #: artifact.cpp msgid "makes your skin itch slightly when it is close" -msgstr "" +msgstr "juckt etwas deine Haut, sobald es nah ist" #: artifact.cpp msgid "malleable blob" -msgstr "" +msgstr "formbarer Blob" #: artifact.cpp msgid "moving" -msgstr "" +msgstr "bewegend" #: artifact.cpp msgid "napkin" @@ -1370,7 +1388,7 @@ msgstr "Serviette" #: artifact.cpp msgid "occasionally makes a soft crackling sound" -msgstr "" +msgstr "macht ab und zu ein weiches Knistergeräusch" #: artifact.cpp msgid "pin" @@ -1390,7 +1408,7 @@ msgstr "Pyramide" #: artifact.cpp msgid "rattling" -msgstr "" +msgstr "rasselnd" #: artifact.cpp msgid "regular tetrahedron" @@ -1402,7 +1420,7 @@ msgstr "Stab" #: artifact.cpp msgid "scaled" -msgstr "" +msgstr "geschuppt" #: artifact.cpp msgid "shifts from side to side slowly" @@ -1411,10 +1429,12 @@ msgstr "" #: artifact.cpp msgid "shrinks and grows very slightly with a regular pulse, as if breathing" msgstr "" +"schrumpft und wächst ein ganz kleines bisschen mit einem regelmäßigem Puls, " +"so wie beim Atmen" #: artifact.cpp msgid "slimy" -msgstr "" +msgstr "schleimig" #: artifact.cpp msgid "smooth disc" @@ -1498,7 +1518,7 @@ msgstr "Straßenkin´d" #: artifact.cpp msgid "very thin and light." -msgstr "" +msgstr "sehr dünn und leicht." #: artifact.cpp msgid "very thin sheet" @@ -1506,15 +1526,15 @@ msgstr "sehr dünnes Bettlaken" #: artifact.cpp msgid "very weakly shocks you when touched" -msgstr "" +msgstr "schockt dich sehr schwach beim Berühren" #: artifact.cpp msgid "warm" -msgstr "" +msgstr "warm" #: artifact.cpp msgid "whispering" -msgstr "" +msgstr "flüsternd" #: artifact.cpp msgid "winding, flexible rod" @@ -1545,30 +1565,37 @@ msgid "" "*avy fle*fi*arrow multible * are allowed\n" "heAVY*woOD*arrOW case insesitive search\n" msgstr "" +"»*« wird als Wildcard benutzt. Einige Beispiele:\n" +"\n" +"»Holzpfeil« passt exakt auf einen Itemnamen.\n" +"»Holzpf*« passt auf Items, die mit »Holzpf« beginnen.\n" +"»*eile« passt auf Items, die mit »eile« aufhören.\n" +"»*ere*eile«: mehrere Wildcards sind erlaubt.\n" +"»ScHweRer*HolZ*PfeiL«: Groß-/Kleinschreibung egal.\n" #: auto_pickup.cpp msgid "<+-> Move up/down" -msgstr "" +msgstr "<+-> Hoch/runter verschieben" #: auto_pickup.cpp msgid "dd" -msgstr "" +msgstr "inzufügen" #: auto_pickup.cpp msgid "opy" -msgstr "" +msgstr "opieren" #: auto_pickup.cpp msgid "isable" -msgstr "" +msgstr "eaktivieren" #: auto_pickup.cpp msgid "nable" -msgstr "" +msgstr "ktivieren" #: auto_pickup.cpp msgid "-Edit" -msgstr "" +msgstr "-Bearbeiten" #: auto_pickup.cpp msgid "E" @@ -1576,27 +1603,27 @@ msgstr "" #: auto_pickup.cpp msgid "I" -msgstr "" +msgstr "I" #: auto_pickup.cpp msgid "ove" -msgstr "" +msgstr "erschieben" #: auto_pickup.cpp msgid "emove" -msgstr "" +msgstr "ntfernen" #: auto_pickup.cpp msgid "est" -msgstr "" +msgstr "esten" #: auto_pickup.cpp msgid "-Switch Page" -msgstr "" +msgstr "-Umblättern" #: auto_pickup.cpp msgid "" -msgstr "" +msgstr "" #: auto_pickup.cpp msgid "I/E" @@ -1604,15 +1631,15 @@ msgstr "" #: auto_pickup.cpp msgid "Pickup Rule:" -msgstr "" +msgstr "Aufhebe-Regel:" #: auto_pickup.cpp msgid "Please load a character first to use this page!" -msgstr "" +msgstr "Bitte lad zurerst eine Person, bevor du diese Seite benutzt!" #: auto_pickup.cpp msgid "Rules" -msgstr "" +msgstr "Regeln" #: auto_pickup.cpp help.cpp options.cpp msgid "Save changes?" @@ -1620,7 +1647,7 @@ msgstr "Änderungen speichern?" #: auto_pickup.cpp msgid "Under construction!" -msgstr "" +msgstr "Baustelle!" #: auto_pickup.cpp msgid "Won't display damaged, fits and can/bottle items" @@ -1628,66 +1655,66 @@ msgstr "" #: auto_pickup.cpp msgid "[]" -msgstr "" +msgstr "[]" #: auto_pickup.cpp msgid "[]" -msgstr "" +msgstr "[]" #: bionics.cpp #, c-format msgid "%s - %d PU / %d trns" -msgstr "" +msgstr "%s – %d EE/%d Züge" #: bionics.cpp #, c-format msgid "%s - ON" -msgstr "" +msgstr "%s – EIN" #: bionics.cpp #, c-format msgid "%s powered off." -msgstr "" +msgstr "%s abgeschaltet." #: bionics.cpp msgid "Activate your bio lockpick where?" -msgstr "" +msgstr "Wo soll dein Bio-Dietrich aktiviert werden?" #: bionics.cpp msgid "Activating. Press '!' to examine your implants." -msgstr "" +msgstr "Aktivierungsmods. Drück »!«, um deine Implantate zu begutachten." #: bionics.cpp msgid "Active:" -msgstr "" +msgstr "Aktiv:" #: bionics.cpp msgid "Adrenaline Spike" -msgstr "" +msgstr "Adrenalin-Spitze" #: bionics.cpp msgid "Alcohol" -msgstr "" +msgstr "Alkohol" #: bionics.cpp msgid "All of your existing bionics are lost!" -msgstr "" +msgstr "All deine existierenden Bioniken sind verloren!" #: bionics.cpp msgid "Antihistamines" -msgstr "" +msgstr "Antihistaminika" #: bionics.cpp msgid "Artificial night generator active!" -msgstr "" +msgstr "Kunstlichtgenerator aktiv!" #: bionics.cpp msgid "BIONICS -" -msgstr "" +msgstr "BIONIK -" #: bionics.cpp msgid "Create an EMP where?" -msgstr "" +msgstr "Wo soll ein EMP erzeugt werden?" #: bionics.cpp msgid "Drink directly from the condensor?" @@ -1695,21 +1722,21 @@ msgstr "" #: bionics.cpp iexamine.cpp msgid "Drink from your hands?" -msgstr "" +msgstr "Aus deinen Händen trinkeln?" #: bionics.cpp msgid "Examining. Press '!' to activate your implants." -msgstr "" +msgstr "Begutachtung. Drücke »!«, um deine Implantate zu aktivieren." #: bionics.cpp #, c-format msgid "Extract water from the %s" -msgstr "" +msgstr "Wasser aus %s gewinnen." #: bionics.cpp #, c-format msgid "Failed to install bionic: %s." -msgstr "" +msgstr "Bionik-Installation fehlgeschlagen: %s." #: bionics.cpp msgid "Fungal Parasite" @@ -1722,7 +1749,7 @@ msgstr "" #: bionics.cpp #, c-format msgid "Increased storage capacity by %i" -msgstr "" +msgstr "Lagerkapazität um %i erhöht." #: bionics.cpp msgid "Insect Parasite" @@ -1731,12 +1758,12 @@ msgstr "" #: bionics.cpp #, c-format msgid "Installed bad bionic: %s." -msgstr "" +msgstr "Schlechtes Bionik installiert: %s." #: bionics.cpp #, c-format msgid "Installed bionic: %s." -msgstr "" +msgstr "Bionik installiert: %s." #: bionics.cpp msgid "Intoxicant: Other" @@ -1744,7 +1771,7 @@ msgstr "" #: bionics.cpp msgid "Iodine" -msgstr "" +msgstr "Jod" #: bionics.cpp msgid "Irradiated" @@ -1752,20 +1779,20 @@ msgstr "" #: bionics.cpp msgid "It really hurts!" -msgstr "" +msgstr "Es tut wirklich weh!" #: bionics.cpp #, c-format msgid "Lost %d units of power capacity." -msgstr "" +msgstr "%d Einheiten Energiekapazität sind verloren." #: bionics.cpp msgid "Magic Mushroom" -msgstr "" +msgstr "Zauberpilz" #: bionics.cpp msgid "Methamphetamines" -msgstr "" +msgstr "Methamphetamine" #: bionics.cpp msgid "Minor Painkiller" @@ -1777,15 +1804,15 @@ msgstr "" #: bionics.cpp msgid "Nicotine" -msgstr "" +msgstr "Nikotin" #: bionics.cpp msgid "No effects." -msgstr "" +msgstr "Keine Wirkung." #: bionics.cpp msgid "Passive:" -msgstr "" +msgstr "Passiv:" #: bionics.cpp msgid "Poison" @@ -1806,16 +1833,16 @@ msgstr "" #: bionics.cpp msgid "Some of your existing bionics are lost!" -msgstr "" +msgstr "Einige deiner existierenden Bioniken sind verloren!" #: bionics.cpp msgid "Start a fire where?" -msgstr "" +msgstr "Wo soll ein Feuer entfacht werden?" #: bionics.cpp #, c-format msgid "Successfully installed %s." -msgstr "" +msgstr "%s erfolgreich installiert." #: bionics.cpp msgid "THC Intoxication" @@ -1823,23 +1850,23 @@ msgstr "" #: bionics.cpp msgid "The installation fails without incident." -msgstr "" +msgstr "Die Installation schlägt ohne Schaden fehl." #: bionics.cpp msgid "The installation fails." -msgstr "" +msgstr "Die Installation schlägt fehl." #: bionics.cpp msgid "The installation is a failure." -msgstr "" +msgstr "Die Installation schlägt fehl." #: bionics.cpp msgid "The installation is faulty!" -msgstr "" +msgstr "Die Installation ist fehlerhaft!" #: bionics.cpp msgid "VRRRRMP!" -msgstr "" +msgstr "*WRUMM*" #: bionics.cpp #, c-format @@ -1847,6 +1874,8 @@ msgid "" "WARNING: %i percent chance of genetic damage, blood loss, or damage to " "existing bionics! Install anyway?" msgstr "" +"WARNUNG: %i Prozent Wahrscheinlichkeit, genetischen Schaden, Blutverlust " +"oder Schaden an existierenen Bioniken anzurichten. Trotzdem installieren?" #: bionics.cpp lang/json/json_items.py msgid "Xanax" @@ -1861,15 +1890,17 @@ msgstr "" msgid "" "You can not activate %s! To read a description of %s, press '!', then '%c'." msgstr "" +"Du kannst %s nicht aktivieren! Um die Beschreibung von %s zu lesen, drücke " +"»!«, dann »%c«." #: bionics.cpp msgid "You can't light a fire there." -msgstr "" +msgstr "Hier kannst du kein Feuer entfachen." #: bionics.cpp #, c-format msgid "You can't unlock that %s." -msgstr "" +msgstr "%s: Du kannst dies nicht entsperren." #: bionics.cpp #, c-format @@ -1878,61 +1909,62 @@ msgstr "" #: bionics.cpp msgid "You do damage to your genetics, causing mutation!" -msgstr "" +msgstr "Du beschädigst deine Gene, was zur Mutation führt." #: bionics.cpp msgid "You flub the installation." -msgstr "" +msgstr "Du vermasselst die Installation." #: bionics.cpp msgid "You have already installed this bionic." -msgstr "" +msgstr "Du hast dieses Bionik bereits installiert." #: bionics.cpp msgid "You lose power capacity!" -msgstr "" +msgstr "Du verlierst Energiekapazität!" #: bionics.cpp msgid "You mess up the installation." -msgstr "" +msgstr "Du vergeigst die Installation." #: bionics.cpp msgid "You screw up the installation." -msgstr "" +msgstr "Du verpfuschst die Installation." #: bionics.cpp msgid "You unleash a powerful shockwave!" -msgstr "" +msgstr "Du entfesselst eine starke Druckwelle!" #: bionics.cpp msgid "You unlock the door." -msgstr "" +msgstr "Du entsperrst die Tür." #: bionics.cpp msgid "You withdraw your claws." -msgstr "" +msgstr "Du ziehst deine Krallen ein." #: bionics.cpp #, c-format msgid "Your %s powers down." -msgstr "" +msgstr "Dein %s schaltet sich ab." #: bionics.cpp msgid "Your body is damaged!" -msgstr "" +msgstr "Dein Körper nimmt Schaden!" #: bionics.cpp msgid "Your claws extend!" -msgstr "" +msgstr "Deine Krallen fahren aus!" #: bionics.cpp #, c-format msgid "Your claws extend, forcing you to drop your %s." -msgstr "" +msgstr "Deine Krallen fahren aus, dich zwingend, %s fallen zu lassen." #: bionics.cpp msgid "Your muscles hiss as hydraulic strength fills them!" msgstr "" +"Deine Muskeln zischen, weil sie von hydraulischer Kraft gefüllt werden!" #: bionics.cpp msgid "Your muscles tear with the strain." @@ -1940,119 +1972,119 @@ msgstr "" #: bionics.cpp msgid "Your speed suddenly increases!" -msgstr "" +msgstr "Deine Geschwindigkeit erhöht sich plötzlich!" #: bodypart.cpp msgid "Dodging and melee is hampered." -msgstr "" +msgstr "Das Ausweichen und der Nahkampf sind behindert." #: bodypart.cpp msgid "It's inflammed." -msgstr "" +msgstr "Es ist entzündet." #: bodypart.cpp msgid "Manual tasks are slowed." -msgstr "" +msgstr "Handarbeiten sind verlangsamt." #: bodypart.cpp msgid "Melee and ranged combat is hampered." -msgstr "" +msgstr "Nah- und Fernkampf sind behindert." #: bodypart.cpp msgid "Ranged combat is hampered." -msgstr "" +msgstr "Der Fernkampf wird behindert." #: bodypart.cpp msgid "Running and swimming are slowed." -msgstr "" +msgstr "Laufen und Schwimmen sind verlangsamt." #: bodypart.cpp msgid "Running is slowed." -msgstr "" +msgstr "Das Rennen ist verlangsamt." #: bodypart.cpp msgid "appendix" -msgstr "" +msgstr "Blinddarm" #: bodypart.cpp msgid "arms" -msgstr "" +msgstr "Arme" #: bodypart.cpp msgid "eyes" -msgstr "" +msgstr "Augen" #: bodypart.cpp msgid "feet" -msgstr "" +msgstr "Füße" #: bodypart.cpp msgid "hands" -msgstr "" +msgstr "Hände" #: bodypart.cpp msgid "head" -msgstr "" +msgstr "Kopf" #: bodypart.cpp msgid "left arm" -msgstr "" +msgstr "linker Arm" #: bodypart.cpp msgid "left foot" -msgstr "" +msgstr "linker Fuß" #: bodypart.cpp msgid "left hand" -msgstr "" +msgstr "linke Hand" #: bodypart.cpp msgid "left leg" -msgstr "" +msgstr "linkes Bein" #: bodypart.cpp msgid "legs" -msgstr "" +msgstr "Beine" #: bodypart.cpp msgid "mouth" -msgstr "" +msgstr "Mund" #: bodypart.cpp msgid "right arm" -msgstr "" +msgstr "rechter Arm" #: bodypart.cpp msgid "right foot" -msgstr "" +msgstr "rechter Fuß" #: bodypart.cpp msgid "right hand" -msgstr "" +msgstr "rechte Hand" #: bodypart.cpp msgid "right leg" -msgstr "" +msgstr "rechtes Bein" #: bodypart.cpp msgid "torso" -msgstr "" +msgstr "Torso" #. ~ hour:minute (24hr time display) #: calendar.cpp #, c-format msgid "%02d:%02d" -msgstr "" +msgstr "%02d:%02d" #: calendar.cpp #, c-format msgid "%d AM" -msgstr "" +msgstr "%d a. m." #: calendar.cpp #, c-format msgid "%d PM" -msgstr "" +msgstr "%d p. m." #: calendar.cpp #, c-format @@ -2099,40 +2131,40 @@ msgstr[1] "%d Jahre" #: calendar.cpp #, c-format msgid "%d:%02d AM" -msgstr "" +msgstr "%d:%02d a. m." #: calendar.cpp #, c-format msgid "%d:%02d PM" -msgstr "" +msgstr "%d:%02d p. m." #: calendar.cpp msgid "Friday" -msgstr "" +msgstr "Freitag" #: calendar.cpp msgid "Monday" -msgstr "" +msgstr "Montag" #: calendar.cpp msgid "Saturday" -msgstr "" +msgstr "Samstag" #: calendar.cpp msgid "Sunday" -msgstr "" +msgstr "Sonntag" #: calendar.cpp msgid "Thursday" -msgstr "" +msgstr "Donnerstag" #: calendar.cpp msgid "Tuesday" -msgstr "" +msgstr "Dienstag" #: calendar.cpp msgid "Wendsday" -msgstr "" +msgstr "Mittwoch" #: computer.cpp msgid "" @@ -2172,6 +2204,16 @@ msgid "" " medical evaluation and security debriefing.\n" " " msgstr "" +"\n" +" Betr.: Sicherheits-Eremahnung\n" +" An: Sämtliches SRCF-Personal\n" +" Von: Constantine Dvorak, Untersekretär der Nuklearsicherheitsbehörde\n" +" \n" +" Alle komprommitierten Einrichtungen werden bis auf Weiteres unter\n" +" Verschluss bleiben. Jeder, der mit den Kreaturen gesehen wurde oder mit\n" +" ihnen in direktem Kontakt gekommen ist, hat dies an die Zentrale für eine\n" +" medizinische Auswertung und Sicherheits-Nachbesprechung zu melden.\n" +" " #: computer.cpp msgid "" @@ -2205,6 +2247,19 @@ msgid "" " at once.\n" " " msgstr "" +"\n" +" Betr.: Sicherheits-Eremahnung\n" +" An: Sämtliches SRCF-Personal\n" +" Von: Constantine Dvorak, Untersekretär der Nuklearsicherheitsbehörde\n" +" \n" +" Von heute an sind medizinische Abfälle nicht mehr in der Nähe " +"radioaktiver\n" +" Materialien zu lagern. Alle Behältnisse haben umorganisiert gemäß\n" +" diesen neuen Verordnungen zu sein. Falls Ihre Einrichtung momentan in der\n" +" Nähe gelagert haben sollte, haben Sie ständig mit bewaffneten Wachen im\n" +" Dienst zusammenzuarbeiten. Berichten Sie umgehend alle ungewöhnliche\n" +" Aktivitäten an ihren SRCF-Administrator!\n" +" " #: computer.cpp msgid "" @@ -2219,6 +2274,17 @@ msgid "" " to your SRCF administrator at once.\n" " " msgstr "" +"\n" +" Betr.: Sicherheits-Eremahnung\n" +" An: Sämtliches SRCF-Personal\n" +" Von: Constantine Dvorak, Untersekretär der Nuklearsicherheitsbehörde\n" +" \n" +" Die Gesundheit und Sicherheit unserer Arbeiter hat bei uns höchste " +"Priorität!\n" +" Von daher werden wir wöchtliche Gesundheitsuntersuchungen an allen\n" +" SRCF-Angestellten vornehmen. Berichten Sie umgehend ungewöhnliche\n" +" Symptome oder physische Veränderungen an Ihrem SRCF-Administrator.\n" +" " #: computer.cpp msgid "" @@ -2228,6 +2294,12 @@ msgid "" "SYSTEM ADMINISTRATOR TO RESOLVE THIS ISSUE.\n" " \n" msgstr "" +"\n" +"FEHLER: NETZWERKVERBINDUNG GETRENNT \n" +"ES IST NICHT MÖGLICH, EINEN NETZWERK-ROUTER ODER -PROXY ZU ERREICHEN\n" +"BITTE KONTAKTIEREN SIE IHREN SYSTEMADMINISTRATOR, UM DIESES PROBLEM\n" +"ZU LÖSEN.\n" +" \n" #: computer.cpp msgid "" @@ -2250,6 +2322,11 @@ msgid "" "Operational: Overrided\n" "\n" msgstr "" +"\n" +"Strom: Nur Notstrom\n" +"Strahlungswerte: Sehr gefährlich\n" +"Betriebsfähigkeit: Überschrieben\n" +"\n" #: computer.cpp msgid "" @@ -2261,6 +2338,13 @@ msgid "" " \n" " \n" msgstr "" +" WARNUNG, FUNKTURM IST UNEMPFÄNGLICH. \n" +" \n" +" NOTSTROM UNZUREICHEND, UM RUNDFUNK-ANFORDERUNGEN ZU ERFÜLLEN. \n" +" IM NOTFALL KONTAKTIEREN SIE LOKALE NATIONALGARDE-EINHEITEN, UM\n" +" BEVORZUGT ZU WERDEN, WENN GENERATOREN VERTEILT WERDEN. \n" +" \n" +" \n" #: computer.cpp msgid "" @@ -2310,6 +2394,33 @@ msgid "" " means to keep EPA agents from visiting the SRCFs, using military\n" " secrecy, emergency powers, and inter-departmental gag orders to\n" msgstr "" +" Betr.: SRCF: Internes Memo, Umweltschutzbehörde [2918024]\n" +" An: Sämtliches SRCF-Administrations-Personal\n" +" Von: Constantine Dvorak, Untersekretär der Nuklearsicherheitsbehörde\n" +" \n" +" Direktor Grimes hat eine neue Serie von Anschuldungen, welche bald von " +"einem\n" +" Kongressausschuss untersucht wird, veröffentlicht. Anbei ist die " +"Nachricht, die\n" +" er mir schickte.\n" +" \n" +" --------------------------------------------------------------\n" +" Betr.: Untersuchungen des Kongresses\n" +" An: Constantine Dvorak, Untersekretär der Nuklearsicherheitsbehörde\n" +" Von: Robert Shane, Direktor der Umweltschutzbehörde\n" +" \n" +" Die Umweltschutzbehörde hat das Security-Restricted-Containment-" +"Facility-(SRCF)-\n" +" Projekt von Anfang an abgelehnt. Wir waren entsetzt darüber, dass diese\n" +" Einrichtungen so nahe an bewohnten Gegenden gebaut würden und stimmten\n" +" nur unter der Bedingung zu, dass es uns erlaubt sei, die Sarkophagen frei " +"zu\n" +" untersuchen und überwachen. Aber dies ist nicht geschehen. Seit dem hat\n" +" das Energieministerium alle Hebel in Bewegung gesetzt, um Mitarbeiter der\n" +" Umweltschutzbehörde davon abzuhalten, die SRCFs zu besuchen, indem sie\n" +" militärische Verschwiegenheit, Notfallrechte, und abteilungsübergreifende\n" +" Maulkorberlasse benutzt, um das Projekt mit in Bürokratie ersticken zu " +"lassen.\n" #: computer.cpp msgid "" @@ -2353,23 +2464,46 @@ msgid "" " Robert Shane\n" " \n" msgstr "" +" Obwohl unsere Vertreter nicht hereingelassen wurde, haben unsere " +"Atmosphere-\n" +" Prüfer in naheliegenden Gemienden hohe Toxin- und Strahlungswerte " +"gemessen.\n" +" Und wir haben Dutzende potentiell gefährlicher unidentifizierter " +"Komponenten im\n" +" Grundwasser gefunden. Wir haben jetzt überzeugendes Beweismaterial, dass " +"die\n" +" SRCFs eine Gefahr für die allgemeine Sicherheit sind. Wir überreichen " +"diese Daten\n" +" an Abgeordnete und werden eine volle Kongressuntersuchung ersuchen. Sie " +"sollten\n" +" in der Lage sein, die Öffnung Ihrer geheimen Kammern zu erzwingen und die " +"Welt\n" +" wird sehen, was Sie zu verbergen haben.\n" +"\n" +" Falls Sie in diesem Ausbruch ihre Finger im Spiel hatten, hoffe ich, dass " +"Sie in der Hölle\n" +" schmoren.\n" +"\n" +" Direktor der EPA,\n" +" Robert Shane\n" +" \n" #: computer.cpp #, c-format msgid "%d OTHERS FOUND..." -msgstr "" +msgstr "%d ANDERE GEFUNDEN …" #: computer.cpp msgid "AMIGARA PROJECT" -msgstr "" +msgstr "AMIGARA-PROJEKT" #: computer.cpp msgid "Access code required!" -msgstr "" +msgstr "Zugriffscode benötigt!" #: computer.cpp game.cpp iuse.cpp map.cpp msgid "An alarm sounds!" -msgstr "" +msgstr "Ein Alarm ertönt!" #: computer.cpp msgid "Bionic access - Manifest:" @@ -2378,11 +2512,11 @@ msgstr "" #. ~ the sound of a church bell ringing #: computer.cpp msgid "Bohm... Bohm... Bohm..." -msgstr "" +msgstr "*gong* *gong* *gong* …" #: computer.cpp msgid "Bypass security?" -msgstr "" +msgstr "Sicherheitsystem umgehen?" #: computer.cpp msgid "Caused a resonance cascade." @@ -2390,11 +2524,11 @@ msgstr "" #: computer.cpp msgid "Computer couldn't find its mission!" -msgstr "" +msgstr "Computer konnte seine Mission nicht finden!" #: computer.cpp msgid "Confirm nuclear missile launch." -msgstr "" +msgstr "Bestätige Atomraketenstart." #: computer.cpp msgid "Containment shields opened. Press any key..." @@ -2402,7 +2536,7 @@ msgstr "" #: computer.cpp msgid "Continue reading?" -msgstr "" +msgstr "Weiterlesen?" #: computer.cpp msgid "" @@ -2410,22 +2544,25 @@ msgid "" " Robert Shane\n" " \n" msgstr "" +"Direktor der EPA,\n" +" Robert Shane\n" +" \n" #: computer.cpp msgid "Disarm missile." -msgstr "" +msgstr "Rakete entschärfen." #: computer.cpp msgid "Disarmed a nuclear missile." -msgstr "" +msgstr "Atomrakete entschärft." #: computer.cpp msgid "Doors opened. Press any key..." -msgstr "" +msgstr "Türen geöffnet. Drücke irgendeine Taste …" #: computer.cpp msgid "Download data?" -msgstr "" +msgstr "Daten herunterladen?" #: computer.cpp msgid "" @@ -2464,6 +2601,20 @@ msgid "" "made\n" "for such narrow tunnels, so it's hard to say exactly how far back they go.\n" msgstr "" +"49. EINTRAG:\n" +"Wir haben unsre Abbau-Operationen in diesem Gebiet angehalten;\n" +"offensichtlich, bis Archäologen die Gelegenheit haben, dieses Gebiet zu\n" +"untersuchen. Das wird unseren Zeitplan um mindestens eine Woche\n" +"zurückwerfen. Dieses dumme Artefakterhaltungs-Gesetz war für 50 Jahre\n" +"in Kraft und wurde noch nicht mal zur Kündigung vorgeschlagen, obwohl\n" +"diese Abbau-Operationen das Rückgrat unserer Wirtschaft sind.\n" +"\n" +"52. EINTRAG:\n" +"Warten noch immer auf die Archäologen. Wir haben eine kleine Besichtigung\n" +"der Bruchlinie vorgenommen. Unser Sondierungsequipment reicht nicht aus,\n" +"um die Tiefe der Wölbungen zu messen. Das Equipment ist für eine Tiefe\n" +"von 15 Meilen ausgelegt, aber nicht für solche engen Tunnel, daher ist es\n" +"schwierig, zu sagen, wie weit weg sie verlaufen.\n" #: computer.cpp msgid "" @@ -2483,22 +2634,40 @@ msgid "" "They're bringing in ANOTHER CREW? Christ, it's just some cave carvings! I\n" "know that's sort of a big deal, but come on, these guys can't handle it?\n" msgstr "" +"54. EINTRAG:\n" +"Ich bemerkte ein paar Typen, welche ein Stück der dünnen Wand\n" +"abbrachen, unten in der Kammer mit einem Meißel. Ich schaue\n" +"weg. Es ist nicht so, dass diese Intelligenzler merken werden, dass\n" +"ein kleines Stück fehlt. Scheiß auf sie!\n" +"\n" +"55. EINTRAG:\n" +"Nun, die Archäologen sind jetzt hier unten mit ein paar der Jungen\n" +"als Führer. Sie sind nicht wirklich Indiana-Jones-Typen. Ich zweifle\n" +"daran, dass sie jemals unter 20 Fuß waren. Ich hasse es, Jungens\n" +"von den Zuteilungen zu nehmen, nur um die Wissenschaftler zu\n" +"babysitten, aber, wenn sie verletzt werden, dann werden wir\n" +"heruntergefahren für weiß Gott was wie lange.\n" +"\n" +"58. EINTRAG:\n" +"Sie holen NOCH EINE Crew hier rein? Herrgot, es sind nur ein paar\n" +"Hohlenschnitzereien! Ich weiß, das ist schon eine große Sache, aber\n" +"jetzt mal im ernst: Diese Jungens schaffen es nicht?\n" #: computer.cpp msgid "ERROR! Access denied!" -msgstr "" +msgstr "FEHLER! Zugriff verweigert!" #: computer.cpp msgid "ERROR: ACCESSING DATA MALFUNCTION" -msgstr "" +msgstr "FEHLER: DATENZUGRIFFS-FEHLER" #: computer.cpp msgid "ERROR: Blood sample destroyed." -msgstr "" +msgstr "FEHLER: Blutprobe zerstört." #: computer.cpp msgid "ERROR: Data bank destroyed." -msgstr "" +msgstr "FEHLER: Speicherbank zerstört." #: computer.cpp msgid "ERROR: Disruptive Spin" @@ -2506,51 +2675,52 @@ msgstr "" #: computer.cpp msgid "ERROR: Memory bank destroyed or not present." -msgstr "" +msgstr "FEHLER: Speicherbank zerstört oder nicht vorhanden." #: computer.cpp msgid "ERROR: Memory bank is empty." -msgstr "" +msgstr "FEHLER: Speicherbank ist leer." #: computer.cpp msgid "ERROR: Please only scan one item at a time." -msgstr "" +msgstr "FEHLER: Bitte scannen Sie nur ein Item auf einmal." #: computer.cpp msgid "ERROR: Please only use blood samples." -msgstr "" +msgstr "FEHLER: Bitte benutzen Sie nur Blutproben." #: computer.cpp msgid "ERROR: Please place memory bank in scan area." -msgstr "" +msgstr "FEHLER: Bitte platzieren Sie eine Speicherbank in den Scan-Bereich." #: computer.cpp msgid "ERROR: Please place sample in centrifuge." -msgstr "" +msgstr "FEHLER: Bitte platzieren Sie eine Probe in die Zentrifuge." #: computer.cpp msgid "ERROR: Please remove all but one sample from centrifuge." msgstr "" +"FEHLER: Bitte entfernen Sie alle bis auf eine Probe aus der Zentrifuge." #: computer.cpp msgid "ERROR: Please use vacutainer-contained samples." -msgstr "" +msgstr "FEHLER: Bitte benutzen Sie Proben in Vacutainern." #: computer.cpp msgid "ERROR: Vacutainer empty." -msgstr "" +msgstr "FEHLER: Vacutainer leer." #: computer.cpp msgid "Elevator activated. Press any key..." -msgstr "" +msgstr "Aufzug aktiviert. Drücke irgendeine Taste …" #: computer.cpp msgid "Evacuate Immediately!" -msgstr "" +msgstr "Sofort evakuieren!" #: computer.cpp msgid "FILE CORRUPTED, PRESS ANY KEY..." -msgstr "" +msgstr "DATEI BESCHÄDIGT, IRGENDEINE TASTE DRÜCKEN …" #: computer.cpp msgid "" @@ -2566,58 +2736,76 @@ msgid "" "\n" " \n" msgstr "" +"HALLO, MITBÜRGER. EIN BIOLOGISCHER ANGRIFF HAT STATTGEFUNDEN UND \n" +"ES WURDE DER AUSNAHMEZUSTAND ERKLÄRT. NOTPERSONAL WIRD IHNEN \n" +"IN KÜRZESTER ZEIT BEHILFLICH SEIN. UM IHRE SICHERHEIT ZU GEWÄHR- \n" +"LEISTEN, BEFOLGEN SIE BITTE FOLGENDE SCHRITTE: \n" +"\n" +"1. KEINE PANIK! \n" +"2. BLEIBEN SIE IM GEBÄUDE. \n" +"3. SUCHEN SIE SCHUTZ IM KELLER. \n" +"4. BENUTZEN SIE DIE ZUR VERFÜGUNG GESTELLTEN GASMASKEN. \n" +"5. WARTEN SIE AUF WEITERE ANWEISUNGEN \n" +"\n" +" \n" #: computer.cpp msgid "Hack into system?" -msgstr "" +msgstr "Reinhacken?" #: computer.cpp #, c-format msgid "Launched a nuke at a %s." -msgstr "" +msgstr "Eine Nuklerwaffe auf ein %s abgeschossen." #: computer.cpp msgid "Lock disabled. Press any key..." -msgstr "" +msgstr "Entsperrt. Drücke irgendeine Taste." #: computer.cpp msgid "Lock enabled. Press any key..." -msgstr "" +msgstr "Abgeschlossen. Drücke irgendeine Taste …" #: computer.cpp #, c-format msgid "Logging into %s..." -msgstr "" +msgstr "Einloggen in %s …" #: computer.cpp msgid "Login successful. Press any key..." -msgstr "" +msgstr "Einloggen erfolgreich. Drück irgendeine Taste …" #: computer.cpp msgid "Manhacks drop from compartments in the ceiling." -msgstr "" +msgstr "Klingendrohnen fallen aus Einsätzen in der Decke." #: computer.cpp msgid "Maximum login attempts exceeded. Press any key..." -msgstr "" +msgstr "Einlog-Versuchs-Limit überschritten. Drücke irgendeine Taste …" #: computer.cpp msgid "" "Memory Bank: Military Hexron Encryption\n" "Printing Transcript\n" msgstr "" +"Speicherbank: Militärische Hexron-Verschlüsselung\n" +"Transskript wird ausgedruckt\n" #: computer.cpp msgid "" "Memory Bank: Unencrypted\n" "Nothing of interest." msgstr "" +"Speicherbank: Nicht verschlüsselt\n" +"Nichts von Interesse." #: computer.cpp msgid "" "Memory Bank: Unencrypted\n" "Nothing of interest.\n" msgstr "" +"Speicherbank: Nicht verschlüsselt\n" +"Nichts von Interesse.\n" #: computer.cpp #, c-format @@ -2626,35 +2814,35 @@ msgstr "" #: computer.cpp msgid "No data found." -msgstr "" +msgstr "Keine Daten gefunden." #: computer.cpp msgid "Nuclear missile disarmed!" -msgstr "" +msgstr "Atomrakete entschärft." #: computer.cpp msgid "Nuclear missile launch aborted." -msgstr "" +msgstr "Atomraketenstart abgebrochen." #: computer.cpp msgid "Nuclear missile launched!" -msgstr "" +msgstr "Atomrakete abgeschossen!" #: computer.cpp msgid "Nuclear missile remains active." -msgstr "" +msgstr "Atomrakete bleibt aktiv." #: computer.cpp msgid "Opened a portal." -msgstr "" +msgstr "Ein Portal wurde geöffnet." #: computer.cpp msgid "PROCESSING DATA" -msgstr "" +msgstr "DATEN WERDEN VERARBEITET" #: computer.cpp msgid "Password required." -msgstr "" +msgstr "Passwort erforderlich." #: computer.cpp msgid "Pathogen bonded to erythrocytes and leukocytes." @@ -2662,15 +2850,15 @@ msgstr "" #: computer.cpp help.cpp msgid "Press any key to continue..." -msgstr "" +msgstr "Bitte drücken Sie eine Taste ..." #: computer.cpp msgid "Press any key..." -msgstr "" +msgstr "Drücke irgendeine Taste …" #: computer.cpp msgid "Quit and shut down" -msgstr "" +msgstr "Beenden und herunterfahren." #: computer.cpp msgid "Released subspace specimens." @@ -2678,19 +2866,19 @@ msgstr "" #: computer.cpp msgid "Result: Human blood, no pathogens found." -msgstr "" +msgstr "Ergebnis: Menschliches Blut, keine Krankheitserreger gefunden." #: computer.cpp msgid "Result: Human blood. Unknown pathogen found." -msgstr "" +msgstr "Ergebnis: Menschliches Blut, unbekannte Krankheitserreger gefunden." #: computer.cpp msgid "Result: Unknown blood type. Test nonconclusive." -msgstr "" +msgstr "Ergebnis: Unbekannte Blutgruppe. Test ergebnislos." #: computer.cpp msgid "Root Menu" -msgstr "" +msgstr "Hauptmenü" #: computer.cpp #, c-format @@ -2698,46 +2886,48 @@ msgid "" "SITE %d%d%d%d%d\n" "PERTINANT FOREMAN LOGS WILL BE PREPENDED TO NOTES" msgstr "" +"AUSGRABUNGSSTÄTTE %d%d%d%d%d\n" +"SACHDIENLICHE VORARBEITER-PROTOKOLLE WERDEN NOTIZEN VORANGESTELLT" #: computer.cpp msgid "Sealed a Hazardous Material Sarcophagus." -msgstr "" +msgstr "Einen Gefahrenstoff-Sarkophag versiegelt." #: computer.cpp msgid "Secubots emerge from compartments in the floor." -msgstr "" +msgstr "Sicherboter tauchen aus Einsätzen im Boden auf." #: computer.cpp game.cpp iuse.cpp msgid "Set off an alarm." -msgstr "" +msgstr "Einen Alarm ausgelöst." #: computer.cpp msgid "Sewage leaks!" -msgstr "" +msgstr "Abwasser läuft aus!" #: computer.cpp msgid "Sewage map data downloaded. Press any key..." -msgstr "" +msgstr "Abwasserkanal-Kartendaten heruntergeladen. Drücke irgendeine Taste …" #: computer.cpp msgid "Shutting down... press any key." -msgstr "" +msgstr "Heruntergefahren … Drücke irgendeine Taste." #: computer.cpp msgid "Software downloaded." -msgstr "" +msgstr "Software heruntergeladen." #: computer.cpp msgid "Subjects terminated. Press any key..." -msgstr "" +msgstr "Subjekte terminiert. Drücke irgendeine Taste …" #: computer.cpp msgid "Surface map data downloaded. Press any key..." -msgstr "" +msgstr "Landkartendaten heruntergeladen. Drücke irgendeine Taste." #: computer.cpp msgid "Target acquisition canceled" -msgstr "" +msgstr "Zielerfassung abgebrochen" #: computer.cpp msgid "Terminated subspace specimens." @@ -2745,21 +2935,23 @@ msgstr "" #: computer.cpp msgid "The console electrocutes you!" -msgstr "" +msgstr "Die Konsole schockt dich!" #: computer.cpp msgid "" "The machine injects your eyeball with the solution \n" "of pureed bone & LSD." msgstr "" +"Die Maschine injiziert püriertes Knochenmark und LSD\n" +"in deinen augapfel." #: computer.cpp msgid "The pump explodes!" -msgstr "" +msgstr "Die Pumpe explodiert!" #: computer.cpp msgid "USB drive required!" -msgstr "" +msgstr "USB-Stick benötigt!" #: computer.cpp msgid "WARNING: Resonance cascade carries severe risk! Continue?" @@ -2771,35 +2963,35 @@ msgstr " Konstruktion " #: construction.cpp msgid "Board Up Door" -msgstr "" +msgstr "Türe verrammeln" #: construction.cpp msgid "Board Up Window" -msgstr "" +msgstr "Fenster verrammeln" #: construction.cpp msgid "Build Bookcase" -msgstr "" +msgstr "Bücherregal bauen" #: construction.cpp msgid "Build Bulletin Board" -msgstr "" +msgstr "Pinnwand bauen" #: construction.cpp msgid "Build Counter" -msgstr "" +msgstr "Theke bauen" #: construction.cpp msgid "Build Door" -msgstr "" +msgstr "Türe bauen" #: construction.cpp msgid "Build Dresser" -msgstr "" +msgstr "Kommode bauen" #: construction.cpp msgid "Build Locker" -msgstr "" +msgstr "Schrank bauen" #: construction.cpp msgid "Build Log & Sod Roof" @@ -2807,51 +2999,51 @@ msgstr "" #: construction.cpp msgid "Build Log Wall" -msgstr "" +msgstr "Holzwand bauen" #: construction.cpp msgid "Build Makeshift Bed" -msgstr "" +msgstr "Notbett bauen" #: construction.cpp msgid "Build Metal Rack" -msgstr "" +msgstr "Metallgestell bauen" #: construction.cpp msgid "Build Palisade Gate" -msgstr "" +msgstr "Palisadentor bauen" #: construction.cpp msgid "Build Palisade Wall" -msgstr "" +msgstr "Palisade bauen" #: construction.cpp msgid "Build Roof" -msgstr "" +msgstr "Dach bauen" #: construction.cpp msgid "Build Rope & Pulley System" -msgstr "" +msgstr "Seil-und-Rolle-System bauen" #: construction.cpp msgid "Build Stone Fireplace" -msgstr "" +msgstr "Stein-Feuerstelle bauen" #: construction.cpp msgid "Build Wall" -msgstr "" +msgstr "Wand bauen" #: construction.cpp msgid "Build Window" -msgstr "" +msgstr "Fenster bauen" #: construction.cpp msgid "Build Wire Fence" -msgstr "" +msgstr "Drahtzaun bauen" #: construction.cpp msgid "Build Wire Gate" -msgstr "" +msgstr "Drahttor bauen" #: construction.cpp msgid "Build Wood Stove" @@ -2859,27 +3051,27 @@ msgstr "" #: construction.cpp lang/json/json_vehicles.py msgid "Car" -msgstr "" +msgstr "Auto" #: construction.cpp msgid "Chop Down Tree" -msgstr "" +msgstr "Baum fällen" #: construction.cpp msgid "Chop Tree trunk into logs" -msgstr "" +msgstr "Baumstamm zu Holzblöchen kleinhacken" #: construction.cpp msgid "Chop Tree trunk into planks" -msgstr "" +msgstr "Baumstamm zu Holzplanken kleinhacken" #: construction.cpp msgid "Clean Broken Window" -msgstr "" +msgstr "Zerbrochenes Fenster reinigen" #: construction.cpp msgid "Contruct where?" -msgstr "" +msgstr "Wohin bauen?" #: construction.cpp msgid "Deconstruct Furniture" @@ -2887,88 +3079,88 @@ msgstr "Entferne Möblierung" #: construction.cpp msgid "Difficulty:" -msgstr "" +msgstr "Schwierigkeitsgrad:" #: construction.cpp msgid "Dig Pit" -msgstr "" +msgstr "Grube graben" #: construction.cpp veh_interact.cpp msgid "Enter new vehicle name:" -msgstr "" +msgstr "Gib einen neuen Fahrzeugnamen ein:" #: construction.cpp msgid "Fence Posts" -msgstr "" +msgstr "Zaunpfosten" #: construction.cpp msgid "Fill Pit" -msgstr "" +msgstr "Grube zuschütten" #: construction.cpp msgid "Move Furniture" -msgstr "" +msgstr "Möbel schieben" #: construction.cpp msgid "OR" -msgstr "" +msgstr "ODER" #: construction.cpp msgid "Press a direction for the tree to fall in:" -msgstr "" +msgstr "Drücke eine Richtungstaste für die Fallrichtung des Baumes:" #: construction.cpp msgid "Realign Fence" -msgstr "" +msgstr "Zaum umbauen" #: construction.cpp msgid "Repair Door" -msgstr "" +msgstr "Türe reparieren" #: construction.cpp msgid "Spike Pit" -msgstr "" +msgstr "Stachelgrube" #: construction.cpp #, c-format msgid "Stage %1$d: %2$s" -msgstr "" +msgstr "%1$d. Schritt: %2$s" #: construction.cpp msgid "Start vehicle construction" -msgstr "" +msgstr "Fahrzeugbau beginnen" #: construction.cpp msgid "Tape up window" -msgstr "" +msgstr "Fenster mit Klebeband zukleben" #: construction.cpp #, c-format msgid "Time: %1d minutes" -msgstr "" +msgstr "Dauer: %1d Minuten" #: construction.cpp msgid "You can't build that!" -msgstr "" +msgstr "Das kannst du nicht bauen!" #: construction.cpp msgid "You cannot build there!" -msgstr "" +msgstr "Du kannst hier nicht bauen!" #: construction.cpp #, c-format msgid "You disassemble the %s." -msgstr "" +msgstr "Du demontierst: %s." #: construction.cpp #, c-format msgid "You have to push away %s first." -msgstr "" +msgstr "Das musst du zuerst wegschieben: %s." #: construction.cpp #, c-format msgid "You tape up the %s." -msgstr "" +msgstr "Zu klebst das %s zu." #: crafting.cpp veh_interact.cpp msgid " (nearby)" @@ -2985,191 +3177,191 @@ msgstr "" #: crafting.cpp msgid "AMMO" -msgstr "" +msgstr "MUNI" #: crafting.cpp msgid "ARMOR" -msgstr "" +msgstr "KLEIDUNG" #: crafting.cpp msgid "CHEMS" -msgstr "" +msgstr "CHEMIE" #: crafting.cpp msgid "Components required:" -msgstr "" +msgstr "Benötigte Komponenten:" #: crafting.cpp msgid "Craft something first" -msgstr "" +msgstr "Fertige zuerst etwas an." #: crafting.cpp msgid "DRINKS" -msgstr "" +msgstr "TRINKEN" #: crafting.cpp #, c-format msgid "Difficulty: %d" -msgstr "" +msgstr "Schwierigkeitsgrad: %d" #: crafting.cpp msgid "Disassemble item:" -msgstr "" +msgstr "Item demontieren:" #: crafting.cpp #, c-format msgid "Do you want to tear %s into pages?" -msgstr "" +msgstr "Willst du aus %s die Seiten herausreißen?" #: crafting.cpp msgid "ELECTRONICS" -msgstr "" +msgstr "ELEKTRONIK" #: crafting.cpp msgid "FOOD" -msgstr "" +msgstr "ESSEN" #: crafting.cpp msgid "MISC" -msgstr "" +msgstr "REST" #: crafting.cpp msgid "NONE" -msgstr "" +msgstr "KEINE" #: crafting.cpp game.cpp iexamine.cpp iuse.cpp npctalk.cpp msgid "Never mind." -msgstr "" +msgstr "Vergiss es." #: crafting.cpp msgid "OR " -msgstr "" +msgstr "ODER " #: crafting.cpp msgid "Press to attempt to craft object." -msgstr "" +msgstr "Drücke , um diese Anfertigung zu versuchen." #: crafting.cpp #, c-format msgid "Really disassemble your %s?" -msgstr "" +msgstr "Soll dein %s wirklich demontiert werden?" #: crafting.cpp #, c-format msgid "Required skills: %s" -msgstr "" +msgstr "Erforderliche Fertigkeiten: %s" #: crafting.cpp #, c-format msgid "Requires %d tools with %s of %d or more." -msgstr "" +msgstr "Erfordert %d Werkzeuge mit %s von %d oder mehr." #: crafting.cpp msgid "Search:" -msgstr "" +msgstr "Suchen:" #: crafting.cpp msgid "Searched" -msgstr "" +msgstr "Durchsucht" #: crafting.cpp #, c-format msgid "Skills used: %s" -msgstr "" +msgstr "Verwendete Fertigkeiten: %s" #: crafting.cpp #, c-format msgid "The %s is too heavy to carry, so you drop it." -msgstr "" +msgstr "%s ist zu schwer zum Tragen, also lässt du es fallen." #: crafting.cpp #, c-format msgid "There's no room in your inventory for the %s, so you drop it." -msgstr "" +msgstr "Es ist kein Inventarplatz für %s, daher lässt du es fallen." #: crafting.cpp msgid "This item cannot be disassembled!" -msgstr "" +msgstr "Dieses Item kann nicht demontiert werden!" #: crafting.cpp #, c-format msgid "Time to complete: %d minutes" -msgstr "" +msgstr "Dauer zur Fertigstellung: %d Minuten" #: crafting.cpp #, c-format msgid "Time to complete: %d turns" -msgstr "" +msgstr "Dauer zur Fertigstellung: %d Züge" #: crafting.cpp msgid "Tools required:" -msgstr "" +msgstr "Benötigte Werkzeuge:" #: crafting.cpp msgid "Use which component?" -msgstr "" +msgstr "Welche Komonente soll verwendet werden?" #: crafting.cpp msgid "Use which tool?" -msgstr "" +msgstr "Welches Werkzeug soll benutzt werden?" #: crafting.cpp msgid "WEAPONS" -msgstr "" +msgstr "WAFFEN" #: crafting.cpp msgid "With some more skill, you might learn a recipe from this." -msgstr "" +msgstr "Mit etwas mehr Erfahring könntest du ein Rezept davon lernen." #: crafting.cpp msgid "You can no longer make that craft!" -msgstr "" +msgstr "Du kannst nicht noch mehr davon anfertigen!" #: crafting.cpp msgid "You can't do that!" -msgstr "" +msgstr "Das kannst du nicht tun!" #: crafting.cpp #, c-format msgid "You cannot disassemble the %s into its components, too few items." -msgstr "" +msgstr "Du kannst %s nicht in die Einzelteile zerlegen, zu wenige Items." #: crafting.cpp #, c-format msgid "You disassemble the %s into its components." -msgstr "" +msgstr "Du demontierst %s in die Einzelzeile." #: crafting.cpp msgid "You don't have anything to store that liquid in!" -msgstr "" +msgstr "Du hast nichts, um diese Flüssigkeit darin aufzubewahren!" #: crafting.cpp game.cpp #, c-format msgid "You don't have item '%c'!" -msgstr "" +msgstr "Du hast das Item »%c« nicht!" #: crafting.cpp #, c-format msgid "You fail to make the %s, and waste some materials." -msgstr "" +msgstr "Du versagt, dabei, %s anzufertigen und vergeudest einige Materialien." #: crafting.cpp #, c-format msgid "You fail to make the %s, but don't waste any materials." -msgstr "" +msgstr "Du versagt, dabei, %s anzufertigen, aber vergeudest keine Materialien." #: crafting.cpp msgid "You fail to recover a component." -msgstr "" +msgstr "Du schaffst es nicht, eine Komponente wiederzuerhalten." #: crafting.cpp msgid "You learned a recipe from this disassembly!" -msgstr "" +msgstr "Du hast aus der Demontierung ein Rezept gelernt!" #: crafting.cpp #, c-format msgid "You need a %s to disassemble this." -msgstr "" +msgstr "Du benötigst einen %s, um dies zu demontieren." #: crafting.cpp #, c-format @@ -3178,96 +3370,98 @@ msgstr "" #: crafting.cpp msgid "You need a hacksaw to disassemble this." -msgstr "" +msgstr "Du brauchst eine Metallsäge, um dies zu demontieren." #: crafting.cpp msgid "" "You think you could learn a recipe from this item. Maybe you'll try again." msgstr "" +"Du glaubst, du könntest ein Rezept von diesem Item erlernen. Vielleicht " +"wirst du es erneut versuchen." #: crafting.cpp msgid "Your morale is too low to craft..." -msgstr "" +msgstr "Deine Moral ist zu niedrig für die Fertigung." #: crafting.cpp #, c-format msgid "Your skill level: %d" -msgstr "" +msgstr "Deine Fertigkeitenstufe: %d" #: crafting.cpp msgid "Your skill level: N/A" -msgstr "" +msgstr "Deine Fertigkeitenstufe: N/A" #: crafting.cpp msgid "[?/E]: Describe, [F]ind" -msgstr "" +msgstr "[?/E]: Beschreiben, [F]: Suchen" #: crafting.cpp msgid "[?/E]: Describe, [F]ind , [R]eset" -msgstr "" +msgstr "[?/E]: Beschreiben, [F]: Suchen, Zu[r]ücksetzen" #: defense.cpp #, c-format msgid "%s Attack!" -msgstr "" +msgstr "%s greifen an!" #: defense.cpp #, c-format msgid "%s Invasion!" -msgstr "" +msgstr "%s-Invasion!" #: defense.cpp #, c-format msgid "%s Party!" -msgstr "" +msgstr "%s-Party!" #: defense.cpp #, c-format msgid "%s from Hell!" -msgstr "" +msgstr "%s aus der Hölle!" #: defense.cpp msgid "A caravan approaches! Press spacebar..." -msgstr "" +msgstr "Eine Karavane trifft ein! Drücke die Leertaste …" #: defense.cpp msgid "A custom game." -msgstr "" +msgstr "Ein benutzerdefiniertes Spiel." #: defense.cpp msgid "A large building with various supplies." -msgstr "" +msgstr "Ein großes Gebäude mit diversen Vorräten." #: defense.cpp msgid "A large house with many rooms and." -msgstr "" +msgstr "Ein großes Gebäude mit vielen Räumen und." #: defense.cpp msgid "A small building with plenty of alcohol." -msgstr "" +msgstr "Ein kleines Gebäude mit viel Alkohol." #: defense.cpp msgid "All monsters. You have to eat and drink." -msgstr "" +msgstr "Alle Monster. Du musst essen und trinken." #: defense.cpp #, c-format msgid "Attack of the %ss!" -msgstr "" +msgstr "Angriff der %s!" #: defense.cpp msgid "Bar" -msgstr "" +msgstr "Kneipe" #: defense.cpp #, c-format msgid "Beware! %s!" -msgstr "" +msgstr "Vorsicht! %s!" #: defense.cpp #, c-format msgid "Buy %d items, leaving you with $%d?" -msgstr "" +msgstr "%d Items kaufen und dabei %d$ behalten?" #: defense.cpp msgid "" @@ -3280,23 +3474,23 @@ msgstr "" #: defense.cpp msgid "Cash Increase:" -msgstr "" +msgstr "Preisgeld-Erhöhung:" #: defense.cpp msgid "Cash for 1st Wave:" -msgstr "" +msgstr "Geld für 1. Welle:" #: defense.cpp msgid "Classic zombies. Slower and more realistic." -msgstr "" +msgstr "Gewöhnliche Zombis. Langsamer und realistischer." #: defense.cpp msgid "Clothing & Armor" -msgstr "" +msgstr "Kleidung u. Rüstung" #: defense.cpp msgid "Crafting & Construction Components" -msgstr "" +msgstr "Fertigungs- u. Baukomponenten" #: defense.cpp msgid "Custom" @@ -3304,95 +3498,95 @@ msgstr "" #: defense.cpp msgid "DEFENSE MODE" -msgstr "" +msgstr "VERTEIDIGUNGSMODUS" #: defense.cpp msgid "Dawn of the Dead" -msgstr "" +msgstr "Zombie" #: defense.cpp msgid "Day of the Triffids" -msgstr "" +msgstr "Triffiden – Pflanzen des Schreckens" #: defense.cpp msgid "Defend a bar against classic zombies. Easy and fun." -msgstr "" +msgstr "Verteidige eine Bar gegen gewöhnliche Zombies. Einfach und spaßig." #: defense.cpp msgid "Defend your mansion against the triffids." -msgstr "" +msgstr "Verteidige deine Villa gegen die Triffiden." #: defense.cpp msgid "Easy" -msgstr "" +msgstr "Einfach" #: defense.cpp msgid "Easy monsters and lots of money." -msgstr "" +msgstr "Einfage Monster und massig Geld." #: defense.cpp msgid "Eight-Legged Freaks" -msgstr "" +msgstr "Arac Attack" #: defense.cpp msgid "Enemy Selection:" -msgstr "" +msgstr "Gegner-Auswahl:" #: defense.cpp msgid "Fast-paced spider-fighting fun!" -msgstr "" +msgstr "Schneller und spaßiger Spinnenkampf." #: defense.cpp msgid "Firearms & Ammo" -msgstr "" +msgstr "Schusswaffen u. Munition" #: defense.cpp msgid "Food" -msgstr "" +msgstr "Essen" #: defense.cpp msgid "Food & Drugs" -msgstr "" +msgstr "Nahrung u. Pharmaka" #: defense.cpp msgid "Hard" -msgstr "" +msgstr "Schwierig" #: defense.cpp msgid "Harder monsters. You have to eat." -msgstr "" +msgstr "Schwerere Monster. Du musst essen." #: defense.cpp msgid "Hospital" -msgstr "" +msgstr "Krankenhaus" #: defense.cpp msgid "Initial Cash:" -msgstr "" +msgstr "Startgeld:" #: defense.cpp msgid "Initial Difficulty:" -msgstr "" +msgstr "Erst-Schwierigkeitsgrad:" #: defense.cpp msgid "Location:" -msgstr "" +msgstr "Ort:" #: defense.cpp msgid "Mansion" -msgstr "" +msgstr "Villa" #: defense.cpp msgid "Medium" -msgstr "" +msgstr "Mittelschwer" #: defense.cpp msgid "Megastore" -msgstr "" +msgstr "Riesensupermarkt" #: defense.cpp msgid "Melee Weapons" -msgstr "" +msgstr "Nahkampfwaffen" #: defense.cpp msgid "Mercenaries" @@ -3400,73 +3594,73 @@ msgstr "" #: defense.cpp msgid "Needs:" -msgstr "" +msgstr "Bedürfnisse:" #: defense.cpp msgid "One entrance and many rooms. Some medical supplies." -msgstr "" +msgstr "Ein Eingang und viele Räume. Ein paar medizinsche Vorräte." #: defense.cpp msgid "Please wait as the map generates [ 0%]" -msgstr "" +msgstr "Bitte warte auf die Erzeugung der Welt [ 0%]" #: defense.cpp msgid "Please wait as the map generates [%2d%]" -msgstr "" +msgstr "Bitte warte auf die Generierung der Welt [%2d%]" #: defense.cpp msgid "Press +/- or >/< to cycle, spacebar to toggle" -msgstr "" +msgstr "Drücke +/- oder >/< zum Durchlaufen, Leertaste zum Umschalten" #: defense.cpp msgid "Press ? for help." -msgstr "" +msgstr "Drücke »?« für Hilfe." #: defense.cpp msgid "Press S to start, ! to save as a template" -msgstr "" +msgstr "Drücke »S« zum Starten, »!«, um als Vorlage zu speichern" #: defense.cpp msgid "Really buy nothing?" -msgstr "" +msgstr "Wirklich nichts kaufen?" #: defense.cpp #, c-format msgid "Revenge of the %ss!" -msgstr "" +msgstr "Rache der %s!" #: defense.cpp #, c-format msgid "Rise of the %ss!" -msgstr "" +msgstr "Aufstand der %s!" #: defense.cpp msgid "Robots" -msgstr "" +msgstr "Roboter" #: defense.cpp msgid "Scenario:" -msgstr "" +msgstr "Szenario:" #: defense.cpp msgid "Shaun of the Dead" -msgstr "" +msgstr "Shaun of the Dead" #: defense.cpp lang/json/json_vehicles.py msgid "Shopping Cart" -msgstr "" +msgstr "Einkaufswagen" #: defense.cpp msgid "Skynet" -msgstr "" +msgstr "Skynet" #: defense.cpp msgid "Special Zombies" -msgstr "" +msgstr "Besondere Zombies" #: defense.cpp msgid "Spiders" -msgstr "" +msgstr "Spinnen" #: defense.cpp msgid "Subspace" @@ -3474,90 +3668,90 @@ msgstr "" #: defense.cpp msgid "Template Name:" -msgstr "" +msgstr "Vorlagenname:" #: defense.cpp msgid "The Call of Cthulhu" -msgstr "" +msgstr "Cthulhus Ruf" #: defense.cpp #, c-format msgid "The Day of the %s!" -msgstr "" +msgstr "Der %s-Tag!" #: defense.cpp msgid "The amount of money the player starts with." -msgstr "" +msgstr "Die Anzahl des Geldes, mit dem der Spieler startet." #: defense.cpp msgid "The cash awarded for the first wave." -msgstr "" +msgstr "Das Preisgeld für die erste Welle." #: defense.cpp msgid "The difficulty of the first wave." -msgstr "" +msgstr "Der Schwierigkeitsgrad der ersten Welle." #: defense.cpp msgid "The increase in the award each wave." -msgstr "" +msgstr "Die Erhöhung des Preisgeldes pro Welle." #: defense.cpp msgid "The increase of difficulty with each wave." -msgstr "" +msgstr "Der Anstieg des Schwierigkeitsgrad nach jeder Welle." #: defense.cpp msgid "The number of waves in between caravans." -msgstr "" +msgstr "Die Anzahl der Wellen zwischen Karavan-Eintreffungen" #: defense.cpp msgid "The robots have decided that humans are the enemy!" -msgstr "" +msgstr "Die Roboter erklärten die Menschen zum Feind!" #: defense.cpp msgid "The time, in minutes, between waves." -msgstr "" +msgstr "Die Dauer (in Minuten) zwischen Wellen." #: defense.cpp msgid "Time b/w Waves:" -msgstr "" +msgstr "Pause zw. Wellen:" #: defense.cpp msgid "Tools, Traps & Grenades" -msgstr "" +msgstr "Werkzeuge, Fallen u. Granaten" #: defense.cpp msgid "Triffids" -msgstr "" +msgstr "Triffiden" #: defense.cpp msgid "Ward off legions of eldritch horrors." -msgstr "" +msgstr "Wehre zahlreiche Horror-Eldritchs ab." #: defense.cpp msgid "Water" -msgstr "" +msgstr "Wasser" #: defense.cpp #, c-format msgid "Wave %d: " -msgstr "" +msgstr "%d. Welle: " #: defense.cpp msgid "Wave Difficulty:" -msgstr "" +msgstr "Wellen-Schwierigkeitsgrad:" #: defense.cpp msgid "Waves b/w Caravans:" -msgstr "" +msgstr "Pause zw. Karavanen:" #: defense.cpp #, c-format msgid "Welcome to Wave %d!" -msgstr "" +msgstr "Willkommen zur %d. Welle!" #: defense.cpp msgid "You can't afford those items!" -msgstr "" +msgstr "Du kannst dir diese Items nicht leisten!" #: defense.cpp #, c-format @@ -3566,50 +3760,50 @@ msgstr "" #: defense.cpp msgid "You cannot save in defense mode!" -msgstr "" +msgstr "Im Verteidigungsmodus kannst du nicht speichern." #: defense.cpp msgid "You don't need to sleep!" -msgstr "" +msgstr "Du brauchst nicht zu schlafen!" #: defense.cpp msgid "You drop some items." -msgstr "" +msgstr "Du lässt ein paar Items fallen." #: defense.cpp #, c-format msgid "You managed to survive through wave %d!" -msgstr "" +msgstr "Du hast es geschafft, bis zur %d. Welle zu überleben." #: defense.cpp msgid "You must choose at least one monster group!" -msgstr "" +msgstr "Du musst mindestens eine Monstergruppe auswählen!" #: defense.cpp #, c-format msgid "Your Cash:%6d" -msgstr "" +msgstr "Dein Geld:%6d" #: defense.cpp msgid "Zombies" -msgstr "" +msgstr "Zombies" #: disease.cpp #, c-format msgid "%s starts scratching their %s!" -msgstr "" +msgstr "%s fängt an, %s zu kratzen." #: disease.cpp msgid " loses some blood." -msgstr "" +msgstr " verliert etwas Blut." #: disease.cpp msgid " vomits a thick, grey goop." -msgstr "" +msgstr " erbricht einen dicken, grauen Schleim." #: disease.cpp msgid " vomits thousands of live spores!" -msgstr "" +msgstr " erbricht tausender lebendiger Sporen!" #: disease.cpp msgid "'s hands bulge. Fungus stalks burst through the bulge!" @@ -3617,11 +3811,11 @@ msgstr "" #: disease.cpp msgid "A monster appears nearby!" -msgstr "" +msgstr "Ein Monster taucht in der Nähe auf!" #: disease.cpp msgid "A portal opens nearby, and a monster crawls through!" -msgstr "" +msgstr "Ein Portal öffnet sich in der Nähe und ein Monster krabbelt durch." #: disease.cpp msgid "Adrenaline Comedown" @@ -3638,7 +3832,7 @@ msgstr "Rüstungsbonus" #: disease.cpp #, c-format msgid "Armor bonus + %d" -msgstr "" +msgstr "Rüstungsbonus: +%d" #: disease.cpp msgid "Asthma" @@ -3651,15 +3845,15 @@ msgstr "Angriffsgeschwindigkeitsbonus" #: disease.cpp #, c-format msgid "Attack speed + %d" -msgstr "" +msgstr "Angriffsgeschwindigkeit: +%d" #: disease.cpp msgid "Bad Bleeding - " -msgstr "" +msgstr "Schwere Blutung – " #: disease.cpp msgid "Badly Infected - " -msgstr "" +msgstr "Schwere Infektion " #: disease.cpp msgid "Badly Poisoned" @@ -3667,11 +3861,11 @@ msgstr "Schwere Vergiftung" #: disease.cpp msgid "Bite - " -msgstr "" +msgstr "Biss – " #: disease.cpp msgid "Bleeding - " -msgstr "" +msgstr "Blutend – " #: disease.cpp msgid "Blind" @@ -3707,11 +3901,11 @@ msgstr "Geboomert" #: disease.cpp msgid "Bugs in skin - " -msgstr "" +msgstr "Käfer in Haus – " #: disease.cpp msgid "Caught a cold." -msgstr "" +msgstr "Du hast dir eine Erhältung eingefangen." #: disease.cpp msgid "Caught on fire." @@ -3719,7 +3913,7 @@ msgstr "" #: disease.cpp msgid "Caught the flu." -msgstr "" +msgstr "Du hast dir die Grippe eingefanngen." #: disease.cpp msgid "Chilly arms" @@ -3795,19 +3989,19 @@ msgstr "Grippe" #: disease.cpp msgid "Completely Paralyzed" -msgstr "" +msgstr "Völlig paralysiert" #: disease.cpp msgid "Contracted a fungal infection." -msgstr "" +msgstr "Du hast dir eine Pilzinfektion zugezogen." #: disease.cpp msgid "Contracted an infection." -msgstr "" +msgstr "Du bist infiziert." #: disease.cpp msgid "Cured the fungal infection." -msgstr "" +msgstr "Die Pilzinfizierung wurde kuriert." #: disease.cpp msgid "Damage Bonus" @@ -3816,7 +4010,7 @@ msgstr "Schadensbonus" #: disease.cpp #, c-format msgid "Damage bonus + %d" -msgstr "" +msgstr "Schadensbonus: + %d" #: disease.cpp msgid "Deaf" @@ -3828,39 +4022,45 @@ msgstr "" #: disease.cpp msgid "Dexterity + 1; Intelligence + 1; Perception + 1" -msgstr "" +msgstr "Geschicklichkeit +1; Intelligenz +1; Wahrnehmung +1" #: disease.cpp #, c-format msgid "Dexterity - %d" -msgstr "" +msgstr "Geschicklichkeit −%d" #: disease.cpp #, c-format msgid "Dexterity - %d; " -msgstr "" +msgstr "Geschicklichkeit −%d; " #: disease.cpp msgid "" "Dexterity - 1; Speed -10%\n" "You are being slowed by climbing over a pile of rubble." msgstr "" +"Geschicklichkeit −1; Geschwindigkeit −10%\n" +"Du bist durch das Klettern über einen Schuttstapel verlangsamt." #: disease.cpp msgid "Dexterity - 3; Speed - 25" -msgstr "" +msgstr "Geschicklichkeit −3; Geschwindigkeit −25" #: disease.cpp msgid "" "Dexterity - 3; Speed -20%\n" "You are being slowed by climbing over a heap of rubble." msgstr "" +"Geschicklichkeit −3; Geschwindigkeit −20%\n" +"Du bist durch das Klettern über einen Schutthaufen verlangsamt." #: disease.cpp msgid "" "Dexterity - 5; Speed -30%\n" "You are being slowed by climbing over a mountain of rubble." msgstr "" +"Geschicklichkeit −5; Geschwindigkeit −30%\n" +"Du bist durch das Klettern über einen Schuttberg verlangsamt." #: disease.cpp msgid "Dodge Bonus" @@ -3869,7 +4069,7 @@ msgstr "Ausweichbonus" #: disease.cpp #, c-format msgid "Dodge bonus + %d" -msgstr "" +msgstr "Ausweichbonus: + %d" #: disease.cpp msgid "Downed" @@ -3881,11 +4081,11 @@ msgstr "Betrunken" #: disease.cpp msgid "Everything around you is starting to breathe." -msgstr "" +msgstr "Alles um dich herum, fängt an, zu atmen." #: disease.cpp msgid "Everything looks SO boring now." -msgstr "" +msgstr "Alles sieht jetzt SO langweilig aus." #: disease.cpp msgid "Food Poisoning" @@ -3893,7 +4093,7 @@ msgstr "Lebensmittelvergiftung" #: disease.cpp msgid "Fractal patterns dance across your vision." -msgstr "" +msgstr "Fraktale Muster tanzen über dein Blickfeld." #: disease.cpp msgid "Freezing arms!!" @@ -3925,7 +4125,7 @@ msgstr "Frierender Oberkörper!!" #: disease.cpp msgid "Frostbite" -msgstr "" +msgstr "Frostbeule" #: disease.cpp msgid "Frostbite - face" @@ -3961,11 +4161,11 @@ msgstr "Glühende Lichter ümhüllen dich, befor du wegteleportiert wirst." #: disease.cpp msgid "Got over the cold." -msgstr "" +msgstr "Du hast die Erkältung überstanden." #: disease.cpp msgid "Got over the flu." -msgstr "" +msgstr "Du hast die Grippe überstanden." #: disease.cpp msgid "Hallucinating" @@ -3973,7 +4173,7 @@ msgstr "Halluzinierend" #: disease.cpp player.cpp msgid "Head" -msgstr "" +msgstr "Kopf" #: disease.cpp msgid "Heavy Asthma" @@ -3981,7 +4181,7 @@ msgstr "Starkes Asthma" #: disease.cpp msgid "Heavy Bleeding - " -msgstr "" +msgstr "Heftige Blutung – " #: disease.cpp msgid "High" @@ -3997,7 +4197,7 @@ msgstr "Trefferbonus" #: disease.cpp player.cpp msgid "Hot" -msgstr "" +msgstr "Heiß" #: disease.cpp msgid "Hot arms!" @@ -4033,6 +4233,9 @@ msgid "" "Strength - 3; Dexterity - 1; Intelligence - 2; Perception - 1\n" "Symptoms alleviated by medication (Dayquil or Nyquil)." msgstr "" +"Erhöhter Durst, häugfiges Husten\n" +"Stärke −3; Geschicklichkeit −1; Intelligenz −2; Wahrnehmung −1\n" +"Symptome werden durch Medizin (Dayquil oder Nyquil) abgeschwächt." #: disease.cpp msgid "" @@ -4040,10 +4243,13 @@ msgid "" "Strength - 4; Dexterity - 2; Intelligence - 2; Perception - 1\n" "Symptoms alleviated by medication (Dayquil or Nyquil)." msgstr "" +"Erhöhter Durst, häugfiges Husten\n" +"Stärke −4; Geschicklichkeit −2; Intelligenz −2; Wahrnehmung −1\n" +"Symptome werden durch Medizin (Dayquil oder Nyquil) abgeschwächt." #: disease.cpp msgid "Infected - " -msgstr "" +msgstr "Infiziert – " #: disease.cpp msgid "Influenza" @@ -4051,16 +4257,16 @@ msgstr "Grippe" #: disease.cpp msgid "Insects begin to emerge from 's skin!" -msgstr "" +msgstr "Aus s Haus treten Insekten hervor!" #: disease.cpp #, c-format msgid "Intelligence - %d; " -msgstr "" +msgstr "Intelligenz −%d; " #: disease.cpp msgid "Intelligence - 1; Perception - 1" -msgstr "" +msgstr "Intelligenz −1; Wahrnehmung −1" #: disease.cpp msgid "It is excruciating." @@ -4068,21 +4274,23 @@ msgstr "Es ist sehr schmerzhaft." #: disease.cpp msgid "Itchy skin - " -msgstr "" +msgstr "Kratzie Haus – " #: disease.cpp msgid "Left Arm" -msgstr "" +msgstr "Linker Arm" #: disease.cpp msgid "Left Leg" -msgstr "" +msgstr "Linkes Bein" #: disease.cpp msgid "" "Loss of health - Entire Body\n" "Your clothing and other equipment may be consumed by the flames." msgstr "" +"Gesundheitsverlust – Gesamter Körper\n" +"Deine Kleidung und anderes Equipment können von den Flammen zerstört werden." #: disease.cpp msgid "Meth Comedown" @@ -4098,26 +4306,28 @@ msgstr "Du Brennst" #: disease.cpp msgid "Painful Bite - " -msgstr "" +msgstr "Schmerzhafter Biss – " #: disease.cpp msgid "Partially Paralyzed" -msgstr "" +msgstr "Teilweise paralysiert" #: disease.cpp #, c-format msgid "Perception - %d; " -msgstr "" +msgstr "Wahrnehmung −%d; " #: disease.cpp msgid "Perception - 1" -msgstr "" +msgstr "Wahrnehmung −1" #: disease.cpp msgid "" "Perception - 1; Dexterity - 1; Strength - 2 IF not resistant\n" "Occasional pain and/or damage." msgstr "" +"Wahrnehmung −1; Geschicklichkeit −1; Stärke −2, FALLS nicht immun\n" +"Gelegendlicher Schmerz und/oder Schaden." #: disease.cpp msgid "" @@ -4125,12 +4335,17 @@ msgid "" "Strength - 3 IF not resistant, -1 otherwise\n" "Frequent pain and/or damage." msgstr "" +"Wahrnehmung −2; Geschicklichkeit −2;\n" +"Stärke −3, FALLS nicht immun, ansonsten −1\n" +"Häufiger Schmerz und/oder Schaden." #: disease.cpp msgid "" "Perception - 5\n" "Range of Sight: 1; All sight is tinted magenta." msgstr "" +"Wahrnehmung −5\n" +"Sichtweite: 1; Das gesamte Sichtfeld ist magenta angemalt." #: disease.cpp msgid "Poisoned" @@ -4138,11 +4353,11 @@ msgstr "Vergiftet" #: disease.cpp msgid "Pus Filled - " -msgstr "" +msgstr "Gefüllt mit Eiter – " #: disease.cpp msgid "Put out the fire." -msgstr "" +msgstr "Du hast das Feuer gelöscht." #: disease.cpp msgid "RELEASE THE GRACKEN!!!!" @@ -4150,23 +4365,23 @@ msgstr "ENTFESSLE DEN KRAKEN!!!!" #: disease.cpp msgid "Range of Sight: 0" -msgstr "" +msgstr "Sichtweite: 0" #: disease.cpp msgid "Ratting" -msgstr "" +msgstr "Rasselnd" #: disease.cpp msgid "Received a deep bite wound." -msgstr "" +msgstr "Du hast eine tiefe Bisswunde erhalten." #: disease.cpp msgid "Recoverd from a bite wound." -msgstr "" +msgstr "Du hast dich von der Bisswunde erholt." #: disease.cpp msgid "Recovered from an infection... this time." -msgstr "" +msgstr "Diesmal hast du dich von der Infektion erholt." #: disease.cpp msgid "Recovering From Infection" @@ -4174,11 +4389,11 @@ msgstr "Erholung von einer Infektion" #: disease.cpp msgid "Right Arm" -msgstr "" +msgstr "Rechter Arm" #: disease.cpp msgid "Right Leg" -msgstr "" +msgstr "Rechtes Bein" #: disease.cpp msgid "Sap-coated" @@ -4222,11 +4437,11 @@ msgstr "Eingeschleimt" #: disease.cpp msgid "Slowed" -msgstr "" +msgstr "Verlangsamt" #: disease.cpp msgid "Sluggish" -msgstr "" +msgstr "abgeschwächt" #: disease.cpp faction.cpp msgid "Smoke" @@ -4238,7 +4453,7 @@ msgstr "Schlangenbiss freigeschalten!" #: disease.cpp msgid "Something feels very, very wrong." -msgstr "" +msgstr "Etwas fühlt sich sehr, sehr verkehrt an." #: disease.cpp msgid "Sounds will not be reported. You cannot talk with NPCs." @@ -4250,23 +4465,29 @@ msgid "" "Speed %d%%\n" "You can feel the tiny spores sinking directly into your flesh." msgstr "" +"Geschwindigkeit %d%%\n" +"Du kannst die winzigen Sporen direkt in dein Fleisch hereinsinken spüren." #: disease.cpp msgid "" "Speed +50; Strength + 2; Dexterity + 2;\n" "Intelligence + 3; Perception + 3" msgstr "" +"Geschwindigkeit +50; Stärke +2; Geschicklichkeit +2;\n" +"Intelligenz +3; Wahrnehmung +3" #: disease.cpp msgid "" "Speed +80; Strength + 5; Dexterity + 3;\n" "Intelligence - 8; Perception + 1" msgstr "" +"Geschwindigkeit +80; Stärke +5; Geschicklichkeit +3;\n" +"Intelligenz −8; Wahrnehmung +1" #: disease.cpp #, c-format msgid "Speed - %d%%; Strength - 2; Dexterity - 3" -msgstr "" +msgstr "Geschwindigkeit −%d%%; Stärke −2; Geschicklichkeit −3" #: disease.cpp msgid "" @@ -4274,18 +4495,20 @@ msgid "" "Your stomach is extremely upset, and you keep having pangs of pain and " "nausea." msgstr "" +"Geschwindigkeit −35%; Stärke −3; Geschicklichkeit −1; Wahrnehmung −1\n" +"Dein Magen ist extrem wütend und du hast stechende Schmerzen und Übelkeit." #: disease.cpp msgid "Speed -40%; Dexterity - 2" -msgstr "" +msgstr "Geschwindigkeit −40%; Geschicklichkeit −2" #: disease.cpp msgid "Speed -40; Strength - 3; Dexterity - 2; Intelligence - 2" -msgstr "" +msgstr "Geschwindigkeit −40; Stärke −3; Geschicklichkeit −2; Intelligenz −2" #: disease.cpp msgid "Spontaneous teleport." -msgstr "" +msgstr "Spontanteleportation!" #: disease.cpp msgid "Spore coated - " @@ -4293,7 +4516,7 @@ msgstr "" #: disease.cpp msgid "Spore covered" -msgstr "" +msgstr "Sporenbedeckt" #: disease.cpp msgid "Spore covered - " @@ -4309,18 +4532,20 @@ msgstr "Stammzellenbehandlung" #: disease.cpp msgid "Strength + 1; " -msgstr "" +msgstr "Stärke +1; " #: disease.cpp #, c-format msgid "Strength - %d; " -msgstr "" +msgstr "Stärke −%d; " #: disease.cpp msgid "" "Strength - 1; Dexterity - 1\n" "You smoked too much." msgstr "" +"Stärke −1; Geschicklichkeit −1\n" +"Du hast zu viel geraucht." #: disease.cpp msgid "" @@ -4328,18 +4553,21 @@ msgid "" "Occasionally you will cough, costing movement and creating noise.\n" "Loss of health - Torso" msgstr "" +"Stärke −1; Geschicklichkeit −1\n" +"Du wirst ab und zu husten, was dich Geschwindigkeit kostet und Krach macht.\n" +"Gesundheitsverlust – Torso" #: disease.cpp msgid "Strength - 1; Dexterity - 4" -msgstr "" +msgstr "Stärke −1; Geschicklichkeit −4" #: disease.cpp msgid "Strength - 1; Dexterity - 4; Speed - 25" -msgstr "" +msgstr "Stärke −1; Geschicklichkeit −4; Geschwindigkeit −25" #: disease.cpp msgid "Strength - 2; Dexterity - 1; Intelligence - 1; Perception - 1" -msgstr "" +msgstr "Stärke −2; Geschicklichkeit −1; Intelligenz −1; Wahrnehmung −1" #: disease.cpp msgid "" @@ -4347,6 +4575,9 @@ msgid "" "Occasionally you will cough, costing movement and creating noise.\n" "Loss of health - Torso" msgstr "" +"Stärke −2; Geschicklichkeit −2; Intelligenz −1; Wahrnehmung −4\n" +"Du wirst ab und zu husten, was dich Geschwindigkeit kostet und Krach macht.\n" +"Gesundheitsverlust – Torso" #: disease.cpp msgid "Stuck in Pit" @@ -4358,11 +4589,11 @@ msgstr "Betäubt" #: disease.cpp msgid "Succumbed to an asthma attack." -msgstr "" +msgstr "Einem Asthmaanfall erlegen." #: disease.cpp msgid "Succumbed to the infection." -msgstr "" +msgstr "Der Infektion erlegen." #: disease.cpp msgid "Tear gas" @@ -4403,11 +4634,11 @@ msgstr "Das helle Sonnenlicht macht es schwer zu sehen!" #: disease.cpp msgid "The world takes on a dreamlike quality." -msgstr "" +msgstr "Die Welt hat eine traumartige Beschaffenheit." #: disease.cpp msgid "Things are returning to normal." -msgstr "" +msgstr "Der Normalzustand ist wieder eingetreten." #: disease.cpp msgid "Tipsy" @@ -4420,7 +4651,7 @@ msgstr "" #: disease.cpp player.cpp msgid "Torso" -msgstr "" +msgstr "Torso" #: disease.cpp msgid "Trashed" @@ -4476,11 +4707,11 @@ msgstr "" #: disease.cpp msgid "You are losing blood." -msgstr "" +msgstr "Du hast Blutverlust." #: disease.cpp msgid "You are rapidly loosing blood." -msgstr "" +msgstr "Du hast rapiden Blutverlust." #: disease.cpp msgid "You are recovering from an infection." @@ -4556,20 +4787,22 @@ msgstr "Du fühlst das Adrenalin in dir wirken!" #: disease.cpp msgid "You feel an urge to take more meth." -msgstr "" +msgstr "Du hast ein Verlangen, mehr Meth zu nehmen." #: disease.cpp msgid "You feel completely rundown." -msgstr "" +msgstr "Du fühlst dich ziemlich heruntergekommen." #: disease.cpp #, c-format msgid "You feel feverish and nauseous, your %s wound has begun to turn green." msgstr "" +"Du bist fiberhaft und dir ist übel, deine %s-Wunde hat angefangen, grün zu " +"werden." #: disease.cpp msgid "You feel feverish and nauseous." -msgstr "" +msgstr "Du bist fiberhaft und dir ist übel." #: disease.cpp msgid "You feel lightheaded." @@ -4577,7 +4810,7 @@ msgstr "Du fühlst einen leichten schwindlig." #: disease.cpp msgid "You feel nauseous!" -msgstr "" +msgstr "Dir ist übel." #: disease.cpp msgid "You feel nauseous." @@ -4594,11 +4827,11 @@ msgstr "" #: disease.cpp msgid "You feel well rested." -msgstr "" +msgstr "Du fühlst dich gut ausgeruht." #: disease.cpp msgid "You gag and retch." -msgstr "" +msgstr "Du würgst." #: disease.cpp msgid "You have a nasty bite wound." @@ -4630,7 +4863,7 @@ msgstr "Du verlierst etwas Blut." #: disease.cpp msgid "You nestle your pile of clothes for warmth." -msgstr "" +msgstr "Du machst es dir im Kleiderhaufen für Wärme gemütlich." #: disease.cpp msgid "You pass out." @@ -4652,7 +4885,7 @@ msgstr "Du riechst und schmeckst Pilze." #: disease.cpp #, c-format msgid "You snuggle your %s to keep warm." -msgstr "" +msgstr "Du kuschelst dich an dein %s, um warm zu bleiben." #: disease.cpp msgid "You spasm suddenly!" @@ -4661,13 +4894,16 @@ msgstr "Plötzliche spasmen durchziehen deinen Körper!" #: disease.cpp #, c-format msgid "You start scratching your %s!" -msgstr "" +msgstr "Du fängst an, dein %s zu kratzen." #: disease.cpp msgid "" "You stop to scratch yourself frequently; high intelligence helps you resist\n" "this urge.\n" msgstr "" +"Du hörst auf, die so oft zu kratzen; hohe Intellligenz hilft dir, diesem " +"Drang\n" +"zu widerstehen.\n" #: disease.cpp msgid "You succumb to the infection." @@ -4687,16 +4923,16 @@ msgstr "Du versuchst einzuschlafen, ohne Erfolg..." #: disease.cpp msgid "You turn off your alarm-clock." -msgstr "" +msgstr "Du schaltest deinen Wecker aus." #: disease.cpp #, c-format msgid "You use your %s to keep warm." -msgstr "" +msgstr "Du benutzt %s, um warm zu bleiben." #: disease.cpp msgid "You use your pile of clothes for warmth." -msgstr "" +msgstr "Du benutzt deinen Kleiderhaufen für Warmen." #: disease.cpp msgid "You vomit a thick, gray goop." @@ -4704,11 +4940,11 @@ msgstr "Du erbrichst einen dicken, grauen Schleim." #: disease.cpp msgid "You vomit thousands of live spores!" -msgstr "" +msgstr "Du erbrichst tausender lebendiger Sporen!" #: disease.cpp msgid "You wake up coughing." -msgstr "" +msgstr "Du wachst hustend auf." #: disease.cpp msgid "You wake up." @@ -4716,7 +4952,7 @@ msgstr "Du wachst auf." #: disease.cpp msgid "You wheeze and gasp for air." -msgstr "" +msgstr "Du ringst nach Luft." #: disease.cpp msgid "You're blinded!" @@ -4786,22 +5022,22 @@ msgstr "Dich überkommt plötzlich eine Welle mit Schmerzen!" #: disease.cpp #, c-format msgid "Your %s wound begins to feel better." -msgstr "" +msgstr "Deine %s-Wunde fühlt sich langsam besser an." #: disease.cpp #, c-format msgid "Your %s wound feels swollen and painful." -msgstr "" +msgstr "Deine %s-Wunde fühlt sich geschwollen und schmerzhaft an." #: disease.cpp #, c-format msgid "Your %s wound is incredibly painful." -msgstr "" +msgstr "Deine %s-Wunde ist unglaublich schmerzhaft." #: disease.cpp #, c-format msgid "Your %s wound really hurts." -msgstr "" +msgstr "Deine %s-Wunde tut wirklich weh." #: disease.cpp msgid "Your adrenaline rush wears off. You feel AWFUL!" @@ -4857,6 +5093,8 @@ msgid "" "Your asthma overcomes you.\n" "You asphixiate." msgstr "" +"Dein Asthma überkommt dich.\n" +"Du erstickst." #: disease.cpp msgid "Your bite wound feels infected" @@ -4868,7 +5106,7 @@ msgstr "" #: disease.cpp msgid "Your bones feel like they're crumbling." -msgstr "" +msgstr "Deine Knochen fühlen sich an, als würden sie zerbröckeln." #: disease.cpp msgid "Your face feels numb." @@ -4972,7 +5210,7 @@ msgstr "" #: disease.cpp msgid "Your feet feel frigid." -msgstr "" +msgstr "Deine Füße fühlen sich eisig an." #: disease.cpp msgid "Your feet feel warm." @@ -4980,11 +5218,13 @@ msgstr "Dein Füße fühlen sie warm an." #: disease.cpp msgid "Your fingers itch." -msgstr "" +msgstr "Deine Finger jucken." #: disease.cpp msgid "Your flesh crawls; insects tear through the flesh and begin to emerge!" msgstr "" +"Dein Fleisch krabbelt; Insekten reißen sich durch das Fleisch und treten " +"hervor" #: disease.cpp msgid "" @@ -5015,11 +5255,11 @@ msgstr "" #: disease.cpp msgid "Your hands are shivering from the cold." -msgstr "" +msgstr "Deine Hände zittern vor Kälte." #: disease.cpp msgid "Your hands are shivering uncontrollably from the extreme cold." -msgstr "" +msgstr "Deine Hände zittern unkontrollierbar von der extremen Kälte." #: disease.cpp msgid "Your hands bulge. Fungus stalks burst through the bulge!" @@ -5027,15 +5267,15 @@ msgstr "" #: disease.cpp msgid "Your hands feel disgustinly hot and are very uncoordinated." -msgstr "" +msgstr "Deine Hände fühlen sich ekelig heiß und sehr unkoordiert an." #: disease.cpp msgid "Your hands feel hot and uncoordinated." -msgstr "" +msgstr "Deine Hände fühlen sich heiß und unkoordiniert an." #: disease.cpp msgid "Your hands feel like ice." -msgstr "" +msgstr "Deine Hände fühlen sich wie Eis an." #: disease.cpp msgid "Your hands feel warm." @@ -5043,7 +5283,7 @@ msgstr "Deine Hände fühlen sich warm an." #: disease.cpp msgid "Your head aches." -msgstr "" +msgstr "Dein Kopf tut weh." #: disease.cpp msgid "Your head feels warm." @@ -5055,7 +5295,7 @@ msgstr "Dein Kopf ist der Kälte ausgesetzt." #: disease.cpp msgid "Your head is extremely cold. You can barely think straight." -msgstr "" +msgstr "Dein Kopf ist extrem kalt. Du kannst kaum geradeaus denken." #: disease.cpp msgid "Your head is pounding from the heat." @@ -5084,11 +5324,11 @@ msgstr "" #: disease.cpp msgid "Your healing wound feels swollen and painful." -msgstr "" +msgstr "Deine sich heilende Wunde fühlt sich angeschwollen und schmerzhaft an." #: disease.cpp msgid "Your healing wound is incredibly painful." -msgstr "" +msgstr "Deine sich heilende Wunde ist unglaublich schmerzhaft." #: disease.cpp msgid "" @@ -5145,7 +5385,7 @@ msgstr "Deine Beine fühlen sich warm an." #: disease.cpp msgid "Your legs tremble against the relentless cold." -msgstr "" +msgstr "Deine Beine zittern von der unbarmherzigen Kälte." #: disease.cpp msgid "Your movement is randomized." @@ -5179,7 +5419,7 @@ msgstr "Deine Gedanken sind unklar." #: disease.cpp msgid "Your toes itch." -msgstr "" +msgstr "Deine Zehen jucken." #: disease.cpp msgid "Your torso feels warm." @@ -5195,6 +5435,7 @@ msgstr "" #: disease.cpp msgid "Your torso is dangerously cold. Your actions are very incoordinated." msgstr "" +"Dein Torso ist gefährlich kalt. Deine Handlungen sind sehr unkoordiniert." #: disease.cpp msgid "Your torso is exposed to the cold." @@ -5204,7 +5445,7 @@ msgstr "Dein Oberkörper ist der Kälte ausgesetzt." msgid "" "Your torso is freezing cold. You should " "put on a few more layers." -msgstr "" +msgstr "Dein Torso ist einkalt. Du solltest mehr Kleidungsschichten anziehen." #: disease.cpp msgid "" @@ -5224,7 +5465,7 @@ msgstr "Dein Oberkörper schwitzt beträchtlich. Du fühlst dich sehr schwach." #: disease.cpp msgid "Your torso is very cold, and your actions are incoordinated." -msgstr "" +msgstr "Dein Torso ist sehr kalt und deine Handlungen sind unkoordiniert." #: disease.cpp msgid "Your vision is filled with bright lights..." @@ -5232,15 +5473,15 @@ msgstr "Dein Sichtfeld ist voller heller lichter..." #: disease.cpp msgid "a hacking cough." -msgstr "" +msgstr "Ein trockener Husten." #: disease.cpp monattack.cpp msgid "beep-beep-beep!" -msgstr "" +msgstr "»Piep, piep, piep!«" #: disease.cpp msgid "loud coughing." -msgstr "" +msgstr "Lautes Husten." #: editmap.cpp msgid " [indoors]" @@ -5271,22 +5512,22 @@ msgstr "" #: editmap.cpp game.cpp #, c-format msgid "Graffiti: %s" -msgstr "" +msgstr "Graffito: %s" #: editmap.cpp #, c-format msgid "There are %d other items there as well." -msgstr "" +msgstr "Es sind außerdem %d andere Items da." #: editmap.cpp game.cpp #, c-format msgid "There is a %s there." -msgstr "" +msgstr "Dort ist ein %s." #: editmap.cpp game.cpp #, c-format msgid "There is a %s there. Parts:" -msgstr "" +msgstr "Dort ist ein %s. Teile:" #: editmap.cpp msgid "[indoors] " @@ -5318,7 +5559,7 @@ msgstr "" #: event.cpp msgid "An eyebot swoops down nearby!" -msgstr "" +msgstr "Ein Schauboter schießt in der Nähe herab!" #: event.cpp msgid "Angered a group of amigara horrors!" @@ -5334,51 +5575,51 @@ msgstr "" #: event.cpp msgid "Destroyed a triffid grove." -msgstr "" +msgstr "Einen Triffiden-Hain zerstört." #: event.cpp msgid "Opened a strange temple." -msgstr "" +msgstr "Einen seltsamen Tempel geöffnet." #: event.cpp msgid "The earth rumbles." -msgstr "" +msgstr "Die Erde grummelt." #: event.cpp msgid "The entire cavern shakes!" -msgstr "" +msgstr "Die gesamte Höhle wackelt!" #: event.cpp msgid "The nearby grates open to reveal a staircase!" -msgstr "" +msgstr "Die naheliegenden Gitter öffnen sich, um eine Treppe aufzudecken." #: event.cpp msgid "Water fills nearly to the ceiling!" -msgstr "" +msgstr "Wasser hat fast die Decke erreicht." #: event.cpp msgid "Water level reached knees." -msgstr "" +msgstr "Wasser steht auf Kniehöhe." #: event.cpp msgid "Water level reached the ceiling." -msgstr "" +msgstr "Wasser hat die Decke erreicht." #: event.cpp msgid "Water quickly floods up to your knees." -msgstr "" +msgstr "Wasser steigt dir schnell zu den Knien hoch." #: event.cpp msgid "You hear screeches from the rock above and around you!" -msgstr "" +msgstr "Du hörst Schreie vom Stein über und um dir!" #: faction.cpp msgid " They are known for " -msgstr "" +msgstr " Sie sind bekannt für " #: faction.cpp msgid " have the ultimate goal of " -msgstr "" +msgstr " haben das endgültige Ziel, " #: faction.cpp #, c-format @@ -5387,23 +5628,23 @@ msgstr "" #: faction.cpp game.cpp npc.cpp options.cpp msgid ", " -msgstr "" +msgstr ", " #: faction.cpp game.cpp msgid ", and " -msgstr "" +msgstr ", und " #: faction.cpp msgid ", but they are also involved in " -msgstr "" +msgstr ", aber sie sind auch beteiligt daran, " #: faction.cpp game.cpp msgid "." -msgstr "" +msgstr "." #: faction.cpp msgid ". Their primary concern is " -msgstr "" +msgstr ". Ihr Hauptanliegen ist es, " #: faction.cpp msgid "Ald" @@ -6273,7 +6514,7 @@ msgstr "" #: faction.cpp msgid "The army" -msgstr "" +msgstr "Die Armee" #: faction.cpp msgid "Thugs" @@ -6357,31 +6598,31 @@ msgstr "" #: faction.cpp msgid "assassinations" -msgstr "" +msgstr "Attentate" #: faction.cpp msgid "basic survival" -msgstr "" +msgstr "zu überleben" #: faction.cpp msgid "bringing the apocalypse" -msgstr "" +msgstr "die Apokalypse herbeizuführen" #: faction.cpp msgid "collecting rare artifacts" -msgstr "" +msgstr "die Sammlung seltener Artefakte" #: faction.cpp msgid "contact with unseen powers" -msgstr "" +msgstr "mit unbekannten Mächten Kontakt aufzunehmen" #: faction.cpp msgid "dominance of the region" -msgstr "" +msgstr "die Region zu beherrschen" #: faction.cpp msgid "drug dealing" -msgstr "" +msgstr "Drogengeschäfte" #: faction.cpp msgid "exploring extensively" @@ -6389,11 +6630,11 @@ msgstr "" #: faction.cpp msgid "farming & selling food" -msgstr "" +msgstr "Nahrung anzubauen und zu verkaufen" #: faction.cpp msgid "financial wealth" -msgstr "" +msgstr "reich zu werden" #: faction.cpp msgid "gambling parlors" @@ -6401,15 +6642,15 @@ msgstr "" #: faction.cpp msgid "general chaos and anarchy" -msgstr "" +msgstr "Chaos und Anarchie herbeizuführen" #: faction.cpp msgid "harmony with nature" -msgstr "" +msgstr "im Einklang mit der Natur zu leben" #: faction.cpp msgid "medical aid" -msgstr "" +msgstr "medizinische Hilfe" #: faction.cpp msgid "mercenary work" @@ -6417,91 +6658,91 @@ msgstr "" #: faction.cpp msgid "protection rackets" -msgstr "" +msgstr "Schutzgelderpressungen" #: faction.cpp msgid "raiding settlements" -msgstr "" +msgstr "Siedlungsplünderungen" #: faction.cpp msgid "rebuilding civilization" -msgstr "" +msgstr "die Zivilisation wiederaufzubauen" #: faction.cpp msgid "scavenging supplies" -msgstr "" +msgstr "Vorräte auszuplündern" #: faction.cpp msgid "selling manufactured goods" -msgstr "" +msgstr "Verkauf von Fertigwaren" #: faction.cpp msgid "spreading the fungus" -msgstr "" +msgstr "die Pilze zu verbreiten" #: faction.cpp msgid "the avoidance of drugs" -msgstr "" +msgstr "Drogenabstinenz" #: faction.cpp msgid "the cultivation of knowledge" -msgstr "" +msgstr "Wissen zu kultivieren" #: faction.cpp msgid "the extermination of monsters" -msgstr "" +msgstr "Monster auszulöschen" #: faction.cpp msgid "the sale of information" -msgstr "" +msgstr "Informationen zu verkaufen" #: faction.cpp msgid "the theft of property" -msgstr "" +msgstr "Diebstahl" #: faction.cpp msgid "their adherance to the law" -msgstr "" +msgstr "ihre Einhaltung des Gesetzes" #: faction.cpp msgid "their bustling trade centers" -msgstr "" +msgstr "ihre geschäftigen Handelszentren" #: faction.cpp msgid "their charitable nature" -msgstr "" +msgstr "ihre großzügige Natur" #: faction.cpp msgid "their cruelty" -msgstr "" +msgstr "ihre Grausamkeit" #: faction.cpp msgid "their elite training" -msgstr "" +msgstr "ihre Elite-Ausbildung" #: faction.cpp msgid "their isolationism" -msgstr "" +msgstr "ihr Isolisationismus" #: faction.cpp msgid "their knowledge of bionics" -msgstr "" +msgstr "ihr Wissen über Bioniken" #: faction.cpp msgid "their libraries" -msgstr "" +msgstr "ihre Bibliotheken" #: faction.cpp msgid "their robotics factories" -msgstr "" +msgstr "ihre Roboterfabriken" #: faction.cpp msgid "trade caravans" -msgstr "" +msgstr "Handelskaravanen" #: faction.cpp msgid "treachery" -msgstr "" +msgstr "Verrat" #: field.cpp #, c-format @@ -6516,20 +6757,20 @@ msgstr "" #: field.cpp #, c-format msgid "A %s hits you!" -msgstr "" +msgstr "Ein %s trifft dich" #: field.cpp trapfunc.cpp #, c-format msgid "The %s teleports into a %s, killing them both!" -msgstr "" +msgstr "Der %s teleportiert zu einem %s, was beide tötet!" #: field.cpp msgid "The acid burns your legs and feet!" -msgstr "" +msgstr "Die Säure frisst deine Beine und Füße an!" #: field.cpp msgid "The electricity flows around you." -msgstr "" +msgstr "Die Elektrizität fließt um dich herum." #: field.cpp msgid "The sap sticks to you!" @@ -6537,83 +6778,83 @@ msgstr "Der Saft klebt an dir!" #: field.cpp msgid "The sludge is thick and sticky. You struggle to pull free." -msgstr "" +msgstr "Der Schlamm ist dick und klebrig. Du versuchst, dich freizukämpfen." #: field.cpp msgid "These flames do not burn you." -msgstr "" +msgstr "Diese Flammen verbrennen dich nicht." #: field.cpp msgid "This radioactive gas burns!" -msgstr "" +msgstr "Dieses radioaktive Gas brennt!" #: field.cpp msgid "You are hit by the falling debris!" -msgstr "" +msgstr "Du bist von fallenden Trümmern getroffen!" #: field.cpp msgid "You burn your legs and feet!" -msgstr "" +msgstr "Du verbrennst deine Beine und Füße." #: field.cpp msgid "You trip as you evade the falling debris!" -msgstr "" +msgstr "Du stoperst beim Ausweichen der fallenden Trümmer!" #: field.cpp msgid "You're burning up!" -msgstr "" +msgstr "Du brennst ab!" #: field.cpp msgid "You're electrocuted!" -msgstr "" +msgstr "Du bist geschockt!" #: field.cpp iuse.cpp monattack.cpp msgid "You're paralyzed!" -msgstr "" +msgstr "Du bist paralysiert!" #: field.cpp msgid "You're set ablaze!" -msgstr "" +msgstr "Du bist in Brand gesetzt!" #: field.cpp msgid "You're torched by flames!" -msgstr "" +msgstr "Du wirst von Flammen abgefackelt!" #: field.cpp msgid "You're violently teleported!" -msgstr "" +msgstr "Du bist gewaltsam teleportiert!" #: field.cpp msgid "acid splatter" -msgstr "" +msgstr "Schleim" #: field.cpp msgid "acid streak" -msgstr "" +msgstr "Säurespritzer" #: field.cpp msgid "beam of light" -msgstr "" +msgstr "Lichtstrahl" #: field.cpp msgid "bile splatter" -msgstr "" +msgstr "Gallenspritzer" #: field.cpp msgid "bile stain" -msgstr "" +msgstr "Gallenfleck" #: field.cpp msgid "blood splatter" -msgstr "" +msgstr "Blutspritzer" #: field.cpp msgid "blood stain" -msgstr "" +msgstr "Blutfleck" #: field.cpp msgid "bloody meat chunks" -msgstr "" +msgstr "blutige Fleischstücke" #: field.cpp msgid "broken vegetation tangle" @@ -6621,47 +6862,47 @@ msgstr "" #: field.cpp msgid "burning plasma" -msgstr "" +msgstr "brennendes Plasma" #: field.cpp msgid "cobwebs" -msgstr "" +msgstr "Spinnenweben" #: field.cpp msgid "electric cloud" -msgstr "" +msgstr "elektrische Wolke" #: field.cpp msgid "electric crackle" -msgstr "" +msgstr "elektisches Knistern" #: field.cpp msgid "faint glimmer" -msgstr "" +msgstr "schwaches Glimmern" #: field.cpp msgid "faint plasma" -msgstr "" +msgstr "schwaches Plasma" #: field.cpp msgid "fire" -msgstr "" +msgstr "Feuer" #: field.cpp msgid "gas vent" -msgstr "" +msgstr "Gasventil" #: field.cpp msgid "glob of sap" -msgstr "" +msgstr "Saftklacks" #: field.cpp msgid "glowing plasma" -msgstr "" +msgstr "glühendes Plasma" #: field.cpp msgid "hazy cloud" -msgstr "" +msgstr "Dunstwolke" #: field.cpp msgid "heap of gore" @@ -6669,143 +6910,143 @@ msgstr "" #: field.cpp msgid "intense beam of light" -msgstr "" +msgstr "intensiver Lichtstrahl" #: field.cpp msgid "mountain of rubble" -msgstr "" +msgstr "Schuttberg" #: field.cpp msgid "odd ripple" -msgstr "" +msgstr "seltsames Kräuseln" #: field.cpp msgid "pool of acid" -msgstr "" +msgstr "Säurepfuhl" #: field.cpp msgid "pool of sap" -msgstr "" +msgstr "Saftpfuhl" #: field.cpp msgid "puddle of bile" -msgstr "" +msgstr "Gallenpfütze" #: field.cpp msgid "puddle of blood" -msgstr "" +msgstr "Blutpfütze" #: field.cpp msgid "puddle of slime" -msgstr "" +msgstr "Schleimpfütze" #: field.cpp msgid "radioactive gas" -msgstr "" +msgstr "radioaktives Gas" #: field.cpp msgid "raging fire" -msgstr "" +msgstr "wütendes Feuer" #: field.cpp msgid "rubble heap" -msgstr "" +msgstr "Schutthaufen" #: field.cpp msgid "rubble pile" -msgstr "" +msgstr "Schuttstapel" #: field.cpp msgid "sap splatter" -msgstr "" +msgstr "Saftfleck" #: field.cpp msgid "scraps of flesh" -msgstr "" +msgstr "Fleischfetzen" #: field.cpp msgid "shattered branches and leaves" -msgstr "" +msgstr "geborstene Äste und Blätter" #: field.cpp msgid "shredded leaves and twigs" -msgstr "" +msgstr "zerfetzte Blätter und Äste" #: field.cpp msgid "slime stain" -msgstr "" +msgstr "Schleimfleck" #: field.cpp msgid "slime trail" -msgstr "" +msgstr "Schleimspur" #: field.cpp msgid "sludge trail" -msgstr "" +msgstr "Schlammspur" #: field.cpp msgid "small fire" -msgstr "" +msgstr "kleines Feuer" #: field.cpp msgid "smoke" -msgstr "" +msgstr "Rauch" #: field.cpp msgid "sparks" -msgstr "" +msgstr "Funken" #: field.cpp msgid "swirling air" -msgstr "" +msgstr "Luftwirbel" #: field.cpp msgid "tear gas" -msgstr "" +msgstr "Tränengas" #: field.cpp msgid "tear in reality" -msgstr "" +msgstr "Realitätsriss" #: field.cpp msgid "thick radioactive gas" -msgstr "" +msgstr "dickes Radioaktives Gas" #: field.cpp msgid "thick sludge trail" -msgstr "" +msgstr "dicke Schlammspur" #: field.cpp msgid "thick smoke" -msgstr "" +msgstr "dicker Rauch" #: field.cpp msgid "thick tear gas" -msgstr "" +msgstr "dickes Tränengas" #: field.cpp msgid "thick toxic gas" -msgstr "" +msgstr "dickes Giftgas" #: field.cpp msgid "thick webs" -msgstr "" +msgstr "Dicke Spinnenweben" #: field.cpp msgid "thin sludge trail" -msgstr "" +msgstr "dünne Schlammspur" #: field.cpp msgid "thin smoke" -msgstr "" +msgstr "dünner Rauch" #: field.cpp msgid "toxic gas" -msgstr "" +msgstr "Giftgas" #: field.cpp msgid "webs" -msgstr "" +msgstr "Spinnenweben" #. ~ appended to "Close where?" "Pry where?" etc. #: game.cpp @@ -6814,7 +7055,7 @@ msgstr "" #: game.cpp msgid " (Y)es, (N)o, (I)gnore further distractions and finish." -msgstr "" +msgstr " (J)a, (N)ein, weitere Ablenkungen (i)gnorieren und fertig machen" #: game.cpp msgid " Altruism: " @@ -6842,51 +7083,51 @@ msgstr " Geschuldet: " #: game.cpp msgid " Stop butchering?" -msgstr "" +msgstr " Mit dem Schlachten aufhören?" #: game.cpp msgid " Stop construction?" -msgstr "" +msgstr " Mit dem Bau aufhören?" #: game.cpp msgid " Stop crafting?" -msgstr "" +msgstr " Mit der Anfertigung aufhören?" #: game.cpp msgid " Stop disassembly?" -msgstr "" +msgstr " Mit der Demontage aufhören?" #: game.cpp msgid " Stop foraging?" -msgstr "" +msgstr " Mit der Nahrungssuche aufhören?" #: game.cpp msgid " Stop playing?" -msgstr "" +msgstr " Mit dem Spielen aufhören?" #: game.cpp msgid " Stop pumping gas?" -msgstr "" +msgstr " Mit dem Tanken aufhören?" #: game.cpp msgid " Stop reading?" -msgstr "" +msgstr " Mit dem Lesen aufhören?" #: game.cpp msgid " Stop reloading?" -msgstr "" +msgstr " Mit dem nachladen aufhören?" #: game.cpp msgid " Stop training?" -msgstr "" +msgstr " Mit dem Trainieren aufhören?" #: game.cpp msgid " Stop waiting?" -msgstr "" +msgstr " Nicht mehr warten?" #: game.cpp msgid " Stop?" -msgstr "" +msgstr " Aufhören?" #: game.cpp msgid " Value: " @@ -6939,7 +7180,7 @@ msgstr "" #: game.cpp #, c-format msgid "%s is caught in the shockwave!" -msgstr "" +msgstr "%s ist von der Druckwelle erfasst!" #: game.cpp #, c-format @@ -6959,26 +7200,26 @@ msgstr "" #: game.cpp #, c-format msgid "%s took %d damage!" -msgstr "" +msgstr "%s nahm %d Schaden!" #: game.cpp #, c-format msgid "%s took %d damage! (before armor)" -msgstr "" +msgstr "%s nahm %d Schaden! (Vor Rüstung)" #: game.cpp #, c-format msgid "%s was stunned AGAIN for %d turn!" msgid_plural "%s was stunned AGAIN for %d turns!" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s war ERNEUT für %d Zug benommen!" +msgstr[1] "%s war ERNEUT für %d Züge benommen!" #: game.cpp #, c-format msgid "%s was stunned for %d turn!" msgid_plural "%s was stunned for %d turns!" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s war für %d Zug benommen!" +msgstr[1] "%s war für %d Züge benommen!" #: game.cpp #, c-format @@ -6988,7 +7229,7 @@ msgstr "Das Gehirn von %s explodiert!" #: game.cpp #, c-format msgid "%s's head implodes!" -msgstr "" +msgstr "%ss Kopf implodiert!" #: game.cpp #, c-format @@ -7055,15 +7296,15 @@ msgstr "" #: game.cpp msgid "<+> Autopickup" -msgstr "" +msgstr "<+> Auto-Aufheben" #: game.cpp msgid "<-> Autopickup" -msgstr "" +msgstr "<-> Auto-Aufheben" #: game.cpp msgid "<=> reassign" -msgstr "" +msgstr "<=> neu zuweisen" #: game.cpp msgid "ompare" @@ -7071,11 +7312,11 @@ msgstr "" #: game.cpp msgid "isassemble" -msgstr "" +msgstr "emontieren" #: game.cpp msgid "at" -msgstr "" +msgstr "ssen" #: game.cpp msgid "xamine" @@ -7087,7 +7328,7 @@ msgstr "" #: game.cpp msgid "ead" -msgstr "" +msgstr "esen" #: game.cpp msgid "eset" @@ -7095,35 +7336,35 @@ msgstr "" #: game.cpp msgid "ake off" -msgstr "" +msgstr "asziehen" #: game.cpp msgid "nload" -msgstr "" +msgstr "ntladen" #: game.cpp msgid "ear" -msgstr "" +msgstr "nziehen" #: game.cpp msgid "ctivate" -msgstr "" +msgstr "ktivieren" #: game.cpp msgid "rop" -msgstr "" +msgstr "allen lassen" #: game.cpp msgid "eload" -msgstr "" +msgstr "achladen" #: game.cpp msgid "hrow" -msgstr "" +msgstr "erfen" #: game.cpp msgid "ield" -msgstr "" +msgstr "ragen" #: game.cpp #, c-format @@ -7137,7 +7378,7 @@ msgstr "" #: game.cpp msgid "ACTIVE MISSIONS" -msgstr "" +msgstr "AKTIVE MISSIONEN" #: game.cpp msgid "AUTO: goes down" @@ -7149,7 +7390,7 @@ msgstr "" #: game.cpp msgid "Aggression: " -msgstr "" +msgstr "Agression: " #: game.cpp msgid "Already full." @@ -7157,19 +7398,19 @@ msgstr "" #: game.cpp msgid "Anywhere would be a good place to sleep..." -msgstr "" +msgstr "Jetzt wäre überall ein guter Schlafplatz." #: game.cpp msgid "Are you sure you want to sleep?" -msgstr "" +msgstr "Willst du wirklich schlafen?" #: game.cpp msgid "Auto safe mode OFF!" -msgstr "" +msgstr "Auto-Sicherheitsmodus AUS!" #: game.cpp msgid "Auto safe mode ON" -msgstr "" +msgstr "Auto-Sicherheitsmodus EIN!" #: game.cpp msgid "Bright light." @@ -7177,28 +7418,28 @@ msgstr "" #: game.cpp msgid "COMPLETED MISSIONS" -msgstr "" +msgstr "FERTIGE MISSIONEN" #: game.cpp #, c-format msgid "Can't reload your %s." -msgstr "" +msgstr "Du kannst %s nicht nachladen." #: game.cpp iexamine.cpp iuse.cpp msgid "Cancel" -msgstr "" +msgstr "Abbrechen" #: game.cpp msgid "Change weather" -msgstr "" +msgstr "Wetter wechseln" #: game.cpp msgid "Check NPC" -msgstr "" +msgstr "NPCs überprüfen" #: game.cpp msgid "Check game state..." -msgstr "" +msgstr "Spielzustand überprüfen" #: game.cpp msgid "Choose corpse to butcher" @@ -7206,19 +7447,19 @@ msgstr "" #: game.cpp msgid "Choose vehicle to spawn" -msgstr "" +msgstr "Von welchem Typ soll das Fahrzeug sein?" #: game.cpp msgid "Close where?" -msgstr "" +msgstr "Wo schließen?" #: game.cpp msgid "Commit suicide?" -msgstr "" +msgstr "Selbstmord begehen?" #: game.cpp msgid "Confirm:" -msgstr "" +msgstr "Bestätige:" #: game.cpp msgid "Consume item:" @@ -7234,11 +7475,11 @@ msgstr "" #: game.cpp msgid "Crack!" -msgstr "" +msgstr "Knacks!" #: game.cpp msgid "Current overmap revealed." -msgstr "" +msgstr "Aktuelle Karte aufgedeckt." #: game.cpp msgid "Deactivate the turret?" @@ -7255,11 +7496,11 @@ msgstr "Debug Funktionen - Diese zu benutzen ist MOGELN!" #: game.cpp msgid "Debug messages OFF!" -msgstr "" +msgstr "Debug-Nachrichten AUS!" #: game.cpp msgid "Debug messages ON!" -msgstr "" +msgstr "Debug-Nachrichten EIN!" #: game.cpp msgid "Delete saved world?" @@ -7267,19 +7508,19 @@ msgstr "Gespeicherte Welt löschen?" #: game.cpp msgid "Destination: " -msgstr "" +msgstr "Ziel: " #: game.cpp msgid "Died of a drug overdose." -msgstr "" +msgstr "Gestorben an einer Überdosis." #: game.cpp msgid "Died of starvation." -msgstr "" +msgstr "Verhungert." #: game.cpp msgid "Died of thirst." -msgstr "" +msgstr "Verdurstet." #: game.cpp msgid "Dive from moving vehicle?" @@ -7308,7 +7549,7 @@ msgstr "" #: game.cpp msgid "Edit [s]kills" -msgstr "" +msgstr "[s]: Fertigkeiten bearbeiten" #: game.cpp msgid "Enter 2 letters (case sensitive):" @@ -7316,7 +7557,7 @@ msgstr "" #: game.cpp msgid "Even your eyes feel dry..." -msgstr "" +msgstr "Sogar deine Augen fühlen sich trocken an." #: game.cpp msgid "Examine vehicle" @@ -7345,15 +7586,15 @@ msgstr "" #: game.cpp msgid "FACTIONS:" -msgstr "" +msgstr "FRAKTIONEN:" #: game.cpp msgid "FAILED MISSIONS" -msgstr "" +msgstr "FEHLGESCHLAGENE MISSIONEN" #: game.cpp newcharacter.cpp msgid "Female" -msgstr "" +msgstr "Weiblich" #: game.cpp msgid "Fill a container with water" @@ -7365,12 +7606,12 @@ msgstr "" #: game.cpp msgid "Food..." -msgstr "" +msgstr "Essen …" #: game.cpp #, c-format msgid "From the %s you hear %s" -msgstr "" +msgstr "Von %s hörst du %s" #: game.cpp msgid "GAME OVER" @@ -7378,11 +7619,11 @@ msgstr "" #: game.cpp msgid "GAME OVER - Press Spacebar to Quit" -msgstr "" +msgstr "SPIEL VORBEI – Drücke die Leertaste zum Verlassen" #: game.cpp msgid "Game over! Press spacebar..." -msgstr "" +msgstr "Game over! Drücke die Leertaste …" #: game.cpp #, c-format @@ -7395,7 +7636,7 @@ msgstr "" #: game.cpp msgid "HEAD" -msgstr "" +msgstr "KOPF" #: game.cpp msgid "Halfway down, the way down becomes blocked off." @@ -7408,11 +7649,11 @@ msgstr "" #: game.cpp #, c-format msgid "Heard %s!" -msgstr "" +msgstr "%s gehört!" #: game.cpp msgid "Heard a noise!" -msgstr "" +msgstr "Ein Geräusch gehört!" #: game.cpp msgid "High Priority:" @@ -7424,11 +7665,11 @@ msgstr "" #: game.cpp msgid "Ignoring enemy!" -msgstr "" +msgstr "Ignoriere Gegner!" #: game.cpp msgid "Increase all skills" -msgstr "" +msgstr "Alle Fähigkeiten verbessern" #: game.cpp msgid "Invalid direction." @@ -7456,23 +7697,23 @@ msgstr "" #: game.cpp msgid "KILL COUNT:" -msgstr "" +msgstr "GETÖTET:" #: game.cpp msgid "Kill NPCs" -msgstr "" +msgstr "NPCs töten" #: game.cpp msgid "L ARM" -msgstr "" +msgstr "L ARM" #: game.cpp msgid "L LEG" -msgstr "" +msgstr "L BEIN" #: game.cpp msgid "Learn all melee styles" -msgstr "" +msgstr "Alle Nahkampftechnikeln erlernen" #: game.cpp #, c-format @@ -7495,24 +7736,23 @@ msgstr "" #: game.cpp newcharacter.cpp msgid "Male" -msgstr "" +msgstr "Männlich" #: game.cpp msgid "Map editor" -msgstr "" +msgstr "Karteneditor" #: game.cpp msgid "Maybe you should find something new to read..." -msgstr "" +msgstr "Vielleicht solltest du etwas neues zum Lesen finden." #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "Dein Gesicht ist gefährlich kalt." +msgstr "Monster ist gefährlich nah!" #: game.cpp msgid "Monster spotted!" -msgstr "" +msgstr "Monster erfasst!" #: game.cpp #, c-format @@ -7530,7 +7770,7 @@ msgstr "" #: game.cpp #, c-format msgid "Monster spotted--safe mode is on! (%s to turn it off.)" -msgstr "" +msgstr "Monster erfasst – Sicherheitsmoduus ist an! (%s, um ihn abzuschalten.)" #: game.cpp msgid "Monsters" @@ -7543,7 +7783,7 @@ msgstr "Sich an diesem %s vorbei zu bewegen ist langsam!" #: game.cpp msgid "Mutate" -msgstr "" +msgstr "Mutieren" #: game.cpp msgid "NE:" @@ -7551,11 +7791,11 @@ msgstr "NO:" #: game.cpp msgid "NPCs are NOT going to spawn." -msgstr "" +msgstr "NPCs tauchen in Kürze NICHT auf." #: game.cpp msgid "NPCs are going to spawn." -msgstr "" +msgstr "NPCs tauchen in Kürze auf." #: game.cpp msgid "NW:" @@ -7567,7 +7807,7 @@ msgstr "" #: game.cpp msgid "No NPC there." -msgstr "" +msgstr "Kein NPC hier." #: game.cpp msgid "No controls there." @@ -7575,11 +7815,11 @@ msgstr "" #: game.cpp msgid "No destination." -msgstr "" +msgstr "Kein Ziel." #: game.cpp msgid "No door there." -msgstr "" +msgstr "Hier ist keine Türe." #: game.cpp msgid "No furniture at grabbed point." @@ -7595,7 +7835,7 @@ msgstr "" #: game.cpp msgid "No." -msgstr "" +msgstr "Nein." #: game.cpp msgid "North:" @@ -7613,7 +7853,7 @@ msgstr "" #: game.cpp iexamine.cpp msgid "Nothing happens." -msgstr "" +msgstr "Nichts passiert." #: game.cpp #, c-format @@ -7625,7 +7865,7 @@ msgstr "" #: game.cpp msgid "Open where?" -msgstr "" +msgstr "Wo öffnen?" #: game.cpp #, c-format @@ -7642,7 +7882,7 @@ msgstr "" #: game.cpp msgid "POWER" -msgstr "" +msgstr "STROM" #: game.cpp msgid "Peek where?" @@ -7650,7 +7890,7 @@ msgstr "" #: game.cpp msgid "Please wait as we build your world" -msgstr "" +msgstr "Bitte warte auf die Generierung der Welt." #: game.cpp #, c-format @@ -7672,15 +7912,15 @@ msgstr "" #: game.cpp msgid "R ARM" -msgstr "" +msgstr "R ARM" #: game.cpp msgid "R LEG" -msgstr "" +msgstr "R BEIN" #: game.cpp msgid "REALLY commit suicide?" -msgstr "" +msgstr "WIRKLICH Selbstmord begehen?" #: game.cpp msgid "RV kitchen:" @@ -7689,12 +7929,12 @@ msgstr "" #: game.cpp #, c-format msgid "Ranking: %s" -msgstr "" +msgstr "Rang: %s" #: game.cpp #, c-format msgid "Reached skill level %d in %s." -msgstr "" +msgstr "Fertigkeitsstufe %d in %s erreicht." #: game.cpp msgid "Read:" @@ -7730,11 +7970,11 @@ msgstr "" #: game.cpp #, c-format msgid "Respect: %s" -msgstr "" +msgstr "Respekt: %s" #: game.cpp msgid "Reveal map" -msgstr "" +msgstr "Karte aufdecken" #: game.cpp msgid "SE:" @@ -7746,15 +7986,15 @@ msgstr "SW:" #: game.cpp msgid "Safe mode OFF!" -msgstr "" +msgstr "Sicherheitsmodus AUS!" #: game.cpp msgid "Safe mode OFF! (Auto safe mode still enabled!)" -msgstr "" +msgstr "Sicherheitsmodus AUS! (Auto-Sicherheitsmodus ist noch an!)" #: game.cpp msgid "Safe mode ON!" -msgstr "" +msgstr "Sicherheitsmodus EIN!" #: game.cpp msgid "Save and quit?" @@ -7774,40 +8014,40 @@ msgstr "" #: game.cpp msgid "Set alarm to wake up in 3 hours." -msgstr "" +msgstr "Wecker auf 3 Stunden stellen." #: game.cpp msgid "Set alarm to wake up in 4 hours." -msgstr "" +msgstr "Wecker auf 4 Stunden stellen." #: game.cpp msgid "Set alarm to wake up in 5 hours." -msgstr "" +msgstr "Wecker auf 5 Stunden stellen." #: game.cpp msgid "Set alarm to wake up in 6 hours." -msgstr "" +msgstr "Wecker auf 6 Stunden stellen." #: game.cpp msgid "Set alarm to wake up in 7 hours." -msgstr "" +msgstr "Wecker auf 7 Stunden stellen." #: game.cpp msgid "Set alarm to wake up in 8 hours." -msgstr "" +msgstr "Wecker auf 8 Stunden stellen." #: game.cpp msgid "Set alarm to wake up in 9 hours." -msgstr "" +msgstr "Wecker auf 9 Stunden stellen." #: game.cpp #, c-format msgid "Shrapnel hits your %s!" -msgstr "" +msgstr "Schrapnell trifft dein %s!" #: game.cpp msgid "Smash where?" -msgstr "" +msgstr "Wo willst du was zerschlagen?" #: game.cpp msgid "South:" @@ -7815,23 +8055,23 @@ msgstr "Süden:" #: game.cpp msgid "Spawn Artifact" -msgstr "" +msgstr "Artefakt auftauchen lassen" #: game.cpp msgid "Spawn Clarivoyance Artifact" -msgstr "" +msgstr "Clarivoyance-Artefakt auftauchen lassen" #: game.cpp msgid "Spawn Monster" -msgstr "" +msgstr "Monster auftauchen lassen" #: game.cpp msgid "Spawn NPC" -msgstr "" +msgstr "NPC auftauchen lassen" #: game.cpp msgid "Spawn a vehicle" -msgstr "" +msgstr "Ein Fahrzeug auftauchen lassen" #: game.cpp msgid "Succumbed to lack of sleep." @@ -7843,7 +8083,7 @@ msgstr "" #: game.cpp msgid "TORSO" -msgstr "" +msgstr "TORSO" #: game.cpp msgid "Take off item:" @@ -7852,7 +8092,7 @@ msgstr "" #: game.cpp #, c-format msgid "Target: (%d, %d) You: (%d, %d)" -msgstr "" +msgstr "Ziel: (%d, %d) Du: (%d, %d)" #: game.cpp #, c-format @@ -7861,11 +8101,11 @@ msgstr "" #: game.cpp msgid "Teleport - Long Range" -msgstr "" +msgstr "Teleportation – weite Entfernung" #: game.cpp msgid "Teleport - Short Range" -msgstr "" +msgstr "Teleportation – kurze Entfernung" #: game.cpp #, c-format @@ -7884,11 +8124,11 @@ msgstr "" #: game.cpp msgid "That door is already closed." -msgstr "" +msgstr "Diese Türe ist bereits geschlossen." #: game.cpp msgid "That door is already open." -msgstr "" +msgstr "Diese Türe ist schon offen." #: game.cpp msgid "That door is locked!" @@ -7918,12 +8158,12 @@ msgstr "" #: game.cpp monmove.cpp #, c-format msgid "The %s drowns!" -msgstr "" +msgstr "Der %s ertrinkt!" #: game.cpp monmove.cpp #, c-format msgid "The %s flops around and dies!" -msgstr "" +msgstr "Der %s plumpst herum und stirbt." #: game.cpp #, c-format @@ -7933,7 +8173,7 @@ msgstr "" #: game.cpp #, c-format msgid "The %s is rendered non-functional!" -msgstr "" +msgstr "Das %s wurde kaputt gemacht!" #: game.cpp #, c-format @@ -7948,35 +8188,35 @@ msgstr "" #: game.cpp #, c-format msgid "The %s is unaffected by the EMP blast." -msgstr "" +msgstr "%s ist von dem EMP nicht betroffen." #: game.cpp #, c-format msgid "The %s isn't as much fun now that you've finished it." -msgstr "" +msgstr "%s ist nicht mehr so lustig, nachdem du es zu ende gelesen hast." #: game.cpp #, c-format msgid "The %s runs out of batteries." -msgstr "" +msgstr "Die Batterien %s sind leer gegangen." #: game.cpp #, c-format msgid "The %s sparks and begins searching for a target!" -msgstr "" +msgstr "Das %s sprüht Funken und fängt an, nach einem Ziel zu suchen!" #: game.cpp msgid "The EMP blast drains your power." -msgstr "" +msgstr "Der EMP saugt deine Energie aus." #: game.cpp #, c-format msgid "The EMP blast fries the %s!" -msgstr "" +msgstr "Der EMP frittiert den %s!" #: game.cpp msgid "The architect's cube." -msgstr "" +msgstr "Der Würfel des Architekten." #: game.cpp msgid "The barn doors closed!" @@ -7996,7 +8236,7 @@ msgstr "" #: game.cpp msgid "The card reader is rendered non-functional." -msgstr "" +msgstr "Der Kartenleser wurde kaputt gemacht." #: game.cpp msgid "The corpse is thoroughly pulped." @@ -8006,7 +8246,7 @@ msgstr[1] "" #: game.cpp msgid "The door is locked!" -msgstr "" +msgstr "Die Türe ist verschlossen!" #: game.cpp msgid "The gate is closed!" @@ -8018,7 +8258,7 @@ msgstr "" #: game.cpp msgid "The nearby doors slide open!" -msgstr "" +msgstr "Die naheleigenden Türen gehen auf." #: game.cpp msgid "The palisade gate swings closed with a crash!" @@ -8034,7 +8274,7 @@ msgstr "" #: game.cpp msgid "The rest of the book is currently still beyond your understanding." -msgstr "" +msgstr "Der Rest dieses Buches ist immer noch über deinem Verstand." #: game.cpp msgid "The tank is full." @@ -8055,7 +8295,7 @@ msgstr "" #: game.cpp #, c-format msgid "The weather changed to %s!" -msgstr "" +msgstr "Das Wetter ist nun: %s" #: game.cpp msgid "There are many items here." @@ -8101,12 +8341,12 @@ msgstr "" #: game.cpp #, c-format msgid "There's %s in the way!" -msgstr "" +msgstr "Da ist %s im Weg!" #: game.cpp #, c-format msgid "There's a %s in the way!" -msgstr "" +msgstr "Dort ist ein %s im Weg!" #: game.cpp msgid "There's no corpse to butcher!" @@ -8132,7 +8372,7 @@ msgstr "" #: game.cpp msgid "There's some buffoon in the way!" -msgstr "" +msgstr "Da ist irgendsoein Witzbold im Weg!" #: game.cpp msgid "There's some left over!" @@ -8157,7 +8397,7 @@ msgstr "" #: game.cpp npc.cpp msgid "Trust: " -msgstr "" +msgstr "Vertrauen: " #: game.cpp msgid "Type part of an item's name to see" @@ -8169,12 +8409,12 @@ msgstr "" #: game.cpp msgid "Underground" -msgstr "" +msgstr "Unterirdisch" #: game.cpp #, c-format msgid "Unknown command: '%c'" -msgstr "" +msgstr "Unbekannter Befehl: »%c«" #: game.cpp msgid "Unseen." @@ -8203,7 +8443,7 @@ msgstr "" #: game.cpp #, c-format msgid "Vehicle control has moved, %s" -msgstr "" +msgstr "Fahrzeugsteuerung hat sich bewegt, %s" #: game.cpp #, c-format @@ -8273,11 +8513,11 @@ msgstr "" #: game.cpp msgid "Wish for an item" -msgstr "" +msgstr "Wünsch dir ein Item" #: game.cpp msgid "With a clang and a shudder, the gasoline pump goes silent." -msgstr "" +msgstr "Mit einem Scheppern erstummt die Zapfsäule." #: game.cpp #, c-format @@ -8294,15 +8534,15 @@ msgstr "" #: game.cpp #, c-format msgid "Written here: %s" -msgstr "" +msgstr "Hier steht geschrieben: »%s«" #: game.cpp msgid "Yes, and save game before sleeping." -msgstr "" +msgstr "Ja, und ich will davor auch das Spiel speichern." #: game.cpp msgid "Yes." -msgstr "" +msgstr "Ja." #: game.cpp #, c-format @@ -8315,11 +8555,11 @@ msgstr "" #: game.cpp msgid "You are STARVING!" -msgstr "" +msgstr "Du VERHUNGERST!" #: game.cpp msgid "You are THIRSTY!" -msgstr "" +msgstr "Du hast DURST!" #: game.cpp msgid "You are already underwater!" @@ -8337,11 +8577,11 @@ msgstr "" #: game.cpp #, c-format msgid "You can no longer learn from %s." -msgstr "" +msgstr "Du kannst aus %s nicht mehr lernen." #: game.cpp msgid "You can not read a computer screen!" -msgstr "" +msgstr "Du kannst nicht von einem Computerbildschirm lesen." #: game.cpp msgid "You can't butcher while driving!" @@ -8349,11 +8589,11 @@ msgstr "" #: game.cpp msgid "You can't construct while in vehicle." -msgstr "" +msgstr "Du kannst in einem Fahrzeug nicht bauen." #: game.cpp msgid "You can't disassemble items while in vehicle." -msgstr "" +msgstr "Du kannst nichts demontieren, solange du in einem Fahrzeug bist." #: game.cpp #, c-format @@ -8433,6 +8673,7 @@ msgstr "" msgid "" "You cannot close the curtains from outside. You must be inside the building." msgstr "" +"Du kannst die Vorhänge nicht von außen schließen. Du musst im Gebäude sein." #: game.cpp msgid "You cannot pick up items with your claws out!" @@ -8514,11 +8755,11 @@ msgstr "" #: game.cpp msgid "You don't know of any factions. Press Spacebar..." -msgstr "" +msgstr "Du weißt von keiner Fraktion. Drücke die Leertaste!" #: game.cpp msgid "You dont see any items or monsters around you!" -msgstr "" +msgstr "Du siehst keinerlei Items oder Monster um dich herum!" #: game.cpp #, c-format @@ -8579,9 +8820,8 @@ msgid "You fall on the ground for %d damage." msgstr "" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "Du brauchst etwas zum Reinziehen." +msgstr "Du fühlst dich, als hättest du seit Tagen nicht geschlafen." #: game.cpp #, c-format @@ -8591,11 +8831,11 @@ msgstr "" #: game.cpp #, c-format msgid "You finish training %s to level %d." -msgstr "" +msgstr "Du hast %s zur Stufe %d trainiert." #: game.cpp msgid "You finish waiting." -msgstr "" +msgstr "Du bist fertig mit Warten." #: game.cpp trapfunc.cpp msgid "You flap your wings and flutter down gracefully." @@ -8632,31 +8872,31 @@ msgstr "" #: game.cpp msgid "You have a sudden heart attack!" -msgstr "" +msgstr "Du hast eine plötzliche Herzattacke!" #: game.cpp msgid "You have died of dehydration." -msgstr "" +msgstr "Du bist verdurstet." #: game.cpp msgid "You have no active missions!" -msgstr "" +msgstr "Du hast keine aktiven Missionen!" #: game.cpp msgid "You have starved to death." -msgstr "" +msgstr "Du bist verhungert." #: game.cpp msgid "You haven't completed any missions!" -msgstr "" +msgstr "Du hast keinerlei Mission fertiggestellt!" #: game.cpp msgid "You haven't failed any missions!" -msgstr "" +msgstr "Dir ist keine Mission missglückt" #: game.cpp msgid "You haven't killed any monsters yet!" -msgstr "" +msgstr "Du hast bisher keine Monster getötet!" #: game.cpp vehicle.cpp #, c-format @@ -8671,12 +8911,12 @@ msgstr "" #: game.cpp #, c-format msgid "You increase %s to level %d." -msgstr "" +msgstr "%s erhöht sich auf Stufe %d." #: game.cpp #, c-format msgid "You insert a cartridge into your %s." -msgstr "" +msgstr "Du setzt eine Partone in dein %s ein." #: game.cpp msgid "You land on the ground." @@ -8685,7 +8925,7 @@ msgstr "" #: game.cpp #, c-format msgid "You learn a little about %s! (%d%%%%)" -msgstr "" +msgstr "Du lernst ein bisschen was über %s! (%d%%%%)" #: game.cpp #, c-format @@ -8844,7 +9084,7 @@ msgstr "" #: game.cpp #, c-format msgid "You reload your %s." -msgstr "" +msgstr "Du lädtst deine %s nach." #: game.cpp #, c-format @@ -8911,16 +9151,18 @@ msgstr "" #: game.cpp #, c-format msgid "You were stunned AGAIN for %d turns!" -msgstr "" +msgstr "Du wurdest ERNEUT für %d Züge betäubt." #: game.cpp #, c-format msgid "You were stunned for %d turns!" -msgstr "" +msgstr "Du wurdest für %d Züge betäubt." #: game.cpp msgid "You'll need to put on reading glasses before you can see the screen." msgstr "" +"Du musst zuerst eine Lesebrille aufsetzen, bevor du vom Bildschirm lesen " +"kannst." #: game.cpp msgid "You're carrying too many items!" @@ -8928,20 +9170,20 @@ msgstr "" #: game.cpp msgid "You're caught in the explosion!" -msgstr "" +msgstr "Du bist von der Explosion erfasst!" #: game.cpp msgid "You're caught in the shockwave!" -msgstr "" +msgstr "Du bist von der Druckwelle erfasst!" #: game.cpp msgid "You're feeling tired." -msgstr "" +msgstr "Du bist müde." #: game.cpp #, c-format msgid "You're feeling tired. %s to lie down for sleep." -msgstr "" +msgstr "Du wirst müde. %s, um dich schlafen zu legen." #: game.cpp msgid "You're not strong enough to draw the bow!" @@ -8957,7 +9199,7 @@ msgstr "" #: game.cpp msgid "You're woken up by a noise." -msgstr "" +msgstr "Du wurdest von einem Geräusch geweckt." #: game.cpp #, c-format @@ -9018,7 +9260,7 @@ msgstr "" #: game.cpp msgid "Your breathing stops completely." -msgstr "" +msgstr "Deine Atmung setzt aus." #: game.cpp msgid "Your clumsy butchering destroys the meat!" @@ -9030,26 +9272,28 @@ msgstr "" #: game.cpp msgid "Your mouth feels so dry..." -msgstr "" +msgstr "Dein Mund fühlt sich so trocken an." #: game.cpp #, c-format msgid "Your position: %d:%d" -msgstr "" +msgstr "Deine Position: %d:%d" #: game.cpp #, c-format msgid "Your skill in %s has reduced to %d!" -msgstr "" +msgstr "Deine Fertigkeit in %s has sich auf %d reduziert!" #: game.cpp #, c-format msgid "Your skill level won't improve, but %s has more recipes for you." msgstr "" +"Deine Fertigkeitenstufe wird sich nicht verbessern, aber %s hat noch Rezepte " +"für dich." #: game.cpp msgid "Your stomach feels so empty..." -msgstr "" +msgstr "Dein Magen fühlt sich so leer an." #: game.cpp msgid "[,] All" @@ -9069,7 +9313,7 @@ msgstr "" #: game.cpp msgid "[q]uit" -msgstr "" +msgstr "[q]: verlassen" #: game.cpp msgid "[right] Mark" @@ -9081,11 +9325,11 @@ msgstr "" #: game.cpp msgid "a huge boom!" -msgstr "" +msgstr "einen riesigen Bumm!" #: game.cpp msgid "a huge explosion!" -msgstr "" +msgstr "eine riesige Explosion!" #: game.cpp msgid "a scraping noise" @@ -9093,11 +9337,11 @@ msgstr "" #: game.cpp msgid "an explosion!" -msgstr "" +msgstr "eine Explosion!" #: game.cpp msgid "committed suicide." -msgstr "" +msgstr "hat beging Selbstmord." #: game.cpp msgid "nearby matching items." @@ -9105,15 +9349,15 @@ msgstr "" #: game.cpp msgid "new binding is " -msgstr "" +msgstr "neue Belegung ist " #: game.cpp msgid "new default binding is '^'." -msgstr "" +msgstr "neue Standardbelegung is »^«." #: game.cpp msgid "some stuff" -msgstr "" +msgstr "etwas Zeug" #: game.cpp msgid "to a nearby square." @@ -9129,7 +9373,7 @@ msgstr "" #: game.cpp msgid "was killed." -msgstr "" +msgstr "wurde getötet." #: gamemode.cpp msgid "Defense" @@ -11351,6 +11595,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11424,9 +11672,8 @@ msgid "shot" msgstr "" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "Signalempfänger" +msgstr "" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -11456,23 +11703,23 @@ msgstr "" #: iuse.cpp msgid "(To delete, input one '.')\n" -msgstr "" +msgstr "(Zum Löschen einmal ».« eingeben)\n" #: iuse.cpp msgid "...and a nearby zombie turns friendly!" -msgstr "" +msgstr "… und ein Zombie in der Nähe wird freundlich!" #: iuse.cpp msgid "...and several nearby zombies turn friendly!" -msgstr "" +msgstr "… und einige Zombies in der Nähe werden freundlich!" #: iuse.cpp msgid "...but nothing happens." -msgstr "" +msgstr "…, aber nichts passiert." #: iuse.cpp msgid "1: Head" -msgstr "" +msgstr "1: Kopf" #: iuse.cpp msgid "" @@ -11484,43 +11731,43 @@ msgstr "" #: iuse.cpp msgid "2: Torso" -msgstr "" +msgstr "2: Torso" #: iuse.cpp msgid "3: Left Arm" -msgstr "" +msgstr "3: Linker Arm" #: iuse.cpp msgid "4: Right Arm" -msgstr "" +msgstr "4: Rechter Arm" #: iuse.cpp msgid "5: Left Leg" -msgstr "" +msgstr "5: Linkes Bein" #: iuse.cpp msgid "6: Right Leg" -msgstr "" +msgstr "6: Rechtes Bein" #: iuse.cpp msgid "7: Exit" -msgstr "" +msgstr "7: Verlassen" #: iuse.cpp msgid "ccept" -msgstr "" +msgstr "ertig" #: iuse.cpp msgid "ancel" -msgstr "" +msgstr "bbrechen" #: iuse.cpp msgid "ecrease" -msgstr "" +msgstr "erringern" #: iuse.cpp msgid "ncrease" -msgstr "" +msgstr "rhöhen" #: iuse.cpp msgid "door" @@ -11540,45 +11787,45 @@ msgstr "" #: iuse.cpp msgid " squeezes the pheremone ball..." -msgstr "" +msgstr " drückt den Pheromonball …" #: iuse.cpp msgid "fur" -msgstr "" +msgstr "Pelz" #: iuse.cpp msgid "leather" -msgstr "" +msgstr "Leder" #: iuse.cpp msgid "rags" -msgstr "" +msgstr "Lumpen" #: iuse.cpp msgid "A nearby splatter of goo forms into a goo pit." -msgstr "" +msgstr "Ein Schleimspitzer in der Nähe formt sich zu einer Schleimfalle." #: iuse.cpp #, c-format msgid "A reply! %s says, \"I'm on my way; give me %d minutes!\"" -msgstr "" +msgstr "Eine Antwort! %s sagt: »Ich bin auf dem Weg; gibt mir %d Minuten!«." #: iuse.cpp trapfunc.cpp msgid "A shadow forms nearby." -msgstr "" +msgstr "Ein Schatten formt sich in der Nähe." #: iuse.cpp msgid "A wave of nausea passes through you!" -msgstr "" +msgstr "Eine Welle der Übelkeit überkommt dich!" #: iuse.cpp msgid "Activated a mininuke." -msgstr "" +msgstr "Ein Atombömbchen aktiviert." #: iuse.cpp #, c-format msgid "Activated the %s." -msgstr "" +msgstr "Den %s aktiviert." #: iuse.cpp msgid "Air swirls all over..." @@ -11594,17 +11841,19 @@ msgstr "" #: iuse.cpp msgid "An item" -msgstr "" +msgstr "Ein Item" #: iuse.cpp msgid "" "As you eat the berry, you have a near-religious experience, feeling at one " "with your surroundings..." msgstr "" +"Während du die Beere isst hast du ein nah-religiöses Erlebnis, wobei du dich " +"eins mit deiner Umgebung fühlst." #: iuse.cpp msgid "Ate a sewage sample." -msgstr "" +msgstr "Eine Abwasserprobe gegessen." #: iuse.cpp msgid "Aw, dangit." @@ -11620,12 +11869,12 @@ msgstr "" #: iuse.cpp vehicle.cpp msgid "Bang!" -msgstr "" +msgstr "»Knall!«" #: iuse.cpp #, c-format msgid "Black goo emerges from the canister and envelopes a %s!" -msgstr "" +msgstr "Schwarzer Schleim kommt aus dem Kanister und entwickelt einen %s!" #: iuse.cpp msgid "Blazing Heat" @@ -11633,11 +11882,11 @@ msgstr "" #: iuse.cpp msgid "Blech, that burns your throat!" -msgstr "" +msgstr "Würg, das brennt in deinem Rachen!" #: iuse.cpp msgid "Blood soaks out of the ground and walls." -msgstr "" +msgstr "Blut läuft aus dem Boden und den Wänden." #: iuse.cpp msgid "Bring the heat!" @@ -11653,68 +11902,68 @@ msgstr "" #: iuse.cpp msgid "Bury the beartrap?" -msgstr "" +msgstr "Soll die Bärenfalle vergraben werden?" #: iuse.cpp msgid "Bury the land mine?" -msgstr "" +msgstr "Soll die Landmine vergraben werden?" #: iuse.cpp msgid "But you can't touch this." -msgstr "" +msgstr "Aber du kannst es nicht berühren." #: iuse.cpp msgid "But you're already smokin' hot." -msgstr "" +msgstr "Aber du bist bereits brandheiß." #: iuse.cpp msgid "Call for help..." -msgstr "" +msgstr "Um Hilfe rufen" #: iuse.cpp #, c-format msgid "Called for help from %s." -msgstr "" +msgstr "%s um Hilfe gebeten." #: iuse.cpp msgid "Carve" -msgstr "" +msgstr "Eingravieren" #: iuse.cpp msgid "Carve writing on item" -msgstr "" +msgstr "Etwas in ein Item eingravieren." #: iuse.cpp msgid "Carve writing on what?" -msgstr "" +msgstr "Worauf willst du etwas eingravieren?" #: iuse.cpp msgid "Carved" -msgstr "" +msgstr "Eingraviert" #: iuse.cpp msgid "Cauterize" -msgstr "" +msgstr "Kauterisieren" #: iuse.cpp msgid "Cauterize any open wounds?" -msgstr "" +msgstr "Willst du irgendwelche offenen Wunden kauterisieren?" #: iuse.cpp msgid "Cauterize wound" -msgstr "" +msgstr "Wunde kauterisieren?" #: iuse.cpp msgid "Cauterize yourself for fun" -msgstr "" +msgstr "Dich selbst zum Spaß kauterisieren" #: iuse.cpp msgid "Cauterize yourself for fun?" -msgstr "" +msgstr "Willst du dich selbst aus Spaß kauterisieren?" #: iuse.cpp msgid "Cauterize...for FUN!" -msgstr "" +msgstr "Kauterisieren aus Spaß" #: iuse.cpp msgid "Charge!!" @@ -11726,7 +11975,7 @@ msgstr "" #: iuse.cpp msgid "Chop up what?" -msgstr "" +msgstr "Was soll zerhackt werden?" #: iuse.cpp msgid "Click." @@ -11734,11 +11983,11 @@ msgstr "" #: iuse.cpp msgid "Consumed mutagen." -msgstr "" +msgstr "Mutagen konsumiert." #: iuse.cpp msgid "Consumed purifier." -msgstr "" +msgstr "Reiniger konsumiert." #: iuse.cpp msgid "Cut 'em up!" @@ -11746,11 +11995,11 @@ msgstr "" #: iuse.cpp msgid "Cut up fabric/plastic/kevlar/wood" -msgstr "" +msgstr "Stoff, Plastik, Kevlar oder Holz aufschneiden" #: iuse.cpp msgid "Cut up metal where?" -msgstr "" +msgstr "Wo soll Metall aufgeschnitten werden?" #: iuse.cpp msgid "Cut up what?" @@ -11799,7 +12048,7 @@ msgstr "" #: iuse.cpp msgid "Disassemble what?" -msgstr "" +msgstr "Was soll demontiert werden?" #: iuse.cpp msgid "Don't do anything rash.." @@ -11808,11 +12057,11 @@ msgstr "" #: iuse.cpp #, c-format msgid "Draw blood from %s?" -msgstr "" +msgstr "Soll Blut von %s abgenommen werden?" #: iuse.cpp msgid "Draw your own blood?" -msgstr "" +msgstr "Soll dein eigenes Blut abgenommen werden?" #: iuse.cpp msgid "Drill where?" @@ -11825,7 +12074,7 @@ msgstr "" #: iuse.cpp msgid "Electricity crackles in the air." -msgstr "" +msgstr "Elektrizität knistert in der Luft." #: iuse.cpp msgid "Endless Day" @@ -11837,23 +12086,23 @@ msgstr "" #: iuse.cpp msgid "Fill what?" -msgstr "" +msgstr "Was soll aufgetankt werden?" #: iuse.cpp msgid "Fill which vehicle?" -msgstr "" +msgstr "Welches Fahrzeug soll aufgetankt werden?" #: iuse.cpp msgid "Fire rains down around you!" -msgstr "" +msgstr "Es regnet Feuer um dich herum!" #: iuse.cpp msgid "Flies buzz around you." -msgstr "" +msgstr "Fliegen schwirren um dich herum." #: iuse.cpp msgid "For a heartbeat, your body cools down." -msgstr "" +msgstr "Du einen Herzschlag kühlt sich dein Körper ab." #: iuse.cpp msgid "Gachunk!" @@ -11861,40 +12110,44 @@ msgstr "" #: iuse.cpp msgid "Geiger counter:" -msgstr "" +msgstr "Geigerzähler:" #: iuse.cpp msgid "Giant bees appear!" -msgstr "" +msgstr "Riesenbienen tauchen auf!" #: iuse.cpp msgid "Giant flies appear!" -msgstr "" +msgstr "Riesenfliegen tauchen auf!" #: iuse.cpp msgid "Giant wasps appear!" -msgstr "" +msgstr "Riesenwespen tauchen auf!" + +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "»Trööööööööööt!«" #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." -msgstr "" +msgstr "Hämmer können nur Bretter von Fenstern, Türen und Zäunen entfernen." #: iuse.cpp msgid "Heat food" -msgstr "" +msgstr "Nahrung erhitzen" #: iuse.cpp msgid "Heat up what?" -msgstr "" +msgstr "Was soll erhitzt werden?" #: iuse.cpp msgid "Horrible gasses are emitted!" -msgstr "" +msgstr "Furchtbare Gase werden ausgestoßen!" #: iuse.cpp #, c-format msgid "How many do you want to light? (1-%d)" -msgstr "" +msgstr "Wieviele davon willst du anzünden? (1–%d)" #: iuse.cpp msgid "I'm good." @@ -11902,28 +12155,28 @@ msgstr "" #: iuse.cpp msgid "Insufficient power" -msgstr "" +msgstr "Zu wenig Strom" #: iuse.cpp msgid "Invalid Direction" -msgstr "" +msgstr "Ungültige Richtung" #: iuse.cpp msgid "Invalid Placement." -msgstr "" +msgstr "Ungültige Platzierung." #: iuse.cpp msgid "It's dead." -msgstr "" +msgstr "Es ist aus." #. ~ the sound of a noise emitter when turned on #: iuse.cpp msgid "KXSHHHHRRCRKLKKK!" -msgstr "" +msgstr "»Knister! Rausch! Zisch!«" #: iuse.cpp msgid "Ka-BOOM!" -msgstr "" +msgstr "»Krawumm!«" #: iuse.cpp msgid "Keep Fighting!" @@ -11943,11 +12196,11 @@ msgstr "" #: iuse.cpp msgid "Light where?" -msgstr "" +msgstr "Wo anzünden?" #: iuse.cpp msgid "Living black goo emerges from the canister!" -msgstr "" +msgstr "Lebendiger schwarzer Schleim kommt aus dem Kanister!" #: iuse.cpp msgid "Louisville Slaughterer (lit)" @@ -11955,7 +12208,7 @@ msgstr "" #: iuse.cpp msgid "Material of this item is not applicable for cutting up." -msgstr "" +msgstr "Das Material dieses Items ist nicht fürs Aufschneiden geeignet." #: iuse.cpp msgid "Merged!" @@ -11963,7 +12216,7 @@ msgstr "" #: iuse.cpp msgid "Modify what?" -msgstr "" +msgstr "Was soll modifiziert werden?" #. ~ (jacqueshammer) "My god! Let's talk it over, OK?" #: iuse.cpp @@ -11972,11 +12225,12 @@ msgstr "" #: iuse.cpp msgid "Mop where?" -msgstr "" +msgstr "Wo soll etwas aufgewischt werden?" #: iuse.cpp msgid "Must have an active radio to check for signal direction." msgstr "" +"Du brauchst ein eingeschaltetest Radio, um die Signalrichtung zu prüfen." #: iuse.cpp msgid "My god! Let's talk it over OK?" @@ -12002,7 +12256,7 @@ msgstr "" #: iuse.cpp options.cpp msgid "No" -msgstr "" +msgstr "Nein" #: iuse.cpp msgid "No strength to fight!" @@ -12010,7 +12264,7 @@ msgstr "" #: iuse.cpp msgid "No-one seems to reply..." -msgstr "" +msgstr "Niemand scheint zu antworten." #: iuse.cpp msgid "No. 9" @@ -12036,39 +12290,39 @@ msgstr "" #: iuse.cpp msgid "Pitch the tent where?" -msgstr "" +msgstr "Wo soll das Zelt aufgeschlagen werden?" #: iuse.cpp msgid "Place the turret where?" -msgstr "" +msgstr "Wohin soll der Geschützturm gestellt werden?" #: iuse.cpp msgid "Place trap where?" -msgstr "" +msgstr "Wohin soll die Falle gestellt werden?" #: iuse.cpp msgid "Pry where?" -msgstr "" +msgstr "Wo soll etwas aufgebrochen werden?" #: iuse.cpp msgid "Purify what?" -msgstr "" +msgstr "Was soll gereinigt werden?" #: iuse.cpp msgid "Put a knife in the boot" -msgstr "" +msgstr "Ein Messer in den Stiefel stecken" #: iuse.cpp msgid "Put the cat food where?" -msgstr "" +msgstr "Wohin soll das Katzenfutter getan werden?" #: iuse.cpp msgid "Put the dog food where?" -msgstr "" +msgstr "Wohin soll das Hundefutter getan werden?" #: iuse.cpp msgid "Put up the shelter where?" -msgstr "" +msgstr "Wohin soll der Unterschupf gestellt werden?" #: iuse.cpp msgid "Put what?" @@ -12080,11 +12334,11 @@ msgstr "" #: iuse.cpp msgid "Radio:" -msgstr "" +msgstr "Radio:" #: iuse.cpp msgid "Radio: Kssssssssssssh." -msgstr "" +msgstr "Radio: »*rausch*«" #: iuse.cpp msgid "Ready for battle!" @@ -12092,7 +12346,7 @@ msgstr "" #: iuse.cpp msgid "Real damn smart move." -msgstr "" +msgstr "Genialer Schachzug!" #: iuse.cpp msgid "Reconsider thy strategy" @@ -12100,11 +12354,11 @@ msgstr "" #: iuse.cpp msgid "Repair plastic/metal/kevlar item" -msgstr "" +msgstr "Plastik-, Metall-, oder Kevlaritem reparieren" #: iuse.cpp msgid "Repair what?" -msgstr "" +msgstr "Was reparieren?" #: iuse.cpp msgid "Retreat!" @@ -12112,7 +12366,7 @@ msgstr "" #: iuse.cpp msgid "Robot finds Kitten" -msgstr "" +msgstr "Roboter findet Katze" #: iuse.cpp msgid "Run away!" @@ -12120,44 +12374,44 @@ msgstr "" #: iuse.cpp msgid "S N A K E" -msgstr "" +msgstr "Snake" #: iuse.cpp msgid "Scan" -msgstr "" +msgstr "Durchsuchen" #: iuse.cpp msgid "Scan the ground" -msgstr "" +msgstr "Den Boden messe." #: iuse.cpp msgid "Scan yourself" -msgstr "" +msgstr "Dich selbst messen" #: iuse.cpp msgid "Set the timer to (0 to cancel)?" -msgstr "" +msgstr "Auf welchen Wert soll der Timer gestellt werden (»0« zum Abbrechen)?" #: iuse.cpp msgid "Shadows form around you." -msgstr "" +msgstr "Schatten formen sich um dich herum." #: iuse.cpp msgid "Shock" -msgstr "" +msgstr "Schocken" #: iuse.cpp msgid "Shock where?" -msgstr "" +msgstr "Wo willst du was schocken?" #: iuse.cpp msgid "Siphon from where?" -msgstr "" +msgstr "Von wo soll was abgesaugt werden?" #: iuse.cpp #, c-format msgid "Siphoned %d units of %s from the %s into the %s%s" -msgstr "" +msgstr "%d Treibstoffeinheiten an %s von %s in das %s%s abgesaugt." #: iuse.cpp msgid "Snick, snick, gachunk!" @@ -12165,15 +12419,15 @@ msgstr "" #: iuse.cpp msgid "Sokoban" -msgstr "" +msgstr "Sokoban" #: iuse.cpp msgid "Spray what?" -msgstr "" +msgstr "Worauf soll etwas gesprüht werden?" #: iuse.cpp msgid "Spray where?" -msgstr "" +msgstr "Wohin soll gesprüht werden?" #. ~ the sound of a jackhammer #: iuse.cpp @@ -12187,90 +12441,92 @@ msgstr "" #: iuse.cpp #, c-format msgid "That %s is full!" -msgstr "" +msgstr "Dieses %s ist voll!" #: iuse.cpp msgid "That arm is broken. It needs surgical attention." -msgstr "" +msgstr "Dieser Arm ist gebrochen. Er muss operiert werden." #: iuse.cpp msgid "That cannot be picked." -msgstr "" +msgstr "Hierauf kann der Dietrich nicht angewendet werden." #: iuse.cpp msgid "That container has liquid in it!" -msgstr "" +msgstr "Dieser Behälter hat innen eine Flüssigkeit." #: iuse.cpp msgid "That door isn't locked." -msgstr "" +msgstr "Diese Türe ist nicht abgeschlossen." #: iuse.cpp msgid "That isn't a knife!" -msgstr "" +msgstr "Dies ist kein Messer!" #: iuse.cpp msgid "That isn't clothing!" -msgstr "" +msgstr "Das ist keine Kleidung!" #: iuse.cpp msgid "That item does not fit in your boot!" -msgstr "" +msgstr "Dieses Item passt nicht in deinen Stifel!" #: iuse.cpp msgid "That item does not use batteries!" -msgstr "" +msgstr "Dieses Item benutzt keine Batterien!" #: iuse.cpp msgid "That item has already had its battery capacity doubled." -msgstr "" +msgstr "Bei diesem Item wurde die Batterienkapazität bereits verdoppelt." #: iuse.cpp msgid "That leg is broken. It needs surgical attention." -msgstr "" +msgstr "Dieses Bein ist gebrochen. Es muss operiert werden." #: iuse.cpp msgid "That trap needs a 3x3 space to be clear, centered two tiles from you." msgstr "" +"Diese Falle benötigt einen Platz von 3×3 Feldern und du musst sie zwei " +"Felder entfernt von dir stellen." #: iuse.cpp msgid "That vehicle has no fuel to siphon." -msgstr "" +msgstr "Dieses Fahrzeug hat keinen Treibstoff zum Absaugen." #: iuse.cpp #, c-format msgid "The %s flashes brightly!" -msgstr "" +msgstr "Der %s blitzt leicht!" #: iuse.cpp #, c-format msgid "The %s glows brightly!" -msgstr "" +msgstr "Das %s glüht hell!" #: iuse.cpp #, c-format msgid "The %s is frozen!" -msgstr "" +msgstr "Der %s ist eingefroren!" #: iuse.cpp #, c-format msgid "The %s is sprayed!" -msgstr "" +msgstr "Der %s ist besprüht." #: iuse.cpp #, c-format msgid "The %s seems quite unimpressed!" -msgstr "" +msgstr "Der %s scheint ziemlich unbeeindruckt zu sein." #: iuse.cpp #, c-format msgid "The %s swings open..." -msgstr "" +msgstr "Die %s geht auf." #: iuse.cpp #, c-format msgid "The %s's batteries are dead." -msgstr "" +msgstr "Die Batterien von %s sind leer." #: iuse.cpp msgid "The Dark of Night." @@ -12298,11 +12554,11 @@ msgstr "" #: iuse.cpp msgid "The PDA screen goes blank." -msgstr "" +msgstr "Der Bildschirm des PDAs wird schwarz." #: iuse.cpp msgid "The PDA's batteries are dead." -msgstr "" +msgstr "Die Batterien deines PDAs sind leer." #: iuse.cpp msgid "The Sun rises." @@ -12322,7 +12578,7 @@ msgstr "" #: iuse.cpp msgid "The adrenaline causes your asthma to clear." -msgstr "" +msgstr "Der Adrenalin sorgt für die Auflösung deines Asthmas." #: iuse.cpp msgid "The advanced UPS powers off with a soft hum." @@ -12330,90 +12586,92 @@ msgstr "" #: iuse.cpp msgid "The batteries are dead." -msgstr "" +msgstr "Die Batterien sind leer." #: iuse.cpp msgid "The candle winks out" -msgstr "" +msgstr "Die Kerze flackert aus." #: iuse.cpp msgid "" "The cat seems to like you! Or maybe it just tolerates your presence better. " "It's hard to tell with cats." msgstr "" +"Diese Katze scheint dich zu mögen. Oder vielleicht toleriert sie lediglich " +"deine Gegenwart. Es ist schwer zu sagen bei Katzen." #: iuse.cpp msgid "The dog seems to like you!" -msgstr "" +msgstr "Der Hund scheint dich zu mögen." #: iuse.cpp msgid "The earth shakes!" -msgstr "" +msgstr "Die Erde bebt!" #: iuse.cpp msgid "The fabric of space seems to decay." -msgstr "" +msgstr "Die Raumgefüge scheint zu verfallen." #: iuse.cpp msgid "The flare sputters out." -msgstr "" +msgstr "Die Leuchtfackel geht aus." #: iuse.cpp msgid "The flashlight flicks off." -msgstr "" +msgstr "Die Taschenlampe geht aus." #: iuse.cpp msgid "The flashlight's batteries are dead." -msgstr "" +msgstr "Die Batterien der Taschenlampe sind leer." #: iuse.cpp msgid "The geiger counter buzzes intensely." -msgstr "" +msgstr "Der Geigerzähler surrt gewaltig." #: iuse.cpp msgid "The geiger counter clicks intermittently." -msgstr "" +msgstr "Der Geigerzähler klickt unregelmäßig." #: iuse.cpp msgid "The geiger counter clicks once." -msgstr "" +msgstr "Der Geigerzähler klickt ein mal." #: iuse.cpp msgid "The geiger counter clicks rapidly." -msgstr "" +msgstr "Der Geigerzähler klickt rapide." #: iuse.cpp msgid "The geiger counter clicks slowly." -msgstr "" +msgstr "Der Geigerzähler klickt langsam." #: iuse.cpp msgid "The geiger counter clicks steadily." -msgstr "" +msgstr "Der Geigerzähler klickt beständig." #: iuse.cpp msgid "The geiger counter clicks wildly." -msgstr "" +msgstr "Der Geigerzähler klickt wild." #: iuse.cpp msgid "The geiger counter's SCANNING LED flicks off." -msgstr "" +msgstr "Die Dauermessungs-LED des Geigerzählers geht aus." #: iuse.cpp msgid "The geiger counter's scan LED flicks on." -msgstr "" +msgstr "Die Dauermessungs-LED des Geigerzählers geht an." #: iuse.cpp msgid "The glowstick fades out." -msgstr "" +msgstr "Das Knicklicht geht aus." #: iuse.cpp msgid "The ground" -msgstr "" +msgstr "Der Boden" #: iuse.cpp #, c-format msgid "The ground's radiation level: %d" -msgstr "" +msgstr "Der Strahlungswert des Bodens beträgt %d." #: iuse.cpp msgid "The infernal racket dies as you turn off the noise emitter." @@ -12421,31 +12679,31 @@ msgstr "" #: iuse.cpp msgid "The lantern is empty." -msgstr "" +msgstr "Die Laterne ist leer." #: iuse.cpp msgid "The lantern is extinguished." -msgstr "" +msgstr "Die Flamme der Laterne ist gelöscht." #: iuse.cpp msgid "The lightstrip dies." -msgstr "" +msgstr "Der Leuchtstreifen geht aus." #: iuse.cpp msgid "The lock stumps your efforts to pick it." -msgstr "" +msgstr "Der Dietrich stumpft bei deinem Einbruchsversuch ab." #: iuse.cpp msgid "The mp3 player turns off." -msgstr "" +msgstr "Der MP3-Player geht aus." #: iuse.cpp msgid "The mp3 player's batteries are dead." -msgstr "" +msgstr "Die Batterien des MP3-Players sind leer." #: iuse.cpp msgid "The pipe bomb fizzles out." -msgstr "" +msgstr "Die Rohrbombe geht aus." #: iuse.cpp msgid "The power supply has depleted the plutonium." @@ -12457,94 +12715,95 @@ msgstr "" #: iuse.cpp msgid "The radio dies." -msgstr "" +msgstr "Das Radio geht aus." #: iuse.cpp #, c-format msgid "The signal seems strongest to the %s." -msgstr "" +msgstr "Das Signal scheint am stärksten vom %s zu sein." #: iuse.cpp msgid "The sky starts to dim." -msgstr "" +msgstr "Der Himmel fängt an, zu dämmern." #: iuse.cpp msgid "The torch burns out." -msgstr "" +msgstr "Die Fackel brennt aus." #: iuse.cpp msgid "The torch is extinguished" -msgstr "" +msgstr "Die Fackel ist gelöscht" #: iuse.cpp msgid "The universe implodes and reforms around you." -msgstr "" +msgstr "Das Universum implodiert und formiert sich um herum neu." #: iuse.cpp msgid "There is already a fire." -msgstr "" +msgstr "Dort ist schon ein Feuer." #: iuse.cpp msgid "There is no adjacent square to release the manhack in!" -msgstr "" +msgstr "Es gibt kein benachbarten Feld, um die Klingendrohne loszulassen." #: iuse.cpp msgid "There isn't anything new on the map." -msgstr "" +msgstr "Es gibt nichts Neues auf der Karte." #: iuse.cpp #, c-format msgid "There's no point in cutting a %s." -msgstr "" +msgstr "Es hat keinen Zweck, ein %s zu schneiden." #: iuse.cpp msgid "There's no room to unfold the bicycle." -msgstr "" +msgstr "Hier ist kein Platz, um das Klapprad aufzuklappen." #: iuse.cpp msgid "There's no vehicle there." -msgstr "" +msgstr "Dort ist kein Fahrzeug." #: iuse.cpp msgid "There's nothing to light there." -msgstr "" +msgstr "Dort ist nichts zum Anzünden." #: iuse.cpp msgid "There's nothing to mop there." -msgstr "" +msgstr "Es gibt hier nichts zum Aufwischen." #: iuse.cpp msgid "There's nothing to pry there." -msgstr "" +msgstr "Es gibt hier nichts zum aufhebeln oder aufbrechen." #: iuse.cpp msgid "They reply, \"Hah! We hope you die!\"" -msgstr "" +msgstr "Sie antworten mit »Pah! Wir hoffen, dass du stirbst!«." #: iuse.cpp msgid "They reply, \"Help is on the way!\"" -msgstr "" +msgstr "Sie antworten mit »Hilfe ist auf dem Weg!«." #: iuse.cpp msgid "They reply, \"Sorry, you're on your own!\"" -msgstr "" +msgstr "Sie antworten mit »Tschuldigung, du bist auf dich alleine gestellt!«." #: iuse.cpp msgid "This berry is delicious, and very filling!" -msgstr "" +msgstr "Diese Beere ist lecker und sehr füllend!" #: iuse.cpp msgid "This berry makes you feel better all over." -msgstr "" +msgstr "Diese Beere lässt dich allgemein besser fühlen." #: iuse.cpp msgid "This berry tastes extremely strange!" -msgstr "" +msgstr "Diese Beere schmeckt extrem seltsam!" #: iuse.cpp msgid "" "This object is too small to salvage a meaningful quantity of anything from!" msgstr "" +"Dieses Objekt ist zu klein, um irgendetwas Brauchbares daraus zu holen!" #: iuse.cpp msgid "Thy strength fades!" @@ -12552,7 +12811,7 @@ msgstr "" #: iuse.cpp msgid "Tick." -msgstr "" +msgstr "»Tick.«" #: iuse.cpp msgid "Time stands still." @@ -12560,7 +12819,7 @@ msgstr "" #: iuse.cpp msgid "To board up a window or door, press *" -msgstr "" +msgstr "Um ein Fenster oder eine Türe zu verrammeln, drücke *" #: iuse.cpp msgid "Torch something!" @@ -12569,60 +12828,60 @@ msgstr "" #: iuse.cpp #, c-format msgid "Tried to set a trap. But got confused! %s" -msgstr "" +msgstr "Versucht, eine Falle zu stellen. Aber wurdest verwirrt! %s" #: iuse.cpp msgid "Turn continuous scan off" -msgstr "" +msgstr "Dauermessung ausschalten." #: iuse.cpp msgid "Turn continuous scan on" -msgstr "" +msgstr "Dauermessung einschalten." #: iuse.cpp msgid "Turn off" -msgstr "" +msgstr "Ausschalten" #: iuse.cpp msgid "Turn on" -msgstr "" +msgstr "Einschalten" #: iuse.cpp msgid "Turn on light" -msgstr "" +msgstr "Licht einschalten" #: iuse.cpp msgid "Ugh, too much smoke... you feel nasty." -msgstr "" +msgstr "Uff, zuviel Rauch. Du fühlst dich übel." #: iuse.cpp msgid "Umm. No." -msgstr "" +msgstr "Ähem, nein." #: iuse.cpp msgid "Uncool, outta gas." -msgstr "" +msgstr "Och nee, Treibstoff ist alle." #: iuse.cpp #, c-format msgid "Use %s:" -msgstr "" +msgstr "Benutze %s:" #: iuse.cpp msgid "Use as a knife" -msgstr "" +msgstr "Als Messer benutzen" #: iuse.cpp msgid "Use your pick lock where?" -msgstr "" +msgstr "Wo soll dein Dietrich benutzt werden?" #: iuse.cpp msgid "Using boots:" -msgstr "" +msgstr "Stiefel benutzen:" #: iuse.cpp msgid "Using knife:" -msgstr "" +msgstr "Benutze Messer:" #. ~ (jacqueshammer) "You can't drill there." #: iuse.cpp @@ -12636,7 +12895,7 @@ msgstr "" #: iuse.cpp msgid "What do you want to play?" -msgstr "" +msgstr "Was willst du spielen?" #: iuse.cpp msgid "What will thou do?" @@ -12648,124 +12907,132 @@ msgstr "" #: iuse.cpp msgid "Whoa buddy! You can't go cheating in items and" -msgstr "" +msgstr "Warte, Freundchen! Du kannst nicht einfach so Items ercheaten" #: iuse.cpp msgid "Why would you do that?" -msgstr "" +msgstr "Warum solltest du so etwas tun wollen?" #: iuse.cpp msgid "With a roar, the chainsaw leaps to life!" -msgstr "" +msgstr "Mit einem Brüllen erwacht die Kettensäge zum Leben!" #: iuse.cpp #, c-format msgid "With a satisfying click, the lock on the %s opens." -msgstr "" +msgstr "Mit einem freundlichem Klicken öffnet sich das Schloss von %s." #: iuse.cpp msgid "Write" -msgstr "" +msgstr "Schreiben" #: iuse.cpp msgid "Write on what?" -msgstr "" +msgstr "Worauf soll etwas geschrieben werden?" #: iuse.cpp msgid "Write what?" -msgstr "" +msgstr "Was soll geschrieben werden?" #: iuse.cpp msgid "Written" -msgstr "" +msgstr "Geschrieben" #: iuse.cpp #, c-format msgid "Yeah. Place the %s at your feet." -msgstr "" +msgstr "Super! Stell die %s auf deine Füße." #: iuse.cpp options.cpp msgid "Yes" -msgstr "" +msgstr "Ja" #: iuse.cpp msgid "You activate the flashlight app." -msgstr "" +msgstr "Du aktivierrst das Taschenlampen-Programm." #: iuse.cpp msgid "You activate the glowstick." -msgstr "" +msgstr "Du aktivierst das Knicklicht." #: iuse.cpp msgid "You activate the mininuke." -msgstr "" +msgstr "Du aktivierst das Atombömbchen." #: iuse.cpp msgid "You add roads and points of interest to your map." -msgstr "" +msgstr "Du fügst Straßen und interessante Orte deiner Karte hinzu." #: iuse.cpp #, c-format msgid "You are already dry, %s has no effect" -msgstr "" +msgstr "Du bist schon trocken, %s hat keine Wirkung." #: iuse.cpp msgid "You are already listening to an mp3 player!" -msgstr "" +msgstr "Du hörst dir bereits die Musik eines MP3-Players an!" #: iuse.cpp msgid "You are not bleeding or bitten, there is no need to cauterize yourself." msgstr "" +"Du hast weder eine Blutung noch wurdest du gebissen. Es ist nicht nötig, " +"dich selbst zu kauterisieren." #: iuse.cpp msgid "You are overcome by an overwhelming longing for the ocean." -msgstr "" +msgstr "Dich überkommt ein überwältigendes Verlangen nach dem Ozean." #: iuse.cpp msgid "You attempt to pry open your wallet" -msgstr "" +msgstr "Du versuchst, deine Brieftasche aufzubrechen." #: iuse.cpp #, c-format msgid "You attempt to shock %s, but miss." -msgstr "" +msgstr "Du versuchst, %s zu schoken, aber du verfehlst das Ziel." #: iuse.cpp #, c-format msgid "You attempt to shock the %s, but miss." -msgstr "" +msgstr "Du versuchst, den %s zu schocken, aber zu verfehlst." #: iuse.cpp msgid "You blow your dog whistle." -msgstr "" +msgstr "Du pustest in deine Hundepfeife." #: iuse.cpp msgid "You break the glass." -msgstr "" +msgstr "Zu zerbrichst das Glas." #: iuse.cpp msgid "You bury the beartrap." -msgstr "" +msgstr "Du vergräbst die Bärenfalle." #: iuse.cpp msgid "You bury the land mine." -msgstr "" +msgstr "Du vergräbst die Landmine." #: iuse.cpp msgid "You can dig a pit via the construction menu--hit *" msgstr "" #: iuse.cpp -msgid "You can only mod tools with this battery mod." +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." msgstr "" +#: iuse.cpp +msgid "You can only mod tools with this battery mod." +msgstr "Mit dem Batterie-Mod kannst du nur Werkzeuge modifizieren." + #: iuse.cpp msgid "You can only purify water." -msgstr "" +msgstr "Du kannst nur Wasser reinigen." #: iuse.cpp msgid "You can only slice items made of cotton or leather." -msgstr "" +msgstr "Du kannst nur Items aus Stoff oder Leder aufschneiden." #: iuse.cpp msgid "" @@ -12773,6 +13040,8 @@ msgid "" "pick your nose, but you can't pick\n" "your friend's nose" msgstr "" +"Wer anderen in der Nase bohrt,\n" +"ist selbst ein Schwein." #: iuse.cpp #, c-format @@ -12794,17 +13063,17 @@ msgstr "" #: iuse.cpp msgid "You can't cut that." -msgstr "" +msgstr "Das kannst du nicht schneiden." #: iuse.cpp #, c-format msgid "You can't dig in that %s" -msgstr "" +msgstr "Du kannst darin nicht graben! %s" #: iuse.cpp player.cpp #, c-format msgid "You can't do anything interesting with your %s." -msgstr "" +msgstr "Mit deinem %s kannst du nicht interessantes anstellen." #: iuse.cpp msgid "You can't drill there." @@ -12813,60 +13082,64 @@ msgstr "" #: iuse.cpp msgid "You can't find the direction if your radio isn't tuned." msgstr "" +"Du kannst die Richtung nicht finden, wenn dein Radio nicht richtig " +"eingestellt ist." #: iuse.cpp msgid "You can't heat that up!" -msgstr "" +msgstr "Das kannst du nicht erhitzen!" #: iuse.cpp #, c-format msgid "You can't place a %s there." -msgstr "" +msgstr "Du kannst hier keinen %s platzieren." #: iuse.cpp #, c-format msgid "You can't place a %s there. It contains a trap already." -msgstr "" +msgstr "Du kannst hier keinen %s platzieren. Dort ist bereits eine Falle." #: iuse.cpp msgid "You can't see to sew!" -msgstr "" +msgstr "Du kannst nicht genug sehen zum Nähen!" #: iuse.cpp msgid "You can't turn off a flare." -msgstr "" +msgstr "Du kannst eine Leuchtfackel nicht ausschalten." #: iuse.cpp msgid "You can't turn off a glowstick." -msgstr "" +msgstr "Du kannst ein Knicklich nicht ausschalten." #: iuse.cpp msgid "You cannot cut that, you must disassemble it using the disassemble key" msgstr "" +"Du kannst das nicht schneiden, du musst es mit der Demontage-Taste " +"demontieren." #: iuse.cpp msgid "You cannot disassemble that." -msgstr "" +msgstr "Du kannst das nicht demontieren." #: iuse.cpp msgid "You cannot place a turret there." -msgstr "" +msgstr "Du kannst hier keinen Geschützturm stellen." #: iuse.cpp #, c-format msgid "You carve the %1$s into %2$i %3$s." msgid_plural "You carve the %1$s into %2$i %3$ss." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Du schnitzt das %1$s zu %2$i %3$s." +msgstr[1] "Du schnitzt das %1$s zu %2$i× %3$s." #: iuse.cpp msgid "You cauterize yourself. It hurts like hell!" -msgstr "" +msgstr "Du kauterisierst dich selbst. Es tut höllisch weh!" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "Du isst %s." +msgstr "Du kaust dein %s." #: iuse.cpp msgid "You churn up the earth here." @@ -12874,55 +13147,59 @@ msgstr "" #: iuse.cpp msgid "You clean the wound." -msgstr "" +msgstr "Du säuberst die Wunde." #: iuse.cpp #, c-format msgid "You clumsily cut the %s into useless ribbons." -msgstr "" +msgstr "Du zerschneidest den %s zu nutzlosen Bändern." #: iuse.cpp #, c-format msgid "You clumsily cut the %s into useless scraps." -msgstr "" +msgstr "Du zerschneidest den %s zu nutzlosen Bändern." #: iuse.cpp #, c-format msgid "You cut the %1$s into %2$i %3$s." msgid_plural "You cut the %1$s into %2$i %3$ss." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Du schneidest das %1$s zu %2$i %3$s auf." +msgstr[1] "Du schneidest das %1$s zu %2$i× %3$s auf." #: iuse.cpp msgid "You cut the log into planks." -msgstr "" +msgstr "Du zerhackst den Holzscheit zu Planken." #: iuse.cpp #, c-format msgid "You damage your %s further!" -msgstr "" +msgstr "Du beschädigst deinen %s noch weiter." #: iuse.cpp #, c-format msgid "You damage your %s!" -msgstr "" +msgstr "Du beschädigst deinen %s!" + +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "Du drückst den Knopf aber es kommt kein Ton raus." #: iuse.cpp msgid "You destroy it!" -msgstr "" +msgstr "Du zerstörst es!" #: iuse.cpp msgid "You disinfect the wound." -msgstr "" +msgstr "Du desinfizierst die Wunde." #: iuse.cpp msgid "You do not have that item!" -msgstr "" +msgstr "Dieses Item hast du nicht!" #: iuse.cpp #, c-format msgid "You don't have enough %s to do that." -msgstr "" +msgstr "Du hast nicht genug %s, um das zu tun." #: iuse.cpp msgid "" @@ -12937,28 +13214,28 @@ msgstr "" #: iuse.cpp #, c-format msgid "You don't repair your %s, but you waste lots of thread." -msgstr "" +msgstr "Deinen %s reparierst du nicht, aber du verschwendest viel Faden." #: iuse.cpp #, c-format msgid "You double the battery capacity of your %s!" -msgstr "" +msgstr "Du verdoppelst die Batterienkapazität deines %s!" #: iuse.cpp msgid "You fail to spray a message here." -msgstr "" +msgstr "Du schaffst es nicht, hier eine Nachricht zu sprühen." #: iuse.cpp msgid "You fail to stop the bleeding." -msgstr "" +msgstr "Dir misslingt es, die Blutung zu beenden." #: iuse.cpp msgid "You fail to write a message here." -msgstr "" +msgstr "Du schaffst es nicht, hier eine Nachricht zu schreiben." #: iuse.cpp msgid "You feel a bit wobbly." -msgstr "" +msgstr "Du fühlst dich etwas wabbelig." #: iuse.cpp msgid "You feel a burning sensation under your skin that quickly fades away." @@ -12966,31 +13243,31 @@ msgstr "" #: iuse.cpp msgid "You feel a momentary nausea." -msgstr "" +msgstr "Du verspürst eine augenblickliche Übelkeit." #: iuse.cpp msgid "You feel a strange warmth spreading throughout your body..." -msgstr "" +msgstr "Du fühlst eine seltsame Wärme durch deinen Körper." #: iuse.cpp msgid "You feel cleansed inside!" -msgstr "" +msgstr "Du fühlst dich von innen gesäubert!" #: iuse.cpp msgid "You feel cleansed." -msgstr "" +msgstr "Du fühlst dich gereinigt." #: iuse.cpp msgid "You feel completely exhausted." -msgstr "" +msgstr "Du fühlst dich völlig erschöpft." #: iuse.cpp msgid "You feel healed." -msgstr "" +msgstr "Du fühlst dich geheilt." #: iuse.cpp msgid "You feel healthier!" -msgstr "" +msgstr "Du fühlst dich gesünder!" #: iuse.cpp msgid "You feel insidious." @@ -12999,26 +13276,32 @@ msgstr "" #: iuse.cpp msgid "You feel like your action has attracted attention." msgstr "" +"Du hast das Gefühl, dass deine Handlung die Aufmerksamkeit auf dich gezogen " +"hat." #: iuse.cpp msgid "You feel much better!" -msgstr "" +msgstr "Du fühlst dich viel besser!" #: iuse.cpp msgid "You feel much closer to nature." -msgstr "" +msgstr "Du fühlst dich viel näher an der Natur." #: iuse.cpp msgid "You feel tough." -msgstr "" +msgstr "Du fühlst dich widerstandsfähig." #: iuse.cpp msgid "You feel unhinged." -msgstr "" +msgstr "Du bist verstört." #: iuse.cpp msgid "You feel very sleepy..." -msgstr "" +msgstr "Du bist sehr müde." + +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "Du fühlst dich irgendwie besser." #: iuse.cpp msgid "You have a vision of the surrounding area..." @@ -13030,40 +13313,44 @@ msgstr "" #: iuse.cpp msgid "You hear buzzing, and feel your body harden." -msgstr "" +msgstr "Du hörst Summen und fühlst deinen Körper erhärten." #: iuse.cpp msgid "You heat up the food." -msgstr "" +msgstr "Du erhitzt die Nahrung." #: iuse.cpp msgid "You honk the bicycle horn." +msgstr "Du betätigst die Fahrradklingel." + +#: iuse.cpp +msgid "You honk your airhorn." msgstr "" #: iuse.cpp msgid "You inject the vaccine." -msgstr "" +msgstr "Du injizierst den Impfstopf." #: iuse.cpp msgid "You irreversibly activate the lightstrip." -msgstr "" +msgstr "Du aktivierst den Leuchtstreifen unwiderruflich." #: iuse.cpp msgid "You lift the manhole cover." -msgstr "" +msgstr "Du hebst den Gullideckel hoch." #: iuse.cpp msgid "You light a cigarette and smoke it." -msgstr "" +msgstr "Du zündest eine Zigarrete an und rauchst sie." #: iuse.cpp #, c-format msgid "You light a string of %d firecrackers." -msgstr "" +msgstr "Du entzündest eine Kette von %d Knallfröschen." #: iuse.cpp msgid "You light one firecracker." -msgstr "" +msgstr "Zu entzündest einen Knallfrosch." #: iuse.cpp msgid "You light the Louisville Slaughterer." @@ -13071,91 +13358,94 @@ msgstr "" #: iuse.cpp msgid "You light the arrow!." -msgstr "" +msgstr "Du entzündest den Pfeil!" #: iuse.cpp msgid "You light the candle." -msgstr "" +msgstr "Du entzündest die Kerze." #: iuse.cpp msgid "You light the dynamite." -msgstr "" +msgstr "Du entzündest das Dynamit." #: iuse.cpp msgid "You light the firecracker." -msgstr "" +msgstr "Du entzündest den Knallfrosch." #: iuse.cpp msgid "You light the fuse on the pipe bomb." -msgstr "" +msgstr "Du zündest den Docht der Rohrbombe an." #: iuse.cpp msgid "You light the match head bomb." -msgstr "" +msgstr "Du entzündest die Streichholzkopfbombe." #: iuse.cpp msgid "You light the molotov cocktail." -msgstr "" +msgstr "Zu entzündest das Molotov Cocktail." #: iuse.cpp msgid "You light the pack of firecrackers." -msgstr "" +msgstr "Du entzündest den Packen Knallfrösche." #: iuse.cpp msgid "You light the torch." -msgstr "" +msgstr "Du entzündest die Fackel." #: iuse.cpp #, c-format msgid "You listen to %s" -msgstr "" +msgstr "Du hörst dir %s an." #: iuse.cpp #, c-format msgid "You make your %s extra sturdy." -msgstr "" +msgstr "Du machst deinen %s besonders robust." #: iuse.cpp msgid "You misprogram the manhack; it's hostile!" -msgstr "" +msgstr "Du fehlprogrammierst die Klingendrohne; sie ist feindlich!" #: iuse.cpp msgid "You misprogram the turret; it's hostile!" -msgstr "" +msgstr "Du fehlprogrammierst den Geschützturm, er ist feindlich." #: iuse.cpp msgid "You mop up the spill" -msgstr "" +msgstr "Du wischt das Verschüttete auf." #: iuse.cpp msgid "You mop yourself up." -msgstr "" +msgstr "Du wischst dich selbst ab." #: iuse.cpp msgid "You must place the tripwire between two solid tiles." -msgstr "" +msgstr "Du musst den Stolperdraht zwischen zwei festen Feldern aufspannen." #: iuse.cpp msgid "" "You neatly sever all of the veins and arteries in your body. Oh wait, Never " "mind." msgstr "" +"Fein säuberlich trennst du all deine Venen und Aterien deines Körpers. " +"Moment mal! Ach, vergiss es!" #: iuse.cpp msgid "You need a 3x3 flat space to place a shelter" msgstr "" +"Du benötigst Platz von 3×3 Feldern, um einen Unterschlupf zu platzieren." #: iuse.cpp msgid "You need a 3x3 flat space to place a tent" -msgstr "" +msgstr "Du brachst Platz von 3×3 Feldern, um ein Zelt aufzuschlagen." #: iuse.cpp msgid "You need a lighter or fire to light this." -msgstr "" +msgstr "Du benötigst ein Feuerzeug oder Feuer, um dies anzuzünden." #: iuse.cpp msgid "You need a lighter to light this." -msgstr "" +msgstr "Du benötigst ein Feuerzeug, um dies zu entzünden." #: iuse.cpp msgid "You need a lighter with 4 charges before you can cauterize yourself." @@ -13163,11 +13453,11 @@ msgstr "" #: iuse.cpp msgid "You need a lighter!" -msgstr "" +msgstr "Du brauchst ein Feuerzeug!" #: iuse.cpp msgid "You need a shovel." -msgstr "" +msgstr "Du brauchst eine Schaufel." #: iuse.cpp msgid "You need a source of flame!" @@ -13175,17 +13465,23 @@ msgstr "" #: iuse.cpp msgid "You need batteries to cauterize wounds." -msgstr "" +msgstr "Du brauchst Batterien, um Wunden zu kauterisieren." #: iuse.cpp msgid "You need something to light it." -msgstr "" +msgstr "Du brauchst etwas, um es anzuzünden." #: iuse.cpp msgid "" "You need to be at least level 2 in the firearms skill before you can " "disassemble ammunition." msgstr "" +"Du musst deine Feuerwaffen-Fertigkeit mindestens auf Sutfe 2 trainiert " +"haben, bevor du Munition demontieren kannst." + +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." @@ -13197,11 +13493,12 @@ msgstr "" #: iuse.cpp msgid "You painstakingly unfold the bicycle and make it ready to ride." -msgstr "" +msgstr "Sorgfältig klappst du das Klapprad auf und machst es fahrtüchtig." #: iuse.cpp msgid "You pick your nose and your sinuses swing open." msgstr "" +"Mit dem Dietrich bohrst du in deiner Nase und deine Nebenhöhlen öffnen sich." #: iuse.cpp msgid "You place the brazier securely." @@ -13209,72 +13506,73 @@ msgstr "" #: iuse.cpp msgid "You place the funnel, waiting to collect rain." -msgstr "" +msgstr "Du platzierst den Trichter. Er wartet darauf, Regen zu sammeln." #: iuse.cpp msgid "You place the makeshift funnel, waiting to collect rain." msgstr "" +"Du platizerst den provisorischen Trichter. Er wartet daruf, Regen zu sammeln." #: iuse.cpp #, c-format msgid "You play on your %s for a while." -msgstr "" +msgstr "Für eine Weile spielst du auf deinem %s." #: iuse.cpp msgid "You pop open the crate." -msgstr "" +msgstr "Du brichst die Kiste auf." #: iuse.cpp msgid "You practice your sewing." -msgstr "" +msgstr "Du übst dein Nähen." #: iuse.cpp msgid "You practice your soldering." -msgstr "" +msgstr "Du übst dein Löten." #: iuse.cpp msgid "You pry open the door." -msgstr "" +msgstr "Du brichst die Türe auf." #: iuse.cpp msgid "You pry open the window." -msgstr "" +msgstr "Du hebelst das Fenster auf." #: iuse.cpp msgid "You pry, but cannot lift the manhole cover." -msgstr "" +msgstr "Du versuchst es, aber du kannst den Gullideckel nicht hochheben." #: iuse.cpp msgid "You pry, but cannot pop open the crate." -msgstr "" +msgstr "Du versuchst es, aber du kannst die Kiste nicht aufbrechen." #: iuse.cpp msgid "You pry, but cannot pry open the door." -msgstr "" +msgstr "Du versuchst es, aber du kannst die Türe nicht aufbrechen." #: iuse.cpp msgid "You pry, but cannot pry open the window." -msgstr "" +msgstr "Du versuchst es, aber du schaffst es nicht, das Fenster aufzuhebeln." #: iuse.cpp msgid "You pull the activating lever, readying the LAW to fire." -msgstr "" +msgstr "Zu ziehst den Aktivierungshebel, was die LAW zum Feuern bereitmacht." #: iuse.cpp msgid "You pull the pin on the EMP grenade." -msgstr "" +msgstr "Du ziehst den Stift der EMP-Granate." #: iuse.cpp msgid "You pull the pin on the Granade." -msgstr "" +msgstr "Du ziehst den Stift der Granate." #: iuse.cpp msgid "You pull the pin on the flashbang." -msgstr "" +msgstr "Du ziehst den Stift der Blendgranate." #: iuse.cpp msgid "You pull the pin on the grenade." -msgstr "" +msgstr "Du zieht den Stift der Granate." #: iuse.cpp msgid "You pull the pin on the scrambler grenade." @@ -13282,20 +13580,20 @@ msgstr "" #: iuse.cpp msgid "You pull the pin on the smoke bomb." -msgstr "" +msgstr "Du ziehst den Stift der Rauchgranate." #: iuse.cpp msgid "You pull the pin on the teargas canister." -msgstr "" +msgstr "Du ziehst den Stift der Tränengasgranate." #: iuse.cpp msgid "You put in the earbuds and start listening to music." -msgstr "" +msgstr "Du steckst die Ohrhörrer ein und fängst an, Musik zuzuhören." #: iuse.cpp #, c-format msgid "You put the %s in your boot." -msgstr "" +msgstr "Du steckst das %s in deinen Stiefel." #: iuse.cpp msgid "" @@ -13309,17 +13607,17 @@ msgstr "" #: iuse.cpp #, c-format msgid "You repair your %s completely!" -msgstr "" +msgstr "Du reparierst deinen %s vollständig!" #: iuse.cpp #, c-format msgid "You repair your %s!" -msgstr "" +msgstr "Du reparierst deinen %s!" #: iuse.cpp #, c-format msgid "You repair your %s, but waste lots of thread." -msgstr "" +msgstr "Du reparierst deinen %s, aber verschwendest viel Faden." #: iuse.cpp #, c-format @@ -13328,84 +13626,85 @@ msgstr "" #: iuse.cpp msgid "You set the beartrap." -msgstr "" +msgstr "Du stellst die Bärenfalle." #: iuse.cpp msgid "You set the blade trap two squares away." -msgstr "" +msgstr "Du stellst die Klingenfalle zwei Felder weit weg." #: iuse.cpp msgid "You set the booby trap up and activate the grenade." -msgstr "" +msgstr "Du stellst die Sprengfalle und aktivierst die Granate." #: iuse.cpp msgid "You set the bubble wrap on the ground, ready to be popped." msgstr "" +"Du legst die Luftpolsterfolie auf den Boden. Sie ist nun bereit zum Knacken." #: iuse.cpp msgid "You set the crossbow trap." -msgstr "" +msgstr "Du stellst die Armbrustfalle." #: iuse.cpp msgid "You set the land mine." -msgstr "" +msgstr "Du schärfst die Landmine." #: iuse.cpp msgid "You set the shotgun trap." -msgstr "" +msgstr "Du stellst die Schrotflintenfalle." #: iuse.cpp msgid "You set the snare trap." -msgstr "" +msgstr "Du stellst die Fallstrick-Falle." #: iuse.cpp #, c-format msgid "You set the timer to %d." -msgstr "" +msgstr "Du stellst den Timer auf %d." #: iuse.cpp #, c-format msgid "You shock %s!" -msgstr "" +msgstr "Du schockst %s!" #: iuse.cpp #, c-format msgid "You shock the %s!" -msgstr "" +msgstr "Du schockst den %s!" #: iuse.cpp msgid "You shoot up." -msgstr "" +msgstr "Du schießt hoch." #: iuse.cpp #, c-format msgid "You slice the %s into a piece of leather." msgid_plural "You slice the %1$s into %2$d pieces of leather." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Du schneidest den %s zu einem Lederstück." +msgstr[1] "Du schneidest den %1$s zu %2$d Lederstücken." #: iuse.cpp #, c-format msgid "You slice the %s into a rag." msgid_plural "You slice the %1$s into %2$d rags." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Du schneidest den %s zu einem Lumpen." +msgstr[1] "Du schneidest den %1$s zu %2$d Lumpen." #: iuse.cpp msgid "You smoke some Grack Cocaine. Time seems to stop." -msgstr "" +msgstr "Du rauchst etwas Grack-Kokain. Die Zeit scheint anzuhalten." #: iuse.cpp msgid "You smoke some more weed." -msgstr "" +msgstr "Du rauchst noch etwas mehr Gras." #: iuse.cpp msgid "You smoke some weed. Good stuff, man!" -msgstr "" +msgstr "Du rauchst etwas Gras. Gutes Zeug, Mann!" #: iuse.cpp msgid "You smoke your crack rocks. Mother would be proud." -msgstr "" +msgstr "Du rauchst deinen Crack. Mutter wäre Stolz." #: iuse.cpp msgid "You smoke your meth. The world seems to sharpen." @@ -13413,123 +13712,122 @@ msgstr "" #: iuse.cpp msgid "You snort a bump of coke." -msgstr "" +msgstr "Du schnupfst etwas Kokain." #: iuse.cpp msgid "You snort some crystal meth." -msgstr "" +msgstr "Du schnupfst etwas Crystal-Meth." #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "Du legst %s auf den Boden." +msgstr "Du verschüttest das Katzenfutter quer über den ganzen Boden." #: iuse.cpp msgid "You spill the dogfood all over the ground." -msgstr "" +msgstr "Du verschüttest das Hundefutter quer über den ganzen Boden." #: iuse.cpp msgid "You spray a message on the ground." -msgstr "" +msgstr "Du sprühst eine Nachricht auf den Boden." #: iuse.cpp msgid "You squeeze the pheremone ball.." -msgstr "" +msgstr "Du drückst den Pheromonball." #: iuse.cpp msgid "You stop the bleeding." -msgstr "" +msgstr "Du beendest die Blutung." #: iuse.cpp msgid "You strike your flare and light it." -msgstr "" +msgstr "Du schlägst deine Leuchtfackel und zündest sie an." #: iuse.cpp msgid "You string up the tripwire." -msgstr "" +msgstr "Du spannst den Strolperdraht an." #: iuse.cpp msgid "You successfully light a fire." -msgstr "" +msgstr "Erfolgreich entfachst du ein Feuer." #: iuse.cpp msgid "You suddenly feel hollow inside." -msgstr "" +msgstr "Du fühlst dich plötzlich hohl innen." #: iuse.cpp msgid "You take a few puffs from your cigar." -msgstr "" +msgstr "Du nimmst ein paar Züge von deiner Zigarre." #: iuse.cpp msgid "You take a puff from your inhaler." -msgstr "" +msgstr "Du nimmst einen Zug aus deinem Inhalator." #: iuse.cpp msgid "You take an iodine tablet." -msgstr "" +msgstr "Du nimmst eine Jod-Tablette ein." #: iuse.cpp msgid "You take apart the ammunition." -msgstr "" +msgstr "Du nimmst die Munition auseinander." #: iuse.cpp msgid "You take one bite, and immediately vomit!" -msgstr "" +msgstr "Du nimmst einen Biss und erbrichst sofort!" #: iuse.cpp #, c-format msgid "You take some %s" -msgstr "" +msgstr "Du nimmt etwas %s ein." #: iuse.cpp #, c-format msgid "You take some %s." -msgstr "" +msgstr "Du nimmst etwas %s." #: iuse.cpp msgid "You take some antibiotics." -msgstr "" +msgstr "Du nimmst ein paar Antibiotika ein." #: iuse.cpp msgid "You take some fungicide." -msgstr "" +msgstr "Du nimmst etwas Pilzvernichtungsmittel ein." #: iuse.cpp msgid "You take some vitamins." -msgstr "" +msgstr "Du nimmst ein paar Vitamine ein." #: iuse.cpp #, c-format msgid "You take your %s in, improving the fit." -msgstr "" +msgstr "Du nächst dein %s ab. Es passt dir nun besser." #: iuse.cpp msgid "You try to hit yourself with the hammer." -msgstr "" +msgstr "Du versuchst, dich selbst mit dem Hammer zu treffen." #: iuse.cpp msgid "You try to light a fire, but fail." -msgstr "" +msgstr "Du versuchst ein Feuer zu entfachen, doch du scheiterst." #: iuse.cpp msgid "You turn off the light" -msgstr "" +msgstr "Du schaltest das Licht aus." #: iuse.cpp msgid "You turn the flashlight on." -msgstr "" +msgstr "Du schaltest die Taschenlampe an." #: iuse.cpp msgid "You turn the lantern on." -msgstr "" +msgstr "Du machst die Laterne an." #: iuse.cpp msgid "You turn the light on." -msgstr "" +msgstr "Du schaltest das Licht ein." #: iuse.cpp msgid "You turn the noise emitter on." -msgstr "" +msgstr "Du Schaltest den Krachmacher ein." #: iuse.cpp msgid "You turn the power supply on." @@ -13537,44 +13835,44 @@ msgstr "" #: iuse.cpp msgid "You turn the radio on." -msgstr "" +msgstr "Du schaltest das Radio ein." #: iuse.cpp msgid "You unfold the cot and place it on the ground." -msgstr "" +msgstr "Du entfaltest dein Klappbettt und legst es auf den Boden." #: iuse.cpp msgid "You unroll the fur mat and lay it on the ground." -msgstr "" +msgstr "Du entrollst deine Pelzmatte und legst sie auf den Boden." #: iuse.cpp msgid "You unroll the mat and lay it on the ground." -msgstr "" +msgstr "Du entrollst deine Liegematte und legst sie auf den Boden." #: iuse.cpp #, c-format msgid "You use the %s to dry off!" -msgstr "" +msgstr "Du benutzt das %s zum Abkühlen!" #: iuse.cpp msgid "You waste a lot of the wood." -msgstr "" +msgstr "Zu verschwendest viel vom Holz." #: iuse.cpp msgid "You would set yourself on fire." -msgstr "" +msgstr "Du würdest dich nur selbst anzünden." #: iuse.cpp msgid "You write a message on the ground." -msgstr "" +msgstr "Du schreibst eine Nachricht auf dem Boden." #: iuse.cpp msgid "You yank the cord, but nothing happens." -msgstr "" +msgstr "Du zieht an der Kordel, aber nicht passiert." #: iuse.cpp msgid "You yearn for a cool, dark place to hide." -msgstr "" +msgstr "Du sehnst dich nach einem kühlen, dunklen Versteck." #: iuse.cpp msgid "You're filled with a roaring energy!" @@ -13582,20 +13880,20 @@ msgstr "" #: iuse.cpp player.cpp msgid "You're illiterate!" -msgstr "" +msgstr "Du bist ein Analphabet." #: iuse.cpp #, c-format msgid "You're not bleeding enough to need your %s." -msgstr "" +msgstr "Deine Blutung ist nicht stark genug, als dass du dein %s benötigest." #: iuse.cpp msgid "You're not even chained to a boiler." -msgstr "" +msgstr "Du bist noch nicht mal an einem Boiler angekettet." #: iuse.cpp msgid "You're wearing that, are you sure?" -msgstr "" +msgstr "Dies trägst du. Bist du sicher?" #: iuse.cpp msgid "You're wracked with pain!" @@ -13604,27 +13902,27 @@ msgstr "" #: iuse.cpp #, c-format msgid "Your %s emits a deafening boom!" -msgstr "" +msgstr "Dein %s stößt einen ohrenbetäubenden Bumms aus!" #: iuse.cpp #, c-format msgid "Your %s goes docile." -msgstr "" +msgstr "Dein %s wird fügsam." #: iuse.cpp #, c-format msgid "Your %s is already enhanced." -msgstr "" +msgstr "Dein %s ist bereits aufgebessert." #: iuse.cpp #, c-format msgid "Your %s is not made of cotton, wool, leather or fur." -msgstr "" +msgstr "Dein %s ist nicht aus Stoff, Wolle, Leder oder Pelz gemacht." #: iuse.cpp #, c-format msgid "Your %s is not made of kevlar, plastic or metal." -msgstr "" +msgstr "Dein %s ist nicht aus Kevlar, Plastik oder Metall." #: iuse.cpp #, c-format @@ -13634,7 +13932,7 @@ msgstr "" #: iuse.cpp #, c-format msgid "Your %s screams disturbingly." -msgstr "" +msgstr "Dein %s schreit verstörend." #: iuse.cpp msgid "Your No. 9 cuts out!" @@ -13658,31 +13956,31 @@ msgstr "" #: iuse.cpp msgid "Your body lightens and you long for the sky." -msgstr "" +msgstr "Dein Körper wird leichter und du hast ein Verlangen nach dem Himmel." #: iuse.cpp msgid "Your body loses all rigidity for a moment." -msgstr "" +msgstr "Dein Körper verliert für einen Augenblick jegliche Starre." #: iuse.cpp msgid "Your breathing clears up!" -msgstr "" +msgstr "Deine Atmung frischt auf!" #: iuse.cpp msgid "Your chainsaw dies." -msgstr "" +msgstr "Deine Kettensäge geht aus." #: iuse.cpp msgid "Your chainsaw rumbles." -msgstr "" +msgstr "Deine Kettensäge grummelt." #: iuse.cpp msgid "Your heart begins to race." -msgstr "" +msgstr "Dein Herz fängt zu rasen an." #: iuse.cpp msgid "Your heart races and you see blood for a moment." -msgstr "" +msgstr "Dein Herz rast und für einen Augenblick siehst du Blut." #: iuse.cpp msgid "Your light amp goggles power on." @@ -13690,11 +13988,11 @@ msgstr "" #: iuse.cpp msgid "Your lit molotov goes out." -msgstr "" +msgstr "Dein angezündeter Molotov Cocktail geht aus." #: iuse.cpp msgid "Your mind and body slow down. You feel peaceful." -msgstr "" +msgstr "Dein Geist und Körper verlangsamen sich. Du fühlst dich friedlich." #: iuse.cpp msgid "" @@ -13712,7 +14010,7 @@ msgstr "" #: iuse.cpp #, c-format msgid "Your radiation level: %d" -msgstr "" +msgstr "Dein Strahlungswert: %d" #: iuse.cpp msgid "Your repair tool does not have enough charges to do that." @@ -13724,11 +14022,11 @@ msgstr "" #: iuse.cpp msgid "Your sight returns!" -msgstr "" +msgstr "Deine Sicht ist wieder da!" #: iuse.cpp msgid "Your skin grows warm for a moment." -msgstr "" +msgstr "Deine Haut erwärmt sich für einen Moment." #: iuse.cpp msgid "Your tactical tonfa is out of power" @@ -13736,11 +14034,11 @@ msgstr "" #: iuse.cpp msgid "Your wound still aches." -msgstr "" +msgstr "Deine Wunde tut immer noch weh." #: iuse.cpp msgid "Your wound still hurts." -msgstr "" +msgstr "Deine Wunde tut immer noch weh." #: iuse.cpp msgid "Zap something" @@ -13748,19 +14046,19 @@ msgstr "" #: iuse.cpp msgid "a funky bassline." -msgstr "" +msgstr "eine funkige Bassline" #: iuse.cpp msgid "a sweet guitar solo!" -msgstr "" +msgstr "ein nettes Gitarren-Solo" #: iuse.cpp msgid "but alas. You are just too miserly." -msgstr "" +msgstr "Aber leider bist du zu geizig." #: iuse.cpp msgid "cancel" -msgstr "" +msgstr "abbrechen" #: iuse.cpp msgid "crunch!" @@ -13768,19 +14066,19 @@ msgstr "" #: iuse.cpp msgid "down and go play the game." -msgstr "" +msgstr "hin und fang an zu Spielen." #: iuse.cpp msgid "dramatic classical music." -msgstr "" +msgstr "dramatische klassische Musik" #: iuse.cpp msgid "extinguish" -msgstr "" +msgstr "löschen" #: iuse.cpp map.cpp monattack.cpp ranged.cpp msgid "glass breaking!" -msgstr "" +msgstr "Glas scheppert." #: iuse.cpp msgid "grnd grnd grnd" @@ -13788,27 +14086,27 @@ msgstr "" #: iuse.cpp vehicle.cpp msgid "honk." -msgstr "" +msgstr "»Tröt.«" #: iuse.cpp msgid "just expect them to work! Now put the pickaxe" -msgstr "" +msgstr "und glauben, dass sie funktionierne. Nun leg die Spitzhacke" #: iuse.cpp msgid "kevlar plates" -msgstr "" +msgstr "Kevlarplatten" #: iuse.cpp msgid "light something" -msgstr "" +msgstr "etwas entzünden" #: iuse.cpp msgid "permanent_marker" -msgstr "" +msgstr "Permanentmarker" #: iuse.cpp msgid "plastic chunks" -msgstr "" +msgstr "Plastikklumpen" #: iuse.cpp msgid "radio: " @@ -13820,7 +14118,7 @@ msgstr "Altmetall" #: iuse.cpp msgid "some amazing vocals." -msgstr "" +msgstr "großartigen Gesang" #: iuse.cpp msgid "some bass-heavy post-glam speed polka" @@ -13828,12 +14126,12 @@ msgstr "" #: iuse.cpp msgid "some pumping bass." -msgstr "" +msgstr "Bass, der mächtig reinhaut" #. ~ the sound of a lit fuse #: iuse.cpp msgid "ssss..." -msgstr "" +msgstr "»Zisch.«" #: iuse.cpp msgid "tactical tonfa" @@ -13845,17 +14143,19 @@ msgstr "Fackel (angezündet)" #: iuse.cpp msgid "turn off light" -msgstr "" +msgstr "Licht ausschalten" #: iuse_software.cpp msgid "You found kitten!" -msgstr "" +msgstr "Du hast die Katze gefunden!" #: iuse_software.cpp #, c-format msgid "" "You struggle to get '%s' working, and finally give up to play minesweeper." msgstr "" +"Du hast Schwierigkeiten, »%s« zum laufen zu bringen, gibst es auf und " +"spielst Minesweeper." #: lang/json/json_bionics.py msgid "" @@ -13967,7 +14267,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Battery System" -msgstr "" +msgstr "Batteriesystem" #: lang/json/json_bionics.py msgid "Blood Analysis" @@ -13979,7 +14279,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Cerebral Booster" -msgstr "" +msgstr "Zelebral-Booster" #: lang/json/json_bionics.py msgid "Cloaking System" @@ -14017,7 +14317,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Diamond Cornea" -msgstr "" +msgstr "Diamant-Hornhaut" #: lang/json/json_bionics.py msgid "Directional EMP" @@ -14054,7 +14354,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Enhanced Hearing" -msgstr "" +msgstr "Verbessertes Gehör" #: lang/json/json_bionics.py msgid "Enhanced Memory Banks" @@ -14103,6 +14403,8 @@ msgstr "" #: lang/json/json_bionics.py msgid "If you're seeing this, it's a bug. (game::init_bionics)" msgstr "" +"Falls du dies siehst, handelt es sich um einen Programmierfehler. (game::" +"init_bionics)" #: lang/json/json_bionics.py msgid "Implanted Night Vision" @@ -14168,7 +14470,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Internal Furnace" -msgstr "" +msgstr "Interner Ofen" #: lang/json/json_bionics.py msgid "Internal Storage" @@ -14220,7 +14522,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "NULL bionics" -msgstr "" +msgstr "NULL-Bioniken" #: lang/json/json_bionics.py msgid "" @@ -14330,7 +14632,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Solar Panels" -msgstr "" +msgstr "Solarzellen" #: lang/json/json_bionics.py msgid "Sonic Resonator" @@ -14473,7 +14775,7 @@ msgstr "" #: lang/json/json_bionics.py msgid "Wired Reflexes" -msgstr "" +msgstr "Verdrahtete Reflexe" #: lang/json/json_bionics.py msgid "" @@ -14486,6 +14788,9 @@ msgid "" "You can burn nearly any organic material as fuel (use 'E'), recharging your " "power level. Some materials will burn better than others." msgstr "" +"Du kannst nahezu jedes organische Material als Treibstoff benutzen (drücke " +"»E«), was deinen Strompegel erhöht. Einige Materialien werden besser als " +"andere brennen." #: lang/json/json_bionics.py msgid "" @@ -14505,6 +14810,8 @@ msgid "" "You have a few solar panels installed. While in direct sunlight, your power " "level will slowly recharge." msgstr "" +"Du hast ein paar Solarzellen installiert. Wenn du im direktem Sonnenlicht " +"stehst, wird dein Strompegel sich langsam aufladen." #: lang/json/json_bionics.py msgid "" @@ -14525,6 +14832,8 @@ msgid "" "Your brain has been enhanced with bionic coprocessors, giving you a +2 bonus " "to intelligence." msgstr "" +"Dein Hirn wurde mit Bionik-Koprozessoren verbessert, was dir einen Bonus von " +"+2 in Intelligenz gibt." #: lang/json/json_bionics.py msgid "" @@ -14558,6 +14867,9 @@ msgid "" "Your eyes have a thin membrane that closes over your eyes while underwater, " "negating any vision penalties." msgstr "" +"Deine Augen haben eine dünne Membrane, welche sich über deine Augen legen, " +"während du unter dem Wasser bist, was sämtliche Sichtbehinderungen " +"ausschließt." #: lang/json/json_bionics.py msgid "" @@ -14598,6 +14910,10 @@ msgid "" "better than the average person. Additionally, high-intensity sounds will be " "automatically dampened before they can damage your hearing." msgstr "" +"Dein Gehör wurde drastisch verbessert, was dich es zehn mal besser hören als " +"die Durchschnittsperson hören lässt. Außerdem werden sehr laute oder " +"intensive Töne automatische gedämpft, bevor sie dein Gehör beschädigen " +"können." #: lang/json/json_bionics.py msgid "" @@ -14649,15 +14965,23 @@ msgid "" "Your reaction time has been greatly enhanced with bionic nerve stimulators, " "giving you a +2 bonus to dexterity." msgstr "" +"Deine Reaktionszeit wurde stark mit bionischen Nevenstimulatoren verbessert, " +"was dir einen +2-Bonus für Geschicklichkeit gibt." #: lang/json/json_bionics.py msgid "Your vision is greatly enhanced, giving you a +2 bonus to perception." msgstr "" +"Deine Sicht ist stark verbessert, was dir einen +2-Bonus für die Wahrnehmung " +"gibt." #: lang/json/json_dreams.py msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14709,6 +15033,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14726,6 +15056,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14734,6 +15068,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14742,6 +15085,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14758,6 +15106,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14783,10 +15135,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14800,6 +15162,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14852,6 +15219,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14864,6 +15241,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14884,10 +15266,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -14936,6 +15326,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -14945,10 +15339,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -15270,6 +15672,8 @@ msgid "" "Ever go toe-to-toe with a manhack? Tiny little helicopters covered in " "knives. Best be packing a shotgun!" msgstr "" +"Schon mal eine Klingendrohne gesehen? Winzige kleine Helikopter, die mit " +"Messern überdeckt sind. Nimm am Besten eine Schrotflinte mit!" #: lang/json/json_hints.py msgid "" @@ -15289,6 +15693,9 @@ msgid "" "Have you heard about those queen triffids? You gotta keep your distance " "from them, unless you like having a tree grow right through your chest." msgstr "" +"Hast du von den Triffid-Königinnen gehört? Du solltest dich von ihnen " +"fernhalten, es sei denn, du magst es, wenn ein Baum mitten durch deine Brust " +"wächst." #: lang/json/json_hints.py msgid "" @@ -15328,6 +15735,8 @@ msgid "" "I figured out how to take care of those triffids! Let me just say this: " "they're made of wood, and wood and fire don't mix." msgstr "" +"Ich habe herausgefunden, wie man sich um diese Triffiden kümmert. Lass mich " +"nur eins sagen: Sie sind aus Holz. Und Holz und Feuer vertragen sich nicht." #: lang/json/json_hints.py msgid "" @@ -15335,6 +15744,10 @@ msgid "" "suddenly woke up to trees and vines growing right up through the floor and " "walls! He said it was some kind of huge triffid making it happen..." msgstr "" +"Ich habe einen Kumpel, der in dieser Blockhütte weit fern in den Wäldern " +"schlafen war, als er plötzlichdavon geweckt wurde, wie Bäumen und Reben, die " +"durch den Fußboden und die Wände wuchsen. Er sagte, dass irgendein riesiger " +"Triffid das angestellt hätte …" #: lang/json/json_hints.py msgid "" @@ -15651,12 +16064,18 @@ msgid "" "Triffids are tough. They've got natural armor, and it takes a lot to bring " "them down. I don't recommend getting into a fight with them." msgstr "" +"Triffiden sind hartnäckig. Sie haben natürliche Rüstung und es braucht viel, " +"um sie zu erledigen. Ich empfehle nicht, sich mit ihnen in einen Kampf zu " +"verwickeln." #: lang/json/json_hints.py msgid "" "Triffids can't see! They figure out where you are by your smell, but if you " "mask it with smoke or something, you're as good as invisible." msgstr "" +"Triffiden können sehen! Sie finden deine Position durch deinen Geruch, aber " +"wenn du ihn mit Rauch oder irgendwas überdeckst, bist du so gut wie nicht " +"auffindbar." #: lang/json/json_hints.py msgid "" @@ -15927,6 +16346,14 @@ msgstr "10mm Auto" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -17061,6 +17488,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17422,6 +17855,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17460,6 +17900,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17740,6 +18186,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18135,6 +18587,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -18147,6 +18613,12 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18659,6 +19131,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18816,6 +19302,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -18839,6 +19333,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -19060,6 +19560,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19201,16 +19707,11 @@ msgid "A sweet red berry." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"Ein Bajonett ist eine Stichwaffe die als Aufsatz an der Spitze einer " -"Schrotflinte, einer Maschinenpistole oder einem Gewehr montiert werden kann. " -"Bei einem Nahkampf wird somit Stichschaden verursacht. Die erhöhte " -"Waffenlänge steigert den Rückstoß geringfügig." #: lang/json/json_items.py msgid "" @@ -20017,6 +20518,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21286,6 +21791,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21317,6 +21828,13 @@ msgstr "Wie Apfelsaft, nur mit Vodka." msgid "Like cola, but without caffeine. Still not that healthy." msgstr "Wie Cola, nur ohne koffein. Trotzdem nicht sehr gesund." +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -21668,6 +22186,18 @@ msgstr "PDA" msgid "PDA - Flashlight" msgstr "PDA - Taschenlampe" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -21856,6 +22386,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -22758,6 +23294,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "Sie sind Blau, was aber nicht heißt, dass sie traurig sind." @@ -22854,6 +23396,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23853,6 +24401,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24171,6 +24725,10 @@ msgid "" "the air. They are covered with whirring blades and attack by throwing " "themselves against their target. Use this item to activate the manhack." msgstr "" +"Dies ist eine inaktive Klingendrohne. Klingendrohnen sind faustgroße " +"Roboter, welche durch die Luft fliegen. Sie sind überdeckt mit schwirrenden " +"Klingen und greifen an, in dem sie sich selbst gegen ihr Ziel schleudern. " +"Benutze dieses Item, um die Klingendrohne zu aktivieren." #: lang/json/json_items.py msgid "" @@ -24219,9 +24777,8 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "Nahrungsmittel für Hunde. Es riecht zwar komisch aber Hunde lieben es." +msgstr "" #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." @@ -24451,6 +25008,20 @@ msgstr "" "im Wirkungsbereich konvertieren vorrübergehend auf deine Seite und kämpfen " "für dich." +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -24594,15 +25165,12 @@ msgstr "" "ist mit einer geringen Abnahme im Schaden und der Genauigkeit zu rechnen." #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." msgstr "" -"Dieses Gerät kann zur Reinigung von verschmutztem Wasser verwendet werden. " -"Wie zum Beispiel Wasser aus einem Fluss oder einer Toilette." #: lang/json/json_items.py msgid "" @@ -24719,6 +25287,12 @@ msgstr "Was ist ein Transistor?" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "Sieh, sobald der Käse rinnt, Kraft dir deine Nudeln bringt." +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -24785,9 +25359,8 @@ msgid "active Granade" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "Aktive Blendgranate" +msgstr "" #: lang/json/json_items.py msgid "active flashbang" @@ -24841,6 +25414,10 @@ msgstr "Verbessertes UPS (an)" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "Aluminiumschläger" @@ -25545,6 +26122,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "Chitin Armschiene" @@ -25701,6 +26282,10 @@ msgstr "Kompositbogen" msgid "compound bow" msgstr "Compoundbogen" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "Konzentrierte Säure" @@ -25789,6 +26374,10 @@ msgstr "Feldbett" msgid "cotton hat" msgstr "Baumwollhaube" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "Crack" @@ -25833,6 +26422,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "Beschädigter Unterschlupfbausatz" @@ -25846,9 +26439,8 @@ msgid "darts" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "Todmüde" +msgstr "" #: lang/json/json_items.py msgid "dead glowstick" @@ -26066,6 +26658,10 @@ msgstr "" msgid "feather" msgstr "Feder" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26155,14 +26751,12 @@ msgid "flannel jacket" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "Geblendet" +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "Geblendet" +msgstr "" #: lang/json/json_items.py msgid "flashbang" @@ -26340,6 +26934,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "Fellhose" @@ -26440,6 +27038,10 @@ msgstr "Unterzieh-Handschuhe" msgid "glowstick" msgstr "Knicklicht" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -26504,6 +27106,10 @@ msgstr "Hammer" msgid "hand press & die set" msgstr "Manuelle Patronenmaschiene" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -26644,6 +27250,10 @@ msgstr "" msgid "holster" msgstr "Halfter" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "Honigwabe" @@ -26686,7 +27296,7 @@ msgstr "Improvisierter Dietrich" #: lang/json/json_items.py msgid "inactive manhack" -msgstr "Inaktiver Manhack" +msgstr "Inaktive Klingendrohne" #: lang/json/json_items.py msgid "inactive turret" @@ -26900,6 +27510,10 @@ msgstr "" msgid "leather jacket" msgstr "Lederjacke" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "Lederne Hose" @@ -26996,6 +27610,10 @@ msgstr "Eidechsenmutagen" msgid "log" msgstr "Holzklotz" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "Long Island Eistee" @@ -27056,6 +27674,10 @@ msgstr "" msgid "makeshift halberd" msgstr "Selbsgebaute Hellebarde" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "Selbsgebaute Machete" @@ -27128,6 +27750,10 @@ msgstr "Verbandmull" msgid "medical gloves" msgstr "Medizinische Handschuhe" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "Medizinisches Band" @@ -27202,11 +27828,11 @@ msgstr "" #: lang/json/json_items.py npctalk.cpp msgid "mininuke" -msgstr "Mini Atombombe" +msgstr "Atombömbchen" #: lang/json/json_items.py msgid "mininuke (active)" -msgstr "Mini Atombombe (aktiv)" +msgstr "Atombömbchen (aktiv)" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "minireactor" @@ -27304,6 +27930,10 @@ msgstr "Nagelbrett" msgid "nail gun" msgstr "Nagelpistole" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -27828,6 +28458,10 @@ msgstr "Lesebrille" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "Recurvebogen" @@ -28124,6 +28758,10 @@ msgstr "Nähzeug" msgid "sharpened metal arrow" msgstr "Geschärfter Metallpfeil" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "Platte" @@ -28440,6 +29078,10 @@ msgstr "" msgid "steel plating" msgstr "Stahlpanzerung" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -28505,9 +29147,8 @@ msgid "string - 6 in" msgstr "Schnur 16cm" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "Sonnenbrille" +msgstr "" #: lang/json/json_items.py msgid "sugar" @@ -28518,9 +29159,8 @@ msgid "suit" msgstr "Anzug" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "Kleid" +msgstr "" #: lang/json/json_items.py msgid "sunglasses" @@ -28603,9 +29243,8 @@ msgid "switchblade" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "Bajonett" +msgstr "" #: lang/json/json_items.py msgid "syringe" @@ -28624,9 +29263,8 @@ msgid "tactical dump pouch" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "Baseballhelm" +msgstr "" #: lang/json/json_items.py msgid "tactical gloves" @@ -28677,9 +29315,8 @@ msgid "tea leaves" msgstr "Teeblätter" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "Waffen" +msgstr "" #: lang/json/json_items.py msgid "teargas canister" @@ -28693,6 +29330,10 @@ msgstr "Teleporter" msgid "television" msgstr "Fernsehr" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "Zelt" @@ -29034,9 +29675,8 @@ msgid "wooden javelin" msgstr "Hölzerner Wurfspeer" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "Hölzerner Wurfspeer" +msgstr "" #: lang/json/json_items.py msgid "woods soup" @@ -29234,6 +29874,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29461,6 +30110,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -29469,6 +30126,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -29581,9 +30247,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "Angriffsgeschwindigkeitsbonus" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -29652,9 +30317,8 @@ msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "Intelligenz" +msgstr "" #: lang/json/json_martialarts.py msgid "Dragon Kung Fu" @@ -29665,9 +30329,8 @@ msgid "Drunk Dodging" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Flat bonus to damage." -msgstr " aber verursacht keinen Schaden." +msgstr "" #: lang/json/json_martialarts.py msgid "Half damage to enemies" @@ -29748,8 +30411,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -29903,9 +30567,8 @@ msgid "Tiger Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "Stärke" +msgstr "" #: lang/json/json_martialarts.py msgid "Toad Armor" @@ -31407,6 +32070,9 @@ msgid "" "petals surrounded by a haze of spores, and two thick barbed vines stick out " "from the stems like wary harpoons." msgstr "" +"Eine schwerfällige und besonders baumartige Triffid. Sie hat enorm große " +"rote Blütenblätter, die von einem Sporendunst umrundet sind, und zwei " +"spitzen Lianen, die von den Stämmen wie Harpunen abstehen." #: lang/json/json_monsters.py msgid "" @@ -31495,6 +32161,8 @@ msgid "" "A small triffid, only a few feet tall. It has not yet developed bark, but " "its sting is still sharp and deadly." msgstr "" +"Ein kleiner Triffid, nur ein paar Fuß hoch. Er hat noch keine Rinde " +"entwickelt, aber sein Stachel ist immer noch scharf und tödlich." #: lang/json/json_monsters.py msgid "" @@ -32382,7 +33050,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "manhack" -msgstr "" +msgstr "Klingendrohne" #: lang/json/json_monsters.py msgid "mi-go" @@ -32558,19 +33226,19 @@ msgstr "" #: lang/json/json_monsters.py msgid "triffid" -msgstr "" +msgstr "Triffid" #: lang/json/json_monsters.py overmap.cpp msgid "triffid heart" -msgstr "" +msgstr "Triffiden-Herz" #: lang/json/json_monsters.py msgid "triffid queen" -msgstr "" +msgstr "Triffid-Königin" #: lang/json/json_monsters.py msgid "triffid sprout" -msgstr "" +msgstr "Triffid-Keim" #: lang/json/json_monsters.py msgid "turkey" @@ -33302,6 +33970,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -33490,6 +34166,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -33855,6 +34535,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34308,6 +34994,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34423,6 +35116,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -44967,7 +45666,7 @@ msgstr "" #: lang/json/json_skills.py msgid "first aid" -msgstr "Erste-Hilfe-Kasten" +msgstr "Erste Hilfe" #: lang/json/json_skills.py msgid "handguns" @@ -45229,6 +45928,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45249,6 +45957,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45259,11 +45971,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45274,6 +46011,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45289,21 +46040,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45319,6 +46100,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45334,14 +46125,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45350,10 +46186,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45362,6 +46238,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45392,6 +46273,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45407,11 +46308,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45422,21 +46338,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45452,11 +46406,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45467,6 +46435,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47445,6 +48418,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -47731,6 +48714,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49038,7 +50026,7 @@ msgstr "" #: monattack.cpp #, c-format msgid "The %s opens its coat, and a manhack flies out!" -msgstr "" +msgstr "Der %s öffnet den Mantel und eine Klingendrohne fliegt hinaus!" #: monattack.cpp #, c-format @@ -49123,7 +50111,7 @@ msgstr "" #: monattack.cpp #, c-format msgid "The %s young triffid grows into an adult!" -msgstr "" +msgstr "Der %s junge Triffide wird erwachsen!" #: monattack.cpp #, c-format @@ -49363,6 +50351,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -49614,7 +50607,7 @@ msgstr "" #: newcharacter.cpp msgid "(Press TAB to move off this line)" -msgstr "" +msgstr "(Drücke Tab, um von dieser Zeile wegzugehen)" #: newcharacter.cpp msgid "< Returns you to the main menu." @@ -49626,11 +50619,11 @@ msgstr "" #: newcharacter.cpp worldfactory.cpp msgid "Are you SURE you're finished?" -msgstr "" +msgstr "Bist du SICHER, dass du fertig bist?" #: newcharacter.cpp msgid "Are you SURE you're finished? Your name will be randomly generated." -msgstr "" +msgstr "Bisd du SICHER, dass du fertig bist? Dein Name wird zufallsgeneriert." #: newcharacter.cpp #, c-format @@ -49652,7 +50645,7 @@ msgstr "" #: newcharacter.cpp msgid "Gender:" -msgstr "" +msgstr "Geschlecht:" #: newcharacter.cpp msgid "Increasing Dex further costs 2 points." @@ -49692,11 +50685,11 @@ msgstr "" #: newcharacter.cpp msgid "Name of template:" -msgstr "" +msgstr "Name der Vorlage:" #: newcharacter.cpp msgid "Name:" -msgstr "" +msgstr "Name:" #: newcharacter.cpp msgid "PROFESSION" @@ -49723,16 +50716,16 @@ msgstr "" #: newcharacter.cpp #, c-format msgid "Points left:%3d " -msgstr "" +msgstr "Verbleibende Punkte:%3d " #: newcharacter.cpp #, c-format msgid "Profession %1$s costs %2$d points (net: %3$d)" -msgstr "" +msgstr "Berufung %1$s kostet %2$d Punkte (Netto: %3$d)" #: newcharacter.cpp msgid "Profession items:" -msgstr "" +msgstr "Berufungs-Items:" #: newcharacter.cpp player.cpp #, c-format @@ -49740,13 +50733,14 @@ msgid "Ranged penalty: -%d" msgstr "" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "Todmüde" +msgstr "" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" msgstr "" +"Die verbleibenden Punkte verfallen, bist du sicher dass du fortfahren willst?" #: newcharacter.cpp msgid "Return to main menu?" @@ -49754,7 +50748,7 @@ msgstr "" #: newcharacter.cpp player.cpp msgid "SKILLS" -msgstr "" +msgstr "FERTIGKEITEN" #: newcharacter.cpp player.cpp msgid "STATS" @@ -49801,24 +50795,26 @@ msgstr "" #: newcharacter.cpp msgid "To go back and review your character, press <" -msgstr "" +msgstr "Um zurückzugehen und deinen Protagonisten zu überprüfen, drück <" #: newcharacter.cpp msgid "To pick a random name for your character, press ?" -msgstr "" +msgstr "Um einen Zufallsnamen für deinen Protagonisten zu wählen, dürck ?" #: newcharacter.cpp msgid "To save this character as a template, press !" -msgstr "" +msgstr "Um diesen Protagonisten als Vorlage zu speichern, drücke !" #: newcharacter.cpp msgid "Too many points allocated, change some features and try again." msgstr "" +"Zu viele Punkte zugewiesen, verändere ein paar Eigenschaften und versuchs " +"noch einmal." #: newcharacter.cpp #, c-format msgid "Upgrading %s costs %d points" -msgstr "" +msgstr "%s aufzuwerten kostet %d Punkte" #: newcharacter.cpp msgid "Use this style?" @@ -49827,7 +50823,7 @@ msgstr "" #: newcharacter.cpp msgid "" "When your character is finished and you're ready to start playing, press >" -msgstr "" +msgstr "Wenn dein Protagonist fertig und du bereit zum Spielen bist, drücke >" #: newcharacter.cpp msgid "You already picked a conflicting trait!" @@ -49835,7 +50831,7 @@ msgstr "" #: newcharacter.cpp msgid "You cannot save a template with nonzero unused points!" -msgstr "" +msgstr "Du kannst eine Vorlage mit unbenutzten oder zu viel benutzen Punkten!" #: newcharacter.cpp #, c-format @@ -49845,16 +50841,15 @@ msgstr "" #: newcharacter.cpp #, c-format msgid "Your profession of %s prevents you from taking this trait." -msgstr "" +msgstr "Deine Profession %s verhindert es, diesen Charakterzug zu wählen" #: newcharacter.cpp msgid "______NO NAME ENTERED!!!______" -msgstr "" +msgstr "__KEINEN NAMEN EINGEGEBEN!!!__" #: newcharacter.cpp -#, fuzzy msgid "h, 4, or left arrow to decrease the statistic." -msgstr " verringert die Statistik." +msgstr "" #: newcharacter.cpp msgid "j/k, 8/2, or up/down arrows to select a statistic." @@ -49865,9 +50860,8 @@ msgid "kg" msgstr "" #: newcharacter.cpp -#, fuzzy msgid "l, 6, or right arrow to increase the statistic." -msgstr " verringert die Statistik." +msgstr "" #: newcharacter.cpp options.cpp player.cpp msgid "lbs" @@ -53119,65 +54113,66 @@ msgstr "" #: overmap.cpp msgid "# Unexplored" -msgstr "" +msgstr "# Unerforscht" #: overmap.cpp msgid "'<' '>' Cycle targets." -msgstr "" +msgstr "»<« »>« Ziele durchblättern." #: overmap.cpp msgid "> More notes" -msgstr "" +msgstr "> Weitere Notizen" #: overmap.cpp #, c-format msgid "Distance to target: %d" -msgstr "" +msgstr "Entfernung zum Ziel: %d" #: overmap.cpp msgid "Enter/Spacebar to select." -msgstr "" +msgstr "Eingabe/Leertaste zum Auswählen" #: overmap.cpp msgid "Find place:" -msgstr "" +msgstr "Ort finden:" #: overmap.cpp msgid "Head West. All survivors, head West. Help is waiting." msgstr "" +"Gehen Sie nach Westen. An alle Überlebende: Geht nach Westen. Hilfe wartet." #: overmap.cpp #, c-format msgid "LEVEL %i" -msgstr "" +msgstr "EBENE %i" #: overmap.cpp msgid "LMOE shelter" -msgstr "" +msgstr "LMOE-Unterschlupf" #: overmap.cpp msgid "Note (X:TEXT for custom symbol):" -msgstr "" +msgstr "Notiz (X:TEXT für eigenes Zeichen):" #: overmap.cpp msgid "Notes:" -msgstr "" +msgstr "Notizen:" #: overmap.cpp msgid "Press letter to center on note" -msgstr "" +msgstr "Drücke Buchstaben, um auf Notiz zu zentrieren" #: overmap.cpp msgid "Really delete note?" -msgstr "" +msgstr "Notiz wirklich löschen?" #: overmap.cpp msgid "Search term:" -msgstr "" +msgstr "Suchbegriff:" #: overmap.cpp msgid "Spacebar - Return to map " -msgstr "" +msgstr "Leertaste – zurück zur Karte " #: overmap.cpp #, c-format @@ -53186,6 +54181,9 @@ msgid "" "food, water, and bedding. This is FEMA camp %d%d. A designated long-term " "emergency shelter." msgstr "" +"Dies ist das FEMA-Lager %d%d. Vorräte sind begrenzt, bitte bringen Sie " +"ergänzede Lebensmittel, Wasser und Betten mit. Dies ist FEMA-Lager %d%d. " +"Eine designierte Langzeit-Notunterkunft." #: overmap.cpp #, c-format @@ -53193,6 +54191,8 @@ msgid "" "This is automated emergency shelter beacon %d%d. Supplies, amenities and " "shelter are stocked." msgstr "" +"Dies ist die automatische Notunterkunftsbake %d%d. Vorräte, Bequemlichkeiten " +"und Unterkunft sind vorrätig." #: overmap.cpp #, c-format @@ -53200,138 +54200,140 @@ msgid "" "This is emergency broadcast station %d%d. Please proceed quickly and calmly " "to your designated evacuation point." msgstr "" +"Dies ist die Notfall-Rundfunkstation %d%d. Bitte gehen sie zügig und ruhig " +"zu dem Ihnen zugewiesenen Evakuations-Punkt." #: overmap.cpp msgid "Use movement keys to pan. " -msgstr "" +msgstr "Bewegungstasten zum Schieben " #: overmap.cpp msgid "abandoned storefront" -msgstr "" +msgstr "verlassenes Geschäft" #: overmap.cpp msgid "ant food storage" -msgstr "" +msgstr "Ameisen-Futterlager" #: overmap.cpp msgid "ant larva chamber" -msgstr "" +msgstr "Ameisenlarven-Kammer" #: overmap.cpp msgid "ant queen chamber" -msgstr "" +msgstr "Ameisenkönigin-Kammer" #: overmap.cpp msgid "ant tunnel" -msgstr "" +msgstr "Ameisentunnel" #: overmap.cpp msgid "anthill" -msgstr "" +msgstr "Ameisenhaufen" #: overmap.cpp msgid "apartment tower" -msgstr "" +msgstr "Wohnhochhaus" #: overmap.cpp msgid "bank" -msgstr "" +msgstr "Bank" #: overmap.cpp msgid "bar" -msgstr "" +msgstr "Kneipe" #: overmap.cpp msgid "basement" -msgstr "" +msgstr "Keller" #: overmap.cpp msgid "bee hive" -msgstr "" +msgstr "Bienenstock" #: overmap.cpp msgid "bridge" -msgstr "" +msgstr "Brücke" #: overmap.cpp msgid "cabin" -msgstr "" +msgstr "Blockhaus" #: overmap.cpp msgid "cabin basement" -msgstr "" +msgstr "Blockhauskeller" #: overmap.cpp msgid "cathedral" -msgstr "" +msgstr "Kathedrale" #: overmap.cpp msgid "cathedral basement" -msgstr "" +msgstr "Kathedralenkeller" #: overmap.cpp msgid "cave" -msgstr "" +msgstr "Höhle" #: overmap.cpp msgid "cavern" -msgstr "" +msgstr "Höhle" #: overmap.cpp msgid "church" -msgstr "" +msgstr "Kirche" #: overmap.cpp msgid "clothing store" -msgstr "" +msgstr "Bekleidungsgeschäft" #: overmap.cpp msgid "coffee shop" -msgstr "" +msgstr "Café" #: overmap.cpp msgid "crater" -msgstr "" +msgstr "Krater" #: overmap.cpp msgid "dirt lot" -msgstr "" +msgstr "Erdlöcher" #: overmap.cpp msgid "doctor's office" -msgstr "" +msgstr "Arztpraxis" #: overmap.cpp msgid "electronics store" -msgstr "" +msgstr "Elektronikfachgeschäft" #: overmap.cpp msgid "evac shelter" -msgstr "" +msgstr "Notunterkunft" #: overmap.cpp msgid "farm" -msgstr "" +msgstr "Bauernhaus" #: overmap.cpp msgid "farm field" -msgstr "" +msgstr "Bauernhof" #: overmap.cpp msgid "fast food restaurant" -msgstr "" +msgstr "Fast-Food-Restaurant" #: overmap.cpp msgid "fema camp" -msgstr "" +msgstr "FEMA-Lager" #: overmap.cpp msgid "field" -msgstr "" +msgstr "Feld" #: overmap.cpp msgid "forest" -msgstr "" +msgstr "Wald" #: overmap.cpp msgid "fungal bloom" @@ -53339,251 +54341,251 @@ msgstr "" #: overmap.cpp msgid "furniture store" -msgstr "" +msgstr "Möbelgeschäft" #: overmap.cpp msgid "garage" -msgstr "" +msgstr "Garage" #: overmap.cpp msgid "gas station" -msgstr "" +msgstr "Tankstelle" #: overmap.cpp msgid "grocery store" -msgstr "" +msgstr "Lebensmittelgeschäft" #: overmap.cpp msgid "gun store" -msgstr "" +msgstr "Waffengeschäft" #: overmap.cpp msgid "hardware store" -msgstr "" +msgstr "Baumarkt" #: overmap.cpp msgid "hazardous waste sarcophagus" -msgstr "" +msgstr "Gefahrenstoff-Sarkophag" #: overmap.cpp msgid "hellmouth" -msgstr "" +msgstr "Höllenschlund" #: overmap.cpp msgid "highway" -msgstr "" +msgstr "Schnellstraße" #: overmap.cpp msgid "hospital" -msgstr "" +msgstr "Krankenhaus" #: overmap.cpp msgid "hotel basement" -msgstr "" +msgstr "Hotelkeller" #: overmap.cpp msgid "hotel entrance" -msgstr "" +msgstr "Hoteleingang" #: overmap.cpp msgid "hotel parking" -msgstr "" +msgstr "Hotelparkplatz" #: overmap.cpp msgid "hotel tower" -msgstr "" +msgstr "Hotelturm" #: overmap.cpp msgid "house" -msgstr "" +msgstr "Wohnhaus" #: overmap.cpp msgid "library" -msgstr "" +msgstr "Bibliothek" #: overmap.cpp msgid "liquor store" -msgstr "" +msgstr "Spirituosenladen" #: overmap.cpp msgid "mansion" -msgstr "" +msgstr "Villa" #: overmap.cpp msgid "megastore" -msgstr "" +msgstr "Riesensupermarkt" #: overmap.cpp msgid "mil. surplus" -msgstr "" +msgstr "Militärüberschuss-Geschäft" #: overmap.cpp msgid "military bunker" -msgstr "" +msgstr "Militärbunker" #: overmap.cpp msgid "military outpost" -msgstr "" +msgstr "Militär-Außenposten" #: overmap.cpp msgid "mine" -msgstr "" +msgstr "Mine" #: overmap.cpp msgid "mine entrance" -msgstr "" +msgstr "Mineneingang" #: overmap.cpp msgid "mine shaft" -msgstr "" +msgstr "Minenschacht" #: overmap.cpp msgid "missile silo" -msgstr "" +msgstr "Raketensilo" #: overmap.cpp msgid "nuclear plant" -msgstr "" +msgstr "kerntechnische Anlage" #: overmap.cpp msgid "office" -msgstr "" +msgstr "Büro" #: overmap.cpp msgid "office tower" -msgstr "" +msgstr "Bürohochhaus" #: overmap.cpp msgid "park" -msgstr "" +msgstr "Park" #: overmap.cpp msgid "parking lot" -msgstr "" +msgstr "Parkplatz" #: overmap.cpp msgid "pawn shop" -msgstr "" +msgstr "Pfandleihgeschäft" #: overmap.cpp msgid "pharmacy" -msgstr "" +msgstr "Apotheke" #: overmap.cpp msgid "police station" -msgstr "" +msgstr "Polizeidienststelle" #: overmap.cpp msgid "pool" -msgstr "" +msgstr "Pool" #: overmap.cpp msgid "prison" -msgstr "" +msgstr "Gefängnis" #: overmap.cpp msgid "public works" -msgstr "" +msgstr "öffentliche Bauarbeiten" #: overmap.cpp msgid "q to return." -msgstr "" +msgstr "»q« zum Zurückkehren" #: overmap.cpp msgid "radio station" -msgstr "" +msgstr "Radiostation" #: overmap.cpp msgid "rat cave" -msgstr "" +msgstr "Rattenhöhle" #: overmap.cpp msgid "regional school" -msgstr "" +msgstr "regionale Schule" #: overmap.cpp msgid "restaurant" -msgstr "" +msgstr "Restaurant" #: overmap.cpp msgid "rift" -msgstr "" +msgstr "Spalte" #: overmap.cpp msgid "river" -msgstr "" +msgstr "Fluss" #: overmap.cpp msgid "river bank" -msgstr "" +msgstr "Flussufer" #: overmap.cpp msgid "road" -msgstr "" +msgstr "Straße" #: overmap.cpp msgid "road, manhole" -msgstr "" +msgstr "Straße, Gullyloch" #: overmap.cpp msgid "science lab" -msgstr "" +msgstr "wissenschaftliches Labor" #: overmap.cpp msgid "sewage treatment" -msgstr "" +msgstr "Abwasserkläranlage" #: overmap.cpp msgid "sewer" -msgstr "" +msgstr "Abwasserkanal" #: overmap.cpp msgid "slime pit" -msgstr "" +msgstr "Schleimgrube" #: overmap.cpp msgid "spiral cavern" -msgstr "" +msgstr "Spiralenhöhle" #: overmap.cpp msgid "sporting goods store" -msgstr "" +msgstr "Sportgeschäft" #: overmap.cpp msgid "strange temple" -msgstr "" +msgstr "seltsamer Tempel" #: overmap.cpp msgid "subway" -msgstr "" +msgstr "U-Bahn" #: overmap.cpp msgid "subway station" -msgstr "" +msgstr "U-Bahn-Station" #: overmap.cpp msgid "swamp" -msgstr "" +msgstr "Sumpf" #: overmap.cpp msgid "tower parking" -msgstr "" +msgstr "Hochhaus-Parkplatz" #: overmap.cpp msgid "toxic waste dump" -msgstr "" +msgstr "Giftmülldeponie" #: overmap.cpp msgid "triffid grove" -msgstr "" +msgstr "Triffiden-Hain" #: overmap.cpp msgid "triffid roots" -msgstr "" +msgstr "Triffiden-Wurzeln." #: overmap.cpp msgid "tutorial room" -msgstr "" +msgstr "Übungszimmer" #: player.cpp msgid " " @@ -53748,7 +54750,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -53802,7 +54804,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "Feuerstoß" @@ -54280,10 +55282,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "Normal" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -54731,6 +55729,11 @@ msgstr "" msgid "Weapon: %s" msgstr "Waffe: %s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -54932,7 +55935,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55338,6 +56341,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" @@ -56409,12 +57417,12 @@ msgstr "" #: weather.cpp #, c-format msgid "%sC" -msgstr "" +msgstr "%s °C" #: weather.cpp #, c-format msgid "%sF" -msgstr "" +msgstr "%s °F" #: weather.cpp #, c-format @@ -56535,23 +57543,24 @@ msgstr "" #: wish.cpp msgid "Category:" -msgstr "" +msgstr "Kategorie:" #: wish.cpp msgid "How many?" -msgstr "" +msgstr "Wie viele?" #: wish.cpp msgid "Item granted, choose another or 'q' to quit." -msgstr "" +msgstr "Wunsch erfüllt, wünsch dir noch was oder drücke »q« zum Verlassen." #: wish.cpp msgid "Monster spawned, choose another or 'q' to quit." msgstr "" +"Monster auftauchen gelassen, wähle noch eins oder drück »q« zum Verlassen." #: wish.cpp msgid "Nonvalid" -msgstr "" +msgstr "Ungültig" #: wish.cpp msgid "Prereqs:" @@ -56559,371 +57568,390 @@ msgstr "" #: wish.cpp msgid "Valid" -msgstr "" +msgstr "Gültig" #: worldfactory.cpp msgid " WORLD SELECTION " -msgstr "" +msgstr " WELTENWAHL " #: worldfactory.cpp #, c-format msgid "%s is not a valid world name, already exists!" -msgstr "" +msgstr "»%s« ist kein gültiger Weltname, er existiert bereits!" #: worldfactory.cpp #, c-format msgid "%s is not a valid world name, it is a reserved name" -msgstr "" +msgstr "»%s« ist kein gültiger Weltname, er ist reserviert." #: worldfactory.cpp msgid "" "Are you SURE you're finished? Your world's name will be randomly generated." msgstr "" +"Bist du SICHER, dass du fertig bist? Dein Weltname wird zufallsgeneriert." #: worldfactory.cpp msgid "CONFIRMATION" -msgstr "" +msgstr "BESTÄTIGUNG" #: worldfactory.cpp msgid "Do you want to abort World Generation?" -msgstr "" +msgstr "Willst du die Weltgenerierung abbrechen?" #: worldfactory.cpp #, c-format msgid "Do you want to start the game in world [%s]?" -msgstr "" +msgstr "Willst du das Spiel in der Welt »%s« starten?" #: worldfactory.cpp #, c-format msgid "Page %d" -msgstr "" +msgstr "Seite %d" #: worldfactory.cpp msgid "Pick a world to enter game" -msgstr "" +msgstr "Wähle eine Welt, um das Spiel zu starten" #: worldfactory.cpp msgid "To go back and review your world, press <" -msgstr "" +msgstr "Um zurückzugehen, und deine Welt zu überprüfen, drücke <" #: worldfactory.cpp msgid "To pick a random name for your world, press ?." -msgstr "" +msgstr "Um einen Zufallsnahmen für deine Welt auszuwählen, drücke ?." #: worldfactory.cpp msgid "" "When you are satisfied with the world as it is and are ready to continue, " "press >" msgstr "" +"Sobald du zufrieden mit der Welt und du bereit zum Fortfahren bist, drücke >" #: worldfactory.cpp msgid "World Gen Options" -msgstr "" +msgstr "Weltgenerator-Optionen" #: worldfactory.cpp msgid "World Name:" -msgstr "" +msgstr "Weltname:" #: worldfactory.cpp msgid "______NO NAME ENTERED!!!!_____" -msgstr "" +msgstr "__KEINEN NAMEN EINGEGEBEN!!!__" -#, fuzzy -#~ msgid "Start cart construction" -#~ msgstr " Konstruktion " +#~ msgid " but do no damage." +#~ msgstr " aber verursachen keinen Schaden." -#, fuzzy -#~ msgid "%1$s elbows %4$s" -#~ msgstr "%1$s wehrt %4$s ab" +#~ msgid " for %d damage." +#~ msgstr " . %d Schaden!" -#, fuzzy -#~ msgid "%1$s side-kicks %4$s" -#~ msgstr "%1$s hackt %4$s" +#~ msgid "%1$s batter %4$s" +#~ msgstr "%1$s schlägst %4$s" -#, fuzzy -#~ msgid "%1$s sweep-kicks %4$s" -#~ msgstr "%1$s hackt %4$s" +#~ msgid "%1$s batters %4$s" +#~ msgstr "%1$s schlägt %4$s" -#~ msgid "Quit" -#~ msgstr "Beenden" +#~ msgid "%1$s block %4$s" +#~ msgstr "%1$s wehrst %4$s ab" -#~ msgid "Load" -#~ msgstr "Laden" +#~ msgid "%1$s blocks %4$s" +#~ msgstr "%1$s wehrt %4$s ab" -#~ msgid "Painkillers made by refining mutated poppy seeds.." -#~ msgstr "Schmerztablette hergestellt aus rafinierten poppy samen.." +#~ msgid "%1$s bluff %4$s" +#~ msgstr "%1$s täuschst %4$s" -#~ msgid "Sleeping pills made by refining mutated poppy seeds." -#~ msgstr "Schlaftabletten. Hergestellt aus gemahlenen mutierten Poppysamen." +#~ msgid "%1$s bluffs %4$s" +#~ msgstr "%1$s täuscht %4$s" -#~ msgid "marijuana" -#~ msgstr "Marihuana" +#~ msgid "%1$s brutally kick %4$s" +#~ msgstr "%1$s trittst %4$s brutal" -#~ msgid "" -#~ "Vital medicine for those with asthma. Those without asthma can use it for " -#~ "a minor stimulant boost." -#~ msgstr "" -#~ "Lebensnodwendige Medizin für Asthmatiker. Personen ohne Asthma können den " -#~ "Spray als leichtes Aufputschmittel verwenden." +#~ msgid "%1$s brutally kicks %4$s" +#~ msgstr "%1$s tritt %4$s brutal" -#~ msgid "Daytime flu medication. Will halt all flu symptoms for a while." -#~ msgstr "" -#~ "Tageszeitliche Medizin gegen Grippe. Stoppt Grippesymptome für eine Weile." +#~ msgid "%1$s clobber %4$s" +#~ msgstr "%1$s verprügelst %4$s" -#~ msgid "Provides long lasting protection against sickness." -#~ msgstr "Gewährt langanhaltenden Schutz gegen Krankheit." +#~ msgid "%1$s clobbers %4$s" +#~ msgstr "%1$s verprügelt %4$s" -#~ msgid "Vaccine shot" -#~ msgstr "Grippeimpfung" +#~ msgid "%1$s counter-attack %4$s" +#~ msgstr "%1$s konterst %4$s" -#~ msgid "Take frequently to improve your immune system." -#~ msgstr "Benutze diese regelmäßig um dein Immunsystem zu stärken." +#~ msgid "%1$s counter-attacks %4$s" +#~ msgstr "%1$s kontert %4$s" -#~ msgid "Screwdriver" -#~ msgstr "Schraubenzieher." +#~ msgid "%1$s cut %4$s" +#~ msgstr "%1$s schneidest %4$s" -#~ msgid "Debug messages %s!" -#~ msgstr "Debug Nachrichten %s!" +#~ msgid "%1$s cuts %4$s" +#~ msgstr "%1$s schneidet %4$s" -#~ msgid "Your hands are very exposed to the cold. Your hands are shivering." -#~ msgstr "Deine Hände sind der Kälte extrem ausgesetzt. Deine Hände zittern." +#~ msgid "%1$s disarm %4$s" +#~ msgstr "%1$s entwaffnest %4$s" -#~ msgid "" -#~ "Your head is dangerously cold. Getting undressed sounds like a good idea." -#~ msgstr "" -#~ "Dein Kopf ist gefährlich kalt. Sich nakt auszuziehen hört sich wie eine " -#~ "gute Idee an." +#~ msgid "%1$s disarms %4$s" +#~ msgstr "%1$s entwaffnet %4$s" -#~ msgid "Of course... it's all fractals!" -#~ msgstr "Natürlich... es sind alles nur Dimensionen!" +#~ msgid "%1$s feint at %4$s" +#~ msgstr "%1$s täuschst %4$s" -#~ msgid "Oh god, what's happening?" -#~ msgstr "Oh Gott, was passiert hier?" +#~ msgid "%1$s feints at %4$s" +#~ msgstr "%1$s täuscht %4$s" -#~ msgid "Huh? What was that?" -#~ msgstr "Hmm? Was was das?" +#~ msgid "%1$s grab %4$s" +#~ msgstr "%1$s packst %4$s" -#~ msgid "Fully rested." -#~ msgstr "Komplett erholt." +#~ msgid "%1$s grabs %4$s" +#~ msgstr "%1$s packt %4$s" -#~ msgid "Your feet feel numb." -#~ msgstr "Deine Füße fühlen sich taub an." +#~ msgid "%1$s hack %4$s" +#~ msgstr "%1$s hackst %4$s" -#~ msgid "Your hands are shivering." -#~ msgstr "Deine Hände zittern." +#~ msgid "%1$s hacks %4$s" +#~ msgstr "%1$s hackt %4$s" -#~ msgid "Your torso is burning up. You should remove some layers." -#~ msgstr "Dein Oberkörper brennt vor hitze. Du solltest etwas ausziehen." +#~ msgid "Delete World" +#~ msgstr "Welt löschen" -#~ msgid " and do damage to your genetics, causing mutation." -#~ msgstr "und beschädigen deine Gene, was zu Mutationen führt." +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "Käfer krabbeln unter deiner Haut!" -#~ msgid " and some of your existing bionics are lost." -#~ msgstr "und einige deiner bestehenden Bioniken gehen verloren." +#~ msgid "You start scratching yourself all over!" +#~ msgstr "Du fängst an dich am ganzen Körper zu kratzen!" -#~ msgid " and all of your existing bionics are lost." -#~ msgstr "und all deine bestehenden Bioniken gehen verloren." +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s fängt an sich überall zu kratzen!" -#~ msgid " and your body is damaged." -#~ msgstr "und dein Körper ist verletzt." +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s fängt an sich überall zu kratzen!" -#~ msgid " Move up/down " -#~ msgstr "Nach oben/unten gehen" +#~ msgid "Your bite wound really hurts." +#~ msgstr "Deine Bisswunde schmerzt sehr." -#~ msgid "You have a craving for crack." -#~ msgstr "Du hast ein heftiges Verlangen nach Crack." +#~ msgid "Your bite wound feels swollen and painful." +#~ msgstr "Dein Bisswunde fühlt sich geschwollen und schmerzhaft an." + +#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." +#~ msgstr "" +#~ "Du fühlst dich fibrig und übel, deine Wunde hat angefangen sich grün zu " +#~ "färben." -#~ msgid "You have a craving." -#~ msgstr "Du spürst deine Sucht." +#~ msgid "Spores" +#~ msgstr "Sporen" -#~ msgid "You have a speed craving." -#~ msgstr "Du hast ein heftiges Verlangen nach Speed." +#~ msgid "Bleeding" +#~ msgstr "Blutung" -#~ msgid "You have a craving for cocaine." -#~ msgstr "Du hast ein heftiges Verlangen nach Kokain." +#~ msgid "Bugs Under Skin" +#~ msgstr "Käfer unter der Haut" -#~ msgid "You have an opiate craving." -#~ msgstr "Du hast ein heftiges Verlangen nach Opium." +#~ msgid "Bite Wound" +#~ msgstr "Bisswunde" -#~ msgid "You have an alcohol craving." -#~ msgstr "Du hast ein heftiges Verlangen nach Alkohol" +#~ msgid "Painful Bite Wound" +#~ msgstr "Schmerzhafte Bisswunde" -#~ msgid "You have a nicotine craving." -#~ msgstr "Du hast ein heftiges Verlangen nach Nikotin." +#~ msgid "Infected Wound" +#~ msgstr "Inzizierte Wunde" -#~ msgid "You have a caffeine craving." -#~ msgstr "Du hast ein heftiges Verlangen nch Nikotin." +#~ msgid "Painful Infected Wound" +#~ msgstr "Schmerzhafte infizierte Wunde" -#~ msgid "A decent sized piece of cotton designed for medical purposes." -#~ msgstr "" -#~ "Ein großzügig geschnittenes Baumwolltuch. Für medizinische Zwecke " -#~ "geeignet." +#~ msgid "Pus Filled Wound" +#~ msgstr "Eitergefüllte Wunde" -#~ msgid "" -#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " -#~ "enjoy." -#~ msgstr "" -#~ "In Plastikbeutel vakuumierte Apfelstücke. Aktivieren um sie zu Öffnen und " -#~ "zu Genießen." +#~ msgid "MEDICINE/DRUGS" +#~ msgstr "MEDIZIN/DROGEN" -#~ msgid "vacuum-packed apple slices" -#~ msgstr "Vakuumverpackte Apfelstücke" +#~ msgid "MODS/BIONICS" +#~ msgstr "MODULE/BIONISCHES" + +#~ msgid "Error: Item Missing." +#~ msgstr "Felher: Fehlender Gegenstand." #~ msgid "" -#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " -#~ "enjoy." +#~ "There is only the space where an object should be, but isn't. No item " +#~ "template of this type exists." #~ msgstr "" -#~ "In Plastikbeutel vakuumierte Gemüsestücke. Aktivieren um sie zu Öffnen " -#~ "und zu Genießen." +#~ "There is only the space where an object should be, but isn't. No item " +#~ "template of this type exists." #~ msgid "" -#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " -#~ "enjoy." +#~ "9 millimeter parabellum is generally regarded as the most popular handgun " +#~ "cartridge, used by the majority of US police forces. It is also a very " +#~ "popular round in sub-machine guns." #~ msgstr "" -#~ "In Plastikbeutel vakuumierte Fleischstücke. Aktivieren um sie zu Öffnen " -#~ "und zu Genießen." +#~ "Die 9 millimeter Parabellum wird generell als die wohl populärste " +#~ "Pistolen Munition gehandelt. Und findet ihren Einsatz im großteil der " +#~ "amerikanischen Polizei. Ausserdem ist sie sehr Populär in diversen " +#~ "Maschinengewehren." #~ msgid "" -#~ "A cordless drill with a selection of drill bits. The charger base " -#~ "contains a battery draining attachment so the drill can be charged in " -#~ "lieu of mains power." +#~ "This small caliber pistol round offers quite good armor penetration at " +#~ "the cost of slightly less damage. It is rarely used outside of the " +#~ "Chinese army." #~ msgstr "" -#~ "Ein kabelloser Bohrer mit einer Auswahl an Bohreinsätzen. Die " -#~ "Ladevorrichtung hateinen Aufsatz für Batterien und ist somit auch ohne " -#~ "einen 230V Anschluss aufladbar." +#~ "Diese kleinkalibrige Pistolenmunition bietet einen relativ guten " +#~ "Rüstungsdurchschlag bei nur geringfügig niedrigerem Schaden. Es wird " +#~ "hauptsächlich von der Cinesischen Armee verwendet." -#~ msgid "sealed jar of canned apple" -#~ msgstr "Einmachglas mit Apfel" +#~ msgid "A 40mm grenade with a concussive explosion." +#~ msgstr "Eine 40mm Granate mit verlangsamernder Wirkung." #~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." +#~ "A 40mm grenade with a small explosion and a high number of damaging " +#~ "fragments." #~ msgstr "" -#~ "Ein falscher Stein welcher auf einen Stock gebunden wurde. Funktioniert " -#~ "einigermaßen als Schaufel, kann aber noch lange nicht mit einer richtigen " -#~ "mithalten." +#~ "Eine 40mm Splittergranate mit einem kleinen Sprengradius aber einer " +#~ "großen Anzahl tötlicher absplitternder Teilfragmente." #~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." +#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " +#~ "feet of concrete." #~ msgstr "" -#~ "Ein King Size(tm) superstarker industrie Filzstift. Er ist in etwa halb " -#~ "so groß wie eine Farbsprühdose." +#~ "Eine 60mm hochexplosives und panzerbrechendes Projektil. Kann eine " +#~ "Betonwand, mit bis zu 60cm dicke, durchbrechen." -#~ msgid "" -#~ "A combination lock box, breaking inside would destroy anything of value." -#~ msgstr "" -#~ "Eine, mit einem Kombinationsschloss, verschlossene Kiste. Sie " -#~ "aufzubrechen würde alles von Wert in ihr zerstören." +#~ msgid "long underwear" +#~ msgstr "Lange Unterwäsche" + +#~ msgid "plate mail" +#~ msgstr "Plattenrüstung" + +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "Ein wenig einengend wenn getragen, bietet jedoch etwas an Stauraum." #~ msgid "" -#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " -#~ "quickly opening locks." +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." #~ msgstr "" -#~ "Ein Sortiment von stahl Dietrichen wie sie von Schlossern verwendet " -#~ "werden. Sie eignen sich hervorragend für leises und sehr schnelles öffnen " -#~ "von Schlössern." +#~ "Dies ist eine Radioaktivitätsplakette die in einem Strahlungssicheren " +#~ "Beutel verstaut ist. Bei Verwendung wird sie aus dem Beutel geholt und " +#~ "ist somit akiv." #~ msgid "" -#~ "A Philips-head screwdriver, important for almost all electronics crafting " -#~ "and most mechanics crafting." +#~ "Will you be able to place the arrow right into bull's eye? It is not that " +#~ "easy, but once you know how it's done, you will have a lot of fun with " +#~ "archery." #~ msgstr "" -#~ "Ein standard Kreuz-Schraubenzieher. Wichtig für die Herstellung nahezu " -#~ "aller elektronischen und der meisten mechanischen Gegenstände." +#~ "Wirst du es schaffen, den Pfeil genau in die mitte der Zielscheibe zu " +#~ "schießen? Das ist gar nicht so einfach wie man denkt. Aber wenn du erst " +#~ "einmal den Dreh raus hast wirst du eine menge Spass am Bogenschießen " +#~ "haben." -#~ msgid "A crude explosive device triggered by a piece of string." -#~ msgstr "" -#~ "Ein simpler explosiver Apparat welcher mit einer Schnur ausgelöst wird." +#~ msgid "beef jerky" +#~ msgstr "Dörrfleisch" -#~ msgid "" -#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " -#~ "before it explodes." -#~ msgstr "" -#~ "Ein angezündeter Knallfrosch mit zischender Lunte. Wirf ihn schnell weg " -#~ "bevor er explodiert." +#~ msgid "cooked spaghetti" +#~ msgstr "Gekochte Spaghetti" + +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "Igitt, nicht sehr schmackhaft aber sehr füllend." + +#~ msgid "sardines" +#~ msgstr "Sardinen" + +#~ msgid "tuna fish" +#~ msgstr "Tunfisch" #~ msgid "" -#~ "A firecracker with a short fuse. Use this item to light the fuse; you " -#~ "will need a lighter of course. Shortly after you light the fuse it will " -#~ "explode, so throw it quickly!" +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." #~ msgstr "" -#~ "Ein Knallfrosch mit einer kurzen Lunte. Benutze ihn um ihn anzuzünden, du " -#~ "brauchst dafür natürlich ein Feuerzeug. Kurz nach dem Anzüden explodiert " -#~ "er, also wirf ihn besser schnell weg!" +#~ "Ein deformierter menschlicher Fötus. Ihn zu essen wäre extrem widerlich " +#~ "und würde deine DNA mutieren lassen." + +#~ msgid "This white flour is useful for baking." +#~ msgstr "Dieses weisse Mehl kann zum Backen verwendet werden." + +#~ msgid "canned apple slices" +#~ msgstr "Konservierungsdose mit Apfelstücken" #~ msgid "" -#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " -#~ "the rag; you will, of course, need a lighter in your inventory to do " -#~ "this. After lighting it, throw it to cause fires." +#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " +#~ "color." #~ msgstr "" -#~ "Eine Flasche gefüllt mit einer brennbaren Flüssigkeit und mit einem " -#~ "Lappen verschlossen. Benutze den Gegenstand um den Lappen zu entzünden. " -#~ "Du brauchst dazu natürlich ein Feuerzeug. Nachdem der Lappen entzunden " -#~ "ist, kann die Flasche geworfen werden um etwas zu entflammen." +#~ "Einmachglas mit konservierten Äpfeln. Fade, schwammig und ohne viel Farbe." -#~ msgid "active teargas" -#~ msgstr "Aktives Tränengas" +#~ msgid "apple slices" +#~ msgstr "Apfelstücke" + +#~ msgid ".45 caliber retool" +#~ msgstr ".45 Kaliber umwandler" + +#~ msgid "9mm caliber retool" +#~ msgstr "9mm Kaliber umwandler" + +#~ msgid ".22 caliber retool" +#~ msgstr ".22 Kaliber umwandler" + +#~ msgid "5.7mm caliber retool" +#~ msgstr "5.7mm Kaliber umwandler" + +#~ msgid "4.6mm caliber retool" +#~ msgstr "4.6mm Kaliber umwandler" + +#~ msgid ".308 caliber retool" +#~ msgstr ".308 Kaliber umwandler" + +#~ msgid ".223 caliber retool" +#~ msgstr ".223 Kaliber umwandler" #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " -#~ "will then have three turns before it detonates, creating an EMP field " -#~ "that damages robots and drains bionic energy." +#~ "A fire drill is a simple item for firestarting, made from two pieces of " +#~ "wood and some string. Although it is constructed out of simple materials, " +#~ "it's slow and rather difficult to get a fire started with this tool." #~ msgstr "" -#~ "Aktiviere den Gegenstand um den Splint zu ziehen. Nach 3 Runden " -#~ "explodiert die Granate und erzeugt dabei ein elektromagnetisches Feld, " -#~ "welches Roboter beschädigt und bionischen Bauteilen Energie entzieht." +#~ "Ein Feuerbohrer ist ein archaisches Gerät zum Feuermachen. Hergestellt " +#~ "aus 2 Holzstücken und ein wenig Schnur. Trotz der simplen Bauweise, kann " +#~ "es recht langsam und schwierig sein damit ein Feuer zu entfachen." #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active flashbang. You " -#~ "will then have five turns before it detonates with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ "Use a sewing kit on an article of clothing to attempt to repair or " +#~ "reinforce that clothing. This uses your tailoring skill." #~ msgstr "" -#~ "Aktiviere den Gegenstand um den Splint zu ziehen. Nach 5 Runden " -#~ "explodiert die Granate mit einem lauten Knall und grellen Lichtblitz, der " -#~ "jeden in Reichweite blendet, betäubt und disorientiert." +#~ "Benutze die Nähausrüstung um Kleidung zu reparieren oder zu verstärken. " +#~ "Dies benötigt deinen Schneiderfertigkeit." #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active grenade. You " -#~ "will then have five turns before it explodes; throwing it would be a good " -#~ "idea." +#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." #~ msgstr "" -#~ "Aktiviere den Gegenstand um den Splint zu ziehen. Nach 5 Runden " -#~ "explodiert die Granate und richtet hohen schaden an. Sie zu werfen wäre " -#~ "eine guter Anfang." +#~ "Benutze die Scheere um Gegenstände aus Baumwolle (meist Kleidung) in " +#~ "Stoffstücke zu zerlegen." #~ msgid "" -#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " -#~ "sentient. Open at your own risk.\"" +#~ "Use a hammer, with nails and two by fours in your inventory, to board up " +#~ "adjacent doors and windows." #~ msgstr "" -#~ "\"Warnung: Enthält höchst toxische und korrodierende Substanzen. Inhalte " -#~ "können empfindlich sein. Öffnen nur auf eigenes Risiko.\"" +#~ "Benutze den Hammer zusammen mit Nägeln und Holzbrettern um naheliegende " +#~ "Türen und Fenster zuzunageln." -#~ msgid "bubblewrap" -#~ msgstr "Luftpolsterfolie" +#~ msgid "Use a fire extinguisher to put out adjacent fires." +#~ msgstr "Benutze den Feuerlöscher um Feuerstellen um dich herum zu löschen." #~ msgid "" -#~ "Using this item will, if loaded with gas, cause it to turn on, making a " -#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." +#~ "With enough electronics skill, you could attach this to your devices to " +#~ "increase their battery capacity." #~ msgstr "" -#~ "Wenn dieser Geganstand mit Gas gefüllt ist und dabei aktiviert wird, " -#~ "erhält man eine sehr starke jedoch langsame, schwerfällige und laute " -#~ "Nahkampfwaffe." - -#~ msgid "A digging tool. Use it to dig pits adjacent to your location." -#~ msgstr "Ein Werkzeug zum Graden. Benutze es um Löcher auszuheben." +#~ "Mit genügen elektronik Erfahrung könntest du diesen Gegenstand dazu " +#~ "benutzen um die Batterikapazität diverser Geräte zu erhöhen." #~ msgid "" -#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " -#~ "pile of dirt." +#~ "Using this flashlight will turn it on, assuming it is charged with " +#~ "batteries. A turned-on flashlight will provide light during the night or " +#~ "while underground." #~ msgstr "" -#~ "Ein landwirtschaftliches Hilfsmittel. Kann benutzt werden um Erde in " -#~ "einen schwer passierbaren Wall aufzuschütten." +#~ "Eine einfache Taschanlampe. Wenn Batterien eingelegt sind, kann sie für " +#~ "die Erkundung im Freien oder zum abendlichen Lesen im Bett verwendet " +#~ "werden." #~ msgid "" -#~ "Using this radio turns it on. It will pick up any nearby signals being " -#~ "broadcast and play them audibly." +#~ "A burnt-out lightstrip. You could disassemble this to recover the " +#~ "amplifier circuit." #~ msgstr "" -#~ "Aktiviere dieses Radio um Signale in der näheren Umgebung zu empfangen." +#~ "Ein ausgebrannter Lichtstreifen. Du könntest ihn zerlegen um an die " +#~ "Verstärkerschaltung zu gelangen." #~ msgid "" #~ "Using this allows you to send out a signal; either a general SOS, or if " @@ -56933,315 +57961,298 @@ msgstr "" #~ "einer Fraktion bist mit dieser Kontakt aufgenommen, werden." #~ msgid "" -#~ "A burnt-out lightstrip. You could disassemble this to recover the " -#~ "amplifier circuit." +#~ "Using this radio turns it on. It will pick up any nearby signals being " +#~ "broadcast and play them audibly." #~ msgstr "" -#~ "Ein ausgebrannter Lichtstreifen. Du könntest ihn zerlegen um an die " -#~ "Verstärkerschaltung zu gelangen." +#~ "Aktiviere dieses Radio um Signale in der näheren Umgebung zu empfangen." #~ msgid "" -#~ "Using this flashlight will turn it on, assuming it is charged with " -#~ "batteries. A turned-on flashlight will provide light during the night or " -#~ "while underground." +#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " +#~ "pile of dirt." #~ msgstr "" -#~ "Eine einfache Taschanlampe. Wenn Batterien eingelegt sind, kann sie für " -#~ "die Erkundung im Freien oder zum abendlichen Lesen im Bett verwendet " -#~ "werden." +#~ "Ein landwirtschaftliches Hilfsmittel. Kann benutzt werden um Erde in " +#~ "einen schwer passierbaren Wall aufzuschütten." + +#~ msgid "A digging tool. Use it to dig pits adjacent to your location." +#~ msgstr "Ein Werkzeug zum Graden. Benutze es um Löcher auszuheben." #~ msgid "" -#~ "With enough electronics skill, you could attach this to your devices to " -#~ "increase their battery capacity." +#~ "Using this item will, if loaded with gas, cause it to turn on, making a " +#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." #~ msgstr "" -#~ "Mit genügen elektronik Erfahrung könntest du diesen Gegenstand dazu " -#~ "benutzen um die Batterikapazität diverser Geräte zu erhöhen." +#~ "Wenn dieser Geganstand mit Gas gefüllt ist und dabei aktiviert wird, " +#~ "erhält man eine sehr starke jedoch langsame, schwerfällige und laute " +#~ "Nahkampfwaffe." -#~ msgid "Use a fire extinguisher to put out adjacent fires." -#~ msgstr "Benutze den Feuerlöscher um Feuerstellen um dich herum zu löschen." +#~ msgid "bubblewrap" +#~ msgstr "Luftpolsterfolie" #~ msgid "" -#~ "Use a hammer, with nails and two by fours in your inventory, to board up " -#~ "adjacent doors and windows." +#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " +#~ "sentient. Open at your own risk.\"" #~ msgstr "" -#~ "Benutze den Hammer zusammen mit Nägeln und Holzbrettern um naheliegende " -#~ "Türen und Fenster zuzunageln." +#~ "\"Warnung: Enthält höchst toxische und korrodierende Substanzen. Inhalte " +#~ "können empfindlich sein. Öffnen nur auf eigenes Risiko.\"" #~ msgid "" -#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." +#~ "Use this item to pull the pin, turning it into an active grenade. You " +#~ "will then have five turns before it explodes; throwing it would be a good " +#~ "idea." #~ msgstr "" -#~ "Benutze die Scheere um Gegenstände aus Baumwolle (meist Kleidung) in " -#~ "Stoffstücke zu zerlegen." +#~ "Aktiviere den Gegenstand um den Splint zu ziehen. Nach 5 Runden " +#~ "explodiert die Granate und richtet hohen schaden an. Sie zu werfen wäre " +#~ "eine guter Anfang." #~ msgid "" -#~ "Use a sewing kit on an article of clothing to attempt to repair or " -#~ "reinforce that clothing. This uses your tailoring skill." +#~ "Use this item to pull the pin, turning it into an active flashbang. You " +#~ "will then have five turns before it detonates with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." #~ msgstr "" -#~ "Benutze die Nähausrüstung um Kleidung zu reparieren oder zu verstärken. " -#~ "Dies benötigt deinen Schneiderfertigkeit." +#~ "Aktiviere den Gegenstand um den Splint zu ziehen. Nach 5 Runden " +#~ "explodiert die Granate mit einem lauten Knall und grellen Lichtblitz, der " +#~ "jeden in Reichweite blendet, betäubt und disorientiert." #~ msgid "" -#~ "A fire drill is a simple item for firestarting, made from two pieces of " -#~ "wood and some string. Although it is constructed out of simple materials, " -#~ "it's slow and rather difficult to get a fire started with this tool." +#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " +#~ "will then have three turns before it detonates, creating an EMP field " +#~ "that damages robots and drains bionic energy." #~ msgstr "" -#~ "Ein Feuerbohrer ist ein archaisches Gerät zum Feuermachen. Hergestellt " -#~ "aus 2 Holzstücken und ein wenig Schnur. Trotz der simplen Bauweise, kann " -#~ "es recht langsam und schwierig sein damit ein Feuer zu entfachen." - -#~ msgid ".223 caliber retool" -#~ msgstr ".223 Kaliber umwandler" - -#~ msgid ".308 caliber retool" -#~ msgstr ".308 Kaliber umwandler" - -#~ msgid "4.6mm caliber retool" -#~ msgstr "4.6mm Kaliber umwandler" - -#~ msgid "5.7mm caliber retool" -#~ msgstr "5.7mm Kaliber umwandler" - -#~ msgid ".22 caliber retool" -#~ msgstr ".22 Kaliber umwandler" - -#~ msgid "9mm caliber retool" -#~ msgstr "9mm Kaliber umwandler" - -#~ msgid ".45 caliber retool" -#~ msgstr ".45 Kaliber umwandler" +#~ "Aktiviere den Gegenstand um den Splint zu ziehen. Nach 3 Runden " +#~ "explodiert die Granate und erzeugt dabei ein elektromagnetisches Feld, " +#~ "welches Roboter beschädigt und bionischen Bauteilen Energie entzieht." -#~ msgid "apple slices" -#~ msgstr "Apfelstücke" +#~ msgid "active teargas" +#~ msgstr "Aktives Tränengas" #~ msgid "" -#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " -#~ "color." +#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " +#~ "the rag; you will, of course, need a lighter in your inventory to do " +#~ "this. After lighting it, throw it to cause fires." #~ msgstr "" -#~ "Einmachglas mit konservierten Äpfeln. Fade, schwammig und ohne viel Farbe." - -#~ msgid "canned apple slices" -#~ msgstr "Konservierungsdose mit Apfelstücken" - -#~ msgid "This white flour is useful for baking." -#~ msgstr "Dieses weisse Mehl kann zum Backen verwendet werden." +#~ "Eine Flasche gefüllt mit einer brennbaren Flüssigkeit und mit einem " +#~ "Lappen verschlossen. Benutze den Gegenstand um den Lappen zu entzünden. " +#~ "Du brauchst dazu natürlich ein Feuerzeug. Nachdem der Lappen entzunden " +#~ "ist, kann die Flasche geworfen werden um etwas zu entflammen." #~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." +#~ "A firecracker with a short fuse. Use this item to light the fuse; you " +#~ "will need a lighter of course. Shortly after you light the fuse it will " +#~ "explode, so throw it quickly!" #~ msgstr "" -#~ "Ein deformierter menschlicher Fötus. Ihn zu essen wäre extrem widerlich " -#~ "und würde deine DNA mutieren lassen." - -#~ msgid "tuna fish" -#~ msgstr "Tunfisch" - -#~ msgid "sardines" -#~ msgstr "Sardinen" - -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "Igitt, nicht sehr schmackhaft aber sehr füllend." +#~ "Ein Knallfrosch mit einer kurzen Lunte. Benutze ihn um ihn anzuzünden, du " +#~ "brauchst dafür natürlich ein Feuerzeug. Kurz nach dem Anzüden explodiert " +#~ "er, also wirf ihn besser schnell weg!" -#~ msgid "cooked spaghetti" -#~ msgstr "Gekochte Spaghetti" +#~ msgid "" +#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " +#~ "before it explodes." +#~ msgstr "" +#~ "Ein angezündeter Knallfrosch mit zischender Lunte. Wirf ihn schnell weg " +#~ "bevor er explodiert." -#~ msgid "beef jerky" -#~ msgstr "Dörrfleisch" +#~ msgid "A crude explosive device triggered by a piece of string." +#~ msgstr "" +#~ "Ein simpler explosiver Apparat welcher mit einer Schnur ausgelöst wird." #~ msgid "" -#~ "Will you be able to place the arrow right into bull's eye? It is not that " -#~ "easy, but once you know how it's done, you will have a lot of fun with " -#~ "archery." +#~ "A Philips-head screwdriver, important for almost all electronics crafting " +#~ "and most mechanics crafting." #~ msgstr "" -#~ "Wirst du es schaffen, den Pfeil genau in die mitte der Zielscheibe zu " -#~ "schießen? Das ist gar nicht so einfach wie man denkt. Aber wenn du erst " -#~ "einmal den Dreh raus hast wirst du eine menge Spass am Bogenschießen " -#~ "haben." +#~ "Ein standard Kreuz-Schraubenzieher. Wichtig für die Herstellung nahezu " +#~ "aller elektronischen und der meisten mechanischen Gegenstände." #~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." +#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " +#~ "quickly opening locks." #~ msgstr "" -#~ "Dies ist eine Radioaktivitätsplakette die in einem Strahlungssicheren " -#~ "Beutel verstaut ist. Bei Verwendung wird sie aus dem Beutel geholt und " -#~ "ist somit akiv." - -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "Ein wenig einengend wenn getragen, bietet jedoch etwas an Stauraum." - -#~ msgid "plate mail" -#~ msgstr "Plattenrüstung" +#~ "Ein Sortiment von stahl Dietrichen wie sie von Schlossern verwendet " +#~ "werden. Sie eignen sich hervorragend für leises und sehr schnelles öffnen " +#~ "von Schlössern." -#~ msgid "long underwear" -#~ msgstr "Lange Unterwäsche" +#~ msgid "" +#~ "A combination lock box, breaking inside would destroy anything of value." +#~ msgstr "" +#~ "Eine, mit einem Kombinationsschloss, verschlossene Kiste. Sie " +#~ "aufzubrechen würde alles von Wert in ihr zerstören." #~ msgid "" -#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " -#~ "feet of concrete." +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." #~ msgstr "" -#~ "Eine 60mm hochexplosives und panzerbrechendes Projektil. Kann eine " -#~ "Betonwand, mit bis zu 60cm dicke, durchbrechen." +#~ "Ein King Size(tm) superstarker industrie Filzstift. Er ist in etwa halb " +#~ "so groß wie eine Farbsprühdose." #~ msgid "" -#~ "A 40mm grenade with a small explosion and a high number of damaging " -#~ "fragments." +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." #~ msgstr "" -#~ "Eine 40mm Splittergranate mit einem kleinen Sprengradius aber einer " -#~ "großen Anzahl tötlicher absplitternder Teilfragmente." +#~ "Ein falscher Stein welcher auf einen Stock gebunden wurde. Funktioniert " +#~ "einigermaßen als Schaufel, kann aber noch lange nicht mit einer richtigen " +#~ "mithalten." -#~ msgid "A 40mm grenade with a concussive explosion." -#~ msgstr "Eine 40mm Granate mit verlangsamernder Wirkung." +#~ msgid "sealed jar of canned apple" +#~ msgstr "Einmachglas mit Apfel" #~ msgid "" -#~ "This small caliber pistol round offers quite good armor penetration at " -#~ "the cost of slightly less damage. It is rarely used outside of the " -#~ "Chinese army." +#~ "A cordless drill with a selection of drill bits. The charger base " +#~ "contains a battery draining attachment so the drill can be charged in " +#~ "lieu of mains power." #~ msgstr "" -#~ "Diese kleinkalibrige Pistolenmunition bietet einen relativ guten " -#~ "Rüstungsdurchschlag bei nur geringfügig niedrigerem Schaden. Es wird " -#~ "hauptsächlich von der Cinesischen Armee verwendet." +#~ "Ein kabelloser Bohrer mit einer Auswahl an Bohreinsätzen. Die " +#~ "Ladevorrichtung hateinen Aufsatz für Batterien und ist somit auch ohne " +#~ "einen 230V Anschluss aufladbar." #~ msgid "" -#~ "9 millimeter parabellum is generally regarded as the most popular handgun " -#~ "cartridge, used by the majority of US police forces. It is also a very " -#~ "popular round in sub-machine guns." +#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " +#~ "enjoy." #~ msgstr "" -#~ "Die 9 millimeter Parabellum wird generell als die wohl populärste " -#~ "Pistolen Munition gehandelt. Und findet ihren Einsatz im großteil der " -#~ "amerikanischen Polizei. Ausserdem ist sie sehr Populär in diversen " -#~ "Maschinengewehren." +#~ "In Plastikbeutel vakuumierte Fleischstücke. Aktivieren um sie zu Öffnen " +#~ "und zu Genießen." #~ msgid "" -#~ "There is only the space where an object should be, but isn't. No item " -#~ "template of this type exists." +#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " +#~ "enjoy." #~ msgstr "" -#~ "There is only the space where an object should be, but isn't. No item " -#~ "template of this type exists." - -#~ msgid "Error: Item Missing." -#~ msgstr "Felher: Fehlender Gegenstand." - -#~ msgid "MODS/BIONICS" -#~ msgstr "MODULE/BIONISCHES" +#~ "In Plastikbeutel vakuumierte Gemüsestücke. Aktivieren um sie zu Öffnen " +#~ "und zu Genießen." -#~ msgid "MEDICINE/DRUGS" -#~ msgstr "MEDIZIN/DROGEN" +#~ msgid "vacuum-packed apple slices" +#~ msgstr "Vakuumverpackte Apfelstücke" -#~ msgid "Pus Filled Wound" -#~ msgstr "Eitergefüllte Wunde" +#~ msgid "" +#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "In Plastikbeutel vakuumierte Apfelstücke. Aktivieren um sie zu Öffnen und " +#~ "zu Genießen." -#~ msgid "Painful Infected Wound" -#~ msgstr "Schmerzhafte infizierte Wunde" +#~ msgid "A decent sized piece of cotton designed for medical purposes." +#~ msgstr "" +#~ "Ein großzügig geschnittenes Baumwolltuch. Für medizinische Zwecke " +#~ "geeignet." -#~ msgid "Infected Wound" -#~ msgstr "Inzizierte Wunde" +#~ msgid "You have a caffeine craving." +#~ msgstr "Du hast ein heftiges Verlangen nch Nikotin." -#~ msgid "Painful Bite Wound" -#~ msgstr "Schmerzhafte Bisswunde" +#~ msgid "You have a nicotine craving." +#~ msgstr "Du hast ein heftiges Verlangen nach Nikotin." -#~ msgid "Bite Wound" -#~ msgstr "Bisswunde" +#~ msgid "You have an alcohol craving." +#~ msgstr "Du hast ein heftiges Verlangen nach Alkohol" -#~ msgid "Bugs Under Skin" -#~ msgstr "Käfer unter der Haut" +#~ msgid "You have an opiate craving." +#~ msgstr "Du hast ein heftiges Verlangen nach Opium." -#~ msgid "Bleeding" -#~ msgstr "Blutung" +#~ msgid "You have a craving for cocaine." +#~ msgstr "Du hast ein heftiges Verlangen nach Kokain." -#~ msgid "Spores" -#~ msgstr "Sporen" +#~ msgid "You have a speed craving." +#~ msgstr "Du hast ein heftiges Verlangen nach Speed." -#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." -#~ msgstr "" -#~ "Du fühlst dich fibrig und übel, deine Wunde hat angefangen sich grün zu " -#~ "färben." +#~ msgid "You have a craving for crack." +#~ msgstr "Du hast ein heftiges Verlangen nach Crack." -#~ msgid "Your bite wound feels swollen and painful." -#~ msgstr "Dein Bisswunde fühlt sich geschwollen und schmerzhaft an." +#~ msgid " Move up/down " +#~ msgstr "Nach oben/unten gehen" -#~ msgid "Your bite wound really hurts." -#~ msgstr "Deine Bisswunde schmerzt sehr." +#~ msgid " and your body is damaged." +#~ msgstr "und dein Körper ist verletzt." -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s fängt an sich überall zu kratzen!" +#~ msgid " and all of your existing bionics are lost." +#~ msgstr "und all deine bestehenden Bioniken gehen verloren." -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s fängt an sich überall zu kratzen!" +#~ msgid " and some of your existing bionics are lost." +#~ msgstr "und einige deiner bestehenden Bioniken gehen verloren." -#~ msgid "You start scratching yourself all over!" -#~ msgstr "Du fängst an dich am ganzen Körper zu kratzen!" +#~ msgid " and do damage to your genetics, causing mutation." +#~ msgstr "und beschädigen deine Gene, was zu Mutationen führt." -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "Käfer krabbeln unter deiner Haut!" +#~ msgid "Your torso is burning up. You should remove some layers." +#~ msgstr "Dein Oberkörper brennt vor hitze. Du solltest etwas ausziehen." -#~ msgid "Delete World" -#~ msgstr "Welt löschen" +#~ msgid "Your hands are shivering." +#~ msgstr "Deine Hände zittern." -#~ msgid "%1$s hacks %4$s" -#~ msgstr "%1$s hackt %4$s" +#~ msgid "Your feet feel numb." +#~ msgstr "Deine Füße fühlen sich taub an." -#~ msgid "%1$s hack %4$s" -#~ msgstr "%1$s hackst %4$s" +#~ msgid "Fully rested." +#~ msgstr "Komplett erholt." -#~ msgid "%1$s grabs %4$s" -#~ msgstr "%1$s packt %4$s" +#~ msgid "Huh? What was that?" +#~ msgstr "Hmm? Was was das?" -#~ msgid "%1$s grab %4$s" -#~ msgstr "%1$s packst %4$s" +#~ msgid "Oh god, what's happening?" +#~ msgstr "Oh Gott, was passiert hier?" -#~ msgid "%1$s feints at %4$s" -#~ msgstr "%1$s täuscht %4$s" +#~ msgid "Of course... it's all fractals!" +#~ msgstr "Natürlich... es sind alles nur Dimensionen!" -#~ msgid "%1$s feint at %4$s" -#~ msgstr "%1$s täuschst %4$s" +#~ msgid "" +#~ "Your head is dangerously cold. Getting undressed sounds like a good idea." +#~ msgstr "" +#~ "Dein Kopf ist gefährlich kalt. Sich nakt auszuziehen hört sich wie eine " +#~ "gute Idee an." -#~ msgid "%1$s disarms %4$s" -#~ msgstr "%1$s entwaffnet %4$s" +#~ msgid "Your hands are very exposed to the cold. Your hands are shivering." +#~ msgstr "Deine Hände sind der Kälte extrem ausgesetzt. Deine Hände zittern." -#~ msgid "%1$s disarm %4$s" -#~ msgstr "%1$s entwaffnest %4$s" +#~ msgid "Debug messages %s!" +#~ msgstr "Debug Nachrichten %s!" -#~ msgid "%1$s cuts %4$s" -#~ msgstr "%1$s schneidet %4$s" +#~ msgid "Screwdriver" +#~ msgstr "Schraubenzieher." -#~ msgid "%1$s cut %4$s" -#~ msgstr "%1$s schneidest %4$s" +#~ msgid "Take frequently to improve your immune system." +#~ msgstr "Benutze diese regelmäßig um dein Immunsystem zu stärken." -#~ msgid "%1$s counter-attacks %4$s" -#~ msgstr "%1$s kontert %4$s" +#~ msgid "Vaccine shot" +#~ msgstr "Grippeimpfung" -#~ msgid "%1$s counter-attack %4$s" -#~ msgstr "%1$s konterst %4$s" +#~ msgid "Provides long lasting protection against sickness." +#~ msgstr "Gewährt langanhaltenden Schutz gegen Krankheit." -#~ msgid "%1$s clobbers %4$s" -#~ msgstr "%1$s verprügelt %4$s" +#~ msgid "Daytime flu medication. Will halt all flu symptoms for a while." +#~ msgstr "" +#~ "Tageszeitliche Medizin gegen Grippe. Stoppt Grippesymptome für eine Weile." -#~ msgid "%1$s clobber %4$s" -#~ msgstr "%1$s verprügelst %4$s" +#~ msgid "" +#~ "Vital medicine for those with asthma. Those without asthma can use it for " +#~ "a minor stimulant boost." +#~ msgstr "" +#~ "Lebensnodwendige Medizin für Asthmatiker. Personen ohne Asthma können den " +#~ "Spray als leichtes Aufputschmittel verwenden." -#~ msgid "%1$s brutally kicks %4$s" -#~ msgstr "%1$s tritt %4$s brutal" +#~ msgid "marijuana" +#~ msgstr "Marihuana" -#~ msgid "%1$s brutally kick %4$s" -#~ msgstr "%1$s trittst %4$s brutal" +#~ msgid "Sleeping pills made by refining mutated poppy seeds." +#~ msgstr "Schlaftabletten. Hergestellt aus gemahlenen mutierten Poppysamen." -#~ msgid "%1$s bluffs %4$s" -#~ msgstr "%1$s täuscht %4$s" +#~ msgid "Painkillers made by refining mutated poppy seeds.." +#~ msgstr "Schmerztablette hergestellt aus rafinierten poppy samen.." -#~ msgid "%1$s bluff %4$s" -#~ msgstr "%1$s täuschst %4$s" +#~ msgid "Load" +#~ msgstr "Laden" -#~ msgid "%1$s blocks %4$s" -#~ msgstr "%1$s wehrt %4$s ab" +#~ msgid "Quit" +#~ msgstr "Beenden" -#~ msgid "%1$s block %4$s" -#~ msgstr "%1$s wehrst %4$s ab" +#, fuzzy +#~ msgid "%1$s sweep-kicks %4$s" +#~ msgstr "%1$s hackt %4$s" -#~ msgid "%1$s batters %4$s" -#~ msgstr "%1$s schlägt %4$s" +#, fuzzy +#~ msgid "%1$s side-kicks %4$s" +#~ msgstr "%1$s hackt %4$s" -#~ msgid "%1$s batter %4$s" -#~ msgstr "%1$s schlägst %4$s" +#, fuzzy +#~ msgid "%1$s elbows %4$s" +#~ msgstr "%1$s wehrt %4$s ab" -#~ msgid " for %d damage." -#~ msgstr " . %d Schaden!" +#, fuzzy +#~ msgid "Start cart construction" +#~ msgstr " Konstruktion " -#~ msgid " but do no damage." -#~ msgstr " aber verursachen keinen Schaden." +#~ msgid "Normal" +#~ msgstr "Normal" diff --git a/lang/po/fr.po b/lang/po/fr.po index 657f3b21b75d5..94560f6695229 100644 --- a/lang/po/fr.po +++ b/lang/po/fr.po @@ -1,22 +1,22 @@ -# French translations for PACKAGE package. -# Copyright (C) 2013 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Administrator , 2013. +# French translation for cdda +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the cdda package. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: 0.7-git\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-06 13:16+0000\n" -"Last-Translator: Argasm \n" -"Language-Team: French\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-13 21:25+0000\n" +"Last-Translator: Carver \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:34+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:30+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -3033,7 +3033,7 @@ msgstr "" #: computer.cpp msgid "The console electrocutes you!" -msgstr "La console vous élèctrise!" +msgstr "La console vous électrocute!" #: computer.cpp msgid "" @@ -6894,7 +6894,7 @@ msgstr "L'acide brûle vos jambes et pieds!" #: field.cpp msgid "The electricity flows around you." -msgstr "" +msgstr "L'électricité ondoie autour de vous." #: field.cpp msgid "The sap sticks to you!" @@ -6902,7 +6902,7 @@ msgstr "La sève se colle à vous!" #: field.cpp msgid "The sludge is thick and sticky. You struggle to pull free." -msgstr "" +msgstr "La boue est épaisse et collant. Vous luttez pour vous en libérez." #: field.cpp msgid "These flames do not burn you." @@ -7264,12 +7264,12 @@ msgstr " est" #: game.cpp #, c-format msgid "%c - %s; enter new letter." -msgstr "" +msgstr "%c - %s; entrez la nouvelle lettre." #: game.cpp #, c-format msgid "%c is not a valid inventory letter." -msgstr "" +msgstr "%c n'est pas une lettre valide pour l'inventaire." #: game.cpp #, c-format @@ -7416,7 +7416,7 @@ msgstr "6 heures" #: game.cpp msgid "<+/->Priority" -msgstr "" +msgstr "<+/-> Priorité" #: game.cpp msgid "<+> Autopickup" @@ -7518,7 +7518,7 @@ msgstr "" #: game.cpp msgid "Already full." -msgstr "" +msgstr "Déjà plein." #: game.cpp msgid "Anywhere would be a good place to sleep..." @@ -7591,11 +7591,11 @@ msgstr "Consommez:" #: game.cpp msgid "Container for " -msgstr "" +msgstr "Contenant pour " #: game.cpp msgid "Control vehicle where?" -msgstr "" +msgstr "Où prendre les commandes?" #: game.cpp msgid "Crack!" @@ -7656,7 +7656,7 @@ msgstr "Plonger dans l'eau?" #: game.cpp msgid "Drop where?" -msgstr "" +msgstr "Posez où?" #: game.cpp #, c-format @@ -7685,11 +7685,11 @@ msgstr "Même vos yeux sont secs..." #: game.cpp msgid "Examine vehicle" -msgstr "" +msgstr "Examiner le véhicule" #: game.cpp msgid "Examine where?" -msgstr "" +msgstr "Où examiner?" #: game.cpp msgid "Example: -pipe,chunk,steel" @@ -7722,11 +7722,11 @@ msgstr "Femelle" #: game.cpp msgid "Fill a container with water" -msgstr "" +msgstr "Remplir un contenant avec de l'eau" #: game.cpp msgid "Filter:" -msgstr "" +msgstr "Filtrer :" #: game.cpp msgid "Food..." @@ -7739,7 +7739,7 @@ msgstr "Vous entendez un %s venant du %s" #: game.cpp msgid "GAME OVER" -msgstr "" +msgstr "PARTIE TERMINÉE." #: game.cpp msgid "GAME OVER - Press Spacebar to Quit" @@ -7752,11 +7752,11 @@ msgstr "Game over! Appuyez sur espace..." #: game.cpp #, c-format msgid "Get items from %s?" -msgstr "" +msgstr "Prendre des objets du %s?" #: game.cpp msgid "Grab where?" -msgstr "" +msgstr "Aggriper où?" #: game.cpp msgid "HEAD" @@ -7768,7 +7768,7 @@ msgstr "" #: game.cpp msgid "Have a drink" -msgstr "" +msgstr "Booire un coup" #: game.cpp #, c-format @@ -7781,7 +7781,7 @@ msgstr "Vous avez entendu un bruit !" #: game.cpp msgid "High Priority:" -msgstr "" +msgstr "Priorité haute:" #: game.cpp msgid "Hostiles are nearby! Start Butchering anyway?" @@ -7817,11 +7817,11 @@ msgstr "" #: game.cpp msgid "Items" -msgstr "" +msgstr "Objets" #: game.cpp msgid "KILL COUNT:" -msgstr "" +msgstr "NOMBRE DE VICTIMES:" #: game.cpp msgid "Kill NPCs" @@ -7858,11 +7858,11 @@ msgstr "" #: game.cpp msgid "Looking Around" -msgstr "" +msgstr "Regarder autour" #: game.cpp msgid "Low Priority:" -msgstr "" +msgstr "Priorité basse:" #: game.cpp newcharacter.cpp msgid "Male" @@ -7877,9 +7877,8 @@ msgid "Maybe you should find something new to read..." msgstr "Peut-être est-il temps de trouver quelque chose de nouveau à lire..." #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "Votre visage est dangereusement froid." +msgstr "" #: game.cpp msgid "Monster spotted!" @@ -7905,7 +7904,7 @@ msgstr "Monstre repéré--le mode prudence est activé! (%s pour le désactiver. #: game.cpp msgid "Monsters" -msgstr "" +msgstr "Monstres" #: game.cpp #, c-format @@ -7934,7 +7933,7 @@ msgstr "NW :" #: game.cpp msgid "Never Mind." -msgstr "" +msgstr "Ce n'est pas grave" #: game.cpp msgid "No NPC there." @@ -7942,7 +7941,7 @@ msgstr "Pas de PNJ ici." #: game.cpp msgid "No controls there." -msgstr "" +msgstr "Pas de commandes ici." #: game.cpp msgid "No destination." @@ -8017,7 +8016,7 @@ msgstr "PUISSANCE" #: game.cpp msgid "Peek where?" -msgstr "" +msgstr "Où jeter un coup d'oeil?" #: game.cpp msgid "Please wait as we build your world" @@ -8026,15 +8025,15 @@ msgstr "Merci d'attendre, nous façonnons votre monde" #: game.cpp #, c-format msgid "Pour %s on the ground?" -msgstr "" +msgstr "Verser de %s sur le sol?" #: game.cpp msgid "Press q to return" -msgstr "" +msgstr "Presser q pour quitter." #: game.cpp msgid "Pump until full?" -msgstr "" +msgstr "Pompez jusqu'au plein?" #: game.cpp #, c-format @@ -8055,7 +8054,7 @@ msgstr "VRAIMENT vous suicider ?" #: game.cpp msgid "RV kitchen:" -msgstr "" +msgstr "Cuisine du camping-car:" #: game.cpp #, c-format @@ -8088,15 +8087,15 @@ msgstr "Marcher sur ce %s?" #: game.cpp msgid "Reassign item:" -msgstr "" +msgstr "Réassigner l'objet:" #: game.cpp msgid "Refill vehicle where?" -msgstr "" +msgstr "Où remplir le véhicule?" #: game.cpp msgid "Refill vehicle?" -msgstr "" +msgstr "Remplir le véhicule?" #: game.cpp #, c-format @@ -8246,12 +8245,12 @@ msgstr "" #: game.cpp #, c-format msgid "That %s isn't water-tight." -msgstr "" +msgstr "Ce %s n'est pas imperméable." #: game.cpp #, c-format msgid "That %s won't hold %s." -msgstr "" +msgstr "Ce %s ne contiendra pas de %s." #: game.cpp msgid "That door is already closed." @@ -8267,7 +8266,7 @@ msgstr "Cette porte est verrouillée!" #: game.cpp msgid "That is too heavy to throw." -msgstr "" +msgstr "C'est trop lourd pour pouvoir le lancer." #: game.cpp msgid "That part of the vehicle is currently unsafe." @@ -8275,11 +8274,11 @@ msgstr "Cette partie du véhicule est actuellement dangereuse." #: game.cpp msgid "That's part of your body, you can't throw that!" -msgstr "" +msgstr "C'est une partie de votre corps, vous ne pouvez pas lancer ça!" #: game.cpp msgid "That's the same container!" -msgstr "" +msgstr "C'est le même contenant." #: game.cpp #, c-format @@ -8299,7 +8298,7 @@ msgstr "" #: game.cpp #, c-format msgid "The %s is firmly sealed." -msgstr "" +msgstr "La %s est bien scellé." #: game.cpp #, c-format @@ -8351,15 +8350,15 @@ msgstr "Le cube de l'architecte." #: game.cpp msgid "The barn doors closed!" -msgstr "" +msgstr "Les portes de la grange se sont fermées!" #: game.cpp msgid "The barn doors opened!" -msgstr "" +msgstr "Les portes de la grange se sont ouvertes!" #: game.cpp msgid "The battery is dead." -msgstr "" +msgstr "La batterie est morte." #: game.cpp msgid "The battery is fully charged." @@ -8393,11 +8392,11 @@ msgstr "Les portes proches glissent en position ouverte !" #: game.cpp msgid "The palisade gate swings closed with a crash!" -msgstr "" +msgstr "Le portail de la clôture se ferme avec fracas!" #: game.cpp msgid "The palisade gate swings open!" -msgstr "" +msgstr "Le portail de la clôture s'ouvre!" #: game.cpp msgid "The reactor is full." @@ -8415,7 +8414,7 @@ msgstr "Le reservoir est plein." #: game.cpp msgid "The trunk is full, so some items fall on the ground." -msgstr "" +msgstr "Des objets sont tombés par terre car le coffre est plein." #: game.cpp msgid "The water puts out the flames!" @@ -8469,7 +8468,7 @@ msgstr "Il y a un autre véhicule sur votre chemin." #: game.cpp msgid "There isn't any vehicle there." -msgstr "" +msgstr "Il n'y a pas de véhicule ici." #: game.cpp #, c-format @@ -8490,6 +8489,8 @@ msgstr "Il n'y a pas de cadavre à dépecer ici." msgid "" "There's no room in your inventory for the %s, and you can't unwield your %s." msgstr "" +"Vous n'avez pas de place dans votre inventaire pour le %s et vous ne pouvez " +"pas vous séparer de votre %s." #: game.cpp msgid "There's no-one close enough to talk to." @@ -8501,7 +8502,7 @@ msgstr "Il n'y a rien ici !" #: game.cpp msgid "There's nothing to grab there!" -msgstr "" +msgstr "Il n'y a rien à agripper ici!" #: game.cpp msgid "There's some buffoon in the way!" @@ -8518,11 +8519,11 @@ msgstr "Quelque chose bloque le chemin." #: game.cpp #, c-format msgid "This vehicle doesn't use %s." -msgstr "" +msgstr "Ce véhicule n'utilise pas de %s." #: game.cpp msgid "Throw item:" -msgstr "" +msgstr "Lancer un objet:" #: game.cpp msgid "To exclude items, place - in front" @@ -8563,15 +8564,15 @@ msgstr "Utiliser l'objet :" #: game.cpp msgid "Use the hotplate" -msgstr "" +msgstr "Utiliser la plaque électrique" #: game.cpp msgid "Use the water purifier?" -msgstr "" +msgstr "Utiliser le purificateur d'eau?" #: game.cpp msgid "Use the welding rig?" -msgstr "" +msgstr "Utiliser le poste de soudure?" #: game.cpp #, c-format @@ -8581,7 +8582,7 @@ msgstr "" #: game.cpp #, c-format msgid "Vol %d" -msgstr "" +msgstr "Vol %d" #: game.cpp msgid "Wait 1800 heartbeats" @@ -8642,7 +8643,7 @@ msgstr "Brandir:" #: game.cpp #, c-format msgid "Wielding %c - %s" -msgstr "" +msgstr "Vous maniez un %c - %s" #: game.cpp msgid "Wish for an item" @@ -8662,7 +8663,7 @@ msgstr "" #: game.cpp msgid "World retained. Characters remaining:" -msgstr "" +msgstr "Monde conservé. Personnages restants:" #: game.cpp #, c-format @@ -8735,7 +8736,7 @@ msgstr "Vous ne pouvez déplacer votre %s." #: game.cpp msgid "You can't dive while wearing a flotation device." -msgstr "" +msgstr "Vous ne pouvez pas plonger lorsque vous portez un gilet de sauvetage." #: game.cpp msgid "You can't do that on moving vehicle." @@ -8766,7 +8767,7 @@ msgstr "Vous ne pouvez pas monter ici!" #: game.cpp #, c-format msgid "You can't mix loads in your %s." -msgstr "" +msgstr "Vous ne pouvez pas mélanger les produits dnas votre %s." #: game.cpp #, c-format @@ -8779,7 +8780,7 @@ msgstr "Vous ne pouvez pas ramasser un liquide !" #: game.cpp msgid "You can't place items there!" -msgstr "" +msgstr "Vous ne pouvez pas placer d'objets ici!" #: game.cpp #, c-format @@ -8793,7 +8794,7 @@ msgstr "" #: game.cpp #, c-format msgid "You can't seal that %s!" -msgstr "" +msgstr "Vous ne pouvez pas boucher ce %s!" #: game.cpp msgid "You can't surface!" @@ -8879,7 +8880,7 @@ msgstr "Vous plongez sous l'eau!" #: game.cpp player.cpp msgid "You do not have that item." -msgstr "" +msgstr "Vous n'avez pas cet objet." #: game.cpp msgid "You don't have a sharp item to butcher with." @@ -8887,7 +8888,7 @@ msgstr "Vous n'avez pas d'objets coupant pour dépecer." #: game.cpp player.cpp msgid "You don't have that item." -msgstr "" +msgstr "Vous n'avez pas cet objet." #: game.cpp msgid "You don't know of any factions. Press Spacebar..." @@ -8900,11 +8901,11 @@ msgstr "Vous ne voyez aucun objet ou monstre autour de vous !" #: game.cpp #, c-format msgid "You drop several items on the %s." -msgstr "" +msgstr "Vous posez plusieurs objets sur le %s." #: game.cpp msgid "You drop several items." -msgstr "" +msgstr "Vous posez plusieurs objets." #: game.cpp #, c-format @@ -8915,15 +8916,15 @@ msgstr "Vous posez le %s sur le sol." #, c-format msgid "You drop your %s on the %s." msgid_plural "You drop your %ss on the %s." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Vous posez votre %s sur le %s." +msgstr[1] "Vous posez vos %ss sur le %s." #: game.cpp #, c-format msgid "You drop your %s." msgid_plural "You drop your %ss." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Vous posez votre %s." +msgstr[1] "Vous posez vos %ss." #: game.cpp msgid "You eat the underbrush." @@ -8956,14 +8957,13 @@ msgid "You fall on the ground for %d damage." msgstr "Vous tombez par terre, vous blessant de %d dommages." #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "Vous n'avez pas dormi depuis 2 jours!" +msgstr "Vous êtes exténué comme si vous n'aviez pas dormi depuis des jours." #: game.cpp #, c-format msgid "You fill your %s with some of the %s." -msgstr "" +msgstr "Vous remplissez votre %s avec un peu de %s." #: game.cpp #, c-format @@ -8985,7 +8985,7 @@ msgstr "Vous trouvez des légumes sauvages!" #: game.cpp #, c-format msgid "You grab the %s." -msgstr "" +msgstr "Vous aggripez le %s." #: game.cpp msgid "You harvest some feathers!" @@ -9104,7 +9104,7 @@ msgstr "" #: game.cpp msgid "You need a free arm to drive!" -msgstr "" +msgstr "Vous avez besoin d'un bras libre pour conduire!" #: game.cpp msgid "You need a powered UPS." @@ -9132,12 +9132,12 @@ msgstr "Vous ouvrez le %s du %s." #: game.cpp msgid "You pick up: " -msgstr "" +msgstr "Vous prenez: " #: game.cpp #, c-format msgid "You pour %s into your %s." -msgstr "" +msgstr "Vous versez du %s dans votre %s." #: game.cpp msgid "You pull a handbrake." @@ -9150,12 +9150,12 @@ msgstr "Vous tirez la corde..." #: game.cpp #, c-format msgid "You put several items in the %s's %s." -msgstr "" +msgstr "Vous placez plusieurs objets dans le %s du %s." #: game.cpp #, c-format msgid "You put several items in the %s." -msgstr "" +msgstr "Vous placez plusieurs objets dans le %s." #: game.cpp #, c-format @@ -9166,15 +9166,15 @@ msgstr "Vous placez le %s dans votre inventaire." #, c-format msgid "You put your %1$s in the %2$s's %3$s." msgid_plural "You put your %1$ss in the %2$s's %3$s." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Vous placez votre %1$s dans le %3$s du %2$s." +msgstr[1] "Vous placez vos %1$ss dans le %3$s du %2$s." #: game.cpp #, c-format msgid "You put your %s in the %s." msgid_plural "You put your %ss in the %s." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Vous placez votre %s dans le %s." +msgstr[1] "Vous placez vos %ss dans le %s." #: game.cpp #, c-format @@ -9193,12 +9193,12 @@ msgstr "Vous rechargez la batterie de %s." #: game.cpp #, c-format msgid "You refill %s with %s to its maximum." -msgstr "" +msgstr "Vous faites le plein du %s avec %s." #: game.cpp #, c-format msgid "You refill %s with %s." -msgstr "" +msgstr "Vous remplissez le %s avec %s." #: game.cpp #, c-format @@ -9218,7 +9218,7 @@ msgstr "Vous reprenez le contrôle du %s." #: game.cpp #, c-format msgid "You release the %s." -msgstr "" +msgstr "Vous lâchez le %s." #: game.cpp #, c-format @@ -9262,7 +9262,7 @@ msgstr "Vous remontez à la surface." #: game.cpp #, c-format msgid "You take control of the %s." -msgstr "" +msgstr "Vous prenez contrôle du %s." #: game.cpp msgid "You talk to yourself for a moment." @@ -9341,7 +9341,7 @@ msgstr "Vous êtes reveillé par un bruit." #: game.cpp #, c-format msgid "Your %s can't hold any more %s." -msgstr "" +msgstr "Votre %s ne peut pas contenir plus de %s." #: game.cpp #, c-format @@ -9394,7 +9394,7 @@ msgstr "" #: game.cpp #, c-format msgid "Your %s won't hold %s." -msgstr "" +msgstr "Votre %s ne contiendra pas de %s." #: game.cpp msgid "Your breathing stops completely." @@ -9435,19 +9435,19 @@ msgstr "Votre estomac est vraiment vide..." #: game.cpp msgid "[,] All" -msgstr "" +msgstr "[,] Tous" #: game.cpp msgid "[left] Unmark" -msgstr "" +msgstr "[gauche] Déselectionner" #: game.cpp msgid "[pgdn] Next" -msgstr "" +msgstr "[pgsuiv] Suivant" #: game.cpp msgid "[pgup] Prev" -msgstr "" +msgstr "[pgprec] Precedent" #: game.cpp msgid "[q]uit" @@ -9455,11 +9455,11 @@ msgstr "[q]uitter" #: game.cpp msgid "[right] Mark" -msgstr "" +msgstr "[droite] Sélectionner" #: game.cpp msgid "[up/dn] Scroll" -msgstr "" +msgstr "[haut/bas] Faire défiler" #: game.cpp msgid "a huge boom!" @@ -9503,11 +9503,11 @@ msgstr "" #: game.cpp msgid "to look around" -msgstr "" +msgstr "regarder autour" #: game.cpp msgid "to shoot" -msgstr "" +msgstr "tirer" #: game.cpp msgid "was killed." @@ -9538,7 +9538,7 @@ msgstr "" #: help.cpp msgid " by pressing " -msgstr "" +msgstr " en pressant " #: help.cpp msgid " enters look around mode, which" @@ -9579,11 +9579,11 @@ msgstr "" #: help.cpp msgid "'List all items around the player'" -msgstr "" +msgstr "'Lister tous les objets autour du joueur'" #: help.cpp msgid "'Look Around' mode" -msgstr "" +msgstr "Mode 'inspection à la ronde'" #: help.cpp msgid "'Select Wielded Item' then press" @@ -9599,7 +9599,7 @@ msgstr "" #: help.cpp msgid "( Assault Rifles" -msgstr "" +msgstr "( Fusils d'assaut" #: help.cpp msgid "( Crossbows" @@ -9713,6 +9713,21 @@ msgid "" "even close-range bursts again a large number of enemies. They are difficult\n" "to use, and are best saved for skilled riflemen." msgstr "" +"Les fusils d'assaut partagent de nombreuses caractéristiques avec les fusils " +"de chasse; ils\n" +"sont eux aussi adaptés pour les tirs à grande distance, avec des bonus et " +"pénalités similaires. Contrairement\n" +"aux fusils de chasse, les fusils d'assaut possèdent un tir automatique. Les " +"fusils d'assaut\n" +"sont moins précis que les fusils de chasse - cette différence est aggravée " +"lors de tirs automatiques,\n" +"cette fonction devrait donc être utilisée lorsque vous serez un tireur " +"compétent.\n" +"Les fusils d'assaut sont un très bon choix pour le combat à moyenne et " +"longue portée, voire\n" +"même pour des rafales contre un nombre important d'ennemis proches. Ils sont " +"difficiles\n" +"à utiliser et sont donc plus efficaces entre les mains de tireurs chevronnés." #: help.cpp msgid "" @@ -9886,6 +9901,19 @@ msgid "" "slow to reload and fire, so when facing a large group of nearby enemies,\n" "they are not the best pick." msgstr "" +"Les fusils de chasse sont populaires grâce à leur portée et précision " +"supérieures. De plus,\n" +"leur viseur ou lunette permet d'avoir la même précision lors de tirs sur des " +"cibles éloignées\n" +"de plus de 10 cases que des cibles moins éloignées. Toutefois, les fusils de " +"chasse\n" +"sont très médiocres pour tirer sur des cibles situées à 4 cases ou moins du " +"tireur.\n" +"Contrairement aux fusils d'assaut, les fusils de chasse n'ont pas de tir " +"automatique. Ils sont aussi\n" +"longs à recharger et à tirer, il ne s'agit donc pas du choix le plus " +"judicieux lorsque vous affrontez\n" +"un groupe proche de nombreux ennemis." #: help.cpp #, c-format @@ -10452,6 +10480,21 @@ msgid "" "damage and helps you resist things like smoke. To take off an item, %s\n" "then the proper letter." msgstr "" +"Pour manier un objet en tant qu'arme, faites %s puis la lettre adéquate. En " +"pressant '-'\n" +"plutôt qu'une lettre vous ne brandirez rien. Une arme brandie ne contribuera " +"pas à\n" +"votre volume transporté; ainsi porter dans vos mains un objet volumineux " +"peut être\n" +"une bonne option pour voyager. Lorsque vous vous dessaisissez une arme, elle " +"retournera dans\n" +"votre inventaire ou vous la laisserez tomber par terre si vous n'avez pas de " +"place.\n" +"\n" +"Pour porter un vêtement, %s puis la lettre adéquate. Les armures réduisent\n" +"les dommages et vous aide à résister aux choses comme la fumée. Pour retirer " +"un objet, %s\n" +"puis la lettre adéquate." #: help.cpp msgid "" @@ -10711,7 +10754,7 @@ msgstr "" #: iexamine.cpp msgid "Chunks" -msgstr "" +msgstr "Morceaux" #: iexamine.cpp #, c-format @@ -10839,7 +10882,7 @@ msgstr "" #: iexamine.cpp msgid "Scraps" -msgstr "" +msgstr "Bouts" #: iexamine.cpp msgid "Sheets" @@ -11090,11 +11133,11 @@ msgstr "" #: inventory_ui.cpp overmap.cpp msgid "< Go Back" -msgstr "" +msgstr "< Retour" #: inventory_ui.cpp msgid "> More items" -msgstr "" +msgstr "> Plus d'objets" #: inventory_ui.cpp msgid "AMMUNITION:" @@ -11102,7 +11145,7 @@ msgstr "" #: inventory_ui.cpp msgid "BOOKS:" -msgstr "" +msgstr "LIVRES:" #: inventory_ui.cpp msgid "CLOTHING:" @@ -11110,7 +11153,7 @@ msgstr "" #: inventory_ui.cpp msgid "Compare where?" -msgstr "" +msgstr "Où comparer?" #: inventory_ui.cpp msgid "FIREARMS:" @@ -11118,7 +11161,7 @@ msgstr "" #: inventory_ui.cpp msgid "FOOD/DRINKS:" -msgstr "" +msgstr "NOURRITURE/BOISSONS:" #: inventory_ui.cpp msgid "GROUND:" @@ -11126,53 +11169,53 @@ msgstr "" #: inventory_ui.cpp msgid "ITEMS WORN:" -msgstr "" +msgstr "OBJETS PORTÉS:" #: inventory_ui.cpp #, c-format msgid "Items: %d/%d " -msgstr "" +msgstr "Objets: %d/%d " #: inventory_ui.cpp msgid "MEDICINE/DRUGS:" -msgstr "" +msgstr "MEDICAMENTS/DROGUES:" #: inventory_ui.cpp msgid "MODS/BIONICS:" -msgstr "" +msgstr "MODULES/BIONICS:" #: inventory_ui.cpp msgid "Multidrop:" -msgstr "" +msgstr "Multidrop:" #: inventory_ui.cpp msgid "OTHER:" -msgstr "" +msgstr "AUTRES:" #: inventory_ui.cpp msgid "TOOLS:" -msgstr "" +msgstr "OUTILS:" #: inventory_ui.cpp item.cpp msgid "Volume: " -msgstr "" +msgstr "Volume: " #: inventory_ui.cpp msgid "WEAPON:" -msgstr "" +msgstr "ARME:" #: inventory_ui.cpp msgid "WEAPONS:" -msgstr "" +msgstr "ARMES:" #: inventory_ui.cpp msgid "Weight: " -msgstr "" +msgstr "Poids: " #: inventory_ui.cpp #, c-format msgid "You cannot drop your %s." -msgstr "" +msgstr "Vous ne pouvez pas déposer votre %s." #: item.cpp msgid " Cut: " @@ -11180,7 +11223,7 @@ msgstr "" #: item.cpp msgid " Weight: " -msgstr "" +msgstr " Poids: " #: item.cpp msgid " (fits)" @@ -11192,7 +11235,7 @@ msgstr "" #: item.cpp msgid " (hot)" -msgstr "" +msgstr " (chaud)" #: item.cpp msgid " (owned)" @@ -11200,15 +11243,15 @@ msgstr "" #: item.cpp msgid " (rotten)" -msgstr "" +msgstr " (avarié)" #: item.cpp msgid " Cut: " -msgstr "" +msgstr " Coupant: " #: item.cpp msgid " Pierce: " -msgstr "" +msgstr " Perforant: " #: item.cpp msgid " To-hit bonus: " @@ -11321,15 +11364,15 @@ msgstr "" #: item.cpp msgid "Armor-pierce: " -msgstr "" +msgstr "Perforation d'armures: " #: item.cpp msgid "Bash: " -msgstr "" +msgstr "Contondant: " #: item.cpp msgid "Block" -msgstr "" +msgstr "Bloquer" #: item.cpp msgid "Burst size: " @@ -11350,7 +11393,7 @@ msgstr "" #: item.cpp msgid "Counter-attack" -msgstr "" +msgstr "Contre-attaque" #: item.cpp player.cpp msgid "Coverage: " @@ -11362,7 +11405,7 @@ msgstr "" #: item.cpp msgid "Damage: " -msgstr "" +msgstr "Dommages: " #: item.cpp msgid "Defense disarm" @@ -11374,11 +11417,11 @@ msgstr "" #: item.cpp msgid "Disarm" -msgstr "" +msgstr "Désarmer" #: item.cpp msgid "Dispersion: " -msgstr "" +msgstr "Dispersion: " #: item.cpp msgid "Encumberment: " @@ -11386,7 +11429,7 @@ msgstr "" #: item.cpp msgid "Enjoyability: " -msgstr "" +msgstr "Plaisir: " #: item.cpp msgid "Environmental protection: " @@ -11398,11 +11441,11 @@ msgstr "" #: item.cpp lang/json/json_techniques.py msgid "Feint" -msgstr "" +msgstr "Evanouissement" #: item.cpp msgid "Grab" -msgstr "" +msgstr "Saisir" #: item.cpp msgid "Grab break" @@ -11415,7 +11458,7 @@ msgstr "" #: item.cpp msgid "Hit all adjacent monsters" -msgstr "" +msgstr "Toucher tous les monstres environnants" #: item.cpp msgid "It can be understood by beginners." @@ -11431,7 +11474,7 @@ msgstr "" #: item.cpp msgid "Leg block" -msgstr "" +msgstr "Bloquer avec la jambe" #: item.cpp msgid "Magazine: " @@ -11457,7 +11500,7 @@ msgstr "" #: item.cpp msgid "Moves per attack: " -msgstr "" +msgstr "Mouvements par attaque: " #: item.cpp msgid "Note: " @@ -11465,11 +11508,11 @@ msgstr "" #: item.cpp msgid "Nutrition: " -msgstr "" +msgstr "Nutrition: " #: item.cpp msgid "Parry" -msgstr "" +msgstr "Parer" #: item.cpp msgid "Pistols. " @@ -11477,11 +11520,11 @@ msgstr "" #: item.cpp msgid "Portions: " -msgstr "" +msgstr "Portions: " #: item.cpp msgid "Precision attack" -msgstr "" +msgstr "Attaque précise" #: item.cpp msgid "Protection: Bash: " @@ -11489,15 +11532,15 @@ msgstr "" #: item.cpp msgid "Quench: " -msgstr "" +msgstr "Hydratation: " #: item.cpp msgid "Range: " -msgstr "" +msgstr "Portée: " #: item.cpp msgid "Rapid attack" -msgstr "" +msgstr "Attaque rapide" #: item.cpp msgid "Reading this book affects your morale by " @@ -11505,7 +11548,7 @@ msgstr "" #: item.cpp msgid "Recoil: " -msgstr "" +msgstr "Recul: " #: item.cpp msgid "Reload time: " @@ -11538,7 +11581,7 @@ msgstr "" #: item.cpp msgid "Shield" -msgstr "" +msgstr "Bouclier" #: item.cpp msgid "Shotguns. " @@ -11546,7 +11589,7 @@ msgstr "" #: item.cpp msgid "Skill used: " -msgstr "" +msgstr "Compétences utilisées: " #: item.cpp msgid "Smells like: " @@ -11558,7 +11601,7 @@ msgstr "" #: item.cpp msgid "Sweep attack" -msgstr "" +msgstr "Balayer" #: item.cpp msgid "The arms. " @@ -11627,11 +11670,11 @@ msgstr "" #: item.cpp msgid "Throw" -msgstr "" +msgstr "Lancer" #: item.cpp msgid "Type: " -msgstr "" +msgstr "Type: " #: item.cpp msgid "Used on: " @@ -11643,15 +11686,15 @@ msgstr "" #: item.cpp msgid "Weak block" -msgstr "" +msgstr "Blocage faible" #: item.cpp msgid "age: " -msgstr "" +msgstr "âge: " #: item.cpp msgid "burn: " -msgstr "" +msgstr "brûlure: " #: itypedef.cpp msgid ".22" @@ -11747,15 +11790,15 @@ msgstr "" #: itypedef.cpp msgid "A bicycle wheel" -msgstr "" +msgstr "Une roue de vélo" #: itypedef.cpp msgid "A car wheel" -msgstr "" +msgstr "Une roue de voiture" #: itypedef.cpp msgid "A dead body." -msgstr "" +msgstr "Un cadavre." #: itypedef.cpp msgid "A hand-written paper note." @@ -11771,7 +11814,7 @@ msgstr "" #: itypedef.cpp msgid "A motorbike wheel" -msgstr "" +msgstr "Une roue de moto." #: itypedef.cpp msgid "A piece of hacking software." @@ -11881,7 +11924,7 @@ msgstr "" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "bicycle wheel" -msgstr "" +msgstr "roue de vélo" #: itypedef.cpp msgid "bolts" @@ -11893,7 +11936,7 @@ msgstr "" #: itypedef.cpp lang/json/json_items.py msgid "charcoal" -msgstr "" +msgstr "charbon de bois" #: itypedef.cpp lang/json/json_items.py msgid "clean water" @@ -11905,6 +11948,10 @@ msgstr "" #: itypedef.cpp msgid "corpse" +msgstr "corps" + +#: itypedef.cpp +msgid "ferrous rail projectile" msgstr "" #: itypedef.cpp @@ -11949,7 +11996,7 @@ msgstr "" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "motorbike wheel" -msgstr "" +msgstr "roue de moto" #: itypedef.cpp msgid "muscle" @@ -11993,7 +12040,7 @@ msgstr "" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "wheel" -msgstr "" +msgstr "roue" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "wide wheel" @@ -12063,7 +12110,7 @@ msgstr "6: Jambe droite" #: iuse.cpp msgid "7: Exit" -msgstr "" +msgstr "7: Quitter" #: iuse.cpp msgid "ccept" @@ -12103,15 +12150,15 @@ msgstr "" #: iuse.cpp msgid "fur" -msgstr "" +msgstr "fourrures" #: iuse.cpp msgid "leather" -msgstr "" +msgstr "cuir" #: iuse.cpp msgid "rags" -msgstr "" +msgstr "chiffons" #: iuse.cpp msgid "A nearby splatter of goo forms into a goo pit." @@ -12434,6 +12481,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12504,7 +12555,7 @@ msgstr "" #: iuse.cpp msgid "Light where?" -msgstr "" +msgstr "Où allumer?" #: iuse.cpp msgid "Living black goo emerges from the canister!" @@ -12524,7 +12575,7 @@ msgstr "" #: iuse.cpp msgid "Modify what?" -msgstr "" +msgstr "Que voulez-vous modifier?" #. ~ (jacqueshammer) "My god! Let's talk it over, OK?" #: iuse.cpp @@ -12620,9 +12671,8 @@ msgid "Put a knife in the boot" msgstr "" #: iuse.cpp -#, fuzzy msgid "Put the cat food where?" -msgstr "Où allumer le feu ?" +msgstr "" #: iuse.cpp msgid "Put the dog food where?" @@ -12666,7 +12716,7 @@ msgstr "" #: iuse.cpp msgid "Repair what?" -msgstr "" +msgstr "Réparer quoi?" #: iuse.cpp msgid "Retreat!" @@ -12773,7 +12823,7 @@ msgstr "" #: iuse.cpp msgid "That isn't clothing!" -msgstr "" +msgstr "Ce n'est pas un vêtement!" #: iuse.cpp msgid "That item does not fit in your boot!" @@ -12781,7 +12831,7 @@ msgstr "" #: iuse.cpp msgid "That item does not use batteries!" -msgstr "" +msgstr "Cet objet n'utilise pas de batteries!" #: iuse.cpp msgid "That item has already had its battery capacity doubled." @@ -12906,7 +12956,7 @@ msgstr "" #: iuse.cpp msgid "The dog seems to like you!" -msgstr "" +msgstr "On dirait que le chien vous aime bien!" #: iuse.cpp msgid "The earth shakes!" @@ -13044,7 +13094,7 @@ msgstr "" #: iuse.cpp msgid "There is already a fire." -msgstr "" +msgstr "Il y a déjà un feu." #: iuse.cpp msgid "There is no adjacent square to release the manhack in!" @@ -13069,7 +13119,7 @@ msgstr "Il n'y a pas de véhicule ici." #: iuse.cpp msgid "There's nothing to light there." -msgstr "" +msgstr "Il n'y a rien à allumer ici." #: iuse.cpp msgid "There's nothing to mop there." @@ -13317,6 +13367,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "Vous pouvez creuser un fossé dans le menu de construction - pressez *." +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -13366,7 +13422,7 @@ msgstr "" #: iuse.cpp player.cpp #, c-format msgid "You can't do anything interesting with your %s." -msgstr "" +msgstr "Vous ne pouvez rien faire d'intéressant avec votre %s." #: iuse.cpp msgid "You can't drill there." @@ -13392,12 +13448,11 @@ msgstr "" #: iuse.cpp msgid "You can't see to sew!" -msgstr "" +msgstr "Il n 'y a pas assez de lumière pour coudre." #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "Vous ne pouvez pas remonter à la surface!" +msgstr "" #: iuse.cpp msgid "You can't turn off a glowstick." @@ -13427,9 +13482,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "Vous rechargez votre %s." +msgstr "" #: iuse.cpp msgid "You churn up the earth here." @@ -13437,7 +13492,7 @@ msgstr "Vous retournez la terre ici." #: iuse.cpp msgid "You clean the wound." -msgstr "" +msgstr "Vous nettoyez la blessure." #: iuse.cpp #, c-format @@ -13463,29 +13518,33 @@ msgstr "" #: iuse.cpp #, c-format msgid "You damage your %s further!" -msgstr "" +msgstr "Vous abîmez encore plus votre %s!" #: iuse.cpp #, c-format msgid "You damage your %s!" +msgstr "Vous abîmez votre %s!" + +#: iuse.cpp +msgid "You depress the button but no sound comes out." msgstr "" #: iuse.cpp msgid "You destroy it!" -msgstr "" +msgstr "Vous le détruisez!" #: iuse.cpp msgid "You disinfect the wound." -msgstr "" +msgstr "Vous désinfectez la blessure." #: iuse.cpp msgid "You do not have that item!" -msgstr "" +msgstr "Vous n'avez pas cet objet!" #: iuse.cpp #, c-format msgid "You don't have enough %s to do that." -msgstr "" +msgstr "Vous n'avez pas assez de %s pour faire ça." #: iuse.cpp msgid "" @@ -13500,7 +13559,7 @@ msgstr "Vous ne réparez pas votre %s et gaspiller beaucoup de charge." #: iuse.cpp #, c-format msgid "You don't repair your %s, but you waste lots of thread." -msgstr "" +msgstr "Vous ne réparez pas votre %s mais gâchez beaucoup de fil." #: iuse.cpp #, c-format @@ -13513,7 +13572,7 @@ msgstr "" #: iuse.cpp msgid "You fail to stop the bleeding." -msgstr "" +msgstr "Vous n'avez pas réussi à arrêter l'hémorragie." #: iuse.cpp msgid "You fail to write a message here." @@ -13583,6 +13642,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "Vous êtes très fatigué..." +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -13603,6 +13666,10 @@ msgstr "Vous réchauffez la nourriture." msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "Vous vous injectez le vaccin." @@ -13634,7 +13701,7 @@ msgstr "" #: iuse.cpp msgid "You light the arrow!." -msgstr "" +msgstr "Vous enflammez la flèche." #: iuse.cpp msgid "You light the candle." @@ -13642,7 +13709,7 @@ msgstr "" #: iuse.cpp msgid "You light the dynamite." -msgstr "" +msgstr "Vous allumez la dynamite." #: iuse.cpp msgid "You light the firecracker." @@ -13658,7 +13725,7 @@ msgstr "" #: iuse.cpp msgid "You light the molotov cocktail." -msgstr "" +msgstr "Vous allumez le cocktail molotov." #: iuse.cpp msgid "You light the pack of firecrackers." @@ -13676,7 +13743,7 @@ msgstr "" #: iuse.cpp #, c-format msgid "You make your %s extra sturdy." -msgstr "" +msgstr "Vous améliorez la résistance de votre %s." #: iuse.cpp msgid "You misprogram the manhack; it's hostile!" @@ -13750,6 +13817,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "Vous ouvrez le bocal, l'exposant ainsi à l'air ambiant." @@ -13792,7 +13863,7 @@ msgstr "Vous ouvrez la caisse." #: iuse.cpp msgid "You practice your sewing." -msgstr "" +msgstr "Vous vous entraînez en couture." #: iuse.cpp msgid "You practice your soldering." @@ -13875,17 +13946,17 @@ msgstr "" #: iuse.cpp #, c-format msgid "You repair your %s completely!" -msgstr "" +msgstr "Vous réparez entièrement votre %s!" #: iuse.cpp #, c-format msgid "You repair your %s!" -msgstr "" +msgstr "Vous réparez votre %s!" #: iuse.cpp #, c-format msgid "You repair your %s, but waste lots of thread." -msgstr "" +msgstr "Vous réparez votre %s mais utilisez beaucoup de fil." #: iuse.cpp #, c-format @@ -13986,9 +14057,8 @@ msgid "You snort some crystal meth." msgstr "Vous sniffez de la cristal meth." #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "Vous déroulez le sac de couchage et le placez sur le sol." +msgstr "" #: iuse.cpp msgid "You spill the dogfood all over the ground." @@ -14004,12 +14074,11 @@ msgstr "" #: iuse.cpp msgid "You stop the bleeding." -msgstr "" +msgstr "Vous arrêtez l'hémorragie." #: iuse.cpp -#, fuzzy msgid "You strike your flare and light it." -msgstr "Vous vous brûlez vos jambes et pieds!" +msgstr "" #: iuse.cpp msgid "You string up the tripwire." @@ -14017,7 +14086,7 @@ msgstr "" #: iuse.cpp msgid "You successfully light a fire." -msgstr "" +msgstr "Vous avez réussi à allumer un feu." #: iuse.cpp msgid "You suddenly feel hollow inside." @@ -14068,7 +14137,7 @@ msgstr "Vous prenez des vitamines." #: iuse.cpp #, c-format msgid "You take your %s in, improving the fit." -msgstr "" +msgstr "Vous reprenez votre %s et l'ajustez à votre taille." #: iuse.cpp msgid "You try to hit yourself with the hammer." @@ -14076,7 +14145,7 @@ msgstr "" #: iuse.cpp msgid "You try to light a fire, but fail." -msgstr "" +msgstr "Vous essayez d'allumer un feu mais échouez." #: iuse.cpp msgid "You turn off the light" @@ -14129,7 +14198,7 @@ msgstr "" #: iuse.cpp msgid "You would set yourself on fire." -msgstr "" +msgstr "Vous vous enflammeriez." #: iuse.cpp msgid "You write a message on the ground." @@ -14181,12 +14250,12 @@ msgstr "" #: iuse.cpp #, c-format msgid "Your %s is already enhanced." -msgstr "" +msgstr "Votre %s est déjà amélioré." #: iuse.cpp #, c-format msgid "Your %s is not made of cotton, wool, leather or fur." -msgstr "" +msgstr "Votre %s n'est pas fait de coton, de laine, de cuir ou de fourrure." #: iuse.cpp #, c-format @@ -14257,11 +14326,11 @@ msgstr "" #: iuse.cpp msgid "Your lit molotov goes out." -msgstr "" +msgstr "Votre molotov s'éteint." #: iuse.cpp msgid "Your mind and body slow down. You feel peaceful." -msgstr "" +msgstr "Votre esprit et votre corps ralentissent. Vous vous sentez paisible." #: iuse.cpp msgid "" @@ -14305,11 +14374,11 @@ msgstr "" #: iuse.cpp msgid "Your wound still aches." -msgstr "" +msgstr "Vote blessure vous fait toujours souffrir." #: iuse.cpp msgid "Your wound still hurts." -msgstr "" +msgstr "Votre blessure vous fait tuojours mal." #: iuse.cpp msgid "Zap something" @@ -15234,6 +15303,10 @@ msgstr "" "Un rêve effroyablement réel vous fait vivre une chasse au gibier, que vous " "tuez avec vos dents." +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -15301,6 +15374,12 @@ msgstr "" "Dans votre rêve vous voyez distinctement un reflet de vous même avec une " "apparence de lézard." +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -15325,6 +15404,10 @@ msgstr "" "Vous êtes effrayé par l'extérieur après un rêve criant de réalisme de vie en " "caverne." +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -15336,6 +15419,15 @@ msgstr "" "Vous êtes terrifié par un rêve dans lequel vous servez la reine de la " "fourmillière, sans réfléchir." +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "Vous rêvez que vous êtes un troglodyte primitif." @@ -15344,6 +15436,11 @@ msgstr "Vous rêvez que vous êtes un troglodyte primitif." msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "Vous rêvez que vous êtes un effroyable poulpe mutant." @@ -15360,6 +15457,10 @@ msgstr "Vous rêvez que vous habitez au fond de l'océan." msgid "You dream of swimming in the open ocean" msgstr "Vous rêvez que vous nagez au milieu de l'océan." +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -15393,12 +15494,22 @@ msgstr "" "Vous faites un rêve dérangeant dans lequel vous nagez parmi un banc de " "poissons." +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" "Vous faites un rêve qui ressemble de manière dérangeante à la vie réelle " "sauf que vous y êtes un lézard." +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "Vous rêvez travailler dans une fourmillière." @@ -15414,6 +15525,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "Vous faites un étrange rêve à propos d'animaux." +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "Vous faites un étrange rêve à propos d'oiseaux." @@ -15466,6 +15582,16 @@ msgstr "Vous faites un rêve étrange, dans lequel vous vivez dans la boue." msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "Vous faites un rêve très clair de vous chassant dans les bois." @@ -15478,6 +15604,11 @@ msgstr "Vous avez des rêves étranges de vous élancer vers le ciel." msgid "You scream in fear while you dream of being chased by a cat" msgstr "Vous hurlez de peur alors que vous rêvez être pourchassé par un chat." +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "Vous cauchemardez être emmené par un fermier vers un abattoir." @@ -15504,11 +15635,19 @@ msgstr "" "Votre rêve, bouleversant car saisissant de réalité, vous plaçait dans la " "peau d'un pollinisateur de plantes." +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" "Votre rêve de vivre dans le noir pendant des années semble être la réalité." +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "Vos rêves vous laissent une étrange sensation de reclusion." @@ -15557,6 +15696,10 @@ msgstr "Vos rêves vous laissent une étrange sensation humide." msgid "Your dreams give you a strange wet, scaly feeling." msgstr "Vos rêves vous laissent un étrange et humide sentiment écailleux." +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "Vos rêves de transformations totale en araignée vous effrayent." @@ -15568,12 +15711,20 @@ msgstr "" "Vos rêves de vivre dans les océans vous semblent plus tangibles que la " "réalité." +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" "Vous avez des rêves terriblement vivants de recherche de nourriture avec une " "horde de rats." +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -16551,6 +16702,14 @@ msgstr "" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -17616,6 +17775,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17993,6 +18158,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -18034,6 +18206,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -18314,6 +18492,8 @@ msgstr "" #: lang/json/json_items.py msgid "A long fur scarf, worn over the mouth for warmth." msgstr "" +"Une longue écharpe de fourrure que l'on porte sur la bouche pour se " +"réchauffer." #: lang/json/json_items.py msgid "" @@ -18325,6 +18505,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18357,6 +18543,7 @@ msgstr "" #: lang/json/json_items.py msgid "A long wool scarf, worn over the mouth for warmth." msgstr "" +"Une longue écharpe de laine que l'on porte sur la bouche pour se réchauffer." #: lang/json/json_items.py msgid "" @@ -18720,7 +18907,7 @@ msgstr "" #: lang/json/json_items.py msgid "A pair of cotton gloves." -msgstr "" +msgstr "Une paire de gants en coton." #: lang/json/json_items.py msgid "" @@ -18757,6 +18944,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -18769,16 +18970,27 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." msgstr "" +"Une paire de gants en cuir qui ne couvre pas les doigts, offrant une " +"meilleure dextérité manuelle." #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity. " "These have been crudely reinforced with steel guards across the back." msgstr "" +"Une paire de gants en cuir qui ne couvre pas les doigts, offrant une " +"meilleure dextérité manuelle.. Cette paire a été sommairement renforcée avec " +"des gardes en acier sur le dos." #: lang/json/json_items.py msgid "A pair of leg guards hammered out from metal. Very stylish." @@ -18798,7 +19010,7 @@ msgstr "" #: lang/json/json_items.py msgid "A pair of padded gloves. Cumbersome but warm." -msgstr "" +msgstr "Une paire de gants rembourrés. Encombrants, mais tiennent chaud." #: lang/json/json_items.py msgid "A pair of pants lined with pockets, offering lots of storage." @@ -18823,16 +19035,22 @@ msgid "" "A pair of reinforced kevlar tactical gloves. Commonly used by police and " "military units." msgstr "" +"Une paire de gants tactiques, renforcés avec du kevlar. Utilisés " +"généralement par la police et les militaires." #: lang/json/json_items.py msgid "" "A pair of rubber boots, often used while cleaning with caustic materials." msgstr "" +"Une paire de bottes en caouctchouc, souvent utilisée lorsque l'on nettoie en " +"employant des produits caustiques." #: lang/json/json_items.py msgid "" "A pair of rubber gloves, often used while cleaning with caustic materials." msgstr "" +"Une paire de gants en caoutchouc, souvent utilisée lorsque l'on nettoie en " +"employant des produits caustiques." #: lang/json/json_items.py msgid "A pair of shorts lined with pockets, offering decent storage." @@ -18847,10 +19065,12 @@ msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." msgstr "" +"Des lunettes de soleil élégantes, utiles pour se protéger des rayons du " +"soleil." #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." -msgstr "" +msgstr "Des lunettes de soleil, utiles pour se protéger des rayons du soleil." #: lang/json/json_items.py msgid "A pair of swimming trunks, with netting." @@ -18864,6 +19084,8 @@ msgstr "" #: lang/json/json_items.py msgid "A pair of thin latex gloves, designed to limit the spread of disease." msgstr "" +"Une paire de gants en latex fin, conçue pour limiter la propagation des " +"maladies." #: lang/json/json_items.py msgid "" @@ -18873,11 +19095,11 @@ msgstr "" #: lang/json/json_items.py msgid "A pair of warm fur gloves. They are somewhat cumbersome." -msgstr "" +msgstr "Une paire de gants en fourrure. Ils encombrent un petit peu." #: lang/json/json_items.py msgid "A pair of warm mittens. They are extremely cumbersome." -msgstr "" +msgstr "Une paire de moufles chauds. Ils sont très encombrants." #: lang/json/json_items.py msgid "" @@ -19288,6 +19510,20 @@ msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" "Un petit morceau de corde en nylon. Trop petite pour être vraiment utile." +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -19446,6 +19682,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -19473,6 +19717,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -19706,6 +19956,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19856,7 +20112,7 @@ msgstr "" #: lang/json/json_items.py msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" @@ -19952,7 +20208,7 @@ msgstr "" #: lang/json/json_items.py msgid "A thick pair of wool gloves. Cumbersome but warm." -msgstr "" +msgstr "Une paire d'épais gants en laine. Encombrants mais tiennent chaud." #: lang/json/json_items.py msgid "A thick slab of salty cured bacon." @@ -20010,7 +20266,7 @@ msgstr "" #: lang/json/json_items.py msgid "A thin pair of black leather gloves." -msgstr "" +msgstr "Une paire de gants en cuir fin." #: lang/json/json_items.py msgid "A thin sheet of metal." @@ -20466,13 +20722,10 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "An aluminium baseball bat, lighter than a wooden bat and a little easier to " "swing as a result." msgstr "" -"Une batte de baseball en aluminium, plus courte et légère qu'une batte en " -"bois, infligeant en conséquence moins de dommages." #: lang/json/json_items.py msgid "An aluminum can, like what soda comes in." @@ -20689,6 +20942,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21987,6 +22244,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -22021,6 +22284,13 @@ msgstr "" "Racinette (ou root beer); comme le coca, la cafféine en moins. Cela reste " "mauvais pour la santé." +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "Nombreux articles au sujet des voitures et des techniques de pilotage." @@ -22399,6 +22669,18 @@ msgstr "PDA" msgid "PDA - Flashlight" msgstr "PDA - Lampe de poche" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -22596,6 +22878,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -23506,6 +23794,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "Elles sont bleu, mais pas forcément tristes." @@ -23604,6 +23898,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "Cette farine animale est utilisée pour fertiliser les plantes." @@ -24604,6 +24904,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -25204,6 +25510,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -25457,6 +25777,12 @@ msgstr "" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "Qui n'aime pas le fromage fondu?" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -25523,9 +25849,8 @@ msgid "active Granade" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "ctiver" +msgstr "" #: lang/json/json_items.py msgid "active flashbang" @@ -25579,6 +25904,10 @@ msgstr "" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "batte d'aluminium" @@ -25645,7 +25974,7 @@ msgstr "" #: lang/json/json_items.py msgid "armored fingerless gloves" -msgstr "" +msgstr "mitaines renforcées" #: lang/json/json_items.py msgid "armored gauntlets" @@ -26283,6 +26612,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "" @@ -26439,6 +26772,10 @@ msgstr "" msgid "compound bow" msgstr "" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "acide concentré" @@ -26527,6 +26864,10 @@ msgstr "" msgid "cotton hat" msgstr "" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "" @@ -26571,6 +26912,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "abri en kit endommagé" @@ -26803,6 +27148,10 @@ msgstr "" msgid "feather" msgstr "" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26817,7 +27166,7 @@ msgstr "" #: lang/json/json_items.py msgid "fingerless gloves" -msgstr "" +msgstr "mitaines" #: lang/json/json_items.py msgid "fire drill" @@ -26892,14 +27241,12 @@ msgid "flannel jacket" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "Eblouissement" +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "Eblouissement" +msgstr "" #: lang/json/json_items.py msgid "flashbang" @@ -27063,7 +27410,7 @@ msgstr "" #: lang/json/json_items.py msgid "fur gloves" -msgstr "" +msgstr "gants de fourrure" #: lang/json/json_items.py msgid "fur hat" @@ -27077,6 +27424,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "" @@ -27177,6 +27528,10 @@ msgstr "" msgid "glowstick" msgstr "" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -27241,6 +27596,10 @@ msgstr "" msgid "hand press & die set" msgstr "" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -27381,6 +27740,10 @@ msgstr "" msgid "holster" msgstr "holster" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "rayon de ruche" @@ -27627,7 +27990,7 @@ msgstr "" #: lang/json/json_items.py msgid "leather gloves" -msgstr "" +msgstr "gants de cuir" #: lang/json/json_items.py msgid "leather hot pants" @@ -27637,6 +28000,10 @@ msgstr "" msgid "leather jacket" msgstr "" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "" @@ -27687,7 +28054,7 @@ msgstr "" #: lang/json/json_items.py msgid "light gloves" -msgstr "" +msgstr "gants légers" #: lang/json/json_items.py msgid "light jacket" @@ -27733,6 +28100,10 @@ msgstr "lézard mutagène" msgid "log" msgstr "" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "long island iced tea" @@ -27793,6 +28164,10 @@ msgstr "entonnoir de fortune" msgid "makeshift halberd" msgstr "" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "" @@ -27863,6 +28238,10 @@ msgstr "" #: lang/json/json_items.py msgid "medical gloves" +msgstr "gants medicaux" + +#: lang/json/json_items.py +msgid "medical mutagen" msgstr "" #: lang/json/json_items.py @@ -27955,7 +28334,7 @@ msgstr "foetus déformé" #: lang/json/json_items.py msgid "mittens" -msgstr "" +msgstr "moufles" #: lang/json/json_items.py msgid "mocassins" @@ -27975,7 +28354,7 @@ msgstr "" #: lang/json/json_items.py msgid "monocle" -msgstr "" +msgstr "monocle" #: lang/json/json_items.py msgid "mop" @@ -28041,6 +28420,10 @@ msgstr "planche cloutée" msgid "nail gun" msgstr "pistolet à clou" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "fusil à clou" @@ -28565,6 +28948,10 @@ msgstr "" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "" @@ -28675,11 +29062,11 @@ msgstr "gelée royale" #: lang/json/json_items.py msgid "rubber boots" -msgstr "" +msgstr "bottes de caoutchouc" #: lang/json/json_items.py msgid "rubber gloves" -msgstr "" +msgstr "gants de caoutchouc" #: lang/json/json_items.py msgid "rubber hose" @@ -28771,7 +29158,7 @@ msgstr "" #: lang/json/json_items.py msgid "scarf" -msgstr "" +msgstr "écharpe" #: lang/json/json_items.py msgid "science ID card" @@ -28861,6 +29248,10 @@ msgstr "" msgid "sharpened metal arrow" msgstr "" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "" @@ -29177,6 +29568,10 @@ msgstr "" msgid "steel plating" msgstr "" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -29243,7 +29638,7 @@ msgstr "" #: lang/json/json_items.py msgid "stylish sunglasses" -msgstr "" +msgstr "lunettes de soleil élégantes" #: lang/json/json_items.py msgid "sugar" @@ -29259,7 +29654,7 @@ msgstr "" #: lang/json/json_items.py msgid "sunglasses" -msgstr "" +msgstr "lunettes de soleil" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "superalloy plating" @@ -29358,13 +29753,12 @@ msgid "tactical dump pouch" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "casque de chitine" +msgstr "" #: lang/json/json_items.py msgid "tactical gloves" -msgstr "" +msgstr "gants tactiques" #: lang/json/json_items.py msgid "tactical helmet" @@ -29411,9 +29805,8 @@ msgid "tea leaves" msgstr "feuilles de thé" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "armes" +msgstr "" #: lang/json/json_items.py msgid "teargas canister" @@ -29427,6 +29820,10 @@ msgstr "" msgid "television" msgstr "" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "tente" @@ -29721,7 +30118,7 @@ msgstr "" #: lang/json/json_items.py msgid "winter gloves" -msgstr "" +msgstr "gants d'hiver" #: lang/json/json_items.py msgid "winter survivor suit" @@ -29768,9 +30165,8 @@ msgid "wooden javelin" msgstr "javelot en bois" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "javelot en bois" +msgstr "" #: lang/json/json_items.py msgid "woods soup" @@ -29782,7 +30178,7 @@ msgstr "" #: lang/json/json_items.py msgid "wool gloves" -msgstr "" +msgstr "gants de laine" #: lang/json/json_items.py msgid "wool poncho" @@ -29968,6 +30364,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -30195,6 +30600,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -30203,6 +30616,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -30315,9 +30737,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "Bonus à la vitesse d'attaque" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -30339,16 +30760,11 @@ msgid "Aikido" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "Aikido is a Japanese martial art focused on self-defense, while minimizing " "injury to the attacker. It uses defensive throws and disarms. Damage done " "while using this technique is halved, but pain inflicted is doubled." msgstr "" -"L'aikido est un art martial japonais centré sur l'autodéfense qui minimise\n" -"les blessures assénées à l'attaquant. Il utilise des techniques de " -"projection défensive et désarmement. Les dommages infligés\n" -"avec cette méthode sont réduits de moitié mais la douleur est doublée." #: lang/json/json_martialarts.py msgid "" @@ -30391,9 +30807,8 @@ msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "Intelligence - %d; " +msgstr "" #: lang/json/json_martialarts.py msgid "Dragon Kung Fu" @@ -30486,8 +30901,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -30598,9 +31014,8 @@ msgid "Snake Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Snake Sight" -msgstr "Wright" +msgstr "" #: lang/json/json_martialarts.py msgid "Strength decreases damage when blocking" @@ -30634,9 +31049,8 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "Les Tigres" +msgstr "" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" @@ -34049,6 +34463,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -34242,6 +34664,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -34620,6 +35046,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -35084,6 +35516,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -35201,6 +35640,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -46017,6 +46462,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -46037,6 +46491,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -46047,11 +46505,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -46062,6 +46545,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -46077,21 +46574,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -46107,6 +46634,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -46122,14 +46659,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -46138,10 +46720,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -46150,6 +46772,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -46180,6 +46807,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -46195,11 +46842,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -46210,21 +46872,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -46240,11 +46940,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -46255,6 +46969,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -48233,6 +48952,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -48519,6 +49248,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -50160,6 +50894,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -50560,9 +51299,9 @@ msgid "STATS" msgstr "" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "Compétence utilisée: %s" +msgstr "" #: newcharacter.cpp #, c-format @@ -51263,27 +52002,27 @@ msgstr "" #: npctalk.cpp #, c-format msgid " %s will not use firearms." -msgstr "" +msgstr " %s n'utilisera pas d'armes à feu." #: npctalk.cpp #, c-format msgid " %s will not use grenades." -msgstr "" +msgstr " %s n'utilisera pas des grenades." #: npctalk.cpp #, c-format msgid " %s will use firearms." -msgstr "" +msgstr " %s utilisera des armes à feu." #: npctalk.cpp #, c-format msgid " %s will use grenades." -msgstr "" +msgstr " %s utilisera des grenades." #: npctalk.cpp #, c-format msgid " %s will use silenced firearms." -msgstr "" +msgstr " %s utilisera des armes avec silencieux." #: npctalk.cpp msgid "!Calm down. I'm not going to hurt you." @@ -51394,23 +52133,23 @@ msgstr "" #: npctalk.cpp msgid "*is engaging all enemies." -msgstr "" +msgstr "* attaquera tous les ennemis." #: npctalk.cpp msgid "*is engaging enemies you attack." -msgstr "" +msgstr "* attaquera les ennemis que vous attaquez." #: npctalk.cpp msgid "*is engaging nearby enemies." -msgstr "" +msgstr "* attaquera les ennemis proches." #: npctalk.cpp msgid "*is engaging weak enemies." -msgstr "" +msgstr "* attaquera les ennemis faibles." #: npctalk.cpp msgid "*is not engaging enemies." -msgstr "" +msgstr "* n'attaquera pas les ennemis." #: npctalk.cpp msgid "< Back" @@ -51486,7 +52225,7 @@ msgstr "" #: npctalk.cpp msgid ", and if you ask again, !" -msgstr "" +msgstr ", et si tu demandes encore, !" #: npctalk.cpp msgid " !" @@ -51589,7 +52328,7 @@ msgstr "" #: npctalk.cpp msgid "Alright, let's begin." -msgstr "" +msgstr "D'accord, c'est parti." #: npctalk.cpp msgid "Alright, let's go." @@ -51601,7 +52340,7 @@ msgstr "" #: npctalk.cpp msgid "Alright. You can lead now." -msgstr "" +msgstr "D'accord, ouvre le chemin." #: npctalk.cpp msgid "Another survivor! We should travel together." @@ -51609,7 +52348,7 @@ msgstr "" #: npctalk.cpp msgid "At least we've got shelter." -msgstr "" +msgstr "Au moins nous avons un un abri." #: npctalk.cpp msgid "Attack anything you want." @@ -51855,11 +52594,11 @@ msgstr "" #: npctalk.cpp msgid "Hello there." -msgstr "" +msgstr "Salut." #: npctalk.cpp msgid "Hello! Would you care to see my goods?" -msgstr "" +msgstr "Bonjour! Tu es intéressé de voir mes biens?" #: npctalk.cpp msgid "Hello, ." @@ -51875,7 +52614,7 @@ msgstr "" #: npctalk.cpp msgid "Here's what I can teach you..." -msgstr "" +msgstr "Voilà ce que je peux t'enseigner..." #: npctalk.cpp msgid "Hey , I could really use a gun." @@ -52000,6 +52739,8 @@ msgstr "" #: npctalk.cpp msgid "I don't know, look for supplies and other survivors I guess." msgstr "" +"Je ne sais pas trop, chercher des provisions et d'autres survivants " +"j'imagine." #: npctalk.cpp msgid "I don't kowtow to any group, ?" @@ -52250,6 +52991,7 @@ msgstr "" #: npctalk.cpp msgid "It's not safe here. Let's get to safety first." msgstr "" +"Nous ne sommes pas en sécurité ici, allons nous mettre à l'abri d'abord." #: npctalk.cpp msgid "Just looking for some wrongs to right." @@ -52269,7 +53011,7 @@ msgstr "" #: npctalk.cpp msgid "Keep your distance!" -msgstr "" +msgstr "Reste à distance!" #: npctalk.cpp msgid "L: Look at" @@ -52385,7 +53127,7 @@ msgstr "" #: npctalk.cpp msgid "No. I'm the leader here." -msgstr "" +msgstr "Non c'est moi le chef ici." #: npctalk.cpp msgid "Not a problem." @@ -52402,7 +53144,7 @@ msgstr "" #: npctalk.cpp msgid "Not until I get some antibiotics..." -msgstr "" +msgstr "Pas avant que j'ai des antibiotiques." #: npctalk.cpp msgid "Not yet." @@ -52446,7 +53188,7 @@ msgstr "" #: npctalk.cpp msgid "Okay, here you go." -msgstr "" +msgstr "Ok, voilà pour toi." #: npctalk.cpp msgid "Okay, let's go!" @@ -52454,7 +53196,7 @@ msgstr "" #: npctalk.cpp msgid "Okay, no sudden movements..." -msgstr "" +msgstr "Ok, pas de gestes brusques..." #: npctalk.cpp msgid "Okay, okay, sorry." @@ -52568,7 +53310,7 @@ msgstr "" #: npctalk.cpp msgid "Sorry, but it doesn't seem I have anything to teach you." -msgstr "" +msgstr "Désolé mais j'ai l'impression que je n'ai rien à t'apprendre." #: npctalk.cpp msgid "Sounds good, thanks." @@ -52733,11 +53475,11 @@ msgstr "" #: npctalk.cpp msgid "What is it?" -msgstr "" +msgstr "Qu'est-ce que c'est ?" #: npctalk.cpp msgid "What should I do?" -msgstr "" +msgstr "Que devrais-je faire?" #: npctalk.cpp msgid "What should we do now?" @@ -52769,11 +53511,11 @@ msgstr "" #: npctalk.cpp msgid "Why should I share my equipment with you?" -msgstr "" +msgstr "Pourquoi je partagerais mon équipement avec toi?" #: npctalk.cpp msgid "Why should I travel with you?" -msgstr "" +msgstr "Pourquoi je voyagerais avec toi?" #: npctalk.cpp msgid "Yeah, I'm sure. Bye." @@ -52781,7 +53523,7 @@ msgstr "" #: npctalk.cpp msgid "Yeah... I don't think so." -msgstr "" +msgstr "Mouais... je ne crois pas non." #: npctalk.cpp msgid "Yes, let's resume training " @@ -52797,7 +53539,7 @@ msgstr "" #: npctalk.cpp msgid "You asked me recently; ask again later." -msgstr "" +msgstr "Tu m'as demandé récemment, demande plus tard." #: npctalk.cpp msgid "You can keep me safe." @@ -52817,11 +53559,11 @@ msgstr "" #: npctalk.cpp msgid "You got it, I'm with you!" -msgstr "" +msgstr "Ok ça me va, je te suis!" #: npctalk.cpp msgid "You just asked me for stuff; ask later." -msgstr "" +msgstr "Tu viens de me demander du matos, redemande moi plus tard." #: npctalk.cpp msgid "You may be attacked! Proceed?" @@ -52849,7 +53591,7 @@ msgstr "" #: npctalk.cpp msgid "You're really leaving?" -msgstr "" +msgstr "Tu es sûr de partir?" #: npctalk.cpp msgid "You're too far away, !" @@ -53062,7 +53804,7 @@ msgstr "" #: npctalk.cpp msgid "infection" -msgstr "" +msgstr "infection" #: npctalk.cpp msgid "mafuckin'" @@ -54545,7 +55287,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -54599,7 +55341,7 @@ msgstr "Bioniques :" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "" @@ -55077,10 +55819,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -55202,9 +55940,9 @@ msgid "Read %i" msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%% " -msgstr "Poids: kg" +msgstr "" #: player.cpp #, c-format @@ -55269,9 +56007,9 @@ msgid "Siphoned %d units of %s from the %s." msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%% " -msgstr "Poids: kg" +msgstr "" #: player.cpp msgid "Skills:" @@ -55532,6 +56270,11 @@ msgstr "" msgid "Weapon: %s" msgstr "" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -55733,7 +56476,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -56016,9 +56759,8 @@ msgid "Your batteries discharge slightly." msgstr "" #: player.cpp -#, fuzzy msgid "Your body strains under the weight!" -msgstr "Votre dépeçage maladroit détruit la viande!" +msgstr "" #: player.cpp msgid "Your eyes won't focus without reading glasses." @@ -56140,6 +56882,11 @@ msgstr "Critique!" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" @@ -57436,2497 +58183,2485 @@ msgstr "" msgid "______NO NAME ENTERED!!!!_____" msgstr "" -#~ msgid "Monster Spotted!" -#~ msgstr "Monstre repéré !" - -#, fuzzy -#~ msgid "Start cart construction" -#~ msgstr "Commencer à Construire un Véhicule" - -#, fuzzy -#~ msgid "Enter new cart name:" -#~ msgstr "Entrez un nouveau nom pour ce véhicule:" - -#, fuzzy -#~ msgid "Cart" -#~ msgstr "Caddie de golf" - -#, fuzzy -#~ msgid "%1$s elbows %4$s" -#~ msgstr "%1$s bloquer %4$s" - -#~ msgid "Mutate: " -#~ msgstr "Mutation: " +#~ msgid "Bread and turkey, that's it." +#~ msgstr "Du pain et de la dinde, c'est tout." -#~ msgid "Spawn a: " -#~ msgstr "Faire apparaître un/une: " +#~ msgid "carrot" +#~ msgstr "carrotte" -#~ msgid "Wish granted - %d x %s." -#~ msgstr "Obtenu - %d x %s." +#~ msgid "cooked spaghetti" +#~ msgstr "spaghetti cuit" -#~ msgid "How many do you want? (default is 1): " -#~ msgstr "Combien? (par défaut = 1): " +#~ msgid "Canned beans. A staple for hobos." +#~ msgstr "Des haricots en boîte. La nourriture naturelle des clochards." -#~ msgid "contained" -#~ msgstr "contenu" +#~ msgid "sardines" +#~ msgstr "sardines" -#~ msgid "\"%s \" not found!" -#~ msgstr "\"%s \" Introuvable!" +#~ msgid "tuna fish" +#~ msgstr "thon" -#~ msgid "Wish for a: " -#~ msgstr "Faire un voeux pour un/une: " +#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." +#~ msgstr "Beurk. A manger si l'alternative est de mourrir de faim." -#~ msgid "('/' to search, Esc to stop, <> to switch between results)" +#~ msgid "" +#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " +#~ "emergency." #~ msgstr "" -#~ "('/' pour chercher, Esc pour arrêter, <> pour fouiller dans les résultats)" - -#~ msgid "Your hands are very exposed to the cold. Your hands are shivering." -#~ msgstr "Vos mains sont très exposées au froid. Vos mains tremblent." +#~ "Un gros morceau de cire d'abeille. Pas très bon, mais ok en cas d'urgence." #~ msgid "" -#~ "Your head is dangerously cold. Getting undressed sounds like a good idea." +#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " +#~ "all sorts of afflictions." #~ msgstr "" -#~ "Votre crâne est dangereusement froid. Se déshabiller semble une bonne " -#~ "idée." - -#~ msgid "Oh god, what's happening?" -#~ msgstr "Bon sang, qu'est ce qu'il se passe ?" - -#~ msgid "Huh? What was that?" -#~ msgstr "Hein ? qu'est ce que c'est que ça ?" +#~ "Un gros morceau de cire, remplid 'une pête sombre. Utilisé en médecine " +#~ "naturelle pour soigner un peu près tout." -#~ msgid "You feel your skeleton melt" -#~ msgstr "Vous sentez vos os fondre." +#~ msgid "" +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." +#~ msgstr "" +#~ "Un foetus humain déformé. Ce serait horrible à manger, et provoquerait " +#~ "sûrement des dommages à votre ADN." -#~ msgid "Fully rested." -#~ msgstr "Complétement reposé." +#~ msgid "" +#~ "A misshapen human arm, eating this would be pretty disgusting and cause " +#~ "your DNA to mutate." +#~ msgstr "" +#~ "Un bras humain déformé. Ce serait horrible à manger, et provoquerait " +#~ "sûrement des dommages à votre ADN." -#~ msgid "An alarm rings but you don't hear it." -#~ msgstr "Une alarme sonne mais vous ne l'entendez pas!" +#~ msgid "" +#~ "A malformed human leg, this would be gross to eat, and cause mutations." +#~ msgstr "" +#~ "Une jambe humaine déformée. Ce serait horrible à manger, et provoquerait " +#~ "sûrement des dommages à votre ADN." -#~ msgid "Your coughing wakes you up." -#~ msgstr "Votre toux vous réveille." +#~ msgid "" +#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." +#~ msgstr "" +#~ "Un gros oeuf de fourmi, de la taille d'une balle de baseball. Très " +#~ "nourrissants, mais à la consistance et l'odeur du vomi." -#~ msgid "Your feet feel numb." -#~ msgstr "Vous ne sentez plus vos pieds." +#~ msgid "This white flour is useful for baking." +#~ msgstr "Utile pour la pâtisserie." -#~ msgid "Your torso is burning up. You should remove some layers." -#~ msgstr "Votre torse est brulant. Vous devriez retirer des couches." +#~ msgid " +Dodge" +#~ msgstr " +Esquive" -#, fuzzy -#~ msgid "Part: %s" -#~ msgstr "Graffiti : %s" +#~ msgid " +Attack" +#~ msgstr " +Attaque" -#~ msgid "Disinfectant" -#~ msgstr "Désinfectant" +#~ msgid " +Damage" +#~ msgstr " +Dégats" -#~ msgid "Bandage" -#~ msgstr "Bandage" +#~ msgid "You have a nicotine craving." +#~ msgstr "Vous êtes en manque de nicotine." -#~ msgid "create an EMP" -#~ msgstr "Créer une Pulsion Electro Magnétique" +#~ msgid "You have a caffeine craving." +#~ msgstr "Vous êtes en manque de cafféine." -#~ msgid "Siphon from" -#~ msgstr "Siphonner..." +#~ msgid "You have an alcohol craving." +#~ msgstr "Vous êtes en manque d'alcool." #~ msgid "" -#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" -#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " -#~ "allows\n" -#~ "you an extra dodge and two extra blocks on the following round." +#~ "A tool used to drive nails into wood or other material. It could also be " +#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." #~ msgstr "" -#~ "Le karaté est un art martial populaire né au Japon. Il est centré sur\n" -#~ "des attaques rapides et précises, des blocages et desmouvements fluides. " -#~ "Une attaque réussie vous\n" -#~ "donne une esquive supplémentaire et deux blocages supplémentaires au " -#~ "prochain tour." +#~ "Un outil utilisé pour clouer des planches en construction. Il peut aussi " +#~ "faire une arme improvisée, ou utiliser pour faire monter votre compétence " +#~ "Arme de Poing à 1." #~ msgid "" -#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" +#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " +#~ "damage. It could be used to practice your rifle skill up to level 1." #~ msgstr "" -#~ "Des quartiers de pomme trempés dans du sucre inverti pour conserver " -#~ "l'apparence et la fraîcheur." - -#~ msgid "apple slices" -#~ msgstr "quartiers de pomme" +#~ "L'arme préférée des enfants. Assez précis, mais les plombs ne font " +#~ "presque aucun dégats. Il peut êtr utilisé pour monter votre compétence " +#~ "Fusil à 1." #~ msgid "" -#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " -#~ "color." +#~ "A leather sling, it is easy to use and accurate, but pebbles do little " +#~ "damage. Pebbles are used as ammunition." #~ msgstr "" -#~ "Un bocal en verre scellé qui contient des pommes préservées. Fades, " -#~ "molles et en train de perdre leur couleur." +#~ "Une fronde en cuir, elle est facile à utiliser et précise, mais les " +#~ "graviers utilié comme munition font peu de dégats." -#~ msgid "canned apple slices" -#~ msgstr "quartiers de pommes en conserve" +#~ msgid "Aaliyah" +#~ msgstr "Aaliyah" -#~ msgid "MRE - beef" -#~ msgstr "MRE - bœuf" +#~ msgid "Aaron" +#~ msgstr "Aaron" -#~ msgid "beef jerky" -#~ msgstr "bœuf séché" +#~ msgid "Abigail" +#~ msgstr "Abigail" -#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." -#~ msgstr "De l'acide de pluies acides concentré. N'en buvez pas." +#~ msgid "Adam" +#~ msgstr "Adam" -#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." -#~ msgstr "" -#~ "N'en buvez pas. La mélanger avec de l'eau de Javel produit un gaz toxique." +#~ msgid "Adams" +#~ msgstr "Adams" -#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." -#~ msgstr "" -#~ "N'en buvez pas. La mélanger avec de l'ammoniaque produit un gaz toxique." +#~ msgid "Addison" +#~ msgstr "Addison" -#~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." -#~ msgstr "" -#~ "Un dosimètre qui mesure le niveau de radiation. Il est rangé dans un sac " -#~ "qui bloque les radiations. Activez le pour le sortir du sac." +#~ msgid "Adrian" +#~ msgstr "Adrian" -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "" -#~ "Un peu encombrant à porter mais fournit pas mal d'espace de stockage." +#~ msgid "Aidan" +#~ msgstr "Aidan" -#~ msgid "Sterilized the infection... this time." -#~ msgstr "Vous avez stérilisé l'infection... cette fois." +#~ msgid "Aiden" +#~ msgstr "Aiden" -#~ msgid "Cleaned the bite wound." -#~ msgstr "La blessure par morsure est nettoyée." +#~ msgid "Alex" +#~ msgstr "Alex" -#~ msgid "" -#~ "You can manage to find space for anything! You can carry 40%% more volume." -#~ msgstr "" -#~ "Vous vous débrouillez pour caser des objets partout! Vous pouvez " -#~ "transporter 40%% de volume en plus." +#~ msgid "Alexa" +#~ msgstr "Alexa" -#~ msgid "" -#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." -#~ msgstr "" -#~ "Il en faut beaucoup pour vous tuer! Vous avez 20%% de bonus à tous vos " -#~ "points de vie." +#~ msgid "Alexander" +#~ msgstr "Alexander" -#~ msgid "You're just generally quick! You get a 10%% bonus to action points." -#~ msgstr "" -#~ "Vous êtes simplement rapide ! Vous obtenez un bonus de 10%% aux points " -#~ "d'action." +#~ msgid "Alexandra" +#~ msgstr "Alexandra" -#~ msgid "" -#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " -#~ "sure footing." -#~ msgstr "" -#~ "Vous courez plus vite que la plupart des gens; cela résulte en un bonus " -#~ "de 15%% de vitesse en bonnes conditions de course." +#~ msgid "Alexis" +#~ msgstr "Alexis" -#~ msgid "You don't have enough battery power to purify all the water." -#~ msgstr "Vous n'avez pas assez de batterie pour purifier toute l'eau." +#~ msgid "Allen" +#~ msgstr "Allen" -#~ msgid "" -#~ "This zombie was clearly a soldier before.\n" -#~ "Its tattered armor gives it strong defense,\n" -#~ "and it is much more physically fit than\n" -#~ "most zombies." -#~ msgstr "" -#~ "Clairement ce zombie était auparavant un soldat.\n" -#~ "Son armure, en piteux état, lui accorde une bien meilleure défense,\n" -#~ "et il est physiquement plus\n" -#~ "fort que la plupart des zombies." +#~ msgid "Allison" +#~ msgstr "Allison" -#~ msgid "Pry" -#~ msgstr "Forcer l'ouverture" +#~ msgid "Alyssa" +#~ msgstr "Alyssa" -#~ msgid "" -#~ "A zombie that has somehow grown to the size of\n" -#~ "6 men, with arms as wide as a trash can." -#~ msgstr "" -#~ "Un zombie qui a d'une manière ou d'une autre grandi jusqu'à\n" -#~ "la taille de 6 hommes, avec des bras aussi larges que des poubelles." +#~ msgid "Amelia" +#~ msgstr "Amelia" -#~ msgid "" -#~ "A zombie wearing a tattered lab coat and\n" -#~ "some sort of utility belt. It looks weaker\n" -#~ "than most zombies, but more resourceful too." -#~ msgstr "" -#~ "Un zombie vêtu d'une blouse de laboratoire en lambeaux et\n" -#~ "d'une ceinture utilitaire. Il a l'air plus faible\n" -#~ "que la plupart des zombies mais plein de ressources aussi." +#~ msgid "Anderson" +#~ msgstr "Anderson" -#~ msgid "" -#~ "A zombie with jet black skin and glowing red\n" -#~ "eyes. As you look at it, you're gripped by a\n" -#~ "feeling of dread and terror." -#~ msgstr "" -#~ "Un zombie avec une peau noir de jais et des yeux\n" -#~ "rougeoyants. Lorsque vous le regardez vous êtes saisis d'un\n" -#~ "sentiment de terreur et de crainte." +#~ msgid "Andrea" +#~ msgstr "Andrea" -#~ msgid "" -#~ "A hideous beast of a zombie, bulging with\n" -#~ "distended muscles on both arms and legs." -#~ msgstr "" -#~ "Un hideux zombie bestial, gonflé\n" -#~ "de muscles enflés sur les bras et les jambes." +#~ msgid "Andrew" +#~ msgstr "Andrew" -#~ msgid "" -#~ "This zombie's hands and feet are\n" -#~ "webbed, and it is clad in swimwear." -#~ msgstr "" -#~ "Les mains et pieds de ce zombie sont\n" -#~ "palmés et il est habillé d'une tenue de natation." +#~ msgid "Angel" +#~ msgstr "Angel" -#~ msgid "" -#~ "A human body, encapsulated in tough riot\n" -#~ "armour, this zombie was clearly a cop gearing\n" -#~ "up to fight the infection." -#~ msgstr "" -#~ "Un corps humain, protégé par une armure\n" -#~ "anti-émeute résistante; clairement ce zombie était un policier armé\n" -#~ "pour combattre les infectés." +#~ msgid "Angelina" +#~ msgstr "Angelina" -#~ msgid "" -#~ "You were a high school student until the teachers literally tried to pick " -#~ "your brains. You start with a backpack and a zombie survival guide." -#~ msgstr "" -#~ "Vous étiez un lycéen jusqu'au jour où les enseignants ont réellement " -#~ "essayé de s'occuper de votre cerveau. Vous débutez avec un sac à dos et " -#~ "un guide de survie en territoire zombie." +#~ msgid "Anna" +#~ msgstr "Anna" -#~ msgid "You couldn't stop the bleeding." -#~ msgstr "Vous n'avez pas réussi à stopper l'hémorragie." +#~ msgid "Anthony" +#~ msgstr "Anthony" -#~ msgid "You managed to stop the bleeding." -#~ msgstr "Vous réussissez à arrêter l'hémorragie." +#~ msgid "Ariana" +#~ msgstr "Ariana" -#~ msgid "" -#~ "This chemistry set stored in a bag contains some glass containers, some " -#~ "metal wire and safety glasses. It might be used to craft some chems if " -#~ "you're so inclined." -#~ msgstr "" -#~ "Ce kit de chimie contient, dans un sac, des contenants de verre, des " -#~ "câbles de métal et des lunettes de sécurité. Il pourrait être utilisé " -#~ "pour produire des produits chimiques si le coeur vous en dit." +#~ msgid "Arianna" +#~ msgstr "Arianna" -#~ msgid "A plastic mold which can be used to craft items made of plastic." -#~ msgstr "" -#~ "Un moule en plastique qui peut être utilisé pour fabriquer des objets en " -#~ "plastique." +#~ msgid "Ashley" +#~ msgstr "Ashley" -#~ msgid "" -#~ "A still, useful for the distillation of alcohol and other, more curious " -#~ "substances." -#~ msgstr "" -#~ "Un alambic, utilisé pour la distillation de l'alcool et d'autres " -#~ "substances plus curieuses." +#~ msgid "Aubrey" +#~ msgstr "Aubrey" -#~ msgid "" -#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " -#~ "metal, and complete disregard for personal safety. Not as efficient as a " -#~ "factory welder, but it will serve in a pinch." -#~ msgstr "" -#~ "Cette soudeuse rudimentaire a été fabriquée à partir d'un paquet de " -#~ "câbles de cuivre, de ferraille et un dédain complet pour la sécurité " -#~ "personnelle de l'utilisateur. Pas aussi efficace qu'une soudeuse " -#~ "industrielle mais servira à la rigueur." +#~ msgid "Audrey" +#~ msgstr "Audrey" -#~ msgid "A bicycle folded into a relatively portable package." -#~ msgstr "Un vélo plié en un paquet relativement portable." +#~ msgid "Austin" +#~ msgstr "Austin" -#~ msgid "A fluffy towel, can be used to dry yourself." -#~ msgstr "Une serviette moelleuse, utilisable pour vous séchez." +#~ msgid "Autumn" +#~ msgstr "Autumn" -#~ msgid "A talking doll for children, luckily it still works." -#~ msgstr "" -#~ "Une poupée parlante pour les enfants, par chance elle fonctionne encore." +#~ msgid "Ava" +#~ msgstr "Ava" -#~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. This one has " -#~ "been used already and is now useless." -#~ msgstr "" -#~ "Un paquet chauffant, utilisé pour traiter les blessures de sport et " -#~ "chauffer la nourriture. Celui-ci est utilisé et est désormais inutile." +#~ msgid "Avery" +#~ msgstr "Avery" -#~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. Usable only " -#~ "once." -#~ msgstr "" -#~ "Un paquet chauffant, utilisé pour traiter les blessures de sport et " -#~ "chauffer la nourriture. Utilisation unique." +#~ msgid "Ayden" +#~ msgstr "Ayden" -#~ msgid "" -#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " -#~ "shelter has been damaged, and needs repairs." -#~ msgstr "" -#~ "Un petit abri fabriqué avec des bâtons et des peaux. (a)ctivez le pour le " -#~ "placer. Cet abri a été endommagé et nécessite des réparations." +#~ msgid "Bailey" +#~ msgstr "Bailey" -#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." -#~ msgstr "" -#~ "Un petit abri fabriqué avec des bâtons et des peaux. (a)ctivez le pour le " -#~ "placer." +#~ msgid "Baker" +#~ msgstr "Baker" -#~ msgid "" -#~ "A large stick, with the end carved into a blade for digging. Can be used " -#~ "to dig shallow pits, but not deep ones." -#~ msgstr "" -#~ "Un gros bâton dont la pointe est taillée en lame pour creuser. Il peut " -#~ "être utilisé pour creuser des trous peu profonds seulement." +#~ msgid "Barnes" +#~ msgstr "Barnes" -#~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." -#~ msgstr "" -#~ "Une pierre aplatie attachée à un bâton, cette pelle fonctionne comme une " -#~ "pelle mais on ne peut vraiment pas la comparer à une vraie pelle." +#~ msgid "Bell" +#~ msgstr "Bell" -#~ msgid "" -#~ "A sharpened stone affixed to a stick, works passably well as an axe but " -#~ "really can't compare to a proper axe." -#~ msgstr "" -#~ "Une pierre affûtée attachée à un bâton, elle fonctionne comme une hache " -#~ "mais on ne peut vraiment pas la comparer à une vraie hache." +#~ msgid "Benjamin" +#~ msgstr "Benjamin" -#~ msgid "" -#~ "A rock affixed to a stick, functions adequately as a hammer, but really " -#~ "can't compare to a proper hammer." -#~ msgstr "" -#~ "Un rocher attaché à un bâton, qui fonctionne comme un marteau mais on ne " -#~ "peut vraiment pas le comparer à un vrai marteau." +#~ msgid "Bennett" +#~ msgstr "Bennett" -#~ msgid "" -#~ "A sharp needle made from a bone. It would be useful for making rough " -#~ "clothing and items" -#~ msgstr "" -#~ "Une aiguille fabriquée à partir d'os. Elle serait utile pour fabriquer " -#~ "grossièrement des vêtements et objets." +#~ msgid "Blake" +#~ msgstr "Blake" -#~ msgid "A small pocket knife, not great for combat, but better than nothing." -#~ msgstr "" -#~ "Un petit couteau de poche, médiocre pour le combat mais toujours mieux " -#~ "que rien." +#~ msgid "Brady" +#~ msgstr "Brady" -#~ msgid "" -#~ "A small multipurpose electronic device. This PDA has its flashlight app " -#~ "on, and is providing light." -#~ msgstr "" -#~ "Un petit appareil électronique multifonction. Ce PDA a l'application " -#~ "lampe de poche allumée et fait donc un peu de lumière." +#~ msgid "Brandon" +#~ msgstr "Brandon" -#~ msgid "" -#~ "A small multipurpose electronic device. Can be loaded with a variety of " -#~ "apps, providing all kinds of functionality." -#~ msgstr "" -#~ "PDA : Personal Digital Assistant. Un petit appareil électronique " -#~ "multifonction. Il peut être chargé avec de multiples apps, fournissant " -#~ "ainsi toutes sortes de fonctionnalités." - -#~ msgid "A piece of kevlar. Can be used to repair kevlar items" -#~ msgstr "" -#~ "Un morceau de kevlar qui peut être utilisé pour réparer des objets en " -#~ "kevlar." - -#~ msgid "A piece of plastic. Not much use except to repair plastic items" -#~ msgstr "" -#~ "Un morceau de plastique. Peu d'utilité sauf pour réparer les objets en " -#~ "plastique." - -#~ msgid "Rag, useful in crafting and possibly stopping bleeding" -#~ msgstr "" -#~ "Un chiffon, utile pour l'artisanat et peut-être pour arrêter les " -#~ "hémorragies." - -#~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." -#~ msgstr "" -#~ "Un marqueur permanent King Size(tm) très résistant, sa taille est à " -#~ "moitié à mi-chemin entre un marqueur commun et un spray aérosol." - -#~ msgid "" -#~ "A spray can, filled with paint. Use this tool to make graffiti on the " -#~ "floor." -#~ msgstr "" -#~ "Un spray aérosol de peinture. Utilisez-le pour faire des graffitis sur le " -#~ "sol." +#~ msgid "Brayden" +#~ msgstr "Brayden" -#~ msgid "A large steel pickaxe, strike the earth!" -#~ msgstr "Une grosse pioche en acier, 'strike the earth!'" +#~ msgid "Brian" +#~ msgstr "Brian" -#~ msgid "An unwieldy mop. Good for cleaning up spills." -#~ msgstr "" -#~ "Un balai à franges peu maniable. Utile pour nettoyer les liquides " -#~ "renversés." +#~ msgid "Brianna" +#~ msgstr "Brianna" -#~ msgid "" -#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " -#~ "mechanics crafting recipes." -#~ msgstr "" -#~ "Une clé ajustable. Correct comme arme de mêlée et utile pour de " -#~ "nombreuses fabrications." +#~ msgid "Brody" +#~ msgstr "Brody" -#~ msgid "" -#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " -#~ "outside and place a container beneath it to collect water when it rains." -#~ msgstr "" -#~ "Un petit entonnoir improvisé utile pour collecter l'eau de pluie. (a)" -#~ "ctivez le à l'extérieur et placez un contenant en dessous pour collecter " -#~ "l'eau de pluie." +#~ msgid "Brooke" +#~ msgstr "Brooke" -#~ msgid "" -#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " -#~ "container beneath it to collect water when it rains." -#~ msgstr "" -#~ "Un entonnoir utilisé pour collecter l'eau de pluie. (a)ctivez le à " -#~ "l'extérieur et placez un contenant en dessous pour collecter l'eau de " -#~ "pluie." +#~ msgid "Brooklyn" +#~ msgstr "Brooklyn" -#~ msgid "" -#~ "A large stand with slots in the side. (a)ctivate it and place it " -#~ "somewhere then set fires in it with no risk of spreading." -#~ msgstr "" -#~ "Un support large avec des fentes sur le côté. (a)ctivez le et placez le " -#~ "puis vous pouvez y allumer un feu sans risque de le voir s'étendre." +#~ msgid "Brooks" +#~ msgstr "Brooks" -#~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time. This candle is lit." -#~ msgstr "" -#~ "Une bougie imposante, ne produit pas beaucoup de lumière mais brûlera " -#~ "assez longtemps. Cette bougie est allumée." +#~ msgid "Brown" +#~ msgstr "Brown" -#~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time." -#~ msgstr "" -#~ "Une bougie imposante, ne produit pas beaucoup de lumière mais brûlera " -#~ "assez longtemps." +#~ msgid "Bryan" +#~ msgstr "Bryan" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " -#~ "amount of light" -#~ msgstr "" -#~ "Un gros bâton enrobé de chiffons imbibés d'essence. Une fois enflammée la " -#~ "torche produit une assez bonne quantité de lumière." +#~ msgid "Bryant" +#~ msgstr "Bryant" -#~ msgid "A small tent, just big enough to fit a person comfortably." -#~ msgstr "" -#~ "Une petite tente, qui a juste assez de place pour accueillir " -#~ "confortablement une personne." +#~ msgid "Butler" +#~ msgstr "Butler" -#~ msgid "A sturdy saw, useful for cutting through metal objects." -#~ msgstr "Une scie robuste, utile pour découper des objets en métal." +#~ msgid "Caden" +#~ msgstr "Caden" -#~ msgid "" -#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " -#~ "butchering corpses." -#~ msgstr "" -#~ "Un couteau aiguisé et lourd. C'est une bonne arme de mêlée, et la " -#~ "meilleure pour dépecer les cadavres." +#~ msgid "Caleb" +#~ msgstr "Caleb" -#~ msgid "" -#~ "Designed for combat, and deadly in the right hands. Can be used to " -#~ "butcher corpses." -#~ msgstr "" -#~ "Conçu pour le combat et mortel placé entre les bonnes mains. Peut être " -#~ "utilisé pour dépecer des cadavres." +#~ msgid "Cameron" +#~ msgstr "Cameron" -#~ msgid "" -#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " -#~ "corpses." -#~ msgstr "" -#~ "Un couteau aiguisé. C'est une arme de mêlée médiocre, mais convient pour " -#~ "le dépecage des cadavres." +#~ msgid "Camilla" +#~ msgstr "Camilla" -#~ msgid "" -#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " -#~ "with. Its small tip allows for a precision strike in the hands of the " -#~ "skilled. It is too small to butcher corpses with." -#~ msgstr "" -#~ "Un petit couteau très aiguisé. Il cause de bons dommages mais il est " -#~ "difficile de toucher avec. Sa petite pointe permet de porter des coups " -#~ "précis si utilisée par des mains compétentes. Il est trop petit pour " -#~ "dépecer les cadavres." +#~ msgid "Campbell" +#~ msgstr "Campbell" -#~ msgid "Butcher the %s corpse?" -#~ msgstr "Dépecer le cadavre de %s ?" +#~ msgid "Carlos" +#~ msgstr "Carlos" -#~ msgid "butchering" -#~ msgstr "dépeçage" +#~ msgid "Caroline" +#~ msgstr "Caroline" -#~ msgid "You disinfect the bite wound." -#~ msgstr "Vous désinfectez la morsure." +#~ msgid "Carson" +#~ msgstr "Carson" -#~ msgid "You clean the bite wound." -#~ msgstr "Vous nettoyez la morsure." +#~ msgid "Carter" +#~ msgstr "Carter" -#~ msgid "Clean Wound" -#~ msgstr "Nettoyer la blessure" +#~ msgid "Charles" +#~ msgstr "Charles" -#~ msgid "8: Exit" -#~ msgstr "8: Quitter" +#~ msgid "Charlotte" +#~ msgstr "Charlotte" -#~ msgid "tai chi" -#~ msgstr "tai chi" +#~ msgid "Chase" +#~ msgstr "Chase" -#~ msgid "%1$s grabs %4$s" -#~ msgstr "%1$s attrape %4$s" +#~ msgid "Chloe" +#~ msgstr "Chloe" -#~ msgid "" -#~ "Though tai chi is often seen as a form of mental and physical exercise, " -#~ "it is\n" -#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " -#~ "the\n" -#~ "force of an attack makes your Perception decrease damage further on a " -#~ "block." -#~ msgstr "" -#~ "Bien que le tai chi soit souvent vu comme un forme d'exercices mentaux et " -#~ "physiques, on peut\n" -#~ "légitimement le qualifier d'art martial, centré sur l'autodéfense. Sa " -#~ "capacité à absorber la\n" -#~ "force d'une attaque augmente la diminution de dommages, basée sur votre " -#~ "perception, lorsque vous bloquez un coup." +#~ msgid "Christian" +#~ msgstr "Christian" -#~ msgid "judo" -#~ msgstr "judo" +#~ msgid "Christopher" +#~ msgstr "Christopher" -#~ msgid "%1$s grab %4$s" -#~ msgstr "%1$s attraper %4$s" +#~ msgid "Claire" +#~ msgstr "Claire" -#~ msgid "" -#~ "Judo is a martial art that focuses on grabs and throws, both defensive " -#~ "and\n" -#~ "offensive. It also focuses on recovering from throws; while using judo, " -#~ "you\n" -#~ "will not lose any turns to being thrown or knocked down." -#~ msgstr "" -#~ "Le judo est un art martial centré sur des projections à la fois " -#~ "défensives et\n" -#~ "offensives. Il se concentre aussi sur les récupérations après des " -#~ "projections; en pratiquant le judo vous\n" -#~ "ne perdrez aucun tour pour être projeté ou renversé au sol." +#~ msgid "Clark" +#~ msgstr "Clark" -#~ msgid "karate" -#~ msgstr "karaté" +#~ msgid "Cole" +#~ msgstr "Cole" -#~ msgid "%1$s block %4$s" -#~ msgstr "%1$s bloquer %4$s" +#~ msgid "Coleman" +#~ msgstr "Coleman" -#~ msgid "%1$s quickly punches %4$s" -#~ msgstr "%1$s donne un coup de poing rapide %4$s" +#~ msgid "Collins" +#~ msgstr "Collins" -#~ msgid "%1$s karate chop %4$s" -#~ msgstr "%1$s point karaté %4$s" +#~ msgid "Colton" +#~ msgstr "Colton" -#~ msgid "%1$s blocks %4$s" -#~ msgstr "%1$s bloquer %4$s" +#~ msgid "Connor" +#~ msgstr "Connor" -#~ msgid "%1$s karate chops %4$s" -#~ msgstr "%1$s donne un coup karaté %4$s" +#~ msgid "Cook" +#~ msgstr "Cook" -#~ msgid "%1$s quickly punch %4$s" -#~ msgstr "%1$s donner un coup de poing rapide %4$s" +#~ msgid "Cooper" +#~ msgstr "Cooper" -#~ msgid "aikido" -#~ msgstr "aikido" +#~ msgid "Cox" +#~ msgstr "Cox" -#~ msgid "Contruct" -#~ msgstr "Construire" +#~ msgid "Daniel" +#~ msgstr "Daniel" -#~ msgid "I am looking for a master to train my fighting techniques." -#~ msgstr "Je cherche un maître pour entrainer mes techniques de combat." +#~ msgid "David" +#~ msgstr "David" -#~ msgid "" -#~ "Compact Bionics Module developed at DoubleTech Industries as a " -#~ "replacement for the highly successful CBM: Power Storage. Increases you " -#~ "power capacity by 10 units." -#~ msgstr "" -#~ "MBC crée par DoubleTech Industries en remplacement d'un MBC à grand " -#~ "succès, le MBC : Stockage d’Energie. Augmente votre capacité d'énergie de " -#~ "10 unités." +#~ msgid "Davis" +#~ msgstr "Davis" -#~ msgid "MODS/BIONICS" -#~ msgstr "MODS/BIONIQUES" +#~ msgid "Destiny" +#~ msgstr "Destiny" -#~ msgid "" -#~ "An eldritch creature, shuffling\n" -#~ "along, its hands twitching so\n" -#~ "fast they appear as nothing but\n" -#~ "blurs." -#~ msgstr "" -#~ "Une créature surnaturelle, \n" -#~ "trainante, ses mains se \n" -#~ "contractant si rapidement\n" -#~ "qu'elle apparaissent floues" +#~ msgid "Diaz" +#~ msgstr "Diaz" -#~ msgid "You dont see any items around you!" -#~ msgstr "Vous ne voyez pas d'objets à proximité." +#~ msgid "Diego" +#~ msgstr "Diego" -#~ msgid "A common hydraulic jack, used when changing tires." -#~ msgstr "Un cric hydraulique standard, utilisé pour changer les pneus" +#~ msgid "Dominic" +#~ msgstr "Dominic" -#~ msgid "" -#~ "This zombie's flesh is pale blue, and it\n" -#~ "occasionally crackles with small bolts of\n" -#~ "lightning." -#~ msgstr "" -#~ "La chair bleu pâle de ce zombie crépite\n" -#~ "occasionnellement des petits éclairs\n" -#~ "électriques." +#~ msgid "Dylan" +#~ msgstr "Dylan" -#~ msgid "a boomer explodes!" -#~ msgstr "un boomer explose!" +#~ msgid "Eben" +#~ msgstr "Eben" -#~ msgid "" -#~ "This zombie's mouth is deformed into a round\n" -#~ "spitter, and its body throbs with a dense\n" -#~ "yellow fluid." -#~ msgstr "" -#~ "Ce zombie a une bouche déformée en un crachoir arrondi ; son corps " -#~ "palpite d'un fluide dense et jaune." +#~ msgid "Edwards" +#~ msgstr "Edwards" -#~ msgid "Peek" -#~ msgstr "Coup d'oeil" +#~ msgid "Eli" +#~ msgstr "Eli" -#~ msgid "Examine" -#~ msgstr "Examiner" +#~ msgid "Elijah" +#~ msgstr "Elijah" -#~ msgid "You damage the %s!" -#~ msgstr "Vous endommagez le %s !" +#~ msgid "Elizabeth" +#~ msgstr "Elizabeth" -#~ msgid "You greatly damage the %s!" -#~ msgstr "Vous endommagez grandement le %s !" +#~ msgid "Ella" +#~ msgstr "Ella" -#~ msgid " where? (Direction button)" -#~ msgstr " Ou ? (touche de direction)" +#~ msgid "Emily" +#~ msgstr "Emily" -#~ msgid "Open" -#~ msgstr "Ouvert" +#~ msgid "Emma" +#~ msgstr "Emma" -#~ msgid "Close" -#~ msgstr "Fermer" +#~ msgid "Eric" +#~ msgstr "Eric" -#~ msgid "Martial arts gained." -#~ msgstr "Art martiaux acquis." +#~ msgid "Ethan" +#~ msgstr "Ethan" -#~ msgid "You wake up to the ringing of an alarm-clock." -#~ msgstr "Vous vous reveillez au son d'un reveil." +#~ msgid "Evan" +#~ msgstr "Evan" -#~ msgid "%s Stop %s?" -#~ msgstr "%s Arrêter %s?" +#~ msgid "Evans" +#~ msgstr "Evans" -#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." -#~ msgstr "" -#~ "%s Arrêter %s? (Y)oui, (N)on, (I)gnorer les autres distractions et " -#~ "terminer." +#~ msgid "Evelyn" +#~ msgstr "Evelyn" -#~ msgid "You learn %s." -#~ msgstr "Vous apprenez %s." +#~ msgid "Faith" +#~ msgstr "Faith" -#~ msgid "Study %s?" -#~ msgstr "Etudier %s?" +#~ msgid "Flores" +#~ msgstr "Flores" -#~ msgid "You haven't had anything to drink in 2 days!" -#~ msgstr "Vous n'avez rien bu depuis 2 jours!" +#~ msgid "Foster" +#~ msgstr "Foster" -#~ msgid "4 days... no water.." -#~ msgstr "4 jours... sans eau..." +#~ msgid "Gabriel" +#~ msgstr "Gabriel" -#~ msgid "You haven't eaten in over a week!" -#~ msgstr "Vous n'avez rien mangé depuis une semaine!" +#~ msgid "Gabriella" +#~ msgstr "Gabriella" -#~ msgid "The sludge is thick and sticky." -#~ msgstr "La boue est épaisse et collante" +#~ msgid "Gabrielle" +#~ msgstr "Gabrielle" -#~ msgid "" -#~ "A human body, stumbling slowly forward on\n" -#~ "uncertain legs, possessed with an unstoppable\n" -#~ "rage." -#~ msgstr "" -#~ "Un corps humain titubant lentement son chemin\n" -#~ "avec des jambes incertaines, possédé par une rage\n" -#~ "implacable." +#~ msgid "Garcia" +#~ msgstr "Garcia" -#~ msgid "" -#~ "This zombie's jaw has been torn off, leaving\n" -#~ "a gaping hole from mid-neck up." -#~ msgstr "" -#~ "La mâchoire de ce zombie a été arraché, ne laissant\n" -#~ "qu'un trou béant au bas de son visage." +#~ msgid "Gavin" +#~ msgstr "Gavin" -#~ msgid "" -#~ "This zombie emits a constant haze of\n" -#~ "thick, obfuscating smoke." -#~ msgstr "" -#~ "Ce zombie exhale en permanence un nuage d'une fumée épaisse et trouble." +#~ msgid "Genesis" +#~ msgstr "Genesis" -#~ msgid "" -#~ "A bloated zombie sagging with fat. It emits a\n" -#~ "horrible odor, and putrid, pink sludge drips\n" -#~ "from its mouth." -#~ msgstr "" -#~ "Un zombie boursouflé. Des bourrelets de gras pendent de son corps\n" -#~ "qui dégage une horrible odeur. De sa bouche s'écoule une\n" -#~ "excrétion rose et putride." +#~ msgid "Gianna" +#~ msgstr "Gianna" -#~ msgid "" -#~ "You just placed a trap. Traps are permanent until set off, and can be " -#~ "an\n" -#~ "important defensive tactic, particularly when sleeping in unsafe " -#~ "territory.\n" -#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." -#~ msgstr "" -#~ "Vous venez de placer un piège. Les pièges sont permanents jusqu'à \n" -#~ "désamorcage et constituent une importante tactique défensive, surtout\n" -#~ "lorsque vous dormez dans un territoire dangereux. Essayez de marcher\n" -#~ "sur le _ -- aucune inquiétude, c'est une piège a bulle sans danger." +#~ msgid "Gonzales" +#~ msgstr "Gonzales" -#~ msgid "" -#~ "You're carrying more volume than you have storage for, which means you " -#~ "are\n" -#~ "carrying some stuff in the crook of your arm or in some other awkward " -#~ "manner.\n" -#~ "While overloaded like this, you will suffer SEVERE encumberment " -#~ "penalties,\n" -#~ "making combat dangerous. Either drop an item, or possibly wield " -#~ "something--\n" -#~ "the object you are wielding does not take up inventory space." -#~ msgstr "" -#~ "Vous transportez un volume trop important pour la place dont vous " -#~ "disposez, cela\n" -#~ "signifie que vous tenez des objets calés sous les aisselles ou d'autres " -#~ "manières \n" -#~ "inconfortables. Quand vous êtes encombré de la sorte, vous souffrez de " -#~ "pénalités\n" -#~ "d'encombrement SEVERES, cela rend le combat dangereux. Abandonnez un " -#~ "objet\n" -#~ "ou équipez vous en si c'est possible -- il ne comptera plus comme " -#~ "occupant de \n" -#~ "l'espace dans votre inventaire." +#~ msgid "Gonzalez" +#~ msgstr "Gonzalez" -#~ msgid "" -#~ "You just activated a grenade! You probably want to throw it. To throw " -#~ "an\n" -#~ "item, press 't' and then select the item to throw. The maximum range " -#~ "depends\n" -#~ "on your strength and the object's weight and size. Throwing isn't very " -#~ "good\n" -#~ "in most combat situations, but if you've got some fire power..." -#~ msgstr "" -#~ "Vous avez activez une grenade et désirez certainement la lancer ! Pour\n" -#~ "lancer un objet, appuyez sur 't' et sélectionnez l'objet a lancer. La " -#~ "distance\n" -#~ "maximum dépend de votre force, de la taille et du poids de l'objet. Le " -#~ "lancer\n" -#~ "est rarement efficace en combat, mais si vous avez de la puissance de " -#~ "feu..." +#~ msgid "Grace" +#~ msgstr "Grace" -#~ msgid "" -#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " -#~ "using\n" -#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " -#~ "your\n" -#~ "gun, possibly to change ammunition types, press 'U'." -#~ msgstr "" -#~ "Pour utiliser une arme a feu, equipez vous en avec la touche 'w'. " -#~ "Ensuite \n" -#~ "rechargez la en utilisant 'r', en partant du principe que vous avez les\n" -#~ "bonnes munitions. Si vous voulez decharger votre arme, par exemple \n" -#~ "pour changer de munitions, appuyez sur 'U'." +#~ msgid "Gracie" +#~ msgstr "Gracie" -#~ msgid "You need %s." -#~ msgstr "Vous avez besoin d'un %s." +#~ msgid "Gray" +#~ msgstr "Gray" -#~ msgid "Accel.: Kmh/t" -#~ msgstr "Accel.: Kmh/t" +#~ msgid "Green" +#~ msgstr "Green" -#~ msgid "Top speed: Km/h" -#~ msgstr "Vitesse max. : Km/H" +#~ msgid "Griffin" +#~ msgstr "Griffin" -#~ msgid "Accel.: mph/t" -#~ msgstr "Accel.: mph/t" +#~ msgid "Hailey" +#~ msgstr "Hailey" -#~ msgid "Too many itens" -#~ msgstr "Trop d'objets" +#~ msgid "Hall" +#~ msgstr "Hall" -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "" -#~ "SPAM, SPAM, SPAM, SPAM, SPAMMITY SPAM! Prétend être de la viande. Même " -#~ "après l'apocalypse, pas moyen de l'éviter." +#~ msgid "Hannah" +#~ msgstr "Hannah" -#~ msgid "" -#~ "Strength - 1; Intelligence - 2\n" -#~ "You stop to scratch yourself frequently; high intelligence helps you " -#~ "resist\n" -#~ "this urge." -#~ msgstr "" -#~ "Force - 1; Intelligence - 2\n" -#~ "Vous cessez de vous gratter aussi fréquemment, votre haute intelligence " -#~ "vous aidant à refréner ce besoin." +#~ msgid "Harris" +#~ msgstr "Harris" -#~ msgid "" -#~ "Speed -40%\n" -#~ "You can feel the tiny spores sinking directly into your flesh." -#~ msgstr "" -#~ "Vitesse -40%\n" -#~ "Vous sentez les petites spores s'enfoncer dans votre chair." +#~ msgid "Hayden" +#~ msgstr "Hayden" -#~ msgid "Painful Infected Wound" -#~ msgstr "Blessure infectée douloureuse" +#~ msgid "Hayes" +#~ msgstr "Hayes" -#~ msgid "Pus Filled Wound" -#~ msgstr "Blessure suppurante" +#~ msgid "Henderson" +#~ msgstr "Henderson" -#~ msgid "Bite Wound" -#~ msgstr "Morsure" +#~ msgid "Henry" +#~ msgstr "Henry" -#~ msgid "Painful Bite Wound" -#~ msgstr "Morsure douloureuse" +#~ msgid "Hernandez" +#~ msgstr "Hernandez" -#~ msgid "Infected Wound" -#~ msgstr "Blessure infectée" +#~ msgid "Hill" +#~ msgstr "Hill" -#~ msgid "Bugs Under Skin" -#~ msgstr "Insectes sous la peau" +#~ msgid "Howard" +#~ msgstr "Howard" -#~ msgid "Bleeding" -#~ msgstr "Saignement" +#~ msgid "Hughes" +#~ msgstr "Hughes" -#~ msgid "Spores" -#~ msgstr "Spores" +#~ msgid "Hunter" +#~ msgstr "Hunter" -#~ msgid "Your bite wound feels swollen and painful." -#~ msgstr "Votre morsure est gonflée et douloureuse." +#~ msgid "Ian" +#~ msgstr "Ian" -#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." -#~ msgstr "Vous êtes fiévreux et nauséeux, votre blessure devient verdâtre." +#~ msgid "Isaac" +#~ msgstr "Isaac" -#~ msgid "Your bite wound really hurts." -#~ msgstr "Votre morsure vous fait vraiment mal." +#~ msgid "Isabel" +#~ msgstr "Isabel" -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s commence à se gratter partout." +#~ msgid "Isabella" +#~ msgstr "Isabella" -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s commence à se gratter partout." +#~ msgid "Isabelle" +#~ msgstr "Isabelle" -#~ msgid "You start scratching yourself all over!" -#~ msgstr "Vous commencez à vous gratter partout." +#~ msgid "Isaiah" +#~ msgstr "Isaiah" -#~ msgid "Contracted the infection." -#~ msgstr "Vous avez contracté l'infection." +#~ msgid "Jack" +#~ msgstr "Jack" -#~ msgid "You disassemble the item into its components." -#~ msgstr "Vous desassemblez l'objet en ses differents composants." +#~ msgid "Jackson" +#~ msgstr "Jackson" -#~ msgid "Press a direction for the furniture to move (. to cancel):" -#~ msgstr "" -#~ "Indiquez une direction pour le deplacement du mobilier (. pour annuler)" +#~ msgid "Jacob" +#~ msgstr "Jacob" -#~ msgid "Can't move furniture there! Choose a direction with open floor." -#~ msgstr "" -#~ "Impossible de déplacer le mobilier ici! Indiquez un emplacement libre." +#~ msgid "Jaden" +#~ msgstr "Jaden" -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "Des insectes rampent sous vôtre peau!" +#~ msgid "James" +#~ msgstr "James" -#~ msgid "You're not strong enough!" -#~ msgstr "Vous n'êtes pas assez fort!" +#~ msgid "Jasmine" +#~ msgstr "Jasmine" -#~ msgid "You need level %d skill in mechanics." -#~ msgstr "Niveau %d en mécanique requis." +#~ msgid "Jason" +#~ msgstr "Jason" -#~ msgid "Safe speed: Km/h" -#~ msgstr "Vitesse sûre: Km/h" +#~ msgid "Jayden" +#~ msgstr "Jayden" -#~ msgid "You need a hose to siphon water." -#~ msgstr "Vous avez besoin d'un tuyau pour siphonner de l'eau." +#~ msgid "Jen" +#~ msgstr "Jen" -#~ msgid "You need a hose to siphon fuel." -#~ msgstr "Vous avez besoin d'un tuyau pour siphonner du carburant." +#~ msgid "Jenkins" +#~ msgstr "Jenkins" -#~ msgid "hose" -#~ msgstr "tuyau" +#~ msgid "Jennifer" +#~ msgstr "Jennifer" -#~ msgid "Choose wheel to use as replacement: " -#~ msgstr "Choisissez la roue à utiliser en remplacement: " +#~ msgid "Jeremiah" +#~ msgstr "Jeremiah" -#~ msgid "Top speed: mph" -#~ msgstr "Vitesse max: mph" +#~ msgid "Jessica" +#~ msgstr "Jessica" -#~ msgid "Safe speed: mph" -#~ msgstr "Vitesse sûre: mph" +#~ msgid "Jessie" +#~ msgstr "Jessie" -#~ msgid " lack" -#~ msgstr "manquante(s)" +#~ msgid "Jesus" +#~ msgstr "Jesus" -#~ msgid "enough" -#~ msgstr "assez" +#~ msgid "Jocelyn" +#~ msgstr "Jocelyn" -#~ msgid "Wheels: " -#~ msgstr "Roues: " +#~ msgid "John" +#~ msgstr "John" -#~ msgid "Activate your bio lockpick" -#~ msgstr "Activer votre bio-crochetage ?" +#~ msgid "Johnson" +#~ msgstr "Johnson" -#~ msgid "Wagon" -#~ msgstr "Wagon" +#~ msgid "Jonathan" +#~ msgstr "Jonathan" -#~ msgid "Your raincoat protects you from the acid rain." -#~ msgstr "Votre imperméable vous protège de la pluie acide." +#~ msgid "Jones" +#~ msgstr "Jones" -#~ msgid "Your raincoat protects you from the acidic drizzle." -#~ msgstr "Votre imperméable vous protège de la pluie acide." +#~ msgid "Jordan" +#~ msgstr "Jordan" -#~ msgid " and stunning it" -#~ msgstr " et l'assome" +#~ msgid "Jose" +#~ msgstr "Jose" -#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" -#~ msgstr "" -#~ "De votre %s, un/une %s entre en collision avec un %s, infligeant %d point " -#~ "de dommage%s!" +#~ msgid "Joseph" +#~ msgstr "Joseph" -#~ msgid "Central Falls" -#~ msgstr "Central Falls" +#~ msgid "Joshua" +#~ msgstr "Joshua" -#~ msgid "Centerville" -#~ msgstr "Centerville" +#~ msgid "Josiah" +#~ msgstr "Josiah" -#~ msgid "Center Harbor" -#~ msgstr "Center Harbor" +#~ msgid "Juan" +#~ msgstr "Juan" -#~ msgid "Cavendish" -#~ msgstr "Cavendish" +#~ msgid "Julia" +#~ msgstr "Julia" -#~ msgid "Caswell" -#~ msgstr "Caswell" +#~ msgid "Julian" +#~ msgstr "Julian" -#~ msgid "Castleton" -#~ msgstr "Castleton" +#~ msgid "Justin" +#~ msgstr "Justin" -#~ msgid "Castle Hill" -#~ msgstr "Castle Hill" +#~ msgid "Kaden" +#~ msgstr "Kaden" -#~ msgid "Castine" -#~ msgstr "Castine" +#~ msgid "Kaitlin" +#~ msgstr "Kaitlin" -#~ msgid "Casco" -#~ msgstr "Casco" +#~ msgid "Katelyn" +#~ msgstr "Katelyn" -#~ msgid "Cary Plantation" -#~ msgstr "Cary Plantation" +#~ msgid "Katie" +#~ msgstr "Katie" -#~ msgid "Carver" -#~ msgstr "Carver" +#~ msgid "Kayla" +#~ msgstr "Kayla" -#~ msgid "Carthage" -#~ msgstr "Carthage" +#~ msgid "Kaylee" +#~ msgstr "Kaylee" -#~ msgid "Carroll Plantation" -#~ msgstr "Carroll Plantation" +#~ msgid "Kelly" +#~ msgstr "Kelly" -#~ msgid "Carroll" -#~ msgstr "Carroll" +#~ msgid "Kevin" +#~ msgstr "Kevin" -#~ msgid "Carrabassett Valley" -#~ msgstr "Carrabassett Valley" +#~ msgid "Kim" +#~ msgstr "Kim" -#~ msgid "Carmel" -#~ msgstr "Carmel" +#~ msgid "Kimberly" +#~ msgstr "Kimberly" -#~ msgid "Carlisle" -#~ msgstr "Carlisle" +#~ msgid "King" +#~ msgstr "King" -#~ msgid "Caribou" -#~ msgstr "Caribou" +#~ msgid "Kyle" +#~ msgstr "Kyle" -#~ msgid "Caratunk" -#~ msgstr "Caratunk" +#~ msgid "Kylie" +#~ msgstr "Kylie" -#~ msgid "Cape Elizabeth" -#~ msgstr "Cape Elizabeth" +#~ msgid "Landon" +#~ msgstr "Landon" -#~ msgid "Canton" -#~ msgstr "Canton" +#~ msgid "Lauren" +#~ msgstr "Lauren" -#~ msgid "Canterbury" -#~ msgstr "Canterbury" +#~ msgid "Layla" +#~ msgstr "Layla" -#~ msgid "Candia" -#~ msgstr "Candia" +#~ msgid "Leah" +#~ msgstr "Leah" -#~ msgid "Canaan" -#~ msgstr "Canaan" +#~ msgid "Lee" +#~ msgstr "Lee" -#~ msgid "Campton" -#~ msgstr "Campton" +#~ msgid "Lewis" +#~ msgstr "Lewis" -#~ msgid "Camden" -#~ msgstr "Camden" +#~ msgid "Liam" +#~ msgstr "Liam" -#~ msgid "Cambridge" -#~ msgstr "Cambridge" +#~ msgid "Lillian" +#~ msgstr "Lillian" -#~ msgid "Calais" -#~ msgstr "Calais" +#~ msgid "Lily" +#~ msgstr "Lily" -#~ msgid "Cabot" -#~ msgstr "Cabot" +#~ msgid "Logan" +#~ msgstr "Logan" -#~ msgid "Byron" -#~ msgstr "Byron" +#~ msgid "Long" +#~ msgstr "Long" -#~ msgid "Buxton" -#~ msgstr "Buxton" +#~ msgid "Lopez" +#~ msgstr "Lopez" -#~ msgid "Burrillville" -#~ msgstr "Burrillville" +#~ msgid "Lucas" +#~ msgstr "Lucas" -#~ msgid "Burnham" -#~ msgstr "Burnham" +#~ msgid "Luis" +#~ msgstr "Luis" -#~ msgid "Burlington" -#~ msgstr "Burlington" +#~ msgid "Luke" +#~ msgstr "Luke" -#~ msgid "Burke" -#~ msgstr "Burke" +#~ msgid "Madeline" +#~ msgstr "Madeline" -#~ msgid "Bucksport" -#~ msgstr "Bucksport" +#~ msgid "Madelyn" +#~ msgstr "Madelyn" -#~ msgid "Buckland" -#~ msgstr "Buckland" +#~ msgid "Madison" +#~ msgstr "Madison" -#~ msgid "Buckfield" -#~ msgstr "Buckfield" +#~ msgid "Makayla" +#~ msgstr "Makayla" -#~ msgid "Brunswick" -#~ msgstr "Brunswick" +#~ msgid "Maria" +#~ msgstr "Maria" -#~ msgid "Brownville" -#~ msgstr "Brownville" +#~ msgid "Mariah" +#~ msgstr "Mariah" -#~ msgid "Brownington" -#~ msgstr "Brownington" +#~ msgid "Martin" +#~ msgstr "Martin" -#~ msgid "Brownfield" -#~ msgstr "Brownfield" +#~ msgid "Martinez" +#~ msgstr "Martinez" -#~ msgid "Brookton" -#~ msgstr "Brookton" +#~ msgid "Mary" +#~ msgstr "Mary" -#~ msgid "Brooksville" -#~ msgstr "Brooksville" +#~ msgid "Mason" +#~ msgstr "Mason" -#~ msgid "Brookline" -#~ msgstr "Brookline" +#~ msgid "Matthew" +#~ msgstr "Matthew" -#~ msgid "Brooklin" -#~ msgstr "Brooklin" +#~ msgid "Maya" +#~ msgstr "Maya" -#~ msgid "Brookfield" -#~ msgstr "Brookfield" +#~ msgid "Megan" +#~ msgstr "Megan" -#~ msgid "Brockton" -#~ msgstr "Brockton" +#~ msgid "Melanie" +#~ msgstr "Melanie" -#~ msgid "Bristol" -#~ msgstr "Bristol" +#~ msgid "Mia" +#~ msgstr "Mia" -#~ msgid "Brimfield" -#~ msgstr "Brimfield" +#~ msgid "Michael" +#~ msgstr "Michael" -#~ msgid "Brighton Plantation" -#~ msgstr "Brighton Plantation" +#~ msgid "Miller" +#~ msgstr "Miller" -#~ msgid "Brighton" -#~ msgstr "Brighton" +#~ msgid "Mitchell" +#~ msgstr "Mitchell" -#~ msgid "Bridport" -#~ msgstr "Bridport" +#~ msgid "Moore" +#~ msgstr "Moore" -#~ msgid "Bridgton" -#~ msgstr "Bridgton" +#~ msgid "Morgan" +#~ msgstr "Morgan" -#~ msgid "Bridgewater" -#~ msgstr "Bridgewater" +#~ msgid "Morris" +#~ msgstr "Morris" -#~ msgid "Bridgeport" -#~ msgstr "Bridgeport" +#~ msgid "Murphy" +#~ msgstr "Murphy" -#~ msgid "Brewster" -#~ msgstr "Brewster" +#~ msgid "Natalie" +#~ msgstr "Natalie" -#~ msgid "Brewer" -#~ msgstr "Brewer" +#~ msgid "Nathan" +#~ msgstr "Nathan" -#~ msgid "Brentwood" -#~ msgstr "Brentwood" +#~ msgid "Nathaniel" +#~ msgstr "Nathaniel" -#~ msgid "Bremen" -#~ msgstr "Bremen" +#~ msgid "Nelson" +#~ msgstr "Nelson" -#~ msgid "Brattleboro" -#~ msgstr "Brattleboro" +#~ msgid "Nevaeh" +#~ msgstr "Nevaeh" -#~ msgid "Branford" -#~ msgstr "Branford" +#~ msgid "Nicholas" +#~ msgstr "Nicholas" -#~ msgid "Braintree" -#~ msgstr "Braintree" +#~ msgid "Noah" +#~ msgstr "Noah" -#~ msgid "Bradley" -#~ msgstr "Bradley" +#~ msgid "Olivia" +#~ msgstr "Olivia" -#~ msgid "Bradford" -#~ msgstr "Bradford" +#~ msgid "Owen" +#~ msgstr "Owen" -#~ msgid "Bozrah" -#~ msgstr "Bozrah" +#~ msgid "Paige" +#~ msgstr "Paige" -#~ msgid "Boylston" -#~ msgstr "Boylston" +#~ msgid "Monkton" +#~ msgstr "Monkton" -#~ msgid "Boxford" -#~ msgstr "Boxford" +#~ msgid "Monmouth" +#~ msgstr "Monmouth" -#~ msgid "Boxborough" -#~ msgstr "Boxborough" +#~ msgid "Monroe" +#~ msgstr "Monroe" -#~ msgid "Bowerbank" -#~ msgstr "Bowerbank" +#~ msgid "Monson" +#~ msgstr "Monson" -#~ msgid "Bowdoinham" -#~ msgstr "Bowdoinham" +#~ msgid "Mont Vernon" +#~ msgstr "Mont Vernon" -#~ msgid "Bowdoin" -#~ msgstr "Bowdoin" +#~ msgid "Montague" +#~ msgstr "Montague" -#~ msgid "Bow" -#~ msgstr "Bow" +#~ msgid "Monterey" +#~ msgstr "Monterey" -#~ msgid "Bourne" -#~ msgstr "Bourne" +#~ msgid "Montgomery" +#~ msgstr "Montgomery" -#~ msgid "Boston" -#~ msgstr "Boston" +#~ msgid "Monticello" +#~ msgstr "Monticello" -#~ msgid "Boscawen" -#~ msgstr "Boscawen" +#~ msgid "You have a craving for crack." +#~ msgstr "Vous êtes en manque de crack." -#~ msgid "Boothbay Harbor" -#~ msgstr "Boothbay Harbor" +#~ msgid "You have a craving for cocaine." +#~ msgstr "Vous êtes en manque de cocaïne." -#~ msgid "Boothbay" -#~ msgstr "Boothbay" +#~ msgid "You have a craving." +#~ msgstr "Vous avez une envie." -#~ msgid "Bolton" -#~ msgstr "Bolton" +#~ msgid "Start a fire" +#~ msgstr "Allumer un feu" -#~ msgid "Blue Hill" -#~ msgstr "Blue Hill" +#~ msgid "You have an opiate craving." +#~ msgstr "Vous avez envie d'opium." -#~ msgid "Bloomfield" -#~ msgstr "Bloomfield" +#~ msgid "You have a speed craving." +#~ msgstr "Vous êtes en manque de stimulants." -#~ msgid "Blandford" -#~ msgstr "Blandford" +#~ msgid "Parker" +#~ msgstr "Parker" -#~ msgid "Blanchard" -#~ msgstr "Blanchard" +#~ msgid "Patterson" +#~ msgstr "Patterson" -#~ msgid "Blaine" -#~ msgstr "Blaine" +#~ msgid "Payton" +#~ msgstr "Payton" -#~ msgid "Blackstone" -#~ msgstr "Blackstone" +#~ msgid "Perez" +#~ msgstr "Perez" -#~ msgid "Bingham" -#~ msgstr "Bingham" +#~ msgid "Perry" +#~ msgstr "Perry" -#~ msgid "Billerica" -#~ msgstr "Billerica" +#~ msgid "Peterson" +#~ msgstr "Peterson" -#~ msgid "Biddeford" -#~ msgstr "Biddeford" +#~ msgid "Phillips" +#~ msgstr "Phillips" -#~ msgid "Beverly" -#~ msgstr "Beverly" +#~ msgid "Powell" +#~ msgstr "Powell" -#~ msgid "Bethlehem" -#~ msgstr "Bethlehem" +#~ msgid "Price" +#~ msgstr "Price" -#~ msgid "Bethel" -#~ msgstr "Bethel" +#~ msgid "Rachel" +#~ msgstr "Rachel" -#~ msgid "Bethany" -#~ msgstr "Bethany" +#~ msgid "Ramirez" +#~ msgstr "Ramirez" -#~ msgid "Berwick" -#~ msgstr "Berwick" +#~ msgid "Reed" +#~ msgstr "Reed" -#~ msgid "Bernardston" -#~ msgstr "Bernardston" +#~ msgid "Richardson" +#~ msgstr "Richardson" -#~ msgid "Berlin" -#~ msgstr "Berlin" +#~ msgid "Riley" +#~ msgstr "Riley" -#~ msgid "Berkshire" -#~ msgstr "Berkshire" +#~ msgid "Rivera" +#~ msgstr "Rivera" -#~ msgid "Berkley" -#~ msgstr "Berkley" +#~ msgid "Robert" +#~ msgstr "Robert" -#~ msgid "Benton" -#~ msgstr "Benton" +#~ msgid "Roberts" +#~ msgstr "Roberts" -#~ msgid "Benson" -#~ msgstr "Benson" +#~ msgid "Robinson" +#~ msgstr "Robinson" -#~ msgid "Bennington" -#~ msgstr "Bennington" +#~ msgid "Rodriguez" +#~ msgstr "Rodriguez" -#~ msgid "Benedicta" -#~ msgstr "Benedicta" +#~ msgid "Rogers" +#~ msgstr "Rogers" -#~ msgid "Belvidere" -#~ msgstr "Belvidere" +#~ msgid "Ross" +#~ msgstr "Ross" -#~ msgid "Belmont" -#~ msgstr "Belmont" +#~ msgid "Russell" +#~ msgstr "Russell" -#~ msgid "Bellingham" -#~ msgstr "Bellingham" +#~ msgid "Ryan" +#~ msgstr "Ryan" -#~ msgid "Belgrade" -#~ msgstr "Belgrade" +#~ msgid "Sabastian" +#~ msgstr "Sabastian" -#~ msgid "Belfast" -#~ msgstr "Belfast" +#~ msgid "Samantha" +#~ msgstr "Samantha" -#~ msgid "Belchertown" -#~ msgstr "Belchertown" +#~ msgid "Samuel" +#~ msgstr "Samuel" -#~ msgid "Bedford" -#~ msgstr "Bedford" +#~ msgid "Sanchez" +#~ msgstr "Sanchez" -#~ msgid "Beddington" -#~ msgstr "Beddington" +#~ msgid "Sanders" +#~ msgstr "Sanders" -#~ msgid "Becket" -#~ msgstr "Becket" +#~ msgid "Sara" +#~ msgstr "Sara" -#~ msgid "Beaver Cove" -#~ msgstr "Beaver Cove" +#~ msgid "Sarah" +#~ msgstr "Sarah" -#~ msgid "Beals" -#~ msgstr "Beals" +#~ msgid "Savannah" +#~ msgstr "Savannah" -#~ msgid "Beacon Falls" -#~ msgstr "Beacon Falls" +#~ msgid "Scott" +#~ msgstr "Scott" -#~ msgid "Bath" -#~ msgstr "Bath" +#~ msgid "Sean" +#~ msgstr "Sean" -#~ msgid "Barton" -#~ msgstr "Barton" +#~ msgid "Simmons" +#~ msgstr "Simmons" -#~ msgid "Bartlett" -#~ msgstr "Bartlett" +#~ msgid "Smith" +#~ msgstr "Smith" -#~ msgid "Barrington" -#~ msgstr "Barrington" +#~ msgid "Sofia" +#~ msgstr "Sofia" -#~ msgid "Barre" -#~ msgstr "Barre" +#~ msgid "Sophie" +#~ msgstr "Sophie" -#~ msgid "Barnstead" -#~ msgstr "Barnstead" +#~ msgid "Stewart" +#~ msgstr "Stewart" -#~ msgid "Barnstable" -#~ msgstr "Barnstable" +#~ msgid "Sydney" +#~ msgstr "Sydney" -#~ msgid "Barnet" -#~ msgstr "Barnet" +#~ msgid "Taylor" +#~ msgstr "Taylor" -#~ msgid "Barnard" -#~ msgstr "Barnard" +#~ msgid "Thomas" +#~ msgstr "Thomas" -#~ msgid "Barkhamsted" -#~ msgstr "Barkhamsted" +#~ msgid "Thompson" +#~ msgstr "Thompson" -#~ msgid "Baring Plantation" -#~ msgstr "Baring Plantation" +#~ msgid "Torres" +#~ msgstr "Torres" -#~ msgid "Bar Harbor" -#~ msgstr "Bar Harbor" +#~ msgid "Trinity" +#~ msgstr "Trinity" -#~ msgid "Bangor" -#~ msgstr "Bangor" +#~ msgid "Tristan" +#~ msgstr "Tristan" -#~ msgid "Bancroft" -#~ msgstr "Bancroft" +#~ msgid "Turner" +#~ msgstr "Turner" -#~ msgid "Baltimore" -#~ msgstr "Baltimore" +#~ msgid "Tyler" +#~ msgstr "Tyler" -#~ msgid "Baldwin" -#~ msgstr "Baldwin" +#~ msgid "Valeria" +#~ msgstr "Valeria" -#~ msgid "Bakersfield" -#~ msgstr "Bakersfield" +#~ msgid "Victoria" +#~ msgstr "Victoria" -#~ msgid "Baileyville" -#~ msgstr "Baileyville" +#~ msgid "Walker" +#~ msgstr "Walker" -#~ msgid "Ayer" -#~ msgstr "Ayer" +#~ msgid "Ward" +#~ msgstr "Ward" -#~ msgid "Avon" -#~ msgstr "Avon" +#~ msgid "Washington" +#~ msgstr "Washington" -#~ msgid "Aurora" -#~ msgstr "Aurora" +#~ msgid "Watson" +#~ msgstr "Watson" -#~ msgid "Augusta" -#~ msgstr "Augusta" +#~ msgid "White" +#~ msgstr "White" -#~ msgid "Auburn" -#~ msgstr "Auburn" +#~ msgid "William" +#~ msgstr "William" -#~ msgid "Attleboro" -#~ msgstr "Attleboro" +#~ msgid "Williams" +#~ msgstr "Williams" -#~ msgid "Atkinson" -#~ msgstr "Atkinson" +#~ msgid "Wilson" +#~ msgstr "Wilson" -#~ msgid "Athol" -#~ msgstr "AtholAthol" +#~ msgid "Wood" +#~ msgstr "Wood" -#~ msgid "Athens" -#~ msgstr "Athens" +#~ msgid "Wyatt" +#~ msgstr "Wyatt" -#~ msgid "Ashland" -#~ msgstr "Ashland" +#~ msgid "Xavier" +#~ msgstr "Xavier" -#~ msgid "Ashford" -#~ msgstr "Ashford" +#~ msgid "Young" +#~ msgstr "Young" -#~ msgid "Ashfield" -#~ msgstr "Ashfield" +#~ msgid "Zachary" +#~ msgstr "Zachary" -#~ msgid "Ashby" -#~ msgstr "Ashby" +#~ msgid "Zoe" +#~ msgstr "Zoe" -#~ msgid "Ashburnham" -#~ msgstr "Ashburnham" +#~ msgid "Zoey" +#~ msgstr "Zoey" -#~ msgid "Arundel" -#~ msgstr "Arundel" +#~ msgid "Abbot" +#~ msgstr "Abbot" -#~ msgid "Arrowsic" -#~ msgstr "Arrowsic" +#~ msgid "Abington" +#~ msgstr "Abington" -#~ msgid "Arlington" -#~ msgstr "Arlington" +#~ msgid "Acton" +#~ msgstr "Acton" -#~ msgid "Argyle" -#~ msgstr "Argyle" +#~ msgid "Acushnet" +#~ msgstr "Acushnet" -#~ msgid "Aquinnah" -#~ msgstr "Aquinnah" +#~ msgid "Acworth" +#~ msgstr "Acworth" -#~ msgid "Appleton" -#~ msgstr "Appleton" +#~ msgid "Agawam" +#~ msgstr "Agawam" -#~ msgid "Antrim" -#~ msgstr "Antrim" +#~ msgid "Albany" +#~ msgstr "Albany" -#~ msgid "Ansonia" -#~ msgstr "Ansonia" +#~ msgid "Albion" +#~ msgstr "Albion" -#~ msgid "Anson" -#~ msgstr "Anson" +#~ msgid "Alburg" +#~ msgstr "Alburg" -#~ msgid "Andover" -#~ msgstr "Andover" +#~ msgid "Alexandria" +#~ msgstr "Alexandria" -#~ msgid "Amity" -#~ msgstr "Amity" +#~ msgid "Alford" +#~ msgstr "Alford" -#~ msgid "Amherst" -#~ msgstr "Amherst" +#~ msgid "Allagash" +#~ msgstr "Allagash" -#~ msgid "Amesbury" -#~ msgstr "Amesbury" +#~ msgid "Allenstown" +#~ msgstr "Allenstown" -#~ msgid "Alton" -#~ msgstr "Alton" +#~ msgid "Alna" +#~ msgstr "Alna" #~ msgid "Alstead" #~ msgstr "Alstead" -#~ msgid "Alna" -#~ msgstr "Alna" +#~ msgid "Alton" +#~ msgstr "Alton" -#~ msgid "Allenstown" -#~ msgstr "Allenstown" +#~ msgid "Amesbury" +#~ msgstr "Amesbury" -#~ msgid "Allagash" -#~ msgstr "Allagash" +#~ msgid "Amherst" +#~ msgstr "Amherst" -#~ msgid "Alfred" -#~ msgstr "Alfred" +#~ msgid "Amity" +#~ msgstr "Amity" -#~ msgid "Alford" -#~ msgstr "Alford" +#~ msgid "Andover" +#~ msgstr "Andover" -#~ msgid "Alexandria" -#~ msgstr "Alexandria" +#~ msgid "Anson" +#~ msgstr "Anson" -#~ msgid "Alburg" -#~ msgstr "Alburg" +#~ msgid "Ansonia" +#~ msgstr "Ansonia" -#~ msgid "Albion" -#~ msgstr "Albion" +#~ msgid "Antrim" +#~ msgstr "Antrim" -#~ msgid "Albany" -#~ msgstr "Albany" +#~ msgid "Appleton" +#~ msgstr "Appleton" -#~ msgid "Agawam" -#~ msgstr "Agawam" +#~ msgid "Aquinnah" +#~ msgstr "Aquinnah" -#~ msgid "Acworth" -#~ msgstr "Acworth" +#~ msgid "Argyle" +#~ msgstr "Argyle" -#~ msgid "Acushnet" -#~ msgstr "Acushnet" +#~ msgid "Arlington" +#~ msgstr "Arlington" -#~ msgid "Acton" -#~ msgstr "Acton" +#~ msgid "Arrowsic" +#~ msgstr "Arrowsic" -#~ msgid "Abington" -#~ msgstr "Abington" +#~ msgid "Arundel" +#~ msgstr "Arundel" -#~ msgid "Abbot" -#~ msgstr "Abbot" +#~ msgid "Ashburnham" +#~ msgstr "Ashburnham" -#~ msgid "Zoey" -#~ msgstr "Zoey" +#~ msgid "Ashby" +#~ msgstr "Ashby" -#~ msgid "Zoe" -#~ msgstr "Zoe" +#~ msgid "Ashfield" +#~ msgstr "Ashfield" -#~ msgid "Zachary" -#~ msgstr "Zachary" +#~ msgid "Ashford" +#~ msgstr "Ashford" -#~ msgid "Young" -#~ msgstr "Young" +#~ msgid "Ashland" +#~ msgstr "Ashland" -#~ msgid "Xavier" -#~ msgstr "Xavier" +#~ msgid "Athens" +#~ msgstr "Athens" -#~ msgid "Wyatt" -#~ msgstr "Wyatt" +#~ msgid "Athol" +#~ msgstr "AtholAthol" -#~ msgid "Wood" -#~ msgstr "Wood" +#~ msgid "Atkinson" +#~ msgstr "Atkinson" -#~ msgid "Wilson" -#~ msgstr "Wilson" +#~ msgid "Attleboro" +#~ msgstr "Attleboro" -#~ msgid "Williams" -#~ msgstr "Williams" +#~ msgid "Auburn" +#~ msgstr "Auburn" -#~ msgid "William" -#~ msgstr "William" +#~ msgid "Augusta" +#~ msgstr "Augusta" -#~ msgid "White" -#~ msgstr "White" +#~ msgid "Aurora" +#~ msgstr "Aurora" -#~ msgid "Watson" -#~ msgstr "Watson" +#~ msgid "Avon" +#~ msgstr "Avon" -#~ msgid "Washington" -#~ msgstr "Washington" +#~ msgid "Ayer" +#~ msgstr "Ayer" -#~ msgid "Ward" -#~ msgstr "Ward" +#~ msgid "Baileyville" +#~ msgstr "Baileyville" -#~ msgid "Walker" -#~ msgstr "Walker" +#~ msgid "Bakersfield" +#~ msgstr "Bakersfield" -#~ msgid "Victoria" -#~ msgstr "Victoria" +#~ msgid "Baldwin" +#~ msgstr "Baldwin" -#~ msgid "Vanessa" -#~ msgstr "Vanessa" +#~ msgid "Baltimore" +#~ msgstr "Baltimore" -#~ msgid "Valeria" -#~ msgstr "Valeria" +#~ msgid "Bancroft" +#~ msgstr "Bancroft" -#~ msgid "Tyler" -#~ msgstr "Tyler" +#~ msgid "Bangor" +#~ msgstr "Bangor" -#~ msgid "Turner" -#~ msgstr "Turner" +#~ msgid "Bar Harbor" +#~ msgstr "Bar Harbor" -#~ msgid "Tristan" -#~ msgstr "Tristan" +#~ msgid "Baring Plantation" +#~ msgstr "Baring Plantation" -#~ msgid "Trinity" -#~ msgstr "Trinity" +#~ msgid "Barkhamsted" +#~ msgstr "Barkhamsted" -#~ msgid "Torres" -#~ msgstr "Torres" +#~ msgid "Barnard" +#~ msgstr "Barnard" -#~ msgid "Thompson" -#~ msgstr "Thompson" +#~ msgid "Barnet" +#~ msgstr "Barnet" -#~ msgid "Thomas" -#~ msgstr "Thomas" +#~ msgid "Barnstable" +#~ msgstr "Barnstable" -#~ msgid "Taylor" -#~ msgstr "Taylor" +#~ msgid "Barnstead" +#~ msgstr "Barnstead" -#~ msgid "Sydney" -#~ msgstr "Sydney" +#~ msgid "Barre" +#~ msgstr "Barre" -#~ msgid "Stewart" -#~ msgstr "Stewart" +#~ msgid "Barrington" +#~ msgstr "Barrington" -#~ msgid "Sophie" -#~ msgstr "Sophie" +#~ msgid "Bartlett" +#~ msgstr "Bartlett" -#~ msgid "Sofia" -#~ msgstr "Sofia" +#~ msgid "Barton" +#~ msgstr "Barton" -#~ msgid "Smith" -#~ msgstr "Smith" +#~ msgid "Bath" +#~ msgstr "Bath" -#~ msgid "Simmons" -#~ msgstr "Simmons" +#~ msgid "Beacon Falls" +#~ msgstr "Beacon Falls" -#~ msgid "Sean" -#~ msgstr "Sean" +#~ msgid "Beals" +#~ msgstr "Beals" -#~ msgid "Scott" -#~ msgstr "Scott" +#~ msgid "Beaver Cove" +#~ msgstr "Beaver Cove" -#~ msgid "Savannah" -#~ msgstr "Savannah" +#~ msgid "Becket" +#~ msgstr "Becket" -#~ msgid "Sarah" -#~ msgstr "Sarah" +#~ msgid "Beddington" +#~ msgstr "Beddington" -#~ msgid "Sara" -#~ msgstr "Sara" +#~ msgid "Bedford" +#~ msgstr "Bedford" -#~ msgid "Sanders" -#~ msgstr "Sanders" +#~ msgid "Belchertown" +#~ msgstr "Belchertown" -#~ msgid "Sanchez" -#~ msgstr "Sanchez" +#~ msgid "Belfast" +#~ msgstr "Belfast" -#~ msgid "Samuel" -#~ msgstr "Samuel" +#~ msgid "Belgrade" +#~ msgstr "Belgrade" -#~ msgid "Samantha" -#~ msgstr "Samantha" +#~ msgid "Bellingham" +#~ msgstr "Bellingham" -#~ msgid "Sabastian" -#~ msgstr "Sabastian" +#~ msgid "Belmont" +#~ msgstr "Belmont" -#~ msgid "Ryan" -#~ msgstr "Ryan" +#~ msgid "Belvidere" +#~ msgstr "Belvidere" -#~ msgid "Russell" -#~ msgstr "Russell" +#~ msgid "Benedicta" +#~ msgstr "Benedicta" -#~ msgid "Ross" -#~ msgstr "Ross" +#~ msgid "Bennington" +#~ msgstr "Bennington" -#~ msgid "Rogers" -#~ msgstr "Rogers" +#~ msgid "Benson" +#~ msgstr "Benson" -#~ msgid "Rodriguez" -#~ msgstr "Rodriguez" +#~ msgid "Benton" +#~ msgstr "Benton" -#~ msgid "Robinson" -#~ msgstr "Robinson" +#~ msgid "Berkley" +#~ msgstr "Berkley" -#~ msgid "Roberts" -#~ msgstr "Roberts" +#~ msgid "Berkshire" +#~ msgstr "Berkshire" -#~ msgid "Robert" -#~ msgstr "Robert" +#~ msgid "Berlin" +#~ msgstr "Berlin" -#~ msgid "Rivera" -#~ msgstr "Rivera" +#~ msgid "Bernardston" +#~ msgstr "Bernardston" -#~ msgid "Riley" -#~ msgstr "Riley" +#~ msgid "Berwick" +#~ msgstr "Berwick" -#~ msgid "Richardson" -#~ msgstr "Richardson" +#~ msgid "Bethany" +#~ msgstr "Bethany" -#~ msgid "Reed" -#~ msgstr "Reed" +#~ msgid "Bethel" +#~ msgstr "Bethel" -#~ msgid "Ramirez" -#~ msgstr "Ramirez" +#~ msgid "Bethlehem" +#~ msgstr "Bethlehem" -#~ msgid "Rachel" -#~ msgstr "Rachel" +#~ msgid "Beverly" +#~ msgstr "Beverly" -#~ msgid "Price" -#~ msgstr "Price" +#~ msgid "Biddeford" +#~ msgstr "Biddeford" -#~ msgid "Powell" -#~ msgstr "Powell" +#~ msgid "Billerica" +#~ msgstr "Billerica" -#~ msgid "Phillips" -#~ msgstr "Phillips" +#~ msgid "Bingham" +#~ msgstr "Bingham" -#~ msgid "Peterson" -#~ msgstr "Peterson" +#~ msgid "Blackstone" +#~ msgstr "Blackstone" -#~ msgid "Perry" -#~ msgstr "Perry" +#~ msgid "Blaine" +#~ msgstr "Blaine" -#~ msgid "Perez" -#~ msgstr "Perez" +#~ msgid "Blanchard" +#~ msgstr "Blanchard" -#~ msgid "Payton" -#~ msgstr "Payton" +#~ msgid "Blandford" +#~ msgstr "Blandford" -#~ msgid "Patterson" -#~ msgstr "Patterson" +#~ msgid "Bloomfield" +#~ msgstr "Bloomfield" -#~ msgid "Parker" -#~ msgstr "Parker" +#~ msgid "Blue Hill" +#~ msgstr "Blue Hill" -#~ msgid "You have a speed craving." -#~ msgstr "Vous êtes en manque de stimulants." +#~ msgid "Bolton" +#~ msgstr "Bolton" -#~ msgid "You have an opiate craving." -#~ msgstr "Vous avez envie d'opium." +#~ msgid "Boothbay" +#~ msgstr "Boothbay" -#~ msgid "Start a fire" -#~ msgstr "Allumer un feu" +#~ msgid "Boothbay Harbor" +#~ msgstr "Boothbay Harbor" -#~ msgid "You have a craving." -#~ msgstr "Vous avez une envie." +#~ msgid "Boscawen" +#~ msgstr "Boscawen" -#~ msgid "You have a craving for cocaine." -#~ msgstr "Vous êtes en manque de cocaïne." +#~ msgid "Boston" +#~ msgstr "Boston" -#~ msgid "You have a craving for crack." -#~ msgstr "Vous êtes en manque de crack." +#~ msgid "Bourne" +#~ msgstr "Bourne" -#~ msgid "Monticello" -#~ msgstr "Monticello" +#~ msgid "Bow" +#~ msgstr "Bow" -#~ msgid "Montgomery" -#~ msgstr "Montgomery" +#~ msgid "Bowdoin" +#~ msgstr "Bowdoin" -#~ msgid "Monterey" -#~ msgstr "Monterey" +#~ msgid "Bowdoinham" +#~ msgstr "Bowdoinham" -#~ msgid "Montague" -#~ msgstr "Montague" +#~ msgid "Bowerbank" +#~ msgstr "Bowerbank" -#~ msgid "Mont Vernon" -#~ msgstr "Mont Vernon" +#~ msgid "Boxborough" +#~ msgstr "Boxborough" -#~ msgid "Monson" -#~ msgstr "Monson" +#~ msgid "Boxford" +#~ msgstr "Boxford" -#~ msgid "Monroe" -#~ msgstr "Monroe" +#~ msgid "Boylston" +#~ msgstr "Boylston" -#~ msgid "Monmouth" -#~ msgstr "Monmouth" +#~ msgid "Bozrah" +#~ msgstr "Bozrah" -#~ msgid "Monkton" -#~ msgstr "Monkton" +#~ msgid "Bradford" +#~ msgstr "Bradford" -#~ msgid "Paige" -#~ msgstr "Paige" +#~ msgid "Bradley" +#~ msgstr "Bradley" -#~ msgid "Owen" -#~ msgstr "Owen" +#~ msgid "Braintree" +#~ msgstr "Braintree" -#~ msgid "Olivia" -#~ msgstr "Olivia" +#~ msgid "Branford" +#~ msgstr "Branford" -#~ msgid "Noah" -#~ msgstr "Noah" +#~ msgid "Brattleboro" +#~ msgstr "Brattleboro" -#~ msgid "Nicholas" -#~ msgstr "Nicholas" +#~ msgid "Bremen" +#~ msgstr "Bremen" -#~ msgid "Nevaeh" -#~ msgstr "Nevaeh" +#~ msgid "Brentwood" +#~ msgstr "Brentwood" -#~ msgid "Nelson" -#~ msgstr "Nelson" +#~ msgid "Brewer" +#~ msgstr "Brewer" -#~ msgid "Nathaniel" -#~ msgstr "Nathaniel" +#~ msgid "Brewster" +#~ msgstr "Brewster" -#~ msgid "Nathan" -#~ msgstr "Nathan" +#~ msgid "Bridgeport" +#~ msgstr "Bridgeport" -#~ msgid "Natalie" -#~ msgstr "Natalie" +#~ msgid "Bridgewater" +#~ msgstr "Bridgewater" -#~ msgid "Murphy" -#~ msgstr "Murphy" +#~ msgid "Bridgton" +#~ msgstr "Bridgton" -#~ msgid "Morris" -#~ msgstr "Morris" +#~ msgid "Bridport" +#~ msgstr "Bridport" -#~ msgid "Morgan" -#~ msgstr "Morgan" +#~ msgid "Brighton" +#~ msgstr "Brighton" -#~ msgid "Moore" -#~ msgstr "Moore" +#~ msgid "Brighton Plantation" +#~ msgstr "Brighton Plantation" -#~ msgid "Mitchell" -#~ msgstr "Mitchell" +#~ msgid "Brimfield" +#~ msgstr "Brimfield" -#~ msgid "Miller" -#~ msgstr "Miller" +#~ msgid "Bristol" +#~ msgstr "Bristol" -#~ msgid "Michael" -#~ msgstr "Michael" +#~ msgid "Brockton" +#~ msgstr "Brockton" -#~ msgid "Mia" -#~ msgstr "Mia" +#~ msgid "Brookfield" +#~ msgstr "Brookfield" -#~ msgid "Melanie" -#~ msgstr "Melanie" +#~ msgid "Brooklin" +#~ msgstr "Brooklin" -#~ msgid "Megan" -#~ msgstr "Megan" +#~ msgid "Brookline" +#~ msgstr "Brookline" -#~ msgid "Maya" -#~ msgstr "Maya" +#~ msgid "Brooksville" +#~ msgstr "Brooksville" -#~ msgid "Matthew" -#~ msgstr "Matthew" +#~ msgid "Brookton" +#~ msgstr "Brookton" -#~ msgid "Mason" -#~ msgstr "Mason" +#~ msgid "Brownfield" +#~ msgstr "Brownfield" -#~ msgid "Mary" -#~ msgstr "Mary" +#~ msgid "Brownington" +#~ msgstr "Brownington" -#~ msgid "Martinez" -#~ msgstr "Martinez" +#~ msgid "Brownville" +#~ msgstr "Brownville" -#~ msgid "Martin" -#~ msgstr "Martin" +#~ msgid "Brunswick" +#~ msgstr "Brunswick" -#~ msgid "Mariah" -#~ msgstr "Mariah" +#~ msgid "Buckfield" +#~ msgstr "Buckfield" -#~ msgid "Maria" -#~ msgstr "Maria" +#~ msgid "Buckland" +#~ msgstr "Buckland" -#~ msgid "Makayla" -#~ msgstr "Makayla" +#~ msgid "Bucksport" +#~ msgstr "Bucksport" -#~ msgid "Madison" -#~ msgstr "Madison" +#~ msgid "Burke" +#~ msgstr "Burke" -#~ msgid "Madelyn" -#~ msgstr "Madelyn" +#~ msgid "Burlington" +#~ msgstr "Burlington" -#~ msgid "Madeline" -#~ msgstr "Madeline" +#~ msgid "Burnham" +#~ msgstr "Burnham" -#~ msgid "Luke" -#~ msgstr "Luke" +#~ msgid "Burrillville" +#~ msgstr "Burrillville" -#~ msgid "Luis" -#~ msgstr "Luis" +#~ msgid "Buxton" +#~ msgstr "Buxton" -#~ msgid "Lucas" -#~ msgstr "Lucas" +#~ msgid "Byron" +#~ msgstr "Byron" -#~ msgid "Lopez" -#~ msgstr "Lopez" +#~ msgid "Cabot" +#~ msgstr "Cabot" -#~ msgid "Long" -#~ msgstr "Long" +#~ msgid "Calais" +#~ msgstr "Calais" -#~ msgid "Logan" -#~ msgstr "Logan" +#~ msgid "Cambridge" +#~ msgstr "Cambridge" -#~ msgid "Lily" -#~ msgstr "Lily" +#~ msgid "Camden" +#~ msgstr "Camden" -#~ msgid "Lillian" -#~ msgstr "Lillian" +#~ msgid "Campton" +#~ msgstr "Campton" -#~ msgid "Liam" -#~ msgstr "Liam" +#~ msgid "Canaan" +#~ msgstr "Canaan" -#~ msgid "Lewis" -#~ msgstr "Lewis" +#~ msgid "Candia" +#~ msgstr "Candia" -#~ msgid "Lee" -#~ msgstr "Lee" +#~ msgid "Canterbury" +#~ msgstr "Canterbury" -#~ msgid "Leah" -#~ msgstr "Leah" +#~ msgid "Canton" +#~ msgstr "Canton" -#~ msgid "Layla" -#~ msgstr "Layla" +#~ msgid "Cape Elizabeth" +#~ msgstr "Cape Elizabeth" -#~ msgid "Lauren" -#~ msgstr "Lauren" +#~ msgid "Caratunk" +#~ msgstr "Caratunk" -#~ msgid "Landon" -#~ msgstr "Landon" +#~ msgid "Caribou" +#~ msgstr "Caribou" -#~ msgid "Kylie" -#~ msgstr "Kylie" +#~ msgid "Carlisle" +#~ msgstr "Carlisle" -#~ msgid "Kyle" -#~ msgstr "Kyle" +#~ msgid "Carmel" +#~ msgstr "Carmel" -#~ msgid "King" -#~ msgstr "King" +#~ msgid "Carrabassett Valley" +#~ msgstr "Carrabassett Valley" -#~ msgid "Kimberly" -#~ msgstr "Kimberly" +#~ msgid "Carroll" +#~ msgstr "Carroll" -#~ msgid "Kim" -#~ msgstr "Kim" +#~ msgid "Carroll Plantation" +#~ msgstr "Carroll Plantation" -#~ msgid "Kevin" -#~ msgstr "Kevin" +#~ msgid "Carthage" +#~ msgstr "Carthage" -#~ msgid "Kelly" -#~ msgstr "Kelly" +#~ msgid "Carver" +#~ msgstr "Carver" -#~ msgid "Kaylee" -#~ msgstr "Kaylee" +#~ msgid "Cary Plantation" +#~ msgstr "Cary Plantation" -#~ msgid "Kayla" -#~ msgstr "Kayla" +#~ msgid "Casco" +#~ msgstr "Casco" -#~ msgid "Katie" -#~ msgstr "Katie" +#~ msgid "Castine" +#~ msgstr "Castine" -#~ msgid "Katelyn" -#~ msgstr "Katelyn" +#~ msgid "Castle Hill" +#~ msgstr "Castle Hill" -#~ msgid "Kaitlin" -#~ msgstr "Kaitlin" +#~ msgid "Castleton" +#~ msgstr "Castleton" -#~ msgid "Kaden" -#~ msgstr "Kaden" +#~ msgid "Caswell" +#~ msgstr "Caswell" -#~ msgid "Justin" -#~ msgstr "Justin" +#~ msgid "Cavendish" +#~ msgstr "Cavendish" -#~ msgid "Julian" -#~ msgstr "Julian" +#~ msgid "Center Harbor" +#~ msgstr "Center Harbor" -#~ msgid "Julia" -#~ msgstr "Julia" +#~ msgid "Centerville" +#~ msgstr "Centerville" -#~ msgid "Juan" -#~ msgstr "Juan" +#~ msgid "Central Falls" +#~ msgstr "Central Falls" -#~ msgid "Josiah" -#~ msgstr "Josiah" +#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" +#~ msgstr "" +#~ "De votre %s, un/une %s entre en collision avec un %s, infligeant %d point " +#~ "de dommage%s!" -#~ msgid "Joshua" -#~ msgstr "Joshua" +#~ msgid " and stunning it" +#~ msgstr " et l'assome" -#~ msgid "Joseph" -#~ msgstr "Joseph" +#~ msgid "Your raincoat protects you from the acidic drizzle." +#~ msgstr "Votre imperméable vous protège de la pluie acide." -#~ msgid "Jose" -#~ msgstr "Jose" +#~ msgid "Your raincoat protects you from the acid rain." +#~ msgstr "Votre imperméable vous protège de la pluie acide." -#~ msgid "Jordan" -#~ msgstr "Jordan" +#~ msgid "Wagon" +#~ msgstr "Wagon" -#~ msgid "Jones" -#~ msgstr "Jones" +#~ msgid "Activate your bio lockpick" +#~ msgstr "Activer votre bio-crochetage ?" -#~ msgid "Jonathan" -#~ msgstr "Jonathan" +#~ msgid "Wheels: " +#~ msgstr "Roues: " -#~ msgid "Johnson" -#~ msgstr "Johnson" +#~ msgid "enough" +#~ msgstr "assez" -#~ msgid "John" -#~ msgstr "John" +#~ msgid " lack" +#~ msgstr "manquante(s)" -#~ msgid "Jocelyn" -#~ msgstr "Jocelyn" +#~ msgid "Safe speed: mph" +#~ msgstr "Vitesse sûre: mph" -#~ msgid "Jesus" -#~ msgstr "Jesus" +#~ msgid "Top speed: mph" +#~ msgstr "Vitesse max: mph" -#~ msgid "Jessie" -#~ msgstr "Jessie" +#~ msgid "Choose wheel to use as replacement: " +#~ msgstr "Choisissez la roue à utiliser en remplacement: " -#~ msgid "Jessica" -#~ msgstr "Jessica" +#~ msgid "hose" +#~ msgstr "tuyau" -#~ msgid "Jeremiah" -#~ msgstr "Jeremiah" +#~ msgid "You need a hose to siphon fuel." +#~ msgstr "Vous avez besoin d'un tuyau pour siphonner du carburant." -#~ msgid "Jennifer" -#~ msgstr "Jennifer" +#~ msgid "You need a hose to siphon water." +#~ msgstr "Vous avez besoin d'un tuyau pour siphonner de l'eau." -#~ msgid "Jenkins" -#~ msgstr "Jenkins" +#~ msgid "Safe speed: Km/h" +#~ msgstr "Vitesse sûre: Km/h" -#~ msgid "Jen" -#~ msgstr "Jen" +#~ msgid "You need level %d skill in mechanics." +#~ msgstr "Niveau %d en mécanique requis." -#~ msgid "Jayden" -#~ msgstr "Jayden" +#~ msgid "You're not strong enough!" +#~ msgstr "Vous n'êtes pas assez fort!" -#~ msgid "Jason" -#~ msgstr "Jason" +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "Des insectes rampent sous vôtre peau!" -#~ msgid "Jasmine" -#~ msgstr "Jasmine" +#~ msgid "Can't move furniture there! Choose a direction with open floor." +#~ msgstr "" +#~ "Impossible de déplacer le mobilier ici! Indiquez un emplacement libre." -#~ msgid "James" -#~ msgstr "James" +#~ msgid "Press a direction for the furniture to move (. to cancel):" +#~ msgstr "" +#~ "Indiquez une direction pour le deplacement du mobilier (. pour annuler)" -#~ msgid "Jaden" -#~ msgstr "Jaden" +#~ msgid "You disassemble the item into its components." +#~ msgstr "Vous desassemblez l'objet en ses differents composants." -#~ msgid "Jacob" -#~ msgstr "Jacob" +#~ msgid "Contracted the infection." +#~ msgstr "Vous avez contracté l'infection." -#~ msgid "Jackson" -#~ msgstr "Jackson" +#~ msgid "You start scratching yourself all over!" +#~ msgstr "Vous commencez à vous gratter partout." -#~ msgid "Jack" -#~ msgstr "Jack" +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s commence à se gratter partout." -#~ msgid "Isaiah" -#~ msgstr "Isaiah" +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s commence à se gratter partout." -#~ msgid "Isabelle" -#~ msgstr "Isabelle" +#~ msgid "Your bite wound really hurts." +#~ msgstr "Votre morsure vous fait vraiment mal." -#~ msgid "Isabella" -#~ msgstr "Isabella" +#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." +#~ msgstr "Vous êtes fiévreux et nauséeux, votre blessure devient verdâtre." -#~ msgid "Isabel" -#~ msgstr "Isabel" +#~ msgid "Your bite wound feels swollen and painful." +#~ msgstr "Votre morsure est gonflée et douloureuse." -#~ msgid "Isaac" -#~ msgstr "Isaac" +#~ msgid "Spores" +#~ msgstr "Spores" -#~ msgid "Ian" -#~ msgstr "Ian" +#~ msgid "Bleeding" +#~ msgstr "Saignement" -#~ msgid "Hunter" -#~ msgstr "Hunter" +#~ msgid "Bugs Under Skin" +#~ msgstr "Insectes sous la peau" -#~ msgid "Hughes" -#~ msgstr "Hughes" +#~ msgid "Infected Wound" +#~ msgstr "Blessure infectée" -#~ msgid "Howard" -#~ msgstr "Howard" +#~ msgid "Painful Bite Wound" +#~ msgstr "Morsure douloureuse" -#~ msgid "Hill" -#~ msgstr "Hill" +#~ msgid "Bite Wound" +#~ msgstr "Morsure" -#~ msgid "Hernandez" -#~ msgstr "Hernandez" +#~ msgid "Pus Filled Wound" +#~ msgstr "Blessure suppurante" -#~ msgid "Henry" -#~ msgstr "Henry" +#~ msgid "Painful Infected Wound" +#~ msgstr "Blessure infectée douloureuse" -#~ msgid "Henderson" -#~ msgstr "Henderson" +#~ msgid "" +#~ "Speed -40%\n" +#~ "You can feel the tiny spores sinking directly into your flesh." +#~ msgstr "" +#~ "Vitesse -40%\n" +#~ "Vous sentez les petites spores s'enfoncer dans votre chair." -#~ msgid "Hayes" -#~ msgstr "Hayes" +#~ msgid "" +#~ "Strength - 1; Intelligence - 2\n" +#~ "You stop to scratch yourself frequently; high intelligence helps you " +#~ "resist\n" +#~ "this urge." +#~ msgstr "" +#~ "Force - 1; Intelligence - 2\n" +#~ "Vous cessez de vous gratter aussi fréquemment, votre haute intelligence " +#~ "vous aidant à refréner ce besoin." -#~ msgid "Hayden" -#~ msgstr "Hayden" +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "" +#~ "SPAM, SPAM, SPAM, SPAM, SPAMMITY SPAM! Prétend être de la viande. Même " +#~ "après l'apocalypse, pas moyen de l'éviter." -#~ msgid "Harris" -#~ msgstr "Harris" +#~ msgid "Too many itens" +#~ msgstr "Trop d'objets" -#~ msgid "Hannah" -#~ msgstr "Hannah" +#~ msgid "Accel.: mph/t" +#~ msgstr "Accel.: mph/t" -#~ msgid "Hall" -#~ msgstr "Hall" +#~ msgid "Top speed: Km/h" +#~ msgstr "Vitesse max. : Km/H" -#~ msgid "Hailey" -#~ msgstr "Hailey" +#~ msgid "Accel.: Kmh/t" +#~ msgstr "Accel.: Kmh/t" -#~ msgid "Griffin" -#~ msgstr "Griffin" +#~ msgid "" +#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " +#~ "using\n" +#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " +#~ "your\n" +#~ "gun, possibly to change ammunition types, press 'U'." +#~ msgstr "" +#~ "Pour utiliser une arme a feu, equipez vous en avec la touche 'w'. " +#~ "Ensuite \n" +#~ "rechargez la en utilisant 'r', en partant du principe que vous avez les\n" +#~ "bonnes munitions. Si vous voulez decharger votre arme, par exemple \n" +#~ "pour changer de munitions, appuyez sur 'U'." -#~ msgid "Green" -#~ msgstr "Green" +#~ msgid "" +#~ "You just activated a grenade! You probably want to throw it. To throw " +#~ "an\n" +#~ "item, press 't' and then select the item to throw. The maximum range " +#~ "depends\n" +#~ "on your strength and the object's weight and size. Throwing isn't very " +#~ "good\n" +#~ "in most combat situations, but if you've got some fire power..." +#~ msgstr "" +#~ "Vous avez activez une grenade et désirez certainement la lancer ! Pour\n" +#~ "lancer un objet, appuyez sur 't' et sélectionnez l'objet a lancer. La " +#~ "distance\n" +#~ "maximum dépend de votre force, de la taille et du poids de l'objet. Le " +#~ "lancer\n" +#~ "est rarement efficace en combat, mais si vous avez de la puissance de " +#~ "feu..." -#~ msgid "Gray" -#~ msgstr "Gray" +#~ msgid "" +#~ "You're carrying more volume than you have storage for, which means you " +#~ "are\n" +#~ "carrying some stuff in the crook of your arm or in some other awkward " +#~ "manner.\n" +#~ "While overloaded like this, you will suffer SEVERE encumberment " +#~ "penalties,\n" +#~ "making combat dangerous. Either drop an item, or possibly wield " +#~ "something--\n" +#~ "the object you are wielding does not take up inventory space." +#~ msgstr "" +#~ "Vous transportez un volume trop important pour la place dont vous " +#~ "disposez, cela\n" +#~ "signifie que vous tenez des objets calés sous les aisselles ou d'autres " +#~ "manières \n" +#~ "inconfortables. Quand vous êtes encombré de la sorte, vous souffrez de " +#~ "pénalités\n" +#~ "d'encombrement SEVERES, cela rend le combat dangereux. Abandonnez un " +#~ "objet\n" +#~ "ou équipez vous en si c'est possible -- il ne comptera plus comme " +#~ "occupant de \n" +#~ "l'espace dans votre inventaire." -#~ msgid "Gracie" -#~ msgstr "Gracie" +#~ msgid "" +#~ "You just placed a trap. Traps are permanent until set off, and can be " +#~ "an\n" +#~ "important defensive tactic, particularly when sleeping in unsafe " +#~ "territory.\n" +#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." +#~ msgstr "" +#~ "Vous venez de placer un piège. Les pièges sont permanents jusqu'à \n" +#~ "désamorcage et constituent une importante tactique défensive, surtout\n" +#~ "lorsque vous dormez dans un territoire dangereux. Essayez de marcher\n" +#~ "sur le _ -- aucune inquiétude, c'est une piège a bulle sans danger." -#~ msgid "Grace" -#~ msgstr "Grace" +#~ msgid "" +#~ "A bloated zombie sagging with fat. It emits a\n" +#~ "horrible odor, and putrid, pink sludge drips\n" +#~ "from its mouth." +#~ msgstr "" +#~ "Un zombie boursouflé. Des bourrelets de gras pendent de son corps\n" +#~ "qui dégage une horrible odeur. De sa bouche s'écoule une\n" +#~ "excrétion rose et putride." -#~ msgid "Gonzalez" -#~ msgstr "Gonzalez" +#~ msgid "" +#~ "This zombie emits a constant haze of\n" +#~ "thick, obfuscating smoke." +#~ msgstr "" +#~ "Ce zombie exhale en permanence un nuage d'une fumée épaisse et trouble." -#~ msgid "Gonzales" -#~ msgstr "Gonzales" +#~ msgid "" +#~ "This zombie's jaw has been torn off, leaving\n" +#~ "a gaping hole from mid-neck up." +#~ msgstr "" +#~ "La mâchoire de ce zombie a été arraché, ne laissant\n" +#~ "qu'un trou béant au bas de son visage." -#~ msgid "Gianna" -#~ msgstr "Gianna" +#~ msgid "" +#~ "A human body, stumbling slowly forward on\n" +#~ "uncertain legs, possessed with an unstoppable\n" +#~ "rage." +#~ msgstr "" +#~ "Un corps humain titubant lentement son chemin\n" +#~ "avec des jambes incertaines, possédé par une rage\n" +#~ "implacable." -#~ msgid "Genesis" -#~ msgstr "Genesis" +#~ msgid "The sludge is thick and sticky." +#~ msgstr "La boue est épaisse et collante" -#~ msgid "Gavin" -#~ msgstr "Gavin" +#~ msgid "You haven't eaten in over a week!" +#~ msgstr "Vous n'avez rien mangé depuis une semaine!" -#~ msgid "Garcia" -#~ msgstr "Garcia" +#~ msgid "4 days... no water.." +#~ msgstr "4 jours... sans eau..." -#~ msgid "Gabrielle" -#~ msgstr "Gabrielle" +#~ msgid "You haven't had anything to drink in 2 days!" +#~ msgstr "Vous n'avez rien bu depuis 2 jours!" -#~ msgid "Gabriella" -#~ msgstr "Gabriella" +#~ msgid "Study %s?" +#~ msgstr "Etudier %s?" -#~ msgid "Gabriel" -#~ msgstr "Gabriel" +#~ msgid "You learn %s." +#~ msgstr "Vous apprenez %s." -#~ msgid "Foster" -#~ msgstr "Foster" +#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." +#~ msgstr "" +#~ "%s Arrêter %s? (Y)oui, (N)on, (I)gnorer les autres distractions et " +#~ "terminer." -#~ msgid "Flores" -#~ msgstr "Flores" +#~ msgid "%s Stop %s?" +#~ msgstr "%s Arrêter %s?" -#~ msgid "Faith" -#~ msgstr "Faith" +#~ msgid "You wake up to the ringing of an alarm-clock." +#~ msgstr "Vous vous reveillez au son d'un reveil." -#~ msgid "Evelyn" -#~ msgstr "Evelyn" +#~ msgid "Martial arts gained." +#~ msgstr "Art martiaux acquis." -#~ msgid "Evans" -#~ msgstr "Evans" +#~ msgid "Close" +#~ msgstr "Fermer" -#~ msgid "Evan" -#~ msgstr "Evan" +#~ msgid "Open" +#~ msgstr "Ouvert" -#~ msgid "Ethan" -#~ msgstr "Ethan" +#~ msgid " where? (Direction button)" +#~ msgstr " Ou ? (touche de direction)" -#~ msgid "Eric" -#~ msgstr "Eric" +#~ msgid "You damage the %s!" +#~ msgstr "Vous endommagez le %s !" -#~ msgid "Emma" -#~ msgstr "Emma" +#~ msgid "Examine" +#~ msgstr "Examiner" -#~ msgid "Emily" -#~ msgstr "Emily" +#~ msgid "Peek" +#~ msgstr "Coup d'oeil" -#~ msgid "Ella" -#~ msgstr "Ella" +#~ msgid "" +#~ "This zombie's mouth is deformed into a round\n" +#~ "spitter, and its body throbs with a dense\n" +#~ "yellow fluid." +#~ msgstr "" +#~ "Ce zombie a une bouche déformée en un crachoir arrondi ; son corps " +#~ "palpite d'un fluide dense et jaune." -#~ msgid "Elizabeth" -#~ msgstr "Elizabeth" +#~ msgid "a boomer explodes!" +#~ msgstr "un boomer explose!" -#~ msgid "Elijah" -#~ msgstr "Elijah" +#~ msgid "" +#~ "This zombie's flesh is pale blue, and it\n" +#~ "occasionally crackles with small bolts of\n" +#~ "lightning." +#~ msgstr "" +#~ "La chair bleu pâle de ce zombie crépite\n" +#~ "occasionnellement des petits éclairs\n" +#~ "électriques." -#~ msgid "Eli" -#~ msgstr "Eli" +#~ msgid "A common hydraulic jack, used when changing tires." +#~ msgstr "Un cric hydraulique standard, utilisé pour changer les pneus" -#~ msgid "Edwards" -#~ msgstr "Edwards" +#~ msgid "You dont see any items around you!" +#~ msgstr "Vous ne voyez pas d'objets à proximité." -#~ msgid "Eben" -#~ msgstr "Eben" +#~ msgid "" +#~ "An eldritch creature, shuffling\n" +#~ "along, its hands twitching so\n" +#~ "fast they appear as nothing but\n" +#~ "blurs." +#~ msgstr "" +#~ "Une créature surnaturelle, \n" +#~ "trainante, ses mains se \n" +#~ "contractant si rapidement\n" +#~ "qu'elle apparaissent floues" -#~ msgid "Dylan" -#~ msgstr "Dylan" +#~ msgid "MODS/BIONICS" +#~ msgstr "MODS/BIONIQUES" -#~ msgid "Dominic" -#~ msgstr "Dominic" +#~ msgid "" +#~ "Compact Bionics Module developed at DoubleTech Industries as a " +#~ "replacement for the highly successful CBM: Power Storage. Increases you " +#~ "power capacity by 10 units." +#~ msgstr "" +#~ "MBC crée par DoubleTech Industries en remplacement d'un MBC à grand " +#~ "succès, le MBC : Stockage d’Energie. Augmente votre capacité d'énergie de " +#~ "10 unités." -#~ msgid "Diego" -#~ msgstr "Diego" +#~ msgid "I am looking for a master to train my fighting techniques." +#~ msgstr "Je cherche un maître pour entrainer mes techniques de combat." -#~ msgid "Diaz" -#~ msgstr "Diaz" +#~ msgid "Contruct" +#~ msgstr "Construire" -#~ msgid "Destiny" -#~ msgstr "Destiny" +#~ msgid "aikido" +#~ msgstr "aikido" -#~ msgid "Davis" -#~ msgstr "Davis" +#~ msgid "%1$s quickly punch %4$s" +#~ msgstr "%1$s donner un coup de poing rapide %4$s" -#~ msgid "David" -#~ msgstr "David" +#~ msgid "%1$s karate chops %4$s" +#~ msgstr "%1$s donne un coup karaté %4$s" -#~ msgid "Daniel" -#~ msgstr "Daniel" +#~ msgid "%1$s blocks %4$s" +#~ msgstr "%1$s bloquer %4$s" -#~ msgid "Cox" -#~ msgstr "Cox" +#~ msgid "%1$s karate chop %4$s" +#~ msgstr "%1$s point karaté %4$s" -#~ msgid "Cooper" -#~ msgstr "Cooper" +#~ msgid "%1$s quickly punches %4$s" +#~ msgstr "%1$s donne un coup de poing rapide %4$s" -#~ msgid "Cook" -#~ msgstr "Cook" +#~ msgid "%1$s block %4$s" +#~ msgstr "%1$s bloquer %4$s" -#~ msgid "Connor" -#~ msgstr "Connor" +#~ msgid "karate" +#~ msgstr "karaté" -#~ msgid "Colton" -#~ msgstr "Colton" +#~ msgid "" +#~ "Judo is a martial art that focuses on grabs and throws, both defensive " +#~ "and\n" +#~ "offensive. It also focuses on recovering from throws; while using judo, " +#~ "you\n" +#~ "will not lose any turns to being thrown or knocked down." +#~ msgstr "" +#~ "Le judo est un art martial centré sur des projections à la fois " +#~ "défensives et\n" +#~ "offensives. Il se concentre aussi sur les récupérations après des " +#~ "projections; en pratiquant le judo vous\n" +#~ "ne perdrez aucun tour pour être projeté ou renversé au sol." -#~ msgid "Collins" -#~ msgstr "Collins" +#~ msgid "%1$s grab %4$s" +#~ msgstr "%1$s attraper %4$s" -#~ msgid "Coleman" -#~ msgstr "Coleman" +#~ msgid "judo" +#~ msgstr "judo" -#~ msgid "Cole" -#~ msgstr "Cole" +#~ msgid "" +#~ "Though tai chi is often seen as a form of mental and physical exercise, " +#~ "it is\n" +#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " +#~ "the\n" +#~ "force of an attack makes your Perception decrease damage further on a " +#~ "block." +#~ msgstr "" +#~ "Bien que le tai chi soit souvent vu comme un forme d'exercices mentaux et " +#~ "physiques, on peut\n" +#~ "légitimement le qualifier d'art martial, centré sur l'autodéfense. Sa " +#~ "capacité à absorber la\n" +#~ "force d'une attaque augmente la diminution de dommages, basée sur votre " +#~ "perception, lorsque vous bloquez un coup." -#~ msgid "Clark" -#~ msgstr "Clark" +#~ msgid "%1$s grabs %4$s" +#~ msgstr "%1$s attrape %4$s" -#~ msgid "Claire" -#~ msgstr "Claire" +#~ msgid "tai chi" +#~ msgstr "tai chi" -#~ msgid "Christopher" -#~ msgstr "Christopher" +#~ msgid "8: Exit" +#~ msgstr "8: Quitter" -#~ msgid "Christian" -#~ msgstr "Christian" +#~ msgid "Clean Wound" +#~ msgstr "Nettoyer la blessure" -#~ msgid "Chloe" -#~ msgstr "Chloe" +#~ msgid "You clean the bite wound." +#~ msgstr "Vous nettoyez la morsure." -#~ msgid "Chase" -#~ msgstr "Chase" +#~ msgid "You disinfect the bite wound." +#~ msgstr "Vous désinfectez la morsure." -#~ msgid "Charlotte" -#~ msgstr "Charlotte" +#~ msgid "butchering" +#~ msgstr "dépeçage" -#~ msgid "Charles" -#~ msgstr "Charles" +#~ msgid "Butcher the %s corpse?" +#~ msgstr "Dépecer le cadavre de %s ?" -#~ msgid "Carter" -#~ msgstr "Carter" +#~ msgid "" +#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " +#~ "with. Its small tip allows for a precision strike in the hands of the " +#~ "skilled. It is too small to butcher corpses with." +#~ msgstr "" +#~ "Un petit couteau très aiguisé. Il cause de bons dommages mais il est " +#~ "difficile de toucher avec. Sa petite pointe permet de porter des coups " +#~ "précis si utilisée par des mains compétentes. Il est trop petit pour " +#~ "dépecer les cadavres." -#~ msgid "Carson" -#~ msgstr "Carson" +#~ msgid "" +#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " +#~ "corpses." +#~ msgstr "" +#~ "Un couteau aiguisé. C'est une arme de mêlée médiocre, mais convient pour " +#~ "le dépecage des cadavres." -#~ msgid "Caroline" -#~ msgstr "Caroline" +#~ msgid "" +#~ "Designed for combat, and deadly in the right hands. Can be used to " +#~ "butcher corpses." +#~ msgstr "" +#~ "Conçu pour le combat et mortel placé entre les bonnes mains. Peut être " +#~ "utilisé pour dépecer des cadavres." -#~ msgid "Carlos" -#~ msgstr "Carlos" +#~ msgid "" +#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " +#~ "butchering corpses." +#~ msgstr "" +#~ "Un couteau aiguisé et lourd. C'est une bonne arme de mêlée, et la " +#~ "meilleure pour dépecer les cadavres." -#~ msgid "Campbell" -#~ msgstr "Campbell" +#~ msgid "A sturdy saw, useful for cutting through metal objects." +#~ msgstr "Une scie robuste, utile pour découper des objets en métal." -#~ msgid "Camilla" -#~ msgstr "Camilla" +#~ msgid "A small tent, just big enough to fit a person comfortably." +#~ msgstr "" +#~ "Une petite tente, qui a juste assez de place pour accueillir " +#~ "confortablement une personne." -#~ msgid "Cameron" -#~ msgstr "Cameron" +#~ msgid "" +#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " +#~ "amount of light" +#~ msgstr "" +#~ "Un gros bâton enrobé de chiffons imbibés d'essence. Une fois enflammée la " +#~ "torche produit une assez bonne quantité de lumière." -#~ msgid "Caleb" -#~ msgstr "Caleb" +#~ msgid "" +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time." +#~ msgstr "" +#~ "Une bougie imposante, ne produit pas beaucoup de lumière mais brûlera " +#~ "assez longtemps." -#~ msgid "Caden" -#~ msgstr "Caden" +#~ msgid "" +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time. This candle is lit." +#~ msgstr "" +#~ "Une bougie imposante, ne produit pas beaucoup de lumière mais brûlera " +#~ "assez longtemps. Cette bougie est allumée." -#~ msgid "Butler" -#~ msgstr "Butler" +#~ msgid "" +#~ "A large stand with slots in the side. (a)ctivate it and place it " +#~ "somewhere then set fires in it with no risk of spreading." +#~ msgstr "" +#~ "Un support large avec des fentes sur le côté. (a)ctivez le et placez le " +#~ "puis vous pouvez y allumer un feu sans risque de le voir s'étendre." -#~ msgid "Bryant" -#~ msgstr "Bryant" +#~ msgid "" +#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " +#~ "container beneath it to collect water when it rains." +#~ msgstr "" +#~ "Un entonnoir utilisé pour collecter l'eau de pluie. (a)ctivez le à " +#~ "l'extérieur et placez un contenant en dessous pour collecter l'eau de " +#~ "pluie." -#~ msgid "Bryan" -#~ msgstr "Bryan" +#~ msgid "" +#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " +#~ "outside and place a container beneath it to collect water when it rains." +#~ msgstr "" +#~ "Un petit entonnoir improvisé utile pour collecter l'eau de pluie. (a)" +#~ "ctivez le à l'extérieur et placez un contenant en dessous pour collecter " +#~ "l'eau de pluie." + +#~ msgid "" +#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " +#~ "mechanics crafting recipes." +#~ msgstr "" +#~ "Une clé ajustable. Correct comme arme de mêlée et utile pour de " +#~ "nombreuses fabrications." -#~ msgid "Brown" -#~ msgstr "Brown" +#~ msgid "An unwieldy mop. Good for cleaning up spills." +#~ msgstr "" +#~ "Un balai à franges peu maniable. Utile pour nettoyer les liquides " +#~ "renversés." -#~ msgid "Brooks" -#~ msgstr "Brooks" +#~ msgid "A large steel pickaxe, strike the earth!" +#~ msgstr "Une grosse pioche en acier, 'strike the earth!'" -#~ msgid "Brooklyn" -#~ msgstr "Brooklyn" +#~ msgid "" +#~ "A spray can, filled with paint. Use this tool to make graffiti on the " +#~ "floor." +#~ msgstr "" +#~ "Un spray aérosol de peinture. Utilisez-le pour faire des graffitis sur le " +#~ "sol." -#~ msgid "Brooke" -#~ msgstr "Brooke" +#~ msgid "" +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." +#~ msgstr "" +#~ "Un marqueur permanent King Size(tm) très résistant, sa taille est à " +#~ "moitié à mi-chemin entre un marqueur commun et un spray aérosol." -#~ msgid "Brody" -#~ msgstr "Brody" +#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgstr "" +#~ "Un chiffon, utile pour l'artisanat et peut-être pour arrêter les " +#~ "hémorragies." -#~ msgid "Brianna" -#~ msgstr "Brianna" +#~ msgid "A piece of plastic. Not much use except to repair plastic items" +#~ msgstr "" +#~ "Un morceau de plastique. Peu d'utilité sauf pour réparer les objets en " +#~ "plastique." -#~ msgid "Brian" -#~ msgstr "Brian" +#~ msgid "A piece of kevlar. Can be used to repair kevlar items" +#~ msgstr "" +#~ "Un morceau de kevlar qui peut être utilisé pour réparer des objets en " +#~ "kevlar." -#~ msgid "Brayden" -#~ msgstr "Brayden" +#~ msgid "" +#~ "A small multipurpose electronic device. Can be loaded with a variety of " +#~ "apps, providing all kinds of functionality." +#~ msgstr "" +#~ "PDA : Personal Digital Assistant. Un petit appareil électronique " +#~ "multifonction. Il peut être chargé avec de multiples apps, fournissant " +#~ "ainsi toutes sortes de fonctionnalités." -#~ msgid "Brandon" -#~ msgstr "Brandon" +#~ msgid "" +#~ "A small multipurpose electronic device. This PDA has its flashlight app " +#~ "on, and is providing light." +#~ msgstr "" +#~ "Un petit appareil électronique multifonction. Ce PDA a l'application " +#~ "lampe de poche allumée et fait donc un peu de lumière." -#~ msgid "Brady" -#~ msgstr "Brady" +#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgstr "" +#~ "Un petit couteau de poche, médiocre pour le combat mais toujours mieux " +#~ "que rien." -#~ msgid "Blake" -#~ msgstr "Blake" +#~ msgid "" +#~ "A sharp needle made from a bone. It would be useful for making rough " +#~ "clothing and items" +#~ msgstr "" +#~ "Une aiguille fabriquée à partir d'os. Elle serait utile pour fabriquer " +#~ "grossièrement des vêtements et objets." -#~ msgid "Bennett" -#~ msgstr "Bennett" +#~ msgid "" +#~ "A rock affixed to a stick, functions adequately as a hammer, but really " +#~ "can't compare to a proper hammer." +#~ msgstr "" +#~ "Un rocher attaché à un bâton, qui fonctionne comme un marteau mais on ne " +#~ "peut vraiment pas le comparer à un vrai marteau." -#~ msgid "Benjamin" -#~ msgstr "Benjamin" +#~ msgid "" +#~ "A sharpened stone affixed to a stick, works passably well as an axe but " +#~ "really can't compare to a proper axe." +#~ msgstr "" +#~ "Une pierre affûtée attachée à un bâton, elle fonctionne comme une hache " +#~ "mais on ne peut vraiment pas la comparer à une vraie hache." -#~ msgid "Bell" -#~ msgstr "Bell" +#~ msgid "" +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." +#~ msgstr "" +#~ "Une pierre aplatie attachée à un bâton, cette pelle fonctionne comme une " +#~ "pelle mais on ne peut vraiment pas la comparer à une vraie pelle." -#~ msgid "Barnes" -#~ msgstr "Barnes" +#~ msgid "" +#~ "A large stick, with the end carved into a blade for digging. Can be used " +#~ "to dig shallow pits, but not deep ones." +#~ msgstr "" +#~ "Un gros bâton dont la pointe est taillée en lame pour creuser. Il peut " +#~ "être utilisé pour creuser des trous peu profonds seulement." -#~ msgid "Baker" -#~ msgstr "Baker" +#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgstr "" +#~ "Un petit abri fabriqué avec des bâtons et des peaux. (a)ctivez le pour le " +#~ "placer." -#~ msgid "Bailey" -#~ msgstr "Bailey" +#~ msgid "" +#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " +#~ "shelter has been damaged, and needs repairs." +#~ msgstr "" +#~ "Un petit abri fabriqué avec des bâtons et des peaux. (a)ctivez le pour le " +#~ "placer. Cet abri a été endommagé et nécessite des réparations." -#~ msgid "Ayden" -#~ msgstr "Ayden" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. Usable only " +#~ "once." +#~ msgstr "" +#~ "Un paquet chauffant, utilisé pour traiter les blessures de sport et " +#~ "chauffer la nourriture. Utilisation unique." -#~ msgid "Avery" -#~ msgstr "Avery" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. This one has " +#~ "been used already and is now useless." +#~ msgstr "" +#~ "Un paquet chauffant, utilisé pour traiter les blessures de sport et " +#~ "chauffer la nourriture. Celui-ci est utilisé et est désormais inutile." -#~ msgid "Ava" -#~ msgstr "Ava" +#~ msgid "A talking doll for children, luckily it still works." +#~ msgstr "" +#~ "Une poupée parlante pour les enfants, par chance elle fonctionne encore." -#~ msgid "Autumn" -#~ msgstr "Autumn" +#~ msgid "A fluffy towel, can be used to dry yourself." +#~ msgstr "Une serviette moelleuse, utilisable pour vous séchez." -#~ msgid "Austin" -#~ msgstr "Austin" +#~ msgid "A bicycle folded into a relatively portable package." +#~ msgstr "Un vélo plié en un paquet relativement portable." -#~ msgid "Audrey" -#~ msgstr "Audrey" +#~ msgid "" +#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " +#~ "metal, and complete disregard for personal safety. Not as efficient as a " +#~ "factory welder, but it will serve in a pinch." +#~ msgstr "" +#~ "Cette soudeuse rudimentaire a été fabriquée à partir d'un paquet de " +#~ "câbles de cuivre, de ferraille et un dédain complet pour la sécurité " +#~ "personnelle de l'utilisateur. Pas aussi efficace qu'une soudeuse " +#~ "industrielle mais servira à la rigueur." -#~ msgid "Aubrey" -#~ msgstr "Aubrey" +#~ msgid "" +#~ "A still, useful for the distillation of alcohol and other, more curious " +#~ "substances." +#~ msgstr "" +#~ "Un alambic, utilisé pour la distillation de l'alcool et d'autres " +#~ "substances plus curieuses." -#~ msgid "Ashley" -#~ msgstr "Ashley" +#~ msgid "A plastic mold which can be used to craft items made of plastic." +#~ msgstr "" +#~ "Un moule en plastique qui peut être utilisé pour fabriquer des objets en " +#~ "plastique." -#~ msgid "Arianna" -#~ msgstr "Arianna" +#~ msgid "" +#~ "This chemistry set stored in a bag contains some glass containers, some " +#~ "metal wire and safety glasses. It might be used to craft some chems if " +#~ "you're so inclined." +#~ msgstr "" +#~ "Ce kit de chimie contient, dans un sac, des contenants de verre, des " +#~ "câbles de métal et des lunettes de sécurité. Il pourrait être utilisé " +#~ "pour produire des produits chimiques si le coeur vous en dit." -#~ msgid "Ariana" -#~ msgstr "Ariana" +#~ msgid "You managed to stop the bleeding." +#~ msgstr "Vous réussissez à arrêter l'hémorragie." -#~ msgid "Anthony" -#~ msgstr "Anthony" +#~ msgid "You couldn't stop the bleeding." +#~ msgstr "Vous n'avez pas réussi à stopper l'hémorragie." -#~ msgid "Anna" -#~ msgstr "Anna" +#~ msgid "" +#~ "You were a high school student until the teachers literally tried to pick " +#~ "your brains. You start with a backpack and a zombie survival guide." +#~ msgstr "" +#~ "Vous étiez un lycéen jusqu'au jour où les enseignants ont réellement " +#~ "essayé de s'occuper de votre cerveau. Vous débutez avec un sac à dos et " +#~ "un guide de survie en territoire zombie." -#~ msgid "Angelina" -#~ msgstr "Angelina" +#~ msgid "" +#~ "A human body, encapsulated in tough riot\n" +#~ "armour, this zombie was clearly a cop gearing\n" +#~ "up to fight the infection." +#~ msgstr "" +#~ "Un corps humain, protégé par une armure\n" +#~ "anti-émeute résistante; clairement ce zombie était un policier armé\n" +#~ "pour combattre les infectés." -#~ msgid "Angel" -#~ msgstr "Angel" +#~ msgid "" +#~ "This zombie's hands and feet are\n" +#~ "webbed, and it is clad in swimwear." +#~ msgstr "" +#~ "Les mains et pieds de ce zombie sont\n" +#~ "palmés et il est habillé d'une tenue de natation." -#~ msgid "Andrew" -#~ msgstr "Andrew" +#~ msgid "" +#~ "A hideous beast of a zombie, bulging with\n" +#~ "distended muscles on both arms and legs." +#~ msgstr "" +#~ "Un hideux zombie bestial, gonflé\n" +#~ "de muscles enflés sur les bras et les jambes." -#~ msgid "Andrea" -#~ msgstr "Andrea" +#~ msgid "" +#~ "A zombie with jet black skin and glowing red\n" +#~ "eyes. As you look at it, you're gripped by a\n" +#~ "feeling of dread and terror." +#~ msgstr "" +#~ "Un zombie avec une peau noir de jais et des yeux\n" +#~ "rougeoyants. Lorsque vous le regardez vous êtes saisis d'un\n" +#~ "sentiment de terreur et de crainte." -#~ msgid "Anderson" -#~ msgstr "Anderson" +#~ msgid "" +#~ "A zombie wearing a tattered lab coat and\n" +#~ "some sort of utility belt. It looks weaker\n" +#~ "than most zombies, but more resourceful too." +#~ msgstr "" +#~ "Un zombie vêtu d'une blouse de laboratoire en lambeaux et\n" +#~ "d'une ceinture utilitaire. Il a l'air plus faible\n" +#~ "que la plupart des zombies mais plein de ressources aussi." -#~ msgid "Amelia" -#~ msgstr "Amelia" +#~ msgid "" +#~ "A zombie that has somehow grown to the size of\n" +#~ "6 men, with arms as wide as a trash can." +#~ msgstr "" +#~ "Un zombie qui a d'une manière ou d'une autre grandi jusqu'à\n" +#~ "la taille de 6 hommes, avec des bras aussi larges que des poubelles." -#~ msgid "Alyssa" -#~ msgstr "Alyssa" +#~ msgid "Pry" +#~ msgstr "Forcer l'ouverture" -#~ msgid "Allison" -#~ msgstr "Allison" +#~ msgid "" +#~ "This zombie was clearly a soldier before.\n" +#~ "Its tattered armor gives it strong defense,\n" +#~ "and it is much more physically fit than\n" +#~ "most zombies." +#~ msgstr "" +#~ "Clairement ce zombie était auparavant un soldat.\n" +#~ "Son armure, en piteux état, lui accorde une bien meilleure défense,\n" +#~ "et il est physiquement plus\n" +#~ "fort que la plupart des zombies." -#~ msgid "Allen" -#~ msgstr "Allen" +#~ msgid "You don't have enough battery power to purify all the water." +#~ msgstr "Vous n'avez pas assez de batterie pour purifier toute l'eau." -#~ msgid "Alexis" -#~ msgstr "Alexis" +#~ msgid "" +#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " +#~ "sure footing." +#~ msgstr "" +#~ "Vous courez plus vite que la plupart des gens; cela résulte en un bonus " +#~ "de 15%% de vitesse en bonnes conditions de course." -#~ msgid "Alexandra" -#~ msgstr "Alexandra" +#~ msgid "You're just generally quick! You get a 10%% bonus to action points." +#~ msgstr "" +#~ "Vous êtes simplement rapide ! Vous obtenez un bonus de 10%% aux points " +#~ "d'action." -#~ msgid "Alexander" -#~ msgstr "Alexander" +#~ msgid "" +#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." +#~ msgstr "" +#~ "Il en faut beaucoup pour vous tuer! Vous avez 20%% de bonus à tous vos " +#~ "points de vie." -#~ msgid "Alexa" -#~ msgstr "Alexa" +#~ msgid "" +#~ "You can manage to find space for anything! You can carry 40%% more volume." +#~ msgstr "" +#~ "Vous vous débrouillez pour caser des objets partout! Vous pouvez " +#~ "transporter 40%% de volume en plus." -#~ msgid "Alex" -#~ msgstr "Alex" +#~ msgid "Cleaned the bite wound." +#~ msgstr "La blessure par morsure est nettoyée." -#~ msgid "Aiden" -#~ msgstr "Aiden" +#~ msgid "Sterilized the infection... this time." +#~ msgstr "Vous avez stérilisé l'infection... cette fois." -#~ msgid "Aidan" -#~ msgstr "Aidan" +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "" +#~ "Un peu encombrant à porter mais fournit pas mal d'espace de stockage." -#~ msgid "Adrian" -#~ msgstr "Adrian" +#~ msgid "" +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." +#~ msgstr "" +#~ "Un dosimètre qui mesure le niveau de radiation. Il est rangé dans un sac " +#~ "qui bloque les radiations. Activez le pour le sortir du sac." -#~ msgid "Addison" -#~ msgstr "Addison" +#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." +#~ msgstr "" +#~ "N'en buvez pas. La mélanger avec de l'ammoniaque produit un gaz toxique." -#~ msgid "Adams" -#~ msgstr "Adams" +#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." +#~ msgstr "" +#~ "N'en buvez pas. La mélanger avec de l'eau de Javel produit un gaz toxique." -#~ msgid "Adam" -#~ msgstr "Adam" +#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." +#~ msgstr "De l'acide de pluies acides concentré. N'en buvez pas." -#~ msgid "Abigail" -#~ msgstr "Abigail" +#~ msgid "beef jerky" +#~ msgstr "bœuf séché" -#~ msgid "Aaron" -#~ msgstr "Aaron" +#~ msgid "MRE - beef" +#~ msgstr "MRE - bœuf" -#~ msgid "Aaliyah" -#~ msgstr "Aaliyah" +#~ msgid "canned apple slices" +#~ msgstr "quartiers de pommes en conserve" #~ msgid "" -#~ "A leather sling, it is easy to use and accurate, but pebbles do little " -#~ "damage. Pebbles are used as ammunition." +#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " +#~ "color." #~ msgstr "" -#~ "Une fronde en cuir, elle est facile à utiliser et précise, mais les " -#~ "graviers utilié comme munition font peu de dégats." +#~ "Un bocal en verre scellé qui contient des pommes préservées. Fades, " +#~ "molles et en train de perdre leur couleur." + +#~ msgid "apple slices" +#~ msgstr "quartiers de pomme" #~ msgid "" -#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " -#~ "damage. It could be used to practice your rifle skill up to level 1." +#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" #~ msgstr "" -#~ "L'arme préférée des enfants. Assez précis, mais les plombs ne font " -#~ "presque aucun dégats. Il peut êtr utilisé pour monter votre compétence " -#~ "Fusil à 1." +#~ "Des quartiers de pomme trempés dans du sucre inverti pour conserver " +#~ "l'apparence et la fraîcheur." #~ msgid "" -#~ "A tool used to drive nails into wood or other material. It could also be " -#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." +#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" +#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " +#~ "allows\n" +#~ "you an extra dodge and two extra blocks on the following round." #~ msgstr "" -#~ "Un outil utilisé pour clouer des planches en construction. Il peut aussi " -#~ "faire une arme improvisée, ou utiliser pour faire monter votre compétence " -#~ "Arme de Poing à 1." +#~ "Le karaté est un art martial populaire né au Japon. Il est centré sur\n" +#~ "des attaques rapides et précises, des blocages et desmouvements fluides. " +#~ "Une attaque réussie vous\n" +#~ "donne une esquive supplémentaire et deux blocages supplémentaires au " +#~ "prochain tour." -#~ msgid "You have an alcohol craving." -#~ msgstr "Vous êtes en manque d'alcool." +#~ msgid "Siphon from" +#~ msgstr "Siphonner..." -#~ msgid "You have a caffeine craving." -#~ msgstr "Vous êtes en manque de cafféine." +#~ msgid "create an EMP" +#~ msgstr "Créer une Pulsion Electro Magnétique" -#~ msgid "You have a nicotine craving." -#~ msgstr "Vous êtes en manque de nicotine." +#~ msgid "Bandage" +#~ msgstr "Bandage" -#~ msgid " +Damage" -#~ msgstr " +Dégats" +#~ msgid "Disinfectant" +#~ msgstr "Désinfectant" -#~ msgid " +Attack" -#~ msgstr " +Attaque" +#, fuzzy +#~ msgid "Part: %s" +#~ msgstr "Graffiti : %s" -#~ msgid " +Dodge" -#~ msgstr " +Esquive" +#~ msgid "Your torso is burning up. You should remove some layers." +#~ msgstr "Votre torse est brulant. Vous devriez retirer des couches." -#~ msgid "This white flour is useful for baking." -#~ msgstr "Utile pour la pâtisserie." +#~ msgid "Your feet feel numb." +#~ msgstr "Vous ne sentez plus vos pieds." -#~ msgid "" -#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." -#~ msgstr "" -#~ "Un gros oeuf de fourmi, de la taille d'une balle de baseball. Très " -#~ "nourrissants, mais à la consistance et l'odeur du vomi." +#~ msgid "Your coughing wakes you up." +#~ msgstr "Votre toux vous réveille." -#~ msgid "" -#~ "A malformed human leg, this would be gross to eat, and cause mutations." -#~ msgstr "" -#~ "Une jambe humaine déformée. Ce serait horrible à manger, et provoquerait " -#~ "sûrement des dommages à votre ADN." +#~ msgid "An alarm rings but you don't hear it." +#~ msgstr "Une alarme sonne mais vous ne l'entendez pas!" -#~ msgid "" -#~ "A misshapen human arm, eating this would be pretty disgusting and cause " -#~ "your DNA to mutate." -#~ msgstr "" -#~ "Un bras humain déformé. Ce serait horrible à manger, et provoquerait " -#~ "sûrement des dommages à votre ADN." +#~ msgid "Fully rested." +#~ msgstr "Complétement reposé." -#~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." -#~ msgstr "" -#~ "Un foetus humain déformé. Ce serait horrible à manger, et provoquerait " -#~ "sûrement des dommages à votre ADN." +#~ msgid "You feel your skeleton melt" +#~ msgstr "Vous sentez vos os fondre." + +#~ msgid "Huh? What was that?" +#~ msgstr "Hein ? qu'est ce que c'est que ça ?" + +#~ msgid "Oh god, what's happening?" +#~ msgstr "Bon sang, qu'est ce qu'il se passe ?" #~ msgid "" -#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " -#~ "all sorts of afflictions." +#~ "Your head is dangerously cold. Getting undressed sounds like a good idea." #~ msgstr "" -#~ "Un gros morceau de cire, remplid 'une pête sombre. Utilisé en médecine " -#~ "naturelle pour soigner un peu près tout." +#~ "Votre crâne est dangereusement froid. Se déshabiller semble une bonne " +#~ "idée." -#~ msgid "" -#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " -#~ "emergency." +#~ msgid "Your hands are very exposed to the cold. Your hands are shivering." +#~ msgstr "Vos mains sont très exposées au froid. Vos mains tremblent." + +#~ msgid "('/' to search, Esc to stop, <> to switch between results)" #~ msgstr "" -#~ "Un gros morceau de cire d'abeille. Pas très bon, mais ok en cas d'urgence." +#~ "('/' pour chercher, Esc pour arrêter, <> pour fouiller dans les résultats)" -#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." -#~ msgstr "Beurk. A manger si l'alternative est de mourrir de faim." +#~ msgid "Wish for a: " +#~ msgstr "Faire un voeux pour un/une: " -#~ msgid "tuna fish" -#~ msgstr "thon" +#~ msgid "\"%s \" not found!" +#~ msgstr "\"%s \" Introuvable!" -#~ msgid "sardines" -#~ msgstr "sardines" +#~ msgid "contained" +#~ msgstr "contenu" -#~ msgid "Canned beans. A staple for hobos." -#~ msgstr "Des haricots en boîte. La nourriture naturelle des clochards." +#~ msgid "How many do you want? (default is 1): " +#~ msgstr "Combien? (par défaut = 1): " -#~ msgid "cooked spaghetti" -#~ msgstr "spaghetti cuit" +#~ msgid "Wish granted - %d x %s." +#~ msgstr "Obtenu - %d x %s." -#~ msgid "carrot" -#~ msgstr "carrotte" +#~ msgid "Spawn a: " +#~ msgstr "Faire apparaître un/une: " -#~ msgid "Bread and turkey, that's it." -#~ msgstr "Du pain et de la dinde, c'est tout." +#~ msgid "Mutate: " +#~ msgstr "Mutation: " + +#, fuzzy +#~ msgid "%1$s elbows %4$s" +#~ msgstr "%1$s bloquer %4$s" + +#, fuzzy +#~ msgid "Cart" +#~ msgstr "Caddie de golf" + +#, fuzzy +#~ msgid "Enter new cart name:" +#~ msgstr "Entrez un nouveau nom pour ce véhicule:" + +#, fuzzy +#~ msgid "Start cart construction" +#~ msgstr "Commencer à Construire un Véhicule" + +#~ msgid "Monster Spotted!" +#~ msgstr "Monstre repéré !" diff --git a/lang/po/it.po b/lang/po/it.po index 607ddf40d02f6..001b5fb311362 100644 --- a/lang/po/it.po +++ b/lang/po/it.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-06 22:35+0000\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-13 11:50+0000\n" "Last-Translator: duke455 \n" "Language-Team: Italian \n" "Language: it\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:31+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:32+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -549,24 +549,26 @@ msgstr "" #: advanced_inv.cpp msgid " (FULL)" -msgstr "" +msgstr " (PIENO)" #: advanced_inv.cpp msgid "1-9 (or GHJKLYUBNI) to select square for active tab, 0 for inventory," msgstr "" +"1-9 (oppure GHJKLYUBNI) per selezionare la casella della finestra attiva, 0 " +"per l'inventario" #: advanced_inv.cpp msgid "< [?] show help >" -msgstr "" +msgstr "< [?] mostra aiuto >" #: advanced_inv.cpp msgid "< [?] show log >" -msgstr "" +msgstr "< [?] mostra registro >" #: advanced_inv.cpp #, c-format msgid "< [s]ort: %s >" -msgstr "" +msgstr "< [s]istema: %s >" #: advanced_inv.cpp msgid "All 9 squares" @@ -574,38 +576,44 @@ msgstr "tutte 9 le caselle" #: advanced_inv.cpp msgid "Can't move stuff to the same place." -msgstr "" +msgstr "Non puoi muovere piu oggetti nello stesso posto." #: advanced_inv.cpp newcharacter.cpp msgid "DESCRIPTION" -msgstr "" +msgstr "DESCRIZIONE" #: advanced_inv.cpp msgid "Destination area has too many items. Remove some first." msgstr "" +"L'area di destinazione ha troppi oggetti in essa. Rimuovine alcuni prima." #: advanced_inv.cpp msgid "Destination area is full. Remove some items first" -msgstr "" +msgstr "Area di destinazione piena. Rimuovi degli oggetti prima." #: advanced_inv.cpp msgid "Destination area is full. Remove some items first." -msgstr "" +msgstr "Area di destinazione piena. Rimuovi degli oggetti prima." #: advanced_inv.cpp #, c-format msgid "Destination can only hold %d! Move how many? (0 to cancel) " msgstr "" +"La destinazione può contenere solo %d! Quanti ne vuoi spostare? (0 per " +"annullare) " #: advanced_inv.cpp #, c-format msgid "" "Destination full. %d / %d moved. Please report a bug if items have vanished." msgstr "" +"Destinazione piena. %d/ %d mossi. Segnalare la presenza di un bug in caso " +"degli oggetti siano scomparsi." #: advanced_inv.cpp msgid "Destination full. Please report a bug if items have vanished." msgstr "" +"Destinazione piena. Segnalare un bug in caso degli oggetti siano scomparsi." #: advanced_inv.cpp msgid "Directly below you" @@ -617,11 +625,11 @@ msgstr "Est" #: advanced_inv.cpp msgid "How many do you want to move? (0 to cancel)" -msgstr "" +msgstr "Quanti ne vuoi muovere? (0 per annullare)" #: advanced_inv.cpp msgid "Invalid. Like the menu said." -msgstr "" +msgstr "Non valido. Come detto dal menu." #: advanced_inv.cpp msgid "Inventory" @@ -645,16 +653,16 @@ msgstr "Nord Ovest" #: advanced_inv.cpp msgid "Select destination" -msgstr "" +msgstr "Selezionare la destinazione" #: advanced_inv.cpp msgid "Sort by... " -msgstr "" +msgstr "ordina per... " #: advanced_inv.cpp #, c-format msgid "Source area is the same as destination (%s)." -msgstr "" +msgstr "L' area di partenza è la stessa di destinazione (%s)" #: advanced_inv.cpp msgid "South" @@ -674,19 +682,19 @@ msgstr "Area circostante" #: advanced_inv.cpp msgid "There's no room in your inventory." -msgstr "" +msgstr "Non c'è spazio nel tuo inventario." #: advanced_inv.cpp msgid "This is too heavy!" -msgstr "" +msgstr "Questo e' troppo pesante!" #: advanced_inv.cpp msgid "Too many items." -msgstr "" +msgstr "Troppi oggetti." #: advanced_inv.cpp msgid "Unsorted (recently added first)" -msgstr "" +msgstr "Non ordinato (Precedenza a quelli aggiunti di recente)" #: advanced_inv.cpp msgid "West" @@ -694,11 +702,11 @@ msgstr "Ovest" #: advanced_inv.cpp msgid "You can't pick up a liquid." -msgstr "" +msgstr "Non puoi raccogliere un liquido." #: advanced_inv.cpp msgid "You can't put items there" -msgstr "" +msgstr "Non puoi mettere degli oggetti li" #: advanced_inv.cpp #, c-format @@ -707,19 +715,21 @@ msgstr "[<] pagina %d di %d [>]" #: advanced_inv.cpp msgid "[F]ilter" -msgstr "" +msgstr "[F]iltro" #: advanced_inv.cpp msgid "[down / page down] next" -msgstr "" +msgstr "giu' / pagina giu'] prossimo" #: advanced_inv.cpp msgid "[e]xamine item, [s]ort display, toggle auto[p]ickup, [q]uit." msgstr "" +"[e]samina l'oggetto, [s]istema il display, attiva/disattiva [r]accolta " +"automatica, [e]sci" #: advanced_inv.cpp msgid "[up / page up] previous" -msgstr "" +msgstr "[su / pagina su'] precedente" #: advanced_inv.cpp msgid "ammo" @@ -761,6 +771,8 @@ msgstr "armi da fuoco" #: advanced_inv.cpp msgid "hjkl or arrow keys to move cursor, [m]ove item between panes," msgstr "" +"hjkl oppure le freccie per muovere il cursore, [m]uovi l'oggetto tra i " +"pannelli" #: advanced_inv.cpp msgid "mods" @@ -780,7 +792,7 @@ msgstr "altro" #: advanced_inv.cpp msgid "same square!" -msgstr "" +msgstr "Stessa casella!" #. ~ advanced inventory; "source", "weight", "volume"; 14 letters #: advanced_inv.cpp @@ -805,7 +817,7 @@ msgstr "peso" #: advanced_inv.h msgid "Initializing..." -msgstr "" +msgstr "Inizializzazione..." #: artifact.cpp #, c-format @@ -813,6 +825,8 @@ msgid "" "\n" "It is %s" msgstr "" +"\n" +"E' %s" #: artifact.cpp #, c-format @@ -820,271 +834,273 @@ msgid "" "\n" "They are %s" msgstr "" +"\n" +"Loro sono %s" #: artifact.cpp #, c-format msgid "%s Aeons" -msgstr "" +msgstr "%s Eoni" #: artifact.cpp #, c-format msgid "%s Beasts" -msgstr "" +msgstr "%s Bestiale" #: artifact.cpp #, c-format msgid "%s Death" -msgstr "" +msgstr "%s Morti" #: artifact.cpp #, c-format msgid "%s Dreams" -msgstr "" +msgstr "%s Sogni" #: artifact.cpp #, c-format msgid "%s Evil" -msgstr "" +msgstr "%s Malvagio" #: artifact.cpp #, c-format msgid "%s Graves" -msgstr "" +msgstr "%s Tombe" #: artifact.cpp #, c-format msgid "%s Horror" -msgstr "" +msgstr "%s Orrori" #: artifact.cpp #, c-format msgid "%s Horrors" -msgstr "" +msgstr "%s Orrori" #: artifact.cpp #, c-format msgid "%s Ichor" -msgstr "" +msgstr "%s Sangue divino" #: artifact.cpp #, c-format msgid "%s Illusion" -msgstr "" +msgstr "%s Illusione" #: artifact.cpp #, c-format msgid "%s Justice" -msgstr "" +msgstr "%s Giustizia" #: artifact.cpp #, c-format msgid "%s Miasma" -msgstr "" +msgstr "%s miasma" #: artifact.cpp #, c-format msgid "%s Shade" -msgstr "" +msgstr "%s Tonalità" #: artifact.cpp #, c-format msgid "%s Shadows" -msgstr "" +msgstr "%s Ombre" #: artifact.cpp #, c-format msgid "%s Suffering" -msgstr "" +msgstr "%s Sofferenza" #: artifact.cpp #, c-format msgid "%s Technique" -msgstr "" +msgstr "%s tecnica" #: artifact.cpp #, c-format msgid "This %1$s %2$s." -msgstr "" +msgstr "%1$s %2$s" #: artifact.cpp #, c-format msgid "%1$s %2$s" -msgstr "" +msgstr "%1$s %2$s" #: artifact.cpp #, c-format msgid "%1$s of %2$s" -msgstr "" +msgstr "%1$s di %2$s" #: artifact.cpp msgid "A glow of light forms around you." -msgstr "" +msgstr "Un' aura di luce si forma intorno a te." #: artifact.cpp msgid "Ancient" -msgstr "" +msgstr "Antico" #: artifact.cpp msgid "Bladed" -msgstr "" +msgstr "Munito di lama" #: artifact.cpp msgid "Bloody" -msgstr "" +msgstr "Sanguinoso" #: artifact.cpp msgid "Boots" -msgstr "" +msgstr "Scarponi" #: artifact.cpp msgid "Coat" -msgstr "" +msgstr "Mantello" #: artifact.cpp msgid "Cube" -msgstr "" +msgstr "Cubo" #: artifact.cpp msgid "Cursed" -msgstr "" +msgstr "Maledetto" #: artifact.cpp msgid "Cyclopean" -msgstr "" +msgstr "Ciclopico" #: artifact.cpp msgid "Dagger" -msgstr "" +msgstr "Pugnale" #: artifact.cpp #, c-format msgid "Dex %s%d! " -msgstr "" +msgstr "Des %s%d! " #: artifact.cpp msgid "Edged" -msgstr "" +msgstr "Affilato" #: artifact.cpp msgid "Eldritch" -msgstr "" +msgstr "Spettrale" #: artifact.cpp msgid "Forbidden" -msgstr "" +msgstr "Proibito" #: artifact.cpp msgid "Forgotten" -msgstr "" +msgstr "Dimenticato" #: artifact.cpp msgid "Frigid" -msgstr "" +msgstr "Glaciale" #: artifact.cpp msgid "Fungal" -msgstr "" +msgstr "Funginoso" #: artifact.cpp msgid "Gelatinous" -msgstr "" +msgstr "Gelatinoso" #: artifact.cpp msgid "Gloves" -msgstr "" +msgstr "Guanti" #: artifact.cpp lang/json/json_mutations.py msgid "Grotesque" -msgstr "" +msgstr "Grottesco" #: artifact.cpp msgid "Harp" -msgstr "" +msgstr "Arpa" #: artifact.cpp msgid "Heavy" -msgstr "" +msgstr "Pesante" #: artifact.cpp msgid "Helm" -msgstr "" +msgstr "Elmo" #: artifact.cpp msgid "Hideous" -msgstr "" +msgstr "Mostruoso" #: artifact.cpp #, c-format msgid "Int %s%d! " -msgstr "" +msgstr "Int %s%d! " #: artifact.cpp msgid "Knobbed" -msgstr "" +msgstr "Una protuberanza tondeggiante" #: artifact.cpp msgid "Mask" -msgstr "" +msgstr "Maschera" #: artifact.cpp #, c-format msgid "Per %s%d! " -msgstr "" +msgstr "Per %s%d! " #: artifact.cpp msgid "Repellent" -msgstr "" +msgstr "Ripugnante" #: artifact.cpp msgid "Ring" -msgstr "" +msgstr "Anello" #: artifact.cpp msgid "Robe" -msgstr "" +msgstr "Tunica" #: artifact.cpp msgid "Shadowy" -msgstr "" +msgstr "Indistinto" #: artifact.cpp msgid "Shattered" -msgstr "" +msgstr "Frantumato" #: artifact.cpp msgid "Silent" -msgstr "" +msgstr "Silente" #: artifact.cpp msgid "Sleeping" -msgstr "" +msgstr "Dormiente" #: artifact.cpp #, c-format msgid "Speed %s%d! " -msgstr "" +msgstr "Velocita %s%d! " #: artifact.cpp msgid "Spiked" -msgstr "" +msgstr "Appuntito" #: artifact.cpp msgid "Staff" -msgstr "" +msgstr "Bastone" #: artifact.cpp #, c-format msgid "Str %s%d! " -msgstr "" +msgstr "For %s%d! " #: artifact.cpp msgid "Sword" -msgstr "" +msgstr "Spada" #: artifact.cpp #, c-format msgid "The %s emits some smoke." -msgstr "" +msgstr "L' %s emette del fumo." #: artifact.cpp #, c-format @@ -1092,6 +1108,8 @@ msgid "" "This is the %s.\n" "It is the only one of its kind." msgstr "" +"Questo è il %s.\n" +"E' l'unico del suo tipo." #: artifact.cpp #, c-format @@ -1100,6 +1118,9 @@ msgid "" "It is the only one of its kind.\n" "It may have unknown powers; use 'a' to activate them." msgstr "" +"Questo è il %s.\n" +"E' l'unico del suo tipo.\n" +"Potrebbe avere poteri sconosciuti; usa 'a' per attivarli." #: artifact.cpp #, c-format @@ -1107,436 +1128,442 @@ msgid "" "This is the %s.\n" "They are the only ones of their kind." msgstr "" +"Questo è il %s\n" +"Sono gli unici di questo tipo." #: artifact.cpp msgid "Undying" -msgstr "" +msgstr "Eterno" #: artifact.cpp npc.cpp msgid "Unknown" -msgstr "" +msgstr "Sconosciuto" #: artifact.cpp msgid "Unspeakable" -msgstr "" +msgstr "Indicibile" #: artifact.cpp msgid "You can see through everything!" -msgstr "" +msgstr "Puoi vedere attraverso tutto!" #: artifact.cpp msgid "You can see through walls!" -msgstr "" +msgstr "Puoi vedere attraverso i muri!" #: artifact.cpp msgid "You fade into invisibility!" -msgstr "" +msgstr "Scompari nell'invisbilità!" #: artifact.cpp msgid "You feel a force pulling you inwards." -msgstr "" +msgstr "Senti una forza che ti spinge verso l'interno." #: artifact.cpp msgid "You feel a tickle of insanity." -msgstr "" +msgstr "Provi un momento di follia." #: artifact.cpp msgid "You feel an evil presence..." -msgstr "" +msgstr "Senti una presenza maligna..." #: artifact.cpp msgid "You feel an otherworldly attention upon you..." -msgstr "" +msgstr "Ti senti controllato da una presenza ultraterrena." #: artifact.cpp msgid "You feel hungry." -msgstr "" +msgstr "Ti senti affamato." #: artifact.cpp msgid "You feel insulated." -msgstr "" +msgstr "Ti senti isolato." #: artifact.cpp msgid "You feel storms coming." -msgstr "" +msgstr "Senti l'avvicinarsi di una tempesta." #: artifact.cpp msgid "You feel thirsty." -msgstr "" +msgstr "Ti senti assetato." #: artifact.cpp msgid "You feel your body decaying." -msgstr "" +msgstr "Senti il tuo corpo decadere." #: artifact.cpp msgid "You feel your genetic makeup degrading." -msgstr "" +msgstr "Senti la tua costituzione genetica degradarsi." #: artifact.cpp #, c-format msgid "You have an urge to wear the %s." -msgstr "" +msgstr "Senti il bisogno di indossare %s." #: artifact.cpp #, c-format msgid "You have an urge to wield the %s." -msgstr "" +msgstr "Senti il bisogno di impugnare %s." #: artifact.cpp msgid "You hear a rattling noise coming from inside yourself." -msgstr "" +msgstr "senti un crepitio proveniente da dentro di te." #: artifact.cpp player.cpp msgid "You suddenly feel sharp pain for no reason." -msgstr "" +msgstr "Senti improvvisamente un dolore acuto, senza apparente ragione." #: artifact.cpp msgid "Your back feels strengthened." -msgstr "" +msgstr "La tua schiena è piu forte." #: artifact.cpp msgid "Your mental state feels protected." -msgstr "" +msgstr "Senti la tua psiche protetta." #: artifact.cpp msgid "Your skin feels slithery." -msgstr "" +msgstr "Senti la tua pelle sdrucciolevole." #: artifact.cpp msgid "Your skin prickles with radiation." -msgstr "" +msgstr "Le radiazioni generano un pizzicore sulla tua pelle." #: artifact.cpp msgid "Your steps stop making noise." -msgstr "" +msgstr "I tuoi passi non fanno piu rumore." #: artifact.cpp msgid "beads" -msgstr "" +msgstr "perle" #: artifact.cpp msgid "breathing" -msgstr "" +msgstr "respira" #: artifact.cpp msgid "covered in pockets." -msgstr "" +msgstr "coperto di tasche" #: artifact.cpp msgid "crackling" -msgstr "" +msgstr "crepita" #: artifact.cpp msgid "crescent" -msgstr "" +msgstr "mezzaluna" #: artifact.cpp msgid "crescent-shaped stone" -msgstr "" +msgstr "pietra forma di mezzaluna" #: artifact.cpp msgid "crystal" -msgstr "" +msgstr "cristallo" #: artifact.cpp msgid "dead" -msgstr "" +msgstr "morto" #: artifact.cpp msgid "disc" -msgstr "" +msgstr "disco" #: artifact.cpp msgid "disgustingly furry." -msgstr "" +msgstr "disgustosamente peloso" #: artifact.cpp msgid "electric" -msgstr "" +msgstr "elettrico" #: artifact.cpp msgid "engraved" -msgstr "" +msgstr "inciso" #: artifact.cpp msgid "extremely bulky." -msgstr "" +msgstr "molto voluminoso." #: artifact.cpp msgid "feels slimy" -msgstr "" +msgstr "lo senti viscido" #: artifact.cpp msgid "fractal" -msgstr "" +msgstr "frattale" #: artifact.cpp msgid "glittering" -msgstr "" +msgstr "scintillante" #: artifact.cpp msgid "glitters faintly under direct light" -msgstr "" +msgstr "scintilla debolmente sotto luce diretta" #: artifact.cpp msgid "glowing" -msgstr "" +msgstr "emana luce" #: artifact.cpp msgid "glows faintly" -msgstr "" +msgstr "emana una debole luce" #: artifact.cpp msgid "" "has a self-similar pattern which repeats until it is too small for you to see" msgstr "" +"ha una trama simile che si ripete dentro se stessa finchè non diventa " +"invisibile a occhio nudo" #: artifact.cpp msgid "has a surface reminiscent of reptile scales" -msgstr "" +msgstr "ha una superfice che ricorda le scaglie di un rettile" #: artifact.cpp msgid "hollow tube" -msgstr "" +msgstr "tubo cavo" #: artifact.cpp msgid "hollow, transparent cube" -msgstr "" +msgstr "cubo trasparente cavo" #: artifact.cpp msgid "humming" -msgstr "" +msgstr "ronzante" #: artifact.cpp msgid "hums very quietly" -msgstr "" +msgstr "ronza a malapena" #: artifact.cpp msgid "is constantly wriggling" -msgstr "" +msgstr "si sta contorcendo continuamente" #: artifact.cpp msgid "is covered with odd etchings" -msgstr "" +msgstr "è coperto con strane incisioni" #: artifact.cpp msgid "is icy cold to the touch" -msgstr "" +msgstr "e' estremamente freddo al tocco" #: artifact.cpp msgid "is warm to the touch" -msgstr "" +msgstr "e' caldo al tocco" #: artifact.cpp msgid "itchy" -msgstr "" +msgstr "pruriginoso" #: artifact.cpp msgid "jelly" -msgstr "" +msgstr "gelatina" #: artifact.cpp msgid "knot" -msgstr "" +msgstr "nodo" #: artifact.cpp msgid "lamp" -msgstr "" +msgstr "lampada" #: artifact.cpp msgid "leather-padded." -msgstr "" +msgstr "imbottito di belle" #: artifact.cpp msgid "makes a rattling sound when moved" -msgstr "" +msgstr "emette un tintinnio quando viene mosso" #: artifact.cpp msgid "makes very faint whispering sounds" -msgstr "" +msgstr "emana dei sussurri molto deboli" #: artifact.cpp msgid "makes your skin itch slightly when it is close" -msgstr "" +msgstr "provoca prurito sulla tua pelle quando è vicino ad essa" #: artifact.cpp msgid "malleable blob" -msgstr "" +msgstr "grumo malleabile" #: artifact.cpp msgid "moving" -msgstr "" +msgstr "in movimento" #: artifact.cpp msgid "napkin" -msgstr "" +msgstr "tovagliolo" #: artifact.cpp msgid "occasionally makes a soft crackling sound" -msgstr "" +msgstr "occasionalmente emette un leggero crepitio" #: artifact.cpp msgid "pin" -msgstr "" +msgstr "perno" #: artifact.cpp msgid "plated in iron." -msgstr "" +msgstr "con piastre di ferro" #: artifact.cpp msgid "pointed rod" -msgstr "" +msgstr "asta appuntita" #: artifact.cpp msgid "pyramid" -msgstr "" +msgstr "piramide" #: artifact.cpp msgid "rattling" -msgstr "" +msgstr "tintinna" #: artifact.cpp msgid "regular tetrahedron" -msgstr "" +msgstr "tetraedro regolare" #: artifact.cpp msgid "rod" -msgstr "" +msgstr "asta" #: artifact.cpp msgid "scaled" -msgstr "" +msgstr "squamato" #: artifact.cpp msgid "shifts from side to side slowly" -msgstr "" +msgstr "si sposta da un lato ad un'altro lentamente" #: artifact.cpp msgid "shrinks and grows very slightly with a regular pulse, as if breathing" msgstr "" +"si dilata e si restringe di poco con una pulsazione regolare, come se " +"respirasse" #: artifact.cpp msgid "slimy" -msgstr "" +msgstr "viscido" #: artifact.cpp msgid "smooth disc" -msgstr "" +msgstr "disco liscio" #: artifact.cpp msgid "smooth sphere" -msgstr "" +msgstr "sfera liscia" #: artifact.cpp msgid "snake" -msgstr "" +msgstr "serpente" #: artifact.cpp msgid "sphere" -msgstr "" +msgstr "sfera" #: artifact.cpp msgid "spiked sphere" -msgstr "" +msgstr "sfera con punte" #: artifact.cpp msgid "spiral" -msgstr "" +msgstr "spirale" #: artifact.cpp msgid "spiraling rod" -msgstr "" +msgstr "asta a spirale" #: artifact.cpp msgid "string of beads" -msgstr "" +msgstr "filo con perle" #: artifact.cpp msgid "tapered rod" -msgstr "" +msgstr "asta con nastro" #: artifact.cpp msgid "teardrop" -msgstr "" +msgstr "lacrima" #: artifact.cpp msgid "teardrop-shaped stone" -msgstr "" +msgstr "roccia a forma di lacrima" #: artifact.cpp #, c-format msgid "the %s Abyss" -msgstr "" +msgstr "il %s Abisso" #: artifact.cpp #, c-format msgid "the %s City" -msgstr "" +msgstr "la %s Citta'" #: artifact.cpp #, c-format msgid "the %s Monolith" -msgstr "" +msgstr "il %s Monolito" #: artifact.cpp #, c-format msgid "the %s Necropolis" -msgstr "" +msgstr "la %s Necropoli" #: artifact.cpp msgid "translucent crystal" -msgstr "" +msgstr "cristallo traslucente" #: artifact.cpp msgid "tube" -msgstr "" +msgstr "tubo" #: artifact.cpp msgid "twisted, knotted cord" -msgstr "" +msgstr "corda annodata e annodata" #: artifact.cpp msgid "urchin" -msgstr "" +msgstr "porcospino" #: artifact.cpp msgid "very thin and light." -msgstr "" +msgstr "molto sottile e leggero" #: artifact.cpp msgid "very thin sheet" -msgstr "" +msgstr "lenzuolo molto fine" #: artifact.cpp msgid "very weakly shocks you when touched" -msgstr "" +msgstr "lancia una leggera scarica elettrica quando viene toccato" #: artifact.cpp msgid "warm" -msgstr "" +msgstr "caldo" #: artifact.cpp msgid "whispering" -msgstr "" +msgstr "sussurra" #: artifact.cpp msgid "winding, flexible rod" -msgstr "" +msgstr "asta flessibile" #: artifact.cpp msgid "wriggling" -msgstr "" +msgstr "contorcendo" #: auto_pickup.cpp msgid " AUTO PICKUP MANAGER " -msgstr "" +msgstr " GESTORE RACCOGLIMENTO AUTOMATICO " #: auto_pickup.cpp #, c-format msgid "%1$d item matches: %2$s" msgid_plural "%1$d items match: %2$s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%1$d oggetti combaciano: %2$s" +msgstr[1] "%1$d oggetto combacia: %2$s" #: auto_pickup.cpp msgid "" @@ -1548,301 +1575,310 @@ msgid "" "*avy fle*fi*arrow multible * are allowed\n" "heAVY*woOD*arrOW case insesitive search\n" msgstr "" +"* è usato come jolly. Qualche esempio:\n" +"\n" +"freccia di legno corrisponde al nome esatto\n" +"freccia di le* corrispondera agli oggetti che iniziano con freccia di le\n" +"*egno corrispondera a tutti gli oggetti che finiscono con egno\n" +"e' permesso l'utilizzo di piu jolly per parola\n" +"freCCIA*dI*leGNO*pesANTE corrisponde ad una ricerca senza riconoscimento di " +"maiuscole\n" #: auto_pickup.cpp msgid "<+-> Move up/down" -msgstr "" +msgstr "<+-> Muovi su/giu" #: auto_pickup.cpp msgid "dd" -msgstr "" +msgstr "ggiungi" #: auto_pickup.cpp msgid "opy" -msgstr "" +msgstr "opia" #: auto_pickup.cpp msgid "isable" -msgstr "" +msgstr "isabilita" #: auto_pickup.cpp msgid "nable" -msgstr "" +msgstr "ailita" #: auto_pickup.cpp msgid "-Edit" -msgstr "" +msgstr "-Modifica" #: auto_pickup.cpp msgid "E" -msgstr "" +msgstr "E" #: auto_pickup.cpp msgid "I" -msgstr "" +msgstr "I" #: auto_pickup.cpp msgid "ove" -msgstr "" +msgstr "uovi" #: auto_pickup.cpp msgid "emove" -msgstr "" +msgstr "imuovi" #: auto_pickup.cpp msgid "est" -msgstr "" +msgstr "esta" #: auto_pickup.cpp msgid "-Switch Page" -msgstr "" +msgstr "-Cambia Pagina" #: auto_pickup.cpp msgid "" -msgstr "" +msgstr "" #: auto_pickup.cpp msgid "I/E" -msgstr "" +msgstr "I/E" #: auto_pickup.cpp msgid "Pickup Rule:" -msgstr "" +msgstr "Regole di raccolta:" #: auto_pickup.cpp msgid "Please load a character first to use this page!" -msgstr "" +msgstr "Per favore carica un personaggio prima di usare questa pagina!" #: auto_pickup.cpp msgid "Rules" -msgstr "" +msgstr "Regole" #: auto_pickup.cpp help.cpp options.cpp msgid "Save changes?" -msgstr "" +msgstr "Salvare i cambiamenti?" #: auto_pickup.cpp msgid "Under construction!" -msgstr "" +msgstr "In costruzione" #: auto_pickup.cpp msgid "Won't display damaged, fits and can/bottle items" msgstr "" +"Non saranno mostrati oggetti danneggiati, che calzano e contenitori di fluidi" #: auto_pickup.cpp msgid "[]" -msgstr "" +msgstr "[]" #: auto_pickup.cpp msgid "[]" -msgstr "" +msgstr "[]" #: bionics.cpp #, c-format msgid "%s - %d PU / %d trns" -msgstr "" +msgstr "%s - %d PU / %d turni" #: bionics.cpp #, c-format msgid "%s - ON" -msgstr "" +msgstr "%s - acceso" #: bionics.cpp #, c-format msgid "%s powered off." -msgstr "" +msgstr "%s senza corrente." #: bionics.cpp msgid "Activate your bio lockpick where?" -msgstr "" +msgstr "Dove vuoi usare il tuo sistema di scassinamento bionico?" #: bionics.cpp msgid "Activating. Press '!' to examine your implants." -msgstr "" +msgstr "Attivazione. Premi '!' per esaminare i tuoi impianti." #: bionics.cpp msgid "Active:" -msgstr "" +msgstr "Attivo:" #: bionics.cpp msgid "Adrenaline Spike" -msgstr "" +msgstr "Picco di adrenalina" #: bionics.cpp msgid "Alcohol" -msgstr "" +msgstr "Alcolici" #: bionics.cpp msgid "All of your existing bionics are lost!" -msgstr "" +msgstr "Tutte le tue estensioni biomeccaniche sono perdute!" #: bionics.cpp msgid "Antihistamines" -msgstr "" +msgstr "Antistaminici" #: bionics.cpp msgid "Artificial night generator active!" -msgstr "" +msgstr "Generatore notturno artificiale in funzione!" #: bionics.cpp msgid "BIONICS -" -msgstr "" +msgstr "Impianti biomeccanici -" #: bionics.cpp msgid "Create an EMP where?" -msgstr "" +msgstr "Dove si vuole creare una scarica EMP?" #: bionics.cpp msgid "Drink directly from the condensor?" -msgstr "" +msgstr "Bevi direttamente dal condensatore?" #: bionics.cpp iexamine.cpp msgid "Drink from your hands?" -msgstr "" +msgstr "Bevi dalle tue mani?" #: bionics.cpp msgid "Examining. Press '!' to activate your implants." -msgstr "" +msgstr "Esaminazione. Premi '!' per attivare i tuoi impianti." #: bionics.cpp #, c-format msgid "Extract water from the %s" -msgstr "" +msgstr "Estrai acqua da %s" #: bionics.cpp #, c-format msgid "Failed to install bionic: %s." -msgstr "" +msgstr "Installazione di %s fallita." #: bionics.cpp msgid "Fungal Parasite" -msgstr "" +msgstr "Parassita Fungale" #: bionics.cpp msgid "Heavy Painkiller" -msgstr "" +msgstr "Anti-dolorifici Potenti" #: bionics.cpp #, c-format msgid "Increased storage capacity by %i" -msgstr "" +msgstr "Capacita' di stoccaggio aumentata del %i" #: bionics.cpp msgid "Insect Parasite" -msgstr "" +msgstr "Insetto Parassita" #: bionics.cpp #, c-format msgid "Installed bad bionic: %s." -msgstr "" +msgstr "Estensione biomeccanica installata malamente: %s." #: bionics.cpp #, c-format msgid "Installed bionic: %s." -msgstr "" +msgstr "Installato l'estensione biomeccanica: %s" #: bionics.cpp msgid "Intoxicant: Other" -msgstr "" +msgstr "Intossicante: altro" #: bionics.cpp msgid "Iodine" -msgstr "" +msgstr "Iodio" #: bionics.cpp msgid "Irradiated" -msgstr "" +msgstr "Irradiato" #: bionics.cpp msgid "It really hurts!" -msgstr "" +msgstr "Fa vermanete male!" #: bionics.cpp #, c-format msgid "Lost %d units of power capacity." -msgstr "" +msgstr "Hai perso %d unita' di potenza!" #: bionics.cpp msgid "Magic Mushroom" -msgstr "" +msgstr "Fungo Magico" #: bionics.cpp msgid "Methamphetamines" -msgstr "" +msgstr "Metanfetamine" #: bionics.cpp msgid "Minor Painkiller" -msgstr "" +msgstr "Anti-dolorifici leggeri" #: bionics.cpp msgid "Moderate Painkiller" -msgstr "" +msgstr "Anti-dolorifici moderati" #: bionics.cpp msgid "Nicotine" -msgstr "" +msgstr "Nicotina" #: bionics.cpp msgid "No effects." -msgstr "" +msgstr "Nessun effetto." #: bionics.cpp msgid "Passive:" -msgstr "" +msgstr "Passivo:" #: bionics.cpp msgid "Poison" -msgstr "" +msgstr "Veleno" #: bionics.cpp #, c-format msgid "Power: %d/%d" -msgstr "" +msgstr "Potenza: %d/%d" #: bionics.cpp lang/json/json_items.py msgid "Prozac" -msgstr "" +msgstr "Prozac" #: bionics.cpp msgid "Slow-Release Painkiller" -msgstr "" +msgstr "Anti-dolorifici a rilascio graduale" #: bionics.cpp msgid "Some of your existing bionics are lost!" -msgstr "" +msgstr "Alcune delle tue estensioni biomeccaniche vengono perdute!" #: bionics.cpp msgid "Start a fire where?" -msgstr "" +msgstr "Dove vuoi accendere un fuoco?" #: bionics.cpp #, c-format msgid "Successfully installed %s." -msgstr "" +msgstr "Installato %s con successo." #: bionics.cpp msgid "THC Intoxication" -msgstr "" +msgstr "Intossicazione da THC" #: bionics.cpp msgid "The installation fails without incident." -msgstr "" +msgstr "L'installazione fallisce ma senza incidenti." #: bionics.cpp msgid "The installation fails." -msgstr "" +msgstr "L'installazione fallisce." #: bionics.cpp msgid "The installation is a failure." -msgstr "" +msgstr "L'installazione è un fallimento." #: bionics.cpp msgid "The installation is faulty!" -msgstr "" +msgstr "L'installazione risulta difettosa!" #: bionics.cpp msgid "VRRRRMP!" -msgstr "" +msgstr "VRRRRMP!" #: bionics.cpp #, c-format @@ -1850,292 +1886,297 @@ msgid "" "WARNING: %i percent chance of genetic damage, blood loss, or damage to " "existing bionics! Install anyway?" msgstr "" +"ATTENZIONE: %i percento di probabilita di danno genetico, perdita di sangue " +"o di danno ad estensioni biomeccaniche esistenti! Installare comunque?" #: bionics.cpp lang/json/json_items.py msgid "Xanax" -msgstr "" +msgstr "Xanax" #: bionics.cpp msgid "You activate your integrated flashbang generator!" -msgstr "" +msgstr "Attivi il tuo generatore integrato di abbaglianti" #: bionics.cpp #, c-format msgid "" "You can not activate %s! To read a description of %s, press '!', then '%c'." msgstr "" +"Non puoi attivare %s! Per leggere la descrizione di %s, premi '!', poi '%c'." #: bionics.cpp msgid "You can't light a fire there." -msgstr "" +msgstr "Non puoi accendere un fuoco li." #: bionics.cpp #, c-format msgid "You can't unlock that %s." -msgstr "" +msgstr "Non puoi sbloccare quella %s." #: bionics.cpp #, c-format msgid "You cannot power your %s" -msgstr "" +msgstr "Non puoi dare potenza a %s" #: bionics.cpp msgid "You do damage to your genetics, causing mutation!" -msgstr "" +msgstr "Danneggi la tua struttura genetica, causando una mutazione!" #: bionics.cpp msgid "You flub the installation." -msgstr "" +msgstr "Fai un pasticcio con l'installazione." #: bionics.cpp msgid "You have already installed this bionic." -msgstr "" +msgstr "Hai già installato quel tipo di estensione biomeccanica." #: bionics.cpp msgid "You lose power capacity!" -msgstr "" +msgstr "perdi parte della tue unita' potenza!" #: bionics.cpp msgid "You mess up the installation." -msgstr "" +msgstr "Il riusultato dell'installazione e' un casino." #: bionics.cpp msgid "You screw up the installation." -msgstr "" +msgstr "Fallisci gravemente l'installazione" #: bionics.cpp msgid "You unleash a powerful shockwave!" -msgstr "" +msgstr "Rilasci un'onda d'urto potente" #: bionics.cpp msgid "You unlock the door." -msgstr "" +msgstr "Lap orta si sblocca." #: bionics.cpp msgid "You withdraw your claws." -msgstr "" +msgstr "Ritrai i tuoi artigli." #: bionics.cpp #, c-format msgid "Your %s powers down." -msgstr "" +msgstr "Il tuo %s perde potenza." #: bionics.cpp msgid "Your body is damaged!" -msgstr "" +msgstr "Il tuo corpo e' danneggiato!" #: bionics.cpp msgid "Your claws extend!" -msgstr "" +msgstr "I tuoi artigli si allungano" #: bionics.cpp #, c-format msgid "Your claws extend, forcing you to drop your %s." -msgstr "" +msgstr "I tuoi artigli si allungano, costringendoti a gettare %s." #: bionics.cpp msgid "Your muscles hiss as hydraulic strength fills them!" msgstr "" +"I tuoi muscoli producono un fischio e le estensioni idrauliche ti donano " +"nuva forza nelle braccia!" #: bionics.cpp msgid "Your muscles tear with the strain." -msgstr "" +msgstr "I tuoi muscoli si strappano a causa dello sforzo." #: bionics.cpp msgid "Your speed suddenly increases!" -msgstr "" +msgstr "La tua velocita' aumenta improvvisamente!" #: bodypart.cpp msgid "Dodging and melee is hampered." -msgstr "" +msgstr "Evasione e combattimento corpo-a-corpo sono ostacolati." #: bodypart.cpp msgid "It's inflammed." -msgstr "" +msgstr "E' infiammato." #: bodypart.cpp msgid "Manual tasks are slowed." -msgstr "" +msgstr "Operazioni manuali sno rallentate." #: bodypart.cpp msgid "Melee and ranged combat is hampered." -msgstr "" +msgstr "Combattimento corpo-a-corpo e a distanza sono ostacolati." #: bodypart.cpp msgid "Ranged combat is hampered." -msgstr "" +msgstr "Il combattimento a distanza è compromesso." #: bodypart.cpp msgid "Running and swimming are slowed." -msgstr "" +msgstr "Corsa e nuoto sono rallentati." #: bodypart.cpp msgid "Running is slowed." -msgstr "" +msgstr "La corsa sta venendo rallentata." #: bodypart.cpp msgid "appendix" -msgstr "" +msgstr "appendice" #: bodypart.cpp msgid "arms" -msgstr "" +msgstr "braccia" #: bodypart.cpp msgid "eyes" -msgstr "" +msgstr "occhi" #: bodypart.cpp msgid "feet" -msgstr "" +msgstr "piedi" #: bodypart.cpp msgid "hands" -msgstr "" +msgstr "mani" #: bodypart.cpp msgid "head" -msgstr "" +msgstr "testa" #: bodypart.cpp msgid "left arm" -msgstr "" +msgstr "braccio sinistro" #: bodypart.cpp msgid "left foot" -msgstr "" +msgstr "piede sinistro" #: bodypart.cpp msgid "left hand" -msgstr "" +msgstr "mano sinistra" #: bodypart.cpp msgid "left leg" -msgstr "" +msgstr "gamba sinistra" #: bodypart.cpp msgid "legs" -msgstr "" +msgstr "gambe" #: bodypart.cpp msgid "mouth" -msgstr "" +msgstr "bocca" #: bodypart.cpp msgid "right arm" -msgstr "" +msgstr "braccio destro" #: bodypart.cpp msgid "right foot" -msgstr "" +msgstr "piede destro" #: bodypart.cpp msgid "right hand" -msgstr "" +msgstr "mano destra" #: bodypart.cpp msgid "right leg" -msgstr "" +msgstr "gamba destra" #: bodypart.cpp msgid "torso" -msgstr "" +msgstr "tronco" #. ~ hour:minute (24hr time display) #: calendar.cpp #, c-format msgid "%02d:%02d" -msgstr "" +msgstr "%02d:%02d" #: calendar.cpp #, c-format msgid "%d AM" -msgstr "" +msgstr "%d AM" #: calendar.cpp #, c-format msgid "%d PM" -msgstr "" +msgstr "%d PM" #: calendar.cpp #, c-format msgid "%d day" msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d giorno" +msgstr[1] "%d giorni" #: calendar.cpp #, c-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d ora" +msgstr[1] "%d ore" #: calendar.cpp #, c-format msgid "%d minute" msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d minuto" +msgstr[1] "%d minuti" #: calendar.cpp #, c-format msgid "%d season" msgid_plural "%d seasons" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d stagione" +msgstr[1] "%d stagioni" #: calendar.cpp #, c-format msgid "%d turn" msgid_plural "%d turns" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d turno" +msgstr[1] "%d turni" #: calendar.cpp #, c-format msgid "%d year" msgid_plural "%d years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d anno" +msgstr[1] "%d anni" #: calendar.cpp #, c-format msgid "%d:%02d AM" -msgstr "" +msgstr "%d:%02d AM" #: calendar.cpp #, c-format msgid "%d:%02d PM" -msgstr "" +msgstr "%d:%02d PM" #: calendar.cpp msgid "Friday" -msgstr "" +msgstr "Venerdi" #: calendar.cpp msgid "Monday" -msgstr "" +msgstr "Lunedi" #: calendar.cpp msgid "Saturday" -msgstr "" +msgstr "Sabato" #: calendar.cpp msgid "Sunday" -msgstr "" +msgstr "Domenica" #: calendar.cpp msgid "Thursday" -msgstr "" +msgstr "Giovedi" #: calendar.cpp msgid "Tuesday" -msgstr "" +msgstr "Martedi" #: calendar.cpp msgid "Wendsday" -msgstr "" +msgstr "Mercoledi" #: computer.cpp msgid "" @@ -2161,6 +2202,29 @@ msgid "" " incompetencies will result in charges of Federal Corruption\n" " and potentially Treason.\n" msgstr "" +"\n" +" Oggetto: EPA: Rapporto su tutte le potenziali breccie di contenimento " +"373643\n" +" Destinatario: tutto il personale SRCF\n" +" Mittente: Robert Shane, Direttore dell' EPA\n" +" \n" +" Tutte quante le discariche di rifiuti tossici o di sarcofagi nucleari\n" +" devono inviare tre campioni degli elementi stoccati all'indirizzo\n" +" seguente:\n" +" \n" +" Laboratorio Bioterroristico del CDC \n" +" Edificio 10\n" +" Corporate Square Boulevard\n" +" Atlanta, GA 30329\n" +" \n" +" EPA Laboratorio Regionale 8\n" +" 16194 W. 45th\n" +" Drive Golden, Colorado 0403\n" +" \n" +" I campioni devono essere maneggiati accuratamente, qualsiasi tentativo\n" +" di nascondere prove di inefficenza risultera' in una denuncia per " +"Corruzione\n" +" Federale e Minaccia potenziale.\n" #: computer.cpp msgid "" @@ -2175,6 +2239,16 @@ msgid "" " medical evaluation and security debriefing.\n" " " msgstr "" +"\n" +" Oggetto: Nota alla sicurezza\n" +" Destinatario: Tutto il personale SRCF\n" +" Mittente: Constantine Dvorak, Sottosegretario alla Sicurezza Nucleare\n" +" \n" +" Tutte le strutture compromesse rimarranno bloccate fino\n" +" a nuovo ordine. Chiunque abbia visto o sia entrato in contatto diretto\n" +" con le creature deve fare rapporto immediato all'ufficio centrale\n" +" per una completa ispezione medica e un debriefing sulla sicurezza.\n" +" " #: computer.cpp msgid "" @@ -2191,6 +2265,21 @@ msgid "" " and highly toxic. Take full precautions!\n" " \n" msgstr "" +"\n" +" Oggetto: Nota alla Sicurezza\n" +" Destinatario: Tutto il personale SRCF\n" +" Mittente: Constantine Dvorak, Sottosegretario alla Sicurezza Nucleare\n" +" \n" +" Vorrei ricordare a tutto il personale: Non aprite o esaminate\n" +" contenitori al di sopra del vostro livello di accesso. Se avete bisogno di " +"chiarmienti\n" +" riguardo ai protocolli di sicurezza o riguardo alle procedure di invio, " +"per favore\n" +" contattare l'amministratore SRCF oppure l'ufficiale militare locale.\n" +" Nel dubbio, dichiarare tutti i contenitori come Rischio Biologico di " +"classe-A\n" +" ed estremamente tossici. Prendete tutte le precauzioni possibili!\n" +" \n" #: computer.cpp msgid "" @@ -2208,6 +2297,19 @@ msgid "" " at once.\n" " " msgstr "" +"\n" +" Oggetto: Nota alla Sicurezza\n" +" Destinatario: Tutto il personale SRCF\n" +" Mittente: Constantine Dvorak, Sottosegretario alla Sicurezza Nucleare\n" +" \n" +" Da oggi in poi i rifiuti medici non devono essere immagazzinati assieme\n" +" a materiali nucleari. Tutti i contenitori devono essere\n" +" riposizionati secondo la nuova normativa. Se nel propio\n" +" settore sono presenti le situazioni analoghe\n" +" bisogna assolutamente lavorare assieme a personale armato di turno\n" +" per tutto il tempo. Riferire immediatamente qualsiasi attivita' anomala\n" +" al vostro amministratore SRCF.\n" +" " #: computer.cpp msgid "" @@ -2222,6 +2324,18 @@ msgid "" " to your SRCF administrator at once.\n" " " msgstr "" +"\n" +" Oggetto: Nota alla sicurezza\n" +" Destinatario: Tutto il personale SRCF\n" +" Mittente: Constantine Dvorak, Sottosegretario alla sicurezza nucleare\n" +" \n" +" La sicurezza e la salute dei lavoratori è la nostra prima preoccupazione! " +"Come tale,\n" +" stiamo istituendo controlli sanitari settimanali per tutto il personale " +"SRFC.\n" +" Riportare qualsiasi sintomo inusuale o cambiamento fisico tempestivamente\n" +" al vostro amministratore SRFC.\n" +" " #: computer.cpp msgid "" @@ -2231,6 +2345,11 @@ msgid "" "SYSTEM ADMINISTRATOR TO RESOLVE THIS ISSUE.\n" " \n" msgstr "" +"\n" +"ERRORE: NETWORK DISCONNESSO \n" +"INCAPACITATO A COMUNICARE CON IL ROUTER O IL PROXY. CONTATTARE\n" +"L'AMMINISTARTORE DI SISTEMA PER RISOLVERE IL PROBLEMA.\n" +" \n" #: computer.cpp msgid "" @@ -2244,6 +2363,18 @@ msgid "" "QUALITIY OF FAULTLINE NOT COMPROMISED\n" "INITIATING STANDARD TREMOR TEST..." msgstr "" +"\n" +"OPERAZIONI DI ESCAVAZIONE SOSPESE; CONTROLLO TRASFERITO AL PROGETTO AMIGARA " +"SOTTO\n" +" IMPERATIVO 2:07B\n" +"ANALISI DELLA FRATTURA HANNO RILEVATO UNA PROFONDITA' DI 30.09 KM\n" +"DANNI ALLA FAGLIA RILEVATI; SQUADRA ADDETTA ALLE ESCAVAZIONI POSTA SOTTO " +"ARRESTO PER\n" +" VIOLAZIONE DELLA REGOLAZIONE 87.08 E TRAFERITA AL LAB 89-C PER USO " +"COME\n" +" SOGGETTI DI SPERIMENTAZIONE\n" +"QUALITA' DELLA FAGLIA NON COMPROMESSA\n" +"INIZIALIZZAZIONE DEL TEST TREMOR..." #: computer.cpp msgid "" @@ -2253,6 +2384,11 @@ msgid "" "Operational: Overrided\n" "\n" msgstr "" +"\n" +"Corrente: Solo di Emergenza\n" +"Livello di Radiazioni: Estremamente Pericolso\n" +"Operativita': Compromessa\n" +"\n" #: computer.cpp msgid "" @@ -2264,6 +2400,14 @@ msgid "" " \n" " \n" msgstr "" +" ATTENZIONE, LA TORRE RADIO NON DA' RISPOSTA. \n" +" \n" +" CORRENTE AUSILIARIA INSUFFICENTE PER POTER TRASMETTERE. \n" +" IN CASO DI EMERGENZA CONTATTARE TEMPESTIVAMENTE LA GUARDIA NAZIONALE \n" +" PER ESSERE INSERITI NELLA LISTA PRIORITARIA PER L'ASSEGNAZIONE DI " +"GENERATORI AUSILIARI. \n" +" \n" +" \n" #: computer.cpp msgid "" @@ -2288,6 +2432,28 @@ msgid "" " Ellen Grimes\n" " \n" msgstr "" +" Oggetto: DCD: Memorandum Interno, Standby[2918115]\n" +" Destinatario: Tutto il personale SRCF\n" +" Mittente: Ellen Grimes, Direttore dell' EPA\n" +" \n" +" Il vostro sito assieme a molti altri e' stato classificato\n" +" come contaminato da cio che d'ora in poi chiameremo [redatto].\n" +" E' vitale che stiate in attesa di ulteriori ordini. Stiamo attualmente\n" +" attendendo risposta dal presidente per decidere il corso di azione\n" +" in questa crisi nazionale. Procederete con le procedure di fail-safe\n" +" e applichere cariche C4 su tutto il sarcofago come definito dalla\n" +" pubblicazione 4423. Vi invieremo l'ordine di detonare e sigillare il " +"sarcofago\n" +" oppure di rimuovere le cariche. E' importante che la struttura venga " +"sigillata\n" +" una voltaeseguiti gli ordini, siamo stati contattati dalla Agenzia di " +"Sicurezza nazionale\n" +" riguardo alla presenza di bioterroristi che sono stati fermati alla luce " +"della recente crisi.\n" +" \n" +" Direttore del CDC,\n" +" Ellen Grimes\n" +" \n" #: computer.cpp msgid "" @@ -2313,6 +2479,31 @@ msgid "" " means to keep EPA agents from visiting the SRCFs, using military\n" " secrecy, emergency powers, and inter-departmental gag orders to\n" msgstr "" +" Oggetto: SRCF: Memorandum Interno, EPA[2918024]\n" +" Destinatario: Tutto il personale amministrativo SRCF\n" +" Mittente: Constantine Dvorak, Sottosegretario alla sicurezza nucleare\n" +" \n" +" Il Direttore Grimes ha rilasciato una nuova serie di imputazioni, presto\n" +" si avvieranno delle indagini supervisionate dalla commissione " +"Congressuale.\n" +" Allego il messaggio da lui stesso inviatomi.\n" +" \n" +" --------------------------------------------------------------\n" +" Oggetto: Investigazioni Congressuali\n" +" Destinatario: COnstantine Dvorak, Sottosegretario alla Sicurezza Nucleare\n" +" Mittente: Robert Shane, Direttore dell' EPA\n" +" \n" +" L' EPA respinse il progetto di formazione della Security-Restricted " +"Containment\n" +" Facility (SRCF) fin dalla sua presentazione. Siamo rimasti inorriditi\n" +" dalla vicinanza di queste strutture ad aree popolate, e abbiamo firmato la " +"petizione\n" +" a patto di poter controllare e monitorare liberamente i sarcofagi. Ma cio' " +"non accadde.\n" +" Da allora la DoE ha impedito in qualsiasi modo agli agenti EPA di visitare " +"l'SRCF, \n" +" attraverso segreto militare, poteri conferiti in caso di emergenza e di " +"\"imbavagliature\" per\n" #: computer.cpp msgid "" @@ -2335,6 +2526,22 @@ msgid "" " Commander of the 10th Mountain Division\n" " \n" msgstr "" +" Oggetto: Esercito degli Stati Uniti: Sigillazione SRCF[987167]\n" +" Destinatario: Tutto il personale SRCF\n" +" Mittente: Generale Maggiore Cornelius, Esercito degli Stati Uniti\n" +" \n" +" Come avviso generale al personale civile: la 10ma Divisione\n" +" Alpina e' stata assegnata alla supervisione della sigillazione del\n" +" sito SRCF. Ordine diretto, tutto il personale non essenziale deve\n" +" sgomberare l'area alla prima opportunita' per evitare contaminazioni.\n" +" Cariche Nucleari a basso potenziale saranno dispiegate nei tunnel " +"inferiori\n" +" per impedire il recupero di materiale tossico. Il corpo del genio " +"militare\n" +" provvedera' a cementificare l'area dando la possibilita' alla 10ma " +"divisone\n" +" di ridispiegarsi nell'area di Boston\n" +" \n" #: computer.cpp msgid "" @@ -2356,56 +2563,78 @@ msgid "" " Robert Shane\n" " \n" msgstr "" +" circoscrivere il progetto con un nastro rosso impenetrabile.\n" +" \n" +" Nonostante i nostri agenti non siano riusciti ad accedere alla " +"struttura, le nostre\n" +" strutture di analisi atmosferica hanno rilevato una quantitativo enorme di " +"tossine\n" +" e radiazioni, assieme a dozzine di componenti chimiche potenzialmente " +"dannose\n" +" e sconosciute presenti nelle falde acquifere. Ora siamo in possesso delle " +"prove che\n" +" l'SRCF e' una minaccia potenziale alla sicurezza pubblica. Porteremo " +"questi dati ai rappresentanti statali\n" +" e faremo una petizione per una completa ispezione Congressuale. Loro " +"dovrebbero essere in grado\n" +" di aprire i vostri bunker segreti ed il mondo vedra' cio che vi " +"nascondavate.\n" +" \n" +" Se lei ha le mani in questo casino, spero marcisca all'inferno\n" +" \n" +" Direttore dell' EPA,\n" +" Robert Shane\n" +" \n" #: computer.cpp #, c-format msgid "%d OTHERS FOUND..." -msgstr "" +msgstr "%d ALTRI TROVATI..." #: computer.cpp msgid "AMIGARA PROJECT" -msgstr "" +msgstr "PROGETTO AMIGARA" #: computer.cpp msgid "Access code required!" -msgstr "" +msgstr "Codice di accesso richiesto!" #: computer.cpp game.cpp iuse.cpp map.cpp msgid "An alarm sounds!" -msgstr "" +msgstr "Un allarme inizia a suonare!" #: computer.cpp msgid "Bionic access - Manifest:" -msgstr "" +msgstr "Accesso biomeccanico - Manifestazione:" #. ~ the sound of a church bell ringing #: computer.cpp msgid "Bohm... Bohm... Bohm..." -msgstr "" +msgstr "Bohm... Bohm... Bohm..." #: computer.cpp msgid "Bypass security?" -msgstr "" +msgstr "Aggirare la sicurezza?" #: computer.cpp msgid "Caused a resonance cascade." -msgstr "" +msgstr "Risonanza a cascata generata." #: computer.cpp msgid "Computer couldn't find its mission!" -msgstr "" +msgstr "Il computer non è in grado di acquisire la sua missione!" #: computer.cpp msgid "Confirm nuclear missile launch." -msgstr "" +msgstr "Lancio missile nucleare confermato" #: computer.cpp msgid "Containment shields opened. Press any key..." -msgstr "" +msgstr "Scudo di contenimento aperto." #: computer.cpp msgid "Continue reading?" -msgstr "" +msgstr "Continua a leggere?" #: computer.cpp msgid "" @@ -2413,22 +2642,25 @@ msgid "" " Robert Shane\n" " \n" msgstr "" +"Direttore dell' EPA\n" +" Robert Shane\n" +" \n" #: computer.cpp msgid "Disarm missile." -msgstr "" +msgstr "Disarma missile." #: computer.cpp msgid "Disarmed a nuclear missile." -msgstr "" +msgstr "Missile nucleare disarmato." #: computer.cpp msgid "Doors opened. Press any key..." -msgstr "" +msgstr "Porte aperte. Premere un tasto qualsiasi..." #: computer.cpp msgid "Download data?" -msgstr "" +msgstr "Scaricare i dati?" #: computer.cpp msgid "" @@ -2445,6 +2677,23 @@ msgid "" "the limbs, neck and head greatly distended, all twisted and curled in on\n" "themselves.\n" msgstr "" +"Rapporto 47:\n" +"La nostra routine di estrazione mineraria ha portato alla luce un'enorme " +"cavità. Questa non sarebbe\n" +"la prima volta, la cosa piu strana è la presenza di fratture geologiche " +"perfettamente verticali.\n" +"Su queste fratture ci sono diverse cavita', sembrano essere di origine " +"umana.\n" +"I membri piu superstiziosi della squadra sono stati allarmati dalla presenza " +"di queste stranezze.\n" +"\n" +"Rapporto 48:\n" +"Le cavità si aggirano tra i 10 e i 20 piedi di altezza e sono presenti per " +"tutta la lunghezza della\n" +"frattura. Ognuna di queste cavita' ha una forma che ricorda quella di " +"un'uomo ma\n" +"estremamente fuori scala rispetto al corpo umano e con una posa\n" +"distorta.\n" #: computer.cpp msgid "" @@ -2467,6 +2716,26 @@ msgid "" "made\n" "for such narrow tunnels, so it's hard to say exactly how far back they go.\n" msgstr "" +"Rapporto 49:\n" +"Abbiamo fermato le operazioni di escavazione nell'area, ovviamente, almeno " +"finche' gli archeologi\n" +"non avranno l'occasione di ispezionare l'area. Questo ci obblighera' a " +"ritardare la tabella di marcia\n" +"di almeno una settimana. Questa stupida legge sulla protezione degli " +"artefatti e' qui da\n" +"piu di 50 anni, e non ne è neanche stata valutata l'abolizione nonostante \n" +"il fatto che queste operazioni di escavazione siano la spina dorsale della " +"nostra economia.\n" +"\n" +"Rapporto 52:\n" +"Stiamo ancora attendendo gli archeologi. Abbiamo portato avanti " +"un'ispezione\n" +"della frattura; il nostro equipaggiamento di analisi sonar è insufficente " +"per misurare la profondità\n" +"della frattura. L'equipaggiamento dovrebbe rilevare fino a 15 miglia di " +"profondità ma non e' fatto\n" +"per dei cunicoli cosi stretti, questo rende estremamente difficoltoso fare " +"delle misurazioni.\n" #: computer.cpp msgid "" @@ -2486,74 +2755,93 @@ msgid "" "They're bringing in ANOTHER CREW? Christ, it's just some cave carvings! I\n" "know that's sort of a big deal, but come on, these guys can't handle it?\n" msgstr "" +"Rapporto 54:\n" +"Ho notato un paio dei miei ragazzi con uno scalpello mentre rompevano\n" +"una piccola parte del muro. Chiudero' un'occhio. Tanto quelle\n" +"teste d'uovo non lo noteranno. Si fottano.\n" +"\n" +"Rapporto 55:\n" +"Bene, gli archeologi sono arrivati, gli abbiamo assegnato un paio dei nostri " +"ragazzi come\n" +"guide. Non sono dei tipi all'indiana Jones, dubito loro siano mai stati al " +"di sotto di 20 piedi.\n" +"Odio sottrarre i miei ragazzi dai loro compiti per fare da babysitters agli " +"scienziati, ma\n" +"se dovessero farsi male chissa per quanto i lavori rimarranno fermi.\n" +"\n" +"Rapporto 58:\n" +"Stanno inviando un'altra squadra? Cristo, sono solo degli intagli sulla " +"pietra!\n" +"Capisco potrebbe essere qualcosa di importante, ma volete dirmi che questi " +"tizzi non possono fare nulla?\n" #: computer.cpp msgid "ERROR! Access denied!" -msgstr "" +msgstr "ERRORE! Accesso negato!" #: computer.cpp msgid "ERROR: ACCESSING DATA MALFUNCTION" -msgstr "" +msgstr "ERRORE: MALFUNZIONAMENTE DURANTE L'ACCESSO AI DATI" #: computer.cpp msgid "ERROR: Blood sample destroyed." -msgstr "" +msgstr "ERRORE: Campione di sangue distrutto" #: computer.cpp msgid "ERROR: Data bank destroyed." -msgstr "" +msgstr "ERRORE: Banco dati distrutto" #: computer.cpp msgid "ERROR: Disruptive Spin" -msgstr "" +msgstr "ERRORE: Vortice Dirompente" #: computer.cpp msgid "ERROR: Memory bank destroyed or not present." -msgstr "" +msgstr "ERRORE: banco di memoria distrutto o assente." #: computer.cpp msgid "ERROR: Memory bank is empty." -msgstr "" +msgstr "ERRORE: banco di memoria vuoto." #: computer.cpp msgid "ERROR: Please only scan one item at a time." -msgstr "" +msgstr "ERRORE: Scannerizzare solo un'oggetto alla volta." #: computer.cpp msgid "ERROR: Please only use blood samples." -msgstr "" +msgstr "ERRORE: Utilizzare solo campioni di sangue." #: computer.cpp msgid "ERROR: Please place memory bank in scan area." -msgstr "" +msgstr "ERRORE: Inserire banchi di memoria nell'area di scansione." #: computer.cpp msgid "ERROR: Please place sample in centrifuge." -msgstr "" +msgstr "ERRORE: Inserire un campione nella centrifuga" #: computer.cpp msgid "ERROR: Please remove all but one sample from centrifuge." -msgstr "" +msgstr "ERRORE: Rimuovere tutti i campioni dalla centrifuga eccetto uno." #: computer.cpp msgid "ERROR: Please use vacutainer-contained samples." -msgstr "" +msgstr "ERRORE: Utlizzare campioni contenuti in un contenitore sottovuoto" #: computer.cpp msgid "ERROR: Vacutainer empty." -msgstr "" +msgstr "ERRORE: Contenitore sottovuoto non contiene campioni" #: computer.cpp msgid "Elevator activated. Press any key..." -msgstr "" +msgstr "Ascensore attivato. Premere un tasto qualsiasi" #: computer.cpp msgid "Evacuate Immediately!" -msgstr "" +msgstr "Evacuare Immediatamente!" #: computer.cpp msgid "FILE CORRUPTED, PRESS ANY KEY..." -msgstr "" +msgstr "FILE CORROTTO, PREMERE UN TASTO QUALSIASI..." #: computer.cpp msgid "" @@ -2569,58 +2857,77 @@ msgid "" "\n" " \n" msgstr "" +"SALUTI CITTADINI. UN ATTACCO BIOLOGICO HA AVUTO LUOGO ED E' STATO\n" +"DICHIARATO LO STATO DI EMERGENZA. IL PERSONALE ADDETTO VI AIUTERA' \n" +"PRESTO. PER GARANTIRE LA VOSTRA SICUREZZA SEGUITE I PASSI RIPORTATI \n" +"\n" +"1. NON FATEVI PRENDERE DAL PANICO. \n" +"2. RIMANETE ALL'INTERNO DELL'EDIFICIO. \n" +"3. CERCATE RIFUGIO NEL SEMINTERRATO.\n" +"4. USATE LE MASCHERE RESPIRATORIE FORNITE. \n" +"5. ATTENDETE ULTERIORI ISTRUZIONI. \n" +"\n" +" \n" #: computer.cpp msgid "Hack into system?" -msgstr "" +msgstr "Violare il sistema?" #: computer.cpp #, c-format msgid "Launched a nuke at a %s." -msgstr "" +msgstr "Missile nucleare lanciato verso %s." #: computer.cpp msgid "Lock disabled. Press any key..." -msgstr "" +msgstr "Blocco disabilitato. Premere un tasto qualsiasi..." #: computer.cpp msgid "Lock enabled. Press any key..." -msgstr "" +msgstr "Blocco attivato. Premere un tasto qualsiasi" #: computer.cpp #, c-format msgid "Logging into %s..." -msgstr "" +msgstr "Loggando all'interno di %s..." #: computer.cpp msgid "Login successful. Press any key..." -msgstr "" +msgstr "Acesso confermato. Premere un tasto qualsiasi..." #: computer.cpp msgid "Manhacks drop from compartments in the ceiling." -msgstr "" +msgstr "Manhacks escono da dei comparti nel soffitto." #: computer.cpp msgid "Maximum login attempts exceeded. Press any key..." msgstr "" +"massimo numero di tentativo di accesso raggiunto. Premere un tasto " +"qualsiasi..." #: computer.cpp msgid "" "Memory Bank: Military Hexron Encryption\n" "Printing Transcript\n" msgstr "" +"Banco di memoria: Crittografia Militare di tipo Hexron\n" +"stampaggio della trascrizione\n" #: computer.cpp msgid "" "Memory Bank: Unencrypted\n" "Nothing of interest." msgstr "" +"Banco di memoria: Decriptato\n" +"Nulla di interessante." #: computer.cpp msgid "" "Memory Bank: Unencrypted\n" "Nothing of interest.\n" msgstr "" +"Banco di memoria: Decriptato\n" +"Nulla di interessante.\n" #: computer.cpp #, c-format @@ -2629,71 +2936,71 @@ msgstr "" #: computer.cpp msgid "No data found." -msgstr "" +msgstr "Nessuna dato trovato." #: computer.cpp msgid "Nuclear missile disarmed!" -msgstr "" +msgstr "Testata nucleare disarmata." #: computer.cpp msgid "Nuclear missile launch aborted." -msgstr "" +msgstr "Lancio del missile nucleare annullato." #: computer.cpp msgid "Nuclear missile launched!" -msgstr "" +msgstr "Missile nucleare lanciato!" #: computer.cpp msgid "Nuclear missile remains active." -msgstr "" +msgstr "Missile nucleare è rimasto attivo" #: computer.cpp msgid "Opened a portal." -msgstr "" +msgstr "Portale aperto..." #: computer.cpp msgid "PROCESSING DATA" -msgstr "" +msgstr "ELABORAZIONE DEI DATI" #: computer.cpp msgid "Password required." -msgstr "" +msgstr "Password richiesta." #: computer.cpp msgid "Pathogen bonded to erythrocytes and leukocytes." -msgstr "" +msgstr "Patogeno legato agli eritrociti e ai leucociti." #: computer.cpp help.cpp msgid "Press any key to continue..." -msgstr "" +msgstr "Premere un tasto qualsiasi per continuare..." #: computer.cpp msgid "Press any key..." -msgstr "" +msgstr "Premi un tasto qualunque..." #: computer.cpp msgid "Quit and shut down" -msgstr "" +msgstr "Esci e spegni" #: computer.cpp msgid "Released subspace specimens." -msgstr "" +msgstr "Rilasciare gli esemplari del subspazio." #: computer.cpp msgid "Result: Human blood, no pathogens found." -msgstr "" +msgstr "Risultato: Sangue umano, nessun patogeno rilevato." #: computer.cpp msgid "Result: Human blood. Unknown pathogen found." -msgstr "" +msgstr "Risultato: Sangue umano. Patogeno non identificato rilevato." #: computer.cpp msgid "Result: Unknown blood type. Test nonconclusive." -msgstr "" +msgstr "Risultato: Tipo di sangue sconosciuto. Test inconclusivo." #: computer.cpp msgid "Root Menu" -msgstr "" +msgstr "Menu di Root" #: computer.cpp #, c-format @@ -2701,108 +3008,113 @@ msgid "" "SITE %d%d%d%d%d\n" "PERTINANT FOREMAN LOGS WILL BE PREPENDED TO NOTES" msgstr "" +"SITO %d%d%d%d%d\n" +"IL CAPOREPARTO RESPONSABILE DEI RAPPORTI SARA' SOGGETTO A RICHIAMI" #: computer.cpp msgid "Sealed a Hazardous Material Sarcophagus." -msgstr "" +msgstr "Sigillato un Sarcofago di Materiale tossico" #: computer.cpp msgid "Secubots emerge from compartments in the floor." -msgstr "" +msgstr "Secubots emergono da dei comparti nel pavimento." #: computer.cpp game.cpp iuse.cpp msgid "Set off an alarm." -msgstr "" +msgstr "Parte un allarme" #: computer.cpp msgid "Sewage leaks!" -msgstr "" +msgstr "C'e' una perdita di liquame!" #: computer.cpp msgid "Sewage map data downloaded. Press any key..." -msgstr "" +msgstr "Mappa delle fognature scaricata. Premere un tasto qualsiasi..." #: computer.cpp msgid "Shutting down... press any key." -msgstr "" +msgstr "Spegimento... premere qualsiassi tasto." #: computer.cpp msgid "Software downloaded." -msgstr "" +msgstr "Software scaricato." #: computer.cpp msgid "Subjects terminated. Press any key..." -msgstr "" +msgstr "Soggetto terminato. Premere una tasto qualsiasi..." #: computer.cpp msgid "Surface map data downloaded. Press any key..." -msgstr "" +msgstr "Mappa della sperfice scaricata. Premere un tasto qualsiasi..." #: computer.cpp msgid "Target acquisition canceled" -msgstr "" +msgstr "Acqusizione del bersaglio cancellata" #: computer.cpp msgid "Terminated subspace specimens." -msgstr "" +msgstr "Esemplari del subspazio terminati." #: computer.cpp msgid "The console electrocutes you!" -msgstr "" +msgstr "La console ti folgora!" #: computer.cpp msgid "" "The machine injects your eyeball with the solution \n" "of pureed bone & LSD." msgstr "" +"La macchina inietta nel tuo occhio con una soluzione \n" +"di pura polvere d'ossa e LSD." #: computer.cpp msgid "The pump explodes!" -msgstr "" +msgstr "La pompa esplode!" #: computer.cpp msgid "USB drive required!" -msgstr "" +msgstr "Chiavetta USB recuperata!" #: computer.cpp msgid "WARNING: Resonance cascade carries severe risk! Continue?" msgstr "" +"ATTENZIONE: Cascata a risonanza porta con se' rischi enormi! Continuare?" #: construction.cpp msgid " Construction " -msgstr "" +msgstr " Costruzione " #: construction.cpp msgid "Board Up Door" -msgstr "" +msgstr "Barrica la porta" #: construction.cpp msgid "Board Up Window" -msgstr "" +msgstr "Barrica la finestra" #: construction.cpp msgid "Build Bookcase" -msgstr "" +msgstr "Costrusci una libreria" #: construction.cpp msgid "Build Bulletin Board" -msgstr "" +msgstr "Costrusci una bacheca" #: construction.cpp msgid "Build Counter" -msgstr "" +msgstr "Costruisci un bancone" #: construction.cpp msgid "Build Door" -msgstr "" +msgstr "Costruisci porta" #: construction.cpp msgid "Build Dresser" -msgstr "" +msgstr "Costrusci un como'" #: construction.cpp msgid "Build Locker" -msgstr "" +msgstr "Costrusci un armadietto" #: construction.cpp msgid "Build Log & Sod Roof" @@ -2810,467 +3122,469 @@ msgstr "" #: construction.cpp msgid "Build Log Wall" -msgstr "" +msgstr "Costruisci un muro di tronchi" #: construction.cpp msgid "Build Makeshift Bed" -msgstr "" +msgstr "Costrusci un letto di fortuna" #: construction.cpp msgid "Build Metal Rack" -msgstr "" +msgstr "Costruisci uno scaffale di metallo" #: construction.cpp msgid "Build Palisade Gate" -msgstr "" +msgstr "Costruisci il cancello della palizzata" #: construction.cpp msgid "Build Palisade Wall" -msgstr "" +msgstr "Costruisci una palizzata" #: construction.cpp msgid "Build Roof" -msgstr "" +msgstr "Costrusci un tetto" #: construction.cpp msgid "Build Rope & Pulley System" -msgstr "" +msgstr "Costrusci un sistema a carrucola" #: construction.cpp msgid "Build Stone Fireplace" -msgstr "" +msgstr "Costruisci un focolare id pietra" #: construction.cpp msgid "Build Wall" -msgstr "" +msgstr "Costruisci un muro" #: construction.cpp msgid "Build Window" -msgstr "" +msgstr "Costruisci finestra" #: construction.cpp msgid "Build Wire Fence" -msgstr "" +msgstr "Costrusci un recinto di fil-di-ferro" #: construction.cpp msgid "Build Wire Gate" -msgstr "" +msgstr "Costrusci il cancello del recinto" #: construction.cpp msgid "Build Wood Stove" -msgstr "" +msgstr "Costruisci un fornello di legno" #: construction.cpp lang/json/json_vehicles.py msgid "Car" -msgstr "" +msgstr "Macchina" #: construction.cpp msgid "Chop Down Tree" -msgstr "" +msgstr "Taglia un'albero" #: construction.cpp msgid "Chop Tree trunk into logs" -msgstr "" +msgstr "Taglia un albero in ceppi" #: construction.cpp msgid "Chop Tree trunk into planks" -msgstr "" +msgstr "Taglia un'albero in assi" #: construction.cpp msgid "Clean Broken Window" -msgstr "" +msgstr "Pulisci una finestra rotta" #: construction.cpp msgid "Contruct where?" -msgstr "" +msgstr "Dove vuoi costruire?" #: construction.cpp msgid "Deconstruct Furniture" -msgstr "" +msgstr "Smonta mobile" #: construction.cpp msgid "Difficulty:" -msgstr "" +msgstr "Difficolta':" #: construction.cpp msgid "Dig Pit" -msgstr "" +msgstr "Scava una buca" #: construction.cpp veh_interact.cpp msgid "Enter new vehicle name:" -msgstr "" +msgstr "Inserisci il nome del nuovo veicolo:" #: construction.cpp msgid "Fence Posts" -msgstr "" +msgstr "Pianta Paletti da recinzione" #: construction.cpp msgid "Fill Pit" -msgstr "" +msgstr "Riempi una buca" #: construction.cpp msgid "Move Furniture" -msgstr "" +msgstr "Sposta un mobile" #: construction.cpp msgid "OR" -msgstr "" +msgstr "OPPURE" #: construction.cpp msgid "Press a direction for the tree to fall in:" -msgstr "" +msgstr "Seleziona la direzione dove vuoi che cada l'albero:" #: construction.cpp msgid "Realign Fence" -msgstr "" +msgstr "Ri-allinea un recinto" #: construction.cpp msgid "Repair Door" -msgstr "" +msgstr "Ripara una porta" #: construction.cpp msgid "Spike Pit" -msgstr "" +msgstr "Inserisci delle punte nella buca" #: construction.cpp #, c-format msgid "Stage %1$d: %2$s" -msgstr "" +msgstr "Fase %1$d: %2$s" #: construction.cpp msgid "Start vehicle construction" -msgstr "" +msgstr "Avvia la costruzione di un veicolo" #: construction.cpp msgid "Tape up window" -msgstr "" +msgstr "Oscura la finestra con del nastro" #: construction.cpp #, c-format msgid "Time: %1d minutes" -msgstr "" +msgstr "Tempo: %1d minuti" #: construction.cpp msgid "You can't build that!" -msgstr "" +msgstr "Non puoi costruire quello!" #: construction.cpp msgid "You cannot build there!" -msgstr "" +msgstr "Non puoi costruire li!" #: construction.cpp #, c-format msgid "You disassemble the %s." -msgstr "" +msgstr "Smonti la %s." #: construction.cpp #, c-format msgid "You have to push away %s first." -msgstr "" +msgstr "Devi prima spostare la %s." #: construction.cpp #, c-format msgid "You tape up the %s." -msgstr "" +msgstr "Ricopri con nastro adesivo la %s." #: crafting.cpp veh_interact.cpp msgid " (nearby)" -msgstr "" +msgstr " (vicini)" #: crafting.cpp msgid " (on person & nearby)" -msgstr "" +msgstr " (su di una persona o vicini)" #: crafting.cpp #, c-format msgid "(%d charges) " -msgstr "" +msgstr "(%d cariche) " #: crafting.cpp msgid "AMMO" -msgstr "" +msgstr "MUNIZIONI" #: crafting.cpp msgid "ARMOR" -msgstr "" +msgstr "ARMATURA" #: crafting.cpp msgid "CHEMS" -msgstr "" +msgstr "PRODOTTI CHIMICI" #: crafting.cpp msgid "Components required:" -msgstr "" +msgstr "Componenti richiesti:" #: crafting.cpp msgid "Craft something first" -msgstr "" +msgstr "Costruisci qualcosa prima" #: crafting.cpp msgid "DRINKS" -msgstr "" +msgstr "BEVANDE" #: crafting.cpp #, c-format msgid "Difficulty: %d" -msgstr "" +msgstr "Difficolta': %d" #: crafting.cpp msgid "Disassemble item:" -msgstr "" +msgstr "Disassembla oggetto:" #: crafting.cpp #, c-format msgid "Do you want to tear %s into pages?" -msgstr "" +msgstr "Vuoi strappare %s in pagine?" #: crafting.cpp msgid "ELECTRONICS" -msgstr "" +msgstr "ELETTRONICA" #: crafting.cpp msgid "FOOD" -msgstr "" +msgstr "CIBO" #: crafting.cpp msgid "MISC" -msgstr "" +msgstr "VARIE" #: crafting.cpp msgid "NONE" -msgstr "" +msgstr "NULLA" #: crafting.cpp game.cpp iexamine.cpp iuse.cpp npctalk.cpp msgid "Never mind." -msgstr "" +msgstr "Non importa." #: crafting.cpp msgid "OR " -msgstr "" +msgstr "OPPURE " #: crafting.cpp msgid "Press to attempt to craft object." -msgstr "" +msgstr "Premi per tentare di costruire quell'oggetto." #: crafting.cpp #, c-format msgid "Really disassemble your %s?" -msgstr "" +msgstr "Vuoi veramente disassemblare il tuo %s?" #: crafting.cpp #, c-format msgid "Required skills: %s" -msgstr "" +msgstr "Abilita' richiesta: %s" #: crafting.cpp #, c-format msgid "Requires %d tools with %s of %d or more." -msgstr "" +msgstr "Richiede attrezzi da %d con %s di %d o maggiore." #: crafting.cpp msgid "Search:" -msgstr "" +msgstr "Cerca:" #: crafting.cpp msgid "Searched" -msgstr "" +msgstr "Cercate" #: crafting.cpp #, c-format msgid "Skills used: %s" -msgstr "" +msgstr "Abilita' usata: %s" #: crafting.cpp #, c-format msgid "The %s is too heavy to carry, so you drop it." -msgstr "" +msgstr "%s e' troppo pesante, lo lasci per terra." #: crafting.cpp #, c-format msgid "There's no room in your inventory for the %s, so you drop it." -msgstr "" +msgstr "Non c'e' spazio nel tuo inventario per %s, cosi lo lasci a terra." #: crafting.cpp msgid "This item cannot be disassembled!" -msgstr "" +msgstr "Questo oggetto non puo' essere disassemblato!" #: crafting.cpp #, c-format msgid "Time to complete: %d minutes" -msgstr "" +msgstr "Tempo per il completamento: %d minuti" #: crafting.cpp #, c-format msgid "Time to complete: %d turns" -msgstr "" +msgstr "Tempo per il completamento: %d turni" #: crafting.cpp msgid "Tools required:" -msgstr "" +msgstr "Attrezzi richiesti:" #: crafting.cpp msgid "Use which component?" -msgstr "" +msgstr "Quale componente vuoi usare?" #: crafting.cpp msgid "Use which tool?" -msgstr "" +msgstr "Quale attrezzo vuoi usare?" #: crafting.cpp msgid "WEAPONS" -msgstr "" +msgstr "ARMI" #: crafting.cpp msgid "With some more skill, you might learn a recipe from this." msgstr "" +"Con un po' piu di abilita' potrai apprendere una ricetta da quest'oggetto" #: crafting.cpp msgid "You can no longer make that craft!" -msgstr "" +msgstr "Non puoi piu costruire tale oggetto!" #: crafting.cpp msgid "You can't do that!" -msgstr "" +msgstr "Non puoi farlo!" #: crafting.cpp #, c-format msgid "You cannot disassemble the %s into its components, too few items." -msgstr "" +msgstr "Non puoi disassemblare %s nelle sue componenti, troppi pochi oggetti." #: crafting.cpp #, c-format msgid "You disassemble the %s into its components." -msgstr "" +msgstr "Disassembli %s nei suoi componenti." #: crafting.cpp msgid "You don't have anything to store that liquid in!" -msgstr "" +msgstr "Non hai nulla che possa contenere quel liquido!" #: crafting.cpp game.cpp #, c-format msgid "You don't have item '%c'!" -msgstr "" +msgstr "non hai quell'oggetto '%c'!" #: crafting.cpp #, c-format msgid "You fail to make the %s, and waste some materials." -msgstr "" +msgstr "Fallisci nel fare %s, e sprechi qualche materiale" #: crafting.cpp #, c-format msgid "You fail to make the %s, but don't waste any materials." -msgstr "" +msgstr "Fallisci nel fare %s, ma non sprechi alcun materiale." #: crafting.cpp msgid "You fail to recover a component." -msgstr "" +msgstr "Fallisci nel recuperare un componente." #: crafting.cpp msgid "You learned a recipe from this disassembly!" -msgstr "" +msgstr "Con questo disassemblaggio hai imparato una nuova ricetta!" #: crafting.cpp #, c-format msgid "You need a %s to disassemble this." -msgstr "" +msgstr "Hai bisogno di %s per disassemblare quest'oggetto." #: crafting.cpp #, c-format msgid "You need a %s with %d charges to disassemble this." -msgstr "" +msgstr "Hai bisogno di %s con %d cariche per disassemblare quest'oggetto" #: crafting.cpp msgid "You need a hacksaw to disassemble this." -msgstr "" +msgstr "Hai bisogno di un seghetto per disassemblare quest'oggetto." #: crafting.cpp msgid "" "You think you could learn a recipe from this item. Maybe you'll try again." msgstr "" +"Pensi di poter ricavare una ricetta da quest'oggetto. Potrai riprovare." #: crafting.cpp msgid "Your morale is too low to craft..." -msgstr "" +msgstr "Il tuo morale e' troppo basso per costruire..." #: crafting.cpp #, c-format msgid "Your skill level: %d" -msgstr "" +msgstr "Il tuo livello di abilita': %d" #: crafting.cpp msgid "Your skill level: N/A" -msgstr "" +msgstr "Il tuo livello di abilita': N/A" #: crafting.cpp msgid "[?/E]: Describe, [F]ind" -msgstr "" +msgstr "[?/E]: Descrivi, [F]Trova" #: crafting.cpp msgid "[?/E]: Describe, [F]ind , [R]eset" -msgstr "" +msgstr "[?/E]: Descrvi, [F]Trova , [R]esetta" #: defense.cpp #, c-format msgid "%s Attack!" -msgstr "" +msgstr "%s attaccano!" #: defense.cpp #, c-format msgid "%s Invasion!" -msgstr "" +msgstr "%s Invasione!" #: defense.cpp #, c-format msgid "%s Party!" -msgstr "" +msgstr "festa dei %s!" #: defense.cpp #, c-format msgid "%s from Hell!" -msgstr "" +msgstr "%s dall'inferno!" #: defense.cpp msgid "A caravan approaches! Press spacebar..." -msgstr "" +msgstr "Una carovana si sta' avvicinando, premi la barra spaziatrice..." #: defense.cpp msgid "A custom game." -msgstr "" +msgstr "Un gioco personalizzato" #: defense.cpp msgid "A large building with various supplies." -msgstr "" +msgstr "Un grande edificio con suppellettili di vario genere." #: defense.cpp msgid "A large house with many rooms and." -msgstr "" +msgstr "Una grande casa con tante stanze." #: defense.cpp msgid "A small building with plenty of alcohol." -msgstr "" +msgstr "Un piccolo edificio con tanti acolici." #: defense.cpp msgid "All monsters. You have to eat and drink." -msgstr "" +msgstr "Tutti i mostri. Devi mangiare e bere." #: defense.cpp #, c-format msgid "Attack of the %ss!" -msgstr "" +msgstr "Attacco degli %ss!" #: defense.cpp msgid "Bar" -msgstr "" +msgstr "Bar" #: defense.cpp #, c-format msgid "Beware! %s!" -msgstr "" +msgstr "Attento! %s!" #: defense.cpp #, c-format msgid "Buy %d items, leaving you with $%d?" -msgstr "" +msgstr "Acquista %d oggetti, lasciandoti con $%d?" #: defense.cpp msgid "" @@ -3280,331 +3594,340 @@ msgid "" "Pick an item with the up/down keys, press + to buy 1 more, - to buy 1 less.\n" "Press Enter to buy everything in your cart, Esc to buy nothing." msgstr "" +"CAROVANA:\n" +"Inzizia con il selezionare una categoria usando i tasti su/giu.\n" +"Cambia dalla selezione della categoria alla selezione oggetto co Tab.\n" +"Seleziona l'oggetto con le freccie su/giu, premi + per acquistarne uno in " +"piu, - per acquistarne uno in meno\n" +"Premi invio per acquistare tutto cio che hai nel carrello, Esc per non " +"acquisare nulla." #: defense.cpp msgid "Cash Increase:" -msgstr "" +msgstr "Incremento di soldi:" #: defense.cpp msgid "Cash for 1st Wave:" -msgstr "" +msgstr "Soldi per la prima ondata:" #: defense.cpp msgid "Classic zombies. Slower and more realistic." -msgstr "" +msgstr "Zombie classici. piu lenti e realistici." #: defense.cpp msgid "Clothing & Armor" -msgstr "" +msgstr "Vestiario & Armatura" #: defense.cpp msgid "Crafting & Construction Components" -msgstr "" +msgstr "Materiali per da costruzione" #: defense.cpp msgid "Custom" -msgstr "" +msgstr "Personalizzato" #: defense.cpp msgid "DEFENSE MODE" -msgstr "" +msgstr "MODALITA' DIFESA" #: defense.cpp msgid "Dawn of the Dead" -msgstr "" +msgstr "L'alba dei morti viventi" #: defense.cpp msgid "Day of the Triffids" -msgstr "" +msgstr "Il giorno dei Trifidi" #: defense.cpp msgid "Defend a bar against classic zombies. Easy and fun." -msgstr "" +msgstr "Difendi un bar dagli zombie classici. Facile e divertente" #: defense.cpp msgid "Defend your mansion against the triffids." -msgstr "" +msgstr "Difendi il maniero dai Trifidi." #: defense.cpp msgid "Easy" -msgstr "" +msgstr "Facile" #: defense.cpp msgid "Easy monsters and lots of money." -msgstr "" +msgstr "Mostri facili e tanti soldi." #: defense.cpp msgid "Eight-Legged Freaks" -msgstr "" +msgstr "Orrori a otto gambe" #: defense.cpp msgid "Enemy Selection:" -msgstr "" +msgstr "Selezione nemici:" #: defense.cpp msgid "Fast-paced spider-fighting fun!" -msgstr "" +msgstr "Combattimento contro ragni, veloce e divertente!" #: defense.cpp msgid "Firearms & Ammo" -msgstr "" +msgstr "Armi da fuoco & munzioni" #: defense.cpp msgid "Food" -msgstr "" +msgstr "Cibo" #: defense.cpp msgid "Food & Drugs" -msgstr "" +msgstr "Cibo & Droghe" #: defense.cpp msgid "Hard" -msgstr "" +msgstr "Difficile" #: defense.cpp msgid "Harder monsters. You have to eat." -msgstr "" +msgstr "Mostri piu difficili. Devi mangiare." #: defense.cpp msgid "Hospital" -msgstr "" +msgstr "Ospedale" #: defense.cpp msgid "Initial Cash:" -msgstr "" +msgstr "Soldi Iniziali:" #: defense.cpp msgid "Initial Difficulty:" -msgstr "" +msgstr "Difficolta' Iniziale:" #: defense.cpp msgid "Location:" -msgstr "" +msgstr "Luogo:" #: defense.cpp msgid "Mansion" -msgstr "" +msgstr "Mansione" #: defense.cpp msgid "Medium" -msgstr "" +msgstr "Intermedio" #: defense.cpp msgid "Megastore" -msgstr "" +msgstr "Supermercato" #: defense.cpp msgid "Melee Weapons" -msgstr "" +msgstr "Armi corpo-a-corpo" #: defense.cpp msgid "Mercenaries" -msgstr "" +msgstr "Mercenari" #: defense.cpp msgid "Needs:" -msgstr "" +msgstr "Necessita':" #: defense.cpp msgid "One entrance and many rooms. Some medical supplies." -msgstr "" +msgstr "Un'entrata e molte stanze. Alcune forniture mediche." #: defense.cpp msgid "Please wait as the map generates [ 0%]" -msgstr "" +msgstr "Aspetta, la mappa sta venedo generata[ 0% ]" #: defense.cpp msgid "Please wait as the map generates [%2d%]" -msgstr "" +msgstr "Aspetta, la mappa sta venedo generata[%2d%]" #: defense.cpp msgid "Press +/- or >/< to cycle, spacebar to toggle" msgstr "" +"Premere +/- oppure >/< per cambiare, barra spaziatrice per attivare/" +"disattivare" #: defense.cpp msgid "Press ? for help." -msgstr "" +msgstr "Premere ? per l'aiuto" #: defense.cpp msgid "Press S to start, ! to save as a template" -msgstr "" +msgstr "Premi S per partire, ! per salvare come schema predefinito" #: defense.cpp msgid "Really buy nothing?" -msgstr "" +msgstr "Sicuro di non voler acquistare nulla?" #: defense.cpp #, c-format msgid "Revenge of the %ss!" -msgstr "" +msgstr "La vendetta dei %ss!" #: defense.cpp #, c-format msgid "Rise of the %ss!" -msgstr "" +msgstr "Il ritorno degli %s" #: defense.cpp msgid "Robots" -msgstr "" +msgstr "Robots" #: defense.cpp msgid "Scenario:" -msgstr "" +msgstr "Scenario:" #: defense.cpp msgid "Shaun of the Dead" -msgstr "" +msgstr "L'alba dei morti dementi" #: defense.cpp lang/json/json_vehicles.py msgid "Shopping Cart" -msgstr "" +msgstr "Carrello della spesa" #: defense.cpp msgid "Skynet" -msgstr "" +msgstr "Skynet" #: defense.cpp msgid "Special Zombies" -msgstr "" +msgstr "Zombie Speciali" #: defense.cpp msgid "Spiders" -msgstr "" +msgstr "Ragni" #: defense.cpp msgid "Subspace" -msgstr "" +msgstr "Subspazio" #: defense.cpp msgid "Template Name:" -msgstr "" +msgstr "Nome del modello:" #: defense.cpp msgid "The Call of Cthulhu" -msgstr "" +msgstr "Il richiamo di Cthulhu" #: defense.cpp #, c-format msgid "The Day of the %s!" -msgstr "" +msgstr "Il giorno dei %s!" #: defense.cpp msgid "The amount of money the player starts with." -msgstr "" +msgstr "La quantita' di soldi con cui il giocator incomincia." #: defense.cpp msgid "The cash awarded for the first wave." -msgstr "" +msgstr "Soldi guadagnati dalla prima ondata." #: defense.cpp msgid "The difficulty of the first wave." -msgstr "" +msgstr "La difficolta' della prima ondata." #: defense.cpp msgid "The increase in the award each wave." -msgstr "" +msgstr "L'incremento di guadagno per ogni ondata" #: defense.cpp msgid "The increase of difficulty with each wave." -msgstr "" +msgstr "L'incremento della difficolta per ogni ondata." #: defense.cpp msgid "The number of waves in between caravans." -msgstr "" +msgstr "Il numero di ondate tra carovane" #: defense.cpp msgid "The robots have decided that humans are the enemy!" -msgstr "" +msgstr "I robot hanno deciso che gli umani sono il nemico!" #: defense.cpp msgid "The time, in minutes, between waves." -msgstr "" +msgstr "Il tempo, in minuti, tra ondate." #: defense.cpp msgid "Time b/w Waves:" -msgstr "" +msgstr "Tempo b/w Ondate:" #: defense.cpp msgid "Tools, Traps & Grenades" -msgstr "" +msgstr "Attrezzi, Trappole & Granate" #: defense.cpp msgid "Triffids" -msgstr "" +msgstr "Trifidi" #: defense.cpp msgid "Ward off legions of eldritch horrors." -msgstr "" +msgstr "Combatti contro legioni di orrori soprannaturali." #: defense.cpp msgid "Water" -msgstr "" +msgstr "Acqua" #: defense.cpp #, c-format msgid "Wave %d: " -msgstr "" +msgstr "Ondata %d: " #: defense.cpp msgid "Wave Difficulty:" -msgstr "" +msgstr "Difficolta dell'ondata:" #: defense.cpp msgid "Waves b/w Caravans:" -msgstr "" +msgstr "Ondate b/w Caravans:" #: defense.cpp #, c-format msgid "Welcome to Wave %d!" -msgstr "" +msgstr "Benvenuto all'ondata %d!" #: defense.cpp msgid "You can't afford those items!" -msgstr "" +msgstr "Non puoi permetterti quegli oggetti!" #: defense.cpp #, c-format msgid "You cannot leave the %s behind!" -msgstr "" +msgstr "Non puoi abbandonare %s!" #: defense.cpp msgid "You cannot save in defense mode!" -msgstr "" +msgstr "Non puoi salvare in modalita' difesa!" #: defense.cpp msgid "You don't need to sleep!" -msgstr "" +msgstr "Non hai bisogno di dormire!" #: defense.cpp msgid "You drop some items." -msgstr "" +msgstr "Abbandoni qualche oggetto." #: defense.cpp #, c-format msgid "You managed to survive through wave %d!" -msgstr "" +msgstr "Sei soppravvissuto all'ondata %d!" #: defense.cpp msgid "You must choose at least one monster group!" -msgstr "" +msgstr "Devi scegliere almeno un gruppo di mostri!" #: defense.cpp #, c-format msgid "Your Cash:%6d" -msgstr "" +msgstr "I tuoi soldi: %6d" #: defense.cpp msgid "Zombies" -msgstr "" +msgstr "Zombie" #: disease.cpp #, c-format msgid "%s starts scratching their %s!" -msgstr "" +msgstr "%s inizia a grattarsi il proprio %s!" #: disease.cpp msgid " loses some blood." -msgstr "" +msgstr " perde del sangue." #: disease.cpp msgid " vomits a thick, grey goop." @@ -3620,23 +3943,23 @@ msgstr "" #: disease.cpp msgid "A monster appears nearby!" -msgstr "" +msgstr "Un mostro appare vicino a te!" #: disease.cpp msgid "A portal opens nearby, and a monster crawls through!" -msgstr "" +msgstr "Un portale si apre vicino a te e ne esce fuori un mostro!" #: disease.cpp msgid "Adrenaline Comedown" -msgstr "" +msgstr "Sintomi post-Adrenalina" #: disease.cpp msgid "Adrenaline Rush" -msgstr "" +msgstr "botta di adrenalina" #: disease.cpp msgid "Armor Bonus" -msgstr "" +msgstr "Bonus di armatura" #: disease.cpp #, c-format @@ -3645,11 +3968,11 @@ msgstr "" #: disease.cpp msgid "Asthma" -msgstr "" +msgstr "Asma" #: disease.cpp msgid "Attack Speed Bonus" -msgstr "" +msgstr "Bonus di velocita' d'attacco" #: disease.cpp #, c-format @@ -3658,163 +3981,163 @@ msgstr "" #: disease.cpp msgid "Bad Bleeding - " -msgstr "" +msgstr "Sanguinamento grave - " #: disease.cpp msgid "Badly Infected - " -msgstr "" +msgstr "Gravemente infettato - " #: disease.cpp msgid "Badly Poisoned" -msgstr "" +msgstr "Gravemente avvelenato" #: disease.cpp msgid "Bite - " -msgstr "" +msgstr "Morso - " #: disease.cpp msgid "Bleeding - " -msgstr "" +msgstr "Sanguinante - " #: disease.cpp msgid "Blind" -msgstr "" +msgstr "Cieco" #: disease.cpp msgid "Blisters - arms" -msgstr "" +msgstr "Compaiono delle vesciche sulle braccia" #: disease.cpp msgid "Blisters - face" -msgstr "" +msgstr "Compaiono delle vesciche sul volto" #: disease.cpp msgid "Blisters - feet" -msgstr "" +msgstr "Compaiono delle vesciche sui piedi" #: disease.cpp msgid "Blisters - hands" -msgstr "" +msgstr "Compaiono delle vesciche sulle mani" #: disease.cpp msgid "Blisters - legs" -msgstr "" +msgstr "Compaiono delle vesciche sulle gambe" #: disease.cpp msgid "Blisters - torso" -msgstr "" +msgstr "Compaiono delle vesciche sul tronco" #: disease.cpp msgid "Boomered" -msgstr "" +msgstr "Boomered" #: disease.cpp msgid "Bugs in skin - " -msgstr "" +msgstr "Insetti sotto la pelle - " #: disease.cpp msgid "Caught a cold." -msgstr "" +msgstr "Ti sei buscato un raffreddore." #: disease.cpp msgid "Caught on fire." -msgstr "" +msgstr "Hai preso fuoco." #: disease.cpp msgid "Caught the flu." -msgstr "" +msgstr "Sei colto da una febbre." #: disease.cpp msgid "Chilly arms" -msgstr "" +msgstr "Le braccia sono fresche" #: disease.cpp msgid "Chilly face" -msgstr "" +msgstr "Il viso e' fresco" #: disease.cpp msgid "Chilly feet" -msgstr "" +msgstr "I piedi sono freschi" #: disease.cpp msgid "Chilly hands" -msgstr "" +msgstr "Le mani sono fresche" #: disease.cpp msgid "Chilly head" -msgstr "" +msgstr "la testa fresca" #: disease.cpp msgid "Chilly legs" -msgstr "" +msgstr "Le gambe sono fresche" #: disease.cpp msgid "Chilly torso" -msgstr "" +msgstr "Il tronco e' fresco" #: disease.cpp msgid "Cigarette" -msgstr "" +msgstr "Sigaretta" #: disease.cpp msgid "Clambering Over Rubble" -msgstr "" +msgstr "Arrampicandosi oltre dei detriti" #: disease.cpp player.cpp msgid "Cold" -msgstr "" +msgstr "Freddo" #: disease.cpp msgid "Cold arms!" -msgstr "" +msgstr "Le braccia sono fredde!" #: disease.cpp msgid "Cold face!" -msgstr "" +msgstr "Il viso e' freddo!" #: disease.cpp msgid "Cold feet!" -msgstr "" +msgstr "I piedi sono freddi!" #: disease.cpp msgid "Cold hands!" -msgstr "" +msgstr "Le mani sono fredde!" #: disease.cpp msgid "Cold head!" -msgstr "" +msgstr "La testa fredda!" #: disease.cpp msgid "Cold legs!" -msgstr "" +msgstr "Le gambe sono fredde!" #: disease.cpp msgid "Cold torso!" -msgstr "" +msgstr "Il tronco e' freddo!" #: disease.cpp msgid "Common Cold" -msgstr "" +msgstr "Raffeddore comune" #: disease.cpp msgid "Completely Paralyzed" -msgstr "" +msgstr "Completamente paralizzato" #: disease.cpp msgid "Contracted a fungal infection." -msgstr "" +msgstr "Hai contratto un'infezione fungale." #: disease.cpp msgid "Contracted an infection." -msgstr "" +msgstr "Sei stato infettato" #: disease.cpp msgid "Cured the fungal infection." -msgstr "" +msgstr "Hai curato l'infezione fungale." #: disease.cpp msgid "Damage Bonus" -msgstr "" +msgstr "Bonus di Danno" #: disease.cpp #, c-format @@ -3823,7 +4146,7 @@ msgstr "" #: disease.cpp msgid "Deaf" -msgstr "" +msgstr "Sordo" #: disease.cpp msgid "Dermatik eggs hatched." @@ -3836,38 +4159,44 @@ msgstr "" #: disease.cpp #, c-format msgid "Dexterity - %d" -msgstr "" +msgstr "Destrezza - %d" #: disease.cpp #, c-format msgid "Dexterity - %d; " -msgstr "" +msgstr "Destrezza - %d; " #: disease.cpp msgid "" "Dexterity - 1; Speed -10%\n" "You are being slowed by climbing over a pile of rubble." msgstr "" +"Destrezza - 1; Velocita' - 10%\n" +"Vieni rallentato mentre scali delle macerie." #: disease.cpp msgid "Dexterity - 3; Speed - 25" -msgstr "" +msgstr "Destrezza - 3; Velocita' - 25" #: disease.cpp msgid "" "Dexterity - 3; Speed -20%\n" "You are being slowed by climbing over a heap of rubble." msgstr "" +"Destrezza - 3; Velocita' -20%\n" +"Vieni rallentato mentre scali un mucchio di macerie." #: disease.cpp msgid "" "Dexterity - 5; Speed -30%\n" "You are being slowed by climbing over a mountain of rubble." msgstr "" +"Destrezza - 5; Velocita' - 30%\n" +"Vieni rallentato mentre scali una montagna di macerie." #: disease.cpp msgid "Dodge Bonus" -msgstr "" +msgstr "Bonus di Evasione" #: disease.cpp #, c-format @@ -3876,11 +4205,11 @@ msgstr "" #: disease.cpp msgid "Downed" -msgstr "" +msgstr "A terra" #: disease.cpp msgid "Drunk" -msgstr "" +msgstr "Ubriaco" #: disease.cpp msgid "Everything around you is starting to breathe." @@ -3892,7 +4221,7 @@ msgstr "" #: disease.cpp msgid "Food Poisoning" -msgstr "" +msgstr "Avvelenamento da cibo" #: disease.cpp msgid "Fractal patterns dance across your vision." @@ -3900,135 +4229,135 @@ msgstr "" #: disease.cpp msgid "Freezing arms!!" -msgstr "" +msgstr "Le braccia si stanno congelando!" #: disease.cpp msgid "Freezing face!!" -msgstr "" +msgstr "Il viso si sta' congelando!" #: disease.cpp msgid "Freezing feet!!" -msgstr "" +msgstr "I piedi si stanno congelando!" #: disease.cpp msgid "Freezing hands!!" -msgstr "" +msgstr "Le mani si stanno congelando!" #: disease.cpp msgid "Freezing head!!" -msgstr "" +msgstr "La testa si sta' congelando!" #: disease.cpp msgid "Freezing legs!!" -msgstr "" +msgstr "Le gambe si stanno congelando!" #: disease.cpp msgid "Freezing torso!!" -msgstr "" +msgstr "Il tronco si sta congelando!" #: disease.cpp msgid "Frostbite" -msgstr "" +msgstr "Assiderato" #: disease.cpp msgid "Frostbite - face" -msgstr "" +msgstr "Faccia assiderata" #: disease.cpp msgid "Frostbite - feet" -msgstr "" +msgstr "Piedi assiderati" #: disease.cpp msgid "Frostbite - hands" -msgstr "" +msgstr "Mani assiderate" #: disease.cpp msgid "Frostnip - face" -msgstr "" +msgstr "Faccia congelata" #: disease.cpp msgid "Frostnip - feet" -msgstr "" +msgstr "Piedi congelati" #: disease.cpp msgid "Frostnip - hands" -msgstr "" +msgstr "Mani congelate" #: disease.cpp msgid "Glare" -msgstr "" +msgstr "Bagliore" #: disease.cpp msgid "Glowing lights surround you, and you teleport." -msgstr "" +msgstr "Una luce ti circonda, vieni teletrasportato." #: disease.cpp msgid "Got over the cold." -msgstr "" +msgstr "Il raffreddore e' passato." #: disease.cpp msgid "Got over the flu." -msgstr "" +msgstr "La febbre e' passata." #: disease.cpp msgid "Hallucinating" -msgstr "" +msgstr "Allucinazioni" #: disease.cpp player.cpp msgid "Head" -msgstr "" +msgstr "Testa" #: disease.cpp msgid "Heavy Asthma" -msgstr "" +msgstr "Asma pesante" #: disease.cpp msgid "Heavy Bleeding - " -msgstr "" +msgstr "Sanguinamento incontrollabile - " #: disease.cpp msgid "High" -msgstr "" +msgstr "Strafatto" #: disease.cpp msgid "High on Meth" -msgstr "" +msgstr "Strafatto di metanfetamine" #: disease.cpp msgid "Hit Bonus" -msgstr "" +msgstr "Bonus di colpi" #: disease.cpp player.cpp msgid "Hot" -msgstr "" +msgstr "Caldo" #: disease.cpp msgid "Hot arms!" -msgstr "" +msgstr "Le braccia sono calde!" #: disease.cpp msgid "Hot face!" -msgstr "" +msgstr "La faccia e' calda!" #: disease.cpp msgid "Hot feet!" -msgstr "" +msgstr "I piedi sono caldi!" #: disease.cpp msgid "Hot hands!" -msgstr "" +msgstr "Le mani sono calde!" #: disease.cpp msgid "Hot head!" -msgstr "" +msgstr "La testa e' calda!" #: disease.cpp msgid "Hot legs!" -msgstr "" +msgstr "Le gambe sono calde!" #: disease.cpp msgid "Hot torso!" -msgstr "" +msgstr "Il tronco e' caldo!" #: disease.cpp msgid "" @@ -4036,6 +4365,9 @@ msgid "" "Strength - 3; Dexterity - 1; Intelligence - 2; Perception - 1\n" "Symptoms alleviated by medication (Dayquil or Nyquil)." msgstr "" +"Assetato; Tosse frequente\n" +"Forza - 3; Destrezza - 1; Intelligenza - 2; Percezione -1\n" +"Sintomi alleviati da medicinali (Dayquil o Nyquil)." #: disease.cpp msgid "" @@ -4043,14 +4375,17 @@ msgid "" "Strength - 4; Dexterity - 2; Intelligence - 2; Perception - 1\n" "Symptoms alleviated by medication (Dayquil or Nyquil)." msgstr "" +"Assetato; Tosse frequente; Vomito occasionale\n" +"Forza -4; Destrezza - 2; Intelligenza - 2; Percezione - 1\n" +"Sintomi alleviati da medicinali (Dayquil o Nyquil)." #: disease.cpp msgid "Infected - " -msgstr "" +msgstr "Infetto - " #: disease.cpp msgid "Influenza" -msgstr "" +msgstr "Influenza" #: disease.cpp msgid "Insects begin to emerge from 's skin!" @@ -4059,7 +4394,7 @@ msgstr "" #: disease.cpp #, c-format msgid "Intelligence - %d; " -msgstr "" +msgstr "Intelligenza - %d; " #: disease.cpp msgid "Intelligence - 1; Perception - 1" @@ -4067,60 +4402,64 @@ msgstr "" #: disease.cpp msgid "It is excruciating." -msgstr "" +msgstr "E' straziante." #: disease.cpp msgid "Itchy skin - " -msgstr "" +msgstr "Pelle irritata - " #: disease.cpp msgid "Left Arm" -msgstr "" +msgstr "Braccio sinistro" #: disease.cpp msgid "Left Leg" -msgstr "" +msgstr "Gamba sinistra" #: disease.cpp msgid "" "Loss of health - Entire Body\n" "Your clothing and other equipment may be consumed by the flames." msgstr "" +"Perdita di vita - corpo intero\n" +"Il tuo equipaggiamento e vestiario potrebbe essere danneggiato dalle fiamme" #: disease.cpp msgid "Meth Comedown" -msgstr "" +msgstr "Postumi da metanfetamine" #: disease.cpp msgid "None" -msgstr "" +msgstr "Nulla" #: disease.cpp msgid "On Fire" -msgstr "" +msgstr "In Fiamme" #: disease.cpp msgid "Painful Bite - " -msgstr "" +msgstr "Morso doloroso - " #: disease.cpp msgid "Partially Paralyzed" -msgstr "" +msgstr "Parzialmente paralizzato" #: disease.cpp #, c-format msgid "Perception - %d; " -msgstr "" +msgstr "Percezione - %d; " #: disease.cpp msgid "Perception - 1" -msgstr "" +msgstr "Percezione - 1" #: disease.cpp msgid "" "Perception - 1; Dexterity - 1; Strength - 2 IF not resistant\n" "Occasional pain and/or damage." msgstr "" +"Percezione - 1; Destrezza - 1; Forza - 2 SE non resistente\n" +"Dolore e/o danno occasionali." #: disease.cpp msgid "" @@ -4128,32 +4467,37 @@ msgid "" "Strength - 3 IF not resistant, -1 otherwise\n" "Frequent pain and/or damage." msgstr "" +"Percezione - 2; Destrezza - 2;\n" +"Forza - 3 Se non resistente, -1 altrimenti\n" +"Dolore e/o danno frequente" #: disease.cpp msgid "" "Perception - 5\n" "Range of Sight: 1; All sight is tinted magenta." msgstr "" +"Percezione - 5\n" +"Raggio visivo 1; Tutta la tua visuale si tinge di magenta." #: disease.cpp msgid "Poisoned" -msgstr "" +msgstr "Avvelenato" #: disease.cpp msgid "Pus Filled - " -msgstr "" +msgstr "Pieno di Pus - " #: disease.cpp msgid "Put out the fire." -msgstr "" +msgstr "Hai spento il fuoco." #: disease.cpp msgid "RELEASE THE GRACKEN!!!!" -msgstr "" +msgstr "RILASCIATE IL GRACKEN!!!!" #: disease.cpp msgid "Range of Sight: 0" -msgstr "" +msgstr "Raggio visivo: 0" #: disease.cpp msgid "Ratting" @@ -4161,83 +4505,83 @@ msgstr "" #: disease.cpp msgid "Received a deep bite wound." -msgstr "" +msgstr "Hai ricevuto un morso molto profondo." #: disease.cpp msgid "Recoverd from a bite wound." -msgstr "" +msgstr "Ti sei pienamente recuperato dal morso." #: disease.cpp msgid "Recovered from an infection... this time." -msgstr "" +msgstr "Hai soppresso l'infezione... per stavolta." #: disease.cpp msgid "Recovering From Infection" -msgstr "" +msgstr "Recuperando dall' infezione" #: disease.cpp msgid "Right Arm" -msgstr "" +msgstr "Braccio destro" #: disease.cpp msgid "Right Leg" -msgstr "" +msgstr "Gamba destra" #: disease.cpp msgid "Sap-coated" -msgstr "" +msgstr "Ricoperto di linfa" #: disease.cpp msgid "Scorching arms!!" -msgstr "" +msgstr "Le braccia sono bollenti!" #: disease.cpp msgid "Scorching face!!" -msgstr "" +msgstr "La faccia e' bollente!!" #: disease.cpp msgid "Scorching feet!!" -msgstr "" +msgstr "I piedi sono bollenti!" #: disease.cpp msgid "Scorching hands!!" -msgstr "" +msgstr "Le mani sono bollenti!!" #: disease.cpp msgid "Scorching head!!" -msgstr "" +msgstr "La testa e' bollente!" #: disease.cpp msgid "Scorching legs!!" -msgstr "" +msgstr "Le gambe sono bollenti!!" #: disease.cpp msgid "Scorching torso!!" -msgstr "" +msgstr "Il tronco e' bollente!" #: disease.cpp msgid "Shakes" -msgstr "" +msgstr "Tremiti" #: disease.cpp msgid "Slimed" -msgstr "" +msgstr "Ricoperto di melma" #: disease.cpp msgid "Slowed" -msgstr "" +msgstr "Rallentato" #: disease.cpp msgid "Sluggish" -msgstr "" +msgstr "Fiacco" #: disease.cpp faction.cpp msgid "Smoke" -msgstr "" +msgstr "Fumo" #: disease.cpp msgid "Snakebite Unlocked!" -msgstr "" +msgstr "Sbloccato lo snakebite!" #: disease.cpp msgid "Something feels very, very wrong." @@ -4245,7 +4589,7 @@ msgstr "" #: disease.cpp msgid "Sounds will not be reported. You cannot talk with NPCs." -msgstr "" +msgstr "Non riesci a emettere suoni udibili. Non puoi parlare con gli NPC." #: disease.cpp #, c-format @@ -4253,6 +4597,8 @@ msgid "" "Speed %d%%\n" "You can feel the tiny spores sinking directly into your flesh." msgstr "" +"Velocita' %d%%\n" +"Senti le piccole spore mentre entrano nella tua carne." #: disease.cpp msgid "" @@ -4277,10 +4623,13 @@ msgid "" "Your stomach is extremely upset, and you keep having pangs of pain and " "nausea." msgstr "" +"Velocita' - 35%: Forza - 3; Destrezza - 1; Percezione - 1\n" +"Il tuo stomaco e' estremamente irritato, e continui ad avere colpi di dolore " +"e nausea" #: disease.cpp msgid "Speed -40%; Dexterity - 2" -msgstr "" +msgstr "Velocita' -40%; Destrezza - 2" #: disease.cpp msgid "Speed -40; Strength - 3; Dexterity - 2; Intelligence - 2" @@ -4288,36 +4637,36 @@ msgstr "" #: disease.cpp msgid "Spontaneous teleport." -msgstr "" +msgstr "Teletrasporto spontaneo." #: disease.cpp msgid "Spore coated - " -msgstr "" +msgstr "Pieno di spore - " #: disease.cpp msgid "Spore covered" -msgstr "" +msgstr "Ricoperto di spore" #: disease.cpp msgid "Spore covered - " -msgstr "" +msgstr "Ricoperto di spore - " #: disease.cpp msgid "Spore dusted - " -msgstr "" +msgstr "Impolverato di spore - " #: disease.cpp msgid "Stem cell treatment" -msgstr "" +msgstr "Trattamento a cellule staminali" #: disease.cpp msgid "Strength + 1; " -msgstr "" +msgstr "Forza + 1; " #: disease.cpp #, c-format msgid "Strength - %d; " -msgstr "" +msgstr "Forza - %d; " #: disease.cpp msgid "" @@ -4331,14 +4680,17 @@ msgid "" "Occasionally you will cough, costing movement and creating noise.\n" "Loss of health - Torso" msgstr "" +"Forza - 1; Destrezza - 1;\n" +"Tossirai occasionalmente, rallentandoti e facendo rumore.\n" +"Pedita di vitalita' - Tronco" #: disease.cpp msgid "Strength - 1; Dexterity - 4" -msgstr "" +msgstr "Forza - 1; Destrezza - 4" #: disease.cpp msgid "Strength - 1; Dexterity - 4; Speed - 25" -msgstr "" +msgstr "Forza - 1; Destrezza - 4; Velocita' - 25" #: disease.cpp msgid "Strength - 2; Dexterity - 1; Intelligence - 1; Perception - 1" @@ -4350,18 +4702,21 @@ msgid "" "Occasionally you will cough, costing movement and creating noise.\n" "Loss of health - Torso" msgstr "" +"Forza - 2; Destrezza - 2; Intelligenza - 1; Percezione - 4\n" +"Tossirai occasionalmente, rallentandoti e facendo rumore\n" +"Perdita di vitalità - Tronco" #: disease.cpp msgid "Stuck in Pit" -msgstr "" +msgstr "Bloccato in una fossa" #: disease.cpp monster.cpp msgid "Stunned" -msgstr "" +msgstr "Stordito" #: disease.cpp msgid "Succumbed to an asthma attack." -msgstr "" +msgstr "Ceduto a causa di un' attacco d'asma." #: disease.cpp msgid "Succumbed to the infection." @@ -4369,7 +4724,7 @@ msgstr "" #: disease.cpp msgid "Tear gas" -msgstr "" +msgstr "Gas lacrimogeno" #: disease.cpp iexamine.cpp iuse.cpp monattack.cpp mondeath.cpp #, c-format @@ -4378,11 +4733,11 @@ msgstr "" #: disease.cpp msgid "The bite wound feels really deep..." -msgstr "" +msgstr "Il morso e' molto profondo..." #: disease.cpp msgid "The ceiling collapses on you!" -msgstr "" +msgstr "Il tetto collassa su di te!" #: disease.cpp msgid "The cold wakes you up." @@ -4390,7 +4745,7 @@ msgstr "" #: disease.cpp msgid "The heat is making you see things." -msgstr "" +msgstr "Il caldo ti causa delle allucinazioni." #: disease.cpp msgid "The heat wakes you up." @@ -4402,7 +4757,7 @@ msgstr "" #: disease.cpp msgid "The sunlight's glare makes it hard to see." -msgstr "" +msgstr "Il sole ti abbaglia, riducendoti la vista." #: disease.cpp msgid "The world takes on a dreamlike quality." @@ -4414,7 +4769,7 @@ msgstr "" #: disease.cpp msgid "Tipsy" -msgstr "" +msgstr "Brillo" #: disease.cpp #, c-format @@ -4423,11 +4778,11 @@ msgstr "" #: disease.cpp player.cpp msgid "Torso" -msgstr "" +msgstr "Tronco" #: disease.cpp msgid "Trashed" -msgstr "" +msgstr "Cestinato" #: disease.cpp msgid "Unleashed the Gracken." @@ -4435,55 +4790,55 @@ msgstr "" #: disease.cpp msgid "Viper Strike Unlocked!" -msgstr "" +msgstr "Sbloccato il Viper Strike!" #: disease.cpp msgid "Warm arms" -msgstr "" +msgstr "Le braccia sono tiepide" #: disease.cpp msgid "Warm face" -msgstr "" +msgstr "La faccia e' tiepida" #: disease.cpp msgid "Warm feet" -msgstr "" +msgstr "I piedi sono tiepidi" #: disease.cpp msgid "Warm hands" -msgstr "" +msgstr "Le mani sono tiepide" #: disease.cpp msgid "Warm head" -msgstr "" +msgstr "La testa e' tiepida" #: disease.cpp msgid "Warm legs" -msgstr "" +msgstr "Le gambe sono tiepide" #: disease.cpp msgid "Warm torso" -msgstr "" +msgstr "Il tronco e' tiepido" #: disease.cpp msgid "Wasted" -msgstr "" +msgstr "Sprecato" #: disease.cpp msgid "Webbed" -msgstr "" +msgstr "Palmate" #: disease.cpp msgid "Writhing skin - " -msgstr "" +msgstr "pelle storta - " #: disease.cpp msgid "You are losing blood." -msgstr "" +msgstr "Stai perdendo sangue." #: disease.cpp msgid "You are rapidly loosing blood." -msgstr "" +msgstr "Stai perdendo molto sangue." #: disease.cpp msgid "You are recovering from an infection." @@ -4491,23 +4846,23 @@ msgstr "" #: disease.cpp msgid "You are slowed by the rubble." -msgstr "" +msgstr "Vieni rallentato dalle macerie." #: disease.cpp msgid "You are slowly losing blood." -msgstr "" +msgstr "STai lentamente perdendo sangue." #: disease.cpp msgid "You are snared." -msgstr "" +msgstr "Sei in trappola." #: disease.cpp msgid "You are sweating profusely." -msgstr "" +msgstr "Stai sudando copiosamente." #: disease.cpp msgid "You attempt to free yourself from the snare." -msgstr "" +msgstr "Tenti di liberarti dalla trappola." #: disease.cpp msgid "You can barely remain standing." @@ -4515,11 +4870,11 @@ msgstr "" #: disease.cpp msgid "You can't breathe... asthma attack!" -msgstr "" +msgstr "Non riesci a respirare... attacco d'asma!" #: disease.cpp msgid "You can't look away from the faultline..." -msgstr "" +msgstr "Non riesci a distogliere lo sguardo dalla faglia..." #: disease.cpp msgid "You can't trust everything that you see." @@ -4531,23 +4886,23 @@ msgstr "" #: disease.cpp msgid "You cough noisily." -msgstr "" +msgstr "Tossisci rumorosamente." #: disease.cpp msgid "You fall asleep." -msgstr "" +msgstr "Ti addormenti." #: disease.cpp msgid "You feal nauseated and rat-like.\n" -msgstr "" +msgstr "Ti senti nauseato e simile ad un ratto.\n" #: disease.cpp msgid "You feel a cold coming on..." -msgstr "" +msgstr "Senti l'arrivo di un raffreddore..." #: disease.cpp msgid "You feel a flu coming on..." -msgstr "" +msgstr "Ti senti febbricitante..." #: disease.cpp msgid "You feel a little strange." @@ -4555,15 +4910,15 @@ msgstr "" #: disease.cpp msgid "You feel a surge of adrenaline!" -msgstr "" +msgstr "Senti una scarica di adrenalina!" #: disease.cpp msgid "You feel an urge to take more meth." -msgstr "" +msgstr "Senti l'urgenza di prendere piu' metanfetamine." #: disease.cpp msgid "You feel completely rundown." -msgstr "" +msgstr "Ti senti completamente senza forze." #: disease.cpp #, c-format @@ -4576,11 +4931,11 @@ msgstr "" #: disease.cpp msgid "You feel lightheaded." -msgstr "" +msgstr "Senti la tua testa piu leggera." #: disease.cpp msgid "You feel nauseous!" -msgstr "" +msgstr "Hai la nausea!" #: disease.cpp msgid "You feel nauseous." @@ -4600,7 +4955,7 @@ msgstr "" #: disease.cpp msgid "You gag and retch." -msgstr "" +msgstr "Ti senti male e hai dei conati di vomito." #: disease.cpp msgid "You have a nasty bite wound." @@ -4616,35 +4971,35 @@ msgstr "" #: disease.cpp msgid "You inhale a lungful of tear gas." -msgstr "" +msgstr "Inali una boccata di gas lacrimogeno." #: disease.cpp msgid "You inhale a lungful of thick smoke." -msgstr "" +msgstr "Inali una boccata di fumo denso" #: disease.cpp msgid "You lie down to go to sleep..." -msgstr "" +msgstr "Ti distendi per addormentarti..." #: disease.cpp msgid "You lose some blood." -msgstr "" +msgstr "Perdi del sangue." #: disease.cpp msgid "You nestle your pile of clothes for warmth." -msgstr "" +msgstr "Ti rifugi nella tua pila di vestiti per rimanere al caldo." #: disease.cpp msgid "You pass out." -msgstr "" +msgstr "Svieni." #: disease.cpp msgid "You receive a pureed bone & enamel injection into your eyeball." -msgstr "" +msgstr "Ricevi un'iniezione di ossa frullata e smalto nel tuo occhio." #: disease.cpp msgid "You shudder suddenly." -msgstr "" +msgstr "Senti un brivido improvviso" #: disease.cpp msgid "You smell and taste mushrooms." @@ -4653,7 +5008,7 @@ msgstr "" #: disease.cpp #, c-format msgid "You snuggle your %s to keep warm." -msgstr "" +msgstr "Ti rannicchi nel tuo %s per mantenerti caldo." #: disease.cpp msgid "You spasm suddenly!" @@ -4662,13 +5017,15 @@ msgstr "" #: disease.cpp #, c-format msgid "You start scratching your %s!" -msgstr "" +msgstr "Inizi a grattarti il tuo %s!" #: disease.cpp msgid "" "You stop to scratch yourself frequently; high intelligence helps you resist\n" "this urge.\n" msgstr "" +"Ti fermi spesso per grattarti; Un'elevata intelligenza ti aiuta a resistere\n" +"a questa necessita'.\n" #: disease.cpp msgid "You succumb to the infection." @@ -4684,20 +5041,20 @@ msgstr "" #: disease.cpp msgid "You try to sleep, but can't..." -msgstr "" +msgstr "Provi ad addormentarti, ma non ci riesci..." #: disease.cpp msgid "You turn off your alarm-clock." -msgstr "" +msgstr "Spegni la tua sveglia." #: disease.cpp #, c-format msgid "You use your %s to keep warm." -msgstr "" +msgstr "Utilizzi il tuo %s per restare al caldo." #: disease.cpp msgid "You use your pile of clothes for warmth." -msgstr "" +msgstr "Usi i tuoi vestiti per rimanere al caldo" #: disease.cpp msgid "You vomit a thick, gray goop." @@ -4717,47 +5074,47 @@ msgstr "" #: disease.cpp msgid "You wheeze and gasp for air." -msgstr "" +msgstr "Ansimi e boccheggi nel tentativo di respirare." #: disease.cpp msgid "You're blinded!" -msgstr "" +msgstr "Sei stato accecato!" #: disease.cpp msgid "You're coated in sap!" -msgstr "" +msgstr "Sei ricoperto di linfa!" #: disease.cpp msgid "You're covered in bile!" -msgstr "" +msgstr "Sei coperto di bile!" #: disease.cpp msgid "You're covered in thick goo!" -msgstr "" +msgstr "Sei coperto da uno spesso strato di goo!" #: disease.cpp msgid "You're covered in webs!" -msgstr "" +msgstr "Sei coperto di ragnatele!" #: disease.cpp msgid "You're deafened!" -msgstr "" +msgstr "Sei stato assordato!" #: disease.cpp msgid "You're getting soaked!" -msgstr "" +msgstr "Ti stai infradiciando!" #: disease.cpp msgid "You're knocked to the floor!" -msgstr "" +msgstr "Sei stato sbalzato a terra" #: disease.cpp msgid "You're knocked to the ground. You have to get up before you can move." -msgstr "" +msgstr "Sei stato gettato al suolo. Prima di poterti muovere devi alzarti." #: disease.cpp msgid "You're on fire!" -msgstr "" +msgstr "Stai andando a fuoco!" #: disease.cpp msgid "" @@ -4766,19 +5123,19 @@ msgstr "" #: disease.cpp msgid "You're stunned!" -msgstr "" +msgstr "Sei stato stordito!" #: disease.cpp msgid "You're suddenly covered in ectoplasm." -msgstr "" +msgstr "Vieni improvvisamente ricoperto di ectoplasma." #: disease.cpp msgid "You're suddenly wracked with pain and nausea!" -msgstr "" +msgstr "Sei improvvisamente colpito da dolore e nausea!" #: disease.cpp msgid "You're suddenly wracked with pain!" -msgstr "" +msgstr "Sei improvvisamente colpito da un dolore acuto." #: disease.cpp #, c-format @@ -4802,162 +5159,186 @@ msgstr "" #: disease.cpp msgid "Your adrenaline rush wears off. You feel AWFUL!" -msgstr "" +msgstr "La tua botta di adrenalina finisce, ti senti orribilmente!" #: disease.cpp msgid "" "Your arms are blistering from the intense heat. It is extremely painful." msgstr "" +"Le tue braccia sono ricoperte di vesciche a causa del calore intenso. Sono " +"estremamente dolrose." #: disease.cpp msgid "Your arms are dangerously cold. Your arms are shivering uncontrollably" msgstr "" +"Le tue braccia sono pericolasamente fredde. Esse tremano senza controllo" #: disease.cpp msgid "Your arms are exposed to the cold." -msgstr "" +msgstr "Le tue braccia sono esposte al freddo." #: disease.cpp msgid "" "Your arms are frostbitten from prolonged exposure to the cold. It is " "extremely painful." msgstr "" +"Le tue braccia sono assiderate dalla continua esposizione al freddo. I " +"tessuti delle braccia sono congelati." #: disease.cpp msgid "Your arms are shivering." -msgstr "" +msgstr "Le tue braccia sono scosse da brividi." #: disease.cpp msgid "Your arms are sweating from the heat." -msgstr "" +msgstr "le tue braccia stanno sudando dal calore." #: disease.cpp msgid "" "Your arms are sweating profusely. Your muscles are in pain due to cramps." msgstr "" +"Le tue braccia stanno sudando copiosamente. I tuoi muscoli hanno dei crampi " +"dolorosissimi." #: disease.cpp msgid "Your arms are very exposed to the cold. Your arms are shivering." -msgstr "" +msgstr "Le tue braccia sono molto esposte al freddo. Le tue braccia tremano." #: disease.cpp msgid "Your arms feel warm." -msgstr "" +msgstr "Le tue braccia sono accaldate." #: disease.cpp msgid "" "Your asthma overcomes you.\n" "You asphixiate." msgstr "" +"L' asma ti sopraffae.\n" +"Sei colto dall'asfissia." #: disease.cpp msgid "Your bite wound feels infected" -msgstr "" +msgstr "Senti il morso infettarsi" #: disease.cpp msgid "Your bones feel like rubber as they melt and remend." -msgstr "" +msgstr "Senti le tue ossa come fatte di gomma." #: disease.cpp msgid "Your bones feel like they're crumbling." -msgstr "" +msgstr "Senti come se le tue ossa stessero crollando." #: disease.cpp msgid "Your face feels numb." -msgstr "" +msgstr "La tua faccia si intorpidisce." #: disease.cpp msgid "Your face feels warm." -msgstr "" +msgstr "La tua faccia e' accaldata" #: disease.cpp msgid "Your face is blistering from the intense heat. It is extremely painful." msgstr "" +"La tua faccia si sta ricoprendo di vesciche a causa del calore intenso. Sono " +"estremamente dolorose." #: disease.cpp msgid "Your face is dangerously cold." -msgstr "" +msgstr "Il tuo viso e' pericolosamente freddo." #: disease.cpp msgid "Your face is exposed to the cold." -msgstr "" +msgstr "Il tuoviso e' esposto al freddo" #: disease.cpp msgid "" "Your face is frostbitten from the prolonged exposure to the cold. The " "tissues in your face are frozen." msgstr "" +"La tua faccia e' assiderata dalla continua esposizione al freddo. I tessuti " +"facciali sono congelati." #: disease.cpp msgid "" "Your face is frostnipped from the prolonged exposure to the cold and has " "gone numb. When the blood begins to flow, it will be painful." msgstr "" +"La tua faccia e' congelata dalla continua esposizione al freddo e quindi si " +"e' intorpidita. Quando il sangue ricomincera' a scorrere saranno dolori." #: disease.cpp msgid "Your face is stiff from the cold." -msgstr "" +msgstr "La tua faccia e' rigida a causa del freddo." #: disease.cpp msgid "Your face is sweating from the heat, making it hard to see." msgstr "" +"La tua faccia sta sudando a causa del calore, rendendo difficilere vedere " +"intorno a se'." #: disease.cpp msgid "Your face is sweating profusely, making it hard to see." -msgstr "" +msgstr "La tua faccia sta sudando copiosamente, impedendoti di vedere bene." #: disease.cpp msgid "Your face is very exposed to the cold." -msgstr "" +msgstr "Il tuo viso e' molto esposto al freddo." #: disease.cpp msgid "" "Your feet are blistering from the intense heat. It is extremely painful." msgstr "" +"I tuoi piedi sono ricoperti di vesciche a causa del calore intenso. Sono " +"estremamente dolorose." #: disease.cpp msgid "Your feet are dangerously cold. Your strength is sapped." -msgstr "" +msgstr "I tuoi piedi sono pericolosamente freddi. La tua forza e' ridotta." #: disease.cpp msgid "Your feet are exposed to the cold." -msgstr "" +msgstr "I tuoi piedi sono esposti al freddo." #: disease.cpp msgid "" "Your feet are frostbitten from the prolonged exposure to the cold. The " "tissues in your feet are frozen." msgstr "" +"I tuoi piedi sono assiderati dall'esposizione prolungata al freddo. I " +"tessuti dei tuoi piedi sono congelati." #: disease.cpp msgid "" "Your feet are frostnipped from the prolonged exposure to the cold and have " "gone numb. When the blood begins to flow, it will be painful." msgstr "" +"I tuoi piedi sono congelati a causa dell' esposizione prolungata al freddo e " +"ora sono intorpiditi. quando il sangue ricominciera' a scorrere saranno " +"dolori." #: disease.cpp msgid "Your feet are painfully swollen due to the heat." -msgstr "" +msgstr "I tuoi piedi sono dolorosamente gonfi a causa del caldo." #: disease.cpp msgid "Your feet are swelling in the heat." -msgstr "" +msgstr "I tuoi piedi si stanno gonfiando per colpa del calore" #: disease.cpp msgid "Your feet are very exposed to the cold. Your strength is sapped." -msgstr "" +msgstr "I tuoi piedi sono molto esposti al freddo. La tua forza e' ridotta." #: disease.cpp msgid "Your feet feel frigid." -msgstr "" +msgstr "Senti i tuoi piedi irrigidirsi." #: disease.cpp msgid "Your feet feel warm." -msgstr "" +msgstr "I tuoi piedi sono accaldati." #: disease.cpp msgid "Your fingers itch." -msgstr "" +msgstr "Le tue dita prudono." #: disease.cpp msgid "Your flesh crawls; insects tear through the flesh and begin to emerge!" @@ -4967,30 +5348,37 @@ msgstr "" msgid "" "Your hands are blistering from the intense heat. It is extremely painful." msgstr "" +"Le tue mani sono ricoperte di vesciche a causa del calore intenso. Sono " +"estremamente dolorose." #: disease.cpp msgid "Your hands are exposed to the cold." -msgstr "" +msgstr "Le tue mani sono esposte al freddo." #: disease.cpp msgid "" "Your hands are frostbitten from the prolonged exposure to the cold. The " "tissues in your hands are frozen." msgstr "" +"Le tue mani sono assiderate dalla prolungata esposizione al freddo. Il " +"tessuti della mano sono congelati." #: disease.cpp msgid "" "Your hands are frostnipped from the prolonged exposure to the cold and have " "gone numb. When the blood begins to flow, it will be painful." msgstr "" +"Le tue mani sono congelate a causa della continua esposizione al freddo ed " +"ora sono intorpidite. Quando il sangue ricomincera' a scorrere sara' " +"doloroso." #: disease.cpp msgid "Your hands are shivering from the cold." -msgstr "" +msgstr "Le tue mani tremano dal freddo." #: disease.cpp msgid "Your hands are shivering uncontrollably from the extreme cold." -msgstr "" +msgstr "Le tue mani tremano incontrollabilmente a causa del freddo estremo." #: disease.cpp msgid "Your hands bulge. Fungus stalks burst through the bulge!" @@ -4998,54 +5386,59 @@ msgstr "" #: disease.cpp msgid "Your hands feel disgustinly hot and are very uncoordinated." -msgstr "" +msgstr "Le tue mani sono estremamente calde e scoordinate." #: disease.cpp msgid "Your hands feel hot and uncoordinated." -msgstr "" +msgstr "Le tue mani sono molto calde e poco coordinate" #: disease.cpp msgid "Your hands feel like ice." -msgstr "" +msgstr "Le tue mani sono ghiacciate." #: disease.cpp msgid "Your hands feel warm." -msgstr "" +msgstr "Le tue mani sono accaldate." #: disease.cpp msgid "Your head aches." -msgstr "" +msgstr "Hai male alla testa." #: disease.cpp msgid "Your head feels warm." -msgstr "" +msgstr "La tua testa e' accaldata." #: disease.cpp msgid "Your head is exposed to the cold." -msgstr "" +msgstr "La tua testa e' esposta al freddo." #: disease.cpp msgid "Your head is extremely cold. You can barely think straight." msgstr "" +"La tua testa e' estremamente fredda. Riesci a malapena a pensare " +"razionalmente." #: disease.cpp msgid "Your head is pounding from the heat." -msgstr "" +msgstr "La tua testa sta scoppiando dal caldo." #: disease.cpp msgid "" "Your head is sweating from the heat. You feel nauseated. You have a headache." -msgstr "" +msgstr "La tua testa sta sudando dal caldo. Provi nausea. Accusi mal di testa." #: disease.cpp msgid "" "Your head is sweating profusely. You feel very nauseated. You have a " "headache." msgstr "" +"La tua testa sta sudando copiosamente. Ti sneti molto nauseato. Accusi un " +"forte mal di testa." #: disease.cpp msgid "Your head is very exposed to the cold. It is hard to concentrate." msgstr "" +"La tua testa e' molto esposta al freddo. Concentrarsi risulta difficile." #: disease.cpp msgid "Your healing wound feels swollen and painful." @@ -5059,54 +5452,62 @@ msgstr "" msgid "" "Your insides are shifting in strange ways as the treatment takes effect." msgstr "" +"Le tue interiora si contorcono in modo strano mente il trattamento fa' " +"effetto." #: disease.cpp msgid "" "Your legs are blistering from the intense heat. It is extremely painful." msgstr "" +"Le tue gambe sono ricoperte di vesciche a causa del calore intenso. Sono " +"estremamente dolorose." #: disease.cpp msgid "Your legs are cramping up." -msgstr "" +msgstr "Le tue gamebe sono colpite da dei crampi." #: disease.cpp msgid "Your legs are dangerously cold. Your strength is sapped." -msgstr "" +msgstr "Le tue gambe sono pericolosamente fredde. La tua forza e' ridotta." #: disease.cpp msgid "Your legs are exposed to the cold." -msgstr "" +msgstr "Le tue gambe sono esposte al freddo." #: disease.cpp msgid "" "Your legs are frostbitten from prolonged exposure to the cold. It is " "extremely painful." msgstr "" +"Le tue gambe sono assiderate dalla continua esposizione al freddo. I delle " +"gambe sono congelati." #: disease.cpp msgid "Your legs are sweating from the heat." -msgstr "" +msgstr "Le tue gambe stanno sudando a causa del calore" #: disease.cpp msgid "" "Your legs are sweating profusely. Your muscles are in pain due to cramps." msgstr "" +"Le tue gambe stanno sudando copiosamente. I tuoi muscoli hanno dei crampi " +"molto dolorsi." #: disease.cpp msgid "Your legs are very exposed to the cold. Your strength is sapped." -msgstr "" +msgstr "Le tue gambe sono molto esposte al freddo. La tua forza e' ridotta." #: disease.cpp msgid "Your legs feel warm." -msgstr "" +msgstr "Le tue gambe sono accaldate." #: disease.cpp msgid "Your legs tremble against the relentless cold." -msgstr "" +msgstr "Le tue gambe tremano a causa del freddo implacabile." #: disease.cpp msgid "Your movement is randomized." -msgstr "" +msgstr "Il tuo movimento diventa casuale." #: disease.cpp msgid "" @@ -5124,60 +5525,68 @@ msgstr "" #: disease.cpp msgid "Your skin feels extremely itchy!" -msgstr "" +msgstr "La tua pelle e' estremamente pruriginosa!" #: disease.cpp msgid "Your thoughts are unclear." -msgstr "" +msgstr "I tuoi pensieri sono poco chiari." #: disease.cpp msgid "Your toes itch." -msgstr "" +msgstr "Le tue dita dei piedi prudono." #: disease.cpp msgid "Your torso feels warm." -msgstr "" +msgstr "Il tuo tronco e' accaldato." #: disease.cpp msgid "" "Your torso is blistering from the intense heat. It is extremely painful." msgstr "" +"Il tuo tronco e' ricoperto di vesciche a causa del calore intenso. Sono " +"estremamente dolorose." #: disease.cpp msgid "Your torso is dangerously cold. Your actions are very incoordinated." msgstr "" +"Il tuo tronco e' pericolosamente raffreddato. Le tue azioni sono molto " +"scoordinate." #: disease.cpp msgid "Your torso is exposed to the cold." -msgstr "" +msgstr "Il tuo tronco e' esposto al freddo." #: disease.cpp msgid "" "Your torso is freezing cold. You should " "put on a few more layers." -msgstr "" +msgstr "Il tuo tronco e' estremamente freddo, copriti un po' di piu." #: disease.cpp msgid "" "Your torso is frostbitten from prolonged exposure to the cold. It is " "extremely painful." msgstr "" +"Il tu tronco e' assiderato dalla continua esposizione al freddo. I tessuti " +"del tronco sono congelati." #: disease.cpp msgid "Your torso is sweating from the heat. You feel weak." -msgstr "" +msgstr "Il tuo tronco sta sudando dal calore. Ti senti debole." #: disease.cpp msgid "Your torso is sweating profusely. You feel very weak." msgstr "" +"Il tuo tronco sta sudando copiosamente dal calore. Ti senti estremamente " +"debole." #: disease.cpp msgid "Your torso is very cold, and your actions are incoordinated." -msgstr "" +msgstr "Il tuo tronco e' molto freddo, le tue azioni sono poco coordinate." #: disease.cpp msgid "Your vision is filled with bright lights..." -msgstr "" +msgstr "Il tuo campo visivo e' pieno di luci brillanti." #: disease.cpp msgid "a hacking cough." @@ -5185,11 +5594,11 @@ msgstr "" #: disease.cpp monattack.cpp msgid "beep-beep-beep!" -msgstr "" +msgstr "beep-beep-beep!" #: disease.cpp msgid "loud coughing." -msgstr "" +msgstr "Tossisci fortemente." #: editmap.cpp msgid " [indoors]" @@ -8527,9 +8936,8 @@ msgid "You fall on the ground for %d damage." msgstr "" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "Hai bisogno di un pò di crack" +msgstr "" #: game.cpp #, c-format @@ -11299,6 +11707,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11822,6 +12234,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12702,6 +13118,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -12854,6 +13276,10 @@ msgstr "" msgid "You damage your %s!" msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "" @@ -12967,6 +13393,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -12987,6 +13417,10 @@ msgstr "" msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "" @@ -13134,6 +13568,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -14604,6 +15042,10 @@ msgstr "" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14655,6 +15097,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14672,6 +15120,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14680,6 +15132,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14688,6 +15149,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14704,6 +15170,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14729,10 +15199,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14746,6 +15226,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14798,6 +15283,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14810,6 +15305,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14830,10 +15330,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -14882,6 +15390,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -14891,10 +15403,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -15872,6 +16392,14 @@ msgstr "" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -16913,6 +17441,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17274,6 +17808,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17312,6 +17853,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17592,6 +18139,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -17987,6 +18540,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -17999,6 +18566,12 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18511,6 +19084,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18668,6 +19255,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -18691,6 +19286,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -18912,6 +19513,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19055,7 +19662,7 @@ msgstr "" #: lang/json/json_items.py msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" @@ -19864,6 +20471,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21114,6 +21725,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21145,6 +21762,13 @@ msgstr "" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -21496,6 +22120,18 @@ msgstr "" msgid "PDA - Flashlight" msgstr "" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -21684,6 +22320,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -22581,6 +23223,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -22677,6 +23325,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23676,6 +24330,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24270,6 +24930,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -24513,6 +25187,12 @@ msgstr "" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -24632,6 +25312,10 @@ msgstr "" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "" @@ -25336,6 +26020,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "" @@ -25492,6 +26180,10 @@ msgstr "" msgid "compound bow" msgstr "" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "" @@ -25580,6 +26272,10 @@ msgstr "" msgid "cotton hat" msgstr "" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "" @@ -25624,6 +26320,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "" @@ -25856,6 +26556,10 @@ msgstr "" msgid "feather" msgstr "" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26128,6 +26832,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "" @@ -26228,6 +26936,10 @@ msgstr "" msgid "glowstick" msgstr "" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -26292,6 +27004,10 @@ msgstr "" msgid "hand press & die set" msgstr "" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -26432,6 +27148,10 @@ msgstr "" msgid "holster" msgstr "" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "" @@ -26688,6 +27408,10 @@ msgstr "" msgid "leather jacket" msgstr "" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "" @@ -26784,6 +27508,10 @@ msgstr "" msgid "log" msgstr "" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "" @@ -26844,6 +27572,10 @@ msgstr "" msgid "makeshift halberd" msgstr "" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "" @@ -26916,6 +27648,10 @@ msgstr "" msgid "medical gloves" msgstr "" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "" @@ -27092,6 +27828,10 @@ msgstr "" msgid "nail gun" msgstr "" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -27616,6 +28356,10 @@ msgstr "" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "" @@ -27912,6 +28656,10 @@ msgstr "" msgid "sharpened metal arrow" msgstr "" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "" @@ -28228,6 +28976,10 @@ msgstr "" msgid "steel plating" msgstr "" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -28461,9 +29213,8 @@ msgid "tea leaves" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "armi" +msgstr "" #: lang/json/json_items.py msgid "teargas canister" @@ -28477,6 +29228,10 @@ msgstr "" msgid "television" msgstr "" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "" @@ -29017,6 +29772,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29244,6 +30008,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -29252,6 +30024,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -29528,8 +30309,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -33081,6 +33863,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -33269,6 +34059,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -33634,6 +34428,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34087,6 +34887,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34202,6 +35009,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -45008,6 +45821,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45028,6 +45850,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45038,11 +45864,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45053,6 +45904,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45068,21 +45933,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45098,6 +45993,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45113,14 +46018,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45129,10 +46079,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45141,6 +46131,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45171,6 +46166,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45186,11 +46201,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45201,21 +46231,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45231,11 +46299,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45246,6 +46328,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47224,6 +48311,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -47510,6 +48607,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49142,6 +50244,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -53525,7 +54632,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -53579,7 +54686,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "" @@ -54057,10 +55164,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -54508,6 +55611,11 @@ msgstr "" msgid "Weapon: %s" msgstr "" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -54709,7 +55817,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55115,6 +56223,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" diff --git a/lang/po/ja.po b/lang/po/ja.po index 9b8d0e078d548..534544d191487 100644 --- a/lang/po/ja.po +++ b/lang/po/ja.po @@ -1,22 +1,22 @@ -# Japanese translations for PACKAGE package. -# Copyright (C) 2013 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# , 2013. +# Japanese translation for cdda +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the cdda package. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: 0.7-git\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-04 17:36+0000\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-14 00:36+0000\n" "Last-Translator: TEATIME \n" -"Language-Team: Japanese\n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:26+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:29+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -3720,7 +3720,7 @@ msgstr "胆汁まみれ" #: disease.cpp msgid "Bugs in skin - " -msgstr "" +msgstr "皮膚(虫) - " #: disease.cpp msgid "Caught a cold." @@ -3808,7 +3808,7 @@ msgstr "風邪" #: disease.cpp msgid "Completely Paralyzed" -msgstr "" +msgstr "麻痺(全身)" #: disease.cpp msgid "Contracted a fungal infection." @@ -4081,7 +4081,7 @@ msgstr "" #: disease.cpp msgid "Itchy skin - " -msgstr "" +msgstr "皮膚(痒い) - " #: disease.cpp msgid "Left Arm" @@ -4117,7 +4117,7 @@ msgstr "痛む咬傷 - " #: disease.cpp msgid "Partially Paralyzed" -msgstr "" +msgstr "麻痺(一部)" #: disease.cpp #, c-format @@ -4243,11 +4243,11 @@ msgstr "粘液まみれ" #: disease.cpp msgid "Slowed" -msgstr "" +msgstr "緩慢" #: disease.cpp msgid "Sluggish" -msgstr "" +msgstr "鈍重" #: disease.cpp faction.cpp msgid "Smoke" @@ -4314,7 +4314,7 @@ msgstr "速度 -40 / 筋力 -3 / 器用 -2 / 知性 -2" #: disease.cpp msgid "Spontaneous teleport." -msgstr "自発的な瞬間移動を行った。" +msgstr "自発的な瞬間移動を行いました。" #: disease.cpp msgid "Spore coated - " @@ -4408,7 +4408,7 @@ msgstr "催涙ガス" #: disease.cpp iexamine.cpp iuse.cpp monattack.cpp mondeath.cpp #, c-format msgid "The %s is covered in tiny spores!" -msgstr "%sは微量の胞子に覆われた!" +msgstr "%sは微量の胞子に覆われました!" #: disease.cpp msgid "The bite wound feels really deep..." @@ -4420,7 +4420,7 @@ msgstr "" #: disease.cpp msgid "The cold wakes you up." -msgstr "寒くて目が覚めた。" +msgstr "寒さで目が覚めました。" #: disease.cpp msgid "The heat is making you see things." @@ -4428,11 +4428,11 @@ msgstr "熱で変なものが見えています。" #: disease.cpp msgid "The heat wakes you up." -msgstr "暑さで目が覚めた。" +msgstr "暑さで目が覚めました。" #: disease.cpp msgid "The light wakes you up." -msgstr "眩しくて目が覚めた。" +msgstr "眩しさで目が覚めました。" #: disease.cpp msgid "The sunlight's glare makes it hard to see." @@ -4509,7 +4509,7 @@ msgstr "蜘蛛の巣まみれ" #: disease.cpp msgid "Writhing skin - " -msgstr "" +msgstr "皮膚(蠕動) - " #: disease.cpp msgid "You are losing blood." @@ -4537,7 +4537,7 @@ msgstr "罠にかかりました。" #: disease.cpp msgid "You are sweating profusely." -msgstr "すごい汗の量だ。" +msgstr "大量の汗をかいています。" #: disease.cpp msgid "You attempt to free yourself from the snare." @@ -4602,11 +4602,11 @@ msgstr "くたくたに疲れ切った。" #: disease.cpp #, c-format msgid "You feel feverish and nauseous, your %s wound has begun to turn green." -msgstr "熱と吐き気がする。%sは緑色になり始めた。" +msgstr "熱と吐き気がします。%sは緑色になり始めました。" #: disease.cpp msgid "You feel feverish and nauseous." -msgstr "熱と吐き気がする。" +msgstr "熱と吐き気がします。" #: disease.cpp msgid "You feel lightheaded." @@ -4642,7 +4642,7 @@ msgstr "厄介な咬み傷に苦しんでいます。" #: disease.cpp msgid "You have a sudden nostalgic feeling." -msgstr "郷愁の念にかられた。" +msgstr "郷愁の念に駆られました。" #: disease.cpp msgid "You have an infected wound." @@ -4682,7 +4682,7 @@ msgstr "急に身震いしました。" #: disease.cpp msgid "You smell and taste mushrooms." -msgstr "茸の味と匂いがする。" +msgstr "茸の味と匂いがします。" #: disease.cpp #, c-format @@ -4706,7 +4706,7 @@ msgstr "" #: disease.cpp msgid "You succumb to the infection." -msgstr "あなたは感染症に屈しました。" +msgstr "身体が感染症に屈しました。" #: disease.cpp msgid "You toss and turn in the heat." @@ -4718,11 +4718,11 @@ msgstr "" #: disease.cpp msgid "You try to sleep, but can't..." -msgstr "眠ろうとしているが眠れない…。" +msgstr "眠ろうとしているが眠れない..." #: disease.cpp msgid "You turn off your alarm-clock." -msgstr "" +msgstr "目覚まし時計をオフにしました。" #: disease.cpp #, c-format @@ -4743,11 +4743,11 @@ msgstr "何千という生きた胞子を吐き出しました!" #: disease.cpp msgid "You wake up coughing." -msgstr "咳で目が覚めた。" +msgstr "咳で目が覚めました。" #: disease.cpp msgid "You wake up." -msgstr "目が覚めた。" +msgstr "目が覚めました。" #: disease.cpp msgid "You wheeze and gasp for air." @@ -4865,12 +4865,12 @@ msgstr "腕の震えが止まらない。" #: disease.cpp msgid "Your arms are sweating from the heat." -msgstr "腕が熱さで汗をかいています。" +msgstr "熱さで腕に汗をかいています。" #: disease.cpp msgid "" "Your arms are sweating profusely. Your muscles are in pain due to cramps." -msgstr "腕から大量の汗が流れています。筋肉が痙攣を起こして痛みが走る。" +msgstr "腕に大量の汗をかいています。筋肉が痙攣を起こして痛みが走る。" #: disease.cpp msgid "Your arms are very exposed to the cold. Your arms are shivering." @@ -4942,11 +4942,11 @@ msgstr "顔が寒さで硬直しています。" #: disease.cpp msgid "Your face is sweating from the heat, making it hard to see." -msgstr "顔が熱さで汗をかいています。汗により視認が難しくなる。" +msgstr "熱さで顔に汗をかいています。汗により視認が難しくなる。" #: disease.cpp msgid "Your face is sweating profusely, making it hard to see." -msgstr "顔から大量の汗が流れています。汗により視認が難しくなる。" +msgstr "顔に大量の汗をかいています。汗により視認が難しくなる。" #: disease.cpp msgid "Your face is very exposed to the cold." @@ -5003,7 +5003,7 @@ msgstr "足が熱い。" #: disease.cpp msgid "Your fingers itch." -msgstr "指がかゆい。" +msgstr "指が痒い。" #: disease.cpp msgid "Your flesh crawls; insects tear through the flesh and begin to emerge!" @@ -5080,18 +5080,18 @@ msgstr "頭が非常に冷たくなっています。辛うじて正しい判断 #: disease.cpp msgid "Your head is pounding from the heat." -msgstr "熱で頭がガンガンする。" +msgstr "熱で頭がガンガンします。" #: disease.cpp msgid "" "Your head is sweating from the heat. You feel nauseated. You have a headache." -msgstr "頭が熱さで汗をかいています。吐き気と頭痛がする。" +msgstr "熱さで頭に汗をかいています。吐き気と頭痛がする。" #: disease.cpp msgid "" "Your head is sweating profusely. You feel very nauseated. You have a " "headache." -msgstr "頭から大量の汗が流れています。酷い吐き気と頭痛がする。" +msgstr "頭に大量の汗をかいています。酷い吐き気と頭痛がする。" #: disease.cpp msgid "Your head is very exposed to the cold. It is hard to concentrate." @@ -5135,12 +5135,12 @@ msgstr "脚が長い間冷気に晒された事によって、凍傷になりま #: disease.cpp msgid "Your legs are sweating from the heat." -msgstr "脚が熱さで汗をかいています。" +msgstr "熱さで脚に汗をかいています。" #: disease.cpp msgid "" "Your legs are sweating profusely. Your muscles are in pain due to cramps." -msgstr "脚から大量の汗が流れています。筋肉が痙攣を起こして痛みが走る。" +msgstr "脚に大量の汗をかいています。筋肉が痙攣を起こして痛みが走る。" #: disease.cpp msgid "Your legs are very exposed to the cold. Your strength is sapped." @@ -5182,7 +5182,7 @@ msgstr "思考がはっきりしていない。" #: disease.cpp msgid "Your toes itch." -msgstr "つま先がかゆい。" +msgstr "つま先が痒い。" #: disease.cpp msgid "Your torso feels warm." @@ -5215,11 +5215,11 @@ msgstr "胴体が長い間冷気に晒された事によって、凍傷になり #: disease.cpp msgid "Your torso is sweating from the heat. You feel weak." -msgstr "胴体が熱さで汗をかいています。身体が弱っている。" +msgstr "熱さで胴体に汗をかいています。身体が弱っている。" #: disease.cpp msgid "Your torso is sweating profusely. You feel very weak." -msgstr "胴体から大量の汗が流れています。身体がかなり弱っている。" +msgstr "胴体に大量の汗をかいています。身体がかなり弱っている。" #: disease.cpp msgid "Your torso is very cold, and your actions are incoordinated." @@ -5256,12 +5256,12 @@ msgstr " [車両]" #: editmap.cpp #, c-format msgid "%d: %s; movecost %d" -msgstr "" +msgstr "%d: %s; 移動コスト %d" #: editmap.cpp #, c-format msgid "%d: %s; movecost %d movestr %d" -msgstr "" +msgstr "%d: %s; 移動コスト %d 移動力 %d" #: editmap.cpp msgid "-clear-" @@ -5303,7 +5303,7 @@ msgstr "" #: editmap.cpp #, c-format msgid "field: %s (%d) density %d age %d" -msgstr "" +msgstr "フィールド: %s(%d) 密度 %d 年 %d" #: editmap.cpp #, c-format @@ -5313,7 +5313,7 @@ msgstr "移動コスト %d" #: editmap.cpp #, c-format msgid "trap: %s (%d)" -msgstr "罠: %s (%d)" +msgstr "罠: %s(%d)" #: event.cpp msgid "An eyebot swoops down nearby!" @@ -5794,7 +5794,7 @@ msgstr "" #: faction.cpp msgid "Bandits" -msgstr "" +msgstr "強盗" #: faction.cpp msgid "Beloved" @@ -5938,7 +5938,7 @@ msgstr "" #: faction.cpp msgid "Fists" -msgstr "" +msgstr "拳" #: faction.cpp msgid "Folk" @@ -5950,7 +5950,7 @@ msgstr "" #: faction.cpp msgid "Furies" -msgstr "" +msgstr "怨霊" #: faction.cpp msgid "Gang" @@ -6162,7 +6162,7 @@ msgstr "" #: faction.cpp msgid "Rats" -msgstr "" +msgstr "鼠" #: faction.cpp msgid "Republic" @@ -6198,7 +6198,7 @@ msgstr "" #: faction.cpp msgid "Shadows" -msgstr "" +msgstr "影" #: faction.cpp msgid "Sharks" @@ -6218,11 +6218,11 @@ msgstr "スレイヤー" #: faction.cpp msgid "Snakes" -msgstr "" +msgstr "蛇" #: faction.cpp msgid "Snipers" -msgstr "" +msgstr "狙撃手" #: faction.cpp msgid "Society" @@ -6242,7 +6242,7 @@ msgstr "" #: faction.cpp msgid "Stalkers" -msgstr "" +msgstr "ストーカー" #: faction.cpp msgid "State" @@ -7504,9 +7504,8 @@ msgid "Maybe you should find something new to read..." msgstr "" #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "顔が非常に冷たくなっています。" +msgstr "" #: game.cpp msgid "Monster spotted!" @@ -8577,9 +8576,8 @@ msgid "You fall on the ground for %d damage." msgstr "地面に落下して%dのダメージを受けました。" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "2日間も寝ていない!" +msgstr "" #: game.cpp #, c-format @@ -11638,6 +11636,10 @@ msgstr "材料" msgid "corpse" msgstr "死体" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "チラシ" @@ -11711,9 +11713,8 @@ msgid "shot" msgstr "弾薬 (散弾/バックショット)" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "信号受信器" +msgstr "閃光信号弾" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -12166,6 +12167,10 @@ msgstr "巨大蝿が現れた!" msgid "Giant wasps appear!" msgstr "巨大雀蜂が現れた!" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12350,9 +12355,8 @@ msgid "Put a knife in the boot" msgstr "ブーツにナイフを仕舞う" #: iuse.cpp -#, fuzzy msgid "Put the cat food where?" -msgstr "どこにドックフードを置きますか?" +msgstr "" #: iuse.cpp msgid "Put the dog food where?" @@ -12647,9 +12651,8 @@ msgid "The fabric of space seems to decay." msgstr "" #: iuse.cpp -#, fuzzy msgid "The flare sputters out." -msgstr "松明は燃え尽きた。" +msgstr "" #: iuse.cpp msgid "The flashlight flicks off." @@ -12693,7 +12696,7 @@ msgstr "放射能測定器のLED液晶画面のスイッチを切った。" #: iuse.cpp msgid "The geiger counter's scan LED flicks on." -msgstr "放射能測定器のLED液晶画面のスイッチを入れた。" +msgstr "放射能測定器のLED液晶画面のスイッチを入れました。" #: iuse.cpp msgid "The glowstick fades out." @@ -13048,6 +13051,12 @@ msgstr "地雷を埋めた。" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -13126,9 +13135,8 @@ msgid "You can't see to sew!" msgstr "暗くて裁縫できない!" #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "サイリウムを消す事は出来ない。" +msgstr "" #: iuse.cpp msgid "You can't turn off a glowstick." @@ -13158,9 +13166,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "自身を焼灼しました。それは地獄の様な痛みだ!" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "%sを食べた。" +msgstr "" #: iuse.cpp msgid "You churn up the earth here." @@ -13201,6 +13209,10 @@ msgstr "" msgid "You damage your %s!" msgstr "%sを傷つけた!" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "壊してしまった!" @@ -13314,6 +13326,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "とても眠い…" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -13334,6 +13350,10 @@ msgstr "食料を温めた。" msgid "You honk the bicycle horn." msgstr "自転車のベルを鳴らしました。" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "ワクチンを注射しました。" @@ -13481,6 +13501,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -13714,9 +13738,8 @@ msgid "You snort some crystal meth." msgstr "" #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "地面に全てのドッグフードをばら撒いた。" +msgstr "" #: iuse.cpp msgid "You spill the dogfood all over the ground." @@ -13735,9 +13758,8 @@ msgid "You stop the bleeding." msgstr "止血しました。" #: iuse.cpp -#, fuzzy msgid "You strike your flare and light it." -msgstr "ライターなど火をつけるものが必要だ。" +msgstr "" #: iuse.cpp msgid "You string up the tripwire." @@ -14986,8 +15008,8 @@ msgid "" "you start to forget a skill, you have a chance at retaining all knowledge, " "at the cost of a small amount of power." msgstr "" -"あなたの記憶容量は小さな量子記録ドライブで 拡張されます。\n" -"スキルを忘れる時、あなたは最小限の力で すべての知識を保持することが出来ます。" +"記憶容量が小型量子記録ドライブによって拡張されます。\r\n" +"スキルを忘れる時には最小限の力で全知識を保持する事が出来ます。" #: lang/json/json_bionics.py msgid "" @@ -15031,6 +15053,10 @@ msgstr "視力が大幅に強化されました。 感覚に+2のボーナスを msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -15082,6 +15108,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -15099,6 +15131,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -15107,6 +15143,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -15115,6 +15160,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -15131,6 +15181,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -15156,10 +15210,20 @@ msgstr "太陽が照り付ける岩の上で日光浴する嫌な夢を見まし msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -15173,6 +15237,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "動物に関する奇妙な夢に苦しんでいます。" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "鳥に関する奇妙な夢に苦しんでいます。" @@ -15225,6 +15294,16 @@ msgstr "汚泥の中で生活する奇妙な夢に苦しんでいます。" msgid "You have a strange dream of spinning webs" msgstr "蜘蛛の巣で簀巻きにされる奇妙な夢に苦しんでいます。" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -15237,6 +15316,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -15257,10 +15341,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -15309,6 +15401,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -15318,10 +15414,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -16299,6 +16403,14 @@ msgstr "弾薬 (10mm/オート)" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "木刀" @@ -17394,6 +17506,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "毛皮のコート。とても暖かい。" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17779,6 +17897,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "電磁石の力で投射物を撃ち出す銃。UPSで動作する。" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17817,6 +17942,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "銃身に取り付けるクロスボウ。" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -18052,11 +18183,10 @@ msgstr "" "あなたは同様の物をフェンスから見つけられます。" #: lang/json/json_items.py -#, fuzzy msgid "" "A light and breezy cotton dress. Though cool and comfortable to wear, it " "lacks any storage space." -msgstr "綿製のロングドレス。動き難く、ポケットなどもない。" +msgstr "" #: lang/json/json_items.py msgid "A light vest covered in pockets and straps for storage." @@ -18125,6 +18255,12 @@ msgstr "" "30フィート(約9m)のナイロンロープ。\r\n" "落下から自身の安全を確保するのに役立ちます。" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18558,6 +18694,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "踵の高いヒールです。歩く事さえ困難でしょう。" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "ジーンズより少し暖かいカーキ色のズボンです。" @@ -18570,6 +18720,12 @@ msgstr "カーキ色の丈の短いパンツです。" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18658,11 +18814,10 @@ msgid "A pair of soft neoprene arm sleeves, often used in contact sports." msgstr "ネオプレン製のスリーブ。スポーツで使われる。" #: lang/json/json_items.py -#, fuzzy msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." -msgstr "サングラス。まぶしい光から目を守る。" +msgstr "" #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." @@ -19154,6 +19309,20 @@ msgstr "" "6フィート(約2m)のナイロンロープです。\n" "多くの用途で使うにはあまりにも短いです。" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -19325,6 +19494,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -19352,6 +19529,12 @@ msgstr "袖のない綿のシャツ。" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "袖のない綿のシャツ。" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -19586,6 +19769,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "人肉のスープ。" @@ -19733,14 +19922,11 @@ msgid "A sweet red berry." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"銃剣。ショットガン、サブマシンガン、小銃に刺突属性の近接攻撃を可能にする。長" -"さが増すことで反動が増える。" #: lang/json/json_items.py msgid "" @@ -20334,11 +20520,10 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "An all-encompassing black helmet that covers your entire face and neck, " "providing excellent protection from all sorts of damage." -msgstr "軽量の黒いヘルメット。あらゆるダメージから身を守る。" +msgstr "" #: lang/json/json_items.py msgid "" @@ -20561,6 +20746,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21852,6 +22041,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21887,6 +22082,13 @@ msgstr "" "コーラに似てますがカフェインを含んでいません。\n" "しかし健康な飲み物とは言い難いでしょう。" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -22244,6 +22446,18 @@ msgstr "PDA" msgid "PDA - Flashlight" msgstr "PDA (懐中電灯)" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -22435,6 +22649,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "RVキッチンユニット" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -23340,6 +23560,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -23438,6 +23664,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "作物の肥料になりそうだ。" @@ -24439,6 +24671,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24528,9 +24766,8 @@ msgid "This is a spent glowstick. It is essentially trash." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is a spent magnesium flare. It is essentially trash." -msgstr "使用済のサイリウム、もうゴミでしかない。" +msgstr "" #: lang/json/json_items.py msgid "" @@ -24806,9 +25043,8 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "犬用の餌。変な匂いがするが犬はこれが大好きだ。" +msgstr "" #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." @@ -25035,6 +25271,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -25168,16 +25418,12 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." msgstr "" -"水の入った容器に使用する。\n" -"炭の層が綺麗な水に浄化してくれる。\n" -"川などで汲んだ水は汚れている可能性がある。" #: lang/json/json_items.py msgid "" @@ -25290,6 +25536,12 @@ msgstr "本 (学習/トランジスタとは)" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -25356,9 +25608,8 @@ msgid "active Granade" msgstr "朱榴弾 (点火)" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "閃光手榴弾 (点火)" +msgstr "発炎筒(点火)" #: lang/json/json_items.py msgid "active flashbang" @@ -25412,6 +25663,10 @@ msgstr "UPS改 (オン)" msgid "adventure novel" msgstr "本 (小説/冒険)" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "変異原物質(α)" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "アルミバット" @@ -25905,9 +26160,8 @@ msgid "cabernet sauvignon" msgstr "ワイン(カベルネ・ソービニヨン)" #: lang/json/json_items.py -#, fuzzy msgid "caffeinated chewing gum" -msgstr "チューインガム" +msgstr "チューインガム(カフェイン)" #: lang/json/json_items.py msgid "caffeine pills" @@ -26110,14 +26364,17 @@ msgid "chewing gum" msgstr "チューインガム" #: lang/json/json_items.py -#, fuzzy msgid "chewing tobacco" -msgstr "チューインガム" +msgstr "噛み煙草" #: lang/json/json_items.py msgid "children's book" msgstr "絵本" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "変異原物質(キメラ)" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "キチンの籠手" @@ -26274,6 +26531,10 @@ msgstr "コンポジットボウ" msgid "compound bow" msgstr "コンパウンドボウ" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "濃酸" @@ -26362,6 +26623,10 @@ msgstr "簡易ベッド" msgid "cotton hat" msgstr "コットンハット" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "高純度コカイン" @@ -26406,6 +26671,10 @@ msgstr "るつぼ" msgid "crude sword" msgstr "剣 (粗製)" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "傷んだシェルターキット" @@ -26419,9 +26688,8 @@ msgid "darts" msgstr "ダーツ" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "赤い床" +msgstr "発炎筒(使用済)" #: lang/json/json_items.py msgid "dead glowstick" @@ -26639,6 +26907,10 @@ msgstr "インスタントラーメン" msgid "feather" msgstr "羽毛" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "肥料" @@ -26728,14 +27000,12 @@ msgid "flannel jacket" msgstr "フランネルジャケット" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "眩しい" +msgstr "発炎筒" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "眩しい" +msgstr "信号拳銃" #: lang/json/json_items.py msgid "flashbang" @@ -26913,6 +27183,10 @@ msgstr "ホットパンツ(毛皮)" msgid "fur kitty collar" msgstr "毛皮の鈴付き首輪" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "毛皮のパンツ" @@ -27013,6 +27287,10 @@ msgstr "ライナーグローブ" msgid "glowstick" msgstr "サイリウム" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "金" @@ -27077,6 +27355,10 @@ msgstr "ハンマー" msgid "hand press & die set" msgstr "手動プレスと鋳型のセット" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "携帯ゲーム機" @@ -27217,6 +27499,10 @@ msgstr "" msgid "holster" msgstr "ホルスター" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "蜂の巣" @@ -27473,6 +27759,10 @@ msgstr "ホットパンツ(革)" msgid "leather jacket" msgstr "レザージャケット" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "レザーパンツ" @@ -27569,6 +27859,10 @@ msgstr "変異原物質(蜥蜴)" msgid "log" msgstr "丸太" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "カクテル(ロングアイランドアイスティ)" @@ -27594,9 +27888,8 @@ msgid "loose caltrops" msgstr "鉄菱" #: lang/json/json_items.py -#, fuzzy msgid "lowtop tennis shoes" -msgstr "道化師の靴" +msgstr "" #: lang/json/json_items.py msgid "lump of steel" @@ -27630,6 +27923,10 @@ msgstr "自作じょうご" msgid "makeshift halberd" msgstr "自作ハルバード" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "自作マチェット" @@ -27702,6 +27999,10 @@ msgstr "医療ガーゼ" msgid "medical gloves" msgstr "医療用手袋" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "変異原物質(医療)" + #: lang/json/json_items.py msgid "medical tape" msgstr "医療テープ" @@ -27878,6 +28179,10 @@ msgstr "釘板" msgid "nail gun" msgstr "ネイルガン" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "ネイルライフル" @@ -28402,6 +28707,10 @@ msgstr "老眼鏡" msgid "rebar" msgstr "鉄筋" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "リカーブボウ" @@ -28528,7 +28837,7 @@ msgstr "ラム酒" #: lang/json/json_items.py msgid "rum & cola" -msgstr "" +msgstr "カクテル(キューバリバー)" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "saddle" @@ -28640,7 +28949,7 @@ msgstr "ドライバー" #: lang/json/json_items.py msgid "scythe" -msgstr "" +msgstr "大鎌" #: lang/json/json_items.py msgid "sealed 3-litre jar of kompot" @@ -28698,6 +29007,10 @@ msgstr "裁縫道具" msgid "sharpened metal arrow" msgstr "鋭利な矢(金属)" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "シーツ" @@ -28771,9 +29084,8 @@ msgid "shovel" msgstr "シャベル" #: lang/json/json_items.py -#, fuzzy msgid "sickle" -msgstr "ピクルス" +msgstr "鎌" #: lang/json/json_items.py msgid "signal receiver" @@ -28921,11 +29233,11 @@ msgstr "人肉の薄切り" #: lang/json/json_items.py msgid "spaghetti al pesto" -msgstr "スパゲッティ (アル・ペスト)" +msgstr "スパゲッティ(アル・ペスト)" #: lang/json/json_items.py msgid "spaghetti bolognese" -msgstr "スパゲッティ (ボロネーゼ)" +msgstr "スパゲッティ(ボロネーゼ)" #: lang/json/json_items.py msgid "spare magazine" @@ -29015,6 +29327,10 @@ msgstr "スチールナックル" msgid "steel plating" msgstr "鋼の平板" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -29080,9 +29396,8 @@ msgid "string - 6 in" msgstr "紐(6インチ)" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "サングラス" +msgstr "" #: lang/json/json_items.py msgid "sugar" @@ -29093,9 +29408,8 @@ msgid "suit" msgstr "スーツ" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "ドレス" +msgstr "" #: lang/json/json_items.py msgid "sunglasses" @@ -29178,9 +29492,8 @@ msgid "switchblade" msgstr "飛び出しナイフ" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "銃剣(拳銃)" +msgstr "" #: lang/json/json_items.py msgid "syringe" @@ -29199,9 +29512,8 @@ msgid "tactical dump pouch" msgstr "タクティカルダンプポーチ" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "タクティカルヘルメット" +msgstr "" #: lang/json/json_items.py msgid "tactical gloves" @@ -29252,9 +29564,8 @@ msgid "tea leaves" msgstr "紅茶の葉" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "武器" +msgstr "" #: lang/json/json_items.py msgid "teargas canister" @@ -29268,6 +29579,10 @@ msgstr "瞬間移動装置" msgid "television" msgstr "テレビ" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "テント" @@ -29282,7 +29597,7 @@ msgstr "本 (小説/推理)" #: lang/json/json_items.py msgid "throwing axe" -msgstr "" +msgstr "投斧" #: lang/json/json_items.py msgid "throwing knife" @@ -29478,7 +29793,7 @@ msgstr "本 (小説/戦争)" #: lang/json/json_items.py msgid "war scythe" -msgstr "" +msgstr "戦闘用大鎌" #: lang/json/json_items.py msgid "wasp sting" @@ -29609,9 +29924,8 @@ msgid "wooden javelin" msgstr "ウッドジャベリン" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "木の壁" +msgstr "" #: lang/json/json_items.py msgid "woods soup" @@ -29809,6 +30123,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -30036,6 +30359,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -30044,6 +30375,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -30156,9 +30496,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "攻撃速度ボーナス" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -30211,41 +30550,36 @@ msgid "Capoeira Tempo" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Centipede Kung Fu" -msgstr "百足" +msgstr "蜈蚣功" #: lang/json/json_martialarts.py msgid "Crane Kung Fu" -msgstr "" +msgstr "鶴形拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Crane Precision" -msgstr "クランストン" +msgstr "鶴の正確さ" #: lang/json/json_martialarts.py msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "知性" +msgstr "龍の知恵" #: lang/json/json_martialarts.py msgid "Dragon Kung Fu" -msgstr "" +msgstr "龍形拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Drunk Dodging" -msgstr "回避" +msgstr "泥酔回避" #: lang/json/json_martialarts.py -#, fuzzy msgid "Flat bonus to damage." -msgstr " しかし、ダメージを与えられない。" +msgstr "" #: lang/json/json_martialarts.py msgid "Half damage to enemies" @@ -30291,15 +30625,15 @@ msgstr "クラヴマガ" #: lang/json/json_martialarts.py msgid "Leopard Kung Fu" -msgstr "" +msgstr "豹形拳" #: lang/json/json_martialarts.py msgid "Leopard Strategy" -msgstr "" +msgstr "豹の戦術" #: lang/json/json_martialarts.py msgid "Lizard Kung Fu" -msgstr "" +msgstr "壁虎功" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Muay Thai" @@ -30326,8 +30660,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -30419,11 +30754,11 @@ msgstr "" #: lang/json/json_martialarts.py msgid "Scorpion Kung Fu" -msgstr "" +msgstr "蝎子功" #: lang/json/json_martialarts.py msgid "Scorpion Venom" -msgstr "" +msgstr "蠍の毒" #: lang/json/json_martialarts.py msgid "Silent melee attacks" @@ -30435,12 +30770,11 @@ msgstr "" #: lang/json/json_martialarts.py msgid "Snake Kung Fu" -msgstr "" +msgstr "蛇形拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Snake Sight" -msgstr "レーザーサイト" +msgstr "蛇の視界" #: lang/json/json_martialarts.py msgid "Strength decreases damage when blocking" @@ -30474,27 +30808,24 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "虎" +msgstr "" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" -msgstr "" +msgstr "虎形拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "筋力" +msgstr "虎の怪力" #: lang/json/json_martialarts.py -#, fuzzy msgid "Toad Armor" -msgstr "SWATアーマー" +msgstr "蝦蟇の装甲" #: lang/json/json_martialarts.py msgid "Toad Kung Fu" -msgstr "" +msgstr "蛤蟆功" #: lang/json/json_martialarts.py msgid "Unlimited dodges after successful hit" @@ -30502,11 +30833,11 @@ msgstr "" #: lang/json/json_martialarts.py msgid "Viper Kung Fu" -msgstr "" +msgstr "蛇功" #: lang/json/json_martialarts.py msgid "Zui Quan" -msgstr "" +msgstr "酔拳" #: lang/json/json_materials.py msgid "Bone" @@ -33523,9 +33854,8 @@ msgid "Forked Tongue" msgstr "蛇舌" #: lang/json/json_mutations.py -#, fuzzy msgid "Frail" -msgstr "手すり" +msgstr "" #: lang/json/json_mutations.py msgid "Full Night Vision" @@ -33899,6 +34229,14 @@ msgstr "放射能耐性" msgid "Regeneration" msgstr "再生力" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "ロードランナー" @@ -34087,6 +34425,10 @@ msgstr "恐ろしい気配によって、生物が逃走する可能性が上昇 msgid "Thick Scales" msgstr "厚い鱗" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -34465,6 +34807,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34932,6 +35280,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -35047,6 +35402,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -35271,7 +35632,7 @@ msgstr "アイザワ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Ajay Chandra" -msgstr "" +msgstr "アジャイ チャンドラ" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -35331,19 +35692,19 @@ msgstr "アレクサンドル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Alexander Dmitriev" -msgstr "" +msgstr "アレクサンダー ドミトリエフ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Alexander Krichko" -msgstr "" +msgstr "アレクサンダー クリックコー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Alexander Weeks" -msgstr "" +msgstr "アレクサンダー ウィークス" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -35409,7 +35770,7 @@ msgstr "アルナ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Alphai" -msgstr "" +msgstr "アルファイ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -35481,13 +35842,13 @@ msgstr "アンドリュー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Andrew Guastella" -msgstr "" +msgstr "アンドリュー ガーステラー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Andrew Webster" -msgstr "" +msgstr "アンドリュー ウェブスター" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -35529,13 +35890,13 @@ msgstr "アントニー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Anthony Burleigh" -msgstr "" +msgstr "アンソニー バーリー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Anton Struyk" -msgstr "" +msgstr "アントン ストライク" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -35559,13 +35920,13 @@ msgstr "アクイナ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Arc" -msgstr "" +msgstr "アーク" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Argus M. Lowell" -msgstr "" +msgstr "アーガス M. ローウェル" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -35601,7 +35962,7 @@ msgstr "アローシック" #: lang/json/json_names.py msgctxt "Full Name" msgid "Artcher" -msgstr "" +msgstr "アーチャー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -35667,7 +36028,7 @@ msgstr "アトキンソン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Atomos" -msgstr "" +msgstr "アトモス" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -35961,7 +36322,7 @@ msgstr "ベルビデーレ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Ben McClure" -msgstr "" +msgstr "ベン マクルーア" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -35979,7 +36340,7 @@ msgstr "ベンジャミン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Benjamin Replogle" -msgstr "" +msgstr "ベンジャミン レップローグル" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -36123,7 +36484,7 @@ msgstr "ブルーヒル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Bobalot" -msgstr "" +msgstr "ボバロット" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -36297,13 +36658,13 @@ msgstr "ブライアン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Brian Davidson" -msgstr "" +msgstr "ブライアン デビットソン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Brian Hosterman" -msgstr "" +msgstr "ブライアン ホースターマン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -36819,7 +37180,7 @@ msgstr "シャーロット" #: lang/json/json_names.py msgctxt "Full Name" msgid "Charlotte Hall" -msgstr "" +msgstr "シャーロット ホール" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -36927,7 +37288,7 @@ msgstr "クロエ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Chris Watkins" -msgstr "" +msgstr "クリス ワトキンス" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -36945,7 +37306,7 @@ msgstr "クリストファー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Christopher Fallins" -msgstr "" +msgstr "クリストファー フォーリンズ" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -36987,7 +37348,7 @@ msgstr "クラークスビル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Clay Foxtail" -msgstr "" +msgstr "クレイ フォックステイル" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37071,7 +37432,7 @@ msgstr "コロンビアフォールズ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Comrade Garry" -msgstr "" +msgstr "コムレイド ギャリー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37179,13 +37540,13 @@ msgstr "クラフトベリー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Craig Ferguson" -msgstr "" +msgstr "クレイグ ファーガソン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Craig Matton" -msgstr "" +msgstr "クレイグ マトン" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37263,7 +37624,7 @@ msgstr "ダイスケ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Dak'kor" -msgstr "" +msgstr "ダックコー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37311,13 +37672,13 @@ msgstr "ダニエル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Daniel Annfield" -msgstr "" +msgstr "ダニエル アンフィールド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Daniel Danahy" -msgstr "" +msgstr "ダニエル ダナヒー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37347,7 +37708,7 @@ msgstr "ダートマス" #: lang/json/json_names.py msgctxt "Full Name" msgid "Dave Steverdaverson" -msgstr "" +msgstr "デイヴ ステバーデイバーソン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -37515,7 +37876,7 @@ msgstr "ドーセット" #: lang/json/json_names.py msgctxt "Full Name" msgid "Doug Ogden" -msgstr "" +msgstr "ダグ オグデン" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37539,7 +37900,7 @@ msgstr "ドーバーフォックスクロフト" #: lang/json/json_names.py msgctxt "Full Name" msgid "Dr. Hylke van der Schaaf" -msgstr "" +msgstr "ドクター ヒルク ヴァン ダー シャーフ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37605,7 +37966,7 @@ msgstr "ダラム" #: lang/json/json_names.py msgctxt "Full Name" msgid "Dusk Gao" -msgstr "" +msgstr "ダスク ガオ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37881,7 +38242,7 @@ msgstr "エルモア" #: lang/json/json_names.py msgctxt "Full Name" msgid "Ely Forrest Keaton" -msgstr "" +msgstr "イーリー フォレスト キートン" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37917,7 +38278,7 @@ msgstr "エノスバーグ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Enrique Alonso" -msgstr "" +msgstr "エンリケ アロンソ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -37947,7 +38308,7 @@ msgstr "エリック ローサック" #: lang/json/json_names.py msgctxt "Full Name" msgid "Erik Hungerbuhler" -msgstr "" +msgstr "エリック ハンガーブーラー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -38007,7 +38368,7 @@ msgstr "イヴリン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Evelynn Frost" -msgstr "" +msgstr "エベリン フロスト" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -38097,13 +38458,13 @@ msgstr "フェイストン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Felix Aplin" -msgstr "" +msgstr "フェリックス アプリン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Felix Fox" -msgstr "" +msgstr "フェリックス フォックス" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -38265,7 +38626,7 @@ msgstr "フレンドシップ" #: lang/json/json_names.py msgctxt "Full Name" msgid "FrozenFoxy" -msgstr "" +msgstr "フローズンフォクシー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -38289,7 +38650,7 @@ msgstr "ゲイブリエル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Gabriel Dong" -msgstr "" +msgstr "ガブリエル ドン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -38337,7 +38698,7 @@ msgstr "ガーランド" #: lang/json/json_names.py msgctxt "Full Name" msgid "Gattsu" -msgstr "" +msgstr "ガッツ" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -38421,7 +38782,7 @@ msgstr "グラストンベリー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Glen Runciter" -msgstr "" +msgstr "グレン ランシッター" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -38661,7 +39022,7 @@ msgstr "ギルフォード" #: lang/json/json_names.py msgctxt "Full Name" msgid "Guillaume Lebigot" -msgstr "" +msgstr "ギョーム レビゴット" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py @@ -38673,7 +39034,7 @@ msgstr "ガルファス モーゴロック" #: lang/json/json_names.py msgctxt "Full Name" msgid "Gurg Hackpof" -msgstr "" +msgstr "ガーグ ハックポフ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -38769,7 +39130,7 @@ msgstr "ハンコック" #: lang/json/json_names.py msgctxt "Full Name" msgid "Hank Lecram" -msgstr "" +msgstr "ハンク レクラム" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -38955,7 +39316,7 @@ msgstr "ヘルナンデス" #: lang/json/json_names.py msgctxt "Full Name" msgid "Herrith Sebon" -msgstr "" +msgstr "ヘリス ゼーボン" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39075,7 +39436,7 @@ msgstr "ホールヨーク" #: lang/json/json_names.py msgctxt "Full Name" msgid "Homer" -msgstr "" +msgstr "ホメロス" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39135,13 +39496,13 @@ msgstr "ハッバートン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Hubert Hughes" -msgstr "" +msgstr "ヒューバート ヒューズ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Hubert Rodenbaugh" -msgstr "" +msgstr "ヒューバート ローデンボウ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39195,7 +39556,7 @@ msgstr "イアン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Ian Cleere" -msgstr "" +msgstr "イアン クリー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39345,7 +39706,7 @@ msgstr "ジェームス" #: lang/json/json_names.py msgctxt "Full Name" msgid "James Kenny" -msgstr "" +msgstr "ジェームス ケニー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39381,7 +39742,7 @@ msgstr "ジェイデン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Jef Major" -msgstr "" +msgstr "ジェフ メジャー" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39411,7 +39772,7 @@ msgstr "ジェニファー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Jens Becker" -msgstr "" +msgstr "イェンス ベッカー" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39423,7 +39784,7 @@ msgstr "ジェレミア" #: lang/json/json_names.py msgctxt "Full Name" msgid "Jeremias Braß" -msgstr "" +msgstr "イェレミアス ブラベータ" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39453,13 +39814,13 @@ msgstr "ヘスウス" #: lang/json/json_names.py msgctxt "Full Name" msgid "Jim Landerland" -msgstr "" +msgstr "ジム ランダーランド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Jim Weaver" -msgstr "" +msgstr "ジム ウィーバー" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -39477,13 +39838,13 @@ msgstr "ジョン" #: lang/json/json_names.py msgctxt "Full Name" msgid "John Ennion" -msgstr "" +msgstr "ジョン エニオン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "John Hammell" -msgstr "" +msgstr "ジョン ハメル" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -39525,7 +39886,7 @@ msgstr "ショーンズバラ" #: lang/json/json_names.py msgctxt "City Name" msgid "Jonesport" -msgstr "" +msgstr "ショーンズポート" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39549,7 +39910,7 @@ msgstr "ジョセフ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Joseph 'Zakalwe' Bartlett" -msgstr "" +msgstr "ジョセフ 'ザキャルゥー' バートレット" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39561,7 +39922,7 @@ msgstr "ジョシュア" #: lang/json/json_names.py msgctxt "Full Name" msgid "Joshua Young" -msgstr "" +msgstr "ジョシュア ヤング" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39597,7 +39958,7 @@ msgstr "ジャスティン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Justine McKinnon" -msgstr "" +msgstr "ジャスティン マッキノン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39621,7 +39982,7 @@ msgstr "ケイトリン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Kamil Kliwison" -msgstr "" +msgstr "カミル クリウィソン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -39651,7 +40012,7 @@ msgstr "ケイリー" #: lang/json/json_names.py msgctxt "City Name" msgid "Keene" -msgstr "" +msgstr "キーン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39669,7 +40030,7 @@ msgstr "ケリィ" #: lang/json/json_names.py msgctxt "City Name" msgid "Kenduskeag" -msgstr "" +msgstr "ケンダスキング" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py @@ -39681,25 +40042,25 @@ msgstr "ケンジ クロカワ" #: lang/json/json_names.py msgctxt "City Name" msgid "Kennebunk" -msgstr "" +msgstr "ケンネバンク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kennebunkport" -msgstr "" +msgstr "ケンネバンクポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kensington" -msgstr "" +msgstr "ケンジントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kent" -msgstr "" +msgstr "ケント" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39711,37 +40072,37 @@ msgstr "ケビン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Kevin Grasso" -msgstr "" +msgstr "ケビン グラッソ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Kevin Witt" -msgstr "" +msgstr "ケビン ウィット" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Khalid Rashid" -msgstr "" +msgstr "ハリド ラシッド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Killingly" -msgstr "" +msgstr "キリングリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Killington" -msgstr "" +msgstr "キリングトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Killingworth" -msgstr "" +msgstr "キリングワース" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -39765,25 +40126,25 @@ msgstr "キング" #: lang/json/json_names.py msgctxt "City Name" msgid "Kingfield" -msgstr "" +msgstr "キングフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kingman" -msgstr "" +msgstr "キングマン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kingsbury Plantation" -msgstr "" +msgstr "キングズバリプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kingston" -msgstr "" +msgstr "キングストン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39795,19 +40156,19 @@ msgstr "キラ" #: lang/json/json_names.py msgctxt "City Name" msgid "Kirby" -msgstr "" +msgstr "カービー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Kittery" -msgstr "" +msgstr "キッタリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Knox" -msgstr "" +msgstr "ノックス" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39831,55 +40192,55 @@ msgstr "キョースケ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Lachlan" -msgstr "" +msgstr "ラクラン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Laconia" -msgstr "" +msgstr "ラコニア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lagrange" -msgstr "" +msgstr "ラグランジュ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lake View Plantation" -msgstr "" +msgstr "レイクビュープランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lakeville" -msgstr "" +msgstr "レイクビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lamoine" -msgstr "" +msgstr "ラモイン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lancaster" -msgstr "" +msgstr "ランカスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Landaff" -msgstr "" +msgstr "ランダフ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Landgrove" -msgstr "" +msgstr "ランドグローブ" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -39891,19 +40252,19 @@ msgstr "ランドン" #: lang/json/json_names.py msgctxt "City Name" msgid "Lanesborough" -msgstr "" +msgstr "レイネスボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Langdon" -msgstr "" +msgstr "ラングドン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Larion" -msgstr "" +msgstr "ラリアン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -39915,13 +40276,13 @@ msgstr "ローレン" #: lang/json/json_names.py msgctxt "City Name" msgid "Lawrence" -msgstr "" +msgstr "ローレンス" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Lawry Dennis" -msgstr "" +msgstr "ロウリー デニス" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -39939,19 +40300,19 @@ msgstr "レア" #: lang/json/json_names.py msgctxt "City Name" msgid "Lebanon" -msgstr "" +msgstr "レバノン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ledyard" -msgstr "" +msgstr "レドヤード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lee" -msgstr "" +msgstr "リー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -39963,61 +40324,61 @@ msgstr "リー" #: lang/json/json_names.py msgctxt "City Name" msgid "Leeds" -msgstr "" +msgstr "リーズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Leicester" -msgstr "" +msgstr "レスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lemington" -msgstr "" +msgstr "レミングトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lempster" -msgstr "" +msgstr "レンプスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lenox" -msgstr "" +msgstr "レノックス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Leominster" -msgstr "" +msgstr "レムスター" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Leonid Vasilev" -msgstr "" +msgstr "レオニード ワシリエフ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Lev Myshkin" -msgstr "" +msgstr "レフ ムイシキン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Levant" -msgstr "" +msgstr "レバント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Leverett" -msgstr "" +msgstr "レバレット" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40029,19 +40390,19 @@ msgstr "リュイス" #: lang/json/json_names.py msgctxt "City Name" msgid "Lewiston" -msgstr "" +msgstr "ルイストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lexington" -msgstr "" +msgstr "レキシントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Leyden" -msgstr "" +msgstr "ライデン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -40053,7 +40414,7 @@ msgstr "リーアム" #: lang/json/json_names.py msgctxt "City Name" msgid "Liberty" -msgstr "" +msgstr "リバティー" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40071,79 +40432,79 @@ msgstr "リリー" #: lang/json/json_names.py msgctxt "City Name" msgid "Limerick" -msgstr "" +msgstr "リメリック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Limestone" -msgstr "" +msgstr "リメストーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Limington" -msgstr "" +msgstr "リミングトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lincoln" -msgstr "" +msgstr "リンカーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lincoln Plantation" -msgstr "" +msgstr "リンカーンプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lincolnville" -msgstr "" +msgstr "リンカーンビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Linneus" -msgstr "" +msgstr "リネアズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lisbon" -msgstr "" +msgstr "リスボン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Litchfield" -msgstr "" +msgstr "リッチフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Little Compton" -msgstr "" +msgstr "リトルコンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Littleton" -msgstr "" +msgstr "リトルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Livermore" -msgstr "" +msgstr "リバーモア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Livermore Falls" -msgstr "" +msgstr "リバーモアフォールズ" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -40155,7 +40516,7 @@ msgstr "ローガン" #: lang/json/json_names.py msgctxt "City Name" msgid "Londonderry" -msgstr "" +msgstr "ロンドンデリー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40167,13 +40528,13 @@ msgstr "ロング" #: lang/json/json_names.py msgctxt "City Name" msgid "Long Island" -msgstr "" +msgstr "ロングアイランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Longmeadow" -msgstr "" +msgstr "ロングメドウ" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40185,25 +40546,25 @@ msgstr "ロペス" #: lang/json/json_names.py msgctxt "City Name" msgid "Loudon" -msgstr "" +msgstr "ラウドン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lovell" -msgstr "" +msgstr "ローベル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lowell" -msgstr "" +msgstr "ローウェル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lubec" -msgstr "" +msgstr "ルベック" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -40215,7 +40576,7 @@ msgstr "ルーカス" #: lang/json/json_names.py msgctxt "City Name" msgid "Ludlow" -msgstr "" +msgstr "ラッドロー" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -40233,73 +40594,73 @@ msgstr "ルーク" #: lang/json/json_names.py msgctxt "City Name" msgid "Lunenburg" -msgstr "" +msgstr "リューネンバーグ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lyman" -msgstr "" +msgstr "ライマン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lyme" -msgstr "" +msgstr "ライム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lyndeborough" -msgstr "" +msgstr "リンデボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lyndon" -msgstr "" +msgstr "リンドン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lynn" -msgstr "" +msgstr "リン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Lynnfield" -msgstr "" +msgstr "リンフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Machias" -msgstr "" +msgstr "マチアズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Machiasport" -msgstr "" +msgstr "マチアズポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Macwahoc Plantation" -msgstr "" +msgstr "マクワホックプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Madawaska" -msgstr "" +msgstr "マダワスカ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Madbury" -msgstr "" +msgstr "マッドバリー" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40317,7 +40678,7 @@ msgstr "マデリン" #: lang/json/json_names.py msgctxt "City Name" msgid "Madison" -msgstr "" +msgstr "マディソン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40329,19 +40690,19 @@ msgstr "マディソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Madrid" -msgstr "" +msgstr "マドリード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Magalloway Plantation" -msgstr "" +msgstr "マゴーロウェイプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Maidstone" -msgstr "" +msgstr "メードストン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40353,43 +40714,43 @@ msgstr "マケイラ" #: lang/json/json_names.py msgctxt "City Name" msgid "Malden" -msgstr "" +msgstr "マルデン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Manchester" -msgstr "" +msgstr "マンチェスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Manchester-by-the-Sea" -msgstr "" +msgstr "マンチェスター・バイ・ザ・シー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Manik DepraSeeve" -msgstr "" +msgstr "マニック デプレイシーブ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mansfield" -msgstr "" +msgstr "マンスフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mapleton" -msgstr "" +msgstr "メイプルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Marblehead" -msgstr "" +msgstr "マーブルヘッド" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40407,49 +40768,49 @@ msgstr "マライア" #: lang/json/json_names.py msgctxt "City Name" msgid "Mariaville" -msgstr "" +msgstr "マリアビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Marion" -msgstr "" +msgstr "マリオン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Mark 'Bad Boy' Badoy" -msgstr "" +msgstr "マーク 'バッド ボーイ' バッドイ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Marlboro" -msgstr "" +msgstr "マルボロ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Marlborough" -msgstr "" +msgstr "マールボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Marlow" -msgstr "" +msgstr "マーロウ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mars Hill" -msgstr "" +msgstr "マーズヒル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Marshfield" -msgstr "" +msgstr "マーシュフィールド" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40461,13 +40822,13 @@ msgstr "マーティン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Martin Svensson" -msgstr "" +msgstr "マーティン スウェンソン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Martin Woodard" -msgstr "" +msgstr "マーティン ウッダード" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40485,19 +40846,19 @@ msgstr "メアリー" #: lang/json/json_names.py msgctxt "City Name" msgid "Masardis" -msgstr "" +msgstr "マサーディス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mashpee" -msgstr "" +msgstr "マッシュピー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mason" -msgstr "" +msgstr "メイソン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -40509,37 +40870,37 @@ msgstr "メーソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Matinicus Isle" -msgstr "" +msgstr "マティニッカスアイル" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Matt Davis" -msgstr "" +msgstr "マット デイビス" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Matt Williams" -msgstr "" +msgstr "マット ウィリアムズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mattamiscontis" -msgstr "" +msgstr "マッタミスコンティス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mattapoisett" -msgstr "" +msgstr "マッタポイセット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mattawamkeag" -msgstr "" +msgstr "マッタワムキング" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -40551,13 +40912,13 @@ msgstr "マシュー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Matthew St. John" -msgstr "" +msgstr "マシュー セント ジョン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Maxfield" -msgstr "" +msgstr "マックスフィールド" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40569,37 +40930,37 @@ msgstr "マヤ" #: lang/json/json_names.py msgctxt "City Name" msgid "Maynard" -msgstr "" +msgstr "メイナード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mechanic Falls" -msgstr "" +msgstr "メカニックフォールズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Meddybemps" -msgstr "" +msgstr "メッディーベンプス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Medfield" -msgstr "" +msgstr "メドフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Medford" -msgstr "" +msgstr "メドフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Medway" -msgstr "" +msgstr "メドウェイ" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40617,61 +40978,61 @@ msgstr "メラニー" #: lang/json/json_names.py msgctxt "City Name" msgid "Melrose" -msgstr "" +msgstr "メルローズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mendon" -msgstr "" +msgstr "メンドン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mercer" -msgstr "" +msgstr "マーサ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Meredith" -msgstr "" +msgstr "メレディス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Meriden" -msgstr "" +msgstr "メリデン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Merrill" -msgstr "" +msgstr "メリル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Merrimac" -msgstr "" +msgstr "メリマク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Merrimack" -msgstr "" +msgstr "メリマック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Methuen" -msgstr "" +msgstr "メスエン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mexico" -msgstr "" +msgstr "メキシコ" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -40689,109 +41050,109 @@ msgstr "マイケル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Michael 'Dies Horribly' Jones" -msgstr "" +msgstr "マイケル 'ディス ホリブリー' ジョーンズ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Michael Hill" -msgstr "" +msgstr "マイケル ヒル" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Michael Kincaid" -msgstr "" +msgstr "マイケル キンケイド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Michel Bergeron" -msgstr "" +msgstr "ミシェル バージェロン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Mick Batt" -msgstr "" +msgstr "ミック バット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middleborough" -msgstr "" +msgstr "ミドルボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middlebury" -msgstr "" +msgstr "ミドルベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middlefield" -msgstr "" +msgstr "ミドルフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middlesex" -msgstr "" +msgstr "ミドルセックス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middleton" -msgstr "" +msgstr "ミドルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middletown" -msgstr "" +msgstr "ミドルタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Middletown Springs" -msgstr "" +msgstr "ミドルタウン・スプリングス" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Miguel Hermez" -msgstr "" +msgstr "ミゲル ハーメズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Milan" -msgstr "" +msgstr "ミラノ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Milbridge" -msgstr "" +msgstr "ミルブリッジ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Miles Prowers" -msgstr "" +msgstr "マイル プロワース" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Milford" -msgstr "" +msgstr "ミルフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Millbury" -msgstr "" +msgstr "ミルベリー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40803,43 +41164,43 @@ msgstr "ミラー" #: lang/json/json_names.py msgctxt "City Name" msgid "Millinocket" -msgstr "" +msgstr "ミリノケット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Millis" -msgstr "" +msgstr "ミリス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Millville" -msgstr "" +msgstr "ミリビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Milo" -msgstr "" +msgstr "ミロ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Miloch" -msgstr "" +msgstr "ミロッチ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Milton" -msgstr "" +msgstr "ミルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Minot" -msgstr "" +msgstr "ミノ" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40851,73 +41212,73 @@ msgstr "ミッチェル" #: lang/json/json_names.py msgctxt "City Name" msgid "Monhegan" -msgstr "" +msgstr "モンヘガン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Monkton" -msgstr "" +msgstr "モンクトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Monmouth" -msgstr "" +msgstr "モンマス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Monroe" -msgstr "" +msgstr "モンロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Monson" -msgstr "" +msgstr "モンソン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mont Vernon" -msgstr "" +msgstr "モントヴァーノン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Montague" -msgstr "" +msgstr "モンタギュー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Monterey" -msgstr "" +msgstr "モンテレー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Montgomery" -msgstr "" +msgstr "モンゴメリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Monticello" -msgstr "" +msgstr "モンティチェロ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Montpelier" -msgstr "" +msgstr "モントピーリア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Montville" -msgstr "" +msgstr "モントビル" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40929,19 +41290,19 @@ msgstr "ムーア" #: lang/json/json_names.py msgctxt "City Name" msgid "Moose River" -msgstr "" +msgstr "ムースリバー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Moretown" -msgstr "" +msgstr "モアタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Morgan" -msgstr "" +msgstr "モーガン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40959,19 +41320,19 @@ msgstr "モーガン" #: lang/json/json_names.py msgctxt "City Name" msgid "Moro Plantation" -msgstr "" +msgstr "モロープランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Morrill" -msgstr "" +msgstr "モリル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Morris" -msgstr "" +msgstr "モリス" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -40983,7 +41344,7 @@ msgstr "モリス" #: lang/json/json_names.py msgctxt "City Name" msgid "Morristown" -msgstr "" +msgstr "モリスタウン" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -40995,43 +41356,43 @@ msgstr "モスクワ" #: lang/json/json_names.py msgctxt "City Name" msgid "Moultonborough" -msgstr "" +msgstr "モールトンボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mount Chase" -msgstr "" +msgstr "マウントチェース" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mount Desert" -msgstr "" +msgstr "マウントデザート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mount Holly" -msgstr "" +msgstr "マウントホリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mount Tabor" -msgstr "" +msgstr "マウントテーバー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mount Vernon" -msgstr "" +msgstr "マウントヴァーノン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Mount Washington" -msgstr "" +msgstr "マウントワシントン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41043,7 +41404,7 @@ msgstr "マーフィー" #: lang/json/json_names.py msgctxt "City Name" msgid "Nahant" -msgstr "" +msgstr "ナハント" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41055,31 +41416,31 @@ msgstr "ナキヤ" #: lang/json/json_names.py msgctxt "City Name" msgid "Nantucket" -msgstr "" +msgstr "ナンタケット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Naples" -msgstr "" +msgstr "ナポリ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Narragansett" -msgstr "" +msgstr "ナラガンセット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Nashua" -msgstr "" +msgstr "ナシュア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Nashville Plantation" -msgstr "" +msgstr "ナッシュビルプランテーション" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -41097,7 +41458,7 @@ msgstr "ネイサン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Nathan Cann" -msgstr "" +msgstr "ネイサン キャン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -41109,13 +41470,13 @@ msgstr "ナサニエル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Nathaniel Ford" -msgstr "" +msgstr "ナサニエル フォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Natick" -msgstr "" +msgstr "ナティック" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -41127,19 +41488,19 @@ msgstr "ナツキ" #: lang/json/json_names.py msgctxt "City Name" msgid "Naugatuck" -msgstr "" +msgstr "ノーガタック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Needham" -msgstr "" +msgstr "ニーダム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Nelson" -msgstr "" +msgstr "ネルソン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41157,235 +41518,235 @@ msgstr "ネバエ" #: lang/json/json_names.py msgctxt "City Name" msgid "New Ashford" -msgstr "" +msgstr "ニューアッシュフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Bedford" -msgstr "" +msgstr "ニューベッドフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Boston" -msgstr "" +msgstr "ニューボストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Braintree" -msgstr "" +msgstr "ニューブレインツリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Britain" -msgstr "" +msgstr "ニューブリテン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Canaan" -msgstr "" +msgstr "ニューカナン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Canada" -msgstr "" +msgstr "ニューカナダ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Castle" -msgstr "" +msgstr "ニューキャッスル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Durham" -msgstr "" +msgstr "ニューダラム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Fairfield" -msgstr "" +msgstr "ニューフェアフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Gloucester" -msgstr "" +msgstr "ニューグロスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Hampton" -msgstr "" +msgstr "ニューハンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Hartford" -msgstr "" +msgstr "ニューハートフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Haven" -msgstr "" +msgstr "ニューヘブン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Ipswich" -msgstr "" +msgstr "ニューイプスウィッチ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Limerick" -msgstr "" +msgstr "ニューリメリック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New London" -msgstr "" +msgstr "ニューロンドン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Marlborough" -msgstr "" +msgstr "ニューマールボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Milford" -msgstr "" +msgstr "ニューミルフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Portland" -msgstr "" +msgstr "ニューポートランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Salem" -msgstr "" +msgstr "ニューセーラム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Sharon" -msgstr "" +msgstr "ニューシャロン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Shoreham" -msgstr "" +msgstr "ニューショーハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Sweden" -msgstr "" +msgstr "ニュースウェーデン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "New Vineyard" -msgstr "" +msgstr "ニューバインヤード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newark" -msgstr "" +msgstr "ニューアーク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newburgh" -msgstr "" +msgstr "ニューバラー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newbury" -msgstr "" +msgstr "ニューベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newburyport" -msgstr "" +msgstr "ニューベリーポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newcastle" -msgstr "" +msgstr "ニューカッスル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newfane" -msgstr "" +msgstr "ニューフェイン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newfield" -msgstr "" +msgstr "ニューフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newfields" -msgstr "" +msgstr "ニューフィールズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newington" -msgstr "" +msgstr "ニューイングトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newmarket" -msgstr "" +msgstr "ニューマーケット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newport" -msgstr "" +msgstr "ニューポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newry" -msgstr "" +msgstr "ニュアリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newton" -msgstr "" +msgstr "ニュートン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Newtown" -msgstr "" +msgstr "ニュータウン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -41397,7 +41758,7 @@ msgstr "ニコラス" #: lang/json/json_names.py msgctxt "Full Name" msgid "Nick 'Havoc' Parker" -msgstr "" +msgstr "ニック 'ハボック' パーカー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py @@ -41415,199 +41776,199 @@ msgstr "ノア" #: lang/json/json_names.py msgctxt "City Name" msgid "Nobleboro" -msgstr "" +msgstr "ノーブルボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norfolk" -msgstr "" +msgstr "ノーフォーク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norridgewock" -msgstr "" +msgstr "ノリッジウォック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Adams" -msgstr "" +msgstr "ノースアダムス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Andover" -msgstr "" +msgstr "ノースアンドーバー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Attleborough" -msgstr "" +msgstr "ノースアチルボロ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Berwick" -msgstr "" +msgstr "ノースベリック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Branford" -msgstr "" +msgstr "ノースブランフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Brookfield" -msgstr "" +msgstr "ノースブルックフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Canaan" -msgstr "" +msgstr "ノースカナン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Hampton" -msgstr "" +msgstr "ノースハンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Haven" -msgstr "" +msgstr "ノースヘブン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Hero" -msgstr "" +msgstr "ノースヒーロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Kingstown" -msgstr "" +msgstr "ノースキングスタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Providence" -msgstr "" +msgstr "ノースプロビデンス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Reading" -msgstr "" +msgstr "ノースリーディング" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Smithfield" -msgstr "" +msgstr "ノーススミスフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Stonington" -msgstr "" +msgstr "ノースストニントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "North Yarmouth" -msgstr "" +msgstr "ノースヤーマス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northampton" -msgstr "" +msgstr "ノーサンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northborough" -msgstr "" +msgstr "ノースボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northbridge" -msgstr "" +msgstr "ノースブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northfield" -msgstr "" +msgstr "ノースフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northport" -msgstr "" +msgstr "ノースポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northumberland" -msgstr "" +msgstr "ノーサンバーランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Northwood" -msgstr "" +msgstr "ノースウッド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norton" -msgstr "" +msgstr "ノートン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norwalk" -msgstr "" +msgstr "ノーウォーク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norway" -msgstr "" +msgstr "ノーウェイ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norwell" -msgstr "" +msgstr "ノーウェル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norwich" -msgstr "" +msgstr "ノリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Norwood" -msgstr "" +msgstr "ノーウッド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Nottingham" -msgstr "" +msgstr "ノッティンガム" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -41619,55 +41980,55 @@ msgstr "ヌク" #: lang/json/json_names.py msgctxt "City Name" msgid "Oak Bluffs" -msgstr "" +msgstr "オークブラフス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Oakfield" -msgstr "" +msgstr "オークフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Oakham" -msgstr "" +msgstr "オーカム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Oakland" -msgstr "" +msgstr "オークランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ogunquit" -msgstr "" +msgstr "オガンキット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Old Lyme" -msgstr "" +msgstr "オールドライム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Old Orchard Beach" -msgstr "" +msgstr "オールド・オーチャート・゙ビーチ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Old Saybrook" -msgstr "" +msgstr "オールドセイブルック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Old Town" -msgstr "" +msgstr "オールドタウン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -41679,79 +42040,79 @@ msgstr "オリビア" #: lang/json/json_names.py msgctxt "City Name" msgid "Orange" -msgstr "" +msgstr "オレンジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orford" -msgstr "" +msgstr "オーフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orient" -msgstr "" +msgstr "オリエント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orland" -msgstr "" +msgstr "オーランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orleans" -msgstr "" +msgstr "オルレアン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orneville" -msgstr "" +msgstr "オーンビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orono" -msgstr "" +msgstr "オロノ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orrington" -msgstr "" +msgstr "オリントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Orwell" -msgstr "" +msgstr "オーウェル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Osborn" -msgstr "" +msgstr "オズボーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ossipee" -msgstr "" +msgstr "オシッピー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Otis" -msgstr "" +msgstr "オーチス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Otisfield" -msgstr "" +msgstr "オーチスフィールド" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -41763,25 +42124,25 @@ msgstr "オーウェン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Owen Dunne" -msgstr "" +msgstr "オーエン ダン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Owls Head" -msgstr "" +msgstr "オウルヘッド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Oxbow" -msgstr "" +msgstr "オックスボー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Oxford" -msgstr "" +msgstr "オックスフォード" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -41793,31 +42154,31 @@ msgstr "ペイジ" #: lang/json/json_names.py msgctxt "City Name" msgid "Palermo" -msgstr "" +msgstr "パレルモ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Palmer" -msgstr "" +msgstr "パーマー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Palmyra" -msgstr "" +msgstr "パルミラ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Panton" -msgstr "" +msgstr "パントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Paris" -msgstr "" +msgstr "パリ" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41829,31 +42190,31 @@ msgstr "パーカー" #: lang/json/json_names.py msgctxt "City Name" msgid "Parkman" -msgstr "" +msgstr "パークマン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Parsonsfield" -msgstr "" +msgstr "パーソンズフィールド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Pascal Filipovicz" -msgstr "" +msgstr "パスカル フィリッポビックズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Passadumkeag" -msgstr "" +msgstr "パッサダムキング" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Patten" -msgstr "" +msgstr "パッテン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41865,25 +42226,25 @@ msgstr "パターソン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Paul Wallace" -msgstr "" +msgstr "ポール ウォレス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pawlet" -msgstr "" +msgstr "ポーレット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pawtucket" -msgstr "" +msgstr "ポータケット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Paxton" -msgstr "" +msgstr "パクストン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -41895,37 +42256,37 @@ msgstr "ペイトン" #: lang/json/json_names.py msgctxt "City Name" msgid "Peabody" -msgstr "" +msgstr "ピーボディ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Peacham" -msgstr "" +msgstr "ピーチァム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pelham" -msgstr "" +msgstr "ペラム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pembroke" -msgstr "" +msgstr "ペンブルック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Penobscot" -msgstr "" +msgstr "ペノブスコット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pepperell" -msgstr "" +msgstr "ペッパーレル" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41937,19 +42298,19 @@ msgstr "ペレス" #: lang/json/json_names.py msgctxt "City Name" msgid "Perham" -msgstr "" +msgstr "パーハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Perkins" -msgstr "" +msgstr "パーキンズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Perry" -msgstr "" +msgstr "ペリー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41961,25 +42322,25 @@ msgstr "ペリー" #: lang/json/json_names.py msgctxt "City Name" msgid "Peru" -msgstr "" +msgstr "ペルー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Peter Stahlberg" -msgstr "" +msgstr "ピーター ストールベリ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Peterborough" -msgstr "" +msgstr "ピーターボロ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Petersham" -msgstr "" +msgstr "ピーターシャム" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -41991,13 +42352,13 @@ msgstr "ピーターソン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Philippe Tremblay" -msgstr "" +msgstr "フィリップ トレンブレイ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Phillips" -msgstr "" +msgstr "フィリップス" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42009,121 +42370,121 @@ msgstr "フィリップス" #: lang/json/json_names.py msgctxt "City Name" msgid "Phillipston" -msgstr "" +msgstr "フィリップストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Phippsburg" -msgstr "" +msgstr "フィップスバーグ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Piermont" -msgstr "" +msgstr "ピアモント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pittsburg" -msgstr "" +msgstr "ピッツバーグ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pittsfield" -msgstr "" +msgstr "ピッツフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pittsford" -msgstr "" +msgstr "ピッツフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pittston" -msgstr "" +msgstr "ピッツトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Plainfield" -msgstr "" +msgstr "プレーンフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Plainville" -msgstr "" +msgstr "プレーンビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Plaistow" -msgstr "" +msgstr "プライストー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pleasant Ridge Plantation" -msgstr "" +msgstr "プレザントリッジプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Plymouth" -msgstr "" +msgstr "プリマス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Plympton" -msgstr "" +msgstr "プリンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Poland" -msgstr "" +msgstr "ポーランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Pomfret" -msgstr "" +msgstr "ポムフレット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Portage Lake" -msgstr "" +msgstr "ポーテージレイク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Porter" -msgstr "" +msgstr "ポーター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Portland" -msgstr "" +msgstr "ポートランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Portsmouth" -msgstr "" +msgstr "ポーツマス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Poultney" -msgstr "" +msgstr "パウルトニー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42135,31 +42496,31 @@ msgstr "パウエル" #: lang/json/json_names.py msgctxt "City Name" msgid "Pownal" -msgstr "" +msgstr "アイランダー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Prentiss" -msgstr "" +msgstr "プレンティス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Prescott" -msgstr "" +msgstr "プレスコット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Presque Isle" -msgstr "" +msgstr "プレスクアイル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Preston" -msgstr "" +msgstr "プレストン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42171,49 +42532,49 @@ msgstr "プライス" #: lang/json/json_names.py msgctxt "City Name" msgid "Princeton" -msgstr "" +msgstr "プリンストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Proctor" -msgstr "" +msgstr "プロクター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Prospect" -msgstr "" +msgstr "プロスペクト" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Providence" -msgstr "" +msgstr "プロビデンス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Provincetown" -msgstr "" +msgstr "プロビンスタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Putnam" -msgstr "" +msgstr "パトナム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Putney" -msgstr "" +msgstr "パトニー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Quincy" -msgstr "" +msgstr "クインシー" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -42225,7 +42586,7 @@ msgstr "レイチェル" #: lang/json/json_names.py msgctxt "Full Name" msgid "Rambunctious Rick" -msgstr "" +msgstr "ランバンクティオス リック" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42237,61 +42598,61 @@ msgstr "ラミレス" #: lang/json/json_names.py msgctxt "City Name" msgid "Randolph" -msgstr "" +msgstr "ランドルフ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rangeley" -msgstr "" +msgstr "レーンジリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rangeley Plantation" -msgstr "" +msgstr "レーンジリープランテーション" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Raquel Macmahon" -msgstr "" +msgstr "ラクエル マクマホン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Raymond" -msgstr "" +msgstr "レイモンド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Raymond Bellas" -msgstr "" +msgstr "レイモンド ベラス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Raynham" -msgstr "" +msgstr "レインハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Readfield" -msgstr "" +msgstr "リードフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Reading" -msgstr "" +msgstr "リーディング" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Readsboro" -msgstr "" +msgstr "リードスボロー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42303,25 +42664,25 @@ msgstr "リード" #: lang/json/json_names.py msgctxt "City Name" msgid "Reed Plantation" -msgstr "" +msgstr "リードプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rehoboth" -msgstr "" +msgstr "リホボス" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Reno Parker" -msgstr "" +msgstr "リノ パーカー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Revere" -msgstr "" +msgstr "リビア" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42333,19 +42694,19 @@ msgstr "リチャードソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Richford" -msgstr "" +msgstr "リッチフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Richmond" -msgstr "" +msgstr "リッチモンド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ridgefield" -msgstr "" +msgstr "リッジフィールド" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -42357,19 +42718,19 @@ msgstr "ライリー" #: lang/json/json_names.py msgctxt "City Name" msgid "Rindge" -msgstr "" +msgstr "リンジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ripley" -msgstr "" +msgstr "リプリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ripton" -msgstr "" +msgstr "リプトン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42381,19 +42742,19 @@ msgstr "リベラ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Rob Keys" -msgstr "" +msgstr "ロブ キー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Rob Wetzel" -msgstr "" +msgstr "ロブ ウェッツェル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Robbinston" -msgstr "" +msgstr "ロビンストン" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -42417,31 +42778,31 @@ msgstr "ロビンソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Rochester" -msgstr "" +msgstr "ロチェスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rockingham" -msgstr "" +msgstr "ロッキンガム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rockland" -msgstr "" +msgstr "ロックランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rockport" -msgstr "" +msgstr "ロックポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rocky Hill" -msgstr "" +msgstr "ロッキーヒル" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42459,37 +42820,37 @@ msgstr "ロジャース" #: lang/json/json_names.py msgctxt "Full Name" msgid "Rolle" -msgstr "" +msgstr "ロール" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rollinsford" -msgstr "" +msgstr "ロリンズフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rome" -msgstr "" +msgstr "ローマ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Ron 'Noise' Hakim" -msgstr "" +msgstr "ロン 'ノイズ' ハキム" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Ronni Magnusson" -msgstr "" +msgstr "ロニー マグヌソン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Roque Bluffs" -msgstr "" +msgstr "ロッケブラフス" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42501,67 +42862,67 @@ msgstr "ロス" #: lang/json/json_names.py msgctxt "City Name" msgid "Rowe" -msgstr "" +msgstr "ロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rowley" -msgstr "" +msgstr "ローリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Roxbury" -msgstr "" +msgstr "ロックスベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Royalston" -msgstr "" +msgstr "ロイヤルストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Royalton" -msgstr "" +msgstr "ロイヤルトン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Rudolf Schmidt" -msgstr "" +msgstr "ルドルフ シュミット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rumford" -msgstr "" +msgstr "ランフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rumney" -msgstr "" +msgstr "ラムネー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Rupert" -msgstr "" +msgstr "ルーパート" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Russ Reynolds III" -msgstr "" +msgstr "ラス レイノルズ III" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Russell" -msgstr "" +msgstr "ラッセル" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42573,7 +42934,7 @@ msgstr "ラッセル" #: lang/json/json_names.py msgctxt "City Name" msgid "Rutland" -msgstr "" +msgstr "ラトランド" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -42585,13 +42946,13 @@ msgstr "ライアン" #: lang/json/json_names.py msgctxt "City Name" msgid "Rye" -msgstr "" +msgstr "ライ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ryegate" -msgstr "" +msgstr "ライゲート" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -42603,37 +42964,37 @@ msgstr "セバスチャン" #: lang/json/json_names.py msgctxt "City Name" msgid "Sabattus" -msgstr "" +msgstr "サバッタス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Saco" -msgstr "" +msgstr "ソーコ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Saint John Plantation" -msgstr "" +msgstr "セイントジョンプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Salem" -msgstr "" +msgstr "セーラム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Salisbury" -msgstr "" +msgstr "ソールズベリー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Sam Stein" -msgstr "" +msgstr "サム スタイン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -42651,7 +43012,7 @@ msgstr "サミュエル" #: lang/json/json_names.py msgctxt "City Name" msgid "Sanbornton" -msgstr "" +msgstr "サンボーントン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42669,43 +43030,43 @@ msgstr "サンダース" #: lang/json/json_names.py msgctxt "City Name" msgid "Sandgate" -msgstr "" +msgstr "サンドゲート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sandisfield" -msgstr "" +msgstr "サンディスフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sandown" -msgstr "" +msgstr "サンダウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sandwich" -msgstr "" +msgstr "サンドイッチ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sandy River Plantation" -msgstr "" +msgstr "サンディリバープランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sanford" -msgstr "" +msgstr "サンフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sangerville" -msgstr "" +msgstr "サンガービル" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -42723,7 +43084,7 @@ msgstr "サラ" #: lang/json/json_names.py msgctxt "City Name" msgid "Saugus" -msgstr "" +msgstr "ソーガス" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -42735,25 +43096,25 @@ msgstr "サバナ" #: lang/json/json_names.py msgctxt "City Name" msgid "Savoy" -msgstr "" +msgstr "サヴァア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Scarborough" -msgstr "" +msgstr "スカボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Scituate" -msgstr "" +msgstr "シチュエート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Scotland" -msgstr "" +msgstr "スコットランド" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42765,7 +43126,7 @@ msgstr "スコツト" #: lang/json/json_names.py msgctxt "City Name" msgid "Seabrook" -msgstr "" +msgstr "シーブルック" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -42777,157 +43138,157 @@ msgstr "ショーン" #: lang/json/json_names.py msgctxt "Full Name" msgid "Sean Duncan" -msgstr "" +msgstr "ショーン ダンカン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Searsburg" -msgstr "" +msgstr "シアスバーグ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Searsmont" -msgstr "" +msgstr "シアスモント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Searsport" -msgstr "" +msgstr "シアスポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sebago" -msgstr "" +msgstr "セバゴ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sebec" -msgstr "" +msgstr "セベック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Seboeis Plantation" -msgstr "" +msgstr "セボイズプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sedgwick" -msgstr "" +msgstr "セジウィック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Seekonk" -msgstr "" +msgstr "シーコンク" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Sercan Coyle" -msgstr "" +msgstr "セルカン コイル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Seymour" -msgstr "" +msgstr "シーモア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shaftsbury" -msgstr "" +msgstr "シャフトスベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shapleigh" -msgstr "" +msgstr "シャップレイ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sharon" -msgstr "" +msgstr "シャロン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sheffield" -msgstr "" +msgstr "シェフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shelburne" -msgstr "" +msgstr "シェルバーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sheldon" -msgstr "" +msgstr "シェルドン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shelton" -msgstr "" +msgstr "シェルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sherborn" -msgstr "" +msgstr "シャーバーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sherman" -msgstr "" +msgstr "シャーマン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shirley" -msgstr "" +msgstr "シャーリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shoreham" -msgstr "" +msgstr "ショーハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shrewsbury" -msgstr "" +msgstr "シュルーズベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Shutesbury" -msgstr "" +msgstr "シューツベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sidney" -msgstr "" +msgstr "シドニー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Simefirmi" -msgstr "" +msgstr "シメファミ" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42939,19 +43300,19 @@ msgstr "シモンズ" #: lang/json/json_names.py msgctxt "Full Name" msgid "Simon Thoresen Hult" -msgstr "" +msgstr "サイモン トーレセン ハルト" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Simsbury" -msgstr "" +msgstr "シムズベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Skowhegan" -msgstr "" +msgstr "スコーヒガン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -42963,19 +43324,19 @@ msgstr "スミス" #: lang/json/json_names.py msgctxt "City Name" msgid "Smithfield" -msgstr "" +msgstr "スミスフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Smyrna" -msgstr "" +msgstr "スミュルナ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Snow 'Meow'" -msgstr "" +msgstr "スノー 'ニャー'" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -42987,31 +43348,31 @@ msgstr "ソフィア" #: lang/json/json_names.py msgctxt "City Name" msgid "Solon" -msgstr "" +msgstr "ソロン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Somers" -msgstr "" +msgstr "サマーズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Somerset" -msgstr "" +msgstr "サマセット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Somersworth" -msgstr "" +msgstr "サマーズワース" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Somerville" -msgstr "" +msgstr "サマービル" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -43023,247 +43384,247 @@ msgstr "ソフィー" #: lang/json/json_names.py msgctxt "City Name" msgid "Sorrento" -msgstr "" +msgstr "ソレント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Berwick" -msgstr "" +msgstr "サウスベリック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Bristol" -msgstr "" +msgstr "サウスブリストル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Burlington" -msgstr "" +msgstr "サウスバーリントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Hadley" -msgstr "" +msgstr "サウスハドリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Hampton" -msgstr "" +msgstr "サウスハンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Hero" -msgstr "" +msgstr "サウスヒーロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Kingstown" -msgstr "" +msgstr "サウスキングスタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Portland" -msgstr "" +msgstr "サウスポートランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Thomaston" -msgstr "" +msgstr "サウストーマストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "South Windsor" -msgstr "" +msgstr "サウスウィンザー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southampton" -msgstr "" +msgstr "サウサンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southborough" -msgstr "" +msgstr "サウスボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southbridge" -msgstr "" +msgstr "サウスブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southbury" -msgstr "" +msgstr "サウスベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southington" -msgstr "" +msgstr "サジントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southport" -msgstr "" +msgstr "サウスポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southwest Harbor" -msgstr "" +msgstr "サウスウエストハーバー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Southwick" -msgstr "" +msgstr "サウスウイック" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Sparrow Gryphon" -msgstr "" +msgstr "スパロー グリフォン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Spathi Pkeloucht" -msgstr "" +msgstr "スパシー プケラウクト" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Spencer" -msgstr "" +msgstr "スペンサー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sprague" -msgstr "" +msgstr "スピローグ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Springfield" -msgstr "" +msgstr "スプリングフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "St. Agatha" -msgstr "" +msgstr "セントアガサ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "St. Albans" -msgstr "" +msgstr "セントアルバンス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "St. Francis" -msgstr "" +msgstr "セントフランシス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "St. George" -msgstr "" +msgstr "セントジョージ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "St. Johnsbury" -msgstr "" +msgstr "セントジョンズベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stacyville" -msgstr "" +msgstr "ステイシービル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stafford" -msgstr "" +msgstr "スタッフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stamford" -msgstr "" +msgstr "スタンフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Standish" -msgstr "" +msgstr "スタンディッシュ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stannard" -msgstr "" +msgstr "スタナード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stark" -msgstr "" +msgstr "スターク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Starks" -msgstr "" +msgstr "スタークス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Starksboro" -msgstr "" +msgstr "スタークスボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sterling" -msgstr "" +msgstr "スターリング" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stetson" -msgstr "" +msgstr "ステットソン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Steuben" -msgstr "" +msgstr "スチューベン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Steven Peterson" -msgstr "" +msgstr "スティーブン ビーターソン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43275,205 +43636,205 @@ msgstr "スチュワート" #: lang/json/json_names.py msgctxt "City Name" msgid "Stewartstown" -msgstr "" +msgstr "スチュワーツタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stockbridge" -msgstr "" +msgstr "ストックブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stockholm" -msgstr "" +msgstr "ストックホルム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stockton Springs" -msgstr "" +msgstr "ストックトンスプリングス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stoddard" -msgstr "" +msgstr "スタッダード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stoneham" -msgstr "" +msgstr "ストーナム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stonington" -msgstr "" +msgstr "ストニントン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Stottner" -msgstr "" +msgstr "ストットナー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stoughton" -msgstr "" +msgstr "ストートン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stow" -msgstr "" +msgstr "ストー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stowe" -msgstr "" +msgstr "ストウ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Strafford" -msgstr "" +msgstr "ストラッフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stratford" -msgstr "" +msgstr "ストラトフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stratham" -msgstr "" +msgstr "ストラサム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Stratton" -msgstr "" +msgstr "ストラットン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Strong" -msgstr "" +msgstr "ストロング" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sturbridge" -msgstr "" +msgstr "スターブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sudbury" -msgstr "" +msgstr "サドベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Suffield" -msgstr "" +msgstr "サフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sugar Hill" -msgstr "" +msgstr "シュガーヒル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sullivan" -msgstr "" +msgstr "サリバン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sumner" -msgstr "" +msgstr "サムナー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sunapee" -msgstr "" +msgstr "スナピー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sunderland" -msgstr "" +msgstr "サンダーランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Surrey" -msgstr "" +msgstr "サリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Surry" -msgstr "" +msgstr "サーリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sutton" -msgstr "" +msgstr "サットン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Swampscott" -msgstr "" +msgstr "スワンプスコット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Swans Island" -msgstr "" +msgstr "スワンズアイランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Swansea" -msgstr "" +msgstr "スウォンジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Swanton" -msgstr "" +msgstr "スワントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Swanville" -msgstr "" +msgstr "スワンビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Swanzey" -msgstr "" +msgstr "スワンジー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Sweden" -msgstr "" +msgstr "スウェーデン" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -43485,13 +43846,13 @@ msgstr "シドニー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Szocs Gabor Ferenc" -msgstr "" +msgstr "スゾックス ガボール フェレンツ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Sébastien Jaffre" -msgstr "" +msgstr "セバスチャン ジャフル" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -43503,19 +43864,19 @@ msgstr "タケウチ" #: lang/json/json_names.py msgctxt "City Name" msgid "Talmadge" -msgstr "" +msgstr "タルマッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tamworth" -msgstr "" +msgstr "タムワース" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Taunton" -msgstr "" +msgstr "タウントン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43527,31 +43888,31 @@ msgstr "テーラー" #: lang/json/json_names.py msgctxt "City Name" msgid "Temple" -msgstr "" +msgstr "テンプル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Templeton" -msgstr "" +msgstr "テンプルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tewksbury" -msgstr "" +msgstr "テュークスベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "The Forks" -msgstr "" +msgstr "ザ・フォークス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Thetford" -msgstr "" +msgstr "セットフォード" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43569,19 +43930,19 @@ msgstr "トマス" #: lang/json/json_names.py msgctxt "Full Name" msgid "Thomas Larsson" -msgstr "" +msgstr "トーマス ラルソン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Thomaston" -msgstr "" +msgstr "トーマストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Thompson" -msgstr "" +msgstr "トンプソン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43593,73 +43954,73 @@ msgstr "トンプソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Thorndike" -msgstr "" +msgstr "ソーンダイク" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Thornton" -msgstr "" +msgstr "ソーントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tilton" -msgstr "" +msgstr "ティルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tinmouth" -msgstr "" +msgstr "ティンマウス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tisbury" -msgstr "" +msgstr "ティスベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tiverton" -msgstr "" +msgstr "ヴァートン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Tobias Franke" -msgstr "" +msgstr "トビアス フランケ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Todric Ryhope" -msgstr "" +msgstr "トッドリック リッホープ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tolland" -msgstr "" +msgstr "ターランド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Tom Hooper" -msgstr "" +msgstr "トム フーパー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Tomas Simon" -msgstr "" +msgstr "トーマス サイモン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "TonZa" -msgstr "" +msgstr "トンザ" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py @@ -43671,13 +44032,13 @@ msgstr "トナミ ヨルゲンセン" #: lang/json/json_names.py msgctxt "City Name" msgid "Topsfield" -msgstr "" +msgstr "トップスフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Topsham" -msgstr "" +msgstr "トップスハム" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43689,43 +44050,43 @@ msgstr "トレス" #: lang/json/json_names.py msgctxt "City Name" msgid "Torrington" -msgstr "" +msgstr "トリントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Townsend" -msgstr "" +msgstr "タウンゼント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Townshend" -msgstr "" +msgstr "タウンゼンド" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Travis Gibson" -msgstr "" +msgstr "トラビス ギブソン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tremont" -msgstr "" +msgstr "トレモント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Trenton" -msgstr "" +msgstr "トレントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Trescott" -msgstr "" +msgstr "トレスコット" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py @@ -43749,37 +44110,37 @@ msgstr "トリスタン" #: lang/json/json_names.py msgctxt "City Name" msgid "Troy" -msgstr "" +msgstr "トロイ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Trumbull" -msgstr "" +msgstr "トランバル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Truro" -msgstr "" +msgstr "トゥルーロ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tuftonboro" -msgstr "" +msgstr "タフトンボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tunbridge" -msgstr "" +msgstr "タンブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Turner" -msgstr "" +msgstr "ターナー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43797,49 +44158,49 @@ msgstr "タイラー" #: lang/json/json_names.py msgctxt "City Name" msgid "Tyngsborough" -msgstr "" +msgstr "ティングスボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Tyringham" -msgstr "" +msgstr "ティリングハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Underhill" -msgstr "" +msgstr "アンダーヒル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Union" -msgstr "" +msgstr "ユニオン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Unity" -msgstr "" +msgstr "ユニティ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Upton" -msgstr "" +msgstr "アプトン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Urist McPrudent" -msgstr "" +msgstr "アーリスト マクプリューデント" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Uxbridge" -msgstr "" +msgstr "アクスブリッジ" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -43851,7 +44212,7 @@ msgstr "ヴァレリア" #: lang/json/json_names.py msgctxt "City Name" msgid "Van Buren" -msgstr "" +msgstr "ヴァン・ビューレン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43863,7 +44224,7 @@ msgstr "ヴァンワイルド" #: lang/json/json_names.py msgctxt "City Name" msgid "Vanceboro" -msgstr "" +msgstr "ヴァンスボロー" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -43875,37 +44236,37 @@ msgstr "ベネッサ" #: lang/json/json_names.py msgctxt "City Name" msgid "Vassalboro" -msgstr "" +msgstr "ヴァサルボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Veazie" -msgstr "" +msgstr "ヴィージー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Vergennes" -msgstr "" +msgstr "ヴェルジェンヌ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Vernon" -msgstr "" +msgstr "ヴァーノン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Verona Island" -msgstr "" +msgstr "ヴェローナアイランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Vershire" -msgstr "" +msgstr "ヴァーシャイル" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -43917,73 +44278,73 @@ msgstr "ビクトリア" #: lang/json/json_names.py msgctxt "City Name" msgid "Victory" -msgstr "" +msgstr "ビクトリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Vienna" -msgstr "" +msgstr "ウィーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Vinalhaven" -msgstr "" +msgstr "ヴァイナルヘブン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Voluntown" -msgstr "" +msgstr "ボランタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wade" -msgstr "" +msgstr "ウェイド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waite" -msgstr "" +msgstr "ウェイト" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waitsfield" -msgstr "" +msgstr "ウェイトスフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wakefield" -msgstr "" +msgstr "ウェイクフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Walden" -msgstr "" +msgstr "ウォールデン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waldo" -msgstr "" +msgstr "ウォルドー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waldoboro" -msgstr "" +msgstr "ウォルドボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wales" -msgstr "" +msgstr "ウェールズ" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -43995,25 +44356,25 @@ msgstr "ウォーカー" #: lang/json/json_names.py msgctxt "City Name" msgid "Wallagrass" -msgstr "" +msgstr "ワラーグラス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wallingford" -msgstr "" +msgstr "ウォリングフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Walpole" -msgstr "" +msgstr "ウォルポール" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waltham" -msgstr "" +msgstr "ウォルサム" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44025,49 +44386,49 @@ msgstr "ワード" #: lang/json/json_names.py msgctxt "City Name" msgid "Wardsboro" -msgstr "" +msgstr "ワーズボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Ware" -msgstr "" +msgstr "ウェア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wareham" -msgstr "" +msgstr "ウェアラム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Warner" -msgstr "" +msgstr "ワーナー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Warren" -msgstr "" +msgstr "ウォーレン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Warwick" -msgstr "" +msgstr "ワーウィック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Washburn" -msgstr "" +msgstr "ウォッシュバーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Washington" -msgstr "" +msgstr "ワシントン" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44079,37 +44440,37 @@ msgstr "ワシントン" #: lang/json/json_names.py msgctxt "City Name" msgid "Waterboro" -msgstr "" +msgstr "ウォーターボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waterbury" -msgstr "" +msgstr "ウォーターベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waterford" -msgstr "" +msgstr "ウォーターフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Watertown" -msgstr "" +msgstr "ウォータータウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waterville" -msgstr "" +msgstr "ウォータービル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Waterville Valley" -msgstr "" +msgstr "ウォータービルバレー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44121,97 +44482,97 @@ msgstr "ワトソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Wayland" -msgstr "" +msgstr "ウェイランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wayne" -msgstr "" +msgstr "ウェイン" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Wayne A Arthurton" -msgstr "" +msgstr "ウェイン A アーサートン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Weare" -msgstr "" +msgstr "ウィーアー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Weathersfield" -msgstr "" +msgstr "ウェザースフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Webster" -msgstr "" +msgstr "ウェブスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Webster Plantation" -msgstr "" +msgstr "ウェブスタープランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Weld" -msgstr "" +msgstr "ウェルド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wellesley" -msgstr "" +msgstr "ウェルズリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wellfleet" -msgstr "" +msgstr "ウェルフリート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wellington" -msgstr "" +msgstr "ウェリントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wells" -msgstr "" +msgstr "ウェルズ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wendell" -msgstr "" +msgstr "ウェンデル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wenham" -msgstr "" +msgstr "ウェンハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wentworth" -msgstr "" +msgstr "ウェントワース" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wesley" -msgstr "" +msgstr "ウェズレー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44223,217 +44584,217 @@ msgstr "ウェスト" #: lang/json/json_names.py msgctxt "City Name" msgid "West Bath" -msgstr "" +msgstr "ウエストバース" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Boylston" -msgstr "" +msgstr "ウエストボイルストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Bridgewater" -msgstr "" +msgstr "ウエストブリッジウォーター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Brookfield" -msgstr "" +msgstr "ウエストブルックフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Fairlee" -msgstr "" +msgstr "ウエストフェアリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Forks" -msgstr "" +msgstr "ウエストフォークス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Gardiner" -msgstr "" +msgstr "ウエストガーディナー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Greenwich" -msgstr "" +msgstr "ウエストグリニッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Hartford" -msgstr "" +msgstr "ウエストハートフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Haven" -msgstr "" +msgstr "ウエストベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Newbury" -msgstr "" +msgstr "ウエストニューベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Paris" -msgstr "" +msgstr "ウエストパリ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Rutland" -msgstr "" +msgstr "ウエストラトランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Springfield" -msgstr "" +msgstr "ウエストスプリングフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Stockbridge" -msgstr "" +msgstr "ウエストストックブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Tisbury" -msgstr "" +msgstr "ウエストティスベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Warwick" -msgstr "" +msgstr "ウエストワーウィック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "West Windsor" -msgstr "" +msgstr "ウエストウィンザー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westborough" -msgstr "" +msgstr "ウエストボロー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westbrook" -msgstr "" +msgstr "ウエストブルック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westerly" -msgstr "" +msgstr "ウェスタリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westfield" -msgstr "" +msgstr "ウエストフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westford" -msgstr "" +msgstr "ウエストフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westhampton" -msgstr "" +msgstr "ウエストハンプトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westmanland" -msgstr "" +msgstr "ウエストマンランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westminster" -msgstr "" +msgstr "ウエストミンスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westmore" -msgstr "" +msgstr "ウエストモア" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westmoreland" -msgstr "" +msgstr "ウエストモアランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Weston" -msgstr "" +msgstr "ウェストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westport" -msgstr "" +msgstr "ウエストポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Westwood" -msgstr "" +msgstr "ウエストウッド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wethersfield" -msgstr "" +msgstr "ウェザーズフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Weybridge" -msgstr "" +msgstr "ウェイブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Weymouth" -msgstr "" +msgstr "ウェイマス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Whately" -msgstr "" +msgstr "ウェイトリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wheelock" -msgstr "" +msgstr "ウィーロック" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44445,43 +44806,43 @@ msgstr "ホワイト" #: lang/json/json_names.py msgctxt "City Name" msgid "Whitefield" -msgstr "" +msgstr "ホワイトフィールド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Whiting" -msgstr "" +msgstr "ホワイティング" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Whitingham" -msgstr "" +msgstr "ホワイティングハム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Whitman" -msgstr "" +msgstr "ホイットマン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Whitneyville" -msgstr "" +msgstr "ホウィットニービル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wilbraham" -msgstr "" +msgstr "ウィルブラーム" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Will Walker" -msgstr "" +msgstr "ウィル ウォーカー" #. ~ proper name; gender=male; usage=given #: lang/json/json_names.py @@ -44493,7 +44854,7 @@ msgstr "ウィリアム" #: lang/json/json_names.py msgctxt "Full Name" msgid "William Forrest" -msgstr "" +msgstr "ウィリアム フォレスト" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44505,43 +44866,43 @@ msgstr "ウィリアムズ" #: lang/json/json_names.py msgctxt "City Name" msgid "Williamsburg" -msgstr "" +msgstr "ウィリアムズバーグ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Williamstown" -msgstr "" +msgstr "ウィリアムズタウン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Willimantic" -msgstr "" +msgstr "ウィリマンティック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Willington" -msgstr "" +msgstr "ウェリントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Williston" -msgstr "" +msgstr "ウィリストン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wilmington" -msgstr "" +msgstr "ウィルミントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wilmot" -msgstr "" +msgstr "ウィルモット" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44553,115 +44914,115 @@ msgstr "ウィルソン" #: lang/json/json_names.py msgctxt "City Name" msgid "Wilton" -msgstr "" +msgstr "ウィルトン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winchendon" -msgstr "" +msgstr "ウィンチェンドン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winchester" -msgstr "" +msgstr "ウィンチェスター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Windham" -msgstr "" +msgstr "ウィンダム" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Windsor" -msgstr "" +msgstr "ウィンザー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Windsor Locks" -msgstr "" +msgstr "ウィンザーロックス" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winhall" -msgstr "" +msgstr "ウィンホール" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winn" -msgstr "" +msgstr "ウィン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winooski" -msgstr "" +msgstr "ウィヌースキ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winslow" -msgstr "" +msgstr "ウィンスロー" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Wintar Gootblod" -msgstr "" +msgstr "ウィンター グードブロッド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winter Harbor" -msgstr "" +msgstr "ウィンターハーバー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winterport" -msgstr "" +msgstr "ウィンターポート" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winterville Plantation" -msgstr "" +msgstr "ウィンタービルプランテーション" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Winthrop" -msgstr "" +msgstr "ウィンスロップ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wiscasset" -msgstr "" +msgstr "ウィスキャセット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woburn" -msgstr "" +msgstr "ウォバーン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wolcott" -msgstr "" +msgstr "ウォルコット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wolfeboro" -msgstr "" +msgstr "ウルフボロー" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44673,67 +45034,67 @@ msgstr "ウッド" #: lang/json/json_names.py msgctxt "City Name" msgid "Woodbridge" -msgstr "" +msgstr "ウッドブリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woodbury" -msgstr "" +msgstr "ウッドベリー" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woodford" -msgstr "" +msgstr "ウッドフォード" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woodland" -msgstr "" +msgstr "ウッドランド" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woodstock" -msgstr "" +msgstr "ウッドストック" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woodville" -msgstr "" +msgstr "ウッドビル" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woolwich" -msgstr "" +msgstr "ウーリッジ" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Woonsocket" -msgstr "" +msgstr "ウーンソケット" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Worcester" -msgstr "" +msgstr "ウースター" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Worthington" -msgstr "" +msgstr "ワージントン" #. ~ proper name; usage=city #: lang/json/json_names.py msgctxt "City Name" msgid "Wrentham" -msgstr "" +msgstr "レンサム" #. ~ proper name; gender=unisex; usage=family #: lang/json/json_names.py @@ -44757,7 +45118,7 @@ msgstr "サビエル" #: lang/json/json_names.py msgctxt "City Name" msgid "Yarmouth" -msgstr "" +msgstr "ヤーマス" #. ~ proper name; usage=city #: lang/json/json_names.py @@ -44787,13 +45148,13 @@ msgstr "ザカリー" #: lang/json/json_names.py msgctxt "Full Name" msgid "Zanam" -msgstr "" +msgstr "ザナム" #. ~ proper name; gender=unisex; usage=backer #: lang/json/json_names.py msgctxt "Full Name" msgid "Zhiao" -msgstr "" +msgstr "ズヒアオ" #. ~ proper name; gender=female; usage=given #: lang/json/json_names.py @@ -44811,7 +45172,7 @@ msgstr "ゾーイー" #: lang/json/json_names.py msgctxt "Full Name" msgid "dolio" -msgstr "" +msgstr "ドリオ" #: lang/json/json_professions.py msgid "" @@ -45937,6 +46298,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45957,6 +46327,10 @@ msgstr "のエルボーは%sに" msgid " feints at %s" msgstr "のフェイントは%sに" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45967,11 +46341,36 @@ msgstr "の飛び膝蹴りは%sに" msgid " grabs %s" msgstr "の掴み投げは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "のジャブは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45982,6 +46381,20 @@ msgstr "" msgid " karate chops %s" msgstr "の手刀は%sに" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45997,21 +46410,51 @@ msgstr "の正拳突きは%sに" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "の横蹴りは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "の掌底打ちは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -46027,6 +46470,16 @@ msgstr "の足払いは%sに" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -46042,14 +46495,59 @@ msgstr "の天地投げは%sに" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "掴み外し" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -46058,10 +46556,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -46070,6 +46608,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -46100,6 +46643,26 @@ msgstr "飛び膝蹴りは%sに" msgid "You grab %s" msgstr "掴み投げは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -46115,11 +46678,26 @@ msgstr "" msgid "You karate chop %s" msgstr "手刀は%sに" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "前蹴りは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -46130,21 +46708,59 @@ msgstr "正拳突きは%sに" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "横蹴りは%sに" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "掌底打ちは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -46160,11 +46776,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "足払いは%sに" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -46175,6 +46805,11 @@ msgstr "天地投げは%sに" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "踵落とし" @@ -47504,7 +48139,7 @@ msgstr "新規" #: main_menu.cpp msgctxt "Main Menu" msgid "ptions" -msgstr "オプション" +msgstr "設定" #: main_menu.cpp msgctxt "Main Menu|New Game" @@ -47543,12 +48178,12 @@ msgstr "世界と全てのセーブデータを削除しますか?" #: main_menu.cpp msgctxt "Main Menu" msgid "Hlp" -msgstr "" +msgstr "ヘルプ" #: main_menu.cpp msgctxt "Main Menu" msgid "Lod" -msgstr "" +msgstr "ロード" #: main_menu.cpp msgid "No Worlds found!" @@ -48155,6 +48790,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -48441,6 +49086,11 @@ msgstr "" msgid "You whack %s" msgstr "殴打が%sに命中しました。" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -50092,6 +50742,11 @@ msgstr "%1$sは%3$sから%2$s!" msgid "A %s %s into the %s!" msgstr "%1$sは%3$sに%2$s!" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -50450,9 +51105,9 @@ msgid "Points left:%3d" msgstr "ポイント:%3d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Points left:%3d " -msgstr "ポイント:%3d" +msgstr "" #: newcharacter.cpp #, c-format @@ -50469,9 +51124,9 @@ msgid "Ranged penalty: -%d" msgstr "遠距離命中率: -%d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "読書速度: %d%%%%" +msgstr "読書速度: %d%%" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" @@ -50490,9 +51145,9 @@ msgid "STATS" msgstr "ステータス" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "技能劣化: %d%%%%" +msgstr "技能劣化: %d%%" #: newcharacter.cpp #, c-format @@ -50535,14 +51190,12 @@ msgid "To go back and review your character, press <" msgstr "キャラクターを見直す <" #: newcharacter.cpp -#, fuzzy msgid "To pick a random name for your character, press ?" -msgstr "名前をランダムに決める ?" +msgstr "" #: newcharacter.cpp -#, fuzzy msgid "To save this character as a template, press !" -msgstr "キャラクターをテンプレートに保存する !" +msgstr "このキャラクターをテンプレートに保存します!" #: newcharacter.cpp msgid "Too many points allocated, change some features and try again." @@ -50581,14 +51234,12 @@ msgid "Your profession of %s prevents you from taking this trait." msgstr "" #: newcharacter.cpp -#, fuzzy msgid "______NO NAME ENTERED!!!______" -msgstr "______名前が入力されていない!_____" +msgstr "______名前が入力されていない!!!______" #: newcharacter.cpp -#, fuzzy msgid "h, 4, or left arrow to decrease the statistic." -msgstr " ステータスを減少" +msgstr "" #: newcharacter.cpp msgid "j/k, 8/2, or up/down arrows to select a statistic." @@ -50599,9 +51250,8 @@ msgid "kg" msgstr "kg" #: newcharacter.cpp -#, fuzzy msgid "l, 6, or right arrow to increase the statistic." -msgstr " ステータスを上昇" +msgstr "" #: newcharacter.cpp options.cpp player.cpp msgid "lbs" @@ -51647,7 +52297,7 @@ msgstr "こっちに来て話してみてよ!" #: npctalk.cpp #, c-format msgid "Cost $%d" -msgstr "" +msgstr "コスト $%d" #: npctalk.cpp #, c-format @@ -52442,7 +53092,7 @@ msgstr "何か食料を取引してくれると言ってくれ!" #: npctalk.cpp #, c-format msgid "Profit $%d" -msgstr "" +msgstr "利益 $%d" #: npctalk.cpp msgid "Put down the !" @@ -54512,7 +55162,7 @@ msgid "Alcohol Craving" msgstr "アルコール依存症" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -54566,7 +55216,7 @@ msgstr "生体部品:" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "バースト" @@ -54605,9 +55255,9 @@ msgid "Cocaine Craving" msgstr "コカイン依存症" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Cold-Blooded -%s%d%%" -msgstr "冷血 -%s%d%%%%" +msgstr "冷血 -%s%d%%" #: player.cpp #, c-format @@ -54649,21 +55299,21 @@ msgstr "渇き ***" #: player.cpp msgid "Depressants" -msgstr "" +msgstr "鎮静剤" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressants -%s%d%%" -msgstr "鎮静剤 -%s%d%%%%" +msgstr "鎮静剤 -%s%d%%" #: player.cpp msgid "Depressed" -msgstr "" +msgstr "気分消沈" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressed -%s%d%%" -msgstr "気分消沈 -%s%d%%%%" +msgstr "気分消沈 -%s%d%%" #: player.cpp msgid "Dex " @@ -54695,7 +55345,7 @@ msgstr "歩行距離: " #: player.cpp msgid "Do you have any last words?" -msgstr "" +msgstr "最後の言葉を呟きますか?" #: player.cpp msgid "Dried Off" @@ -54805,9 +55455,9 @@ msgid "Good Feeling" msgstr "気分が良い" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Good mood +%s%d%%" -msgstr "気分高揚 +%s%d%%%%" +msgstr "気分高揚 +%s%d%%" #: player.cpp msgid "Guilty about Killing" @@ -54840,9 +55490,9 @@ msgid "Heard Disturbing Scream" msgstr "不穏な叫び声を聞いた" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Hunger -%s%d%%" -msgstr "空腹 -%s%d%%%%" +msgstr "空腹 -%s%d%%" #: player.cpp msgid "Hungry" @@ -55012,7 +55662,7 @@ msgstr "音楽" #: player.cpp msgid "Name" -msgstr "" +msgstr "名前" #: player.cpp msgid "Near starving" @@ -55044,10 +55694,6 @@ msgstr "%sを持つ余裕が無い。置いておく?" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "通常" - #: player.cpp msgid "Nothing to see here!" msgstr "そこには何もない!" @@ -55070,14 +55716,14 @@ msgid "Opiate Craving" msgstr "アヘン依存症" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Out of Sunlight -%s%d%%" -msgstr "太陽光が当たっていない -%s%d%%%%" +msgstr "太陽光が当たっていない -%s%d%%" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Overburdened -%s%d%%" -msgstr "荷物過重 -%s%d%%%%" +msgstr "荷物過重 -%s%d%%" #: player.cpp #, c-format @@ -55089,9 +55735,9 @@ msgid "Pain" msgstr "苦痛" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Pain -%s%d%%" -msgstr "苦痛 -%s%d%%%%" +msgstr "苦痛 -%s%d%%" #: player.cpp #, c-format @@ -55099,9 +55745,9 @@ msgid "Pain %d" msgstr "苦痛: %d" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Painkillers -%s%d%%" -msgstr "鎮痛剤 -%s%d%%%%" +msgstr "鎮痛剤 -%s%d%%" #: player.cpp msgid "Parched" @@ -55152,9 +55798,9 @@ msgid "Putting on a %s would be tricky." msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Quick +%s%d%%" -msgstr "俊敏 +%s%d%%%%" +msgstr "俊敏 +%s%d%%" #: player.cpp msgid "R Arm: " @@ -55170,9 +55816,9 @@ msgid "Read %i" msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%% " -msgstr "読書速度: %d%%%% " +msgstr "読書速度: %d%% " #: player.cpp #, c-format @@ -55237,9 +55883,9 @@ msgid "Siphoned %d units of %s from the %s." msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%% " -msgstr "技能劣化: %d%%%% " +msgstr "技能劣化: %d%% " #: player.cpp msgid "Skills:" @@ -55281,16 +55927,16 @@ msgstr "飢餓" #: player.cpp msgid "Stimulant" -msgstr "" +msgstr "興奮剤" #: player.cpp msgid "Stimulant Overdose" -msgstr "" +msgstr "興奮剤-過剰摂取" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Stimulants +%s%d%%" -msgstr "興奮剤 +%s%d%%%%" +msgstr "興奮剤 +%s%d%%" #: player.cpp msgid "Storage" @@ -55384,9 +56030,9 @@ msgid "The thought of eating that makes you feel sick. Really do it?" msgstr "それを食べると考えただけでも気分が悪くなる。本当に実行しますか?" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Thirst -%s%d%%" -msgstr "喉の渇き -%s%d%%%%" +msgstr "喉の渇き -%s%d%%" #: player.cpp msgid "Thirsty" @@ -55504,6 +56150,11 @@ msgstr "武器:" msgid "Weapon: %s" msgstr "武器: %s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "武器: %s(%s)" + #: player.cpp msgid "Wet" msgstr "濡れた" @@ -55566,7 +56217,7 @@ msgstr "" #: player.cpp #, c-format msgid "You can't eat your %s." -msgstr "あなたは%sを食べれない。" +msgstr "%sを食べれません。" #: player.cpp msgid "You can't finish it all!" @@ -55698,15 +56349,15 @@ msgstr "人肉を大いに楽しんで食べました。" #: player.cpp msgid "You feel dizzy for a moment." -msgstr "あなたは少し眩暈を感じた。" +msgstr "少し眩暈を感じました。" #: player.cpp msgid "You feel fatigued all of a sudden." -msgstr "あなたは急に倦怠感を全身に感じた" +msgstr "急に全身に倦怠感を感じました。" #: player.cpp -msgid "You feel horrible for eating a person.." -msgstr "人間を食べる事に恐怖を感じました。" +msgid "You feel horrible for eating a person." +msgstr "" #: player.cpp #, c-format @@ -55744,7 +56395,7 @@ msgstr "喘息の発作に見舞われた!" #: player.cpp msgid "You have the sudden urge to SCREAM!" -msgstr "叫びたい衝動に駆られた!" +msgstr "叫びたい衝動に駆られました!" #: player.cpp msgid "You know all the recipes this book has to offer." @@ -55773,7 +56424,7 @@ msgstr "" #: player.cpp #, c-format msgid "You put on your %s." -msgstr "あなたは%sを身に着けた。" +msgstr "%sを身に着けました。" #: player.cpp msgid "You scream loudly!" @@ -55781,7 +56432,7 @@ msgstr "絶叫しました!" #: player.cpp msgid "You shout loudly!" -msgstr "大声で叫んだ!" +msgstr "大声で叫びました!" #: player.cpp msgid "You start to shake uncontrollably." @@ -55793,39 +56444,39 @@ msgstr "急に痛みが走りました。" #: player.cpp msgid "You suddenly feel a little full." -msgstr "あなたは少しの満腹感を感じた。" +msgstr "少し満腹感を感じました。" #: player.cpp msgid "You suddenly feel cold." -msgstr "あなたは寒気を感じた。" +msgstr "寒気を感じました。" #: player.cpp msgid "You suddenly feel hot." -msgstr "あなたは熱気を感じた。" +msgstr "熱気を感じました。" #: player.cpp msgid "You suddenly feel hungry." -msgstr "あなたは空腹を感じた。" +msgstr "空腹を感じました。" #: player.cpp msgid "You suddenly feel numb." -msgstr "あなたは痺れを感じた。" +msgstr "身体に痺れを感じました。" #: player.cpp msgid "You suddenly feel so numb..." -msgstr "あなたは強烈な痺れを感じた..." +msgstr "身体に強烈な痺れを感じました..." #: player.cpp msgid "You suddenly feel thirsty." -msgstr "あなたは喉の渇きを感じた。" +msgstr "喉の渇きを感じました。" #: player.cpp msgid "You suddenly feel very cold." -msgstr "あなたは酷い寒気を感じた。" +msgstr "酷い寒気を感じました。" #: player.cpp msgid "You suddenly feel very hot." -msgstr "あなたは酷い熱気を感じた。" +msgstr "酷い熱気を感じました。" #: player.cpp msgid "You suffer a burning acidic discharge!" @@ -55841,11 +56492,11 @@ msgstr "回避を試みました...しかし、回避出来るだけの空間が #: player.cpp msgid "You wake up!" -msgstr "あなたは目が覚めた!" +msgstr "目が覚めました!" #: player.cpp msgid "You were hurt!" -msgstr "あなたは怪我をしていた!" +msgstr "怪我をしていました!" #: player.cpp msgid "You will not drown today.\n" @@ -55861,7 +56512,7 @@ msgstr "" #: player.cpp msgid "You're drowning!" -msgstr "あなたは溺れた!" +msgstr "溺れました!" #: player.cpp msgid "You're full. Force yourself to eat?" @@ -55897,7 +56548,7 @@ msgstr "" #: player.cpp #, c-format msgid "Your %s are very encumbered! %s" -msgstr "あなたの%1$sの動きをかなり妨げます!%2$s" +msgstr "%1$sの動きをかなり妨げます!%2$s" #: player.cpp #, c-format @@ -55942,7 +56593,7 @@ msgstr "" #: player.cpp #, c-format msgid "Your %s is %s!" -msgstr "あなたの%sは%s!" +msgstr "%1$sは%2$s!" #: player.cpp #, c-format @@ -55988,9 +56639,8 @@ msgid "Your batteries discharge slightly." msgstr "" #: player.cpp -#, fuzzy msgid "Your body strains under the weight!" -msgstr "捌き方が下手だったので、肉がグチャグチャになってしまった!" +msgstr "" #: player.cpp msgid "Your eyes won't focus without reading glasses." @@ -56044,7 +56694,7 @@ msgstr "| TABで切り替え、ESCかqで戻る。" #: ranged.cpp #, c-format msgid " You cut the %s!" -msgstr "" +msgstr " %sを切りました!" #: ranged.cpp #, c-format @@ -56112,6 +56762,11 @@ msgstr "クリティカル!" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" @@ -56383,11 +57038,11 @@ msgstr "" #: trapfunc.cpp msgid "Fell in a pit." -msgstr "穴に落ちた。" +msgstr "穴に落ちました。" #: trapfunc.cpp msgid "Fell into a spiked pit." -msgstr "串刺し穴に落ちた。" +msgstr "串刺し穴に落ちました。" #. ~ a loud humming sound #: trapfunc.cpp @@ -56412,15 +57067,15 @@ msgstr "パチンという音が聞こえました!" #: trapfunc.cpp msgid "Stepped into a dissector." -msgstr "解剖器具に足を踏み入れた。" +msgstr "解剖器具に足を踏み入れました。" #: trapfunc.cpp msgid "Stepped into a sinkhole." -msgstr "陥没穴に足を踏み入れた。" +msgstr "陥没穴に足を踏み入れました。" #: trapfunc.cpp msgid "Stepped into lava." -msgstr "溶岩に足を踏み入れた。" +msgstr "溶岩に足を踏み入れました。" #: trapfunc.cpp msgid "Stepped into thick goo." @@ -56460,12 +57115,12 @@ msgstr "" #: trapfunc.cpp #, c-format msgid "The %s falls in a pit!" -msgstr "" +msgstr "%sは穴に落ちました!" #: trapfunc.cpp #, c-format msgid "The %s falls in a spiked pit!" -msgstr "%sは串刺し穴に落ちた!" +msgstr "%sは串刺し穴に落ちました!" #: trapfunc.cpp #, c-format @@ -56608,7 +57263,7 @@ msgstr "レベルが下がった!" #: trapfunc.cpp msgid "You fall in a pit!" -msgstr "あなたは穴に落ちた!" +msgstr "穴に落ちました!" #: trapfunc.cpp msgid "You feel your life force sapping away." @@ -56632,7 +57287,7 @@ msgstr "" #: trapfunc.cpp msgid "You sink into the sinkhole!" -msgstr "あなたは陥没穴に沈んだ!" +msgstr "陥没穴に沈んだ!" #: trapfunc.cpp msgid "You step in a puddle of thick goo." @@ -56640,7 +57295,7 @@ msgstr "" #: trapfunc.cpp msgid "You step into a sinkhole, and start to sink down!" -msgstr "あなたが陥没穴に足を踏み入れると徐々に沈み始めた!" +msgstr "陥没穴に足を踏み入れると徐々に沈み始めました!" #: trapfunc.cpp msgid "You step on a loose tile, and water starts to flood the room!" @@ -56718,7 +57373,7 @@ msgstr "ブリィゥゥン...ポン!" #. ~ default name for the tutorial #: tutorial.cpp msgid "John Smith" -msgstr "" +msgstr "ジョン スミス" #: veh_interact.cpp #, c-format @@ -56762,7 +57417,7 @@ msgstr "加速度: %3d %s/t" #: veh_interact.cpp msgid "Cannot install any part here." -msgstr "" +msgstr "ここにはパーツを取り付けられない。" #: veh_interact.cpp msgid "Choose a facing direction for the new headlight." @@ -56774,11 +57429,11 @@ msgstr "" #: veh_interact.cpp msgid "Choose a part here to repair:" -msgstr "" +msgstr "修理するパーツを選択:" #: veh_interact.cpp msgid "Choose new part to install here:" -msgstr "" +msgstr "取り付けるパーツを選択:" #: veh_interact.cpp msgid "Choose wheel to use as replacement:" @@ -56879,7 +57534,7 @@ msgstr "" #: veh_interact.cpp msgid "You cannot remove that part while something is attached to it." -msgstr "。" +msgstr "他に邪魔な物があるので、パーツを取り外せない。" #: veh_interact.cpp #, c-format @@ -56894,7 +57549,7 @@ msgstr "%1$sを%2$sに埋め込んだ。" #: veh_interact.cpp #, c-format msgid "You need %s." -msgstr "" +msgstr "%sが必要です。" #: veh_interact.cpp #, c-format @@ -56995,7 +57650,7 @@ msgstr "%s" #: vehicle.cpp msgid "BEEEP!" -msgstr "" +msgstr "チリィィン!" #: vehicle.cpp msgid "Clank!" @@ -57031,7 +57686,7 @@ msgstr "折り畳み式自転車" #: vehicle.cpp msgid "HOOOOORNK!" -msgstr "" +msgstr "プォォォォォ!" #: vehicle.cpp msgid "Headlights turned off" @@ -57042,9 +57697,8 @@ msgid "Headlights turned on" msgstr "ヘッドライトを点灯させた" #: vehicle.cpp -#, fuzzy msgid "Honk horn" -msgstr "トラックのクラクション" +msgstr "警笛を鳴らす" #. ~ indicates that a vehicle part is inside #: vehicle.cpp @@ -57400,7 +58054,7 @@ msgstr "" #: worldfactory.cpp msgid "World Gen Options" -msgstr "世界生成オプション" +msgstr "世界生成設定" #: worldfactory.cpp msgid "World Name:" @@ -57410,1401 +58064,1404 @@ msgstr "世界名:" msgid "______NO NAME ENTERED!!!!_____" msgstr "______名前が入力されていない!_____" -#~ msgid "Monster Spotted!" -#~ msgstr "敵だ!" - -#~ msgid "Hardcore" -#~ msgstr "ハードコア" - -#~ msgctxt "Main Menu" -#~ msgid "elp" -#~ msgstr "ヘルプ" +#~ msgid "Too many itens" +#~ msgstr "アイテムを持ち過ぎている" -#~ msgctxt "Main Menu" -#~ msgid "oad" -#~ msgstr "ロード" +#~ msgid "Start a fire" +#~ msgstr "点火開始" -#~ msgid " select a statistic." -#~ msgstr " ステータスを選択" +#~ msgid "Contruct" +#~ msgstr "建設" -#~ msgid "(Press spacebar to toggle)" -#~ msgstr "(スペースで切り替え)" +#~ msgid "Press a direction for the furniture to move (. to cancel):" +#~ msgstr "方向キーで家具を移動(.で中止):" -#~ msgid "h, 4, or left arrow" -#~ msgstr "h, 4, 左" +#~ msgid "Can't move furniture there! Choose a direction with open floor." +#~ msgstr "そこには動かせない!空いた場所を選んで下さい。" -#~ msgid "j/k, 8/2, or arrows" -#~ msgstr "j/k, 8/2, 上/下" +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "虫が皮膚の下を這い回っている!" -#~ msgid "l, 6, or right arrow" -#~ msgstr "l, 6, 右" +#~ msgid "You wake up to the ringing of an alarm-clock." +#~ msgstr "目覚まし時計の音で目が覚めた。" -#~ msgid " barely misses!" -#~ msgstr "の攻撃がぎりぎりで外れました!" +#~ msgid "You start scratching yourself all over!" +#~ msgstr "全身を引っ掻き始めた!" -#~ msgid " misses!" -#~ msgstr "の攻撃が外れた!" +#~ msgid "Spores" +#~ msgstr "胞子" -#~ msgid "A bacon, lettuce and tomato sandwich on toasted bread." -#~ msgstr "焼いたパンでベーコンとレタス、トマトを挟んだサンドイッチ。" +#~ msgid "Bugs Under Skin" +#~ msgstr "皮膚内に蠢く虫" -#, fuzzy #~ msgid "" -#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " -#~ "you from the floor, making it easier to sleep" +#~ "Speed -40%\n" +#~ "You can feel the tiny spores sinking directly into your flesh." #~ msgstr "" -#~ "ウレタンフォームのシーツ。丸めて収納できる。断熱効果があり寝心地がいい。" +#~ "速度 -40%;\n" +#~ "小さな菌類の胞子が直接体内に入り込んでいくのを感じます。" -#~ msgid "" -#~ "A brass-jacketed variant of the .44 Magnum round. This increases " -#~ "penetration slightly at the cost of reduced expansion." -#~ msgstr "" -#~ "弾頭を完全に真鍮で覆った.44弾の一種。弾頭変形を防ぎ貫通力を高めてある。" +#~ msgid "You haven't eaten in over a week!" +#~ msgstr "ここ1週間、何も食べていない!" -#~ msgid "clams" -#~ msgstr "ハマグリ" +#~ msgid "4 days... no water.." +#~ msgstr "もう4日も水を飲んでいない..." -#~ msgid "mole" -#~ msgstr "モグラ" +#~ msgid "You haven't had anything to drink in 2 days!" +#~ msgstr "2日間、何も飲んでいない!" -#~ msgid "Start cart construction" -#~ msgstr "カートを作製する" +#~ msgid "Study %s?" +#~ msgstr "%sを学びますか?" -#~ msgid "Enter new cart name:" -#~ msgstr "車両の新しい名前を入力して下さい:" +#~ msgid "Open" +#~ msgstr "開ける" -#~ msgid "Cart" -#~ msgstr "カート" +#~ msgid "Close" +#~ msgstr "閉める" -#~ msgid "Dry processed noodles, simply add hot water. can be eaten raw" -#~ msgstr "" -#~ "乾燥処理されたラーメン。お湯を使って戻します。生でそのまま食べる事も可能で" -#~ "す。" +#~ msgid "The corpse is now thoroughly pulped." +#~ msgstr "死体は完全に潰れました。" -#~ msgid "" -#~ "You were about to marry your bride before the cataclysm, now you spend " -#~ "you days searching for her." -#~ msgstr "" -#~ "大変動前に彼女と結婚しようとしていました。今は彼女を見つける為に日々を生き" -#~ "延びています。" +#~ msgid " where? (Direction button)" +#~ msgstr " どの方向?" -#~ msgid "" -#~ "You've traveled for a living, sightseeing here and there, and living off " -#~ "your parents' trust fund. But now they're gone, and the only thing " -#~ "between you and death is the open road and your backpack." -#~ msgstr "" -#~ "生活の為に旅を続けてきました。両親の信託基金を切り崩して、色々な所に観光に" -#~ "行きました。しかし、それは突然消え去ってしまいました。所持品は目の前に広が" -#~ "る道路と背中のバックパックだけです。" +#~ msgid "Control vehicle" +#~ msgstr "操縦席につく" -#~ msgid "Your %s is destroyed! GAME OVER!" -#~ msgstr "%sが破壊されました!ゲームオーバー!" +#~ msgid "Examine" +#~ msgstr "調べる" -#~ msgid "You damage the %s!" -#~ msgstr "%sにダメージを与えました!" +#~ msgid "Peek" +#~ msgstr "のぞき見る" -#~ msgid "It disintegrates!" -#~ msgstr "崩壊しました!" +#~ msgid "You dont see any items around you!" +#~ msgstr "周囲にアイテムは何も無い!" -#~ msgid "" -#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " -#~ "from the floor, making it easier to sleep" -#~ msgstr "" -#~ "ウレタンフォームのシーツ。丸めて収納できる。断熱効果があり寝心地がいい。" +#~ msgid "Have a drink?" +#~ msgstr "飲んでみますか?" -#~ msgid "hazmatbot" -#~ msgstr "災害作業ロボット" +#~ msgid "There's no vehicle to grab there!" +#~ msgstr "引っ張る車両がない!" -#~ msgid "Your raincoat protects you from the acid rain." -#~ msgstr "レインコートが雨(酸性)を防いでいます。" +#~ msgid "Refill vehicle" +#~ msgstr "車両に補充する" -#~ msgid "Your raincoat protects you from the acidic drizzle." -#~ msgstr "レインコートが小雨(酸性)を防いでいます。" +#~ msgid "Drop" +#~ msgstr "置く" -#~ msgid "" -#~ "If true, shift the view toward the selected item if it is outside of your " -#~ "current viewport." -#~ msgstr "trueにするとアイテムを見渡した時に視点を移動する。" +#~ msgid "Butcher the %s corpse?" +#~ msgstr "%sの死体を捌きますか?" #~ msgid "" -#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." +#~ "Many important items can be very hard to find, or will cost a great deal " +#~ "of\n" +#~ "money to trade for. Fortunately, it is possible to craft a wide variety " +#~ "of\n" +#~ "goods with the proper tools, materials, and training.\n" +#~ "\n" +#~ "Some recipes require a set of tools. These are not used up when " +#~ "crafting,\n" +#~ "so you can keep your tool set. All recipes require one or more " +#~ "ingredients.\n" +#~ "These ARE used up in crafting.\n" +#~ "\n" +#~ "%sThere are five categories; Weapons, Food, \n" +#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" +#~ "no skill to create, the majority require you to have some knowledge:\n" +#~ "\n" +#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" +#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" +#~ "at higher levels, you have an understanding of chemistry and can make\n" +#~ "chemical weapons and beneficial elixirs.\n" +#~ "->Electronics skill lets you make a wide variety of tools with intricate " +#~ "uses.\n" +#~ "->Tailoring skill is used to create basic clothing, and later tough " +#~ "armor.\n" +#~ "\n" +#~ "In addition to the primary crafting skills, other skills may be " +#~ "necessary\n" +#~ "to create certain items. Traps skill, Firearms skill, and First Aid " +#~ "skill\n" +#~ "are all required for certain items." #~ msgstr "" -#~ "確認画面でのキー操作の設定。Trueにすると Y/N (大文字)\n" -#~ "Falseにすると y/n (小文字)" +#~ "ほとんどの重要なアイテムは見つけることが難しく、取引で手に入れるにしても多" +#~ "大な\n" +#~ "費用がかかります。喜ばしいことに、適正な道具、材料、そして必要な訓練が行わ" +#~ "れて\n" +#~ "いれば様々な種類の道具を作ることが可能です。\n" +#~ "\n" +#~ "いくつかのアイテムの作り方では作成用の道具が必要となります。この道具はアイ" +#~ "テム\n" +#~ "作成を行っても消費されません。作成用の道具はそのまま保持されます。一方全て" +#~ "のア\n" +#~ "イテム制作では一つかそれ以上の材料が必要となります。材料はアイテム製作で消" +#~ "費さ\n" +#~ "れます。\n" +#~ "\n" +#~ "%s制作されるアイテムには5つのカテゴリーがありま\n" +#~ "す。武器、食物、電子機器、装甲、その他の雑多なものです。いくつかのアイテム" +#~ "は製\n" +#~ "作にスキルを使用しませんが、大多数のアイテム制作では多少の知識が必要で" +#~ "す。\n" +#~ "->機械工学スキルは武器、罠、そしていくつかの道具の製作に使用されます。\n" +#~ "->調理スキルは低レベルならばおいしい料理の製作に使用され、高レベルならばあ" +#~ "なた\n" +#~ "は化学の知識も持っているでしょうから、化学兵器や有益な特効薬を作ることがで" +#~ "きま\n" +#~ "す。\n" +#~ "->電子工学のスキルがあれば広い範囲にわたる、こみいった様々な道具を作ること" +#~ "がで\n" +#~ "きるようになります。\n" +#~ "->裁縫のスキルは基本的な服の制作に使用されます。高めれば頑丈な装甲を作るこ" +#~ "とが\n" +#~ "できます。\n" +#~ "\n" +#~ "これらの直接的なアイテム制作スキルに加えて罠スキル、銃火器スキル、加えて救" +#~ "急医\n" +#~ "療スキルもいくらかのアイテム制作には必要となります。" -#~ msgid "a smoker explodes!" -#~ msgstr "煙幕ゾンビが爆発した!" +#~ msgid "Error: Item Missing." +#~ msgstr "エラー: アイテムが見つからない。" -#~ msgid "a boomer explodes!" -#~ msgstr "ブーマーが爆発した!" +#~ msgid "Put the dog food" +#~ msgstr "ドッグフードを置く" -#~ msgid "The %s's corpse melts into a pool of acid." -#~ msgstr "%sの死体は溶け落ちて、酸の水溜りとなった。" +#~ msgid "You add a %s location to your map." +#~ msgstr "%sの場所を地図に追加した。" -#~ msgid "Critical! " -#~ msgstr "クリティカル! " +#~ msgid "You can't find a hospital near your location." +#~ msgstr "この近くに病院は無さそうだ。" -#~ msgid " for %d damage." -#~ msgstr " %dのダメージを与えた。" +#~ msgid "Drill" +#~ msgstr "ドリル" -#~ msgid " but do no damage." -#~ msgstr " しかし、ダメージを与えられない。" +#~ msgid "Place the turret" +#~ msgstr "タレットを設置" -#~ msgid "%1$s whacks %4$s" -#~ msgstr "%1$sの殴打は%4$sに" +#~ msgid "You %4$s the %1$s into %2$i %3$s." +#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." +#~ msgstr[0] "%1$sを%2$i %3$sに%4$s。" -#~ msgid "%1$s whack %4$s" -#~ msgstr "%1$sの殴打は%4$sに" +#~ msgid "Cut up metal" +#~ msgstr "金属を切る" -#~ msgid "%1$s batters %4$s" -#~ msgstr "%1$sの乱打は%4$sに" +#~ msgid "Pitch the tent" +#~ msgstr "テントを張る" -#~ msgid "%1$s batter %4$s" -#~ msgstr "%1$sの乱打は%4$sに" +#~ msgid "Put up the shelter" +#~ msgstr "シェルターを設置する" -#~ msgid "%1$s clobbers %4$s" -#~ msgstr "%1$sの強打は%4$sに" +#~ msgid "" +#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " +#~ "will provide excellent protection against ambient radiation." +#~ msgstr "" +#~ "有害物質を扱う為の服です。\n" +#~ "非常に動きづらく厄介ですが、これを着ている限り\n" +#~ "放射線からの優れた防御を得られます。" -#~ msgid "%1$s clobber %4$s" -#~ msgstr "%1$sの強打は%4$sに" +#~ msgid "plate mail" +#~ msgstr "プレートメイル" -#~ msgid "%1$s nicks %4$s" -#~ msgstr "%1$sの薄斬攻撃は%4$sに" +#~ msgid "A thin cotton jacket. Good for brisk weather." +#~ msgstr "" +#~ "綿で作られた薄手のジャケットです。\n" +#~ "天候が良い日に適しています。" -#~ msgid "%1$s nick %4$s" -#~ msgstr "%1$sの薄斬攻撃は%4$sに" +#~ msgid "A padded coat with deep pockets. Very warm." +#~ msgstr "防寒対策が施されたコート。ポケット付き。とても暖かい。" -#~ msgid "%1$s cuts %4$s" -#~ msgstr "%1$sの斬撃は%4$sに" +#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." +#~ msgstr "厚手の綿の上着。動きづらいが大きなポケットがある。" -#~ msgid "%1$s cut %4$s" -#~ msgstr "%1$sの斬撃は%4$sに" +#~ msgid "A thin pair of leather gloves. Good for doing manual labor." +#~ msgstr "" +#~ "革で作られた薄手の手袋です。\n" +#~ "肉体労働をする場合にちょうど良いでしょう。" -#~ msgid "%1$s slices %4$s" -#~ msgstr "%1$sの横斬攻撃は%4$sに" +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "すこしかさばるが、そのぶんアイテムを持ち運べるようになる。" -#~ msgid "%1$s slice %4$s" -#~ msgstr "%1$sの横斬攻撃は%4$sに" +#~ msgid "plate armor boots" +#~ msgstr "全身板金鎧の靴" -#~ msgid "%1$s hacks %4$s" -#~ msgstr "%1$sの縦斬攻撃は%4$sに" +#~ msgid "plate armor gauntlets" +#~ msgstr "全身板金鎧の籠手" -#~ msgid "%1$s hack %4$s" -#~ msgstr "%1$sの縦斬攻撃は%4$sに" +#~ msgid "light plate mail" +#~ msgstr "軽量板金鎧" -#~ msgid "%1$s pokes %4$s" -#~ msgstr "%1$sの突刺攻撃は%4$sに" +#~ msgid "An ornamental suit of armor." +#~ msgstr "観賞用の鎧。" -#~ msgid "%1$s poke %4$s" -#~ msgstr "%1$sの突刺攻撃は%4$sに" +#~ msgid "" +#~ "A leather sling, it is easy to use and accurate, but pebbles do little " +#~ "damage. Pebbles are used as ammunition." +#~ msgstr "" +#~ "革のスリング。扱いやすく命中させやすいが小石ではほどんどダメージを与えられ" +#~ "ない。" -#~ msgid "%1$s stabs %4$s" -#~ msgstr "%1$sの刺突攻撃は%4$sに" +#~ msgid "" +#~ "A brass-jacketed .22 calibre round with superior penetration capacity." +#~ msgstr "弾頭を完全に真鍮で覆った.22弾。貫通力に優れる。" -#~ msgid "%1$s stab %4$s" -#~ msgstr "%1$sの刺突攻撃は%4$sに" +#~ msgid "" +#~ "9 millimeter parabellum is generally regarded as the most popular handgun " +#~ "cartridge, used by the majority of US police forces. It is also a very " +#~ "popular round in sub-machine guns." +#~ msgstr "" +#~ "9ミリパラベラムは最も広く使用されている弾薬。サブマシンガン用弾薬の主流で" +#~ "もある。" -#~ msgid "%1$s pierces %4$s" -#~ msgstr "%1$sの貫通攻撃は%4$sに" +#~ msgid "A 40mm grenade with a concussive explosion." +#~ msgstr "グレネード弾 (40mm/コンカッション)" -#~ msgid "%1$s pierce %4$s" -#~ msgstr "%1$sの貫通攻撃は%4$sに" +#~ msgid "" +#~ "A 40mm grenade with a small explosion and a high number of damaging " +#~ "fragments." +#~ msgstr "グレネード弾 (40mm/フラグ)" -#~ msgid "%1$s impales %4$s" -#~ msgstr "%1$sの串刺攻撃は%4$sに" +#~ msgid "" +#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " +#~ "feet of concrete." +#~ msgstr "60mm対戦車ロケット弾。60cmの厚みのあるコンクリートを貫通する。" -#~ msgid "%1$s impale %4$s" -#~ msgstr "%1$sの串刺攻撃は%4$sに" +#~ msgid "Basic Sword & Sorcery." +#~ msgstr "ポピュラーな剣と魔法の世界を描いた小説。" -#~ msgid "%s's" -#~ msgstr "%s" +#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." +#~ msgstr "" +#~ "飲まないで下さい。\n" +#~ "アンモニアと混ぜると毒ガスが発生します。" -#~ msgid "the %s's" -#~ msgstr "%s" - -#~ msgid "you" -#~ msgstr "あなた" - -#~ msgid "%s" -#~ msgstr "%s" - -#~ msgid "the %s" -#~ msgstr "%s" - -#~ msgid "%1$s hits %4$s" -#~ msgstr "%1$sの攻撃は%4$sに" - -#~ msgid "%1$s hit %4$s" -#~ msgstr "%1$sの攻撃は%4$sに" - -#~ msgid "your" -#~ msgstr "あなた" - -#~ msgid "his" -#~ msgstr "彼" - -#~ msgid "her" -#~ msgstr "彼女" - -#~ msgid "You" -#~ msgstr "あなた" - -#~ msgid "%s" -#~ msgstr "%s" - -#~ msgid "brush." -#~ msgstr "ブラシで擦る様な音が聞こえた。" - -#~ msgid "crunch." -#~ msgstr "バリバリとかみ砕くような音が聞こえた。" - -#~ msgid "whack!" -#~ msgstr "ボカンという強打音が聞こえた!" - -#~ msgid "whump!" -#~ msgstr "ドーンという大きな音が聞こえた!" - -#~ msgid "wham!" -#~ msgstr "ドカンという強い衝撃音が聞こえた!" - -#~ msgid "whump." -#~ msgstr "ドーンという音が聞こえた。" - -#~ msgid "porcelain breaking!" -#~ msgstr "陶磁器が割れる音が聞こえた!" - -#~ msgid "clang!" -#~ msgstr "甲高い音が聞こえた!" - -#~ msgid "metal screeching!" -#~ msgstr "金属音が鳴り響いた!" - -#~ msgid "%1$s jabs %4$s" -#~ msgstr "%1$sのジャブは%4$sに" - -#~ msgid "%1$s jab %4$s" -#~ msgstr "%1$sのジャブは%4$sに" - -#~ msgid "%1$s strikes %4$s" -#~ msgstr "%1$sの掌底打ちは%4$sに" - -#~ msgid "%1$s strike %4$s" -#~ msgstr "%1$sの掌底打ちは%4$sに" - -#~ msgid "%1$s grabs %4$s" -#~ msgstr "%1$sの掴み投げは%4$sに" - -#~ msgid "%1$s grab %4$s" -#~ msgstr "%1$sの掴み投げは%4$sに" +#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." +#~ msgstr "" +#~ "飲まないで下さい。\n" +#~ "漂白剤と混ぜると毒ガスが発生します。" -#~ msgid "%1$s throws %4$s" -#~ msgstr "%1$sの天地投げは%4$sに" +#~ msgid "beef jerky" +#~ msgstr "ビーフジャーキー" -#~ msgid "%1$s throw %4$s" -#~ msgstr "%1$sの天地投げは%4$sに" +#~ msgid "Bread and turkey, that's it." +#~ msgstr "パンで七面鳥を挟んだだけのサンドイッチです。" -#~ msgid "%1$s karate chops %4$s" -#~ msgstr "%1$sの手刀は%4$sに" +#~ msgid "carrot" +#~ msgstr "人参" -#~ msgid "%1$s karate chop %4$s" -#~ msgstr "%1$sの手刀は%4$sに" +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "おえっ、いや、非常に美味しいが...中身が少なすぎる。" -#~ msgid "%1$s quickly punches %4$s" -#~ msgstr "%1$sの正拳突きは%4$sに" +#~ msgid "sardines" +#~ msgstr "鰯" -#~ msgid "%1$s quickly punch %4$s" -#~ msgstr "%1$sの正拳突きは%4$sに" +#~ msgid "tuna fish" +#~ msgstr "ツナ" #~ msgid "" -#~ "Your overall skill in using firearms. With higher levels, this general " -#~ "experience increases accuracy with any gun, but is secondary to practice " -#~ "with the type of gun in question." -#~ msgstr "銃火器を扱う技能。命中率を上昇させる。" - -#~ msgid "firearms" -#~ msgstr "射撃武器" - -#~ msgid "tankbot" -#~ msgstr "戦車ロボット" - -#~ msgid "tripod robot" -#~ msgstr "三脚式ロボット" - -#~ msgid "molebot" -#~ msgstr "採掘ロボット" - -#~ msgid "copbot" -#~ msgstr "警官ロボット" - -#~ msgid "secubot" -#~ msgstr "警備ロボット" - -#~ msgid "A large snake, translucent black." -#~ msgstr "半透明の黒い大きな蛇。" - -#~ msgid "Gozu" -#~ msgstr "牛頭" - -#~ msgid "gelatinous blob" -#~ msgstr "ゲル状ブロブ" - -#~ msgid "Mi-go" -#~ msgstr "ミ=ゴ" - -#~ msgid "A large snail, with an oddly human face." -#~ msgstr "人間の顔を持つ気味の悪い大きな蝸牛。" - -#~ msgid "Thing" -#~ msgstr "シング" - -#~ msgid "Amigara horror" -#~ msgstr "阿彌殻の怪" - -#~ msgid "black widow" -#~ msgstr "黒後家蜘蛛" - -#~ msgid "trap door spider" -#~ msgstr "戸立て蜘蛛" - -#~ msgid "web spider" -#~ msgstr "巣作り蜘蛛" - -#~ msgid "sewer fish" -#~ msgstr "下水道の魚" - -#~ msgid "crawler mutant" -#~ msgstr "クロウラーの変異体" - -#~ msgid "one-eyed mutant" -#~ msgstr "隻眼の変異体" +#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " +#~ "emergency." +#~ msgstr "" +#~ "大きな蜜蝋の塊。\n" +#~ "不味いが栄養があり、緊急時なら食べても構わない。" -#~ msgid "C.H.U.D." -#~ msgstr "チャド" +#~ msgid "" +#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " +#~ "all sorts of afflictions." +#~ msgstr "蜂蜜と異なり白いクリーム状。病を癒す効果がある。" -#~ msgid "spore" -#~ msgstr "胞子" +#~ msgid "" +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." +#~ msgstr "奇形の胎児。摂食することでDNAに突然変異を引き起こす。" -#~ msgid "young fungaloid" -#~ msgstr "若い真菌人" +#~ msgid "" +#~ "A misshapen human arm, eating this would be pretty disgusting and cause " +#~ "your DNA to mutate." +#~ msgstr "" +#~ "奇形の人間の腕部。口にすると吐き気をもよおし、突然変異を引き起こす。" -#~ msgid "vinebeast" -#~ msgstr "蔦の野獣" +#~ msgid "" +#~ "A malformed human leg, this would be gross to eat, and cause mutations." +#~ msgstr "" +#~ "奇形の人間の脚部。口にすると吐き気をもよおし、突然変異を引き起こす。" -#~ msgid "creeping vine" -#~ msgstr "這い回る蔦" +#~ msgid "" +#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." +#~ msgstr "蟻の卵。ソフトボール大。栄養価は高いが口にするにはちょっと…。" -#~ msgid "queen triffid" -#~ msgstr "女王トリフィド" +#~ msgid "This white flour is useful for baking." +#~ msgstr "パンを焼く時に役立ちます。" -#~ msgid "young triffid" -#~ msgstr "若いトリフィド" +#~ msgid "MRE - beef" +#~ msgstr "携行食(牛肉)" -#~ msgid "child zombie" -#~ msgstr "子供ゾンビ" +#~ msgid "canned apple slices" +#~ msgstr "缶詰 (薄切り林檎)" -#~ msgid "master zombie" -#~ msgstr "マスターゾンビ" +#~ msgid "apple slices" +#~ msgstr "アップルサイダー" -#~ msgid "A portion of a giant worm that is still alive." -#~ msgstr "まだ生きている巨大ワームの一部。" +#~ msgid "" +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire." +#~ msgstr "" +#~ "煙草や薬品、火炎瓶などのアイテムを使うため\n" +#~ "ライターを携帯しなくてはなりません。\n" +#~ "隣接するアイテムに火をつけることも可能です。" -#~ msgid "fungal insect" -#~ msgstr "真菌昆虫" +#~ msgid "" +#~ "Matches must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use matches to light " +#~ "nearby items on fire." +#~ msgstr "" +#~ "煙草や薬品、火炎瓶などのアイテムを使うため\n" +#~ "マッチを携帯しなくてはなりません。\n" +#~ "隣接するアイテムに火をつけることも可能です。" -#~ msgid "A small domesticated cat, gone feral." -#~ msgstr "野生化した小さな飼い猫。" +#~ msgid "" +#~ "A fire drill is a simple item for firestarting, made from two pieces of " +#~ "wood and some string. Although it is constructed out of simple materials, " +#~ "it's slow and rather difficult to get a fire started with this tool." +#~ msgstr "" +#~ "原始的な発火道具。2本の木と糸からできている。つくるのは簡単だが火種ができ" +#~ "るまでが大変。" -#~ msgid "A medium-sized domesticated dog, gone feral." -#~ msgstr "野生化した中型の飼い犬。" +#~ msgid "A simple hand-powered stone quern." +#~ msgstr "手で動くシンプルな石の挽臼。" -#~ msgid "A vicious and fast hunter." -#~ msgstr "素早く、獰猛な狩人。" +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. Use it to turn it on." +#~ msgstr "ガソリンが燃料のランタン。明るさはそこそこだが長持ちする。" -#~ msgid "A grey wolf. A vicious and fast pack hunter." -#~ msgstr "灰色狼。素早く、獰猛な狩人。" +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. It is turned on. Use it to turn it off." +#~ msgstr "" +#~ "ガソリンが燃料のランタン。明るさはそこそこだが長持ちする。火がともされてい" +#~ "る。" -#~ msgid "A buck of the largest deer species." -#~ msgstr "鹿類で最も大きな鹿。" +#~ msgid "" +#~ "A burnt-out lightstrip. You could disassemble this to recover the " +#~ "amplifier circuit." +#~ msgstr "使用済のストリップライト。解体すれば増幅回路が手に入る。" -#~ msgid "A large buck, fast-moving and strong." -#~ msgstr "素早くて力強い、大きな鹿。" +#~ msgid "" +#~ "A light-emitting circuit wired directly to some batteries. Once " +#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " +#~ "batteries die, you'll need to scrap it to recover the components that are " +#~ "reusable." +#~ msgstr "" +#~ "発光する回路。ワイヤーで直接バッテリーにつなげてある。15分で1バッテリーを" +#~ "消費する。" #~ msgid "" -#~ "A cute wiggling nose, cotton tail, and\n" -#~ "delicious flesh." -#~ msgstr "可愛く揺れる鼻、フワフワの尻尾、そして...美味しい肉。" +#~ "A light-emitting circuit wired directly to some batteries. Provides a " +#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " +#~ "die, you'll need to scrap it to recover the components that are reusable." +#~ msgstr "" +#~ "発光する回路。ワイヤーで直接バッテリーにつなげてある。微弱な光源になる。15" +#~ "分で1バッテリーを消費する。" -#~ msgid "A small woodland animal." -#~ msgstr "森に生息する小動物。" +#~ msgid "" +#~ "A small blue light glowstick, bend it to break the glass cylinder inside " +#~ "and start the reaction to produce a very small amount of light." +#~ msgstr "" +#~ "青く光る短いスティック。折り曲げると中の容器が割れて中身が化学反応を起こし" +#~ "淡く発光する。" -#~ msgid ".223 caliber retool" -#~ msgstr "223口径化キット" +#~ msgid "" +#~ "A small heating element. Indispensable for cooking and chemistry. Try not " +#~ "to burn yourself." +#~ msgstr "料理や化学に欠かせない。やけどに注意。" -#~ msgid ".308 caliber retool" -#~ msgstr "308口径化キット" +#~ msgid "" +#~ "A piece of metal that can get very hot. Necessary for electronics " +#~ "crafting. You could also use it to cauterize wounds, if you had to." +#~ msgstr "" +#~ "はんだごて。\n" +#~ "先端が加熱する工具。電子機器の作製に必須。傷を焼灼することもできる。" -#~ msgid "4.6mm caliber retool" -#~ msgstr "4.6mm口径化キット" +#~ msgid "" +#~ "Using this item on a container full of water will purify the water. Water " +#~ "taken from uncertain sources like a river may be dirty." +#~ msgstr "" +#~ "川などで汲んだ水は汚れている可能性があります。\n" +#~ "水の入った容器をこのアイテムに使用すれば、\n" +#~ "水を綺麗な水に浄化することができます。" -#~ msgid "5.7mm caliber retool" -#~ msgstr "5.7mm口径化キット" +#~ msgid "" +#~ "A string of numbers to access the elevator in the hazardous waste " +#~ "sarcophagus." +#~ msgstr "有害ゴミの石棺にあるエレベーターを動かす為の数字配列。" -#~ msgid ".22 caliber retool" -#~ msgstr "22口径化キット" +#~ msgid "" +#~ "A road map. Use it to read points of interest, including, but not limited " +#~ "to, location(s) of hospital(s) nearby." +#~ msgstr "道路地図。読むと地図に病院などが追記される。" -#~ msgid "9mm caliber retool" -#~ msgstr "9mm口径化キット" +#~ msgid "" +#~ "A prying tool. Use it to open locked doors without destroying them, or to " +#~ "lift manhole covers." +#~ msgstr "" +#~ "ドアなどを壊すことなく開けることができる工具。マンホールの蓋も持ち上げるこ" +#~ "とができる。" -#~ msgid ".45 caliber retool" -#~ msgstr "45口径化キット" +#~ msgid "" +#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " +#~ "pile of dirt." +#~ msgstr "" +#~ "くわ。農作業で使う用具。作物を育成させるために土を盛り上げるのに使う。" -#~ msgid "A common hydraulic jack, used when changing tires." -#~ msgstr "タイヤを交換する際に使用される一般的な油圧ジャッキ。" +#~ msgid "A digging tool. Use it to dig pits adjacent to your location." +#~ msgstr "掘削するための工具。隣接する地形に使う。" #~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." +#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " +#~ "a vehicle." #~ msgstr "" -#~ "被爆量を検知するバッジ。\n" -#~ "放射線を遮断する袋に入っている。" +#~ "柔軟なゴムホース。何かの部品として使える。車両から燃料を抜き取る事もでき" +#~ "る。" #~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire. This one features a flip top cover and can be " -#~ "refueled when empty." +#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " +#~ "the ground, creating a trap that will warn you with noise when something " +#~ "steps on it." #~ msgstr "" -#~ "煙草や薬品、火炎瓶などのアイテムを使うため\n" -#~ "ライターを携帯しなくてはなりません。\n" -#~ "隣接するアイテムに火をつけることも可能です。\n" -#~ "開閉できるカバーがついており、燃料を補充することが可能。" +#~ "緩衝材などに使われる気泡シート。地面に設置しておけば何かが通った時に音が鳴" +#~ "るだろう。" #~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. Use this item " -#~ "to light the fuse; you will, of course, need a lighter in your inventory " -#~ "to do this. After lighting it, throw it to cause fires." +#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " +#~ "creating a trap that will ensnare and damage anything that steps on it. " +#~ "If you are carrying a shovel, you will have the option of burying it." #~ msgstr "" -#~ "ボトルにマッチの先を詰めたもの。導火線に火を点けてから投げる。ライターが必" -#~ "要。" +#~ "ばね仕掛けのトラバサミ。地面に設置する。上に乗ったものの脚を強く挟み込む。" +#~ "シャベルを持っていれば設置する時に埋めることができる。" #~ msgid "" -#~ "A set of swages and dies for metalsmithing. Used in some metalworking " -#~ "fabrication recipes." -#~ msgstr "金属加工セット。一部の金属加工レシピで使える。" +#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " +#~ "pulled, the crossbow fires. Only a single round can be used, after which " +#~ "the trap is disabled." +#~ msgstr "" +#~ "クロスボウのトリガーにワイヤーをくくりつけたもの。ボルトが1本装填されてい" +#~ "る。" #~ msgid "" -#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "短く頑丈な金属製の鑿(のみ)。" +#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " +#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " +#~ "time the trigger is pulled, one or two may be used." +#~ msgstr "" +#~ "ソーンオフショットガンのトリガーにワイヤーをくくりつけたもの。弾が2発装填" +#~ "されている。" #~ msgid "" -#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " -#~ "cooking or in metalworking fabrication recipes." -#~ msgstr "鋼のトング。料理や鍛冶で使用する。" +#~ "A machete is attached laterally to a motor, with a tripwire controlling " +#~ "its throttle. When the tripwire is pulled, the blade is swung around with " +#~ "great force. The trap forms a 3x3 area of effect." +#~ msgstr "" +#~ "モーターにマチェットが取り付けてある。ワイヤーが引っ張られると作動する。効" +#~ "果範囲は3x3タイル。" #~ msgid "" -#~ "A fine glass tube with a bulb on the end, used in partaking of certain " -#~ "illicit substances." -#~ msgstr "バルブが付いているガラスのパイプ。薬物の摂取に使う。" - -#~ msgid "A bicycle folded into a relatively portable package." -#~ msgstr "折りたたんで運べるようにした自転車。" - -#~ msgid "A fluffy towel, can be used to dry yourself." -#~ msgstr "フワフワのタオル。濡れた体を拭くのに使う。" +#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " +#~ "Requires a young tree nearby. Effective at trapping and killing some " +#~ "small animals." +#~ msgstr "" +#~ "ひもの輪縄とスネアトリガーで構成されている\r\n" +#~ "シンプルなスネアトラップの道具一式です。\r\n" +#~ "一部の小動物を捕獲して殺すのに有効ですが、\r\n" +#~ "設置場所の近くに若木を必要とします。" -#~ msgid "A talking doll for children, luckily it still works." -#~ msgstr "子供用の喋る人形は幸運にもまだ動きます。" +#~ msgid "" +#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " +#~ "Requires a tree nearby. Effective at trapping monsters." +#~ msgstr "" +#~ "ロープの輪縄とスネアトリガーで構成されている\r\n" +#~ "シンプルなスネアトラップの道具一式です。\r\n" +#~ "一部のモンスターを捕獲して殺すのに有効ですが、\r\n" +#~ "設置場所の近くに木を必要とします。" -#~ msgid "A decent sized piece of cotton designed for medical purposes." -#~ msgstr "切りそろえられたコットン。医療用。" +#~ msgid "" +#~ "A section of a pipe filled with explosive materials. Use this item to " +#~ "light the fuse, which gives you 3 turns before it detonates. You will " +#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." +#~ msgstr "" +#~ "爆発物が詰め込まれたパイプ。爆発するまで3ターン。火を点けるにはライターが" +#~ "必要。爆発しないこともある。" -#~ msgid "vacuum-packed apple slices" -#~ msgstr "真空パック(薄切り林檎)" +#~ msgid "active teargas" +#~ msgstr "催涙弾 (点火)" #~ msgid "" -#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." -#~ msgstr "ポータブル真空包装機。空気を吸引し食品を密封する。" +#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " +#~ "the rag; you will, of course, need a lighter in your inventory to do " +#~ "this. After lighting it, throw it to cause fires." +#~ msgstr "ボトルに可燃性の液体を入れ布で栓をしたもの。ライターが必要。" #~ msgid "" -#~ "A cordless drill with a selection of drill bits. The charger base " -#~ "contains a battery draining attachment so the drill can be charged in " -#~ "lieu of mains power." -#~ msgstr "充電式のドリル。充電器が付属しているので電源が無くても使える。" +#~ "A glass vial, split into two chambers. The divider is removable, which " +#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " +#~ "happens if you throw the vial) they will spill out as a pool of potent " +#~ "acid." +#~ msgstr "" +#~ "化学物質が入った小ビン。中の仕切りが外れると混ざる。外気に触れると強力な酸" +#~ "のたまりができる。" #~ msgid "" -#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." -#~ msgstr "ビン詰め。りんごの砂糖漬け。" - -#~ msgid "sealed jar of canned apple" -#~ msgstr "密封瓶 (缶詰林檎)" - -#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." -#~ msgstr "ビン詰め。野菜。" +#~ "A glass vial, with two chemicals mixing inside. If this mixture is " +#~ "exposed to air (as happens if you throw the vial), they will spill out as " +#~ "a pool of potent acid." +#~ msgstr "" +#~ "小ビン。中の化学物質が混ざっている。外気に触れると強力な酸のたまりができ" +#~ "る。" #~ msgid "" -#~ "A sealed glass jar containing human meat. Activate to open and enjoy." -#~ msgstr "ビン詰め。人肉。" +#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " +#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " +#~ "they will begin to explode, so throw them quickly!" +#~ msgstr "" +#~ "25個連なった爆竹。点火するにはライターが必要。火を点けたら爆発する前にさっ" +#~ "さと投げよう。" #~ msgid "" -#~ "A sealed glass jar containing some meat. Activate to open and enjoy." -#~ msgstr "ビン詰め。動物の肉。" +#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " +#~ "them quickly before the start to explode." +#~ msgstr "" +#~ "25個連なった爆竹。火が点いていてシューシューいってる。爆発する前にさっさと" +#~ "投げよう。" #~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. This one has " -#~ "been used already and is now useless." -#~ msgstr "発熱剤。怪我の手当や加熱調理に使う。使用済み。" +#~ "A firecracker with a short fuse. Use this item to light the fuse; you " +#~ "will need a lighter of course. Shortly after you light the fuse it will " +#~ "explode, so throw it quickly!" +#~ msgstr "" +#~ "短い導火線がある爆竹。導火線に火を点けてから使う。ライターが必要。火を点け" +#~ "たら爆発するからさっさと投げよう。" #~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. Usable only " -#~ "once." -#~ msgstr "発熱剤。怪我の手当や加熱調理に使う。使い捨て。" +#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " +#~ "before it explodes." +#~ msgstr "" +#~ "火が点いた爆竹。導火線がシューシューいってる。爆発する前に投げよう。" #~ msgid "" -#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " -#~ "shelter has been damaged, and needs repairs." +#~ "A high-powered stun gun. Use this item to attempt to electrocute an " +#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " +#~ "shock can actually jump through the air, it is difficult to miss." #~ msgstr "" -#~ "小型のシェルター。木や皮革からつくられている。(a)ctivateして設置する。損傷" -#~ "しており修理が必要。" +#~ "高電圧のスタンガン。隣接する相手を感電させダメージとマヒを与えることができ" +#~ "る。" -#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgid "" +#~ "A stone with spirals all over it, and holes around its perimeter. Though " +#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " +#~ "it." #~ msgstr "" -#~ "小型のシェルター。木や皮革からつくられている。(a)ctivateして設置する。" +#~ "渦巻きと小さな穴に全体が覆われた石です。\n" +#~ "大きさはかなりありますが、全く重くありません。\n" +#~ "空気が石の周りに凝縮されているように見えます。" + +#~ msgid "A human skull with strange etchings covering it." +#~ msgstr "人間の頭蓋骨。奇妙な装飾が彫り込まれている。" + +#~ msgid "A crude explosive device triggered by a piece of string." +#~ msgstr "紐をつないだだけの爆発物。" #~ msgid "" -#~ "A large stick, with the end carved into a blade for digging. Can be used " -#~ "to dig shallow pits, but not deep ones." +#~ "A small whistle. When used, it produces a high tone that causes nearby " +#~ "friendly dogs to either follow you closely and stop attacking, or start " +#~ "attacking enemies if they are currently docile." #~ msgstr "" -#~ "末端に掘削用の刃が取り付けられた大きい棒です。\n" -#~ "浅い穴を掘るために使われます。\n" -#~ "しかし深い穴を掘る事は出来ません。" +#~ "小さなホイッスル。周波数の高い音を発し、友好的な犬を近くに呼び寄せたりでき" +#~ "る。" #~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." -#~ msgstr "平べったい石を木に添えたもの。シャベルの代用品。" +#~ "A military style fold up cot, not quite as comfortable as a bed but much " +#~ "better than slumming it on the ground." +#~ msgstr "" +#~ "軍用の簡易ベッド。ベッドほどではないが、地べたに直で寝るよりは快適。" #~ msgid "" -#~ "A sharpened stone affixed to a stick, works passably well as an axe but " -#~ "really can't compare to a proper axe." -#~ msgstr "木に鋭利な石が添えてある。斧として使える。" +#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " +#~ "with. Its small tip allows for a precision strike in the hands of the " +#~ "skilled. It is too small to butcher corpses with." +#~ msgstr "鋭利な刃物。小さすぎるため動物の解体はできない。" #~ msgid "" -#~ "A rock affixed to a stick, functions adequately as a hammer, but really " -#~ "can't compare to a proper hammer." -#~ msgstr "木に石を添えたもの。ハンマーとして機能する。" +#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " +#~ "precision strike in the hands of the skilled." +#~ msgstr "極めて鋭利な刃物。手術に用いられる。" #~ msgid "" -#~ "A sharp needle made from a bone. It would be useful for making rough " -#~ "clothing and items" -#~ msgstr "鋭い針。骨からできている。裁縫に使える。" +#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " +#~ "effective against armor." +#~ msgstr "希少価値の高い日本刀。装甲の厚い相手にも効果的。" -#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgid "A simple wood pole made deadlier by the blade tied to it." #~ msgstr "" -#~ "小型のポケットナイフ。戦闘には向いていないが何も持たないよりはまし。" +#~ "シンプルな木の棒は刃と結び付けることで\n" +#~ "より致命的になりました。" #~ msgid "" -#~ "A small multipurpose electronic device. This PDA has its flashlight app " -#~ "on, and is providing light." +#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " +#~ "Though large and heavy compared to other spears, its accuracy and damage " +#~ "are unparalled." #~ msgstr "" -#~ "様々な情報を携帯して扱うための小型機器。懐中電灯のアプリがインストールされ" -#~ "ている。" +#~ "中世の武器。長い柄の先端に鋭い刃がついている。他の槍とは精度、威力において" +#~ "圧倒的。" #~ msgid "" -#~ "A small multipurpose electronic device. Can be loaded with a variety of " -#~ "apps, providing all kinds of functionality." +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. Light it up and show those heathen zombies " +#~ "who's Lord around here." #~ msgstr "" -#~ "小型の電子機器。豊富なアプリがあり、インストールすればそれらの機能を利用で" -#~ "きる。" - -#~ msgid "A piece of kevlar. Can be used to repair kevlar items" -#~ msgstr "ケブラーの欠片。修理に使える。" - -#~ msgid "A piece of plastic. Not much use except to repair plastic items" -#~ msgstr "プラスチックのかけら。プラスチック製品の修理以外使い道はない。" - -#~ msgid "Rag, useful in crafting and possibly stopping bleeding" -#~ msgstr "布の切れ端、止血するのに利用でき、作製にも有用な材料。" +#~ "ブロードソードと松明を持ち替えなくても良い様に暗黒時代に考えられた合体武" +#~ "器。\n" +#~ "火を点ける事で辺りを照らし、野蛮なゾンビを見つけ出します。" #~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." -#~ msgstr "大容量の業務用ペンキ。" +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " +#~ "eat it's heart out." +#~ msgstr "" +#~ "ブロードソードと松明を持ち替えなくても良い様に暗黒時代に考えられた合体武" +#~ "器。\n" +#~ "刀身が熱で光っています。この聖剣は貴方の心を掴んで離さない。" #~ msgid "" -#~ "A spray can, filled with paint. Use this tool to make graffiti on the " -#~ "floor." -#~ msgstr "ペンキのスプレー缶。地面に落書きできる。" +#~ "A large blade that has had a portion of the handle wrapped in duct tape, " +#~ "making it easier to wield as a rough machete." +#~ msgstr "" +#~ "刃に手でつかむ部分をダクトテープで取り付けてある。マチェットとして使える。" -#~ msgid "A large steel pickaxe, strike the earth!" -#~ msgstr "大きな鋼のつるはし。これで地球を脅かすぜ!" +#~ msgid "" +#~ "A large blade attached to a long stick. Could do a considerable amount of " +#~ "damage." +#~ msgstr "長い棒に刃が取り付けてある。" #~ msgid "" -#~ "A combination lock box, breaking inside would destroy anything of value." -#~ msgstr "金庫。無理に開けようとすると中身まで壊してしまうかもしれない。" +#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " +#~ "corpses." +#~ msgstr "鋭いナイフ。戦闘には向かないが死体を解体するのには使えるだろう。" #~ msgid "" -#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " -#~ "quickly opening locks." -#~ msgstr "" -#~ "確かな作りの鍵屋のロックピック。音も無く素早く、鍵を開けるのに欠かせない。" +#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " +#~ "butchering corpses." +#~ msgstr "切れ味の鋭い重いナイフ。死体を解体するのに最も適している。" -#~ msgid "An unwieldy mop. Good for cleaning up spills." -#~ msgstr "扱いにくいモップです。液体の掃除に使えます。" +#~ msgid "A flimsy saw, useful for cutting through wood objects." +#~ msgstr "薄いノコギリ。木材を切るのに使う。" #~ msgid "" -#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " -#~ "gauge wire." -#~ msgstr "ボルトカッター。南京錠やワイヤーを切断するのに使う。" +#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." +#~ msgstr "両手で扱う斧。強力な武器となるが攻撃速度は遅い。" -#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." -#~ msgstr "スネアトラップとして機能するように木を削ったもの。" +#~ msgid "A small tent, just big enough to fit a person comfortably." +#~ msgstr "小さなテント。一人で使う分にはじゅうぶんな広さだ。" #~ msgid "" -#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " -#~ "mechanics crafting recipes." +#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " +#~ "amount of light" #~ msgstr "" -#~ "この鋼のパイプは、良好な近接武器になります。\n" -#~ "少数のアイテム製作に使えます。" +#~ "ガソリンを染み込ませた布を巻きつけた棒。火を点けることで光源になる。" #~ msgid "" -#~ "A Philips-head screwdriver, important for almost all electronics crafting " -#~ "and most mechanics crafting." -#~ msgstr "プラスドライバー。エレクトロニクス、メカニクスの作業に必要。" +#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " +#~ "producing plenty of light" +#~ msgstr "" +#~ "ガソリンを染み込ませた布を巻きつけた棒。燃え盛る炎があたりを照らす。" #~ msgid "" -#~ "A small hand press for hand loading firearm ammunition. Comes with " -#~ "everything you need to start hand loading." -#~ msgstr "小型のプレス台。実弾を制作できる。" - -#~ msgid "A tool used for disassembling firearm ammunition." -#~ msgstr "弾薬を分解するための工具。" +#~ "A large stand with slots in the side. (a)ctivate it and place it " +#~ "somewhere then set fires in it with no risk of spreading." +#~ msgstr "脇に穴が開いている台。(a)ctivateして設置。火が燃え広がらずに済む。" #~ msgid "" -#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " -#~ "outside and place a container beneath it to collect water when it rains." +#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " +#~ "container beneath it to collect water when it rains." #~ msgstr "" -#~ "手づくりのじょうご。\n" +#~ "じょうご。\n" #~ "雨水を集める。雨の降っているところへ(a)ctivateして設置する。\n" #~ "容器を置いておくと徐々に水がたまる。" #~ msgid "" -#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " -#~ "container beneath it to collect water when it rains." +#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " +#~ "outside and place a container beneath it to collect water when it rains." #~ msgstr "" -#~ "じょうご。\n" +#~ "手づくりのじょうご。\n" #~ "雨水を集める。雨の降っているところへ(a)ctivateして設置する。\n" #~ "容器を置いておくと徐々に水がたまる。" +#~ msgid "A tool used for disassembling firearm ammunition." +#~ msgstr "弾薬を分解するための工具。" + #~ msgid "" -#~ "A large stand with slots in the side. (a)ctivate it and place it " -#~ "somewhere then set fires in it with no risk of spreading." -#~ msgstr "脇に穴が開いている台。(a)ctivateして設置。火が燃え広がらずに済む。" +#~ "A small hand press for hand loading firearm ammunition. Comes with " +#~ "everything you need to start hand loading." +#~ msgstr "小型のプレス台。実弾を制作できる。" #~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " -#~ "producing plenty of light" -#~ msgstr "" -#~ "ガソリンを染み込ませた布を巻きつけた棒。燃え盛る炎があたりを照らす。" +#~ "A Philips-head screwdriver, important for almost all electronics crafting " +#~ "and most mechanics crafting." +#~ msgstr "プラスドライバー。エレクトロニクス、メカニクスの作業に必要。" #~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " -#~ "amount of light" +#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " +#~ "mechanics crafting recipes." #~ msgstr "" -#~ "ガソリンを染み込ませた布を巻きつけた棒。火を点けることで光源になる。" +#~ "この鋼のパイプは、良好な近接武器になります。\n" +#~ "少数のアイテム製作に使えます。" -#~ msgid "A small tent, just big enough to fit a person comfortably." -#~ msgstr "小さなテント。一人で使う分にはじゅうぶんな広さだ。" +#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." +#~ msgstr "スネアトラップとして機能するように木を削ったもの。" #~ msgid "" -#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." -#~ msgstr "両手で扱う斧。強力な武器となるが攻撃速度は遅い。" +#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " +#~ "gauge wire." +#~ msgstr "ボルトカッター。南京錠やワイヤーを切断するのに使う。" -#~ msgid "A flimsy saw, useful for cutting through wood objects." -#~ msgstr "薄いノコギリ。木材を切るのに使う。" +#~ msgid "An unwieldy mop. Good for cleaning up spills." +#~ msgstr "扱いにくいモップです。液体の掃除に使えます。" #~ msgid "" -#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " -#~ "butchering corpses." -#~ msgstr "切れ味の鋭い重いナイフ。死体を解体するのに最も適している。" +#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " +#~ "quickly opening locks." +#~ msgstr "" +#~ "確かな作りの鍵屋のロックピック。音も無く素早く、鍵を開けるのに欠かせない。" #~ msgid "" -#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " -#~ "corpses." -#~ msgstr "鋭いナイフ。戦闘には向かないが死体を解体するのには使えるだろう。" +#~ "A combination lock box, breaking inside would destroy anything of value." +#~ msgstr "金庫。無理に開けようとすると中身まで壊してしまうかもしれない。" -#~ msgid "" -#~ "A large blade attached to a long stick. Could do a considerable amount of " -#~ "damage." -#~ msgstr "長い棒に刃が取り付けてある。" +#~ msgid "A large steel pickaxe, strike the earth!" +#~ msgstr "大きな鋼のつるはし。これで地球を脅かすぜ!" #~ msgid "" -#~ "A large blade that has had a portion of the handle wrapped in duct tape, " -#~ "making it easier to wield as a rough machete." -#~ msgstr "" -#~ "刃に手でつかむ部分をダクトテープで取り付けてある。マチェットとして使える。" +#~ "A spray can, filled with paint. Use this tool to make graffiti on the " +#~ "floor." +#~ msgstr "ペンキのスプレー缶。地面に落書きできる。" #~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " -#~ "eat it's heart out." -#~ msgstr "" -#~ "ブロードソードと松明を持ち替えなくても良い様に暗黒時代に考えられた合体武" -#~ "器。\n" -#~ "刀身が熱で光っています。この聖剣は貴方の心を掴んで離さない。" +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." +#~ msgstr "大容量の業務用ペンキ。" + +#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgstr "布の切れ端、止血するのに利用でき、作製にも有用な材料。" + +#~ msgid "A piece of plastic. Not much use except to repair plastic items" +#~ msgstr "プラスチックのかけら。プラスチック製品の修理以外使い道はない。" + +#~ msgid "A piece of kevlar. Can be used to repair kevlar items" +#~ msgstr "ケブラーの欠片。修理に使える。" #~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. Light it up and show those heathen zombies " -#~ "who's Lord around here." +#~ "A small multipurpose electronic device. Can be loaded with a variety of " +#~ "apps, providing all kinds of functionality." #~ msgstr "" -#~ "ブロードソードと松明を持ち替えなくても良い様に暗黒時代に考えられた合体武" -#~ "器。\n" -#~ "火を点ける事で辺りを照らし、野蛮なゾンビを見つけ出します。" +#~ "小型の電子機器。豊富なアプリがあり、インストールすればそれらの機能を利用で" +#~ "きる。" #~ msgid "" -#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " -#~ "Though large and heavy compared to other spears, its accuracy and damage " -#~ "are unparalled." +#~ "A small multipurpose electronic device. This PDA has its flashlight app " +#~ "on, and is providing light." #~ msgstr "" -#~ "中世の武器。長い柄の先端に鋭い刃がついている。他の槍とは精度、威力において" -#~ "圧倒的。" +#~ "様々な情報を携帯して扱うための小型機器。懐中電灯のアプリがインストールされ" +#~ "ている。" -#~ msgid "A simple wood pole made deadlier by the blade tied to it." +#~ msgid "A small pocket knife, not great for combat, but better than nothing." #~ msgstr "" -#~ "シンプルな木の棒は刃と結び付けることで\n" -#~ "より致命的になりました。" +#~ "小型のポケットナイフ。戦闘には向いていないが何も持たないよりはまし。" #~ msgid "" -#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " -#~ "effective against armor." -#~ msgstr "希少価値の高い日本刀。装甲の厚い相手にも効果的。" +#~ "A sharp needle made from a bone. It would be useful for making rough " +#~ "clothing and items" +#~ msgstr "鋭い針。骨からできている。裁縫に使える。" #~ msgid "" -#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " -#~ "precision strike in the hands of the skilled." -#~ msgstr "極めて鋭利な刃物。手術に用いられる。" +#~ "A rock affixed to a stick, functions adequately as a hammer, but really " +#~ "can't compare to a proper hammer." +#~ msgstr "木に石を添えたもの。ハンマーとして機能する。" #~ msgid "" -#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " -#~ "with. Its small tip allows for a precision strike in the hands of the " -#~ "skilled. It is too small to butcher corpses with." -#~ msgstr "鋭利な刃物。小さすぎるため動物の解体はできない。" +#~ "A sharpened stone affixed to a stick, works passably well as an axe but " +#~ "really can't compare to a proper axe." +#~ msgstr "木に鋭利な石が添えてある。斧として使える。" #~ msgid "" -#~ "A military style fold up cot, not quite as comfortable as a bed but much " -#~ "better than slumming it on the ground." -#~ msgstr "" -#~ "軍用の簡易ベッド。ベッドほどではないが、地べたに直で寝るよりは快適。" +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." +#~ msgstr "平べったい石を木に添えたもの。シャベルの代用品。" #~ msgid "" -#~ "A small whistle. When used, it produces a high tone that causes nearby " -#~ "friendly dogs to either follow you closely and stop attacking, or start " -#~ "attacking enemies if they are currently docile." +#~ "A large stick, with the end carved into a blade for digging. Can be used " +#~ "to dig shallow pits, but not deep ones." #~ msgstr "" -#~ "小さなホイッスル。周波数の高い音を発し、友好的な犬を近くに呼び寄せたりでき" -#~ "る。" - -#~ msgid "A crude explosive device triggered by a piece of string." -#~ msgstr "紐をつないだだけの爆発物。" - -#~ msgid "A human skull with strange etchings covering it." -#~ msgstr "人間の頭蓋骨。奇妙な装飾が彫り込まれている。" +#~ "末端に掘削用の刃が取り付けられた大きい棒です。\n" +#~ "浅い穴を掘るために使われます。\n" +#~ "しかし深い穴を掘る事は出来ません。" -#~ msgid "" -#~ "A stone with spirals all over it, and holes around its perimeter. Though " -#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " -#~ "it." +#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." #~ msgstr "" -#~ "渦巻きと小さな穴に全体が覆われた石です。\n" -#~ "大きさはかなりありますが、全く重くありません。\n" -#~ "空気が石の周りに凝縮されているように見えます。" +#~ "小型のシェルター。木や皮革からつくられている。(a)ctivateして設置する。" #~ msgid "" -#~ "A high-powered stun gun. Use this item to attempt to electrocute an " -#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " -#~ "shock can actually jump through the air, it is difficult to miss." +#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " +#~ "shelter has been damaged, and needs repairs." #~ msgstr "" -#~ "高電圧のスタンガン。隣接する相手を感電させダメージとマヒを与えることができ" -#~ "る。" +#~ "小型のシェルター。木や皮革からつくられている。(a)ctivateして設置する。損傷" +#~ "しており修理が必要。" #~ msgid "" -#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " -#~ "before it explodes." -#~ msgstr "" -#~ "火が点いた爆竹。導火線がシューシューいってる。爆発する前に投げよう。" +#~ "A heatpack, used to treat sports injuries and heat food. Usable only " +#~ "once." +#~ msgstr "発熱剤。怪我の手当や加熱調理に使う。使い捨て。" #~ msgid "" -#~ "A firecracker with a short fuse. Use this item to light the fuse; you " -#~ "will need a lighter of course. Shortly after you light the fuse it will " -#~ "explode, so throw it quickly!" -#~ msgstr "" -#~ "短い導火線がある爆竹。導火線に火を点けてから使う。ライターが必要。火を点け" -#~ "たら爆発するからさっさと投げよう。" +#~ "A heatpack, used to treat sports injuries and heat food. This one has " +#~ "been used already and is now useless." +#~ msgstr "発熱剤。怪我の手当や加熱調理に使う。使用済み。" #~ msgid "" -#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " -#~ "them quickly before the start to explode." -#~ msgstr "" -#~ "25個連なった爆竹。火が点いていてシューシューいってる。爆発する前にさっさと" -#~ "投げよう。" +#~ "A sealed glass jar containing some meat. Activate to open and enjoy." +#~ msgstr "ビン詰め。動物の肉。" #~ msgid "" -#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " -#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " -#~ "they will begin to explode, so throw them quickly!" -#~ msgstr "" -#~ "25個連なった爆竹。点火するにはライターが必要。火を点けたら爆発する前にさっ" -#~ "さと投げよう。" +#~ "A sealed glass jar containing human meat. Activate to open and enjoy." +#~ msgstr "ビン詰め。人肉。" + +#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." +#~ msgstr "ビン詰め。野菜。" + +#~ msgid "sealed jar of canned apple" +#~ msgstr "密封瓶 (缶詰林檎)" #~ msgid "" -#~ "A glass vial, with two chemicals mixing inside. If this mixture is " -#~ "exposed to air (as happens if you throw the vial), they will spill out as " -#~ "a pool of potent acid." -#~ msgstr "" -#~ "小ビン。中の化学物質が混ざっている。外気に触れると強力な酸のたまりができ" -#~ "る。" +#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." +#~ msgstr "ビン詰め。りんごの砂糖漬け。" #~ msgid "" -#~ "A glass vial, split into two chambers. The divider is removable, which " -#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " -#~ "happens if you throw the vial) they will spill out as a pool of potent " -#~ "acid." -#~ msgstr "" -#~ "化学物質が入った小ビン。中の仕切りが外れると混ざる。外気に触れると強力な酸" -#~ "のたまりができる。" +#~ "A cordless drill with a selection of drill bits. The charger base " +#~ "contains a battery draining attachment so the drill can be charged in " +#~ "lieu of mains power." +#~ msgstr "充電式のドリル。充電器が付属しているので電源が無くても使える。" #~ msgid "" -#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " -#~ "the rag; you will, of course, need a lighter in your inventory to do " -#~ "this. After lighting it, throw it to cause fires." -#~ msgstr "ボトルに可燃性の液体を入れ布で栓をしたもの。ライターが必要。" +#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." +#~ msgstr "ポータブル真空包装機。空気を吸引し食品を密封する。" -#~ msgid "active teargas" -#~ msgstr "催涙弾 (点火)" +#~ msgid "vacuum-packed apple slices" +#~ msgstr "真空パック(薄切り林檎)" -#~ msgid "" -#~ "A section of a pipe filled with explosive materials. Use this item to " -#~ "light the fuse, which gives you 3 turns before it detonates. You will " -#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." -#~ msgstr "" -#~ "爆発物が詰め込まれたパイプ。爆発するまで3ターン。火を点けるにはライターが" -#~ "必要。爆発しないこともある。" +#~ msgid "A decent sized piece of cotton designed for medical purposes." +#~ msgstr "切りそろえられたコットン。医療用。" -#~ msgid "" -#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " -#~ "Requires a tree nearby. Effective at trapping monsters." -#~ msgstr "" -#~ "ロープの輪縄とスネアトリガーで構成されている\r\n" -#~ "シンプルなスネアトラップの道具一式です。\r\n" -#~ "一部のモンスターを捕獲して殺すのに有効ですが、\r\n" -#~ "設置場所の近くに木を必要とします。" +#~ msgid "A talking doll for children, luckily it still works." +#~ msgstr "子供用の喋る人形は幸運にもまだ動きます。" + +#~ msgid "A fluffy towel, can be used to dry yourself." +#~ msgstr "フワフワのタオル。濡れた体を拭くのに使う。" + +#~ msgid "A bicycle folded into a relatively portable package." +#~ msgstr "折りたたんで運べるようにした自転車。" #~ msgid "" -#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " -#~ "Requires a young tree nearby. Effective at trapping and killing some " -#~ "small animals." -#~ msgstr "" -#~ "ひもの輪縄とスネアトリガーで構成されている\r\n" -#~ "シンプルなスネアトラップの道具一式です。\r\n" -#~ "一部の小動物を捕獲して殺すのに有効ですが、\r\n" -#~ "設置場所の近くに若木を必要とします。" +#~ "A fine glass tube with a bulb on the end, used in partaking of certain " +#~ "illicit substances." +#~ msgstr "バルブが付いているガラスのパイプ。薬物の摂取に使う。" #~ msgid "" -#~ "A machete is attached laterally to a motor, with a tripwire controlling " -#~ "its throttle. When the tripwire is pulled, the blade is swung around with " -#~ "great force. The trap forms a 3x3 area of effect." -#~ msgstr "" -#~ "モーターにマチェットが取り付けてある。ワイヤーが引っ張られると作動する。効" -#~ "果範囲は3x3タイル。" +#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " +#~ "cooking or in metalworking fabrication recipes." +#~ msgstr "鋼のトング。料理や鍛冶で使用する。" #~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " -#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " -#~ "time the trigger is pulled, one or two may be used." -#~ msgstr "" -#~ "ソーンオフショットガンのトリガーにワイヤーをくくりつけたもの。弾が2発装填" -#~ "されている。" +#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "短く頑丈な金属製の鑿(のみ)。" #~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " -#~ "pulled, the crossbow fires. Only a single round can be used, after which " -#~ "the trap is disabled." -#~ msgstr "" -#~ "クロスボウのトリガーにワイヤーをくくりつけたもの。ボルトが1本装填されてい" -#~ "る。" +#~ "A set of swages and dies for metalsmithing. Used in some metalworking " +#~ "fabrication recipes." +#~ msgstr "金属加工セット。一部の金属加工レシピで使える。" #~ msgid "" -#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " -#~ "creating a trap that will ensnare and damage anything that steps on it. " -#~ "If you are carrying a shovel, you will have the option of burying it." +#~ "A bottle filled with match heads and equipped with a fuse. Use this item " +#~ "to light the fuse; you will, of course, need a lighter in your inventory " +#~ "to do this. After lighting it, throw it to cause fires." #~ msgstr "" -#~ "ばね仕掛けのトラバサミ。地面に設置する。上に乗ったものの脚を強く挟み込む。" -#~ "シャベルを持っていれば設置する時に埋めることができる。" +#~ "ボトルにマッチの先を詰めたもの。導火線に火を点けてから投げる。ライターが必" +#~ "要。" #~ msgid "" -#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " -#~ "the ground, creating a trap that will warn you with noise when something " -#~ "steps on it." +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire. This one features a flip top cover and can be " +#~ "refueled when empty." #~ msgstr "" -#~ "緩衝材などに使われる気泡シート。地面に設置しておけば何かが通った時に音が鳴" -#~ "るだろう。" +#~ "煙草や薬品、火炎瓶などのアイテムを使うため\n" +#~ "ライターを携帯しなくてはなりません。\n" +#~ "隣接するアイテムに火をつけることも可能です。\n" +#~ "開閉できるカバーがついており、燃料を補充することが可能。" #~ msgid "" -#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " -#~ "a vehicle." +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." #~ msgstr "" -#~ "柔軟なゴムホース。何かの部品として使える。車両から燃料を抜き取る事もでき" -#~ "る。" +#~ "被爆量を検知するバッジ。\n" +#~ "放射線を遮断する袋に入っている。" -#~ msgid "A digging tool. Use it to dig pits adjacent to your location." -#~ msgstr "掘削するための工具。隣接する地形に使う。" +#~ msgid "A common hydraulic jack, used when changing tires." +#~ msgstr "タイヤを交換する際に使用される一般的な油圧ジャッキ。" -#~ msgid "" -#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " -#~ "pile of dirt." -#~ msgstr "" -#~ "くわ。農作業で使う用具。作物を育成させるために土を盛り上げるのに使う。" +#~ msgid ".45 caliber retool" +#~ msgstr "45口径化キット" -#~ msgid "" -#~ "A prying tool. Use it to open locked doors without destroying them, or to " -#~ "lift manhole covers." -#~ msgstr "" -#~ "ドアなどを壊すことなく開けることができる工具。マンホールの蓋も持ち上げるこ" -#~ "とができる。" +#~ msgid "9mm caliber retool" +#~ msgstr "9mm口径化キット" -#~ msgid "" -#~ "A road map. Use it to read points of interest, including, but not limited " -#~ "to, location(s) of hospital(s) nearby." -#~ msgstr "道路地図。読むと地図に病院などが追記される。" +#~ msgid ".22 caliber retool" +#~ msgstr "22口径化キット" -#~ msgid "" -#~ "A string of numbers to access the elevator in the hazardous waste " -#~ "sarcophagus." -#~ msgstr "有害ゴミの石棺にあるエレベーターを動かす為の数字配列。" +#~ msgid "5.7mm caliber retool" +#~ msgstr "5.7mm口径化キット" -#~ msgid "" -#~ "Using this item on a container full of water will purify the water. Water " -#~ "taken from uncertain sources like a river may be dirty." -#~ msgstr "" -#~ "川などで汲んだ水は汚れている可能性があります。\n" -#~ "水の入った容器をこのアイテムに使用すれば、\n" -#~ "水を綺麗な水に浄化することができます。" +#~ msgid "4.6mm caliber retool" +#~ msgstr "4.6mm口径化キット" -#~ msgid "" -#~ "A piece of metal that can get very hot. Necessary for electronics " -#~ "crafting. You could also use it to cauterize wounds, if you had to." -#~ msgstr "" -#~ "はんだごて。\n" -#~ "先端が加熱する工具。電子機器の作製に必須。傷を焼灼することもできる。" +#~ msgid ".308 caliber retool" +#~ msgstr "308口径化キット" + +#~ msgid ".223 caliber retool" +#~ msgstr "223口径化キット" + +#~ msgid "A small woodland animal." +#~ msgstr "森に生息する小動物。" #~ msgid "" -#~ "A small heating element. Indispensable for cooking and chemistry. Try not " -#~ "to burn yourself." -#~ msgstr "料理や化学に欠かせない。やけどに注意。" +#~ "A cute wiggling nose, cotton tail, and\n" +#~ "delicious flesh." +#~ msgstr "可愛く揺れる鼻、フワフワの尻尾、そして...美味しい肉。" + +#~ msgid "A large buck, fast-moving and strong." +#~ msgstr "素早くて力強い、大きな鹿。" + +#~ msgid "A buck of the largest deer species." +#~ msgstr "鹿類で最も大きな鹿。" + +#~ msgid "A grey wolf. A vicious and fast pack hunter." +#~ msgstr "灰色狼。素早く、獰猛な狩人。" + +#~ msgid "A vicious and fast hunter." +#~ msgstr "素早く、獰猛な狩人。" + +#~ msgid "A medium-sized domesticated dog, gone feral." +#~ msgstr "野生化した中型の飼い犬。" + +#~ msgid "A small domesticated cat, gone feral." +#~ msgstr "野生化した小さな飼い猫。" + +#~ msgid "fungal insect" +#~ msgstr "真菌昆虫" + +#~ msgid "A portion of a giant worm that is still alive." +#~ msgstr "まだ生きている巨大ワームの一部。" + +#~ msgid "master zombie" +#~ msgstr "マスターゾンビ" + +#~ msgid "child zombie" +#~ msgstr "子供ゾンビ" + +#~ msgid "young triffid" +#~ msgstr "若いトリフィド" + +#~ msgid "queen triffid" +#~ msgstr "女王トリフィド" + +#~ msgid "creeping vine" +#~ msgstr "這い回る蔦" + +#~ msgid "vinebeast" +#~ msgstr "蔦の野獣" + +#~ msgid "young fungaloid" +#~ msgstr "若い真菌人" + +#~ msgid "spore" +#~ msgstr "胞子" + +#~ msgid "C.H.U.D." +#~ msgstr "チャド" + +#~ msgid "one-eyed mutant" +#~ msgstr "隻眼の変異体" + +#~ msgid "crawler mutant" +#~ msgstr "クロウラーの変異体" + +#~ msgid "sewer fish" +#~ msgstr "下水道の魚" + +#~ msgid "web spider" +#~ msgstr "巣作り蜘蛛" + +#~ msgid "trap door spider" +#~ msgstr "戸立て蜘蛛" + +#~ msgid "black widow" +#~ msgstr "黒後家蜘蛛" + +#~ msgid "Amigara horror" +#~ msgstr "阿彌殻の怪" + +#~ msgid "Thing" +#~ msgstr "シング" + +#~ msgid "A large snail, with an oddly human face." +#~ msgstr "人間の顔を持つ気味の悪い大きな蝸牛。" + +#~ msgid "Mi-go" +#~ msgstr "ミ=ゴ" + +#~ msgid "gelatinous blob" +#~ msgstr "ゲル状ブロブ" + +#~ msgid "Gozu" +#~ msgstr "牛頭" + +#~ msgid "A large snake, translucent black." +#~ msgstr "半透明の黒い大きな蛇。" + +#~ msgid "secubot" +#~ msgstr "警備ロボット" + +#~ msgid "copbot" +#~ msgstr "警官ロボット" + +#~ msgid "molebot" +#~ msgstr "採掘ロボット" + +#~ msgid "tripod robot" +#~ msgstr "三脚式ロボット" + +#~ msgid "tankbot" +#~ msgstr "戦車ロボット" + +#~ msgid "firearms" +#~ msgstr "射撃武器" #~ msgid "" -#~ "A small blue light glowstick, bend it to break the glass cylinder inside " -#~ "and start the reaction to produce a very small amount of light." -#~ msgstr "" -#~ "青く光る短いスティック。折り曲げると中の容器が割れて中身が化学反応を起こし" -#~ "淡く発光する。" +#~ "Your overall skill in using firearms. With higher levels, this general " +#~ "experience increases accuracy with any gun, but is secondary to practice " +#~ "with the type of gun in question." +#~ msgstr "銃火器を扱う技能。命中率を上昇させる。" + +#~ msgid "%1$s quickly punch %4$s" +#~ msgstr "%1$sの正拳突きは%4$sに" + +#~ msgid "%1$s quickly punches %4$s" +#~ msgstr "%1$sの正拳突きは%4$sに" + +#~ msgid "%1$s karate chop %4$s" +#~ msgstr "%1$sの手刀は%4$sに" + +#~ msgid "%1$s karate chops %4$s" +#~ msgstr "%1$sの手刀は%4$sに" + +#~ msgid "%1$s throw %4$s" +#~ msgstr "%1$sの天地投げは%4$sに" + +#~ msgid "%1$s throws %4$s" +#~ msgstr "%1$sの天地投げは%4$sに" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Provides a " -#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " -#~ "die, you'll need to scrap it to recover the components that are reusable." -#~ msgstr "" -#~ "発光する回路。ワイヤーで直接バッテリーにつなげてある。微弱な光源になる。15" -#~ "分で1バッテリーを消費する。" +#~ msgid "%1$s grab %4$s" +#~ msgstr "%1$sの掴み投げは%4$sに" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Once " -#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " -#~ "batteries die, you'll need to scrap it to recover the components that are " -#~ "reusable." -#~ msgstr "" -#~ "発光する回路。ワイヤーで直接バッテリーにつなげてある。15分で1バッテリーを" -#~ "消費する。" +#~ msgid "%1$s grabs %4$s" +#~ msgstr "%1$sの掴み投げは%4$sに" -#~ msgid "" -#~ "A burnt-out lightstrip. You could disassemble this to recover the " -#~ "amplifier circuit." -#~ msgstr "使用済のストリップライト。解体すれば増幅回路が手に入る。" +#~ msgid "%1$s strike %4$s" +#~ msgstr "%1$sの掌底打ちは%4$sに" -#~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. It is turned on. Use it to turn it off." -#~ msgstr "" -#~ "ガソリンが燃料のランタン。明るさはそこそこだが長持ちする。火がともされてい" -#~ "る。" +#~ msgid "%1$s strikes %4$s" +#~ msgstr "%1$sの掌底打ちは%4$sに" -#~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. Use it to turn it on." -#~ msgstr "ガソリンが燃料のランタン。明るさはそこそこだが長持ちする。" +#~ msgid "%1$s jab %4$s" +#~ msgstr "%1$sのジャブは%4$sに" -#~ msgid "A simple hand-powered stone quern." -#~ msgstr "手で動くシンプルな石の挽臼。" +#~ msgid "%1$s jabs %4$s" +#~ msgstr "%1$sのジャブは%4$sに" -#~ msgid "" -#~ "A fire drill is a simple item for firestarting, made from two pieces of " -#~ "wood and some string. Although it is constructed out of simple materials, " -#~ "it's slow and rather difficult to get a fire started with this tool." -#~ msgstr "" -#~ "原始的な発火道具。2本の木と糸からできている。つくるのは簡単だが火種ができ" -#~ "るまでが大変。" +#~ msgid "metal screeching!" +#~ msgstr "金属音が鳴り響いた!" -#~ msgid "" -#~ "Matches must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use matches to light " -#~ "nearby items on fire." -#~ msgstr "" -#~ "煙草や薬品、火炎瓶などのアイテムを使うため\n" -#~ "マッチを携帯しなくてはなりません。\n" -#~ "隣接するアイテムに火をつけることも可能です。" +#~ msgid "clang!" +#~ msgstr "甲高い音が聞こえた!" -#~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire." -#~ msgstr "" -#~ "煙草や薬品、火炎瓶などのアイテムを使うため\n" -#~ "ライターを携帯しなくてはなりません。\n" -#~ "隣接するアイテムに火をつけることも可能です。" +#~ msgid "porcelain breaking!" +#~ msgstr "陶磁器が割れる音が聞こえた!" -#~ msgid "apple slices" -#~ msgstr "アップルサイダー" +#~ msgid "whump." +#~ msgstr "ドーンという音が聞こえた。" -#~ msgid "canned apple slices" -#~ msgstr "缶詰 (薄切り林檎)" +#~ msgid "wham!" +#~ msgstr "ドカンという強い衝撃音が聞こえた!" -#~ msgid "MRE - beef" -#~ msgstr "携行食(牛肉)" +#~ msgid "whump!" +#~ msgstr "ドーンという大きな音が聞こえた!" -#~ msgid "This white flour is useful for baking." -#~ msgstr "パンを焼く時に役立ちます。" +#~ msgid "whack!" +#~ msgstr "ボカンという強打音が聞こえた!" -#~ msgid "" -#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." -#~ msgstr "蟻の卵。ソフトボール大。栄養価は高いが口にするにはちょっと…。" +#~ msgid "crunch." +#~ msgstr "バリバリとかみ砕くような音が聞こえた。" -#~ msgid "" -#~ "A malformed human leg, this would be gross to eat, and cause mutations." -#~ msgstr "" -#~ "奇形の人間の脚部。口にすると吐き気をもよおし、突然変異を引き起こす。" +#~ msgid "brush." +#~ msgstr "ブラシで擦る様な音が聞こえた。" -#~ msgid "" -#~ "A misshapen human arm, eating this would be pretty disgusting and cause " -#~ "your DNA to mutate." -#~ msgstr "" -#~ "奇形の人間の腕部。口にすると吐き気をもよおし、突然変異を引き起こす。" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." -#~ msgstr "奇形の胎児。摂食することでDNAに突然変異を引き起こす。" +#~ msgid "You" +#~ msgstr "あなた" -#~ msgid "" -#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " -#~ "all sorts of afflictions." -#~ msgstr "蜂蜜と異なり白いクリーム状。病を癒す効果がある。" +#~ msgid "her" +#~ msgstr "彼女" -#~ msgid "" -#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " -#~ "emergency." -#~ msgstr "" -#~ "大きな蜜蝋の塊。\n" -#~ "不味いが栄養があり、緊急時なら食べても構わない。" +#~ msgid "his" +#~ msgstr "彼" -#~ msgid "tuna fish" -#~ msgstr "ツナ" +#~ msgid "your" +#~ msgstr "あなた" -#~ msgid "sardines" -#~ msgstr "鰯" +#~ msgid "%1$s hit %4$s" +#~ msgstr "%1$sの攻撃は%4$sに" -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "おえっ、いや、非常に美味しいが...中身が少なすぎる。" +#~ msgid "%1$s hits %4$s" +#~ msgstr "%1$sの攻撃は%4$sに" -#~ msgid "carrot" -#~ msgstr "人参" +#~ msgid "the %s" +#~ msgstr "%s" -#~ msgid "Bread and turkey, that's it." -#~ msgstr "パンで七面鳥を挟んだだけのサンドイッチです。" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "beef jerky" -#~ msgstr "ビーフジャーキー" +#~ msgid "you" +#~ msgstr "あなた" -#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." -#~ msgstr "" -#~ "飲まないで下さい。\n" -#~ "漂白剤と混ぜると毒ガスが発生します。" +#~ msgid "the %s's" +#~ msgstr "%s" -#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." -#~ msgstr "" -#~ "飲まないで下さい。\n" -#~ "アンモニアと混ぜると毒ガスが発生します。" +#~ msgid "%s's" +#~ msgstr "%s" -#~ msgid "Basic Sword & Sorcery." -#~ msgstr "ポピュラーな剣と魔法の世界を描いた小説。" +#~ msgid "%1$s impale %4$s" +#~ msgstr "%1$sの串刺攻撃は%4$sに" -#~ msgid "" -#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " -#~ "feet of concrete." -#~ msgstr "60mm対戦車ロケット弾。60cmの厚みのあるコンクリートを貫通する。" +#~ msgid "%1$s impales %4$s" +#~ msgstr "%1$sの串刺攻撃は%4$sに" -#~ msgid "" -#~ "A 40mm grenade with a small explosion and a high number of damaging " -#~ "fragments." -#~ msgstr "グレネード弾 (40mm/フラグ)" +#~ msgid "%1$s pierce %4$s" +#~ msgstr "%1$sの貫通攻撃は%4$sに" -#~ msgid "A 40mm grenade with a concussive explosion." -#~ msgstr "グレネード弾 (40mm/コンカッション)" +#~ msgid "%1$s pierces %4$s" +#~ msgstr "%1$sの貫通攻撃は%4$sに" -#~ msgid "" -#~ "9 millimeter parabellum is generally regarded as the most popular handgun " -#~ "cartridge, used by the majority of US police forces. It is also a very " -#~ "popular round in sub-machine guns." -#~ msgstr "" -#~ "9ミリパラベラムは最も広く使用されている弾薬。サブマシンガン用弾薬の主流で" -#~ "もある。" +#~ msgid "%1$s stab %4$s" +#~ msgstr "%1$sの刺突攻撃は%4$sに" -#~ msgid "" -#~ "A brass-jacketed .22 calibre round with superior penetration capacity." -#~ msgstr "弾頭を完全に真鍮で覆った.22弾。貫通力に優れる。" +#~ msgid "%1$s stabs %4$s" +#~ msgstr "%1$sの刺突攻撃は%4$sに" -#~ msgid "" -#~ "A leather sling, it is easy to use and accurate, but pebbles do little " -#~ "damage. Pebbles are used as ammunition." -#~ msgstr "" -#~ "革のスリング。扱いやすく命中させやすいが小石ではほどんどダメージを与えられ" -#~ "ない。" +#~ msgid "%1$s poke %4$s" +#~ msgstr "%1$sの突刺攻撃は%4$sに" -#~ msgid "An ornamental suit of armor." -#~ msgstr "観賞用の鎧。" +#~ msgid "%1$s pokes %4$s" +#~ msgstr "%1$sの突刺攻撃は%4$sに" -#~ msgid "light plate mail" -#~ msgstr "軽量板金鎧" +#~ msgid "%1$s hack %4$s" +#~ msgstr "%1$sの縦斬攻撃は%4$sに" -#~ msgid "plate armor gauntlets" -#~ msgstr "全身板金鎧の籠手" +#~ msgid "%1$s hacks %4$s" +#~ msgstr "%1$sの縦斬攻撃は%4$sに" -#~ msgid "plate armor boots" -#~ msgstr "全身板金鎧の靴" +#~ msgid "%1$s slice %4$s" +#~ msgstr "%1$sの横斬攻撃は%4$sに" -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "すこしかさばるが、そのぶんアイテムを持ち運べるようになる。" +#~ msgid "%1$s slices %4$s" +#~ msgstr "%1$sの横斬攻撃は%4$sに" -#~ msgid "A thin pair of leather gloves. Good for doing manual labor." -#~ msgstr "" -#~ "革で作られた薄手の手袋です。\n" -#~ "肉体労働をする場合にちょうど良いでしょう。" +#~ msgid "%1$s cut %4$s" +#~ msgstr "%1$sの斬撃は%4$sに" -#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." -#~ msgstr "厚手の綿の上着。動きづらいが大きなポケットがある。" +#~ msgid "%1$s cuts %4$s" +#~ msgstr "%1$sの斬撃は%4$sに" -#~ msgid "A padded coat with deep pockets. Very warm." -#~ msgstr "防寒対策が施されたコート。ポケット付き。とても暖かい。" +#~ msgid "%1$s nick %4$s" +#~ msgstr "%1$sの薄斬攻撃は%4$sに" -#~ msgid "A thin cotton jacket. Good for brisk weather." -#~ msgstr "" -#~ "綿で作られた薄手のジャケットです。\n" -#~ "天候が良い日に適しています。" +#~ msgid "%1$s nicks %4$s" +#~ msgstr "%1$sの薄斬攻撃は%4$sに" -#~ msgid "plate mail" -#~ msgstr "プレートメイル" +#~ msgid "%1$s clobber %4$s" +#~ msgstr "%1$sの強打は%4$sに" -#~ msgid "" -#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " -#~ "will provide excellent protection against ambient radiation." -#~ msgstr "" -#~ "有害物質を扱う為の服です。\n" -#~ "非常に動きづらく厄介ですが、これを着ている限り\n" -#~ "放射線からの優れた防御を得られます。" +#~ msgid "%1$s clobbers %4$s" +#~ msgstr "%1$sの強打は%4$sに" -#~ msgid "Put up the shelter" -#~ msgstr "シェルターを設置する" +#~ msgid "%1$s batter %4$s" +#~ msgstr "%1$sの乱打は%4$sに" -#~ msgid "Pitch the tent" -#~ msgstr "テントを張る" +#~ msgid "%1$s batters %4$s" +#~ msgstr "%1$sの乱打は%4$sに" -#~ msgid "Cut up metal" -#~ msgstr "金属を切る" +#~ msgid "%1$s whack %4$s" +#~ msgstr "%1$sの殴打は%4$sに" -#~ msgid "You %4$s the %1$s into %2$i %3$s." -#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." -#~ msgstr[0] "%1$sを%2$i %3$sに%4$s。" +#~ msgid "%1$s whacks %4$s" +#~ msgstr "%1$sの殴打は%4$sに" -#~ msgid "Place the turret" -#~ msgstr "タレットを設置" +#~ msgid " but do no damage." +#~ msgstr " しかし、ダメージを与えられない。" -#~ msgid "Drill" -#~ msgstr "ドリル" +#~ msgid " for %d damage." +#~ msgstr " %dのダメージを与えた。" -#~ msgid "You can't find a hospital near your location." -#~ msgstr "この近くに病院は無さそうだ。" +#~ msgid "Critical! " +#~ msgstr "クリティカル! " -#~ msgid "You add a %s location to your map." -#~ msgstr "%sの場所を地図に追加した。" +#~ msgid "The %s's corpse melts into a pool of acid." +#~ msgstr "%sの死体は溶け落ちて、酸の水溜りとなった。" -#~ msgid "Put the dog food" -#~ msgstr "ドッグフードを置く" +#~ msgid "a boomer explodes!" +#~ msgstr "ブーマーが爆発した!" -#~ msgid "Error: Item Missing." -#~ msgstr "エラー: アイテムが見つからない。" +#~ msgid "a smoker explodes!" +#~ msgstr "煙幕ゾンビが爆発した!" #~ msgid "" -#~ "Many important items can be very hard to find, or will cost a great deal " -#~ "of\n" -#~ "money to trade for. Fortunately, it is possible to craft a wide variety " -#~ "of\n" -#~ "goods with the proper tools, materials, and training.\n" -#~ "\n" -#~ "Some recipes require a set of tools. These are not used up when " -#~ "crafting,\n" -#~ "so you can keep your tool set. All recipes require one or more " -#~ "ingredients.\n" -#~ "These ARE used up in crafting.\n" -#~ "\n" -#~ "%sThere are five categories; Weapons, Food, \n" -#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" -#~ "no skill to create, the majority require you to have some knowledge:\n" -#~ "\n" -#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" -#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" -#~ "at higher levels, you have an understanding of chemistry and can make\n" -#~ "chemical weapons and beneficial elixirs.\n" -#~ "->Electronics skill lets you make a wide variety of tools with intricate " -#~ "uses.\n" -#~ "->Tailoring skill is used to create basic clothing, and later tough " -#~ "armor.\n" -#~ "\n" -#~ "In addition to the primary crafting skills, other skills may be " -#~ "necessary\n" -#~ "to create certain items. Traps skill, Firearms skill, and First Aid " -#~ "skill\n" -#~ "are all required for certain items." +#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." #~ msgstr "" -#~ "ほとんどの重要なアイテムは見つけることが難しく、取引で手に入れるにしても多" -#~ "大な\n" -#~ "費用がかかります。喜ばしいことに、適正な道具、材料、そして必要な訓練が行わ" -#~ "れて\n" -#~ "いれば様々な種類の道具を作ることが可能です。\n" -#~ "\n" -#~ "いくつかのアイテムの作り方では作成用の道具が必要となります。この道具はアイ" -#~ "テム\n" -#~ "作成を行っても消費されません。作成用の道具はそのまま保持されます。一方全て" -#~ "のア\n" -#~ "イテム制作では一つかそれ以上の材料が必要となります。材料はアイテム製作で消" -#~ "費さ\n" -#~ "れます。\n" -#~ "\n" -#~ "%s制作されるアイテムには5つのカテゴリーがありま\n" -#~ "す。武器、食物、電子機器、装甲、その他の雑多なものです。いくつかのアイテム" -#~ "は製\n" -#~ "作にスキルを使用しませんが、大多数のアイテム制作では多少の知識が必要で" -#~ "す。\n" -#~ "->機械工学スキルは武器、罠、そしていくつかの道具の製作に使用されます。\n" -#~ "->調理スキルは低レベルならばおいしい料理の製作に使用され、高レベルならばあ" -#~ "なた\n" -#~ "は化学の知識も持っているでしょうから、化学兵器や有益な特効薬を作ることがで" -#~ "きま\n" -#~ "す。\n" -#~ "->電子工学のスキルがあれば広い範囲にわたる、こみいった様々な道具を作ること" -#~ "がで\n" -#~ "きるようになります。\n" -#~ "->裁縫のスキルは基本的な服の制作に使用されます。高めれば頑丈な装甲を作るこ" -#~ "とが\n" -#~ "できます。\n" -#~ "\n" -#~ "これらの直接的なアイテム制作スキルに加えて罠スキル、銃火器スキル、加えて救" -#~ "急医\n" -#~ "療スキルもいくらかのアイテム制作には必要となります。" +#~ "確認画面でのキー操作の設定。Trueにすると Y/N (大文字)\n" +#~ "Falseにすると y/n (小文字)" -#~ msgid "Butcher the %s corpse?" -#~ msgstr "%sの死体を捌きますか?" +#~ msgid "" +#~ "If true, shift the view toward the selected item if it is outside of your " +#~ "current viewport." +#~ msgstr "trueにするとアイテムを見渡した時に視点を移動する。" -#~ msgid "Drop" -#~ msgstr "置く" +#~ msgid "Your raincoat protects you from the acidic drizzle." +#~ msgstr "レインコートが小雨(酸性)を防いでいます。" -#~ msgid "Refill vehicle" -#~ msgstr "車両に補充する" +#~ msgid "Your raincoat protects you from the acid rain." +#~ msgstr "レインコートが雨(酸性)を防いでいます。" -#~ msgid "There's no vehicle to grab there!" -#~ msgstr "引っ張る車両がない!" +#~ msgid "hazmatbot" +#~ msgstr "災害作業ロボット" -#~ msgid "Have a drink?" -#~ msgstr "飲んでみますか?" +#~ msgid "" +#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " +#~ "from the floor, making it easier to sleep" +#~ msgstr "" +#~ "ウレタンフォームのシーツ。丸めて収納できる。断熱効果があり寝心地がいい。" -#~ msgid "You dont see any items around you!" -#~ msgstr "周囲にアイテムは何も無い!" +#~ msgid "It disintegrates!" +#~ msgstr "崩壊しました!" -#~ msgid "Peek" -#~ msgstr "のぞき見る" +#~ msgid "You damage the %s!" +#~ msgstr "%sにダメージを与えました!" -#~ msgid "Examine" -#~ msgstr "調べる" +#~ msgid "Your %s is destroyed! GAME OVER!" +#~ msgstr "%sが破壊されました!ゲームオーバー!" -#~ msgid "Control vehicle" -#~ msgstr "操縦席につく" +#~ msgid "" +#~ "You've traveled for a living, sightseeing here and there, and living off " +#~ "your parents' trust fund. But now they're gone, and the only thing " +#~ "between you and death is the open road and your backpack." +#~ msgstr "" +#~ "生活の為に旅を続けてきました。両親の信託基金を切り崩して、色々な所に観光に" +#~ "行きました。しかし、それは突然消え去ってしまいました。所持品は目の前に広が" +#~ "る道路と背中のバックパックだけです。" -#~ msgid " where? (Direction button)" -#~ msgstr " どの方向?" +#~ msgid "" +#~ "You were about to marry your bride before the cataclysm, now you spend " +#~ "you days searching for her." +#~ msgstr "" +#~ "大変動前に彼女と結婚しようとしていました。今は彼女を見つける為に日々を生き" +#~ "延びています。" -#~ msgid "The corpse is now thoroughly pulped." -#~ msgstr "死体は完全に潰れました。" +#~ msgid "Dry processed noodles, simply add hot water. can be eaten raw" +#~ msgstr "" +#~ "乾燥処理されたラーメン。お湯を使って戻します。生でそのまま食べる事も可能で" +#~ "す。" -#~ msgid "Close" -#~ msgstr "閉める" +#~ msgid "Cart" +#~ msgstr "カート" -#~ msgid "Open" -#~ msgstr "開ける" +#~ msgid "Enter new cart name:" +#~ msgstr "車両の新しい名前を入力して下さい:" -#~ msgid "Study %s?" -#~ msgstr "%sを学びますか?" +#~ msgid "Start cart construction" +#~ msgstr "カートを作製する" -#~ msgid "You haven't had anything to drink in 2 days!" -#~ msgstr "2日間、何も飲んでいない!" +#~ msgid "mole" +#~ msgstr "モグラ" -#~ msgid "4 days... no water.." -#~ msgstr "もう4日も水を飲んでいない..." +#~ msgid "clams" +#~ msgstr "ハマグリ" -#~ msgid "You haven't eaten in over a week!" -#~ msgstr "ここ1週間、何も食べていない!" +#~ msgid "" +#~ "A brass-jacketed variant of the .44 Magnum round. This increases " +#~ "penetration slightly at the cost of reduced expansion." +#~ msgstr "" +#~ "弾頭を完全に真鍮で覆った.44弾の一種。弾頭変形を防ぎ貫通力を高めてある。" +#, fuzzy #~ msgid "" -#~ "Speed -40%\n" -#~ "You can feel the tiny spores sinking directly into your flesh." +#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " +#~ "you from the floor, making it easier to sleep" #~ msgstr "" -#~ "速度 -40%;\n" -#~ "小さな菌類の胞子が直接体内に入り込んでいくのを感じます。" +#~ "ウレタンフォームのシーツ。丸めて収納できる。断熱効果があり寝心地がいい。" -#~ msgid "Bugs Under Skin" -#~ msgstr "皮膚内に蠢く虫" +#~ msgid "A bacon, lettuce and tomato sandwich on toasted bread." +#~ msgstr "焼いたパンでベーコンとレタス、トマトを挟んだサンドイッチ。" -#~ msgid "Spores" -#~ msgstr "胞子" +#~ msgid " misses!" +#~ msgstr "の攻撃が外れた!" -#~ msgid "You start scratching yourself all over!" -#~ msgstr "全身を引っ掻き始めた!" +#~ msgid " barely misses!" +#~ msgstr "の攻撃がぎりぎりで外れました!" -#~ msgid "You wake up to the ringing of an alarm-clock." -#~ msgstr "目覚まし時計の音で目が覚めた。" +#~ msgid "l, 6, or right arrow" +#~ msgstr "l, 6, 右" -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "虫が皮膚の下を這い回っている!" +#~ msgid "j/k, 8/2, or arrows" +#~ msgstr "j/k, 8/2, 上/下" -#~ msgid "Can't move furniture there! Choose a direction with open floor." -#~ msgstr "そこには動かせない!空いた場所を選んで下さい。" +#~ msgid "h, 4, or left arrow" +#~ msgstr "h, 4, 左" -#~ msgid "Press a direction for the furniture to move (. to cancel):" -#~ msgstr "方向キーで家具を移動(.で中止):" +#~ msgid "(Press spacebar to toggle)" +#~ msgstr "(スペースで切り替え)" -#~ msgid "Contruct" -#~ msgstr "建設" +#~ msgid " select a statistic." +#~ msgstr " ステータスを選択" -#~ msgid "Start a fire" -#~ msgstr "点火開始" +#~ msgctxt "Main Menu" +#~ msgid "oad" +#~ msgstr "ロード" -#~ msgid "Too many itens" -#~ msgstr "アイテムを持ち過ぎている" +#~ msgctxt "Main Menu" +#~ msgid "elp" +#~ msgstr "ヘルプ" + +#~ msgid "Hardcore" +#~ msgstr "ハードコア" + +#~ msgid "Monster Spotted!" +#~ msgstr "敵だ!" + +#~ msgid "Normal" +#~ msgstr "通常" diff --git a/lang/po/ko.po b/lang/po/ko.po index 4d6517545c533..0b1ab4cd1457f 100644 --- a/lang/po/ko.po +++ b/lang/po/ko.po @@ -1,22 +1,22 @@ -# Korean translation for cataclysm +# Korean translation for cdda # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the cataclysm package. +# This file is distributed under the same license as the cdda package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: cataclysm\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-06 22:43+0000\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-12 08:17+0000\n" "Last-Translator: Cobalt \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=1;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:30+0000\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Launchpad-Export-Date: 2013-11-14 03:33+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -317,15 +317,15 @@ msgstr "손에 든 물품의 내용물/충전물 비우기" #: action.cpp msgid "View Factions" -msgstr "동료 상태를 보다" +msgstr "동료 상태 보기" #: action.cpp msgid "View Help" -msgstr "도움말을 보다" +msgstr "도움말 보기" #: action.cpp msgid "View Kills" -msgstr "킬 카운트를 보다" +msgstr "킬 카운트 보기" #: action.cpp msgid "View Map" @@ -333,7 +333,7 @@ msgstr "지도 보기" #: action.cpp msgid "View Message Log" -msgstr "메시지 로그를 보다" +msgstr "메시지 로그 보기" #: action.cpp msgid "View Missions" @@ -341,15 +341,15 @@ msgstr "퀘스트 보기" #: action.cpp msgid "View Morale" -msgstr "의욕 상태를 본다" +msgstr "의욕 상태 보기" #: action.cpp msgid "View Player Info" -msgstr "플레이어의 정보 보기" +msgstr "플레이어 정보 보기" #: action.cpp msgid "View Scentmap" -msgstr "향기 지도를 보다" +msgstr "향기 지도 보기" #: action.cpp msgid "View/Activate Bionics" @@ -1596,11 +1596,11 @@ msgstr "수정" #: auto_pickup.cpp msgid "E" -msgstr "E" +msgstr "<제외>E" #: auto_pickup.cpp msgid "I" -msgstr "I" +msgstr "<포함>I" #: auto_pickup.cpp msgid "ove" @@ -1620,7 +1620,7 @@ msgstr "페이지 전환" #: auto_pickup.cpp msgid "" -msgstr "" +msgstr "<규칙 없음>" #: auto_pickup.cpp msgid "I/E" @@ -1644,24 +1644,24 @@ msgstr "변경사항을 저장할까요?" #: auto_pickup.cpp msgid "Under construction!" -msgstr "공사중!" +msgstr "제작중!" #: auto_pickup.cpp msgid "Won't display damaged, fits and can/bottle items" -msgstr "캔/병 에 들었거나 수선/손상된 것 표시하지 않기" +msgstr "캔/병 안에 있거나 수선/손상된 것의 여부는 표시되지 않음" #: auto_pickup.cpp msgid "[]" -msgstr "[]" +msgstr "[<캐릭터 적용>]" #: auto_pickup.cpp msgid "[]" -msgstr "[]" +msgstr "[<전체 적용>]" #: bionics.cpp #, c-format msgid "%s - %d PU / %d trns" -msgstr "%s - %d 파워 / %d 턴" +msgstr "%s - %d 전력 / %d 턴" #: bionics.cpp #, c-format @@ -1707,7 +1707,7 @@ msgstr "인공 암흑 발생기 작동!" #: bionics.cpp msgid "BIONICS -" -msgstr "바이오닉 -" +msgstr "바이오닉" #: bionics.cpp msgid "Create an EMP where?" @@ -1728,12 +1728,12 @@ msgstr "정보확인 모드. \"!\" 버튼을 눌러 바이오닉 사용." #: bionics.cpp #, c-format msgid "Extract water from the %s" -msgstr "%s에서 물을 추출합니다" +msgstr "%s에서 물을 추출" #: bionics.cpp #, c-format msgid "Failed to install bionic: %s." -msgstr "바이오닉 설치 실패 : %s." +msgstr "바이오닉 설치 실패 : %s" #: bionics.cpp msgid "Fungal Parasite" @@ -1755,12 +1755,12 @@ msgstr "곤충류 기생충" #: bionics.cpp #, c-format msgid "Installed bad bionic: %s." -msgstr "잘못된 바이오닉 설치 : %s." +msgstr "잘못된 바이오닉 설치 : %s" #: bionics.cpp #, c-format msgid "Installed bionic: %s." -msgstr "바이오닉 설치 : %s." +msgstr "바이오닉 설치 : %s" #: bionics.cpp msgid "Intoxicant: Other" @@ -1818,7 +1818,7 @@ msgstr "독" #: bionics.cpp #, c-format msgid "Power: %d/%d" -msgstr "파워 : %d / %d" +msgstr "전력: %d / %d" #: bionics.cpp lang/json/json_items.py msgid "Prozac" @@ -1887,8 +1887,8 @@ msgstr "내장형 섬광 발생기를 작동시켰습니다!" msgid "" "You can not activate %s! To read a description of %s, press '!', then '%c'." msgstr "" -"%s은(는) 작동형 바이오닉이 아닙니다! %s에 대한 설명을 읽으려면, '!' 키를 누" -"르고 나서, '%c' 키를 누르세요." +"%s은(는) 작동형 바이오닉이 아닙니다! %s에 대한 설명을 읽으려면 '!' 키를 누르" +"고 나서, '%c' 키를 누르세요." #: bionics.cpp msgid "You can't light a fire there." @@ -3294,7 +3294,7 @@ msgstr "추가 요구 기술 : %s" #: crafting.cpp #, c-format msgid "Requires %d tools with %s of %d or more." -msgstr "%d개의 %s 가능한 도구 필요 (품질 %d 이상)" +msgstr "%d개의 %s 가능한 도구 필요 (품질 %d등급 이상)" #: crafting.cpp msgid "Search:" @@ -3383,7 +3383,7 @@ msgstr "'%c' 을(를) 가지고 있지 않습니다!" #: crafting.cpp #, c-format msgid "You fail to make the %s, and waste some materials." -msgstr "%s 제작에 실패했습니다. 몇 가지 재료를 낭비했습니다." +msgstr "%s 제작에 실패했습니다. 몇가지 재료를 낭비했습니다." #: crafting.cpp #, c-format @@ -4492,7 +4492,7 @@ msgstr "연기 들이마심" #: disease.cpp msgid "Snakebite Unlocked!" -msgstr "사교상 사용 가능!" +msgstr "사권 사용 가능!" #: disease.cpp msgid "Something feels very, very wrong." @@ -4702,7 +4702,7 @@ msgstr "그라켄을 풀어줬습니다." #: disease.cpp msgid "Viper Strike Unlocked!" -msgstr "독사교상 사용 가능!" +msgstr "독사권 사용 가능!" #: disease.cpp msgid "Warm arms" @@ -7581,7 +7581,7 @@ msgstr "나감" #. ~ Fast-scroll indicator #: game.cpp msgid "F" -msgstr "" +msgstr "F" #: game.cpp msgid "FACTIONS:" @@ -7752,9 +7752,8 @@ msgid "Maybe you should find something new to read..." msgstr "다른 읽을거리를 찾아 보는게 좋을 것 같습니다..." #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "얼굴이 냉기에 위험할 정도로 노출됐습니다." +msgstr "적이 위험할 정도로 가까이에 있습니다!" #: game.cpp msgid "Monster spotted!" @@ -8735,7 +8734,7 @@ msgstr "아무 것도 찾지 못했습니다." #: game.cpp #, c-format msgid "You discover a %s in the %s!" -msgstr "%s에서 %s을(를) 발견했다!" +msgstr "%s을(를) %s에서 발견했습니다!" #: game.cpp #, c-format @@ -8837,9 +8836,8 @@ msgid "You fall on the ground for %d damage." msgstr "%d 피해를 입고 바닥에 쓰러졌습니다." #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "이틀 동안 수면을 취하지 않았습니다!" +msgstr "며칠 동안 잠을 자지 않은 느낌이 듭니다." #: game.cpp #, c-format @@ -10194,13 +10192,13 @@ msgstr "" "도움말을 보시려면 다음 주제 앞의 키를 눌러주세요\n" "q 혹은 ESC 키로 되돌아갑니다.\n" "\n" -"a : 소개 i : 바이오닉\n" -"b : 이동 j : 물품제작\n" -"c : 화면 k : 함정과 덫\n" -"d : 배고픔, 목마름, 수면 l : 아이템 개요\n" -"e : 고통, 자극 m : 전투\n" -"f : 중독 n : 비무장 공격 종류\n" -"g : 의욕, 학습 o : 생존 팁\n" +"a : 소개 i : 바이오닉\n" +"b : 이동 j : 물품제작\n" +"c : 화면 k : 함정과 덫\n" +"d : 배고픔, 목마름, 수면 l : 물품 개요\n" +"e : 고통, 자극 m : 전투\n" +"f : 중독 n : 비무장 공격 종류\n" +"g : 의욕, 학습 o : 생존 팁\n" "h : 방사능, 변이\n" "\n" "1 : 모든 명령의 리스트 (이곳에서 키 설정을 바꿀수 있습니다)\n" @@ -11417,11 +11415,11 @@ msgstr " (썩음)" #: item.cpp msgid " Cut: " -msgstr " 베기 : " +msgstr " 베기 피해량 : " #: item.cpp msgid " Pierce: " -msgstr " 관통 데미지 : " +msgstr " 관통 피해량 : " #: item.cpp msgid " To-hit bonus: " @@ -11514,7 +11512,7 @@ msgstr " 퍼센트" #: item.cpp #, c-format msgid " rounds of %s" -msgstr "%s발" +msgstr "%s, 발" #. ~ inches, e.g. 20" wheel #: item.cpp @@ -11538,7 +11536,7 @@ msgstr "장갑관통력 : " #: item.cpp msgid "Bash: " -msgstr "타격 : " +msgstr "타격 피해량 : " #: item.cpp msgid "Block" @@ -11575,7 +11573,7 @@ msgstr "보호 부위 : " #: item.cpp msgid "Damage: " -msgstr "데미지 : " +msgstr "피해량 : " #: item.cpp msgid "Defense disarm" @@ -11624,7 +11622,7 @@ msgstr "잡기 탈출" #: item.cpp #, c-format msgid "Has %s of level %d." -msgstr "%s 기술 수준 : %d." +msgstr "%s 등급 : %d등급" #: item.cpp msgid "Hit all adjacent monsters" @@ -11702,7 +11700,7 @@ msgstr "보호-둔기 : " #: item.cpp msgid "Quench: " -msgstr "갈증해소 : " +msgstr "갈증 해소 : " #: item.cpp msgid "Range: " @@ -11845,7 +11843,7 @@ msgstr "던지기" #: item.cpp msgid "Type: " -msgstr "사용 탄약 : " +msgstr "종류 : " #: item.cpp msgid "Used on: " @@ -12123,6 +12121,10 @@ msgstr "부품" msgid "corpse" msgstr "시체" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "자성 레일 발사체" + #: itypedef.cpp msgid "flyer" msgstr "전단지(flyer)" @@ -12196,9 +12198,8 @@ msgid "shot" msgstr "탄" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "신호 수신기(signal receiver)" +msgstr "신호용 조명탄(signal flare)" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -12651,6 +12652,10 @@ msgstr "거대 파리가 나타났습니다!" msgid "Giant wasps appear!" msgstr "거대 말벌이 나타났습니다!" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "빠아아아아앙!" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "창문, 문, 울타리에 설치한 나무판은 망치가 있어야만 제거할 수 있습니다." @@ -12835,9 +12840,8 @@ msgid "Put a knife in the boot" msgstr "나이프를 부츠에 넣었습니다." #: iuse.cpp -#, fuzzy msgid "Put the cat food where?" -msgstr "어디에 개 먹이를 놓습니까?" +msgstr "어디에 고양이 먹이를 놔둡니까?" #: iuse.cpp msgid "Put the dog food where?" @@ -13118,6 +13122,8 @@ msgid "" "The cat seems to like you! Or maybe it just tolerates your presence better. " "It's hard to tell with cats." msgstr "" +"고양이가 당신을 마음에 들어하는 것 같습니다! 그저 덜 불쾌하게 여기는 것일 수" +"도 있지만요." #: iuse.cpp msgid "The dog seems to like you!" @@ -13132,9 +13138,8 @@ msgid "The fabric of space seems to decay." msgstr "공간의 막이 부패하는 것 같아보입니다." #: iuse.cpp -#, fuzzy msgid "The flare sputters out." -msgstr "%s이(가) 둘로 나눠졌습니다." +msgstr "조명탄의 지속시간이 끝났습니다." #: iuse.cpp msgid "The flashlight flicks off." @@ -13533,6 +13538,14 @@ msgstr "지뢰를 묻었습니다." msgid "You can dig a pit via the construction menu--hit *" msgstr "건설 메뉴에서 구덩이를 팔 수 있습니다. * 키를 누르세요." +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" +"혈액이 급격하게 혈관을 따라 흐르는 느낌과 함께, 약물의 기운이 거세게 밀려옵니" +"다." + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "도구를 개조하려면 배터리가 있어야 합니다." @@ -13614,9 +13627,8 @@ msgid "You can't see to sew!" msgstr "볼 수가 없어 바느질을 할 수 없습니다!" #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "야광봉은 끌 수 없습니다." +msgstr "조명탄은 끌 수 없습니다." #: iuse.cpp msgid "You can't turn off a glowstick." @@ -13646,9 +13658,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "상처를 지졌습니다. 개같이 아픕니다!" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "%s를(을) 먹었습니다." +msgstr "%s을(를) 씹었습니다." #: iuse.cpp msgid "You churn up the earth here." @@ -13688,6 +13700,10 @@ msgstr "%s을(를) 더 많이 망쳤습니다!" msgid "You damage your %s!" msgstr "%s을(를) 망쳤습니다!" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "버튼을 눌렀지만, 아무 소리도 나지 않았습니다." + #: iuse.cpp msgid "You destroy it!" msgstr "이 의류는 못쓰게 되었습니다!" @@ -13801,6 +13817,10 @@ msgstr "기분이 심란합니다." msgid "You feel very sleepy..." msgstr "많이 졸립니다..." +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "기분이... 좋아졌습니다. 이유는 모르겠지만요." + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "주변 지역에 대한 환상을 보았습니다..." @@ -13821,6 +13841,10 @@ msgstr "음식을 데웠습니다." msgid "You honk the bicycle horn." msgstr "자전거 경적을 울렸습니다." +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "경적을 울렸습니다." + #: iuse.cpp msgid "You inject the vaccine." msgstr "백신을 투여했습니다." @@ -13970,6 +13994,10 @@ msgid "" "disassemble ammunition." msgstr "탄약을 분해하려면 최소 2 레벨 이상의 화기 기술이 필요합니다." +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "울부짖고, 깨물고, 퍼덕거리고, 햇빛을 쬐고 싶어졌습니다. 지금 당장요." + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "병뚜껑을 열어, 대기중에 노출시킵니다." @@ -14201,9 +14229,8 @@ msgid "You snort some crystal meth." msgstr "메탐페타민 가루를 흡입했습니다." #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "바닥에 개밥을 뿌렸습니다." +msgstr "지면에 고양이 먹이를 뿌렸습니다." #: iuse.cpp msgid "You spill the dogfood all over the ground." @@ -14222,9 +14249,8 @@ msgid "You stop the bleeding." msgstr "상처를 지혈했습니다." #: iuse.cpp -#, fuzzy msgid "You strike your flare and light it." -msgstr "%s에게 송곳니를 박아넣었습니다!" +msgstr "조명탄을 작동시켰습니다." #: iuse.cpp msgid "You string up the tripwire." @@ -15593,6 +15619,10 @@ msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" "자신의 이빨로 사냥감을 물어 죽이는 공포스럽도록 생생한 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "발굽, 뿔, 이빨, 싸움, 먹이, 전진." + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -15644,6 +15674,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "꿈을 꾸는 동안, 특이한 파충류를 닮은 또 다른 자신을 보았습니다." +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "환자복을 입고 치료를 받는 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "꿈을 꾸는 동안, 특이한 형태로 짐승같이 변한 또 다른 자신을 보았습니다." @@ -15661,6 +15697,10 @@ msgstr "새가 되는 꿈이 현실보다 더 생생해서 혼란감을 느꼈 msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "동굴 속에서 사는 꿈을 꾸고 나니, 야외로 나가는 것이 무서워졌습니다." +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "당신은 꿈 속에서 짐승'들'이었습니다. 짐승 한 마리 따위가 아니라." + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "도마뱀 혼종이 되는 꿈을 꾸어 공포를 느꼈습니다." @@ -15670,6 +15710,16 @@ msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" "무리의 여왕을 아무런 생각도 하지 않고 돌보는 꿈을 꾸어 공포감을 느꼈습니다." +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" +"무슨 꿈을 꾸었는지 제대로 기억해낼 수 없습니다... 꿈이 계속 변화했거든요." + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "기이하게도, 동물원에 대한 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "동굴 속에서 살고 있는 원시인이 되는 꿈을 꾸었습니다." @@ -15678,6 +15728,11 @@ msgstr "동굴 속에서 살고 있는 원시인이 되는 꿈을 꾸었습니 msgid "You dream of grazing in an open field." msgstr "탁 트인 초원에서 풀을 뜯고 있는 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "당신이 지금까지 이루어왔던, 모든 성공들에 대한 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "공포스러운 문어 돌연변이로 사는 꿈을 꾸었습니다." @@ -15694,6 +15749,10 @@ msgstr "바다에서 사는 꿈을 꾸었습니다." msgid "You dream of swimming in the open ocean" msgstr "탁 트인 바다에서 수영을 하는 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "기분이... 괜찮아졌습니다." + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -15721,10 +15780,22 @@ msgstr "태양볕 아래 돌 위에서 일광욕을 하는 불안한 느낌의 msgid "You have a disturbing dream of swimming with a school of fish." msgstr "물고기 떼 안의 한 마리로서 헤엄 치는 이상한 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "이상한 의료 방법으로 검사를 받는, 기분 나쁜 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "도마뱀으로 살아가는, 무서울 정도로 생생한 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" +"의사와 간호사들이 당신의 몸에 자연의 섭리와 어긋난 수술을 하는 꿈을 꾸었습니" +"다. 당신은 수술을 받으면서 비뚤어진 쾌감을 느꼈습니다." + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "당신은 벌집에서 사는 꿈을 꾸었다." @@ -15738,6 +15809,11 @@ msgstr "겨울 때문에 남쪽으로 날아가는 철새가 되는 생생한 msgid "You have a strange dream about animals." msgstr "당신은 동물이 나오는 이상한 꿈을 꾸었다." +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "섬뜩한 병원의 환자가 되는, 기이한 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "당신은 새가 나오는 이상한 꿈을 꾸었다." @@ -15790,6 +15866,16 @@ msgstr "당신은 진흙탕 속에서 사는, 이상한 꿈을 꾸었다." msgid "You have a strange dream of spinning webs" msgstr "당신은 거미줄을 짜는 이상한 꿈을 꾸었다." +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "이상한 꿈을 꾸었습니다." + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "의학용 실험체가 되는 생생한 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "당신은 숲속에서 사냥을 하는, 생생한 꿈을 꾸었다." @@ -15802,6 +15888,13 @@ msgstr "당신은 하늘을 날아다니는, 이상한 꿈을 꾸었다." msgid "You scream in fear while you dream of being chased by a cat" msgstr "고양이에게 쫓기는 꿈을 꾸는 동안 공포에 비명을 질렀습니다." +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" +"5년 뒤의 자신에 대한 꿈을 꾸었습니다. 꿈 속에서 당신은 성공적인 도시의 지도자" +"였습니다." + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "농부에게 이끌려 도살장으로 끌려 들어가는 공포스러운 꿈을 꾸었습니다." @@ -15823,10 +15916,19 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "여러 꽃을 수분하는 삶에서 현실로의 전환에 혼란감을 느꼈습니다." +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" +"다양한 생명체로 가득한 꿈을 꾸었습니다. 모든 생명체들이 당신을 닮았었지만요." + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "어둠 속에서 근 일 년을 사는 현실같은 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "자각몽을 꾸었습니다." + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "꿈 때문에 이상한 고독감이 든다." @@ -15875,6 +15977,10 @@ msgstr "이상하고 축축한 느낌을 받는 꿈을 꾸었습니다." msgid "Your dreams give you a strange wet, scaly feeling." msgstr "꿈에서 이상하고 습한 비늘의 느낌을 받았습니다." +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "약물과 관련된 이상한 꿈을 꾸었습니다." + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "거미로 완전히 변하는 꿈에 공포를 느꼈습니다." @@ -15884,10 +15990,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "바다에서 사는 삶에 대한 꿈이, 현실보다 더 현실 같은 느낌이 듭니다." +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "꿈이... 너무나도 복잡하고 다면적이었습니다." + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "쥐 떼에 섞여, 먹을 것을 찾아 쓰레기를 뒤지는 생생한 꿈을 꾸었습니다." +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "꿈에 불과했지만, 잠시 동안 당신은 문명의 복구에 성공했었습니다." + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "끈적이는 덩어리로 사는 생생하고도 무서운 꿈을 꾸었습니다." @@ -17062,6 +17176,14 @@ msgstr "10mm Auto" msgid "12 gauge pistol" msgstr "12G 산탄 권총(12 gauge pistol)" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "강화된 팔 보호대(2-by-arm guards)" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "강화된 다리 보호대(2-by-shin guards)" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "목검(2-by-sword)" @@ -18312,6 +18434,14 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "작은 주머니가 달린 털가죽 코트 입니다. 엄청나게 따뜻합니다." +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" +"털가죽을 사용해서 만든 원시적인 옷입니다. 당신의 소중한 부분을 보호해주지만, " +"그다지 많이는 보호해주지 못합니다. 이제 진정한 야만인 전사처럼 보이겠네요." + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -18590,6 +18720,8 @@ msgid "" "A heavy plastic cartridge made for use in flare guns. It appears to be a " "modified 12 gauge shotgun shell." msgstr "" +"무거운 플라스틱 카트리지로, 조명탄에 사용됩니다. 12 gauge 산탄총용 탄환의 개" +"조판인 것 같습니다." #: lang/json/json_items.py msgid "A heavy plastic helmet normally worn by football players." @@ -18761,6 +18893,15 @@ msgstr "" "전자석을 사용해서, 강한 자성을 띈 투사체를 고속으로 쏘아내는 수제 총기입니" "다. 통합 전원장치로 전원을 공급받습니다." +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" +"큰 더플백으로, 주방위군 한 명이 재배치를 받기 위해 준비한 군장으로 보입니다. " +"분해해서 내용물을 챙길 수 있습니다." + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -18808,6 +18949,14 @@ msgstr "" "길이가 긴 총기의 총열에 부착하는 형태의 쇠뇌 부품입니다. 이 부품으로 개조하" "면 쇠뇌용 볼트를 사격할 수 있게 됩니다." +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" +"뾰족한 가시가 박힌 칼날에 천 조각을 감아 손잡이로 만든, 수제 칼입니다. 괜찮" +"은 근접 무기로 사용할 수 있습니다." + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "큰 12v 납산 축전지로, 트럭의 전력 시스템을 작동시킬 때 사용합니다." @@ -19009,14 +19158,13 @@ msgid "A large, spiky pineapple. A bit sour, though." msgstr "크고, 가시난 파인애플입니다. 약간 신 맛이 납니다." #: lang/json/json_items.py -#, fuzzy msgid "" "A leather album full of photos of somebody's family. You don't know any of " "the people in them, but seeing these pictures still makes you think of " "happier times." msgstr "" -"한 가족의 사진 앨범. 모르는 사람들의 사진이지만, 그럼에도 행복했던 예전을 떠" -"올리게 합니다." +"어떤 가족의 사진이 담긴 가죽 사진집입니다. 사진에 있는 사람들이 누군지는 모르" +"겠지만, 사진집을 보고 있으면 자신의 행복했던 시절을 떠올리게 만듭니다." #: lang/json/json_items.py msgid "" @@ -19067,11 +19215,12 @@ msgstr "" "있습니다." #: lang/json/json_items.py -#, fuzzy msgid "" "A light and breezy cotton dress. Though cool and comfortable to wear, it " "lacks any storage space." -msgstr "긴 면 드레스입니다. 입기 편하지만, 저장공간이 없습니다." +msgstr "" +"가볍고 통풍이 잘 되는 면 드레스입니다. 시원하고 입기 편하지만, 저장공간이 부" +"족합니다." #: lang/json/json_items.py msgid "A light vest covered in pockets and straps for storage." @@ -19150,6 +19299,13 @@ msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" "나일론으로 된 길다란 로프입니다. 추락으로부터 당신을 안전하게 지켜줍니다." +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" +"강철 조각을 붙인, 긴 나무 막대기입니다. 다루기 힘들지만 아주 강력합니다." + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -19647,6 +19803,24 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "높은 굽이 달린 힐 한쌍입니다. 신고 걷는 것 조차 어렵습니다." +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" +"재목 조각을 천 조각과 실을 사용해서 묶은, 강화된 팔 보호대입니다. 좋은 보호력" +"을 제공해주지만, 매우 불편합니다." + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" +"재목 조각을 천 조각과 실을 사용해서 묶은, 강화된 정강이 보호대입니다. 좋은 보" +"호력을 제공해주지만, 매우 불편해서 달리기 힘들어집니다." + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "카키색 바지입니다. 청바지보다 조금 더 따뜻합니다." @@ -19659,6 +19833,14 @@ msgstr "카키색 반바지입니다." msgid "A pair of knee pads made of stout plastic and cloth." msgstr "천과 플라스틱으로 만들어진, 무릎 보호용 패드 한 쌍 입니다." +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" +"손톱 부분에 두 개의 작은 나무 조각이 있는 너클 한 쌍입니다. 길거리 싸움에 유" +"용합니다." + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -19754,11 +19936,10 @@ msgstr "" "으로 주로 사용됩니다." #: lang/json/json_items.py -#, fuzzy msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." -msgstr "누구나 알고 있을, 일반적인 선글라스입니다. 강한 빛을 막아줍니다." +msgstr "멋있는 선글라스입니다. 태양빛으로부터 눈을 보호해줍니다." #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." @@ -19883,7 +20064,7 @@ msgstr "" #: lang/json/json_items.py msgid "A plastic single shot pistol made to fire signal flares." -msgstr "" +msgstr "조명 신호를 보내기 위한, 플라스틱 단발 권총입니다." #: lang/json/json_items.py msgid "" @@ -20287,7 +20468,7 @@ msgstr "" #: lang/json/json_items.py msgid "A short dart from a fungal fighter. Makes an average melee weapon." -msgstr "진균 싸움꾼의 작은 가시입니다. 괜찮은 근접무기로 쓰입니다." +msgstr "진균 전사의 작은 가시입니다. 괜찮은 근접무기로 쓰입니다." #: lang/json/json_items.py msgid "A short piece of nylon rope. Too small to be of much use." @@ -20295,6 +20476,24 @@ msgstr "" "나일론으로 만들어진 로프의 작은 조각입니다. 어중간하게 짧아, 다른 용도로 사용" "하기 힘듭니다." +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" +"한쪽 끝을 날카롭게 만든, 짧은 철근 조각입니다. 자력을 사용하는 무기의 강력한 " +"탄환으로 사용할 수 있습니다." + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" +"한쪽 끝을 날카롭게 만든, 짧은 강철 조각입니다. 자력을 사용하는 무기의 강력한 " +"탄환으로 사용할 수 있습니다." + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -20485,6 +20684,16 @@ msgstr "" "12 게이지 산탄을 사용하는 단발 권총입니다. 고철을 사용해서 손으로 만들어졌습" "니다." +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" +"전력으로 작동하는 수제 단발 총기로, 강철 레일을 발사할 때 쓰입니다. 초고속으" +"로 발사되는 금속은 로렌츠 힘에 의해 자연 연소되며, 기본형 UPS로 작동됩니다." + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -20512,6 +20721,14 @@ msgstr "위장 무늬가 염색된 소매 없는 면 셔츠입니다. 입고 활 msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "소매가 없는 면 셔츠입니다. 입고 활동하기 편합니다." +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" +"길고 가는 나무 막대기로, 전통적으로 대련에서 훈련용으로 사용되던 무기입니다. " +"위급할 때에는 괜찮은 근접 무기로 사용할 수도 있습니다." + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -20597,7 +20814,7 @@ msgstr "" #: lang/json/json_items.py msgid "A small metal teapot. Teatime wouldn't be complete without one." -msgstr "" +msgstr "작은 금속제 찻주전자입니다. 티타임의 필수품이죠." #: lang/json/json_items.py msgid "" @@ -20780,6 +20997,14 @@ msgstr "" "기 위해서는 라이터나 성냥이 필요합니다. 불을 붙이면 곧 폭발하니, 던져버리세" "요!" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" +"뾰족하게 만든 철근입니다. 여전히 찌르기보다는 타격용 무기이지만, 필요할 때 찌" +"르기 공격을 할 수 있게 되었습니다." + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "사람보다 더 잘먹는 누군가로 부터 만들어진 수프 입니다." @@ -20861,14 +21086,13 @@ msgstr "" "단단한 장대의 끝부분을 불로 뾰족하게 만들고, 급조한 손잡이를 붙인 창입니다." #: lang/json/json_items.py -#, fuzzy msgid "" "A stout wooden truncheon of the sort commonly employed by police. Originally " "an Okinawan weapon, it consists of a stick with a perpendicular handle " "attached a third of the way down its length." msgstr "" -"단단한 플라스틱 곤봉으로, 주로 경찰들이 사용하는 무기입니다. 오키나와 지방의 " -"무기로 시작되었으며, 곤봉에 직각방향으로 손잡이가 붙어있습니다." +"단단한 나무 곤봉으로, 주로 경찰들이 사용하는 무기입니다. 오키나와 지방의 무기" +"로 시작되었으며, 곤봉에 직각방향으로 손잡이가 붙어있습니다." #: lang/json/json_items.py msgid "" @@ -20953,14 +21177,13 @@ msgid "A sweet red berry." msgstr "달콤한 붉은색 열매입니다." #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"총검은 산탄총, 기관단총, 혹은 소총의 앞에 부착하는 찌르는 무기입니다. 근접 공" -"격시 강력한 관통 데미지를 주지만, 반동과 총기 길이가 약간 증가합니다." +"총검은 산탄총이나 기관단총 앞부분에 장착하는 검닙니다. 총으로 베기 데미지를 " +"줄 수 있게 되지만, 길이가 늘어나 반동이 약간 증가하게 됩니다." #: lang/json/json_items.py msgid "" @@ -21690,21 +21913,20 @@ msgstr "" "다." #: lang/json/json_items.py -#, fuzzy msgid "" "An all-encompassing black helmet that covers your entire face and neck, " "providing excellent protection from all sorts of damage." msgstr "" -"가벼운 검은 헬멧입니다. 모든 종류의 피해에 대해 아주 높은 방어력을 줍니다." +"얼굴과 목을 감싸는 검은 헬멧으로, 다양한 데미지에 대해 높은 보호력을 제공합니" +"다." #: lang/json/json_items.py -#, fuzzy msgid "" "An aluminium baseball bat, lighter than a wooden bat and a little easier to " "swing as a result." msgstr "" -"알루미늄으로 만든 방망이입니다. 나무로 만든 방망이보다 작고 가볍기 때문에, 결" -"과적으로 더 적은 데미지를 줍니다." +"알루미늄 재질의 야구 방망이입니다. 나무 방망이보다 가볍고, 때문에 조금 더 휘" +"두르기 쉽습니다." #: lang/json/json_items.py msgid "An aluminum can, like what soda comes in." @@ -21949,6 +22171,10 @@ msgstr "극히 무거운 금속판으로 만든 부츠입니다." msgid "An extremely heavy set of armor plated gloves." msgstr "극히 무거운 금속판으로 만들어진 철제 장갑입니다." +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "극도로 희귀한 뮤타젠 혼합물입니다." + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -22417,6 +22643,8 @@ msgid "" "Chewing gum with added caffeine. Sugary and bad for your teeth, but it's a " "nice pick-me-up." msgstr "" +"카페인이 함유된 껌입니다. 건강에는 별로 좋지 않지만, 씹으면 기분이 좋아집니" +"다." #: lang/json/json_items.py msgid "Chocolate isn't very healthy, but it does make a delicious treat." @@ -23417,6 +23645,14 @@ msgstr "강철로 발끝 부분이 보강된 가죽 장화. 엄청나게 견고 msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "뼈를 사용해 강화한 가죽 장갑입니다. 아주 가볍고 튼튼합니다." +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" +"가죽을 사용해서 만든 원시적인 옷입니다. 당신의 소중한 부분을 보호해주지만, 그" +"다지 많이는 보호해주지 못합니다." + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -23442,7 +23678,7 @@ msgstr "" #: lang/json/json_items.py msgid "Lightweight shoes made of cloth and rubber." -msgstr "" +msgstr "면과 고무로 만들어진 가벼운 신발입니다." #: lang/json/json_items.py msgid "Like apple cider, only with vodka." @@ -23454,6 +23690,15 @@ msgstr "" "콜라와 비슷하지만 카페인이 없는 음료입니다. 하지만 여전히 건강에는 좋지 않습" "니다." +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" +"손에 둘둘 말아서 사용하는, 긴 천 조각입니다. 주먹질을 하거나 다른 행동을 할 " +"때 약간의 보호력을 제공합니다." + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "자동차와 드라이빙 기술에 관한 많은 글이 있습니다." @@ -23640,6 +23885,8 @@ msgid "" "health, it was once a favorite amongst baseball players, cowboys, and other " "macho types." msgstr "" +"민트향의 씹는 담배입니다. 여전히 건강에는 매우 좋지 않지만, 야구선수나 카우보" +"이, 마초들에게는 인기가 있습니다." #: lang/json/json_items.py msgid "Mint flavored nicotine chewing gum. For smokers who desire to quit." @@ -23867,6 +24114,18 @@ msgstr "PDA" msgid "PDA - Flashlight" msgstr "PDA - 손전등(Flashlight)" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "PE023 \"의약품\": 적용과 결과" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "PE050 \"알파\": 예비 보고서" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "PE065 \"키메라\": 최고의 실험체" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "PG-7VL 로켓(rocket)" @@ -24072,6 +24331,14 @@ msgstr "RPG-7" msgid "RV kitchen unit" msgstr "RV 주방 차량(RV kitchen unit)" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" +"천 조각을 사용해서 만든 원시적인 옷입니다. 당신의 소중한 부분을 보호해주지" +"만, 그다지 많이는 보호해주지 못합니다." + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -24445,7 +24712,7 @@ msgstr "기관단총 마니아(book)" #: lang/json/json_items.py msgid "Suitable for tropical retreats and Canadian artists alike." -msgstr "" +msgstr "열대 지방이나 캐나다 예술가들에게 맞는 음료입니다." #: lang/json/json_items.py msgid "Survival Under Atomic Attack" @@ -25163,6 +25430,14 @@ msgstr "" "담배를 마는데 사용되는 얇은 종이입니다.\r\n" "구식 종이 장약을 사용하는 리볼버 탄약 제조에 사용할 수도 있습니다." +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" +"대평야 지대는 아니지만, 이 챙 넓은 카우보이 모자를 쓰면 황야의 무법자 느낌을 " +"낼 수 있습니다." + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -25287,6 +25562,14 @@ msgstr "" "당신이 좋아하는 부류의 음악이 많이 들어있습니다. 들으면 당신의 사기, 의욕이 " "서서히 올라갑니다. 'a' 키로 장치를 켜서 사용합니다." +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" +"새로운 의약품 제조 정보가 기록된, 아주 높은 수준의 기술 보고서 묶음입니다. 인" +"간 실험 결과가 포함되어 있으며, \"승인됨\" 도장이 찍혀있습니다..." + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "이 뼛가루는 식물에 비료를 줄 때 쓰면 좋습니다." @@ -25300,12 +25583,12 @@ msgstr "" "니다." #: lang/json/json_items.py -#, fuzzy msgid "" "This burning magnesium flare is producing light. It will last for about a " "half hour before burning out." msgstr "" -"작은 청색광 막대기입니다. 약한 빛을 내고 있으며, 몇 시간 동안 지속됩니다." +"마그네슘 플레어로, 타오르면서 빛을 내고 있습니다. 다 타기까지 30분 정도 걸립" +"니다." #: lang/json/json_items.py msgid "" @@ -25410,6 +25693,8 @@ msgid "" "rotating its blade 90 degrees, transforming it into a deadly giant blade on " "the end of a stick." msgstr "" +"농기구를 개량하여 만든 전투용 대낫으로, 칼날의 각도를 90도 회전시켜 전투에 사" +"용할 수 있게 만들었습니다." #: lang/json/json_items.py msgid "" @@ -26592,6 +26877,8 @@ msgid "" "This is a slow-burning magnesium flare. Use it to strike the striker and " "light it. It will produce a bright light for about a half hour." msgstr "" +"느리게 타는 마그네슘 플레어입니다. 사용하면 점화부를 쳐서 점화시키며, 30분 정" +"도 밝은 빛을 뿜어냅니다." #: lang/json/json_items.py msgid "" @@ -26612,6 +26899,14 @@ msgstr "" "작은 성냥갑으로, 담배나 화염병 따위의 점화용으로 사용됩니다.\r\n" "근처의 탈 만한 물건에 불을 붙이는 용도로도 쓸 수 있습니다." +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" +"압축 공기를 사용해서 큰 소리를 내는, 작은 캔입니다. 위에 달린 버튼을 누르면 " +"큰 소리를 냅니다." + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -26731,9 +27026,8 @@ msgid "This is a spent glowstick. It is essentially trash." msgstr "작은 청색광 막대기입니다. 다 사용했기 때문에, 그냥 쓰레기입니다." #: lang/json/json_items.py -#, fuzzy msgid "This is a spent magnesium flare. It is essentially trash." -msgstr "작은 청색광 막대기입니다. 다 사용했기 때문에, 그냥 쓰레기입니다." +msgstr "다 사용한 마그네슘 플레어입니다. 쓰레기나 다름없습니다." #: lang/json/json_items.py msgid "" @@ -27081,6 +27375,8 @@ msgid "" "be a giant blade on the end of a stick, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"길게 자라난 풀을 벨 때 사용하는, 전통적인 농기구입니다. 끝부분에 큰 칼날이 붙" +"어있지만, 원래 목적이 아닌 다른 목적으로 사용하기에는 극히 힘듭니다." #: lang/json/json_items.py msgid "" @@ -27088,6 +27384,8 @@ msgid "" "be a massive curved blade on a handle, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"길게 자라난 풀을 벨 때 사용하는, 전통적인 농기구입니다. 끝부분에 칼날이 붙어" +"있지만, 원래 목적이 아닌 다른 목적으로 사용하기에는 힘듭니다." #: lang/json/json_items.py msgid "" @@ -27104,9 +27402,8 @@ msgid "" msgstr "의료용으로 만들어진, 적당한 크기의 면 조각입니다." #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "개밥입니다. 이상한 냄새가 나지만, 개들은 이 냄새마저도 좋아합니다." +msgstr "고양이를 위한 음식입니다. 이상한 냄새가 나지만, 고양이들은 좋아합니다." #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." @@ -27398,6 +27695,25 @@ msgstr "" "대전자기 수류탄의 핀을 뽑아 곧 작동하며, 일시적으로 근처 로봇의 통제권을 바" "꿔 자신의 편으로 만들 수 있습니다." +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" +"당신이 대피하기 이틀 전에 적힌 것으로 보이는, 새로운 화학물 공식이 적힌 종이 " +"묶음입니다. 군중 통제 촉매제...라는 것에 대한 자세한 설명과 제조법이 적혀있습" +"니다. 이건 대체..." + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" +"2주 전에 막 시작된 것으로 보이는, 새로운 화학품 제조 정보가 기록된 종이 묶음" +"입니다. 인간 실험 결과가 포함되어 있으며, \"승인됨\" 도장이 찍혀있습니다..." + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -27427,15 +27743,14 @@ msgstr "" "다)" #: lang/json/json_items.py -#, fuzzy msgid "" "This stout combat knife features a steel guard to protect the user's " "knuckles. The guard can also be used for striking or blocking, and the knife " "can also be used to butcher corpses." msgstr "" "튼튼한 전투용 단검으로, 공격할 때 손가락 관절을 보호하기 위해 강철 가드가 달" -"\r\n" -"려있습니다. 시체 해체에 사용할 수도 있습니다." +"려있습니다. 가드는 적을 타격할 때 쓰이기도 하며, 칼날은 시체 헤체에 사용할 수" +"도 있습니다." #: lang/json/json_items.py msgid "This yellow cornmeal is useful for baking." @@ -27547,15 +27862,15 @@ msgstr "" "해량이 줄어드는 것입니다." #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." msgstr "" -"숯을 사용해서 물을 정수하는 정수기입니다. 강에서 얻은 물에 들어있을 수 있는 " -"흙 등을 분리해냅니다. 사용하면 하나의 용기 안에 들어있는 물을 정수합니다." +"숯을 사용해서 물을 정수하는 정수기로, 강에서 얻은 물에 들어있을 수 있는 흙 등" +"을 분리해냅니다. 사용하면 하나의 용기 안에 들어있는 물을 정수합니다. 사용한 " +"후에는 다시 사용할 수 없지만, 분해해서 재활용할 수 있습니다." #: lang/json/json_items.py msgid "" @@ -27673,6 +27988,14 @@ msgstr "트랜지스터는 무엇인가?(book)" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "치즈가 흐르기 시작할 때, 크래프트의 면발 맛도 같이 흐릅니다." +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" +"악당들을 잡거나, 목장을 고치거나 (혹은 말 한 마리 없을지라도) 할 때 쓰는 모자" +"입니다." + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -27696,7 +28019,7 @@ msgstr "" #: lang/json/json_items.py msgid "X-Acto knife" -msgstr "엑스-액토 나이프(X-Acto Knife)" +msgstr "이그잭토 나이프(X-Acto Knife)" #: lang/json/json_items.py msgid "You can read it for the articles. Or not." @@ -27743,9 +28066,8 @@ msgid "active Granade" msgstr "수류탄-켜짐(grenade)" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "섬광탄-켜짐(flashbang)" +msgstr "사용 중인 플레어(active flare)" #: lang/json/json_items.py msgid "active flashbang" @@ -27799,6 +28121,10 @@ msgstr "개선형 통합 전원장치-켜짐(UPS)" msgid "adventure novel" msgstr "모험 소설(book)" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "알파 뮤타젠(alpha mutagen)" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "알루미늄 방망이(aluminium bat)" @@ -28292,9 +28618,8 @@ msgid "cabernet sauvignon" msgstr "카베르네 소비뇽(sauvignon)" #: lang/json/json_items.py -#, fuzzy msgid "caffeinated chewing gum" -msgstr "껌(chewing gum)" +msgstr "카페인 껌(caffeinated gum)" #: lang/json/json_items.py msgid "caffeine pills" @@ -28497,14 +28822,17 @@ msgid "chewing gum" msgstr "껌(chewing gum)" #: lang/json/json_items.py -#, fuzzy msgid "chewing tobacco" -msgstr "껌(chewing gum)" +msgstr "씹는 담배(chewing tobacco)" #: lang/json/json_items.py msgid "children's book" msgstr "아이들의 책(book)" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "키메라 뮤타젠(chimera mutagen)" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "키틴질 팔 보호구(chitin guards)" @@ -28661,6 +28989,10 @@ msgstr "합성궁(composite bow)" msgid "compound bow" msgstr "컴파운드 보우(compound bow)" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "압축 공기 경적(compressed air horn)" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "농축 산성액(concentrated acid)" @@ -28749,6 +29081,10 @@ msgstr "간이 침대(cot)" msgid "cotton hat" msgstr "무명 모자(cotton hat)" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "카우보이 모자(cowboy hat)" + #: lang/json/json_items.py msgid "crack" msgstr "크랙(crack)" @@ -28793,6 +29129,10 @@ msgstr "도가니(crucible)" msgid "crude sword" msgstr "수제 칼(crude sword)" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "곤봉(cudgel)" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "피난처 키트-손상됨(shelter kit)" @@ -28806,9 +29146,8 @@ msgid "darts" msgstr "다트(darts)" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "붉은 바닥" +msgstr "다 쓴 플레어(dead flare)" #: lang/json/json_items.py msgid "dead glowstick" @@ -29026,6 +29365,10 @@ msgstr "라면(fast noodles)" msgid "feather" msgstr "깃털(feather)" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "강자성 레일 라이플(rail rifle)" + #: lang/json/json_items.py msgid "fertilizer" msgstr "비료(fertilizer)" @@ -29115,14 +29458,12 @@ msgid "flannel jacket" msgstr "플란넬 상의(flannel jacket)" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "눈부심" +msgstr "플레어(flare)" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "눈부심" +msgstr "조명탄(flaregun)" #: lang/json/json_items.py msgid "flashbang" @@ -29246,7 +29587,7 @@ msgstr "프라이팬(frying pan)" #: lang/json/json_items.py msgid "fungal fighter sting" -msgstr "진균 싸움꾼의 가시(fungal sting)" +msgstr "진균 전사의 가시(fungal sting)" #: lang/json/json_items.py msgid "fungal seeds" @@ -29300,6 +29641,10 @@ msgstr "털가죽 핫 팬츠(fur hot pants)" msgid "fur kitty collar" msgstr "털가죽 고양이 목줄(kitty collar)" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "털가죽 샅바(fur loincloth)" + #: lang/json/json_items.py msgid "fur pants" msgstr "모피 바지(fur pants)" @@ -29400,6 +29745,10 @@ msgstr "속장갑(glove liners)" msgid "glowstick" msgstr "야광봉(glowstick)" +#: lang/json/json_items.py +msgid "go bag" +msgstr "생존배낭(go bag)" + #: lang/json/json_items.py msgid "gold" msgstr "황금(gold)" @@ -29464,6 +29813,10 @@ msgstr "망치(hammer)" msgid "hand press & die set" msgstr "탄약 수제작 도구(press & die set)" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "핸드랩(hand wraps)" + #: lang/json/json_items.py msgid "handheld game system" msgstr "휴대용 게임기(game system)" @@ -29604,6 +29957,10 @@ msgstr "홀로그램 사이트(holographic sight)" msgid "holster" msgstr "권총집(holster)" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "가정파괴자(homewrecker)" + #: lang/json/json_items.py msgid "honey comb" msgstr "벌집(honey comb)" @@ -29860,6 +30217,10 @@ msgstr "가죽 핫 팬츠(leather hot pants)" msgid "leather jacket" msgstr "가죽 외투(leather jacket)" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "가죽 샅바(leather loincloth)" + #: lang/json/json_items.py msgid "leather pants" msgstr "가죽 바지(leather pants)" @@ -29956,6 +30317,10 @@ msgstr "파충류 뮤타젠(lizard mutagen)" msgid "log" msgstr "통나무(log)" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "샅바(loincloth)" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "롱 아일랜드 아이스티(iced tea)" @@ -29981,9 +30346,8 @@ msgid "loose caltrops" msgstr "성긴 마름쇠(loose caltrops)" #: lang/json/json_items.py -#, fuzzy msgid "lowtop tennis shoes" -msgstr "광대 신발(clown shoes)" +msgstr "테니스 신발(tennis shoes)" #: lang/json/json_items.py msgid "lump of steel" @@ -30017,6 +30381,10 @@ msgstr "수제 깔때기(Makeshift funnel)" msgid "makeshift halberd" msgstr "수제 할버드(Makeshift Halberd)" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "수제 칼(makeshift knife)" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "수제 정글도(Makeshift Machete)" @@ -30089,6 +30457,10 @@ msgstr "의료용 거즈(medical gauze)" msgid "medical gloves" msgstr "의료용 장갑(medical gloves)" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "의약품 뮤타젠(medical mutagen)" + #: lang/json/json_items.py msgid "medical tape" msgstr "의료용 테이프(medical tape)" @@ -30265,6 +30637,10 @@ msgstr "못 박힌 판자(nail board)" msgid "nail gun" msgstr "네일 건(nail gun)" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "손톱 너클(nail knuckles)" + #: lang/json/json_items.py msgid "nail rifle" msgstr "네일 라이플(nail rifle)" @@ -30335,7 +30711,7 @@ msgstr "폭죽 다발-불붙음(firecrackers)" #: lang/json/json_items.py msgid "packed M72 LAW" -msgstr "M72 LAW-접음" +msgstr "접혀진 M72 LAW" #: lang/json/json_items.py msgid "pancakes" @@ -30495,7 +30871,7 @@ msgstr "식물 섬유(plant fibre)" #: lang/json/json_items.py msgid "plant food" -msgstr "식물 영양제(plant food)" +msgstr "plant food" #: lang/json/json_items.py msgid "plant marrow" @@ -30789,6 +31165,10 @@ msgstr "원시용 안경(reading glasses)" msgid "rebar" msgstr "철근(rebar)" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "철근 레일(rebar rail)" + #: lang/json/json_items.py msgid "recurve bow" msgstr "리커브 보우(recurve bow)" @@ -30915,7 +31295,7 @@ msgstr "럼(rum)" #: lang/json/json_items.py msgid "rum & cola" -msgstr "" +msgstr "럼&콜라(rum & cola)" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "saddle" @@ -31027,7 +31407,7 @@ msgstr "스크류드라이버(Screwdriver)" #: lang/json/json_items.py msgid "scythe" -msgstr "" +msgstr "대낫(scythe)" #: lang/json/json_items.py msgid "sealed 3-litre jar of kompot" @@ -31085,6 +31465,10 @@ msgstr "반짇고리(sewing kit)" msgid "sharpened metal arrow" msgstr "금속 화살-예리함(metal arrow)" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "뾰족한 철근(sharpened rebar)" + #: lang/json/json_items.py msgid "sheet" msgstr "시트(sheet)" @@ -31158,9 +31542,8 @@ msgid "shovel" msgstr "삽(shovel)" #: lang/json/json_items.py -#, fuzzy msgid "sickle" -msgstr "피클(pickle)" +msgstr "낫(sickle)" #: lang/json/json_items.py msgid "signal receiver" @@ -31224,7 +31607,7 @@ msgstr "새총(slingshot)" #: lang/json/json_items.py msgid "sm. cardboard box" -msgstr "작은 종이상자(box)" +msgstr "종이팩(box)" #: lang/json/json_items.py msgid "small LCD screen" @@ -31402,6 +31785,10 @@ msgstr "강철 너클(steel knuckles)" msgid "steel plating" msgstr "강철판(steel plating)" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "강철 레일(steel rail)" + #: lang/json/json_items.py msgid "steel spear" msgstr "강철 창(steel spear)" @@ -31467,9 +31854,8 @@ msgid "string - 6 in" msgstr "끈-15cm(string)" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "선글라스(sunglasses)" +msgstr "멋있는 선글라스(stylish sunglasses)" #: lang/json/json_items.py msgid "sugar" @@ -31480,9 +31866,8 @@ msgid "suit" msgstr "정장(suit)" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "드레스(dress)" +msgstr "여름용 원피스(sundress)" #: lang/json/json_items.py msgid "sunglasses" @@ -31565,9 +31950,8 @@ msgid "switchblade" msgstr "스위치블레이드(switchblade)" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "권총용 총검(pistol bayonet)" +msgstr "총검(sword bayonet)" #: lang/json/json_items.py msgid "syringe" @@ -31586,9 +31970,8 @@ msgid "tactical dump pouch" msgstr "전술용 주머니(tactical pouch)" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "전술 헬멧(tactical helmet)" +msgstr "전술용 풀 헬멧(full helmet)" #: lang/json/json_items.py msgid "tactical gloves" @@ -31639,9 +32022,8 @@ msgid "tea leaves" msgstr "찻잎(tea leaves)" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "무기" +msgstr "찻주전자(teapot)" #: lang/json/json_items.py msgid "teargas canister" @@ -31655,6 +32037,10 @@ msgstr "텔레포터(teleporter)" msgid "television" msgstr "텔레비전(television)" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "챙 넓은 카우보이 모자(ten-gallon hat)" + #: lang/json/json_items.py msgid "tent" msgstr "텐트(tent)" @@ -31737,7 +32123,7 @@ msgstr "응답기 회로(transponder circuit)" #: lang/json/json_items.py msgid "trench knife" -msgstr "참호용 단검(trench knife)" +msgstr "백병전용 단검(trench knife)" #: lang/json/json_items.py msgid "trenchcoat" @@ -31865,7 +32251,7 @@ msgstr "전쟁 소설(book)" #: lang/json/json_items.py msgid "war scythe" -msgstr "" +msgstr "전투용 대낫(war scythe)" #: lang/json/json_items.py msgid "wasp sting" @@ -31996,9 +32382,8 @@ msgid "wooden javelin" msgstr "나무 자벨린(wooden javelin)" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "나무 벽" +msgstr "목제 통파(wooden tonfa)" #: lang/json/json_items.py msgid "woods soup" @@ -32042,7 +32427,7 @@ msgstr "서양 호박(zucchini)" #: lang/json/json_items.py msgid "zweihänder" -msgstr "쯔바이핸더(zweihänder)" +msgstr "쯔바이핸더(zweihander)" #: lang/json/json_items.py msgid "Ō-yoroi" @@ -32228,6 +32613,19 @@ msgstr "" "에 완벽히 실패하고 말았다. 모든 개체들은 사후 소생을 일으켰다. 흥미롭게도, " "XE037은 피험체가 살아있는 상태에서는 완벽히 불활성화 하는 것 같다." +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" +"디온 박사의 연구 팀이 야심적인 뮤타젠 혼합물을 만들어내었다. PE065라고 불리" +"는 이 혼합물은 격렬한 변이성과 불안정성을 보이지만, 최소한 그는 이러한 변이들" +"이 효과적으로 XE037 감염의 확산을 감지할 수 있을 것이라고 제안했다. 우리는 구" +"체적인 실행 방안을 조사하기 시작했다." + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -32550,6 +32948,18 @@ msgstr "" "의 유사한 유전자를 가지고 있음이 밝혀졌다. 포탈 장치를 통해 시간 이동이 이루" "어진것 같지만, 보안대가 짐승을 죽이는 와중에 장치가 부숴지고 말았다." +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" +"화학 담당 부서가 안정화된 뮤타젠 혼합물을 만들었다. PE050은 전체적인 유전적 " +"강화를 보여주며, 부작용으로는 소화 능력의 저하가 주로 보여진다. 대규모의 신체" +"적 변화는 그다지 일어나지 않기 때문에, 군용이나 민간용으로 적절할 것으로 보인" +"다." + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -32561,6 +32971,19 @@ msgstr "" "니다. 실험쥐와 같이 작은 포유류들은 휴면기에 들어가기 전에 이러한 XE037의 임" "계질량을 얻지 못하였습니다. 그러나 큰 개 피험체는 얻었습니다." +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" +"이샤 박사의 연구 팀이 연구 끝에 특수한 형태의 뮤타젠을 만들어내었다. 이는 다" +"양한 질병에 대한 해결책이 될 수 있을 것으로 보인다. 테스트 결과 신체의 고통 " +"수준을 조절하고 면역 체계를 강화시키며 자연적인 재생력을 증가시키지만, 부작용" +"으로 보여지는 몇몇 신체적 행동들이 보고되었다." + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -32717,12 +33140,11 @@ msgstr "효과 중첩될 때마다 회피, 막기 +1" #: lang/json/json_martialarts.py msgid "+3 Bash/atk" -msgstr "" +msgstr "공격마다 타격 피해량 +3" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "공격속도 보너스" +msgstr "공격 속도 +4 누적" #: lang/json/json_martialarts.py msgid "" @@ -32738,22 +33160,20 @@ msgstr "" "다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "AKA \"drunken boxing,\" Zui Quan imitates the movement of a drunk to confuse " "the enemy. The turn after you successfully attack, you may dodge any number " "of attacks with no penalty." msgstr "" -"드렁큰 복싱으로도 알려진 취권은 술 취한 움직임을 흉내내서\n" -"적을 혼동시킵니다. 당신의 공격 이후 적으로부터 얼마든지\n" -"공격을 받더라도 아무런 패널티 없이 모두 회피할 수 있습니다." +"취권은 술의 효과로 인한 예측 불능의 움직임으로 적을 혼란시키는 무술입니다. 공" +"격을 성공적으로 적중시키면, 그 턴 동안 자신에게 가해지는 모든 공격을 패널티 " +"없이 회피할 수 있습니다." #: lang/json/json_martialarts.py newcharacter.cpp msgid "Aikido" msgstr "합기도" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "Aikido is a Japanese martial art focused on self-defense, while minimizing " "injury to the attacker. It uses defensive throws and disarms. Damage done " @@ -32779,9 +33199,8 @@ msgid "Attacks scale better with strength" msgstr "체력에 비례하여 공격이 강해짐" #: lang/json/json_martialarts.py -#, fuzzy msgid "Bonus damage from intelligence." -msgstr "당신은 더 똑똑해졌습니다. 지능 + 2" +msgstr "지능을 통한 추가 피해량" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Capoeira" @@ -32792,42 +33211,36 @@ msgid "Capoeira Tempo" msgstr "카포에이라 템포" #: lang/json/json_martialarts.py -#, fuzzy msgid "Centipede Kung Fu" -msgstr "지네" +msgstr "지네권" #: lang/json/json_martialarts.py msgid "Crane Kung Fu" -msgstr "" +msgstr "학권" #: lang/json/json_martialarts.py -#, fuzzy msgid "Crane Precision" -msgstr "Cranston" +msgstr "학의 정확성" #: lang/json/json_martialarts.py msgid "Damage bonus from dexterity at the cost of damage from strength." -msgstr "" +msgstr "피해를 줄 때, 일정 비율만큼 체력 대신 민첩성을 사용해서 피해량 계산" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "지능" +msgstr "용의 지혜" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Kung Fu" -msgstr "용" +msgstr "용권" #: lang/json/json_martialarts.py -#, fuzzy msgid "Drunk Dodging" -msgstr "회피" +msgstr "취권 회피" #: lang/json/json_martialarts.py -#, fuzzy msgid "Flat bonus to damage." -msgstr " 그러나 어떤 피해도 주지 못했다." +msgstr "피해량 추가" #: lang/json/json_martialarts.py msgid "Half damage to enemies" @@ -32835,7 +33248,7 @@ msgstr "적에게 데미지 절반만 줌" #: lang/json/json_martialarts.py msgid "Hundred-Hitter" -msgstr "" +msgstr "수백 번의 공격" #: lang/json/json_martialarts.py msgid "Immune to throws and knockdowns" @@ -32878,19 +33291,16 @@ msgid "Krav Maga" msgstr "크라브마가" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Kung Fu" -msgstr "표범" +msgstr "표범권" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Strategy" -msgstr "표범권" +msgstr "표범의 전략" #: lang/json/json_martialarts.py -#, fuzzy msgid "Lizard Kung Fu" -msgstr "도마뱀" +msgstr "도마뱀권" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Muay Thai" @@ -32920,109 +33330,99 @@ msgstr "그냥 주먹질과 발길질하는 방법입니다." #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" +"다섯 맹독권 중 하나입니다. 다음 안정화 버전에서 제대로 등장할 예정으로, 도마" +"뱀권은 벽을 타는 것에서 추가 능력을 얻습니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Centipede Style uses an onslaught of rapid " "strikes. Each attack you land reduces the cost of attacking by 4." msgstr "" -"극독파의 다섯 무공중 하나입니다. 지네권은 빠른 속도로 맹렬한 공격을 합니다. " -"매번 공격할 때마다 공격에 필요한 이동력을 4 줄여줍니다. 계속해서 누적이 가능" -"하지만, 한 대라도 맞는다면 초기화됩니다." +"다섯 맹독권 중 하나입니다. 지네권은 빠르고 끊임없는 공격에 주목하여, 한 자리" +"에서 공격을 반복할 때마다 공격 속도가 4씩 빨라집니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Scorpion Style is a mysterious art which " "uses pincer-like hands and a stinger kick. Critical hits should do massive " "damage and knock your target back, and we'll fix that as soon as we can." msgstr "" -"극독파의 다섯 무공중 하나입니다. 전갈권은 집게같은 손 기술과 독침 같은 발 기" -"술에 초점을 둔 신비한 무술입니다. 치명타에 성공하면 어마어마한 피해를 주면서 " -"상대를 뒤로 날려버립니다." +"다섯 맹독권 중 하나입니다. 전갈권은 팔과 다리로 찌르는 기술을 사용하는 신비" +"한 무술로, 치명타가 터질 경우 큰 피해를 주고 적을 밀어냅니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Toad Style will be immensely powerful " "through its immunity to nearly any weapon, once we get the connection " "rebuilt. Until then, best not meditate by pausing, though it used to give " "you armor proportional to your Intelligence and Perception." msgstr "" -"극독파의 다섯 무공 중 하나입니다. 매우 강력하고, 거의 대부분의 무기에 면역성" -"을 갖습니다. 한 턴 쉬는 것으로 명상이 가능하며, 이것을 통해 지능과 인지능력" -"에 비례해 일시적으로 방어력을 상승시킬 수 있습니다." +"다섯 맹독권 중 하나입니다. 두꺼비권은 거의 모든 공격으로부터 몸을 보호하는 기" +"술로, 한 자리에 머무를 경우 지각력과 지능에 따라 추가적인 방어력을 얻습니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Viper Style has a uniqe three-part combo, " "ehich is supposed to initiate on a critical strike, then chain into piercing " "damage and a two-handed Viper Strike." msgstr "" -"극독파의 다섯 무공중 하나입니다. 독사권은 특별한 3단 콤보를 사용합니다. 치명" -"타에 성공하면 발동되고, 두 번째 타격은 손을 뾰족하게 만들어 관통 피해를 주" -"며, 세 번째는 양손으로 파괴적인 일격을 날립니다." +"다섯 맹독권 중 하나입니다. 살무사권은 3번에 걸쳐 이루어지는 특이한 타격법을 " +"가지고 있으며, 치명타로부터 이어지는 관통 피해 타격과 양손 공격이 그 특징입니" +"다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Crane uses intricate hand " "techniques and jumping dodges. Dexterity determines the majority of your " "damage, rather than Strength; you also receive a dodge bonus the turn after " "moving a tile." msgstr "" -"소림사의 다섯 동물을 본딴 무술 중 하나입니다. 학권은 복잡한 손 기술과\n" -"점프 회피를 사용합니다. 체력이 아닌 민첩성이 피해량을 결정합니다.\n" -"한 타일을 움직이면 해당 턴에 회피 보너스를 받습니다." +"소림사의 다섯 동물 권법 중 하나입니다. 학권은 복잡한 손놀림과 보법을 가진 권" +"법으로, 체력보다 민첩성에 기반한 피해를 줍니다. 또한 한 칸 이동하는 것으로 회" +"피 보너스를 받을 수 있습니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Dragon uses fluid movements and " "hard strikes. Intelligence improves your accuracy and damage dealt, as does " "moving." msgstr "" -"소림사의 다섯 동물을 본딴 무술 중 하나입니다. 용권은 유연한 움직임과\n" -"강력한 공격을 사용합니다. 지능은 공격기회와 공격력에 보너스를 줍니다.\n" -"한 타일을 움직이면 한 턴동안 공격력을 더욱 상승시켜 줍니다." +"소림사의 다섯 동물 권법 중 하나입니다. 용권은 흐르는 듯한 움직임과 어려운 타" +"격법을 가지고 있어, 지능이 정확도와 피해량에 영향을 줍니다. 이동하는 것 또한 " +"정확도와 피해량에 영향을 줍니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Leopard focuses on rapid, " "strategically planned strikes. Perception and Inteligence both boost " "accuracy, and moving further boosts your accuracy." msgstr "" -"소림사의 다섯 동물을 본딴 무술 중 하나입니다. 표권은 빠르고 전술적인\n" -"공격에 초점을 둡니다. 인지능력과 지능은 정확도에 추가 보너스를 줍니다.\n" -"또한 한 타일을 움직이면 한 턴 동안 보너스를 받습니다" +"소림사의 다섯 동물 권법 중 하나입니다. 표범권은 빠르고 전략에 기반한 공격에 " +"집중하여, 지각력과 지능이 정확도에 영향을 줍니다. 또한 이동을 통해 정확도 보" +"너스를 추가로 받을 수 있습니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Snake focuses on sinuous " "movement and precision strikes. Your Perception iproves yur accuracy and " "your damage." msgstr "" -"소림사의 다섯 동물을 본딴 무술 중 하나입니다. 사권은 구불구불한 동작과\n" -"정확한 공격을 사용합니다. 지각력이 높으면 공격력과 공격 명중률에 보너스를 받" -"게 됩니다." +"소림사의 다섯 동물 권법 중 하나입니다. 사권은 물결 모양의 움직임과 정확한 공" +"격에 주목하여, 지각력이 정확도와 피해량에 영향을 줍니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Tiger focuses on relentless " "attacks above all else. Your Strength determines your accuracy, and your " "attacks do increasing damage as you continue attacking." msgstr "" -"소림사의 다섯 동물을 본딴 무술 중 하나입니다. 호권은 무엇보다도\n" -"냉혹한 공격에 초점을 둡니다. 민첩성이 아닌 체력이 공격 판정을\n" -"결정합니다. 지속적으로 공격을 퍼부을수록 보너스가 축적됩니다." +"소림사의 다섯 동물 권법 중 하나입니다. 호권은 무엇보다도 연속적이고 가차없는 " +"공격에 초점을 맞춰, 체력이 정확도에 영향을 미칩니다. 또한 계속적인 공격을 통" +"해 피해량 보너스를 받을 수 있습니다." #: lang/json/json_martialarts.py msgid "" @@ -33036,11 +33436,11 @@ msgstr "" #: lang/json/json_martialarts.py msgid "Perception and intelligence provide a bonus to block." -msgstr "" +msgstr "지각력과 지능에 따라 방어율 상승" #: lang/json/json_martialarts.py msgid "Perception and intelligence provide a bonus to hit." -msgstr "" +msgstr "지각력과 지능을 통한 추가 명중률" #: lang/json/json_martialarts.py msgid "Perception decreases damage when blocking" @@ -33048,17 +33448,15 @@ msgstr "지각력에 비례하여, 막기 시 데미지 감소" #: lang/json/json_martialarts.py msgid "Perception provides a bonus to hit." -msgstr "" +msgstr "지각력을 통한 명중률 보너스" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Kung Fu" -msgstr "전갈" +msgstr "전갈권" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Venom" -msgstr "전갈" +msgstr "전갈의 독" #: lang/json/json_martialarts.py msgid "Silent melee attacks" @@ -33070,12 +33468,11 @@ msgstr "맨손 공격력 약간 증가" #: lang/json/json_martialarts.py msgid "Snake Kung Fu" -msgstr "" +msgstr "사권" #: lang/json/json_martialarts.py -#, fuzzy msgid "Snake Sight" -msgstr "레이저 사이트(laser sight)" +msgstr "뱀의 눈" #: lang/json/json_martialarts.py msgid "Strength decreases damage when blocking" @@ -33083,7 +33480,7 @@ msgstr "체력에 비례해서 막기 시 추가로 데미지 감소" #: lang/json/json_martialarts.py msgid "Strength provides additional damage bonus." -msgstr "" +msgstr "체력에 의한 피해량 보너스 증가" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Taekwondo" @@ -33115,35 +33512,32 @@ msgstr "" "력에 비례하여 효율이 높아집니다." #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "호랑이" +msgstr "호랑이의 분노" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" -msgstr "" +msgstr "호권" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "체력" +msgstr "호랑이의 힘" #: lang/json/json_martialarts.py -#, fuzzy msgid "Toad Armor" -msgstr "방어구 정렬" +msgstr "두꺼비의 자세" #: lang/json/json_martialarts.py msgid "Toad Kung Fu" -msgstr "" +msgstr "두꺼비권" #: lang/json/json_martialarts.py msgid "Unlimited dodges after successful hit" -msgstr "" +msgstr "공격 적중시 무한 회피" #: lang/json/json_martialarts.py msgid "Viper Kung Fu" -msgstr "" +msgstr "살무사권" #: lang/json/json_martialarts.py msgid "Zui Quan" @@ -34275,6 +34669,8 @@ msgid "" "A black blob of viscous goo, oozing across the ground like a glob of living " "oil." msgstr "" +"끈적이는 액체를 몸체로 가지는 검은 슬라임입니다. 기름 덩어리가 땅을 기어가는 " +"것처럼 생겼습니다." #: lang/json/json_monsters.py msgid "" @@ -34289,6 +34685,8 @@ msgid "" "A blood-sucking fly with a needle-like proboscis. Its bite leaves behind " "itchy welts and can easily spread disease." msgstr "" +"바늘과 같은 주둥이를 가진 흡혈 모기입니다. 물리면 질병에 감염되기 쉬워지며, " +"간지러워집니다." #: lang/json/json_monsters.py msgid "" @@ -34303,12 +34701,16 @@ msgid "" "A conglomeration of human parts fused together in a horrible mishmash of " "function, slowly dragging its eldritch body across the ground." msgstr "" +"신체 일부분이 아주 잘못된 형태로 합쳐진 복합체로, 그 끔찍한 몸을 가지고 서서" +"히 기어다니고 있습니다." #: lang/json/json_monsters.py msgid "" "A crazed individual, the bloody scars on the side of its shaved head suggest " "some sort of partial lobotomy" msgstr "" +"맨들맨들한 머리 옆에 피가 나오는 구멍이 많이 뚫린, 정신이 나간 인간입니다. 뇌" +"엽 절리술 중 일부는 부분적으로만 뇌를 제거해버린다고 합니다." #: lang/json/json_monsters.py msgid "" @@ -34316,6 +34718,8 @@ msgid "" "covered stalk supporting a flowery head with a paralyzing sting concealed " "within." msgstr "" +"머리 너머까지 자랐으며, 두꺼운 나무껍질로 몸을 감싼 식물입니다. 꽃을 닮은 머" +"리에는 적을 마비시키는 가시가 들어있습니다." #: lang/json/json_monsters.py msgid "" @@ -34339,6 +34743,8 @@ msgid "" "chained to the altar, the putrescent flays of its peeled skin quivering like " "so much flotsam upon a murky pond." msgstr "" +"한때는 살아있었지만 오래 전에 고문받아 죽은 인간의 육체로, 늪지대의 표류물이 " +"몸에 가득 붙어있습니다." #: lang/json/json_monsters.py msgid "" @@ -34358,6 +34764,7 @@ msgstr "" msgid "" "A dog's body with a mass of ropy, black tentacles reaching out from its head." msgstr "" +"개의 몸을 가지고 있지만, 몸에서부터 얼굴까지 검은 촉수가 자라나있습니다." #: lang/json/json_monsters.py msgid "" @@ -34373,6 +34780,8 @@ msgid "" "A domesticated mongrel of the canine persuasion. In the absence of human " "society, it has turned feral. You feel a sudden urge to destroy it." msgstr "" +"길들여졌던 잡종견입니다. 인간 사회가 무너지면서, 야생화되었습니다. 없애버리" +"고 싶은 충동이 갑자기 드는 것 같습니다." #: lang/json/json_monsters.py msgid "" @@ -34387,12 +34796,16 @@ msgid "" "A drooped, quivering plant with a thick stalk adorned by a purple flower. " "Its petals are closed, and pulsate ominously." msgstr "" +"자주색 꽃이 달려있는 두꺼운 줄기입니다. 꽃은 아직 피지 않았지만, 기분 나쁘게 " +"흔들리고 있습니다." #: lang/json/json_monsters.py msgid "" "A fairly large spider which tracks and catches prey through agility and " "stealth. Its bite can be irritating even to large animals." msgstr "" +"꽤 큰 거미로, 그 민첩성과 조용함으로 사냥감을 추적하고 사냥합니다. 이 거미의 " +"공격은 대형 동물들에게도 위협적입니다." #: lang/json/json_monsters.py msgid "" @@ -34408,19 +34821,21 @@ msgid "" "A fat white grub as big as a squirrel, with a pair of large, spadelike " "mandibles." msgstr "" +"다람쥐 크기의 뚱뚱한 흰색 애벌레입니다. 입에 달린 턱은 싸우기보다는 땅을파는" +"데 더 적합해 보입니다." #: lang/json/json_monsters.py msgid "" "A ferocious mutant dragonfly as big as a cat, darting through the air with a " "cluster of fangs for a mouth." -msgstr "" +msgstr "고양이 수준으로 커진 변이 잠자리로, 입에 달린 이빨들이 위협적입니다." #: lang/json/json_monsters.py msgid "" "A flexous monstrosity seeming as a giant crab covered in writhing antennae, " "clawform tentacles and star-shaped growths, with a head like the insides of " "a fish but for its dire utterance." -msgstr "" +msgstr "거대한 게에 비틀린 안테나가 달린 모습을 한, 끔찍한 괴물입니다." #: lang/json/json_monsters.py msgid "" @@ -34436,6 +34851,8 @@ msgid "" "from its thorned and leathery exterior, and it moves about faster than the " "larger fungaloids." msgstr "" +"1미터 정도 길이의 진균체 덩굴손입니다. 가죽 질감의 껍질에 가시로 덮힌 외형을 " +"가지고 있으며, 완전히 자란 진균체보다 빨리 움직입니다." #: lang/json/json_monsters.py msgid "" @@ -34443,24 +34860,32 @@ msgid "" "spheroid robot hovers above the ground, silent witness to the carnage and " "mayhem around it." msgstr "" +"고품질 카메라 렌즈가 달린 융합 유도 UAV 로봇입니다. 이 타원형 로봇은 지면을 " +"떠다니며, 이곳에 일어난 대격변의 조용한 증인이 되고 있습니다." #: lang/json/json_monsters.py msgid "" "A giant mutated black widow spider. A highly venomous nightmare come to " "life." msgstr "" +"거대 검은과부거미입니다. 악몽이 맹독을 가진 채 생명을 얻는다면 이런 모습일 것" +"입니다." #: lang/json/json_monsters.py msgid "" "A giant mutated grass spider, it waits for prey to become ensnared in the " "vast webs that it weaves between the trees." msgstr "" +"거대한 변종 거미로, 나무 사이에 거미줄을 친 다음 사냥감을 기다리는 습성을 가" +"지고 있습니다." #: lang/json/json_monsters.py msgid "" "A giant spider with big forelegs and two pairs of inquisitive-looking eyes. " "It can leap quite quickly, even into the treetops." msgstr "" +"큰 다리와 두 쌍의 번뜩이는 눈을 가진 거대한 거미로, 빠르게 뛰어다니며 단번에 " +"나무 꼭대기까지도 뛰어오를 수 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34475,12 +34900,17 @@ msgid "" "A gigantic spider with a bulbous thorax. It digs a deep underground burrow " "that serves as a pit to trap unwary prey." msgstr "" +"둥글납작한 흉부를 가진 거대거미입니다. 땅 밑에 깊은 굴을 판 뒤, 그곳에 숨어 " +"부주의한 희생양을 기다립니다." #: lang/json/json_monsters.py msgid "" "A hellish, vaguely humanoid horror, two stories tall. Its face is " "grotesquely stretched out, its limbs deformed to unrecognizable outgrowths." msgstr "" +"약 15 미터 정도의 키를 가지고 있으며, 인간을 닮았지만 그야말로 공포스러운 존" +"재입니다. 얼굴은 괴기스럽게 늘어나있으며, 사지는 촉수처럼 길게 늘어져 흐느적" +"거립니다." #: lang/json/json_monsters.py msgid "" @@ -34503,6 +34933,8 @@ msgid "" "lined with dagger-like teeth, and its flesh is slick with bubbling blue " "slime." msgstr "" +"지하 깊은 곳에서 발견되는 거대 변종 벌레입니다. 입에는 단검과 같은 이빨이 가" +"득하며, 살갗에서는 푸른 점액질이 거품을 일으키며 흐르고 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34530,6 +34962,8 @@ msgid "" "hair impossibly twisted. It clambors around swiftly, making awful " "screeching sounds." msgstr "" +"사람의 형상을 하고 있지만, 관절, 목, 머리카락이 말도 안되게 뒤틀려있습니다. " +"주변을 빠르게 움직이며, 끔찍한 소리를 내고 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34555,24 +34989,32 @@ msgid "" "Armed with two close-range tazers, it can skate across the ground with great " "speed." msgstr "" +"곤충에 비슷하게 설계된 로봇으로, 작은 개 정도의 크기를 하고 있습니다. 방범용" +"으로 설계되었으며, 두 개의 테이저로 무장한 채 빠르게 땅을 달립니다." #: lang/json/json_monsters.py msgid "" "A knot of tubular roots, flowing with sap and beating like a heart. Strands " "of vascular tissue reach out to the surrounding root walls." msgstr "" +"심장처럼 얽혀있는 뿌리입니다. 수액이 흐르고 있으며, 느리게 뛰면서 주변을 둘러" +"싼 벽에 수액을 보내고 있습니다." #: lang/json/json_monsters.py msgid "" "A large and colorful game bird native to the forests of North America. Its " "head and beak are covered in fleshy accretions." msgstr "" +"크고 화려한 조류로, 북아메리카의 숲에서 주로 서식합니다. 머리와 부리 부분에 " +"살집이 붙어있습니다." #: lang/json/json_monsters.py msgid "" "A large mutant variety of carp. It has shimmering green scales and a mouth " "lined with three jagged rows of razor-sharp teeth." msgstr "" +"잉어가 변이된, 큰 개체입니다. 반짝이는 초록색 비늘과 세 겹으로 이루어진 날카" +"로운 이빨을 가지고 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34589,6 +35031,8 @@ msgid "" "but leaps very quickly, appearing to move instantaneously from one spot to " "another." msgstr "" +"가늘고 긴 다리를 가진, 작은 거미입니다. 거미줄을 딱히 만들지는 않지만, 아주 " +"빠르게 뛰어다니기 때문에 거의 순간이동 하는 것처럼 보입니다." #: lang/json/json_monsters.py msgid "" @@ -34596,22 +35040,27 @@ msgid "" "dramatically shifts and changes from moment to moment, although its gigantic " "eyes and teeth are always prominent." msgstr "" +"사람 크기의 벌레로, 박쥐를 닮은 날개를 가지고 있습니다. 매 순간 형태가 바뀌" +"고 있지만, 거대한 눈과 이빨만은 유지되고 있습니다." #: lang/json/json_monsters.py msgid "A mass of spores the size of a balled fist, wafting around in the air." -msgstr "" +msgstr "주먹 크기 정도의 성긴 포자입니다. 바람에 흩날리고 있습니다." #: lang/json/json_monsters.py msgid "" "A meter-long centipede with a menacing pair of pincers, moving swiftly on " "dozens of spindly legs." msgstr "" +"길이가 1미터에 가까운 거대 지네로, 수십 개의 다리를 가지고 빠르게 움직입니다." #: lang/json/json_monsters.py msgid "" "A midsized spider with a bulbous thorax. It creates a subterranean nest and " "lies in wait for prey to draw close enough for capture." msgstr "" +"중간 크기의 거미로, 둥글납작한 흉부를 가지고 있습니다. 땅 밑에 둥지를 만들" +"고, 그곳에 누워 사냥감이 가까이 오는 것을 기다립니다." #: lang/json/json_monsters.py msgid "" @@ -34641,24 +35090,32 @@ msgid "" "A mutated bullfrog taller than you are. It stares with amber eyes as it " "considers the easiest way to swallow you whole." msgstr "" +"사람보다 더 거대한 변종 황소개구리입니다. 당신을 먹잇감으로 보고 있는 것 같습" +"니다." #: lang/json/json_monsters.py msgid "" "A mutated leopard slug, as wide as a golf cart. Venom dripping from its " "fanged maw, it slithers ahead slowly, leaving a trail of glistening slime." msgstr "" +"변이된 달팽이로, 골프 카트만큼 거대합니다. 입에서는 독액이 흘러내리고 있으" +"며, 느리게 지나가는 길에는 슬라임의 흔적이 생겨납니다." #: lang/json/json_monsters.py msgid "" "A mutated wasp nearly the size of a cat, with a barbed ovipositor extruding " "from the abdomen." msgstr "" +"고양이 크기의 변이된 말벌입니다. 벌침이 있어야 할 자리에 커다란 산란관이 달려" +"있습니다." #: lang/json/json_monsters.py msgid "" "A pale hairless man with an impressive athletic physique. Its lidless eyes " "are totally black, and seeping with blood." msgstr "" +"창백한 대머리 남성으로, 운동선수를 연상시키는 육체가 인상적입니다. 눈꺼풀 없" +"는 눈은 완전히 검고, 피가 스며들어 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34666,6 +35123,9 @@ msgid "" "Spores are periodically expelled from its gills, and a few tendrils extend " "from the base, allowing mobility and some basic means of defense." msgstr "" +"창백한 하얀색의 진균체 더미입니다. 고깃덩이같은 회색 줄기가 맨 위의 봉오리를 " +"받치고 있으며, 몇개의 덩굴손이 중심에서 뻗어나와 있습니다. 이걸로 움직이고 공" +"격을 하는 것 같습니다." #: lang/json/json_monsters.py msgid "" @@ -34673,11 +35133,14 @@ msgid "" "petals surrounded by a haze of spores, and two thick barbed vines stick out " "from the stems like wary harpoons." msgstr "" +"아주 큰 트리피드로, 극히 흉악스럽게 생긴 가시와 두꺼운 껍질, 붉은 꽃잎을 가지" +"고 있습니다. 움직이면 몸에서 식물 조각들이 떨어지는데, 조각들은 떨어지자마자 " +"뿌리를 내립니다." #: lang/json/json_monsters.py msgid "" "A predatory segmented arthropod with dozens of legs and a venomous bite." -msgstr "" +msgstr "수십 개의 다리와 독성 이빨을 가진 절지동물입니다." #: lang/json/json_monsters.py msgid "" @@ -34693,12 +35156,16 @@ msgid "" "fused together in this aberration of flesh. The eyes of all the heads dart " "about rapidly and the mouths form a chorus of groaning screams." msgstr "" +"썩어가는 인간과 동물 부위를 합쳐놓은 살덩이 골렘입니다. 몸에 붙어있는 눈이 빠" +"르게 움직이고 있으며, 입에선 비명과 신음이 흘러나옵니다." #: lang/json/json_monsters.py msgid "" "A relatively humanoid mutant with purple hair and a grapefruit-sized " "bloodshot eye." msgstr "" +"보라색 털과 과일 크기의 새빨간 눈을 가진 돌연변이입니다. 제법 사람처럼 생겼습" +"니다." #: lang/json/json_monsters.py msgid "" @@ -34731,16 +35198,16 @@ msgid "" "occassionally push their way out of the oily mass and look around." msgstr "" "달팽이를 닮은 생명체로, 2.5m의 길이에 냉장고만한 두께를 가졌으며 검게 번들거" -"\r\n" -"리는 몸에서는 지나간 길을 따라 점액이 흘러내리고 있습니다. 그 눈은 가끔 자신" -"\r\n" -"이 지나오며 남긴 점액을 보면서 주변을 둘러봅니다." +"리는 몸에서 점액이 흘러나오고 있습니다. 가끔 자신이 지나오며 남긴 점액을 돌아" +"봅니다." #: lang/json/json_monsters.py msgid "" "A small black blob of viscous goo, oozing across the ground like a glob of " "living oil." msgstr "" +"끈적이는 액체를 몸체로 가지는, 작고 검은 슬라임입니다. 기름 덩어리가 땅을 기" +"어가는 것처럼 생겼습니다." #: lang/json/json_monsters.py msgid "" @@ -34767,6 +35234,8 @@ msgid "" "and facial markings. It is resourceful and agile enough to open sealed " "containers with its paws." msgstr "" +"북아메리카 출신의 작은 포유류로, 날렵한 발과 얼굴의 문양이 특이한 점입니다. " +"닫힌 상자를 열 수 있을 정도로 날렵합니다." #: lang/json/json_monsters.py msgid "" @@ -34781,6 +35250,8 @@ msgid "" "A small triffid, only a few feet tall. It has not yet developed bark, but " "its sting is still sharp and deadly." msgstr "" +"어린 트리피드로, 아직 1 미터 정도밖에 자라지 않았습니다. 껍질이 자라지 않았지" +"만, 가시는 여전히 날카롭고 위협적입니다." #: lang/json/json_monsters.py msgid "" @@ -34804,6 +35275,8 @@ msgid "" "A snake-like, segmented robot built to tunnel into the ground and detonate " "landmines." msgstr "" +"뱀을 닮은 다관절 로봇으로, 터널을 만들고 지뢰를 제거하기 위해 만들어진 로봇입" +"니다." #: lang/json/json_monsters.py msgid "" @@ -34822,6 +35295,8 @@ msgid "" "A stout woody plant that can dig through the ground and flick spines from " "its branches. The thorns carry a fungicidal compound with paralytic effects." msgstr "" +"땅을 파고 다닐 수 있는 나무 생명체로, 가시를 품고 있습니다. 가시는 진균 제거 " +"성분과 함께 마비 효과를 가지고 있습니다." #: lang/json/json_monsters.py msgid "A strange moving darkness, bringing with it the softest of whispers." @@ -34832,21 +35307,26 @@ msgid "" "A tall and slender man lacking skin and any normalcy of countenance. Wings " "of muscle curl forth from its back and a third eye dominates the forehead." msgstr "" +"호리호리하지만 공포스러운 이 거대한 남자는 피부가 없는데도 전혀 문제가 없는 " +"것 같아보입니다. 등에는 근육으로 이루어진 날개가 뻗어나와 있고, 이마에는 제 3" +"의 눈이 달려있습니다." #: lang/json/json_monsters.py msgid "" "A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all " "directions." msgstr "" +"땅속에 뿌리를 내린 두꺼운 줄기입니다. 모든 방향으로 빠르게, 가시로 덮힌 줄기" +"가 자라고 있습니다." #: lang/json/json_monsters.py msgid "" "A thin-bodied insectoid predator with a large wingspan and big compound eyes." -msgstr "" +msgstr "큰 날개와 복안을 가진, 얇은 몸뚱아리를 가진 곤충입니다." #: lang/json/json_monsters.py msgid "A thorny vine, twisting wildly as it grows with incredible speed." -msgstr "" +msgstr "가시달린 줄기로, 엄청난 속도로 자라나고 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34871,6 +35351,8 @@ msgid "" "A towering swarm of mutated rats, their tails knotted together in a filthy " "mass. A foetid stench flows from its filthy presence." msgstr "" +"수많은 변이된 쥐가 모인 무리이며, 꼬리 끝이 이상하게 묶여있는 것 같습니다. 몸" +"에서 악취가 나고 있습니다." #: lang/json/json_monsters.py msgid "A translucent black snake, long and fearsome looking." @@ -34884,7 +35366,6 @@ msgstr "" "작은 개 크기의 거대한 파리로, 끊임없는 날개짓 소리도 그에 맞게 커졌습니다." #: lang/json/json_monsters.py -#, fuzzy msgid "" "A twisted mockery of the human form, emaciated, with jet black skin and " "glowing red eyes. It is somehow painful to look at, awakening fears deep " @@ -34899,12 +35380,15 @@ msgstr "" msgid "" "A twisting spot in the air, with some kind of morphing mass at its center." msgstr "" +"대기 중에 떠있는 소용돌이로, 중앙에는 무언가 꾸물거리는 덩어리가 있습니다." #: lang/json/json_monsters.py msgid "" "A veritable wall of fungus, grown as a natural defense by the fungal spire. " "New spores erupt from the surface every few seconds." msgstr "" +"진균체가 모여서 만들어진, 제대로 된 벽입니다. 진균체 나선을 막는 자연 방어벽" +"으로 자란 것 같습니다. 몇 초마다 새로운 포자가 생겨나고 있습니다." #: lang/json/json_monsters.py msgid "A weird mass of immobile pink goo. It seems to breathe." @@ -34917,6 +35401,8 @@ msgid "" "A wolf spider mutated to about thirty times its normal size, it moves " "quickly and aggresively to catch and consume prey." msgstr "" +"보통 거미보다 30배는 더 큰 늑대거미입니다. 빠르게 움직이며, 사냥감을 잡아먹습" +"니다." #: lang/json/json_monsters.py msgid "" @@ -34940,18 +35426,20 @@ msgid "" "underground life. It swarms beneath the ground and is named for its habit " "of infesting sewer lines." msgstr "" +"호전적인 변종 지렁이뱀으로, 지하에서의 오랜 삶 때문에 창백한 노란색 피부를 가" +"지고 있습니다." #: lang/json/json_monsters.py msgid "" "An amorphous black creature, detaching and sprouting tentacles without any " "apparent pause." -msgstr "" +msgstr "무정형의 검은 생명체로, 이리저리 촉수가 자라나있습니다." #: lang/json/json_monsters.py msgid "" "An amorphous mound of twisting black flesh that flits through the air at " "incredible speeds." -msgstr "" +msgstr "무정형의 뒤틀린 검은 살덩이로, 엄청난 속도로 공중을 떠다니고 있습니다." #: lang/json/json_monsters.py msgid "" @@ -34959,6 +35447,8 @@ msgid "" "speed. The tangle is thick enough that the center from which they grow is " "concealed." msgstr "" +"큰 줄기처럼 보이지만, 놀랄만한 속도로 이동하고 있습니다. 너무 두껍게 얽혀있어" +"서, 중간에 뭐가 있는지 보이지 않습니다." #: lang/json/json_monsters.py msgid "" @@ -34973,18 +35463,22 @@ msgid "" "An enormous fleshy snail, with an oddly human face. The eyestalks protrude " "from where the eyes should be." msgstr "" +"이상하게도 사람의 얼굴을 가졌으며, 거대한 살덩어리로 이루어진 달팽이입니다. " +"눈구멍에는 있어야 할 눈이 보이지 않습니다." #: lang/json/json_monsters.py msgid "" "An enormous fungal spire, towering over the ground. It pulsates slowly, " "continuously growing new defenses." msgstr "" +"거대한 나선 형태의 진균체입니다. 9미터 정도의 높이를 가지고 있으며, 느리게 떨" +"리고 있습니다. 지속적으로 새로운 껍질이 자라고 있습니다." #: lang/json/json_monsters.py msgid "" "An enormous mutant mosquito, fluttering erratically, its face dominated by a " "long, spear-tipped proboscis." -msgstr "" +msgstr "거대한 변이 모기로, 주둥이가 거의 창 수준으로 거대합니다." #: lang/json/json_monsters.py msgid "" @@ -35026,6 +35520,8 @@ msgid "" "An infamous spider with a characteristic red hourglass marking on its black " "carapace, known for its highly toxic bite." msgstr "" +"갑각의 붉은 모래시계 문양이 특징인, 악명 높은 거미입니다. 그 맹독으로도 유명" +"합니다." #: lang/json/json_monsters.py msgid "" @@ -35041,6 +35537,7 @@ msgid "" "Automated anti-personnel drone, a fist-sized robot surrounded by whirring " "blades." msgstr "" +"대인용 자동 드론으로, 윙윙 돌아가는 칼날이 장착된 주먹 크기의 로봇입니다." #: lang/json/json_monsters.py msgid "" @@ -35048,6 +35545,9 @@ msgid "" "hungry look in it's eyes. You'd be hard pressed to not feel like you were " "killing an actual child by putting it down." msgstr "" +"어린이 형태의 생명체로, 눈에서 배고픔이 보이는 것을 제외하면 진짜 어린이와 거" +"의 똑같이 생겼습니다. 좀비이긴 하지만, 진짜 어린이를 죽이는 듯한 느낌을 억누" +"르기 힘듭니다." #: lang/json/json_monsters.py msgid "" @@ -35101,7 +35601,6 @@ msgstr "" "어다니는 진균 덩어리에 가까운 생명체입니다." #: lang/json/json_monsters.py -#, fuzzy msgid "" "Once human, its features have tightened, its lips pulled back into an " "unnatural grin, revealing rows of blackened teeth beneath its large, " @@ -35109,9 +35608,9 @@ msgid "" "controlled. A feeling of danger permeates the air around it, and the light " "that falls on it somehow harsher and more glaring." msgstr "" -"한때는 인간이었지만, 입술은 부자연스럽게 웃고 있으며 크고 검은 이빨은 튀어나" -"왔고 눈은 날카롭습니다. 똑바로 몸을 세운 채 절도있는 걸음걸이를 보이며, 주변" -"의 공기는 한층 더 위험해보입니다." +"한때는 인간이었던 형체로, 입술은 부자연스럽게 웃고 있으며, 크고 검은 이빨은 " +"튀어나왔고, 눈은 날카롭습니다. 똑바로 몸을 세운 채 절도있는 걸음걸이를 보이" +"며, 주변의 공기에서부터 위험이 느껴집니다." #: lang/json/json_monsters.py msgid "" @@ -35120,6 +35619,9 @@ msgid "" "it maintains its programmed pursuit of law and order, propelled on a trio of " "omni wheels." msgstr "" +"문명의 붕괴가 일어나기 얼마 전에 많이 사용되기 시작한 법률 집행용 무장 로봇 " +"중 하나로, 다른 로봇들처럼 태양광으로 작동합니다. 프로그램된 규칙에 따라 움직" +"이며, 세 개의 바퀴를 통해 움직입니다." #: lang/json/json_monsters.py msgid "" @@ -35158,6 +35660,8 @@ msgid "" "The American bullfrog, in its natural habitat. It feeds on insects, mice, " "lizards and any other living thing it can stuff down its gullet." msgstr "" +"미국의 황소개구리로, 곤충이나 쥐, 도마뱀 등 먹을 수 있는 것은 죄다 먹어치우" +"는 개구리입니다." #: lang/json/json_monsters.py msgid "" @@ -35174,6 +35678,8 @@ msgid "" "The C.H.U.D. or Cannibalistic Humanoid Underground Dweller. A human being " "turned pale and mad from years of underground isolation." msgstr "" +"지하에 사는 식인 생명체입니다. 한때는 인간이었지만, 지하철에서 몇년동안 있으" +"면서 창백해지고 미쳐버렸습니다." #: lang/json/json_monsters.py msgid "" @@ -35206,6 +35712,8 @@ msgid "" "The Ford Sanitron, a utility robot designed for cleaning up waste material " "in hazardous conditions." msgstr "" +"다용도 로봇인 Ford Sanitron 모델로, 위험 지역의 폐기물을 청소하기 위해 만들어" +"졌습니다." #: lang/json/json_monsters.py msgid "" @@ -35214,6 +35722,9 @@ msgid "" "friends and enemies alike. The two SMG barrels can swivel a full 360 " "degrees." msgstr "" +"이 General Atomics TX-1 Guardian 모델은 작은 자동 터렛으로, ATR 시스템을 이용" +"해서 적과 아군을 구별해낼 수 있습니다. 두 개의 SMG 화기를 360도 회전시켜 적들" +"을 공격할 수 있습니다." #: lang/json/json_monsters.py msgid "" @@ -35221,6 +35732,8 @@ msgid "" "it has a trio of spiked retractable cables and a flamethrower mounted on its " "head." msgstr "" +"Honda Regnal 모델로, 세 개의 거미 모양 다리를 가진 긴 로봇입니다. 무기로는 " +"세 쌍의 가시달린 케이블과 머리 부분의 화염방사기가 있습니다." #: lang/json/json_monsters.py msgid "" @@ -35270,6 +35783,9 @@ msgid "" "effective automated sentry, though production was limited due to a legal " "dispute." msgstr "" +"역관절인 두 다리로 걸어다니는 Northrop ATSV 모델 중장갑 로봇입니다. 40mm " +"Bofors 총기류로 무장하고 있으며, 효과적인 자동 보초병이지만 법률 상의 갈등으" +"로 인해 많이 생산되지 못했습니다." #: lang/json/json_monsters.py msgid "" @@ -35278,6 +35794,9 @@ msgid "" "plating, and armed with advanced munitions and a 120-mm gun, it is capable " "of delivering extraordinary firepower." msgstr "" +"이 Northrop Emancipator 모델은 처음이자 마지막 자동형 전차로, Northrup " +"Grumman 모델의 분리 이후 만들어졌습니다. 우라늄 장갑과 고급 군수 장비, 그리" +"고 120mm 구경을 사용하는 총기로 무장한 최강의 로봇입니다." #: lang/json/json_monsters.py msgid "" @@ -35285,6 +35804,9 @@ msgid "" "robots. Initially designed for military patrol and escort service, t rolls " "on a set of hydraulic treads and is armed with a 3\"/50 caliber gun." msgstr "" +"이 Northrop Watchman X-1 모델은 중무장한 전투형 로봇 시리즈 중 하나입니다. 기" +"본적으로 군용 정찰과 호위 임무를 위해 설계되었으며, 3\"/50구경 총기로 무장하" +"고 있습니다." #: lang/json/json_monsters.py msgid "" @@ -35292,6 +35814,8 @@ msgid "" "About the size of a cat, it is hardy and adaptive, and a fairly common sight " "in urban areas." msgstr "" +"북아메리카 지방에서 서식하는 버지니아 주머니쥐입니다. 고양이 정도의 크기에 높" +"은 적응력을 가지고 있으며, 도시 지역에서 자주 발견됩니다." #: lang/json/json_monsters.py msgid "" @@ -35334,6 +35858,8 @@ msgid "" "well as planted crops, and will attack and eat other slugs that cross its " "path." msgstr "" +"잡식성 복족류인 달팽이입니다. 일반적인 작물은 물론, 이동 경로에 있는 다른 달" +"팽이라도 공격해서 먹어버립니다." #: lang/json/json_monsters.py msgid "" @@ -35348,7 +35874,7 @@ msgstr "" msgid "" "The masked shrew, a mouse-like creature with a pointed, whiskery snout. It " "digs tunnels into the ground in search of bugs to eat." -msgstr "" +msgstr "뾰족한 코를 지닌 쥐입니다. 땅을 파고 다니며, 벌레를 먹이로 삼습니다." #: lang/json/json_monsters.py msgid "" @@ -35382,13 +35908,12 @@ msgstr "" "니다. 기후 변화로 인해, 서식 지역이 북쪽으로 더 확장되었습니다." #: lang/json/json_monsters.py -#, fuzzy msgid "" "The white-footed mouse, a prolific rodent with a white underbelly and a long " "fuzzy tail. A common sight in fields, forests, and research centers." msgstr "" -"흰색 발을 가진 생쥐로, 비교적 오래 사는 질병 매개체이기도 합니다. 평야, 숲, " -"연구 센터에서 주로 발견됩니다." +"흰색 발을 가진 생쥐로, 긴 꼬리를 가지고 있습니다. 평야나 숲, 연구 단지에서 자" +"주 목격됩니다." #: lang/json/json_monsters.py msgid "" @@ -35433,6 +35958,8 @@ msgstr "" #: lang/json/json_monsters.py msgid "Your precious generator, noisily humming away. Defend it at all costs!" msgstr "" +"아주 소중한 발전기로, 시끄러운 소음을 내고 있습니다. 무슨 수를 써서라도 지켜" +"내야 합니다!" #: lang/json/json_monsters.py msgid "amigara horror" @@ -35540,7 +36067,7 @@ msgstr "크롤러(crawler)" #: lang/json/json_monsters.py msgid "creeper hub" -msgstr "크리퍼 허브(creeper hub)" +msgstr "덩굴 중심(creeper hub)" #: lang/json/json_monsters.py msgid "creeper vine" @@ -35624,7 +36151,7 @@ msgstr "진균체 부머(fungal boomer)" #: lang/json/json_monsters.py msgid "fungal fighter" -msgstr "진균 싸움꾼(fungal fighter)" +msgstr "진균 전사(fungal fighter)" #: lang/json/json_monsters.py msgid "fungal spire" @@ -35856,7 +36383,7 @@ msgstr "하수구 뱀(sewer snake)" #: lang/json/json_monsters.py msgid "seweranha" -msgstr "" +msgstr "하수구 잉어(seweranha)" #: lang/json/json_monsters.py msgid "shadow" @@ -35996,7 +36523,7 @@ msgstr "늑대(wolf)" #: lang/json/json_monsters.py msgid "wolf spider" -msgstr "늑대 거미(wolf spider)" +msgstr "늑대거미(wolf spider)" #: lang/json/json_monsters.py msgid "your mother" @@ -36355,9 +36882,8 @@ msgid "Forked Tongue" msgstr "갈라진 혀" #: lang/json/json_mutations.py -#, fuzzy msgid "Frail" -msgstr "난간" +msgstr "허약함" #: lang/json/json_mutations.py msgid "Full Night Vision" @@ -36734,6 +37260,14 @@ msgstr "방사성 대사체계" msgid "Regeneration" msgstr "재생" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "파충류 눈" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "파충류 시야" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "로드-러너" @@ -36940,6 +37474,10 @@ msgstr "" msgid "Thick Scales" msgstr "두꺼운 비늘" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "두꺼운 꼬리" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -37369,6 +37907,14 @@ msgstr "" "당신에게는 큰 고양이같이 길고 우아한 꼬리가 생겼습니다. 균형 유지력이 좋아져" "서, 회피 능력이 상승합니다." +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" +"도마뱀을 닮은 길고 두꺼운 꼬리가 생겨났습니다. 몸의 균형을 더 쉽게 잡을 수 있" +"게 되며, 꼬리를 채찍 대용으로 사용할 수도 있습니다." + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -37955,6 +38501,15 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "당신의 눈은 적외선 대역을 볼 수 있도록 변이되었습니다." +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" +"눈이 변이되어, 빛나는 홍채와 가는 눈동자가 마치 도마뱀을 연상시키게 되었습니" +"다. 생김새가 충격적으로 변하게 되지만, 자신의 시야에는 영향을 주지 않습니다." + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -38101,6 +38656,14 @@ msgstr "" "당신의 근육은 유전적으로 극도로 천천히 움직입니다. 이동 속도가 30% 느려집니" "다." +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" +"시각 신경과 뇌가 변이되어 눈에 영향을 미칩니다. 적외선 시야를 볼 수 있게 되었" +"습니다." + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -49205,6 +49768,15 @@ msgstr "" "CBM 패키지와 같이 올라가 있습니다. \"28.vx 벌쳐를 지금 바로 구매하세요!\" " "\"트웬티8. 당신이 놓친걸 보게 해줍니다.\" 라고 쓰여져 있습니다." +#: lang/json/json_techniques.py +msgid "이(가) 스르르 미끄러져 자유가 되었습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid " Snakebites %s" +msgstr "이(가) %s에게 독사의 이빨을 날렸습니다." + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -49225,6 +49797,10 @@ msgstr "이(가) %s을(를) 팔꿈치로 공격했습니다." msgid " feints at %s" msgstr "이(가) %s에게 페인트 동작을 취했습니다." +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "이(가) 팔을 휘둘러 몸을 자유롭게 만들었습니다!" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -49235,11 +49811,36 @@ msgstr "이(가) %s에게 뛰어무릎차기를 날렸습니다." msgid " grabs %s" msgstr "이(가) %s을(를) 붙잡았습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "이(가) %s을(를) 붙잡아 지면에 눕혔습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "이(가) %s을(를) 붙잡아 무릎으로 쳤습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "이(가) 손으로 %s을(를) 쪼았습니다." + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "이(가) %s에게 위협으로 쉿쉿거렸습니다." + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "이(가) %s에게 잽을 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "이(가) %s에게 주먹으로 날카로운 일격을 날렸습니다!" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -49250,6 +49851,20 @@ msgstr "이(가) %s에게 능숙한 일격을 날렸습니다." msgid " karate chops %s" msgstr "이(가) %s에게 가라테 손날치기를 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "이(가) 낮게 휘둘러 쳐서 %s의 다리를 공격했습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "이(가) %s에게 뱀을 닮은 손 동작을 보였습니다." + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "이(가) 팔을 위협적으로 펼쳐올렸습니다!" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -49265,21 +49880,51 @@ msgstr "이(가) %s에게 빠른 펀치를 날렸습니다." msgid " quickly strikes %s" msgstr "이(가) %s을(를) 빠르게 쳤습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "이(가) 재빠르게 %s을(를) 후려쳤습니다." + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "이(가) %s을(를) 휘청거리게 만들었습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "이(가) %s에게 용의 일격을 날렸습니다!" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "이(가) %s에게 옆차기를 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "이(가) %s을(를) 붙잡아 난타했습니다." + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "이(가) %s에게 일격을 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "이(가) %s에게 일격을 날렸습니다." + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "이(가) %s에게 표범의 주먹을 날렸습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "이(가) 비틀거리며 %s에게 곁눈질을 날렸습니다." + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -49295,6 +49940,16 @@ msgstr "이(가) %s을(를) 후려찼습니다." msgid " sweeps %s" msgstr "이(가) %s을(를) 휩쓸었습니다." +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "이(가) 재빠르게 %s을(를) 쳤습니다." + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "이(가) %s에게 잽싸게 주먹을 날렸습니다." + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -49310,14 +49965,59 @@ msgstr "이(가) %s을(를) 집어던졌습니다." msgid " wraps up %s" msgstr "이(가) %s을(를) 감쌌습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "이(가) 송곳차기로 %s을(를) 날려버렸습니다!" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "거세게 후려치기" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "학의 날갯짓" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "학의 일격" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "학의 날개" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "용의 손길" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "용의 일격" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "용의 휩쓸기" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "술고래의 속임수" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "잡기 풀기" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "표범의 주먹" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "표범의 후려치기" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "날카로운 일격" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "정확한 일격" @@ -49326,10 +50026,50 @@ msgstr "정확한 일격" msgid "Rapid Strike" msgstr "속공" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "뱀의 동작" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "뱀의 움직임" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "뱀의 속도" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "뱀의 일격" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "송곳차기" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "휩쓸기 공격" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "호랑이의 습격" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "두꺼비의 혀" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "독사의 이빨" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "독사의 울음" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "독사의 몸부림" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "넓게 휘두르기" @@ -49338,6 +50078,11 @@ msgstr "넓게 휘두르기" msgid "Wrap attack" msgstr "감싸기 공격" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "%s에게 독사의 이빨을 날렸습니다." + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -49368,6 +50113,26 @@ msgstr "%s에게 뛰어무릎차기를 날렸습니다." msgid "You grab %s" msgstr "%s을(를) 붙잡았습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "%s을(를) 붙잡아 지면에 눕혔습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "%s을(를) 붙잡아 무릎으로 쳤습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "손으로 %s을(를) 쪼았습니다." + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "%s에게 위협으로 쉿쉿거렸습니다." + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -49383,11 +50148,26 @@ msgstr "%s에게 능숙한 일격을 날렸습니다." msgid "You karate chop %s" msgstr "%s에게 가라테 손날치기를 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "낮게 휘둘러 쳐서 %s의 다리를 공격했습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "%s에게 뱀을 닮은 손 동작을 보였습니다." + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "%s에게 강력한 발차기를 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "%s에게 주먹으로 날카로운 일격을 날렸습니다!" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -49398,21 +50178,59 @@ msgstr "%s에게 빠른 펀치를 날렸습니다." msgid "You quickly strike %s" msgstr "%s을(를) 빠르게 쳤습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "재빠르게 %s을(를) 후려쳤습니다." + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "팔을 위협적으로 펼쳐올렸습니다!" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "%s을(를) 휘청거리게 만들었습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "%s에게 용의 일격을 날렸습니다!" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "%s에게 옆차기를 날렸습니다." +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "스르르 미끄러져 자유가 되었습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "%s을(를) 붙잡아 난타했습니다." + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "%s에게 일격을 날렸습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "%s에게 일격을 날렸습니다." + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "%s에게 표범의 주먹을 날렸습니다!" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "비틀거리며 %s에게 곁눈질을 날렸습니다." + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -49428,11 +50246,25 @@ msgstr "%s을(를) 휩쓸었습니다." msgid "You sweep-kick %s" msgstr "%s을(를) 후려찼습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "재빠르게 %s을(를) 쳤습니다." + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "%s에게 잽싸게 주먹을 날렸습니다." + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "%s을(를) 넓게 휘둘렀습니다." +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "팔을 휘둘러 몸을 자유롭게 만들었습니다!" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -49443,6 +50275,11 @@ msgstr "%s을(를) 집어던졌습니다." msgid "You wrap up %s" msgstr "%s을(를) 감쌌습니다." +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "송곳차기로 %s을(를) 날려버렸습니다!" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "엑스 킥" @@ -50089,7 +50926,7 @@ msgstr "어린 나무" #: lang/json/json_tool_qualities.py msgid "cutting quality" -msgstr "절단 품질" +msgstr "절단" #: lang/json/json_tutorial.py msgid "" @@ -50982,12 +51819,12 @@ msgstr "모든 저장정보와 세계를 삭제하시겠습니까?" #: main_menu.cpp msgctxt "Main Menu" msgid "Hlp" -msgstr "" +msgstr "도움말" #: main_menu.cpp msgctxt "Main Menu" msgid "Lod" -msgstr "" +msgstr "로드" #: main_menu.cpp msgid "No Worlds found!" @@ -51593,6 +52430,16 @@ msgstr "%s은(는) %s을(를) 꼬리로 찔렀습니다!" msgid "%s stings %s with his tail!" msgstr "%s은(는) %s을(를) 꼬리로 찔렀습니다!" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "%s이(가) 꼬리로 %s을(를) 강타했습니다!" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "%s이(가) 꼬리로 %s을(를) 강타했습니다!" + #: melee.cpp #, c-format msgid " batters %s" @@ -51879,6 +52726,11 @@ msgstr "넓게 휘둘렀지만 빗맞혔습니다." msgid "You whack %s" msgstr "%s을(를) 후려쳤습니다." +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "꼬리로 %s을(를) 강타했습니다!" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -53661,6 +54513,11 @@ msgstr "%s %s (%s에서)" msgid "A %s %s into the %s!" msgstr "%s이(가) %s %s(으)로 들어갑니다!" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "무언가가 당신의 %s을(를) 쳤습니다." + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -54019,9 +54876,9 @@ msgid "Points left:%3d" msgstr "남은 포인트:%3d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Points left:%3d " -msgstr "남은 포인트:%3d" +msgstr "남은 포인트:%3d " #: newcharacter.cpp #, c-format @@ -54038,9 +54895,9 @@ msgid "Ranged penalty: -%d" msgstr "원거리 명중률 : -%d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "독서 시간 : %d%%" +msgstr "독서 시간: %d%%" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" @@ -54059,9 +54916,9 @@ msgid "STATS" msgstr "능력치" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "기술 망각 속도 : %d%%" +msgstr "기술 망각: %d%%" #: newcharacter.cpp #, c-format @@ -54104,14 +54961,12 @@ msgid "To go back and review your character, press <" msgstr "뒤로 돌아가서 캐릭터를 보려면 < 키를 누르세요." #: newcharacter.cpp -#, fuzzy msgid "To pick a random name for your character, press ?" -msgstr "이 캐릭터의 이름을 무작위로 정하려면 ? 키를 누르세요." +msgstr "이름을 무작위로 선택하려면, ? 키를 누르세요." #: newcharacter.cpp -#, fuzzy msgid "To save this character as a template, press !" -msgstr "이 캐릭터를 템플릿으로 저장하려면 ! 키를 누르세요." +msgstr "이 캐릭터의 템플릿을 저장하려면, ! 키를 누르세요." #: newcharacter.cpp msgid "Too many points allocated, change some features and try again." @@ -54150,27 +55005,24 @@ msgid "Your profession of %s prevents you from taking this trait." msgstr "%s를(을) 직업으로 선택했기 때문에, 이 특성을 선택할 수 없습니다." #: newcharacter.cpp -#, fuzzy msgid "______NO NAME ENTERED!!!______" -msgstr "______이름 없음!!!!_____" +msgstr "______이름 없음!!!______" #: newcharacter.cpp -#, fuzzy msgid "h, 4, or left arrow to decrease the statistic." -msgstr " 수치를 줄임" +msgstr "h, 4, 왼쪽 화살표를 통해 수치를 감소시킵니다." #: newcharacter.cpp msgid "j/k, 8/2, or up/down arrows to select a statistic." -msgstr "" +msgstr "j/k, 8/2, 위/아래 화살표를 통해 수치를 선택합니다." #: newcharacter.cpp options.cpp player.cpp msgid "kg" msgstr "kg" #: newcharacter.cpp -#, fuzzy msgid "l, 6, or right arrow to increase the statistic." -msgstr " 수치를 높임" +msgstr "l, 6, 오른쪽 화살표를 통해 수치를 증가시킵니다." #: newcharacter.cpp options.cpp player.cpp msgid "lbs" @@ -58108,8 +58960,8 @@ msgid "Alcohol Craving" msgstr "알콜 금단증상" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" -msgstr "거의 즉시, 뱃속에서 익숙한 고통이 느껴집니다." +msgid "Almost instantly you feel a familiar pain in your stomach." +msgstr "거의 즉시, 배에서 익숙한 통증을 느꼈습니다." #: player.cpp msgid "Arm encumbrance affects your accuracy with ranged weapons." @@ -58162,7 +59014,7 @@ msgstr "바이오닉 :" msgid "Broken %s began to mend." msgstr "부서진 %s이(가) 다시 고쳐지기 시작합니다." -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "연사" @@ -58201,9 +59053,9 @@ msgid "Cocaine Craving" msgstr "코카인 금단증상" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Cold-Blooded -%s%d%%" -msgstr "냉혈 상태 -%s%d%%" +msgstr "냉혈 증세 -%s%d%%" #: player.cpp #, c-format @@ -58248,7 +59100,7 @@ msgid "Depressants" msgstr "진정제" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressants -%s%d%%" msgstr "진정제 -%s%d%%" @@ -58257,9 +59109,9 @@ msgid "Depressed" msgstr "우울증" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressed -%s%d%%" -msgstr "우울해짐 -%s%d%%" +msgstr "기분 나쁨 -%s%d%%" #: player.cpp msgid "Dex " @@ -58404,9 +59256,9 @@ msgid "Good Feeling" msgstr "좋은 기분" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Good mood +%s%d%%" -msgstr "좋은 기분 +%s%d%%" +msgstr "기분 좋음 +%s%d%%" #: player.cpp msgid "Guilty about Killing" @@ -58440,7 +59292,7 @@ msgid "Heard Disturbing Scream" msgstr "끔찍한 비명을 들음" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Hunger -%s%d%%" msgstr "배고픔 -%s%d%%" @@ -58651,10 +59503,6 @@ msgstr "%s 를(을) 넣을 공간이 없습니다. 바닥에 버립니까?" msgid "No space in inventory for your %s. Drop it?" msgstr "%s를(을) 인벤토리에 넣을 공간이 없습니다. 버립니까?" -#: player.cpp -msgid "Normal" -msgstr "단발" - #: player.cpp msgid "Nothing to see here!" msgstr "이곳에는 아무 것도 없습니다!" @@ -58677,14 +59525,14 @@ msgid "Opiate Craving" msgstr "아편 금단증상" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Out of Sunlight -%s%d%%" -msgstr "태양빛에서 벗어남 -%s%d%%" +msgstr "햇빛 -%s%d%%" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Overburdened -%s%d%%" -msgstr "짐이 무거움 -%s%d%%" +msgstr "무게 초과 -%s%d%%" #: player.cpp #, c-format @@ -58696,7 +59544,7 @@ msgid "Pain" msgstr "고통" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Pain -%s%d%%" msgstr "고통 -%s%d%%" @@ -58706,7 +59554,7 @@ msgid "Pain %d" msgstr "고통 %d" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Painkillers -%s%d%%" msgstr "진통제 -%s%d%%" @@ -58762,7 +59610,7 @@ msgid "Putting on a %s would be tricky." msgstr "%s을(를) 어떻게 착용해야 할지 모르겠습니다." #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Quick +%s%d%%" msgstr "빠름 +%s%d%%" @@ -58780,9 +59628,9 @@ msgid "Read %i" msgstr "%i 읽음" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%% " -msgstr "독서 시간 : %d%% " +msgstr "독서 시간: %d%% " #: player.cpp #, c-format @@ -58851,9 +59699,9 @@ msgid "Siphoned %d units of %s from the %s." msgstr "%d을(를) %s에서 뺀 다음, %s(으)로 넣었습니다." #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%% " -msgstr "기술 망각 속도 : %d%% " +msgstr "기술 망각: %d%% " #: player.cpp msgid "Skills:" @@ -58902,9 +59750,9 @@ msgid "Stimulant Overdose" msgstr "각성제 과다복용" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Stimulants +%s%d%%" -msgstr "흥분제 +%s%d%%" +msgstr "각성제 +%s%d%%" #: player.cpp msgid "Storage" @@ -58999,9 +59847,9 @@ msgid "The thought of eating that makes you feel sick. Really do it?" msgstr "이걸 먹으면 몸에 병이 생길 것 같습니다. 정말 먹습니까?" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Thirst -%s%d%%" -msgstr "목마름 -%s%d%%" +msgstr "갈증 -%s%d%%" #: player.cpp msgid "Thirsty" @@ -59128,6 +59976,11 @@ msgstr "무기 :" msgid "Weapon: %s" msgstr "무기 : %s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "무기: %s (%s)" + #: player.cpp msgid "Wet" msgstr "몸이 젖음" @@ -59330,8 +60183,8 @@ msgid "You feel fatigued all of a sudden." msgstr "갑자기 몸에 피로감이 듭니다." #: player.cpp -msgid "You feel horrible for eating a person.." -msgstr "인육을 먹는 것에 대해 끔찍한 기분이 듭니다..." +msgid "You feel horrible for eating a person." +msgstr "식인하는 것에 대해 끔찍한 기분이 들었습니다." #: player.cpp #, c-format @@ -59390,11 +60243,10 @@ msgid "You need a %s to consume that!" msgstr "사용하려면 %s가(이) 필요합니다!" #: player.cpp -#, fuzzy msgid "" "You need to be at least level 1 in the marksmanship skill before you can " "modify guns." -msgstr "총을 개량하려면, 최소한 총기 기술 레벨이 1은 되어야 합니다." +msgstr "총기를 개조하기 위해서는 사격술이 최소 1레벨은 필요합니다." #: player.cpp #, c-format @@ -59616,9 +60468,8 @@ msgid "Your batteries discharge slightly." msgstr "배터리가 약간 방전되었습니다." #: player.cpp -#, fuzzy msgid "Your body strains under the weight!" -msgstr "도축을 서투르게 해서, 아무 것도 얻지 못했습니다!" +msgstr "짐이 너무 무겁습니다!" #: player.cpp msgid "Your eyes won't focus without reading glasses." @@ -59740,6 +60591,11 @@ msgstr "치명타!" msgid "Firing %s (%d)" msgstr "%s (%d) 사격" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "사격 모드: %s" + #: ranged.cpp msgid "Fwoosh!" msgstr "푸슈우!" @@ -60678,9 +61534,8 @@ msgid "Headlights turned on" msgstr "헤드라이트가 켜졌습니다." #: vehicle.cpp -#, fuzzy msgid "Honk horn" -msgstr "트럭용 경적(truck horn)" +msgstr "경적 울리기" #. ~ indicates that a vehicle part is inside #: vehicle.cpp @@ -61047,9806 +61902,9779 @@ msgstr "월드맵 이름:" msgid "______NO NAME ENTERED!!!!_____" msgstr "______이름 없음!!!!_____" -#~ msgid "Monster Spotted!" -#~ msgstr "적 발견!" - #~ msgid "" -#~ "There's no room in your inventory for the %s, and you can't unwield your " -#~ "%s." +#~ "The mere thought of eating this stuff is enough to make your hair stand " +#~ "on end. Save it for when you're about to die of starvation." #~ msgstr "" -#~ "%s을(를) 넣을만한 공간이 없으며, 또한 %s을(를) 손에 들 수도 없습니다." +#~ "이런걸 먹는다는 생각만으로도 온몸의 털이 곤두서는 느낌이 듭니다. 정말 굶어" +#~ "죽기 직전에나 먹기 위해, 저장해두는 편이 좋을 것 같습니다." -#~ msgid "" -#~ "The Northern short-tailed shrew, an insectvorous mammal that resembles a " -#~ "cross between a mouse and a mole. Notably for a mammal, it has a " -#~ "venomous bite, which can prove painful for humans." -#~ msgstr "" -#~ "북쪽 지방의 짧은 꼬리를 가진 쥐로, 쥐와 두더지의 중간 정도에 있는 포유류입" -#~ "니다. 이빨에 독성이 있기 때문에, 물리면 상당히 고통스럽습니다." +#~ msgid "You have a nicotine craving." +#~ msgstr "니코틴 금단증상이 나타납니다." -#~ msgid "" -#~ "The shuffling corpse of a once-proud bear, its eyes ooze with black " -#~ "fluid, and its flesh is torn and scarred." -#~ msgstr "" -#~ "한때는 자랑스러운 곰이였지만, 이제는 움직이는 좀비 곰이 되었습니다. 눈에서" -#~ "는 검은 액체가 흐르고 있으며, 살덩이는 흉터가 난 채 찢어발겨졌습니다." +#~ msgid "You have a caffeine craving." +#~ msgstr "카페인을 금단증상이 나타납니다." -#~ msgid "Hardcore" -#~ msgstr "간당간당함" +#~ msgid "You have an alcohol craving." +#~ msgstr "알콜 금단증상이 나타납니다." -#~ msgid "" -#~ "Before the Apocalypse, you turned to Heroin to soothe your many problems. " -#~ "Now, your habit is your only comfort and your only drive." -#~ msgstr "" -#~ "대격변이 일어나기 전에는, 당신은 여러 문제를 잊기 위해 헤로인을 사용해왔습" -#~ "니다. 이제 헤로인은 당신의 유일한 삶의 목표이자 위안이 되었습니다." +#~ msgid "You have an opiate craving." +#~ msgstr "아편 금단증상이 나타납니다." -#~ msgid "" -#~ "You were on your way to collect your check, when your pimp tried to kill " -#~ "you. You wish that it wasn't a common occurence. You start with the last " -#~ "of your stash and a strong crack addiction." -#~ msgstr "" -#~ "당신은 돈을 받아가려 했다가, 포주에게 살해당할 뻔 했습니다. 평소에는 이런 " -#~ "일이 일어나지 않았는데 말이죠. 마지막으로 챙겨둔 마약과, 심한 크랙 중독을 " -#~ "가지고 시작합니다." +#~ msgid "You have a craving." +#~ msgstr "금단증상이 나타납니다." -#~ msgid "" -#~ "Your body has bionics worth millions payed by public taxes. The " -#~ "government employed you as a spy: you have night vision, an alarm and a " -#~ "hacking module powered by your own metabolism." -#~ msgstr "" -#~ "당신의 몸에는 세금으로 지불된 수백 만 가치의 바이오닉 - 몸의 신진 대사를 " -#~ "사용하는 야간 시야, 알람 시스템, 해킹 모듈 - 이 장착되어 있습니다. 정부는 " -#~ "당신을 스파이로 고용해왔습니다." +#~ msgid "You have a speed craving." +#~ msgstr "당신은 각성제 금단증상을 겪고 있다." -#~ msgctxt "Main Menu" -#~ msgid "elp" -#~ msgstr "도움말" +#~ msgid "You have a craving for cocaine." +#~ msgstr "코카인이 간절히 필요합니다." -#~ msgctxt "Main Menu" -#~ msgid "oad" -#~ msgstr "불러오기" +#~ msgid "You have a craving for crack." +#~ msgstr "넌 크랙(강력한 코카인의 일종인 마약) 을 필요로 한다." -#~ msgid " select a statistic." -#~ msgstr " 수치를 선택함" +#~ msgid "Too many itens" +#~ msgstr "물품이 너무 많음" -#~ msgid "(Press spacebar to toggle)" -#~ msgstr "(Spacebar를 눌러서 토글)" +#~ msgid "Start a fire" +#~ msgstr "불을 피우다" -#~ msgid "h, 4, or left arrow" -#~ msgstr "h, 4, 혹은 왼쪽 화살표" +#~ msgid "Contruct" +#~ msgstr "건설" -#~ msgid "j/k, 8/2, or arrows" -#~ msgstr "j/k, 8/2, 혹은 화살표" +#~ msgid "You're not strong enough!" +#~ msgstr "힘이 약해서 할 수 없다!" -#~ msgid "l, 6, or right arrow" -#~ msgstr "l, 6, 혹은 오른쪽 화살표" +#~ msgid "Press a direction for the furniture to move (. to cancel):" +#~ msgstr "가구를 움직일 방향을 눌러 주십시오 (. 으로 취소) :" -#~ msgid " barely misses!" -#~ msgstr "가(이) 아슬아슬하게 빗맞혔습니다!" +#~ msgid "You disassemble the item into its components." +#~ msgstr "당신은 아이템을 여러 부품으로 분해했습니다." -#~ msgid " misses!" -#~ msgstr "가(이) 빗맞혔습니다!" +#~ msgid "Contracted the infection." +#~ msgstr "감염됨." -#~ msgid "A bacon, lettuce and tomato sandwich on toasted bread." -#~ msgstr "" -#~ "베이컨(Bacon), 상추(Lettuce), 토마토(Tomato)가 들어간 구운 샌드위치입니다." +#~ msgid "Cleaned the bite wound." +#~ msgstr "물린 상처를 닦았습니다." -#, fuzzy -#~ msgid "" -#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " -#~ "you from the floor, making it easier to sleep" -#~ msgstr "" -#~ "단단히 말아서 보관할 수 있는 발포지. 바닥의 냉기나 열기로부터 조금 떨어지" -#~ "게 해서, 조금 더 잠들기 쉽게 만들어줍니다." +#~ msgid "Sterilized the infection... this time." +#~ msgstr "감염 부위를 소독했습니다... 지금은." -#~ msgid "" -#~ "A brass-jacketed variant of the .44 Magnum round. This increases " -#~ "penetration slightly at the cost of reduced expansion." -#~ msgstr "" -#~ "황동을 채운 .44 매그넘 탄환. 폭발력이 약간 줄어든 대신, 관통력이 늘어났습" -#~ "니다." +#~ msgid "You start scratching yourself all over!" +#~ msgstr "온 몸을 긁기 시작합니다!" -#~ msgid "A car horn meant to be attached to a car's electrical system." -#~ msgstr "차량의 전력 시스템에 연결시켜 사용하는, 차량용 경적입니다." +#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." +#~ msgstr "고열이 나고 메스껍습니다. 상처부위가 초록으로 변해갑니다." -#~ msgid "" -#~ "A dry and tasteless bread product capable of remaining edible without " -#~ "spoilage for vast lengths of time." -#~ msgstr "오래오래 보존할 수 있는, 무미건조한 건빵입니다." +#~ msgid "Bleeding" +#~ msgstr "출혈된" -#~ msgid "A handful of large, purple plums. It is good for your digestion." -#~ msgstr "손에 꽉 잡힐만큼 큰, 보라색 자두입니다. 소화가 잘 됩니다." +#~ msgid "Bugs Under Skin" +#~ msgstr "피부 밑의 벌레" -#~ msgid "" -#~ "A huge, curved, two-handed sword from Japan. Surprisingly light for its " -#~ "size." -#~ msgstr "" -#~ "일본에서 온 거대하고, 구부러진, 양손검입니다. 그 크기에 비하면, 놀라울 정" -#~ "도로 가볍습니다." +#~ msgid "Bite Wound" +#~ msgstr "물린 상처" -#~ msgid "" -#~ "A pipe whose ends have been bent and hammered flat to resemble a crowbar." -#~ msgstr "파이프를 망치질해서 쇠지레처럼 만든, 급조 쇠지레입니다." +#~ msgid "Painful Bite Wound" +#~ msgstr "고통스러운 물린 상처" -#~ msgid "" -#~ "A portable charcoal smoker. Good for weekend barbecuing and preserving " -#~ "meat with smoke." -#~ msgstr "" -#~ "숯을 사용하는 휴대용 그릴입니다. 주말에 바베큐를 구워 먹거나, 고기를 훈제" -#~ "시킬 때 좋습니다." +#~ msgid "Infected Wound" +#~ msgstr "감염된 상처" -#~ msgid "A portable electric food dehydrator, powered by standard batteries." -#~ msgstr "일반적인 배터리로 돌아가는, 휴대용 전기 음식 건조기입니다." +#~ msgid "Painful Infected Wound" +#~ msgstr "고통스러운 감염된 상처" -#~ msgid "" -#~ "A sealed glass jar containing a sliced fruit. Activate to open and enjoy." -#~ msgstr "" -#~ "과일 조각을 밀봉해둔 유리병입니다. 뚜껑을 열면, 즐거움이 시작됩니다." +#~ msgid "Pus Filled Wound" +#~ msgstr "고름이 찬 상처" -#~ msgid "" -#~ "A shell filled with tiny steel darts. Extremely damaging, plus the spread " -#~ "makes it very accurate at short range. Slices through most forms of armor " -#~ "with ease." -#~ msgstr "" -#~ "작은 강철 침을 가득 채운 플레쉐트 탄환. 매우 위력적이며 넓게 퍼지기 때문" -#~ "에 근거리 명중률이 높습니다. 대부분의 갑옷을 무용지물로 만들 수 있습니다." +#~ msgid "Your bite wound really hurts." +#~ msgstr "물린 상처가 정말 아픕니다." -#~ msgid "A simple bulb horn, found on many bicycles. Honk honk." -#~ msgstr "동그랗고 평범한 자전거 경적입니다. 빵빵." +#~ msgid "Your bite wound feels swollen and painful." +#~ msgstr "물린 상처에 종기가 생기고 고통스럽습니다." -#~ msgid "" -#~ "A stout collapsible spade commonly used by military forces and favored by " -#~ "hikers." -#~ msgstr "접을 수 있는 튼튼한 삽입니다. 주로 군인이나 등산가들이 사용합니다." +#~ msgid "You learn %s." +#~ msgstr "%s 를 배웠습니다." -#~ msgid "" -#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " -#~ "brightly, and makes it much easier to see the baselines at night games " -#~ "(It also makes the umpire FAR more likely to call a ball instead of a " -#~ "strike)." -#~ msgstr "" -#~ "튼튼한 목제 야구방망이에 휘발유를 먹인 천 조각을 둘둘 감은 무기입니다. 환" -#~ "하게 불타오르고 있어, 야간 경기의 베이스 라인을 훨씬 더 보기 쉽게 만들어" -#~ "줄 것입니다. (그리고, 심판이 스트라이크보다 볼을 외칠 확률도 *엄청* 높아지" -#~ "겠죠)" +#~ msgid "whatever" +#~ msgstr "됐어" -#~ msgid "" -#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " -#~ "ball game will REALLY heat up." -#~ msgstr "" -#~ "튼튼한 목제 야구방망이에 휘발유를 먹인 천 조각을 둘둘 감은 무기입니다. 불" -#~ "을 붙이면, 말 그대로 경기가 불타오를 것입니다. (역자 주 : Louisville " -#~ "Slaghterer라는 이름은 유명한 야구방망이 메이커인 Louisville Slugger의 패러" -#~ "디입니다)" +#~ msgid "crafting" +#~ msgstr "제작중..." -#~ msgid "" -#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " -#~ "stimulant when you inject yourself with it. Asthmatics can use it in an " -#~ "emergency to clear their asthma." -#~ msgstr "" -#~ "1회분 용량의 아드레날린 주사기로, 투여시 강력한 흥분 촉진을 유발합니다. 천" -#~ "식 증상이 위중할 때 사용할 수도 있습니다." +#~ msgid "playing" +#~ msgstr "플레이중" -#~ msgid "A very loud horn, usually found on large trucks like semis." -#~ msgstr "아주 시끄러운 경적입니다. 주로 큰 트럭에 달려있습니다." +#~ msgid "reading" +#~ msgstr "독서" -#~ msgid "Ammunition for the RPG-7." -#~ msgstr "RPG-7 용 탄두입니다." +#~ msgid "reloading" +#~ msgstr "재장전" -#~ msgid "An empty hull from a 5x50mm flechette round." -#~ msgstr "5x50mm 플레쉐트 탄의 빈 탄피입니다." +#~ msgid "waiting" +#~ msgstr "대기" -#~ msgid "Lumpy white soup made of clams and potatoes." -#~ msgstr "대합과 감자를 넣어 만든, 덩어리진 흰색 수프입니다." +#~ msgid "butchering" +#~ msgstr "도축중..." -#~ msgid "RPG-7 Ammo" -#~ msgstr "RPG-7 Ammo" +#~ msgid "disassembly" +#~ msgstr "분해" -#~ msgid "Really cheap fortified red wine." -#~ msgstr "알코올을 첨가한 싸구려 와인입니다." +#~ msgid "foraging" +#~ msgstr "채집중.." -#, fuzzy -#~ msgid "" -#~ "Small metal objects covered with many sharp points. If an unsuspecting " -#~ "victim steps on it, they'll get a spine through the foot." -#~ msgstr "" -#~ "나무 판에 못을 거꾸로 박은 덫입니다. 밟으면 못이 발에 박히게 됩니다." +#~ msgid "pumping gas" +#~ msgstr "기름 퍼올리기" -#~ msgid "" -#~ "This chemistry set stored in a bag contains glass containers, hoses, " -#~ "metal wire, a hotplate, and safety glasses. It might be used to craft " -#~ "some chemistry projects if you're so inclined." -#~ msgstr "" -#~ "화학용 도구를 담아둔 가방으로, 유리병, 호스, 철사, 전열기, 보안경으로 이루" -#~ "어져 있습니다. 할 수 있다면, 화학 약품 등을 만들 때 도구로 사용할 수 있습" -#~ "니다." +#~ msgid "training" +#~ msgstr "훈련" -#~ msgid "" -#~ "Vacuum packed fruit slices in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "진공 포장된 과일 조각입니다. 포장을 뜯으면, 즐거움이 시작됩니다." +#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." +#~ msgstr "%s %s 를(을) 중단합니까? Y : 중단 N : 계속 I : 다른 소리도 무시" -#~ msgid "clams" -#~ msgstr "대합(clams)" +#~ msgid "%s Stop %s?" +#~ msgstr "%s %s 를(을) 중단합니까?" -#~ msgid "" -#~ "A large and colorful game bird native to the forests of North America." -#~ msgstr "형형색색의 깃털을 가진 큰 새로, 북아메리카의 숲에서 살던 새입니다." +#~ msgid "Martial arts gained." +#~ msgstr "무술 배움." -#~ msgid "" -#~ "A massive, mutated freshwater shellfish,\n" -#~ "resembling a humongous lobster." -#~ msgstr "거대한, 변이된 갑각류입니다. 엄청나게 큰 랍스타 같습니다." +#~ msgid "Open" +#~ msgstr "문 열기" -#, fuzzy -#~ msgid "" -#~ "A plant that grows as high as your head,\n" -#~ "with one thick, bark-coated stalk\n" -#~ "supporting a flower-like head with a paralyzing\n" -#~ "sting within." -#~ msgstr "" -#~ "머리 높이만큼 길게 자란 식물입니다. 두꺼운 껍질로 덮힌 줄기가 꽃처럼 생긴 " -#~ "머리를 받치고 있으며, 머리엔 날카로운 가시가 달려있습니다." +#~ msgid "Close" +#~ msgstr "문 닫기" -#~ msgid "" -#~ "A small blob of viscous goo that oozes\n" -#~ "across the ground like a mass of living\n" -#~ "oil." -#~ msgstr "" -#~ "작고 끈적거리는 점액질로, 마치 살아 움직이는 석유를 떠올리게 합니다." +#~ msgid "Smash" +#~ msgstr "부수기" -#~ msgid "" -#~ "A small mammal native to North America, distinctive for its dexterous " -#~ "paws and facial markings." -#~ msgstr "" -#~ "북아메리카에서 살던 작은 포유류로, 손재주가 뛰어난 손과 얼굴에 난 표식으" -#~ "로 구분할 수 있습니다." +#~ msgid "You swing at the corpse." +#~ msgid_plural "You swing at the corpses." +#~ msgstr[0] "시체를 한대 쳤습니다." -#~ msgid "A small, omnivorous marsupial native to North America." -#~ msgstr "작은 잡식성의 주머니쥐로, 북아메리카 출신입니다." +#~ msgid "Control vehicle" +#~ msgstr "차량 조종" -#~ msgid "" -#~ "An eastern timber rattlesnake, one of New England's most poisonous snakes." -#~ msgstr "" -#~ "위험한 방울뱀으로, 뉴 잉글랜드 지방에서 가장 강력한 독을 가진 뱀들 중 하나" -#~ "입니다." +#~ msgid "Examine" +#~ msgstr "조사" -#~ msgid "mole" -#~ msgstr "두더지(mole)" +#~ msgid "You dont see any items around you!" +#~ msgstr "주변에 어떤 물품도 없습니다!" -#~ msgctxt "Main Menu" -#~ msgid "eset" -#~ msgstr "리셋" +#~ msgid "Have a drink?" +#~ msgstr "마시겠습니까?" + +#~ msgid "There's no vehicle to grab there!" +#~ msgstr "거기엔 붙잡을 차량이 없다!" + +#~ msgid "Drop" +#~ msgstr "버린다" + +#~ msgid "You need a charged UPS." +#~ msgstr "충전된 UPS(무전원장치) 가 필요합니다." + +#~ msgid "Butcher the %s corpse?" +#~ msgstr "%s 시체를 도축하시겠습니까?" + +#~ msgid "Wield item: Press - to choose a style" +#~ msgstr "아이템 장착: - 키를 눌러 고르십시오." #~ msgid "" -#~ "Choose the tileset you want to use. Only applicable on SDL builds. " -#~ "Requires restart." +#~ "Whoa. Whoa. Hey. This game requires a minimum terminal size of %dx%d. " +#~ "I'm\n" +#~ "sorry if your graphical terminal emulator went with the woefully-" +#~ "diminutive\n" +#~ "%dx%d as its default size, but that just won't work here. Now stretch " +#~ "the\n" +#~ "window until you've got it at the right size (or bigger).\n" #~ msgstr "" -#~ "사용하고 싶은 타일셋을 선택합니다. SDL 버전에서만 적용됩니다. 재시작 필요." +#~ "워. 워. 저기요. 이 게임은 적어도 %dx%d 정도의 화면 크기가 필요 합니다.\n" +#~ "죄송하지만 사용중인 터미널 에뮬레이터의 화면 크기가 %dx%d 가 안된다면, 사" +#~ "용할수가 없습니다.\n" +#~ "필요한 크기가 될수 있도록 화면을 늘려주세요.\n" #~ msgid "" -#~ "You just put on an article of clothing that protects against the " -#~ "environment.\n" -#~ "The most common and imporant are respiratory devices, which will protect " +#~ "While sleeping in dangerous territory, it may be wise to set traps to " +#~ "ward\n" +#~ "off unwanted intrusions. There are a few traps to be found in the world,\n" +#~ "most notably bubblewrap (which will make a loud noise if stepped on, " +#~ "helping\n" +#~ "to wake you up) and bear traps (which make noise AND damage and trap " +#~ "anything\n" +#~ "that steps on them). Others need to be crafted; this requires the Traps " +#~ "skill\n" +#~ "and possibly Mechanics.\n" +#~ "\n" +#~ "To set a trap, simply use the item%s and choose a direction; the trap\n" +#~ "will be placed on an adjacent tile. Some traps may require additional " +#~ "tools,\n" +#~ "like a shovel, to be set. Once set, a trap will remain in place until\n" +#~ "stepped on or disarmed.\n" +#~ "\n" +#~ "To disarm a trap, examine%s the space it is on. Your success depends\n" +#~ "upon your Traps skill and Dexterity. If you succeed, the trap is removed\n" +#~ "and replaced by some or all of its constituent parts; however, if you " +#~ "fail,\n" +#~ "there is a chance that you will set off the trap, suffering the " +#~ "consequences.\n" +#~ "\n" +#~ "Many traps are fully or partially hidden. Your ability to detect traps " +#~ "is\n" +#~ "entirely dependent upon your Perception. Should you stumble into a trap, " #~ "you\n" -#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" -#~ "However, they also make it a little harder to breath when running, so " -#~ "you'll\n" -#~ "move more slowly. To check encumbrance, press @." +#~ "may have a chance to avoid it, depending on your Dodge skill." #~ msgstr "" -#~ "환경 보호력을 제공해주는 의류를 입으면, 자동으로 대 환경 보호력이 올라갑니" -#~ "다.\n" -#~ "마스크는 가장 흔한 대 환경 보호 장비로, 주로 연기나 독안개 등으로부터 몸" -#~ "을\n" -#~ "지켜줍니다. 하지만, 이런 마스크류 장비는 달릴 때 호흡을 방해하기 때문에\n" -#~ "이동속도가 약간 느려집니다. 방해도를 확인하려면 '@' 키를 누르세요." +#~ "위험한 지역에서 잠을 자는 경우, 함정을 설치해서 침입자를 막는게\n" +#~ "현명한 선택입니다. 몇가지 함정이 있지만 가장 인상적인건\n" +#~ "뾱뾱이 함정입니다 누군가 밟으면 소리가 나기 때문에 깨는데 도움이\n" +#~ "됩니다. 또 곰 함정도 있습니다 소리도 나면서 데미지도 줍니다.\n" +#~ "제작 가능한 함정도 있는데, 함정 스킬과 기계공학도 필요합니다.\n" +#~ "\n" +#~ "함정을 설치하려면, %s 로 사용해서 위치를 지정하면 됩니다.\n" +#~ "간혹 몇몇 함정은 추가적인 도구가 필요하기도 한데, 삽이 대표적이죠\n" +#~ "일단 설치되면 함정은 누가 밟거나 해체하기 전까진 그대로 있습니다.\n" +#~ "\n" +#~ "함정을 해체하려면 %s 로 해당 타일을 살펴야 합니다. 성공률은\n" +#~ "함정 스킬과 민첩성에 달려있습니다. 성공하면 함정은 제거되고\n" +#~ "해당 부품의 일부분 혹은 전체가 그 곳에 남게 됩니다. 하지만\n" +#~ "실패하면 함정을 작동시킬 가능성이 있고, 그에 따란 결과를 보게되죠.\n" +#~ "\n" +#~ "대부분의 함정들은 전체 혹은 부분적으로 숨겨져 있습니다.\n" +#~ "이런 함정을 찾는 능력은 지각력으로만 가능합니다.\n" +#~ "함정을 밟는 경우 회피 스킬로 함정을 피할 가능성도 있습니다." + +#~ msgid "MODS/BIONICS" +#~ msgstr "모드/바이오닉" + +#~ msgid "Error: Item Missing." +#~ msgstr "오류 : 물품 없음." #~ msgid "" -#~ "You just put on an article of clothing that provides ample storage " -#~ "space.\n" -#~ "This will allow you to carry much more stuff, but be aware that there is " -#~ "also\n" -#~ "a limit on the weight you can carry which depends on strength. The item " -#~ "you\n" -#~ "put on also encumbered your torso. This will make combat a little more\n" -#~ "difficult. To check encumbrance, press @." +#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" +#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " +#~ "allows\n" +#~ "you an extra dodge and two extra blocks on the following round." #~ msgstr "" -#~ "저장공간을 제공해주는 의류를 입으면 자동으로 저장공간이 늘어납니다.\n" -#~ "이러한 의류는 더 많은 부피의 짐을 들게 해주지만, 소지 가능한 물품의 한계" -#~ "는\n" -#~ "부피만이 아닌, 체력에 따라 달라지는 최대 무게에 의해서도 결정된다는 점을\n" -#~ "기억해야 합니다. 그리고 방금 전에 당신이 착용한 의류는 상체 부위의 방해도" -#~ "를\n" -#~ "높입니다. 이렇게 되면 근접 전투가 약간 더 어려워지죠. 방해도를 확인하려" -#~ "면\n" -#~ "'@' 키를 누르세요." +#~ "공수도는 일본에서 시작되었고, 매우 인기있는 무술입니다.\n" +#~ "빠르고 정확한 공격과 방어, 유연한 움직임에 초점을 두고 있습니다.\n" +#~ "성공적인 공격은 추가 회피와 다음 라운드에 추가 방어 2 를 제공합니다." -#, fuzzy -#~ msgid "Start cart construction" -#~ msgstr "자동차 제작 시작" +#~ msgid "karate" +#~ msgstr "가라테" -#, fuzzy -#~ msgid "Enter new cart name:" -#~ msgstr "차량의 새로운 이름 입력:" +#~ msgid "%1$s quickly punch %4$s" +#~ msgstr "%1$s 빠른 펀치 %4$s" -#, fuzzy -#~ msgid "Cart" -#~ msgstr "골프 카트" +#~ msgid "%1$s quickly punches %4$s" +#~ msgstr "%1$s 빠른 펀치 %4$s" -#, fuzzy -#~ msgid "Very Heavily Bleeding " -#~ msgstr "심한 열 의존증" +#~ msgid "%1$s block %4$s" +#~ msgstr "%1$s 방어 %4$s" -#, fuzzy -#~ msgid "%1$s quickly strike with %2$s %3$s at %4$s" -#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" +#~ msgid "%1$s blocks %4$s" +#~ msgstr "%1$s 방어 %4$s" -#, fuzzy -#~ msgid "%1$s quickly strikes with %2$s %3$s at %4$s" -#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" +#~ msgid "%1$s karate chop %4$s" +#~ msgstr "%1$s 가라테 당수 %4$s" -#, fuzzy -#~ msgid "%1$s use %2$s %3$s to wrap up %4$s" -#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" +#~ msgid "%1$s karate chops %4$s" +#~ msgstr "%1$s 가라테 당수 %4$s" -#, fuzzy -#~ msgid "%1$s uses %2$s %3$s to wrap up %4$s" -#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" +#~ msgid "" +#~ "Aikido is a Japanese martial art focused on self-defense, while " +#~ "minimizing\n" +#~ "injury to the attacker. It uses defense throws and disarms. Damage done\n" +#~ "while using this technique is halved, but pain inflicted is doubled." +#~ msgstr "" +#~ "합기도는 일본에서 유래된 호신술로, 공격자의 부상을 최소화하는 데 초점을 둡" +#~ "니다. 방어를 위한 던지기와 무장 해제 기술을 사용합니다.\n" +#~ "합기도를 사용하면 공격력은 절반이 되지만, 고통은 두 배가 됩니다." -#, fuzzy -#~ msgid "%1$s use %2$s %3$s to sweep %4$s" -#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" +#~ msgid "aikido" +#~ msgstr "합기도" -#, fuzzy -#~ msgid "%1$s uses %2$s %3$s to sweep %4$s" -#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" +#~ msgid "%1$s feint at %4$s" +#~ msgstr "%1$s 속이기를 사용하다 %4$s" -#, fuzzy -#~ msgid "%1$s elbow %4$s" +#~ msgid "%1$s feints at %4$s" +#~ msgstr "%1$s 속이기 %4$s" + +#~ msgid "%1$s throw %4$s" #~ msgstr "%1$s throw %4$s" -#, fuzzy -#~ msgid "%1$s elbows %4$s" +#~ msgid "%1$s throws %4$s" #~ msgstr "%1$s throws %4$s" -#, fuzzy -#~ msgid "%1$s flying knees %4$s" -#~ msgstr "%1$s 가로베기 %4$s" +#~ msgid "%1$s disarm %4$s" +#~ msgstr "%1$s disarm %4$s" -#, fuzzy -#~ msgid "%1$s surprise attack %4$s" -#~ msgstr "%1$s 반격 %4$s" +#~ msgid "%1$s disarms %4$s" +#~ msgstr "%1$s 무장해제 %4$s" -#, fuzzy -#~ msgid "%1$s side-kicks %4$s" -#~ msgstr "%1$s 회전 발차기 %4$s" +#~ msgid "" +#~ "Judo is a martial art that focuses on grabs and throws, both defensive " +#~ "and\n" +#~ "offensive. It also focuses on recovering from throws; while using judo, " +#~ "you\n" +#~ "will not lose any turns to being thrown or knocked down." +#~ msgstr "" +#~ "유도는 잡기와 던지기에 특화되었으며, 둘 다 공수양면을 수행할 수 있습니" +#~ "다.\n" +#~ "던지기에서 다시 복귀하는 것에 초점을 두고 있으며, 유도를 사용하는 중에는 " +#~ "던지기나 쓰러지는 것으로 인한 턴 손실이 없습니다." -#, fuzzy -#~ msgid "%1$s sweep-kicks %4$s" -#~ msgstr "%1$s 회전 발차기 %4$s" +#~ msgid "judo" +#~ msgstr "유도" -#, fuzzy -#~ msgid "24 hour time" -#~ msgstr "24 시간 단위 표시" +#~ msgid "%1$s grab %4$s" +#~ msgstr "%1$s 잡다 %4$s" -#~ msgid "%s %s" -#~ msgstr "%s %s" +#~ msgid "%1$s grabs %4$s" +#~ msgstr "%1$s 잡다 %4$s" #~ msgid "" -#~ "The massive frame of this weapon belies its monstrous power and a draw " -#~ "weight at the edge of human capability. The immense strain that this bow " -#~ "puts on the user comes at a drastic cost of accuracy and rate of fire, " -#~ "but the power and range rewarded is unparalleled." +#~ "Though tai chi is often seen as a form of mental and physical exercise, " +#~ "it is\n" +#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " +#~ "the\n" +#~ "force of an attack makes your Perception decrease damage further on a " +#~ "block." #~ msgstr "" -#~ "이 활은 거대한 활몸을 가지고 있어서 인간이 낼수 있는 최대 한계의 엄청난 파" -#~ "괴력과 드로우 웨이트(활을 당기는데 필요한 힘)를 가지고 있습니다. 당긴 상태" -#~ "로 유지하는데 필요한 힘이 극도로 높기 때문에 정확도와 발사속도가 극단적으" -#~ "로 낮지만, 살상력과 사거리는 타의 추종을 불허합니다." +#~ "태극권은 정신수양과 육체단련을 위한 것으로 보이지만 엄연히 무술이며 자기방" +#~ "어에 초점을 두고 있습니다. 방어시 본인의 지각능력에 비례해 방어력이 높아집" +#~ "니다." -#~ msgid "65kg bow" -#~ msgstr "65kg 활(bow)" +#~ msgid "tai chi" +#~ msgstr "태극권" -#~ msgid "" -#~ "Among the most distinctive things about this bow are the curled arms that " -#~ "turn away from the archer at the ends. Due to high workmanship, the high " -#~ "draw weight is much more efficiently transferred into throwing the arrow. " -#~ "The strain does however put a great deal of strain onto the user, " -#~ "lowering both accuracy and rate of fire." -#~ msgstr "" -#~ "이 활의 가장 특이한 점은 활 모양이 역으로 휘어져 있다는것입니다. 실력 좋" -#~ "은 장인이 만든 덕분에 강력한 드로우 웨이트(활을 당기는데 필요한 힘)에서 나" -#~ "오는 힘을 좀더 효율적으로 화살에 전달합니다. 하지만 시위를 당긴 상태로 유" -#~ "지하는 힘이 매우 크기 때문에 정확도와 발사 속도가 낮습니다." +#~ msgid "%1$s strike %4$s" +#~ msgstr "%1$s 공격 %4$s" -#~ msgid "50kg bow" -#~ msgstr "50kg 활(bow)" +#~ msgid "%1$s strikes %4$s" +#~ msgstr "%1$s 공격 %4$s" #~ msgid "" -#~ "A bow with a draw strength rarely seen in modern day. The bow's power is " -#~ "akin to those of big game hunters in the safari. However, due to its draw " -#~ "weight, the draw time is slower, and the strain of the draw hinders " -#~ "accuracy." +#~ "A dance-like style with its roots in Brazilian slavery, capoeira is " +#~ "focused\n" +#~ "on fluid movement and sweeping kicks. Moving a tile will boost attack " +#~ "and\n" +#~ "dodge; attacking boosts dodge, and dodging boosts attack." #~ msgstr "" -#~ "현대에는 거의 사용하지 않는 높은 드로우 웨이트(활을 당기는데 필요한 힘)를 " -#~ "가진 활입니다. 사파리에 있는 큰 동물을 사냥하는데 충분한 힘을 가지고 있습" -#~ "니다. 하지만 워낙 드로우 웨이트가 높기 때문에 당기는데 필요한 시간이 오래 " -#~ "걸립니다. 또한 유지하는데 필요한 힘 또한 커서 정확도가 낮습니다." +#~ "춤을 추는 것 같은 카포에라는 브라질 노예들에 의해서 만들어졌으며\n" +#~ "유연한 동작과 쓰는듯한 발차기가 핵심입니다.\n" +#~ "한 타일을 움직이면 공격과 회피가 증가 하며,\n" +#~ "공격을 하면 회피력 증가, 회피시는 공격력이 증가합니다." -#~ msgid "40kg bow" -#~ msgstr "40kg 활(bow)" +#~ msgid "capoeira" +#~ msgstr "카포에이라" -#~ msgid "" -#~ "A bow that uses a set of pulleys to take the strain off the user when a " -#~ "bow is fully drawn to provide better accuracy. This does not mean however " -#~ "that the draw weight on these must be less than a bow with similar draw " -#~ "weight." -#~ msgstr "" -#~ "2개의 도르래가 달려있어서 최대한 당겼을때 유지하는 힘을 상당히 줄여 높은 " -#~ "정확도를 가진 활 입니다. 그러나 드로우 웨이트(활을 당기는데 필요한 힘)가 " -#~ "다른 활보다 작은건 아닙니다." +#~ msgid "%1$s bluff %4$s" +#~ msgstr "%1$s 허풍 %4$s" -#~ msgid "30kg bow compound" -#~ msgstr "30kg 컴파운드 보우(bow compound)" +#~ msgid "%1$s bluffs %4$s" +#~ msgstr "%1$s 허풍 %4$s" -#~ msgid "" -#~ "With a draw weight slightly above what professional users use, this bow " -#~ "can take down medium game, and even large game with enough skill." -#~ msgstr "" -#~ "전문적인 사용자 초기 수준의 드로우 웨이트(활을 당기는데 필요한 힘)를 가진 " -#~ "이 활은 중간 크기의 동물을 사냥할수 있고 숙련된 사용자가 사용하면 대형 크" -#~ "기의 동물도 사냥할수 있습니다." +#~ msgid "%1$s low kick %4$s" +#~ msgstr "%1$s 로우킥 %4$s" -#~ msgid "30kg bow" -#~ msgstr "30kg 활(bow)" +#~ msgid "%1$s low kicks %4$s" +#~ msgstr "%1$s 로우킥 %4$s" -#~ msgid "" -#~ "A bow with a semi-powerful draw. Its relatively low draw weight gives a " -#~ "good draw speed, as well as precision for lack of strain on the user when " -#~ "the bow is fully drawn." -#~ msgstr "" -#~ "당기는데 어느정도 힘이 필요한 활입니다. 드로우 웨이트(활을 당기는데 필요" -#~ "한 힘)가 비교적 적은편에 속하기 때문에 당기는 속도가 빠르며 최대한 당겨도 " -#~ "팔에 부담이 적기 때문에 비교적 정확합니다." +#~ msgid "%1$s spin and hit %4$s" +#~ msgstr "%1$s spin and hit %4$s" -#~ msgid "20kg_bow" -#~ msgstr "20kg 활(bow)" +#~ msgid "%1$s spins and hits %4$s" +#~ msgstr "%1$s 회전공격 %4$s" -#~ msgid "" -#~ "Made using the most rudimentary knowledge of bows, this short and weak " -#~ "bow is just enough to take down small game in a shot or two." -#~ msgstr "" -#~ "활에 대한 가장 기초적인 지식을 사용해서 만든 활입니다. 이 짧고 약한 활은 " -#~ "작은 동물을 사냥하기엔 충분합니다." +#~ msgid "%1$s spin-kick %4$s" +#~ msgstr "%1$s 회전 발차기 %4$s" -#~ msgid "10kg bow" -#~ msgstr "10kg 활(bow)" +#~ msgid "%1$s spin-kicks %4$s" +#~ msgstr "%1$s 회전 발차기 %4$s" + +#~ msgid "krav maga" +#~ msgstr "크라브마가" + +#~ msgid "%1$s jab %4$s" +#~ msgstr "%1$s 잽 %4$s" + +#~ msgid "%1$s jabs %4$s" +#~ msgstr "%1$s 잽 %4$s" + +#~ msgid "%1$s counter-attack %4$s" +#~ msgstr "%1$s 반격 %4$s" + +#~ msgid "%1$s counter-attacks %4$s" +#~ msgstr "%1$s 반격 %4$s" #~ msgid "" -#~ "An object that looks like a bow from afar, but closer inspection will " -#~ "reveal its simple nature. This is a bow someone with absolutely no " -#~ "knowledge of bows would make. Solely based on popular depictions from " -#~ "movies and video games, this object merely tries to look and act like a " -#~ "bow, nothing more." +#~ "Also referred to as the \"Art of 8 Limbs,\" Muay Thai is a popular " +#~ "fighting\n" +#~ "technique from Thailand that uses powerful strikes. It does extra damage\n" +#~ "against large or strong opponents." #~ msgstr "" -#~ "멀리서 보면 활처럼 생겼지만 가까이 살펴보면 활이 아닌것이 보입니다. 이 활 " -#~ "같은 것은 분명히 활에 대해 아무런 지식이 없는 사람이 만든것입니다. 컴퓨터 " -#~ "게임이나 영화에서 본 지식만으로 만들어져서 활처럼 생기고 활과 비슷하게 작" -#~ "동하지만 그뿐입니다." +#~ "\"여덟 관절의 예술\"이라고도 알려진 무에 타이는 태국에서 발생했으며 강력" +#~ "한 공격을 사용해, 싸움의 기술로 매우 인기 있습니다.\n" +#~ "덩치가 큰 상대와 강한 상대에게 추가 피해를 줍니다." -#~ msgid "bow-like_object" -#~ msgstr "활같이 생긴 물체(bow-like_object)" +#~ msgid "muay thai" +#~ msgstr "무에타이" + +#~ msgid "%1$s slap %4$s" +#~ msgstr "%1$s 손바닥치기 %4$s" + +#~ msgid "%1$s slaps %4$s" +#~ msgstr "%1$s 손바닥치기 %4$s" + +#~ msgid "%1$s power-kick %4$s" +#~ msgstr "%1$s 강한 발차기 %4$s" + +#~ msgid "%1$s power-kicks %4$s" +#~ msgstr "%1$s 강한 발차기 %4$s" #~ msgid "" -#~ "A six-foot wooden bow that fires feathered arrows. This takes a fair " -#~ "amount of strength to draw. Arrows fired from this weapon have a good " -#~ "chance of remaining intact for re-use. It requires 10 strength to fire" +#~ "Ninjutsu is a martial art and set of tactics used by ninja in feudal " +#~ "Japan.\n" +#~ "It focuses on rapid, precise, silent strikes. Ninjutsu is entirely " +#~ "silent.\n" +#~ "It also provides small combat bonuses the turn after moving a tile." #~ msgstr "" -#~ "깃털을 사용한 화살을 쏘는 1.8m 길이의 목제 활입니다. 화살을 쏘려면 상당한 " -#~ "힘을 가지고 있어야합니다. 이 활로 쏜 화살은 부서지지 않을 확률이 꽤 있습니" -#~ "다. 사용하는데 10 포인트의 힘이 필요합니다." +#~ "인술은 봉건시대 일본의 무술이며 전술로 사용되기도 했습니다.\n" +#~ "빠르고, 정확하고, 조용한 공격에 초점을 두고 있습니다. 인술은 소리를 내지 " +#~ "않습니다.\n" +#~ "또한 한 타일을 움직일 때마다 소량의 전투 보너스를 줍니다." + +#~ msgid "ninjutsu" +#~ msgstr "닌자술" #~ msgid "" -#~ "A bow with wheels that fires high velocity arrows. Weaker people can use " -#~ "compound bows more easily. Arrows fired from this weapon have a good " -#~ "chance of remaining intact for re-use. It requires 8 strength to fire" +#~ "Taekwondo is the national sport of Korea, and was used by the South " +#~ "Korean\n" +#~ "army in the 20th century. Focused on kicks and punches, it also includes\n" +#~ "strength training; your blocks absorb extra damage the stronger you are." #~ msgstr "" -#~ "도르레가 달려 화살을 고속으로 발사하는 활입니다. 힘이 약한 사람이 사용하기" -#~ "에 좀 더 편합니다. 이 활로 쏜 화살은 부서지지 않을 확률이 높습니다. 힘 8 " -#~ "포인트가 필요합니다." +#~ "태권도는 한국의 국기이며, 20세기 부터는 한국군에서도 사용했습니다.\n" +#~ "발차기와 주먹에 초점을 두고 있으며 신체단련도 포함됩니다.\n" +#~ "방어시 당신보다 강한 상대의 공격을 보통보다 더 많이 흡수합니다." -#~ msgid "Disinfectant" -#~ msgstr "소독약(disinfectant)" +#~ msgid "taekwondo" +#~ msgstr "태권도" -#~ msgid "Bandage" -#~ msgstr "붕대" +#~ msgid "%1$s brutally kick %4$s" +#~ msgstr "%1$s 공격적 발차기 %4$s" -#~ msgid "hazmatbot" -#~ msgstr "험지 로봇(hazmatbot)" +#~ msgid "%1$s brutally kicks %4$s" +#~ msgstr "%1$s 공격적 발차기 %4$s" -#~ msgid "molebot" -#~ msgstr "두더쥐 로봇(molebot)" +#~ msgid "tiger style" +#~ msgstr "맹호권" -#~ msgid "copbot" -#~ msgstr "경찰 로봇(copbot)" +#~ msgid "crane style" +#~ msgstr "학권" -#~ msgid "tripod robot" -#~ msgstr "세발 로봇(tripod robot)" +#~ msgid "%1$s hand-peck %4$s" +#~ msgstr "%1$s 손 쪼기 %4$s" -#~ msgid "secubot" -#~ msgstr "보안로봇(secubot)" +#~ msgid "%1$s hand-pecks %4$s" +#~ msgstr "%1$s 손 쪼기 %4$s" -#~ msgid "Gozu" -#~ msgstr "고주(Gozu)" +#~ msgid "%1$s swiftly jabs %4$s" +#~ msgstr "%1$s 재빠른 잽 %4$s" -#~ msgid "Mi-go" -#~ msgstr "미고(Mi-go)" +#~ msgid "%1$s strike %4$s with leopard fist" +#~ msgstr "%1$s 표범주먹 공격 %4$s" -#~ msgid "gelatinous blob" -#~ msgstr "젤리 덩어리(gelatinous blob)" +#~ msgid "snake style" +#~ msgstr "사권" -#~ msgid "Thing" -#~ msgstr "무언가(Thing)" +#~ msgid "%1$s snakebite %4$s" +#~ msgstr "%1$s 뱀물기 %4$s" -#~ msgid "Amigara horror" -#~ msgstr "아미가라 공포체(Amigara horror)" +#~ msgid "%1$s snakebites %4$s" +#~ msgstr "%1$s 뱀물기 %4$s" -#~ msgid "black widow" -#~ msgstr "검은과부거미(black widow)" +#~ msgid "%1$s writhe free from %4$s" +#~ msgstr "%1$s 비틀어서 %4$s 빠져나오기" -#~ msgid "trap door spider" -#~ msgstr "문짝거미(trap door spider)" +#~ msgid "%1$s writhes free from %4$s" +#~ msgstr "%1$s 비틀어서 %4$s 빠져나오기" -#~ msgid "web spider" -#~ msgstr "웹 거미(web spider)" +#~ msgid "dragon style" +#~ msgstr "용권" -#~ msgid "crawler mutant" -#~ msgstr "기어다니는 뮤턴트(crawler mutant)" +#~ msgid "%1$s use dragon strike on %4$s" +#~ msgstr "%1$s 용머리 치기 %4$s" -#~ msgid "sewer fish" -#~ msgstr "하수구 물고기(sewer fish)" +#~ msgid "%1$s uses dragon strike on %4$s" +#~ msgstr "%1$s 용머리 치기 %4$s" -#~ msgid "one-eyed mutant" -#~ msgstr "외눈 돌연변이(one-eyed mutant)" +#~ msgid "centipede style" +#~ msgstr "지네권" -#~ msgid "spore" -#~ msgstr "포자(spore)" +#~ msgid "%1$s swiftly hits %4$s" +#~ msgstr "%1$s 재빠른 공격 %4$s" -#~ msgid "young fungaloid" -#~ msgstr "어린 진균체(young fungaloid)" +#~ msgid "scorpion style" +#~ msgstr "전갈권" -#~ msgid "queen triffid" -#~ msgstr "여왕 트리피드(queen triffid)" +#~ msgid "%1$s strike %4$s with spincer fist" +#~ msgstr "%1$s 스펜서 주먹 공격%4$s" -#~ msgid "creeping vine" -#~ msgstr "크리퍼 줄기(creeping vine)" +#~ msgid "%1$s strikes %4$s with spincer fist" +#~ msgstr "%1$s 스펜서 주먹 공격%4$s" -#~ msgid "vinebeast" -#~ msgstr "줄기 괴물(vinebeast)" +#~ msgid "lizard style" +#~ msgstr "도마뱀권" -#~ msgid "young triffid" -#~ msgstr "어린 트리피드(young triffid)" +#~ msgid "toad style" +#~ msgstr "두꺼비권" -#~ msgid "child zombie" -#~ msgstr "아기 좀비(child zombie)" +#~ msgid "zui quan" +#~ msgstr "취권" -#~ msgid "master zombie" -#~ msgstr "마스터 좀비(master zombie)" +#~ msgid "7: %s" +#~ msgstr "7: %s" -#~ msgid "fungal insect" -#~ msgstr "진균체 감염 곤충(fungal insect)" +#~ msgid "8: Exit" +#~ msgstr "8: 나가기" -#~ msgid "A small woodland animal." -#~ msgstr "작은 초원 동물입니다." +#~ msgid "Stop Bleeding" +#~ msgstr "지혈" -#~ msgid "5.7mm caliber retool" -#~ msgstr "5.7mm 총열 부품(5.7mm retool)" +#~ msgid "You stopped the bleeding." +#~ msgstr "피 흘리는것을 멈췄다." -#~ msgid "4.6mm caliber retool" -#~ msgstr "4.6mm 총열 부품(4.6mm retool)" +#~ msgid "Clean Wound" +#~ msgstr "상처 닦기" + +#~ msgid "You clean the bite wound." +#~ msgstr "물린 상처를 닦았습니다." + +#~ msgid "You disinfect the bite wound." +#~ msgstr "물린 상처를 소독했습니다." + +#~ msgid "Put the dog food" +#~ msgstr "개 먹이를 넣습니다." + +#~ msgid "Light" +#~ msgstr "빛" + +#~ msgid "You don't have enough batteries!" +#~ msgstr "배터리가 부족합니다!" + +#~ msgid "You don't have enough battery power to purify all the water." +#~ msgstr "정수할만한 전력이 없다." + +#~ msgid "It's %d squares to the %s" +#~ msgstr "%d 타일 (%s 까지)" + +#~ msgid "The door swings open..." +#~ msgstr "문이 부드럽게 열렸다..." + +#~ msgid "Siphon from" +#~ msgstr "다음에서 빼냅니다" + +#~ msgid "Drill" +#~ msgstr "드릴" + +#~ msgid "You set the boobytrap up and activate the grenade." +#~ msgstr "부비트랩을 설치하고 신관을 작동시켰다." + +#~ msgid "You set the bubblewrap on the ground, ready to be popped." +#~ msgstr "바닥에 뽁뽁이 포장지를 설치했다. 뽁뽁 준비는 끝났다." + +#~ msgid "Bury the landmine?" +#~ msgstr "지뢰를 매설합니까?" + +#~ msgid "You bury the landmine." +#~ msgstr "지뢰를 묻었습니다." + +#~ msgid "You set the landmine." +#~ msgstr "지뢰를 설치했습니다." + +#~ msgid "Place the turret" +#~ msgstr "터렛 설치" + +#~ msgid "Cut up metal" +#~ msgstr "금속 잘라내기" + +#~ msgid "Put up the shelter" +#~ msgstr "피난처 설치" #~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " -#~ "pulled, the crossbow fires. Only a single round can be used, after which " -#~ "the trap is disabled." +#~ "You neatly sever all of the veins\n" +#~ "and arteries in your body. Oh wait,\n" +#~ "Never mind." #~ msgstr "" -#~ "인계철선에 장전된 쇠뇌를 연결한 덫입니다. 줄이 당겨지면 쇠뇌가 발사됩니" -#~ "다. 십자궁에는 단 한발만 장전 가능하기 때문에 한번만 작동합니다." +#~ "솜씨 좋게 몸에 있는 모든\n" +#~ "혈관과 동맥을 잘라냅니다. 오 잠깐만,\n" +#~ "아무것도 아닙니다." + +#~ msgid "You managed to stop the bleeding." +#~ msgstr "출혈을 막는데 성공했습니다." + +#~ msgid "You couldn't stop the bleeding." +#~ msgstr "출혈을 멈출수가 없습니다." + +#~ msgid "That isn't knife!" +#~ msgstr "이건 나이프가 아닙니다!" #~ msgid "" -#~ "A small blue light glowstick, bend it to break the glass cylinder inside " -#~ "and start the reaction to produce a very small amount of light." +#~ "Powerful heatsinks supermaterials are woven into your flesh. While " +#~ "powered, this system will prevent heat damage up to 2000 degrees " +#~ "fahrenheit. Note that this does not affect your internal temperature." #~ msgstr "" -#~ "작은 청색광 막대기입니다. 꺾어서 내부의 유리관을 깨면, 화학반응을 일으켜" -#~ "서 아주 약한 빛을 냅니다." +#~ "강력한 방열 초전도체가 피부에 삽입되어 있습니다. 전력이 공급되면, 약 1100 " +#~ "도 까지의 열을 냉각시킬수 있습니다, 단 신체만 냉각시키는걸 명심해야합니다." + +#~ msgid "long underwear" +#~ msgstr "긴 속옷(long underwear)" #~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." +#~ "A long cotton dress. Difficult to move in and lacks any storage space." #~ msgstr "" -#~ "방사선 방호 필름으로 봉인된 방사선 노출 탐지용 배지.\r\n" -#~ "사용하면 활성화시킵니다." +#~ "면으로 된 긴 드레스 입니다. 입고 움직이기가 어렵고 저장 공간이 없습니다." -#~ msgid "You %4$s the %1$s into %2$i %3$s." -#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." -#~ msgstr[0] "%4$s %1$s을(를) %2$i %3$s(으)로 잘랐습니다." +#~ msgid "" +#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " +#~ "will provide excellent protection against ambient radiation." +#~ msgstr "" +#~ "꽤 불편하지만 이걸 입으면 방사선에 대해 훌륭한 방호력을 갖게 됩니다." -#~ msgid "Use your pick lock" -#~ msgstr "자물쇠따개를 사용하세요." +#~ msgid "plate mail" +#~ msgstr "철판 갑옷(plate mail)" -#~ msgid "You add a %s location to your map." -#~ msgstr "%s에 대한 장소를 지도에 추가했습니다." +#~ msgid "A thin cotton jacket. Good for brisk weather." +#~ msgstr "얇은 면 상의 입니다. 상쾌한 날씨에 입기 좋습니다." -#~ msgid "You can't find a hospital near your location." -#~ msgstr "이 지역에선 병원을 찾을 수 없습니다." +#~ msgid "A padded coat with deep pockets. Very warm." +#~ msgstr "깊은 주머니가 달린 천이 덧대여진 코트 입니다. 아주 따뜻합니다." -#~ msgid "" -#~ "Once you have a loaded gun wielded, you can fire it. Press the 'f' key " -#~ "to\n" -#~ "fire a single shot. With many guns, you can fire a burst by pressing " -#~ "'F'.\n" -#~ "You'll automatically target the last monster you shot at, or the closest\n" -#~ "monster to you. You can change your target with the movement keys, or " -#~ "cycle\n" -#~ "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " -#~ "hit\n" -#~ "the escape key." +#~ msgid "plate armor boots" +#~ msgstr "플레이트 부츠(plate armor boots)" + +#~ msgid "plate armor gauntlets" +#~ msgstr "플레이트 건틀렛(plate armor gauntlets)" + +#~ msgid "light plate mail" +#~ msgstr "경량 플레이트 메일(light plate mail)" + +#~ msgid "An ornamental suit of armor." +#~ msgstr "장식이 붙어 있는 갑옷입니다." + +#~ msgid "" +#~ "A brass-jacketed variant of the .40 Smith & Wesson round. This increases " +#~ "penetration slightly at the cost of reduced expansion." #~ msgstr "" -#~ "일단 장전한 무기를 장비하면, 발사할 수 있게 됩니다. 'f' 키로 단발사격을 합" -#~ "니다.\n" -#~ "몇 가지 종류의 무기는 연발 사격이 가능한데, 'F' 키로 연발 사격이 가능합니" -#~ "다.\n" -#~ "일단 키를 누르면 자동적으로 가장 가까운 괴물 혹은 마지막으로 쏜 것에 조준" -#~ "이 됩니다.\n" -#~ "이동 키를 통해서 목표를 바꿀 수 있습니다. 혹은 '<' 와 '>' 키를 눌러서 이동" -#~ "할 수도 있죠.\n" -#~ "이 상태에서 발사하려면 'f' 혹은 '.' 키를 누르면 됩니다. ESC 키로 취소할 " -#~ "수 있습니다." +#~ "탄두가 코팅된 .44 구경 스미스앤웨슨 탄입니다. 관통력이 약간 증가되었지만 " +#~ "살상력도 약간 줄었습니다." #~ msgid "" -#~ "The Examine command is useful for grabbing items off window frames, " -#~ "around\n" -#~ "corners, etc. It's also used for interacting with a few terrain types.\n" -#~ "Interactive terrain is usually designated with a '6' symbol." +#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " +#~ "feet of concrete." #~ msgstr "" -#~ "살펴보기 명령은 창문틀 혹은 진열대 같은 곳의 물건을 주울 때 유용합니다.\n" -#~ "또한 몇 가지 지형 종류를 작동시키는데도 사용됩니다.\n" -#~ "일반적으로 작동 가능한 지형은 '6' 으로 표시됩니다." +#~ "60mm 대전차 고폭탄입니다. 60cm 두께의 콘크리트도 파괴할 수 있습니다." #~ msgid "" -#~ "The item you just picked up is a firearm! Guns are very powerful weapons " -#~ "but\n" -#~ "they require ammunition. Firearms have many special attributes. Most\n" -#~ "modify the damage done by their ammunition. They also have dispersion, " -#~ "which\n" -#~ "affects their chance to hit. Some guns are semi-automatic, while others " -#~ "can\n" -#~ "fire a burst. Some firearms (mainly bows and other muscle-powered " -#~ "weapons)\n" -#~ "have a range, which is added on top of the ammo's range when firing." +#~ "Will you be able to place the arrow right into bull's eye? It is not that " +#~ "easy, but once you know how it's done, you will have a lot of fun with " +#~ "archery." #~ msgstr "" -#~ "방금 주운 물건은 총기입니다! 총기는 탄약이 필요하긴 하지만, 매우 강력한\n" -#~ "무기입니다. 총기는 몇 가지 특별한 수치가 있는데, 우선 살상력은 사용하는 \n" -#~ "탄약에 많은 영향을 받습니다. 또한 분산도는 명중률에 영향을 미칩니다.\n" -#~ "총기는 단발 사격만 가능한 것도 있고 연발 사격도 가능한 것, 연발만 가능한 " -#~ "것도\n" -#~ "있습니다. 활과 근력을 사용하는 몇몇 무기는 사거리가 있으며, 사거리는\n" -#~ "사격할 때 위에 표시됩니다." +#~ "정중앙에 화살을 박아 넣을수 있나요? 쉽지는 않습니다. 하지만 하는 방법을 알" +#~ "게 되면, 활쏘는것에서 많은 재미를 느낄수 있을겁니다." #~ msgid "" -#~ "The item you just picked up is a tool! To activate a tool, press 'a'. " -#~ "Some\n" -#~ "tools have a set charge, which can be reloaded once depleted. Other are\n" -#~ "single-use items, and still others are reusable." +#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " +#~ "does less damage and is less accurate. Stands a good chance of remaining " +#~ "intact once fired." #~ msgstr "" -#~ "방금 주운 물건은 도구입니다! 도구를 사용하려면 'a' 키를 누르면 됩니다.\n" -#~ "몇몇 도구는 충전량을 가지고 있는데, 사용하면 다시 충전이 가능합니다.\n" -#~ "몇 가지는 일회용인 경우도 있지만, 대부분 다시 사용할 수 있습니다." +#~ "나무를 날카롭게 깎아 만든 볼트이다. 철제 볼트에 비해 가볍지만, 위력도 약하" +#~ "고 정확도도 떨어진다. 발사된 후 회수할 수 있을 가능성이 높다." -#~ msgid "The corpse is now thoroughly pulped." -#~ msgstr "그 시체는 완전히 피떡이 되었습니다." +#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." +#~ msgstr "마시지 마세요. 암모니아와 섞으면 독성 가스가 생성됩니다." -#~ msgid "You damage the %s!" -#~ msgstr "%s에게 피해를 입혔습니다!" +#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." +#~ msgstr "마시지 마세요. 표백제와 섞으면 독성 가스가 생성됩니다." -#~ msgid "You greatly damage the %s!" -#~ msgstr "%s에게 엄청난 피해를 입혔습니다!" +#~ msgid "beef jerky" +#~ msgstr "소고기 육포(beef jerky)" -#~ msgid "Study %s?" -#~ msgstr "%s을(를) 공부합니까?" +#~ msgid "carrot" +#~ msgstr "당근(carrot)" -#~ msgid "The sludge is thick and sticky." -#~ msgstr "두껍고 끈적거리는 진흙입니다." +#~ msgid "cooked spaghetti" +#~ msgstr "요리 된 스파게티(cooked spaghetti)" -#~ msgid "" -#~ "Speed -40%\n" -#~ "You can feel the tiny spores sinking directly into your flesh." -#~ msgstr "" -#~ "속도 - 40%\n" -#~ "작은 포자가 살갗 속으로 직접 들어가는게 느껴집니다." +#~ msgid "sardines" +#~ msgstr "정어리(sardines)" -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s는(은) 온 몸을 긁기 시작합니다!" +#~ msgid "tuna fish" +#~ msgstr "참치(tuna fish)" -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s는(은) 온 몸을 긁기 시작합니다!" +#~ msgid "canned apple slices" +#~ msgstr "사과 조각 통조림(canned apple slices)" -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "벌레들이 피부 밑을 기어다닙니다!" +#~ msgid "" +#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " +#~ "color." +#~ msgstr "" +#~ "보존처리된 사과가 들어있는 밀폐된 유리병 입니다. 흐늘흐늘거리고 색을 잃었" +#~ "습니다." -#~ msgid "Activate your bio lockpick" -#~ msgstr "바이오닉 락픽을 발동시켰습니다" +#~ msgid "apple slices" +#~ msgstr "사과 조각(apple slices)" -#~ msgid "create an EMP" -#~ msgstr "EMP를 만들었습니다" +#~ msgid "" +#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" +#~ msgstr "신선함과 모양을 보존하기 위해 설탕 시럽을 입힌 사과 조각 입니다." -#~ msgid "Your raincoat protects you from the acid rain." -#~ msgstr "비옷이 산성비를 막아줍니다." +#~ msgid "A listening tool. Use it to listen to things. Closely." +#~ msgstr "무언가를 자세히 듣는데 사용되는 도구입니다." -#~ msgid "Your raincoat protects you from the acidic drizzle." -#~ msgstr "비옷이 산성 가랑비를 막아줍니다." +#~ msgid "bubblewrap" +#~ msgstr "뽁뽁이(bubblewrap)" -#~ msgid "" -#~ "~ is a terrain symbol that indicates water. From a water source like " -#~ "this,\n" -#~ "you can fill any containers you might have. Step onto the water, then " -#~ "press\n" -#~ "the pickup key (',' or 'g'), then select a watertight container to put " -#~ "the\n" -#~ "water into." +#~ msgid "A tool for welding metal pieces together. Useful for construction." #~ msgstr "" -#~ "'~' 는 물을 가리키는 지형 표시입니다. 물을 얻을 수 있습니다.\n" -#~ "병같은 것이 있으면 물을 채울 수 있습니다. 물에 가까이 접근해서\n" -#~ "',' 혹은 'g' 같은 줍는 키를 누른 후, 물을 담을 수 있는 용기를 선택하면 됩" -#~ "니다." +#~ "철 조각들을 하나로 이어붙일 수 있는 도구입니다. 제작, 건설에 유용합니다." #~ msgid "" -#~ "That yellow > next to you is a staircase leading down. To go downtairs, " -#~ "step\n" -#~ "onto the staircase and press the '>' key. Similarly, a yellow < is " -#~ "stairs\n" -#~ "leading up, and can be followed with the '<' key." +#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " +#~ "sure footing." #~ msgstr "" -#~ "그 노란 > 표시는 아래로 내려가는 계단을 뜻합니다. 내려가려면 계단 위로 간 " -#~ "다음\n" -#~ "'>' 키를 누르면 됩니다. 비슷하게 노란 < 표시는 위로 올라가는 계단이죠.\n" -#~ "올라가려면 역시 계단으로 간 후 '<' 키를 누르면 됩니다." +#~ "당신은 일반인 보다 빨리 뛸수 있습니다. 안정된 지면위에서 속도에 15%% 보너" +#~ "스를 받습니다." -#~ msgid "" -#~ "After firing your gun, you will probably notice a Recoil alert in the " -#~ "lower\n" -#~ "right. Generally speaking, the more damaging the ammo, the worse the " -#~ "recoil.\n" -#~ "Recoil severely reduces your chance to hit, but you can eliminate recoil " -#~ "by\n" -#~ "pausing ('.') for a turn or moving normally. High strength reduces " -#~ "recoil,\n" -#~ "so weak characters might want to stick to .22 or 9mm guns." -#~ msgstr "" -#~ "사격한 후, 오른쪽 하단에 반동 경고가 보일겁니다. 간단히 말해서 사용하는 탄" -#~ "약이\n" -#~ "살상력이 높을수록, 반동은 심해집니다. 반동은 명중률을 상당히 감소시키지" -#~ "만,\n" -#~ "'.' 키로 잠시 기다리거나 그냥 아무 곳이나 움직이는 것으로 반동을 제거할 " -#~ "수 있습니다.\n" -#~ "힘이 세다면 반동이 감소하기 때문에, 힘이 약한 캐릭터는 .22 구경 혹은 9mm " -#~ "탄을\n" -#~ "사용하는 총 정도만 사용할 수 있습니다." +#~ msgid "You're just generally quick! You get a 10%% bonus to action points." +#~ msgstr "당신은 일반인 보다 빠르다! 액션 포인트에 10%% 의 보너스를 받는다." -#~ msgid "" -#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " -#~ "using\n" -#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " -#~ "your\n" -#~ "gun, possibly to change ammunition types, press 'U'." -#~ msgstr "" -#~ "무기를 발사하기 위해서는 먼저 'w' 키로 장비를 해야 합니다. 다음에는 \n" -#~ "'r' 키를 눌러 장전해야 합니다. 물론 적합한 탄약이 있어야겠지요. 탄약을 \n" -#~ "총에서 다시 빼내고 싶다면 'U' 키로 뺄 수 있습니다. 탄약 종류를 바꿀 때 유" -#~ "용합니다." +#~ msgid "Android" +#~ msgstr "안드로이드" #~ msgid "" -#~ "It's dark down here! Without a source of light, you'll be limited to " -#~ "seeing\n" -#~ "only one space in any direction. You'll encounter darkness while " -#~ "underground\n" -#~ "or at night. Press '<' to go back upstairs, and look around for a " -#~ "flashlight." +#~ "At some point in the past you had a bionic upgrade installed in your " +#~ "body. You start the game with a power system, and one random bionic " +#~ "enhancement." #~ msgstr "" -#~ "여긴 어둡군요! 빛이 없으면 시야가 제한되어 한 칸밖에 보지 못합니다. 지하" -#~ "로 내려가거나\n" -#~ "밤이 되면 어두워집니다. '<' 키로 다시 올라가거나, 손전등을 찾아야 합니다." +#~ "과거 어느땐가 당신은 바이오닉 업그레이드를 몸속에 설치 했습니다. 한가지 전" +#~ "력 충전 시스템과, 무작위 바이오닉 하나를 가지고 시작합니다." -#~ msgid "" -#~ "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " -#~ "then\n" -#~ "select your flashlight to turn it on." -#~ msgstr "" -#~ "여긴 어둡군요! 운좋게도 손전등이 있습니다. 'a' 키를 누른 후, 손전등을 선택" -#~ "해서 켜세요." +#~ msgid "Shaolin Adept" +#~ msgstr "소림승의 제자" #~ msgid "" -#~ "Hitting a monster will stun it briefly, allowing you to escape or get in\n" -#~ "another attack. Your dexterity and melee skills are used to determine\n" -#~ "whether an attack hits, while strength affects damage." +#~ "You have studied the arts of the Shaolin monks. You start with one of the " +#~ "five animal fighting styles: Tiger, Crane, Leopard, Snake, or Dragon." #~ msgstr "" -#~ "괴물을 공격하는 것에 성공하면 기절시킬 확률이 있습니다. 괴물을 기절시키" -#~ "면\n" -#~ "도망가거나 추가 공격할 기회가 생기죠. 민첩성과 근접 공격 기술로 명중률이\n" -#~ "결정되고, 체력으로 데미지가 결정됩니다." +#~ "당신은 소림승의 무예를 익혔다. 시작할때 다음 다섯가지의 무예중 하나를 가지" +#~ "고 시작한다: 호랑이, 학, 표범, 뱀, 혹은 용." #~ msgid "" -#~ "If you press 'i' and then the letter of your weapon, you'll see its " -#~ "combat\n" -#~ "stats. Bashing damage ignores most armor, but varies greatly and " -#~ "requires\n" -#~ "strength. Cutting damage is a fixed amount, but is blocked by armor. " -#~ "The\n" -#~ "To-hit bonus affects your chances of hitting. The amount of time it takes " -#~ "to\n" -#~ "swing your melee weapon depends on both its size and weight; small, " -#~ "compact\n" -#~ "weapons are the fastest." +#~ "You simply can not carry as much as people with a similar strength could. " +#~ "Your maximum weight carried is reduced by 35%%." #~ msgstr "" -#~ "'i' 키를 누르고 무기의 문자를 누르면 전투 수치를 확인할 수 있습니다.\n" -#~ "타격 데미지는 대부분의 장갑을 무시하지만, 상황에 따라 큰 편차가 생기고\n" -#~ "상당한 힘이 필요합니다. 베기 데미지는 고정된 데미지를 주지만, 장갑을\n" -#~ "관통하지 못합니다. 명중률 보너스는 명중률에 영향을 줍니다.\n" -#~ "근접 무기를 휘두르는데 걸리는 시간은 무기의 크기와 무게에 달렸습니다.\n" -#~ "작은 무기일수록 빠르죠." +#~ "같은 체력을 가지고도 적은 무게의 물건을 운반할수있습니다. 최대 운반 무게" +#~ "가 35%% 줄어듭니다." #~ msgid "" -#~ "When you kill a monster it will often leave behind a corpse. Corpses can " -#~ "be\n" -#~ "important sources of food, but you must Butcher them by standing on the\n" -#~ "corpse and pressing 'B'. You'll need a bladed weapon in your inventory,\n" -#~ "preferably a small, very sharp one. An unskilled butcher may only get a " -#~ "few\n" -#~ "pieces of meat, or none at all. Note that many monsters, such as " -#~ "zombies,\n" -#~ "leave tainted meat, unsuitable for consumption." +#~ "Your head can't take much abuse. Its maximum HP is 20%% lower than usual." #~ msgstr "" -#~ "괴물을 죽이면 대부분 시체가 남습니다. 시체는 중요한 식량 공급원이며, 고기" -#~ "를 얻으려면\n" -#~ "시체 위에서 'B' 키를 누르면 됩니다. 물론 칼붙이를 가지고 있어야 합니다. 작" -#~ "고 날카로우면\n" -#~ "더욱 좋습니다. 고기를 잘라내는 기술이 부족하면 아예 고기를 얻지 못하거나 " -#~ "몇점밖에 잘라내지 \n" -#~ "못합니다. 참고로 좀비같은 괴물들은 오염된 고기를 남기는데, 이는 먹기에 적" -#~ "합하지 않습니다." +#~ "당신의 머리는 충격에 약하다. 머리의 최대 HP 가 일반적인 량보다 20%% 줄어든" +#~ "다." #~ msgid "" -#~ "Taking damage often causes pain. Small amounts of pain are tolerable, " -#~ "but as\n" -#~ "it gets worse your stats will drop and you will move much slower. To " -#~ "reduce\n" -#~ "pain, take painkillers like codeine, or simply wait it out." +#~ "Your whole body can't take much abuse. Its maximum HP is 75%% points " +#~ "lower than usual. Stacks with Glass Jaw. Not for casuals." #~ msgstr "" -#~ "피해를 입으면 고통이 발생합니다. 크지 않은 고통은 참을만 하지만\n" -#~ "심해질수록 능력치가 감소하고 움직이는 속도가 떨어집니다.\n" -#~ "고통을 줄이려면 코데인 같은 진통제를 먹거나, 그냥 기다려야 합니다." +#~ "몸 전체가 타격을 잘 견딜수 없다. 전체 HP 가 보통보다 75%% 낮다. 약한 턱뼈" +#~ "와 중첩된다. 초보자에게 추천하지 않음." #~ msgid "" -#~ "That drug you just took placed an effect on you. To check your effects,\n" -#~ "press '@'. Most only last a short while, while others, like chronic " -#~ "disease,\n" -#~ "last until cured by some other means." +#~ "Your bones are very light. This enables you to run and attack 10%% " +#~ "faster, but also reduces your carrying weight by 20%% and makes bashing " +#~ "attacks hurt a little more." #~ msgstr "" -#~ "방금 먹은 약물의 약효가 들고 있습니다. 현재 상태를 보려면 '@' 키를 누르면 " -#~ "됩니다.\n" -#~ "대부분은 지속시간이 짧지만, 몇몇은 만성화된 질병처럼 다른 방법을 사용해" -#~ "서\n" -#~ "치료하지 않으면 계속 효과를 냅니다." +#~ "당신의 뼈는 매우 가볍다. 공격과 달리기가 10%% 빨라지지만, 가지고 다닐수 있" +#~ "는 무게가 20%% 줄어들고 둔기 공격에 약간 취약해진다." #~ msgid "" -#~ "That drug you just took is a painkiller. Painkillers are very important " -#~ "to\n" -#~ "keep on hand, as pain both penalizes your stats and makes you slower. " -#~ "Be\n" -#~ "careful, as the stronger painkillers can make you woozy, and some are " -#~ "even\n" -#~ "addictive." +#~ "Your legs are extremely limber and fast-moving. You run 30%% faster on " +#~ "flat surfaces." #~ msgstr "" -#~ "지금 주운 약물은 진통제입니다. 진통제를 항상 보유하고 있는게 상당히 중요합" -#~ "니다.\n" -#~ "고통이 심해지면 능력치도 낮아지고, 속도도 느려집니다. 하지만 강력한 진통제" -#~ "는\n" -#~ "몸을 느려지게 하고, 중독성도 대부분 높습니다." +#~ "당신의 다리는 매우 유연하고 빠르게 움직이게 되었다. 평지에서 30%% 더 빨리 " +#~ "움직일 수 있다." #~ msgid "" -#~ "You just drank a bottle of water, reducing your thirst level and reducing " -#~ "the\n" -#~ "water level in the bottle. You'll probably want to drop empty bottles,\n" -#~ "or you might want to save them to refill from a water source later." +#~ "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is " +#~ "very light as a result, enabling you to run and attack 20%% faster, but " +#~ "also frail; you can carry 40%% less, and bashing attacks injure you more." #~ msgstr "" -#~ "방금 물병에서 마신 물은 갈증 수치를 낮춰줍니다. 물을 다 마시면 빈 병을 버" -#~ "릴 수도,\n" -#~ "다른 수원을 찾아서 물을 채워넣을 때까지 가지고 있을 수도 있습니다." +#~ "당신의 뼈는 속이 거의 비어있는, 조류 골조 증후군이다. 따라서 몸이 매우 가" +#~ "벼워졌고, 공격속도와 이동속도에 20%%보너스를 받지만, 허약해지기도 했다. 운" +#~ "반 가능 중량이 40%% 줄고, 둔기 공격에 더 큰 피해를 입는다." -#~ msgid "" -#~ "You just placed a trap. Traps are permanent until set off, and can be " -#~ "an\n" -#~ "important defensive tactic, particularly when sleeping in unsafe " -#~ "territory.\n" -#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." -#~ msgstr "" -#~ "덫을 놓았습니다. 덫은 작동하기 전까지 영구히 존재하며, 또한 방어적인 전술" -#~ "에서\n" -#~ "아주 중요하기도 합니다. 특히 안전하지 못한 곳에서 잠을 청할 때는 더욱요.\n" -#~ "지금 설치한 _ 를 지나가보세요. 걱정은 안하셔도 됩니다. 그냥 뾱뾱이 덫이니" -#~ "까요." +#~ msgid "Your muscles are generally slow to move. You run 10%% slower." +#~ msgstr "당신의 근육은 좀 느리게 움직인다. 이동이 10%% 느려진다." -#~ msgid "" -#~ "You're carrying more volume than you have storage for, which means you " -#~ "are\n" -#~ "carrying some stuff in the crook of your arm or in some other awkward " -#~ "manner.\n" -#~ "While overloaded like this, you will suffer SEVERE encumberment " -#~ "penalties,\n" -#~ "making combat dangerous. Either drop an item, or possibly wield " -#~ "something--\n" -#~ "the object you are wielding does not take up inventory space." -#~ msgstr "" -#~ "현재 가지고 있을수 있는 최대치보다 더 많은 부피를 가지고 있습니다. 손에 물" -#~ "건을 가득\n" -#~ "끌어안거나 다른 이상한 자세가 되었다는 뜻입니다. 이렇게 소유 부피를 초과하" -#~ "면\n" -#~ "상당한 방해도 패널티를 받습니다, 전투가 훨씬 힘들어지죠. 물건을 버리거" -#~ "나,\n" -#~ "아니면 부피가 더 큰 물건을 장비로 선택해서 손에 드는 방법이 있습니다." +#~ msgid "Your muscles are quite slow to move. You run 20%% slower." +#~ msgstr "당신의 근육은 꽤 느리게 움직인다. 이동이 20%% 느려진다." -#~ msgid "" -#~ "You just activated a grenade! You probably want to throw it. To throw " -#~ "an\n" -#~ "item, press 't' and then select the item to throw. The maximum range " -#~ "depends\n" -#~ "on your strength and the object's weight and size. Throwing isn't very " -#~ "good\n" -#~ "in most combat situations, but if you've got some fire power..." -#~ msgstr "" -#~ "수류탄을 활성화시켰습니다! 아마 던지고 싶을 것입니다. 물건을 던지려면\n" -#~ "'t' 키를 눌러서 던질 물건을 선택하면 됩니다. 투척 거리는 힘과 물체의 무" -#~ "게, 크기에\n" -#~ "따라 달라집니다. 대부분의 전투 상황에서는 던지기 공격은 그다지 좋지 않지" -#~ "만,\n" -#~ "던진 무기의 화력이 충분하다면야..." +#~ msgid "Your muscles are very slow to move. You run 30%% slower." +#~ msgstr "당신의 근육은 매우 느리게 움직인다. 이동이 30%% 느려진다." #~ msgid "" -#~ "The item you just picked up is a comestible! To eat a comestible, press " -#~ "'E'.\n" -#~ "Comestibles are items you can use up, like food, drink, pills, etc. " -#~ "Most\n" -#~ "food expires eventually, so be careful. Some comestibles, especially " -#~ "drugs,\n" -#~ "can cause subtle, long-term effects." +#~ "You feel very sluggish when not in direct sunlight. You suffer a 5%% drop " +#~ "in speed when in shade, and a 10%% drop in speed when in the dark." #~ msgstr "" -#~ "지금 주운 물건은 식품입니다! 먹으려면 'E' 키를 누르면 됩니다.\n" -#~ "식품은 음식, 음료, 알약 등이 있으며, 대부분의 음식은 시간이\n" -#~ "지나면 상하기 때문에 주의해야 합니다. 의약품 혹은 약물은\n" -#~ "미묘한 효과를 오랜 시간 내기도 합니다." +#~ "당신은 직사광선을 받지 않으면 매우 굼떠진다. 그늘에 들어가면 속도가 5%% 느" +#~ "려지고, 빛이 들지 않는 곳이라면 10%% 느려진다." #~ msgid "" -#~ "The item you just picked up is ammunition, used with a gun. It has many\n" -#~ "special attributes. The damage value is the maximum done on a standard " -#~ "hit;\n" -#~ "a critical hit or headshot will do much more damage. Some monsters or " -#~ "NPCs\n" -#~ "will wear armor which reduces the damage from gunfire; a high Armor-" -#~ "pierce\n" -#~ "value will reduce this effect. The Range is the maximum range the ammo " -#~ "can\n" -#~ "achieve, and the dispersion affects its chance to hit." +#~ "Your muscle response is dependent on ambient temperatures. You lose 1%% " +#~ "of your speed for every 5 degrees below 65 F." #~ msgstr "" -#~ "지금 주운 물건은 탄약입니다. 총기에 사용되며, 여러 특수한 수치가 있습니" -#~ "다.\n" -#~ "데미지는 일반적으로 명중시 최대 데미지를 뜻하며, 치명타 혹은 헤드샷일 경" -#~ "우\n" -#~ "더 큰 피해를 줍니다. 몇몇 괴물이나 NPC는 갑옷을 입어서, 총기에 대한 피해" -#~ "가\n" -#~ "감소합니다. 높은 관통력은 이런 방어 효과를 줄여줍니다. 사거리는 탄약의 최" -#~ "대\n" -#~ "사거리를 뜻하며, 분산도는 명중률에 영향을 줍니다." +#~ "당신의 근육 반응속도는 기온에 따라 변한다. 기온이 섭씨 18도 밑으로 3도씩 " +#~ "내려갈때마다 속도가 1%%씩 느려진다." #~ msgid "" -#~ "You just put on an article of clothing that provides physical " -#~ "protection.\n" -#~ "There are two types of damage that clothing defends against, bashing, " -#~ "and\n" -#~ "cutting. Most monsters deal bashing damage, but cutting is often the " -#~ "more\n" -#~ "deadly of the two. Bullets are considered cutting damage." +#~ "Your muscle response is highly dependent on ambient temperatures. You " +#~ "lose 1%% of your speed for every 3 degrees below 65 F." #~ msgstr "" -#~ "지금 착용한 것은 물리적 방어력을 주는 의류입니다.\n" -#~ "의류가 주는 방어력은 2가지 종류가 있습니다. 타격과 베기입니다.\n" -#~ "대부분의 괴물은 타격 데미지를 주고, 몇몇 치명적인 괴물은\n" -#~ "베기 데미지를 줍니다. 또한 총탄은 베기 데미지를 줍니다." +#~ "당신의 근육 반응속도는 기온에 따라 크게 변한다. 기온이 섭씨 18도 밑으로 " +#~ "1.5도씩 내려갈때마다 속도가 1%%씩 느려진다." #~ msgid "" -#~ "The item you just picked up is a good weapon! To wield a weapon, press " -#~ "w,\n" -#~ "then pick what to wield. To wield nothing, either drop your weapon with " -#~ "d,\n" -#~ "or press 'w-' to put it away. A zombie has spawned nearby. To attack " -#~ "it,\n" -#~ "simply move into it." +#~ "You are cold-blooded and rely on heat to keep moving. Your lose 1%% of " +#~ "your speed for every 2 degrees below 65 F." #~ msgstr "" -#~ "방금 주운 물건은 좋은 무기입니다! 무기를 장비하려면 'w' 키를 누르고\n" -#~ "주운 물건의 기호를 누르면 됩니다. 무기를 내려놓거나 다시 가방에 넣으려면\n" -#~ "'d' 키로 버리거나, 'w' 키를 누른 다음 '-' 키를 누르면 됩니다. \n" -#~ "좀비가 근처에 생성되었습니다. 공격하려면 좀비 쪽으로 이동하면 됩니다." +#~ "당신은 냉혈생물이 되어 움직이려면 열이 필요하다. 기온이 섭씨 18도 밑으로 1" +#~ "도씩 내려갈때마다 속도가 1%%씩 느려진다." -#~ msgid "" -#~ "The item you just picked up is a type of clothing! To wear clothing, " -#~ "press\n" -#~ "W and then select an item. To take off clothing, press T, or simply take " -#~ "it\n" -#~ "off and drop it in one action by pressing d." -#~ msgstr "" -#~ "지금 주운 물품은 의류입니다! 의류를 입으려면 'W' 키를 누른 후\n" -#~ "해당 물품을 선택하면 됩니다. 의류를 벗으려면 'T' 키를 누른후\n" -#~ "해당 물품을 선택하면 됩니다. 혹은 간단히 벗어서 버리려면\n" -#~ "'d' 키를 사용한 후 물품을 선택하면 됩니다." +#~ msgid "Aaliyah" +#~ msgstr " 알리야" -#~ msgid "" -#~ "The item you just picked up went into your inventory, the shared storage\n" -#~ "space of all the clothing you're wearing. To view your inventory, press " -#~ "'i'.\n" -#~ "You can then press the letter of any item to get more information about " -#~ "it." -#~ msgstr "" -#~ "지금 주운 물품은 인벤토리로 들어갔습니다. 인벤토리는 지금 입고있는 의류" -#~ "가 \n" -#~ "제공하는 모든 저장공간이 통합되어 표시되는 곳입니다. 인벤토리를 보려면 \n" -#~ "'i' 키를 누르면 됩니다. 그 다음, 해당 물품의 기호를 눌러서 더 많은 정보" -#~ "를 \n" -#~ "볼 수 있습니다." +#~ msgid "Aaron" +#~ msgstr " 아론" -#~ msgid "" -#~ "That brown '+' next to you is a closed door. To open it, either simply " -#~ "walk\n" -#~ "into it, or press 'o' and then a movement key." -#~ msgstr "" -#~ "옆에 있는 갈색 '+' 표시는 닫혀있는 문을 뜻합니다. 문을 열려면 그냥 그쪽으" -#~ "로\n" -#~ "걸어가거나, 근처에서 'o' 를 누른 후 방향 키를 누르면 됩니다." +#~ msgid "Abigail" +#~ msgstr " 아비게일" -#~ msgid "" -#~ "You can close an opened door by pressing 'c' and then a movement key. " -#~ "Closing\n" -#~ "doors behind you can often slow down throngs of monsters greatly." -#~ msgstr "" -#~ "열려 있는 문은 'c' 를 누른 후 방향을 눌러서 닫을 수 있습니다.\n" -#~ "문을 닫으면 괴물들의 이동을 상당히 늦출 수 있습니다." +#~ msgid "Adam" +#~ msgstr " 아담" -#~ msgid "" -#~ "Most monsters will have to smash their way through a closed door. If a " -#~ "door\n" -#~ "is locked or stuck, you can smash it by pressing 's' and then a movement " -#~ "key." -#~ msgstr "" -#~ "대부분의 괴물들은 닫힌 문이 가로막고 있다면 부숴버립니다. 문이 잠겨 있거" -#~ "나\n" -#~ "끼어 있다면, 's' 키를 누른 후 방향 키로 방향을 선택해서 부술 수 있습니다." +#~ msgid "Adams" +#~ msgstr " 아담스" -#~ msgid "" -#~ "You can smash through windows by pressing 's' and then a movement key. " -#~ "A\n" -#~ "smashed window takes a long time to climb through, and it's possible to " -#~ "hurt\n" -#~ "yourself on the broken glass, but it's a good last-ditch escape route. " -#~ "You\n" -#~ "can smash through other things, too; use the ';' command and look for " -#~ "things\n" -#~ "that are \"Smashable.\"" -#~ msgstr "" -#~ "'s' 키를 사용해서 유리창을 부수고 들어갈 수 있습니다. 창문은 타고 올라가" -#~ "야 하기 때문에\n" -#~ "시간이 더 걸리며, 깨진 유리에 다칠 수도 있습니다. 도주 시에 쓸만한 방법이" -#~ "기도 합니다.\n" -#~ "다른 것도 부술 수 있는데, ';' 키로 주변의 것을 확인해서 \"부술 수 있음\" " -#~ "여부를 확인하면 됩니다." +#~ msgid "Addison" +#~ msgstr " 에디슨" -#~ msgid "" -#~ "You just stepped on a space with one or more items. If you wish to pick " -#~ "it\n" -#~ "up, press ',' or 'g'." -#~ msgstr "" -#~ "물건이 하나 이상 있는 곳에 있습니다. 물건을 줍기 위해서는 ',' 키, 혹은 " -#~ "'g' 키를 누르면 됩니다." +#~ msgid "Adrian" +#~ msgstr " 에이드리안" -#~ msgid "" -#~ "The nearby { is a display rack, and the blue background indicates that " -#~ "there\n" -#~ "are items there. If you examine the square by pressing 'e', you can pick " -#~ "up\n" -#~ "items without moving to the square." -#~ msgstr "" -#~ "근처의 { 표시는 진열대를 나타냅니다. 또한 파란색은 그곳에 물품이 있음을 나" -#~ "타냅니다.\n" -#~ "'e' 키를 눌러서 그곳을 확인해볼 수 있으며, 물품을 주울 수도 있습니다." +#~ msgid "Aidan" +#~ msgstr " 아이단" -#~ msgid "" -#~ "The item you just picked up has been wielded as a weapon automatically. " -#~ "This\n" -#~ "happened because it is a good melee weapon, and you were empty-handed. " -#~ "This\n" -#~ "usually is faster than than picking it up, then wielding it." -#~ msgstr "" -#~ "주운 물품이 무기로 장비되었습니다. 주운 물건이 좋은 근접 무기거나, \n" -#~ "현재 손에 든 것이 없기 때문입니다. 이 방법은 물건을 주운 다음 장비하는\n" -#~ "것보다 더 빠릅니다." +#~ msgid "Aiden" +#~ msgstr " 아이덴" -#~ msgid "" -#~ "The item you just picked up has been wielded as a weapon automatically. " -#~ "This\n" -#~ "happened because you do not have space in your inventory to stash the " -#~ "item,\n" -#~ "and so you must carry it in your hand. To expand your inventory space, " -#~ "try\n" -#~ "wearing clothing with a lot of storage space, like a backpack, or cargo " -#~ "pants." -#~ msgstr "" -#~ "주운 물품이 무기로 장비되었습니다. 지금은 물건을 넣을만한 저장공간이\n" -#~ "없기 때문에, 손에 들고 있는 것 입니다. 휴대 공간을 늘리려면\n" -#~ "가방, 카고 바지 같은 저장 공간을 늘려주는 의류를 착용해야 합니다." +#~ msgid "Alex" +#~ msgstr " 알렉스" -#~ msgid "" -#~ "You don't have space in your inventory to store the item you just tried " -#~ "to\n" -#~ "pick up. You need to wear something with storage space, like a backpace " -#~ "or\n" -#~ "cargo pants, to gain more storage space." -#~ msgstr "" -#~ "지금 주우려고 한 물건을 넣을, 저장 공간이 없습니다. 저장 공간을 늘릴만한\n" -#~ "가방, 혹은 카고 바지 같은 것을 착용해야 합니다." +#~ msgid "Alexa" +#~ msgstr " 알렉사" -#~ msgid "" -#~ "Welcome to the Cataclysm tutorial! As you play, pop-ups like this one " -#~ "will\n" -#~ "appear to guide you through the basic game actions. Pressing spacebar " -#~ "will\n" -#~ "close the pop-up." -#~ msgstr "" -#~ "카타클리즘 튜토리얼에 어서오십시오! 튜토리얼을 하는 동안, 지금 떠있는\n" -#~ "이런 팝업 창이 기본적인 게임 행동을 할 때마다 뜰 것입니다.\n" -#~ "스페이스 키를 눌러서 팝업을 닫을 수 있습니다." +#~ msgid "Alexander" +#~ msgstr " 알렉산더" -#~ msgid "" -#~ "The '@' character in the center of the screen represents you. To move, " -#~ "you\n" -#~ "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have " -#~ "your\n" -#~ "character wait in place, press '.'" -#~ msgstr "" -#~ "화면 중앙의 '@' 표시는 플레이어, 즉 당신을 나타냅니다. 움직이려면\n" -#~ "넘버패드 키를 사용해야 합니다. 혹은 (hjklyubn) 키, 혹은 화살표 키도\n" -#~ "가능합니다. 잠시 대기하려면 '.' 키를 누르면 됩니다." +#~ msgid "Alexandra" +#~ msgstr " 알렉산드라" -#~ msgid "" -#~ "To see what the symbols around you mean, press ';'. You'll be able to " -#~ "scroll\n" -#~ "around and get information on the terrain, monsters, and items in the " -#~ "world\n" -#~ "around you." -#~ msgstr "" -#~ "주변의 기호가 뭔지 확인하려면 ';' 키를 누른 후, 이동 키로 선택해서 확인하" -#~ "면 됩니다.\n" -#~ "이것으로 지형, 괴물, 어떤 곳에 떨어져 있는 물건 등을 확인할 수 있습니다." +#~ msgid "Alexis" +#~ msgstr " 알렉시아" -#~ msgid "You cannot save a template with unused points!" -#~ msgstr "모든 포인트를 사용하지 않으면 템플릿을 저장할 수 없습니다!" +#~ msgid "Allen" +#~ msgstr " 알렌" -#~ msgid "Rats swarm from nowhere to avenge the %s." -#~ msgstr "쥐 떼가 갑자기 나타나, %s에 돌진했습니다." +#~ msgid "Allison" +#~ msgstr " 엘리슨" -#~ msgid "Your %s is destroyed! GAME OVER!" -#~ msgstr "%s이(가) 파괴되었습니다! 게임 오버!" +#~ msgid "Alyssa" +#~ msgstr " 알리사" -#~ msgid "You feel terrible for killing %s!" -#~ msgstr "%s를(을) 죽인 것에 대해 기분이 좋지 않습니다!" +#~ msgid "Amelia" +#~ msgstr " 아멜리아" -#~ msgid "The %s disappears! Was it in your head?" -#~ msgstr "%s이(가) 사라졌습니다! 내 상상이였나?" +#~ msgid "Anderson" +#~ msgstr " 앤더슨" -#~ msgid "The %s splits!" -#~ msgstr "%s이(가) 둘로 나누어졌습니다!" +#~ msgid "Andrea" +#~ msgstr " 안드레아" -#~ msgid "The %s splatters into tiny, dead pieces." -#~ msgstr "%s이(가) 죽어버린 작은 조각으로 나뉘었습니다." +#~ msgid "Andrew" +#~ msgstr " 앤드류" -#~ msgid "The %s melts away!" -#~ msgstr "%s이(가) 녹아 없어졌습니다!" +#~ msgid "Angel" +#~ msgstr " 엔젤" -#~ msgid "a smoker explodes!" -#~ msgstr "스모커가 폭발했습니다!" +#~ msgid "Angelina" +#~ msgstr " 안젤리나" -#~ msgid "The root walls begin to crumble around you." -#~ msgstr "주위에 있는 뿌리 벽들이 허물어지기 시작합니다." +#~ msgid "Anna" +#~ msgstr " 아나" -#~ msgid "The %s's corpse melts into a pool of acid." -#~ msgstr "%s의 시체가 녹아서, 산성 웅덩이가 되었습니다." +#~ msgid "Anthony" +#~ msgstr " 앤소니" -#~ msgid "a boomer explodes!" -#~ msgstr "부머가 폭발했습니다!" +#~ msgid "Ariana" +#~ msgstr " 아리아나" -#~ msgid "It disintegrates!" -#~ msgstr "붕괴해버렸습니다!" +#~ msgid "Arianna" +#~ msgstr " 아리안나" -#~ msgid "The %s sinks its ovipositor into you!" -#~ msgstr "%s가(이) 산란관을 몸에 박아넣었습니다!" +#~ msgid "Ashley" +#~ msgstr " 애쉴리" -#~ msgid "brush." -#~ msgstr "스윽." +#~ msgid "Aubrey" +#~ msgstr " 오브리" -#~ msgid "porcelain breaking!" -#~ msgstr "도자기가 깨졌습니다!" +#~ msgid "Audrey" +#~ msgstr " 오드리" -#~ msgid "" -#~ "Your overall skill in using firearms. With higher levels, this general " -#~ "experience increases accuracy with any gun, but is secondary to practice " -#~ "with the type of gun in question." -#~ msgstr "" -#~ "총기를 사용하는데 필요한 전체적인 기술입니다. 높은 수준에 도달하면 모든 총" -#~ "기의 명중률이 증가합니다." +#~ msgid "Austin" +#~ msgstr " 오스틴" -#~ msgid "" -#~ "You were about to marry your bride before the cataclysm, now you spend " -#~ "you days searching for her." -#~ msgstr "" -#~ "대격변 이전의 당신은 이제 막 아내와 결혼했었습니다. 이제 당신은 아내를 찾" -#~ "기 위해 살아갑니다." +#~ msgid "Autumn" +#~ msgstr " 어텀" -#~ msgid "" -#~ "You've traveled for a living, sightseeing here and there, and living off " -#~ "your parents' trust fund. But now they're gone, and the only thing " -#~ "between you and death is the open road and your backpack." -#~ msgstr "" -#~ "당신은 이곳 저곳을 유람하며 생활했으며, 부모님의 신용 펀드에 의지해 살아왔" -#~ "습니다. 하지만 이젠 모두 사라졌고, 죽음과 당신 사이에 남은 것은 당신의 배" -#~ "낭과 미래 뿐입니다." +#~ msgid "Ava" +#~ msgstr " 에바" -#~ msgid "" -#~ "Your precious generator, noisily humming\n" -#~ "away. Defend it at all costs!" -#~ msgstr "" -#~ "귀중한 발전기로, 시끄럽게 웅웅거리고 있습니다. 무조건 방어해야 합니다!" +#~ msgid "Avery" +#~ msgstr " 아베리" -#~ msgid "" -#~ "A 10-foot-tall, heavily-armored robot that\n" -#~ "walks on a pair of legs with the knees\n" -#~ "facing backwards. It's armed with a\n" -#~ "nasty-looking machine gun." -#~ msgstr "" -#~ "3미터 크기에, 역관절인 두 다리로 걸어다니는 중장갑 로봇입니다. 위험하게 생" -#~ "긴 기관총으로 무장하고 있습니다." +#~ msgid "Ayden" +#~ msgstr " 에이든" -#~ msgid "" -#~ "This fearsome robot is essentially an\n" -#~ "autonomous tank. It moves surprisingly fast\n" -#~ "on its treads, and is armed with a variety of\n" -#~ "deadly weapons." -#~ msgstr "" -#~ "간단히 말하자면 무인 탱크나 다름없는 이 공포스러운 로봇은, 다리로 놀랍도" -#~ "록 빠르게 움직이며 다양한 치명적인 무기로 무장하고 있습니다." +#~ msgid "Bailey" +#~ msgstr " 베일리" -#~ msgid "" -#~ "A snake-shaped robot that tunnels through the\n" -#~ "ground slowly. When it emerges from the\n" -#~ "ground it can attack with its large, spike-\n" -#~ "covered head." -#~ msgstr "" -#~ "땅속을 느린 속도로 파고 다니는 뱀 모양의 로봇입니다. 땅속에서 튀어나올 때 " -#~ "큰 뿔로 덮힌 머리로 공격합니다." +#~ msgid "Baker" +#~ msgstr " 베이커" -#~ msgid "" -#~ "A boxy robot about four feet high. It moves\n" -#~ "slowly on a set of treads, and is armed with\n" -#~ "a large machine gun type weapon. It is\n" -#~ "heavily armored." -#~ msgstr "" -#~ "상자처럼 생긴 1.2미터 높이의 로봇입니다. 몇쌍의 발로 느리게 움직이며, 커다" -#~ "란 기관총같은 무기로 무장하고 있습니다. 두꺼운 장갑을 가지고 있습니다." +#~ msgid "Barnes" +#~ msgstr " 반즈" -#~ msgid "" -#~ "A blue-painted robot that moves quickly on a\n" -#~ "set of three omniwheels. It has a nightstick\n" -#~ "readied, and appears to be well-armored." -#~ msgstr "" -#~ "파란색 페인트로 칠해진 로봇입니다. 바퀴 3개가 달려있어서 빠른 속도로 움직" -#~ "일 수 있으며, 경찰봉을 들고 있어 잘 무장한 것처럼 보입니다." +#~ msgid "Bell" +#~ msgstr " 벨" -#~ msgid "" -#~ "A 8-foot-tall robot that walks on three long\n" -#~ "legs. It has a pair of spiked tentacles, as\n" -#~ "well as a flamethrower mounted on its head." -#~ msgstr "" -#~ "긴 다리가 3개 달린 2.5 미터 높이의 로봇입니다. 가시달린 촉수가 한쌍 달려있" -#~ "고, 머리에는 화염 방사기가 달려있습니다." +#~ msgid "Benjamin" +#~ msgstr " 벤자민" -#~ msgid "" -#~ "A utility robot designed for hazardous\n" -#~ "conditions. Its only means to stop intruders\n" -#~ "appears to involve thrashing around one of its\n" -#~ "multiple legs." -#~ msgstr "" -#~ "위험지대에서 사용하기 위한 유틸리티 로봇입니다. 침입자를 막을 수 있는 방법" -#~ "이 다수의 다리를 휘두르는 것밖에 없는 것 같습니다." +#~ msgid "Bennett" +#~ msgstr " 베넷" -#~ msgid "" -#~ "A roughly spherical robot that hovers about\n" -#~ "five feet of the ground. Its front side is\n" -#~ "dominated by a huge eye and a flash bulb.\n" -#~ "Frequently used for reconaissance." -#~ msgstr "" -#~ "1.5 미터 높이의 공중에 떠다니는 원형 로봇입니다. 앞부분에는 커다란 눈과 점" -#~ "멸등이 달려있습니다. 주로 정찰용으로 사용됩니다." +#~ msgid "Blake" +#~ msgstr " 블레이크" -#~ msgid "" -#~ "A fist-sized robot that flies swiftly through\n" -#~ "the air. It's covered with whirring blades\n" -#~ "and has one small, glowing red eye." -#~ msgstr "" -#~ "공중을 떠다니는 주먹 크기의 로봇입니다. 움직이는 칼날로 덮혀있으며, 붉은색" -#~ "으로 빛나는 작은 눈이 있습니다." +#~ msgid "Brady" +#~ msgstr " 브레디" -#~ msgid "" -#~ "This poor victim was sliced open and bled to\n" -#~ "death long ago. Yet, chained down it thrashes\n" -#~ "in eternal misery from its tortures." -#~ msgstr "" -#~ "이 불쌍한 피해자는 오래전에 몸이 잘리고 내부가 열려져 죽었지만, 영원의 고" -#~ "통에 묶여 아직도 고문당하고 있습니다.\n" -#~ "(역주 : 영화 헬레이저)" +#~ msgid "Brandon" +#~ msgstr " 브렌든" -#~ msgid "" -#~ "Slender and terrifying, this gigantic man lacks\n" -#~ "any skin yet moves swiftly and gracefully without\n" -#~ "it. Wings of flesh protrude uselessly from his\n" -#~ "back and a third eye dominates his forehead." -#~ msgstr "" -#~ "호리호리하지만 공포스러운 이 거대한 남자는 피부가 없는 것처럼 보이는데도 " -#~ "전혀 문제가 없는 것 같아보입니다. 등에는 쓸모없어보이는 살로 된 날개가 뻗" -#~ "어나와있고, 이마에는 제 3의 눈이 달려있습니다." +#~ msgid "Brayden" +#~ msgstr " 브레이든" -#~ msgid "" -#~ "A robot with an insectoid design, about\n" -#~ "the size of a small dog. It skitters\n" -#~ "quickly across the ground, two electric\n" -#~ "prods at the ready." -#~ msgstr "" -#~ "곤충에 비슷하게 설계된 로봇으로, 작은 개 정도의 크기를 하고 있습니다. 두 " -#~ "개의 전기 봉을 사용해 빠르게 땅을 달립니다." +#~ msgid "Brian" +#~ msgstr " 브라이언" -#~ msgid "A large snake, translucent black." -#~ msgstr "큰 뱀으로, 반투명한 검정색 피부를 가지고 있습니다." +#~ msgid "Brianna" +#~ msgstr " 브리아나" -#~ msgid "" -#~ "An insane individual with many bloody holes\n" -#~ "on the sides of their shaved head. Some form\n" -#~ "of lobotomy has left it with a partially re-\n" -#~ "animated brain." -#~ msgstr "" -#~ "맨들맨들한 머리 옆에 피가 나오는 구멍이 많이 뚫린, 정신이 나간 인간입니" -#~ "다. 뇌엽 절리술 중 일부는 부분적으로만 뇌를 제거해버린다고 합니다." +#~ msgid "Brody" +#~ msgstr " 브로디" -#~ msgid "" -#~ "A strange dark area in the area. It whispers\n" -#~ "softly as it moves." -#~ msgstr "" -#~ "매우 이상한, 검은 공간입니다. 무언가를 부드럽게 속삭이면서 움직이고 있습니" -#~ "다." +#~ msgid "Brooke" +#~ msgstr " 브룩" -#~ msgid "" -#~ "A pale white man with a physically flawless athletic\n" -#~ "body and shaved head. His eyes are completely black\n" -#~ "as bloody tears pour forth from them." -#~ msgstr "" -#~ "창백한 하얀색 남자입니다. 반들반들한 머리에 매끈한 육상선수같은 몸을 가지" -#~ "고 있습니다. 눈이 완전히 검은색이며, 눈에서 피눈물이 나고 있습니다." +#~ msgid "Brooklyn" +#~ msgstr " 브룩클린" -#~ msgid "" -#~ "A beast with the body of a slightly-overweight\n" -#~ "man and the head of a cow. It walks slowly,\n" -#~ "milky white drool dripping from its mouth,\n" -#~ "wearing only a pair of white underwear." -#~ msgstr "" -#~ "소의 머리에 약간 과체중인 남자의 몸을 가진 괴물입니다. 매우 느리게 걷고, " -#~ "입에서 우윳빛 액체가 떨어지고 있습니다. 하얀색 속옷만 입고 있습니다." +#~ msgid "Brooks" +#~ msgstr " 브룩스" -#~ msgid "" -#~ "This looks like a human body, but its\n" -#~ "flesh is snow-white and its face has no\n" -#~ "features save for a perfectly round\n" -#~ "mouth." -#~ msgstr "" -#~ "인간의 몸처럼 보이지만, 이것의 살은 눈처럼 하얗고 얼굴이 없습니다. 기억할" -#~ "만한 특징이 있다면, 그 동그란 입입니다." +#~ msgid "Brown" +#~ msgstr " 브라운" -#~ msgid "" -#~ "An eldritch creature, shuffling\n" -#~ "along, its hands twitching so\n" -#~ "fast they appear as nothing but\n" -#~ "blurs." -#~ msgstr "" -#~ "무시무시한 생물로, 오래 전부터 존재해온 존재입니다. 손이 너무나도 빠르게 " -#~ "움직이고 있어서, 흐릿하게 보입니다." +#~ msgid "Bryan" +#~ msgstr " 브라이언" -#~ msgid "" -#~ "A small humanoid, the size of a dog, with\n" -#~ "twisted red flesh and a distended neck. It\n" -#~ "scampers across the ground, panting and\n" -#~ "grunting." -#~ msgstr "" -#~ "작은 인간형 생명체로, 크기는 개 정도 됩니다. 뒤틀린 붉은 살로 이루어져 있" -#~ "으며, 목이 팽창하고 있습니다. 지상에서 빠르게 움직이고, 계속해서 헐떡이고 " -#~ "있습니다." +#~ msgid "Bryant" +#~ msgstr " 브라이언트" -#~ msgid "" -#~ "An eyeball the size of an easy chair and\n" -#~ "covered in rolling blue flames. It floats\n" -#~ "through the air." -#~ msgstr "" -#~ "이 눈알은 의자 정도의 크기이며, 파란색 불꽃으로 덮여있습니다. 공중을 떠다" -#~ "닙니다." +#~ msgid "Butler" +#~ msgstr " 버틀러" -#~ msgid "" -#~ "An amorphous mass of twisting black flesh\n" -#~ "that flies through the air swiftly." -#~ msgstr "" -#~ "형태가 없는 무언가의 검은 살덩이 같은 것으로, 공중을 재빠르게 날아다닙니" -#~ "다." +#~ msgid "Caden" +#~ msgstr "케이든" -#~ msgid "" -#~ "A ropy, worm-like creature that flies on\n" -#~ "bat-like wings. Its form continually\n" -#~ "shifts and changes, twitching and\n" -#~ "writhing." -#~ msgstr "" -#~ "길고 지렁이같이 생긴 생물입니다. 박쥐같은 날개가 달려있어서, 날고 있습니" -#~ "다. 형태가 끊임없이 흔들리고 비틀리면서 변하고 있습니다." +#~ msgid "Caleb" +#~ msgstr " 칼렙" + +#~ msgid "Cameron" +#~ msgstr " 카메론" + +#~ msgid "Camilla" +#~ msgstr " 카밀라" + +#~ msgid "Campbell" +#~ msgstr " 켐벨" + +#~ msgid "Carlos" +#~ msgstr " 카를로스" + +#~ msgid "Caroline" +#~ msgstr " 캐롤라인" + +#~ msgid "Carson" +#~ msgstr " 카슨" + +#~ msgid "Carter" +#~ msgstr " 카터" + +#~ msgid "Charles" +#~ msgstr " 찰스" + +#~ msgid "Charlotte" +#~ msgstr " 샬롯" + +#~ msgid "Chase" +#~ msgstr " 체이스" + +#~ msgid "Chloe" +#~ msgstr " 클로에" + +#~ msgid "Cavendish" +#~ msgstr "동굴 물고기" #~ msgid "" -#~ "A pinkish, fungoid crustacean-like\n" -#~ "creature with numerous pairs of clawed\n" -#~ "appendages and a head covered with waving\n" -#~ "antennae." +#~ "You were a high school student until the teachers literally tried to pick " +#~ "your brains. You start with a backpack and a zombie survival guide." #~ msgstr "" -#~ "갑각류같이 생긴 분홍색 진균체입니다. 많은 발톱이 달려있고, 머리엔 더듬이" -#~ "가 달려있습니다." +#~ "선생님이 문자 그대로 당신의 뇌를 꺼내려 하기 전까진 당신은 고등학생이었습" +#~ "니다. 배낭과 좀비 서바이벌 가이드를 소지하고 시작합니다." + +#~ msgid "Wagon" +#~ msgstr "화물차" + +#~ msgid "Counter-attack!" +#~ msgstr "반격!" #~ msgid "" -#~ "An enormous white flatworm writhing\n" -#~ "beneath the earth. Poking from the\n" -#~ "ground is a bulbous head dominated by a\n" -#~ "pink mouth, lined with rows of fangs." +#~ "A human body, encapsulated in tough riot\n" +#~ "armour, this zombie was clearly a cop gearing\n" +#~ "up to fight the infection." #~ msgstr "" -#~ "거대한 하얀색의 평평한 벌레가 뒤틀리고 있습니다. 지구 아래에서 땅을 지배하" -#~ "는 생물로, 분홍빛 입에 일렬로 늘어선 이빨을 가지고 있습니다." +#~ "사람의 형상을 하고 있습니다. 튼튼한 시위진압용 방어구로 무장하고 있으며, " +#~ "분명히 이 좀비는 감염사태에 대항하던 경찰일 것입니다." #~ msgid "" -#~ "A shapeless blob the size of a cow. It\n" -#~ "oozes slowly across the ground, small\n" -#~ "chunks falling off of its sides." +#~ "A bloated zombie sagging with fat. It emits a\n" +#~ "horrible odor, and putrid, pink sludge drips\n" +#~ "from its mouth." #~ msgstr "" -#~ "이상하게 생긴, 황소 정도 크기의 슬라임. 천천히 땅을 꿀렁이며 기어다니고 있" -#~ "습니다. 작은 덩어리들이 옆으로 떨어지고 있습니다." +#~ "지방으로 부풀어오른 좀비입니다. 입에서 역겨운 냄새가 나는 액체를 흘리고 있" +#~ "습니다." #~ msgid "" -#~ "A twisting spot in the air, with some kind\n" -#~ "of morphing mass at its center." +#~ "A bloated zombie that is coated with slimy\n" +#~ "gray mold. Its flesh is translucent and gray,\n" +#~ "and it dribbles a gray sludge from its mouth." #~ msgstr "" -#~ "비틀리는 무언가가 공중에 떠있습니다. 중심에서는 무언가가 끊임없이 변하고 " -#~ "있습니다." +#~ "끈적한 곰팡이로 뒤덮힌 부풀어오른 좀비입니다. 살은 반투명하고 회색이며 입" +#~ "에서 회색 찌꺼기를 흘리고 있습니다." #~ msgid "" -#~ "A human body, but with its limbs, neck, and\n" -#~ "hair impossibly twisted." +#~ "A strange, immobile pink goo. It seems to\n" +#~ "be breathing slowly." #~ msgstr "" -#~ "사람의 형상을 하고 있습니다. 하지만 관절, 목, 머리카락이 말도 안되게 뒤틀" -#~ "려 있습니다." +#~ "이상하게 생긴, 움직이지 않는 핑크색 덩어리입니다. 천천히 숨을 쉬는 것 같습" +#~ "니다." -#~ msgid "A large snail, with an oddly human face." -#~ msgstr "사람 얼굴이 달린, 이상한 달팽이입니다." +#~ msgid "Snake" +#~ msgstr "뱀" -#~ msgid "" -#~ "An amorphous black creature which seems to\n" -#~ "sprout tentacles rapidly." -#~ msgstr "형태가 없는 검은 무언가입니다. 촉수가 사방으로 빠르게 뻗어나옵니다." +#~ msgid "Toad" +#~ msgstr "두꺼비" -#~ msgid "" -#~ "A dog's body with a mass of ropy, black\n" -#~ "tentacles extending from its head." -#~ msgstr "개의 몸에, 길고 검은 촉수가 머리에서 뻗어나옵니다." +#~ msgid "Use Celsius" +#~ msgstr "섭씨 사용" -#~ msgid "" -#~ "A spindly body, standing at least 15 feet\n" -#~ "tall. It looks vaguely human, but its face is\n" -#~ "grotesquely stretched out, and its limbs are\n" -#~ "distorted to the point of being tentacles." -#~ msgstr "" -#~ "막대기같은 몸을 가지고 있으며, 약 15 미터 정도의 키를 가지고 있는 인간처" -#~ "럼 생긴 것입니다. 하지만 얼굴은 괴기스럽게 일그러져 있으며, 사지는 촉수처" -#~ "럼 길게 늘어져 흐느적거립니다." +#~ msgid "No Bright Backgrounds" +#~ msgstr "밝은 배경" -#~ msgid "" -#~ "A huge, black worm, its flesh glistening\n" -#~ "with an acidic, blue slime. It has a gaping\n" -#~ "round mouth lined with dagger-like teeth." -#~ msgstr "" -#~ "거대한 검은 벌레입니다. 몸에서 분비되는 파란 산성 점액으로 반들반들거립니" -#~ "다. 단검같은 이빨이 줄줄이 나있는 둥근 입으로 먹이를 잡아삼킵니다." +#~ msgid "24 Hour Time" +#~ msgstr "24 시간 단위 표시" -#~ msgid "" -#~ "A spider with a characteristic red\n" -#~ "hourglass on its black carapace. It is\n" -#~ "known for its highly toxic venom." -#~ msgstr "" -#~ "검은 껍질에 특유의 붉은 모래시계 모양이 있는 거미입니다. 극히 위험한 맹독" -#~ "으로 유명합니다." +#~ msgid "Snap to Target" +#~ msgstr "낚아채는 방식 목표 선택" -#~ msgid "" -#~ "A large spider with a bulbous thorax. It\n" -#~ "creates a subterranean nest and lies in\n" -#~ "wait for prey to fall in and become trapped\n" -#~ "in its webs." -#~ msgstr "" -#~ "둥그렇고 납작한 가슴부분을 가지고 있는, 큰 거미입니다. 땅에다가 거미줄을 " -#~ "설치한 다음, 땅속에 숨어서 거미줄로 떨어지는 먹이를 기다렸다가 잡아먹습니" -#~ "다." +#~ msgid "Auto-Safemode on by default" +#~ msgstr "자동-안전모드 기본으로" -#~ msgid "" -#~ "A small, almost cute-looking spider. It\n" -#~ "leaps so quickly that it almost appears to\n" -#~ "instantaneously move from one place to\n" -#~ "another." -#~ msgstr "" -#~ "작고, 어찌 보면 귀엽기도 한 거미입니다. 아주 빠르게 뛰어다니기 때문에, 마" -#~ "치 순간이동 하는 것처럼 보입니다." +#~ msgid "Periodically Autosave" +#~ msgstr "주기적 자동 저장" -#~ msgid "" -#~ "A yellow spider the size of a dog. It lives\n" -#~ "in webs, waiting for prey to become\n" -#~ "entangled before pouncing and biting." -#~ msgstr "" -#~ "개 크기의 노란 거미입니다. 거미줄에서 살며 사냥감이 거미줄에 걸리기를 기다" -#~ "렸다가, 걸리면 거미줄에 묶어서 먹어버립니다." +#~ msgid "Skill Rust" +#~ msgstr "스킬 감쇄" -#~ msgid "" -#~ "A wasp-like flying insect, smaller than most\n" -#~ "mutated wasps. It does not looke very\n" -#~ "threatening, but has a large ovipositor in\n" -#~ "place of a sting." -#~ msgstr "" -#~ "말벌같이 생긴 날아다니는 곤충입니다. 다른 대부분의 돌연변이 말벌보다 작습" -#~ "니다. 별로 무서워 보이지는 않지만, 벌침 자리에 커다란 산란관이 달려있습니" -#~ "다." +#~ msgid "Delete World" +#~ msgstr "세계 삭제" -#~ msgid "" -#~ "A large, brown spider, which moves quickly\n" -#~ "and aggresively." -#~ msgstr "큰 갈색 거미입니다. 움직임이 빠르고, 아주 공격적입니다." +#~ msgid "Hide Mouse Cursor" +#~ msgstr "마우스 커서 숨기기" -#~ msgid "" -#~ "A gigantic slug, the size of a small car.\n" -#~ "It moves slowly, dribbling acidic goo from\n" -#~ "its fang-lined mouth." -#~ msgstr "" -#~ "거대한 민달팽이로, 크기가 거의 작은 자동차 급으로 거대합니다. 느릿느릿 움" -#~ "직이고 있지만, 움직인 곳에 산성 독을 뿌리고 있습니다. 입에 이빨이 빼곡하" -#~ "게 나있습니다." +#~ msgid "Enable item Auto Pickup" +#~ msgstr "물건 자동 줍기 켜기" -#~ msgid "" -#~ "A fat, white grub the size of your foot, with\n" -#~ "a set of mandibles that look more suited for\n" -#~ "digging than fighting." -#~ msgstr "" -#~ "사람의 발 정도 크기의 뚱뚱한 애벌레입니다. 입에 달린 턱은 싸우기보다는 땅" -#~ "을 파는데 더 적합해 보입니다." +#~ msgid "Auto Pickup Safemode" +#~ msgstr "자동 줍기 안전모드" -#~ msgid "" -#~ "A ferocious airborne predator, flying swiftly\n" -#~ "through the air, its mouth a cluster of fangs." -#~ msgstr "" -#~ "날아다니는 흉포한 사냥꾼입니다. 공중에서 민첩하게 움직이며, 입안에 송곳니" -#~ "가 수없이 박혀있습니다." +#~ msgid "ENCUMBERANCE AND WARMTH" +#~ msgstr "방해도 와 보온력" -#~ msgid "" -#~ "A group of several rats, their tails\n" -#~ "knotted together in a filthy mass. A wave\n" -#~ "of nausea washes over you in its presence." -#~ msgstr "" -#~ "쥐 몇마리가 모인 무리이며, 꼬리 끝이 이상하게 묶여있는 것 같습니다. 갑자" -#~ "기 어지럼증이 밀려옵니다." +#~ msgid "You are already wielding nothing." +#~ msgstr "이미 아무것도 들고 있지 않습니다." -#~ msgid "" -#~ "An enormous mosquito, fluttering erratically,\n" -#~ "its face dominated by a long, spear-tipped\n" -#~ "proboscis." -#~ msgstr "" -#~ "아주 거대한 모기입니다. 불규칙하게 날개짓을 하고있습니다. 얼굴엔 길고 창" -#~ "끝 같은 침이 달려있습니다." +#~ msgid "boobytrap" +#~ msgstr "부비트랩" -#~ msgid "" -#~ "A thick-skinned green frog. It eyes you\n" -#~ "much as you imagine it might eye an insect." -#~ msgstr "두꺼운 피부의 초록색 개구리입니다. 꼭 곤충의 눈을 닮은 것 같습니다." +#~ msgid "You step on some bubblewrap!" +#~ msgstr "뽁뽁이 위에 올라섰습니다!" -#~ msgid "" -#~ "A meter-long centipede, moving swiftly on\n" -#~ "dozens of thin legs, a pair of venomous\n" -#~ "pincers attached to its head." -#~ msgstr "" -#~ "1미터 길이의 지네입니다. 수십 개의 얇은 다리를 빠르게 움직이고 있으며, 머" -#~ "리에 맹독을 뿝는 집게가 달려있습니다." +#~ msgid "You trigger a landmine!" +#~ msgstr "지뢰를 작동시켰다!" -#~ msgid "" -#~ "A large snake, turned pale yellow from its\n" -#~ "underground life." -#~ msgstr "지하생활로 창백해진 노란색 거대한 뱀입니다." +#~ msgid "The %s steps on a landmine!" +#~ msgstr "%s 가 지뢰를 밟았다!" -#~ msgid "" -#~ "A relatively humanoid mutant with purple\n" -#~ "hair and a grapefruit-sized bloodshot eye." -#~ msgstr "" -#~ "보라색 털에 과일 크기의 새빨간 눈을 가진 돌연변이입니다. 제법 사람처럼 생" -#~ "겼습니다." +#~ msgid "You trigger a boobytrap!" +#~ msgstr "부비트랩을 작동시켰다!" -#~ msgid "" -#~ "A large green fish, it's mouth lined with\n" -#~ "three rows of razor-sharp teeth." -#~ msgstr "" -#~ "거대한 녹색 물고기입니다. 입에 3줄의 면도날같이 날카로운 이빨이 나있습니" -#~ "다." +#~ msgid "The %s triggers a boobytrap!" +#~ msgstr "%s가 부비트랩을 건드렸다!" -#~ msgid "" -#~ "A large, mangey rat with red eyes. It\n" -#~ "scampers quickly across the ground, squeaking\n" -#~ "hungrily." -#~ msgstr "" -#~ "거대한 빨간 눈을 가진 더러운 쥐입니다. 땅바닥에서 재빨리 움직이며, 배고픈" -#~ "듯이 찍찍거립니다." +#~ msgid "You need a " +#~ msgstr "다음이 필요 " -#~ msgid "" -#~ "Two or three humans fused together somehow,\n" -#~ "slowly dragging their thick-hided, hideous\n" -#~ "body across the ground." -#~ msgstr "" -#~ "무슨 이유에선지 두세명의 인간이 하나로 합쳐져 있습니다. 느린 속도로 두꺼" -#~ "운 가죽으로 덮힌 몸뚱이를 끌고 다닙니다." +#~ msgid "powered welder" +#~ msgstr "충전된 용접기" -#~ msgid "" -#~ "An enormous fungal spire, towering 30 feet\n" -#~ "above the ground. It pulsates slowly,\n" -#~ "continuously growing new defenses." -#~ msgstr "" -#~ "거대한 나선 형태의 진균체입니다. 9미터 정도의 높이를 가지고 있으며, 느리" -#~ "게 떨리고 있습니다. 지속적으로 새로운 껍질이 자라고 있습니다." +#~ msgid "Choose new part to install here: " +#~ msgstr "이 칸에 설치할 부품을 고르시오: " -#~ msgid "" -#~ "A black blob of viscous goo that oozes\n" -#~ "across the ground like a mass of living\n" -#~ "oil." -#~ msgstr "" -#~ "끈적이는 액체를 몸체로 한 검은 슬라임입니다. 기름덩어리가 땅을 기어가는 것" -#~ "처럼 생겼습니다." +#~ msgid "You need a powered welder to repair." +#~ msgstr "수리를 위해서는 충전된 용접기가 필요하다." -#~ msgid "" -#~ "A veritable wall of fungus, grown as a\n" -#~ "natural defense by the fungal spire. It\n" -#~ "looks very tough, and spews spores at an\n" -#~ "alarming rate." -#~ msgstr "" -#~ "진균체가 모여서 만들어진, 제대로 된 벽입니다. 진균체 나선을 막는 자연 방어" -#~ "벽으로 자란 것 같습니다. 매우 단단해 보이며, 공격을 받으면 포자를 쏘는 것 " -#~ "같습니다." +#~ msgid "You also need a wrench and %s to replace broken one." +#~ msgstr "부서진 것을 교체하려면 렌치와 %s도 필요하다." -#~ msgid "" -#~ "Cannibalistic Humanoid Underground Dweller.\n" -#~ "A human, turned pale and mad from years in\n" -#~ "the subways." -#~ msgstr "" -#~ "지하에 사는 식인 휴머노이드. 인간이었지만, 지하철에서 몇년동안 있으면서 창" -#~ "백해지고 미쳐버렸습니다." +#~ msgid "To change a wheel you need a " +#~ msgstr "휠을 바꾸기 위해서 필요한건 " -#~ msgid "C.H.U.D." -#~ msgstr "C.H.U.D." +#~ msgid "You cannot remove mount point while something is attached to it." +#~ msgstr "무언가가 거치된 상태에선 거치대를 철거할 수 없다." -#~ msgid "" -#~ "This appears to be a mass of vines, moving\n" -#~ "with surprising speed. It is so thick and\n" -#~ "tangled that you cannot see what lies in\n" -#~ "the middle." -#~ msgstr "" -#~ "큰 줄기처럼 보이지만, 놀랄만한 속도로 이동하고 있습니다. 너무 두껍게 얽혀" -#~ "있어서, 중간에 뭐가 있는지 보이지 않습니다." +#~ msgid "You need a hose to siphon fuel." +#~ msgstr "연료를 흡인하려면 호스가 필요하다." -#~ msgid "" -#~ "A wispy spore, about the size of a fist,\n" -#~ "wafting on the breeze." -#~ msgstr "주먹 크기만한, 성긴 포자입니다. 바람에 흩날립니다." +#~ msgid "hose" +#~ msgstr "호스" -#~ msgid "" -#~ "A knot of roots that looks bizarrely like a\n" -#~ "heart. It beats slowly with sap, powering\n" -#~ "the root walls around it." -#~ msgstr "" -#~ "심장처럼 얽혀있는 뿌리입니다. 수액이 흐르고 있으며, 느리게 뛰면서 주변을 " -#~ "둘러싼 벽에 수액을 보내고 있습니다." +#~ msgid "Choose wheel to use as replacement: " +#~ msgstr "어느 바퀴로 갈아끼울지 선택하시오: " -#~ msgid "" -#~ "A pale white fungus, one meaty gray stalk\n" -#~ "supporting a bloom at the top. A few\n" -#~ "tendrils extend from the base, allowing\n" -#~ "mobility and a weak attack." -#~ msgstr "" -#~ "창백한 하얀색의 진균체 더미입니다. 고깃덩이같은 회색 줄기가 맨 위의 봉오리" -#~ "를 받치고 있으며, 몇개의 덩굴손이 중심에서 뻗어나와 있습니다. 이걸로 움직" -#~ "이고 공격을 하는 것 같습니다." +#~ msgid "You need a hose to siphon water." +#~ msgstr "물을 빨아내려면 호스가 필요하다." -#~ msgid "" -#~ "A fungal tendril just a couple feet tall. Its\n" -#~ "exterior is hardened into a leathery bark and\n" -#~ "covered in thorns; it also moves faster than\n" -#~ "full-grown fungaloids." -#~ msgstr "" -#~ "1미터 정도 길이의 진균체 덩굴손입니다. 가죽 질감의 껍질에 가시로 덮힌 외형" -#~ "을 가지고 있으며, 완전히 자란 진균체보다 빨리 움직입니다." +#~ msgid "Mass: lbs" +#~ msgstr "중량: 파운드" -#~ msgid "" -#~ "A thorny vine. It twists wildly as\n" -#~ "it grows, spreading rapidly." -#~ msgstr "" -#~ "가시로 덮힌 줄기입니다. 마구 꼬아져 있으며, 빠른 속도로 자라고 있습니다." +#~ msgid "Fuel usage (safe): " +#~ msgstr "연료 소모량 (안전상태): " -#~ msgid "" -#~ "A small triffid, only a few feet tall. It\n" -#~ "has not yet developed bark, but its sting\n" -#~ "is still sharp and deadly." -#~ msgstr "" -#~ "어린 트리피드로, 아직 1 미터 정도밖에 자라지 않았습니다. 껍질이 자라지 않" -#~ "았지만, 가시는 여전히 날카롭고 위협적입니다." +#~ msgid " and stunning it" +#~ msgstr " 그리고 기절 시켰다" -#~ msgid "" -#~ "A very large triffid, with a particularly\n" -#~ "vicious sting and thick bark. As it\n" -#~ "moves, plant matter drops off its body\n" -#~ "and immediately takes root." -#~ msgstr "" -#~ "매우 큰 트리피드입니다. 극히 흉악스럽게 생긴 가시와 두꺼운 껍질을 가지고 " -#~ "있습니다. 움직이면 몸에서 식물 조각들이 떨어지는데, 조각들은 떨어지자마자 " -#~ "뿌리를 내립니다." +#~ msgid ".45 caliber retool" +#~ msgstr ".45 구경 교환기(.45 caliber retool)" -#~ msgid "" -#~ "A thick stalk, rooted to the ground.\n" -#~ "It rapidly sprouts thorny vines in all\n" -#~ "directions." -#~ msgstr "" -#~ "땅속에 뿌리를 내린 두꺼운 줄기입니다. 모든 방향으로 빠르게, 가시로 덮힌 줄" -#~ "기가 자라고 있습니다." +#~ msgid ".22 caliber retool" +#~ msgstr ".22 총열 부품(.22 caliber retool)" -#~ msgid "" -#~ "A thick stalk topped with a purple\n" -#~ "flower. The flower's petals are closed,\n" -#~ "and pulsate ominously." -#~ msgstr "" -#~ "자주색 꽃이 달려있는 두꺼운 줄기입니다. 꽃은 아직 피지 않았지만, 기분 나쁘" -#~ "게 흔들리고 있습니다." +#~ msgid "9mm caliber retool" +#~ msgstr "9mm 총열 부품(9mm caliber retool)" -#~ msgid "" -#~ "A plant that grows as high as your head,\n" -#~ "with one thick, bark-coated stalk\n" -#~ "supporting a flower-like head with a sharp\n" -#~ "sting within." -#~ msgstr "" -#~ "머리 높이만큼 길게 자란 식물입니다. 두꺼운 껍질로 덮힌 줄기가 꽃처럼 생긴 " -#~ "머리를 받치고 있으며, 머리엔 날카로운 가시가 달려있습니다." +#~ msgid ".308 caliber retool" +#~ msgstr ".308 총열 부품(.308 caliber retool)" -#~ msgid "" -#~ "A horrifying child zombie, you feel\n" -#~ "a twinge of remorse looking at it." -#~ msgstr "" -#~ "공포스러운 어린이 좀비입니다.\n" -#~ "보고 있으면 양심의 가책 때문에 고통스럽습니다." +#~ msgid ".223 caliber retool" +#~ msgstr ".223 총열 부품(.223 caliber retool)" -#~ msgid "" -#~ "This zombie seems to have a cloud of black\n" -#~ "dust surrounding it. It also seems to have\n" -#~ "a better grasp of movement than most..." -#~ msgstr "" -#~ "이 좀비는 검은 구름으로 둘러싸여 있습니다. 평범한 좀비들과는 격이 다른 것 " -#~ "같습니다..." +#~ msgid "A flimsy saw, useful for cutting through wood objects." +#~ msgstr "엉성하게 만든 톱입니다. 나무를 자르는데 유용합니다." -#~ msgid "" -#~ "An amalgamation of putrid human and animal\n" -#~ "parts that have become fused in this golem\n" -#~ "of flesh. The eyes of all the heads dart\n" -#~ "rapidly and the mouths scream or groan." -#~ msgstr "" -#~ "썩고 있는 인간과 동물 부위를 합쳐놓은 살덩이 골렘입니다. 몸에 붙어있는 눈" -#~ "이 빠르게 움직이며, 입에선 비명과 신음이 흘러나옵니다." +#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgstr "출혈을 막거나 제작에 유용하게 사용되는 헝겊입니다." -#~ msgid "" -#~ "Hundreds of bee stings have given this zombie\n" -#~ "a thick covering of scar tissue, it will be\n" -#~ "much harder to damage than an ordinary zombie\n" -#~ "but moves a bit slower" +#~ msgid "A piece of plastic. Not much use except to repair plastic items" #~ msgstr "" -#~ "수백 방에 달하는 벌침은 이 좀비에게 두꺼운 흉터 조직을 남겼습니다.\n" -#~ "일반 좀비보다 쓰러뜨리기 어렵지만, 움직임이 느립니다." +#~ "플라스틱 물품을 수리하는 용도 이외에는 딱히 용도가 없는 플라스틱 조각입니" +#~ "다." #~ msgid "" -#~ "This zombie seems to have slightly longer\n" -#~ "than ordinary arms, and constantly gropes\n" -#~ "at its surroundings as it moves." +#~ "A sharp needle made from a bone. It would be useful for making rough " +#~ "clothing and items" #~ msgstr "" -#~ "이 좀비는 보통 팔보다 약간 긴 팔을 가졌으며, 주변의 움직이는 것은 모두 붙" -#~ "잡으려고 합니다." +#~ "뼈로 만든 날카로운 바늘입니다. 단순한 의류나 물품을 제작하는데 유용합니다." #~ msgid "" -#~ "A skeleton picked clean of all but a few\n" -#~ "rotten scraps of flesh, somehow still in\n" -#~ "motion." +#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." #~ msgstr "" -#~ "썩은 고깃 조각이 약간 달린 것을 제외하면, 깨끗한 뼈로 이루어진 좀비입니" -#~ "다. 무슨 이유에선지 아직도 움직이고 있습니다." +#~ "조각낸 사과를 유리병에 넣어 밀봉한 것입니다. (a)로 열어 먹을수 있습니다." -#~ msgid "" -#~ "A zombie wearing a tattered lab coat and\n" -#~ "some sort of utility belt. It looks weaker\n" -#~ "than most zombies, but more resourceful too." -#~ msgstr "" -#~ "다목적 벨트와 찢어진 연구실 코트를 입은 좀비입니다. 일반적인 좀비보다 약해" -#~ "보이면서도, 일반적인 좀비들보다 유용한 것을 가지고 있습니다." +#~ msgid "vacuum-packed apple slices" +#~ msgstr "밀봉 포장 사과 조각(apple slices)" #~ msgid "" -#~ "A zombie with jet black skin and glowing red\n" -#~ "eyes. As you look at it, you're gripped by a\n" -#~ "feeling of dread and terror." +#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " +#~ "enjoy." #~ msgstr "" -#~ "불에 탄 듯 검은 피부와 붉게 빛나는 눈을 가진 좀비입니다. 이 좀비를 보고 있" -#~ "자니, 엄청난 공포에 휩싸이는 것 같습니다." +#~ "사과 조각을 플라스틱 비닐 진공 포장한것입니다. (a)로 열어 먹을수 있습니다." -#~ msgid "" -#~ "This zombie was clearly a soldier before.\n" -#~ "Its tattered armor gives it strong defense,\n" -#~ "and it is much more physically fit than\n" -#~ "most zombies." -#~ msgstr "" -#~ "이 좀비는 군인이었던 것이 확실합니다. 입고 있는 찢어진 방어구 덕분에 방어" -#~ "력이 강하고, 대부분의 좀비들보다 육체능력도 뛰어납니다." +#~ msgid "A plastic mold which can be used to craft items made of plastic." +#~ msgstr "플라스틱 물품을 만들때 사용하는 거푸집입니다." #~ msgid "" -#~ "A zombie that has somehow grown to the size of\n" -#~ "6 men, with arms as wide as a trash can." +#~ "This chemistry set stored in a bag contains some glass containers, some " +#~ "metal wire and safety glasses. It might be used to craft some chems if " +#~ "you're so inclined." #~ msgstr "" -#~ "어떻게인지는 몰라도, 사람 여섯명을 합쳐놓은 크기에 팔은 쓰레기통만큼 굵게 " -#~ "자라난 좀비입니다." +#~ "가방안에 몇가지 유리 용기, 철선, 보안경을 넣은 화학 용품 세트입니다. 화학 " +#~ "지식이 있으면 몇가지 화학 물질을 제조하는데 사용할수 있습니다." #~ msgid "" -#~ "A hideous beast of a zombie, bulging with\n" -#~ "distended muscles on both arms and legs." +#~ "A still, useful for the distillation of alcohol and other, more curious " +#~ "substances." #~ msgstr "" -#~ "좀비 중에서도 가장 무시무시한 괴물입니다.\n" -#~ "양 팔과 다리의 근육들이 팽창하고 부풀어 있습니다." +#~ "알콜 혹은 다른 여러 의문스러운 물질을 증류하는데 사용되는 증류기입니다." #~ msgid "" -#~ "This deformed, sinewy canine stays close to\n" -#~ "the ground, loping forward faster than most\n" -#~ "humans ever could." +#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " +#~ "stimulant when you inject yourself with it." #~ msgstr "" -#~ "변형된 근육질의 개입니다. 땅에 붙은 채로 대부분의 인간보다 빠른 속도로 움" -#~ "직입니다." +#~ "아드레날린이 들어있는 주사기입니다. 몸에 주입하면 강력한 각성 효과를 냅니" +#~ "다." #~ msgid "" -#~ "This zombie's mouth is deformed into a round\n" -#~ "spitter, and its body throbs with a dense\n" -#~ "yellow fluid." -#~ msgstr "" -#~ "이 좀비의 입은 무언가 뱉어낼 수 있게 변형됐습니다. 또한 이 좀비의 몸은 노" -#~ "란 액체로 꿀렁거리고 있습니다." +#~ "A small metalworking crucible. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "철제 물품 제작에 사용되는 소형 도가니입니다." #~ msgid "" -#~ "This zombie's flesh is pale blue, and it\n" -#~ "occasionally crackles with small bolts of\n" -#~ "lightning." -#~ msgstr "" -#~ "이 좀비의 살은 창백하면서도 파랗습니다. 그리고 주기적으로 몸에서 번개를 뿜" -#~ "어내며 파직 소리를 냅니다." +#~ "A hand-blown glass pipe of the type most commonly used to smoke " +#~ "hallucinatory plants." +#~ msgstr "주로 환각성 식물을 피우는데 사용되는 유리관입니다." #~ msgid "" -#~ "This zombie's hands and feet are\n" -#~ "webbed, and it is clad in swimwear." +#~ "A huge curved two-handed sword from Japan. Surprisingly light for its " +#~ "size." #~ msgstr "" -#~ "이 좀비의 손과 발에는 갈퀴가 있어서, 마치 수영복을 입은 것 같습니다." +#~ "일본에서 사용되었던 거대한 일본도 입니다. 크기에 비해 놀랍도록 가볍습니다." #~ msgid "" -#~ "A human body, stumbling slowly forward on\n" -#~ "uncertain legs, possessed with an unstoppable\n" -#~ "rage." -#~ msgstr "" -#~ "사람의 형상을 하고 있습니다. 다리 힘이 풀린 채로 앞을 향해 비틀비틀 걸어가" -#~ "며, 끝없는 분노에 사로잡혀 있습니다." +#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "짧고 튼튼한 금속 제작용 정입니다. 금속 물품 제작시에 사용됩니다." -#~ msgid "A portion of a giant worm that is still alive." -#~ msgstr "거대한 지렁이의 몸 일부입니다. 아직도 꿈틀거리며 살아있습니다." +#~ msgid "Cross-Dresser" +#~ msgstr "크로스-드레서" #~ msgid "" -#~ "This zombie's jaw has been torn off, leaving\n" -#~ "a gaping hole from mid-neck up." -#~ msgstr "" -#~ "이 좀비의 턱은 뜯겨져 나갔고, 목 중간 부분에 벌어진 구멍이 있습니다." +#~ "Covering your body in clothing typical for the opposite gender makes you " +#~ "feel better." +#~ msgstr "자신의 성과 반대되는 옷을 입을때 기분이 좋습니다." #~ msgid "" -#~ "A hideous slithering beast with a tri-\n" -#~ "sectional mouth that opens to reveal\n" -#~ "hundreds of writhing tongues. Most of its\n" -#~ "enormous body is hidden underground." +#~ "The bottoms of your feet are strongly padded. You receive no movement " +#~ "penalty for not wearing shoes, and even receive a 10%% bonus when running " +#~ "barefoot. Slightly decreases wet penalties." #~ msgstr "" -#~ "입이 3부분으로 나뉘어 있으며 속에 수백 개의 움직이는 혀를 가진 괴물입니" -#~ "다.\n" -#~ "땅속으로 숨어다니며, 거대한 몸집 대부분이 땅 속에 있습니다." +#~ "발바닥에 두꺼운 말랑거리는 부분이 있습니다. 신발을 신지 않아도 이동 패널티" +#~ "가 없으며, 오히려 달릴때 10% 의 보너스를 받습니다. 몸이 젖을때 받는 패널티" +#~ "를 약간 줄여줍니다." -#~ msgid "" -#~ "An evil-looking, slender-bodied wasp with\n" -#~ "a vicious sting on its abdomen." -#~ msgstr "" -#~ "흉악하게 생겼으며, 날렵한 몸을 가진 말벌입니다. 무서운 벌침을 가지고 있습" -#~ "니다." +#~ msgid "Claire" +#~ msgstr "클레어" -#~ msgid "" -#~ "A honey bee the size of a small dog. It\n" -#~ "buzzes angrily through the air, dagger-\n" -#~ "sized sting pointed forward." -#~ msgstr "" -#~ "작은 개 정도의 크기를 가진 꿀벌입니다. 꼬리에 단검 크기의 벌침을 가지고 있" -#~ "으며, 화난 듯이 날고 있습니다." - -#~ msgid "" -#~ "A large housefly the size of a small dog.\n" -#~ "It buzzes around incessantly." -#~ msgstr "" -#~ "작은 개 정도의 크기를 가진 집파리입니다. 미친듯이 왱왱거리며 날고 있습니" -#~ "다." +#~ msgid "Cole" +#~ msgstr "콜" -#~ msgid "" -#~ "Half of this monster is emerging from a\n" -#~ "hole in the ground. It looks like a huge\n" -#~ "earthworm, but the end has split into a\n" -#~ "large, fanged mouth." -#~ msgstr "" -#~ "몸집의 반이 땅에 난 구멍 밖으로 나와있습니다. 거대한 지렁이처럼 보이지만, " -#~ "끝부분이 이빨이 난 거대한 입으로 나뉘어 있습니다." +#~ msgid "Christian" +#~ msgstr "크리스티안" -#~ msgid "" -#~ "The size of a large cat, this pulsating mass\n" -#~ "of glistening white flesh turns your stomach." -#~ msgstr "" -#~ "큰 고양이 크기의 꿈틀거리는 몸에, 반들거리는 눈이 당신을 바라보고 있습니" -#~ "다." +#~ msgid "Christopher" +#~ msgstr "크리스토퍼" -#~ msgid "" -#~ "A red ant the size of a crocodile. It is\n" -#~ "covered in chitinous armor, and has a pair of\n" -#~ "vicious mandibles." -#~ msgstr "" -#~ "악어 크기의 붉은 개미입니다. 키틴질 갑각으로 덮혀있으며, 흉악하게 생긴 턱" -#~ "을 가지고 있습니다." +#~ msgid "Akiko" +#~ msgstr "아키코" -#~ msgid "" -#~ "Darker in color than the other ants, this\n" -#~ "more aggresive variety has even larger\n" -#~ "mandibles." -#~ msgstr "" -#~ "다른 개미보다 어두운 놈으로, 좀더 공격적이며 큰 턱을 가지고 있습니다." +#~ msgid "Aizawa" +#~ msgstr "아이자와" -#~ msgid "" -#~ "This insect is pale gray in color, its\n" -#~ "chitin weakened by the fungus sprouting\n" -#~ "from every joint on its body." -#~ msgstr "" -#~ "이 곤충은 창백한 회색이며, 키틴질 갑각은 진균체에 감염되어 온몸의 관절에" -#~ "서 발아하고 있습니다." +#~ msgid "Coleman" +#~ msgstr "콜맨" -#~ msgid "" -#~ "This ant has a long, bloated thorax, bulging\n" -#~ "with hundreds of small ant eggs. It moves\n" -#~ "slowly, tending to nearby eggs and laying\n" -#~ "still more." -#~ msgstr "" -#~ "이 개미는 크고, 부푼 가슴부분에 수백 개의 작은 개미알이 튀어나와 있습니" -#~ "다. 매우 느리게 움직이며 주변의 알을 돌보고 있고, 알을 더 낳고 있습니다." +#~ msgid "Collins" +#~ msgstr "콜린" -#~ msgid "A medium-sized domesticated dog, gone feral." -#~ msgstr "중간 크기의 가축화된 개입니다. 다시 야생화 되었습니다." +#~ msgid "Colton" +#~ msgstr "콜턴" -#~ msgid "A small domesticated cat, gone feral." -#~ msgstr "작은 크기의 가축화된 고양이입니다. 다시 야생화 되었습니다." +#~ msgid "Daniel" +#~ msgstr "다니엘" -#~ msgid "An american black bear. Remember, only YOU can prevent forest fires." -#~ msgstr "" -#~ "미국 검은곰입니다. 기억하세요, '당신' 만이 산불을 막을 수 있습니다. (역" -#~ "주 : 미국의 유명한 산불 공익광고 모델이 검은 곰입니다)" +#~ msgid "David" +#~ msgstr "데이비드" -#~ msgid "A vicious and fast hunter." -#~ msgstr "포악하며 재빠른 사냥꾼입니다." +#~ msgid "Cox" +#~ msgstr "콕스" -#~ msgid "A large buck, fast-moving and strong." -#~ msgstr "큰 수컷 사슴으로, 속도가 빠르고 힘도 좋습니다." +#~ msgid "Cooper" +#~ msgstr "쿠퍼" -#~ msgid "" -#~ "An eastern coyote, also called tweed wolf. It is an hybrid of grey wolves " -#~ "and the smaller western coyotes." -#~ msgstr "" -#~ "얼룩이 늑대라고도 불리는 동부 코요테입니다. 회색 늑대와 좀더 작은 서부 코" -#~ "요테의 혼혈입니다." +#~ msgid "Cook" +#~ msgstr "쿡" -#~ msgid "" -#~ "A cute wiggling nose, cotton tail, and\n" -#~ "delicious flesh." -#~ msgstr "" -#~ "꼼지락거리는 귀여운 코, 복실복실한 꼬리, 그리고 맛있는 고기를 가지고 있습" -#~ "니다." +#~ msgid "Connor" +#~ msgstr "코너" -#~ msgid "A common hydraulic jack, used when changing tires." -#~ msgstr "" -#~ "차량을 들어올릴 때 사용하는 수압식 잭입니다. 타이어 교환시 사용됩니다." +#~ msgid "Daisuki" +#~ msgstr "다이스키" -#~ msgid "" -#~ "A portable charcoal fired metalworking forge. Combined with the right " -#~ "tools, you can use this for metalworking." -#~ msgstr "" -#~ "목탄, 즉 숯을 사용하는 이동형 노입니다. 적당한 도구와 같이 사용하면 금속 " -#~ "물품을 제작할 수 있습니다." +#~ msgid "Clark" +#~ msgstr "클라크" #~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. This one has " -#~ "been lit, and its fuse is rapidly burning down." +#~ "Your legs have transformed into six tentacles. This decreases your speed " +#~ "on land by 20%%, but makes your movement silent. However, they also " +#~ "increase your swimming speed. Somewhat decreases wet penalties." #~ msgstr "" -#~ "병에 성냥머리를 채워넣고 퓨즈를 연결한 것입니다. 퓨즈에 불이 붙어있으며, " -#~ "빠른 속도로 타들어가고 있습니다." +#~ "다리가 6개의 촉수로 바뀌었습니다. 지상에서 이동시 속도가 20%% 감소하지만, " +#~ "소음을 내지 않고 이동할수 있으며, 수영시 이동속도가 증가합니다. 물에 젖을" +#~ "때 패널티를 줄여줍니다." -#~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. Use this item " -#~ "to light the fuse; you will, of course, need a lighter in your inventory " -#~ "to do this. After lighting it, throw it to cause fires." -#~ msgstr "" -#~ "병에 성냥머리를 채워넣고 퓨즈를 연결한 것입니다. 퓨즈에 불을 붙여 사용하" -#~ "며, 던지면 불을 낼 수 있습니다." +#~ msgid "Destiny" +#~ msgstr "데스티니" -#~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire. This one features a flip top cover and can be " -#~ "refueled when empty." -#~ msgstr "" -#~ "다양한 담배, 약물, 혹은 화염병 등에 불을 붙이는 용도로 사용되는 라이터입니" -#~ "다. 이 라이터는 위를 열어 연료를 재충전할 수 있습니다." +#~ msgid "Davis" +#~ msgstr "데이비스" -#~ msgid "" -#~ "A set of swages and dies for metalsmithing. Used in some metalworking " -#~ "fabrication recipes." -#~ msgstr "금속 제작에 사용되는 거푸집과 압착기입니다. 금속 제작에 사용됩니다." +#~ msgid "Dylan" +#~ msgstr "딜런" -#~ msgid "" -#~ "A portable electric metalworking forge, powered by standard batteries. " -#~ "Combined with the right tools, you can use this for metalworking." -#~ msgstr "" -#~ "이동용 전기식 용광로입니다. 일반 배터리를 사용하며, 적절한 다른 도구와 함" -#~ "께 사용하면 철제 물품을 제작할 수 있습니다." +#~ msgid "Dominic" +#~ msgstr "도미닉" -#~ msgid "" -#~ "An enormously heavy block of oddly shaped steel with a chisel-like " -#~ "projection set into the corner. Used in most metalworking fabrication " -#~ "recipes." -#~ msgstr "" -#~ "옆 부분이 정 모양으로 생긴, 거대하고 매우 무거운 쇳덩어리입니다. 철제 물" -#~ "품 제작에 주로 사용됩니다." +#~ msgid "Diego" +#~ msgstr "디에고" -#~ msgid "" -#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " -#~ "cooking or in metalworking fabrication recipes." -#~ msgstr "" -#~ "긴 철제 집게 입니다. 근접 무기로도 쓸만하며, 일반적으로 금속 물품을 제작" -#~ "할 때 사용됩니다. 음식을 만들 때 사용하기도 합니다." +#~ msgid "Diaz" +#~ msgstr "디아즈" -#~ msgid "" -#~ "A hand-carved wooden smoking pipe designed to facilitate consumption of " -#~ "fire cured tobacco leaves." -#~ msgstr "" -#~ "손으로 직접 조각해서 만든 목제 담뱃대입니다. 담배잎을 태워 흡입하는데 사용" -#~ "됩니다." +#~ msgid "Evan" +#~ msgstr "에반" -#~ msgid "" -#~ "A fine glass tube with a bulb on the end, used in partaking of certain " -#~ "illicit substances." -#~ msgstr "" -#~ "끝부분이 원형인 유리관입니다. 몇몇 불법적인 약물을 흡입하는데 사용됩니다." +#~ msgid "Evans" +#~ msgstr "에반스" -#~ msgid "A talking doll for children, luckily it still works." -#~ msgstr "" -#~ "어린아이들이 가지고 노는, 말하는 인형입니다. 운 좋게도, 아직 작동합니다." +#~ msgid "Flores" +#~ msgstr "플로레스" -#~ msgid "A fluffy towel, can be used to dry yourself." -#~ msgstr "" -#~ "털이 많은 수건으로, 젖은 몸을 말리는데 쓸 수 있습니다. 여행자의 필수품이" -#~ "죠." +#~ msgid "Faith" +#~ msgstr "페이트" -#~ msgid "A bicycle folded into a relatively portable package." -#~ msgstr "보관하기 쉽도록 접을 수 있는 자전거입니다." +#~ msgid "Gabriel" +#~ msgstr "가브리엘" -#~ msgid "" -#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " -#~ "metal, and complete disregard for personal safety. Not as efficient as a " -#~ "factory welder, but it will serve in a pinch." -#~ msgstr "" -#~ "구리 전선과 고철을 가지고 직접 손으로 만든, 조악한 수제 용접기입니다. 사용" -#~ "자 안전성 따위는 고려되지 않았습니다. 공장제 용접기만큼 효율적이지는 않지" -#~ "만, 그래도 작동은 합니다." +#~ msgid "Gabriella" +#~ msgstr "가브리엘라" -#~ msgid "" -#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "" -#~ "플라스틱 비닐을 이용해 진공 포장한 고기 조각입니다. (a) 키로 열어서 먹을 " -#~ "수 있습니다." +#~ msgid "Foster" +#~ msgstr "포스터" -#~ msgid "" -#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." -#~ msgstr "" -#~ "공기 펌프를 사용하여 진공상태로 만든 후, 열을 가해 밀봉하는 이동식 진공 포" -#~ "장기입니다. 음식을 포장하는데 사용할 수 있습니다." +#~ msgid "Garcia" +#~ msgstr "가르시아" -#~ msgid "" -#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "" -#~ "플라스틱 비닐을 이용해 진공 포장한 야채 조각입니다. (a) 키로 열어서 먹을 " -#~ "수 있습니다." +#~ msgid "Gabrielle" +#~ msgstr "가브리엘" -#~ msgid "A decent sized piece of cotton designed for medical purposes." -#~ msgstr "의료용으로 만들어진, 적당한 크기의 면 조각입니다." +#~ msgid " to remove parts." +#~ msgstr " 으로 부품 제거" -#~ msgid "" -#~ "A cordless drill with a selection of drill bits. The charger base " -#~ "contains a battery draining attachment so the drill can be charged in " -#~ "lieu of mains power." -#~ msgstr "" -#~ "몇개의 드릴이 포함된 무선 드릴입니다. 충전장치에 배터리를 사용할 수 있는 " -#~ "부분이 추가로 있어서, 주 전원 없이도 사용할 수 있습니다." +#~ msgid "You need level %d skill in mechanics." +#~ msgstr "기계공학 스킬이 %d 필요합니다." -#~ msgid "" -#~ "A sealed glass jar containing pickled human flesh. Activate to open. You " -#~ "might even enjoy it." -#~ msgstr "" -#~ "절인 인육을 유리병에 넣어 밀봉한 것입니다. (a)로 열어 먹을 수 있습니다. 조" -#~ "금 더 맛있을지도 모릅니다." +#~ msgid "K mass: " +#~ msgstr "K mass: " -#~ msgid "" -#~ "A sealed glass jar containing a pickled vegetable. Activate to open and " -#~ "enjoy." -#~ msgstr "" -#~ "절인 채소를 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." +#~ msgid "K dynamics: " +#~ msgstr "K dynamics: " -#~ msgid "" -#~ "A sealed glass jar containing pickled meat. Activate to open and enjoy." -#~ msgstr "" -#~ "절인 고기를 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." +#~ msgid " skill in mechanics." +#~ msgstr " 기계공학 기술 필요" -#~ msgid "A sealed glass jar containing kompot. Activate to open and enjoy." -#~ msgstr "" -#~ "캄포트가 들어있는 밀봉된 유리병입니다. (a) 키로 열어서 먹을 수 있습니다. " -#~ "캄포트는 과일을 넣고 물을 많이 넣어 끓인 주스입니다." +#~ msgid ", and level " +#~ msgstr ", 그리고 레벨 " -#~ msgid "" -#~ "A sealed glass jar containing human meat. Activate to open and enjoy." -#~ msgstr "" -#~ "대체 고기... 즉 인육을 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 " -#~ "수 있습니다." +#~ msgid ", a " +#~ msgstr ", " -#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." -#~ msgstr "" -#~ "채소를 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." +#~ msgid "Needs " +#~ msgstr " 조건 " -#~ msgid "" -#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " -#~ "make it ready to fire. Once activated, it cannot be repacked." -#~ msgstr "" -#~ "가지고 다니기 위해 접어놓은 M72 LAW 입니다. (a) 키로 무기를 펼쳐 발사할 " -#~ "수 있게 만들 수 있습니다. 단 한번 펴면, 다시 접을 수 없습니다." +#~ msgid " skill in mechanics to install additional engine." +#~ msgstr " 기계공학 기술이 있으면 추가 엔진을 설치 할수 있음." -#~ msgid "" -#~ "A sealed glass jar containing some meat. Activate to open and enjoy." -#~ msgstr "" -#~ "유리병에 고기를 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." +#~ msgid " You also need level " +#~ msgstr " 또한 " -#~ msgid "" -#~ "A large stick, with the end carved into a blade for digging. Can be used " -#~ "to dig shallow pits, but not deep ones." -#~ msgstr "" -#~ "끝을 날처럼 깎아서 구멍을 파는데 쓰는 긴 막대기입니다. 얕은 구멍은 팔 수 " -#~ "있지만, 깊은 구덩이는 팔 수 없습니다." +#~ msgid "Eric" +#~ msgstr "에릭" -#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." -#~ msgstr "" -#~ "작은 피난처를 만드는데 필요한 막대기와 천입니다. (a) 키로 설치합니다." +#~ msgid "Ethan" +#~ msgstr "에단" -#~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. This one has " -#~ "been used already and is now useless." -#~ msgstr "" -#~ "운동 부상 치료와 음식을 데울 때 사용하는 발열팩입니다. 이미 사용했기 때문" -#~ "에, 이제 쓸모가 없습니다." +#~ msgid "Elizabeth" +#~ msgstr "엘리자베스" -#~ msgid "" -#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " -#~ "shelter has been damaged, and needs repairs." -#~ msgstr "" -#~ "작은 피난처를 만드는데 필요한 막대기와 천입니다. (a) 키로 설치합니다. 이 " -#~ "키트는 손상을 입었기 때문에, 수리가 필요합니다." +#~ msgid "Elijah" +#~ msgstr "일라이자" -#~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. Usable only " -#~ "once." -#~ msgstr "운동 부상 치료와 음식을 데울 때 사용하는 발열팩으로, 일회용입니다." +#~ msgid "Eli" +#~ msgstr "엘리" -#~ msgid "" -#~ "A rock affixed to a stick, functions adequately as a hammer, but really " -#~ "can't compare to a proper hammer." -#~ msgstr "" -#~ "돌에 막대기를 부착한 것입니다. 망치로서는 충분한 기능을 수행하지만, 진짜 " -#~ "망치보다는 못합니다." +#~ msgid "Ella" +#~ msgstr "엘라" -#~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." -#~ msgstr "" -#~ "납작한 돌을 막대기에 묶은 것입니다. 삽으로 사용할수 있지만, 진짜 삽보다는 " -#~ "못합니다." +#~ msgid "Edwards" +#~ msgstr "에드워드" -#~ msgid "" -#~ "A sharpened stone affixed to a stick, works passably well as an axe but " -#~ "really can't compare to a proper axe." -#~ msgstr "" -#~ "막대기에 날카로운 돌을 붙인 것입니다. 도끼로 사용할 수 있지만, 진짜 도끼보" -#~ "다는 못합니다." +#~ msgid "Eben" +#~ msgstr "에번" -#~ msgid "" -#~ "A small multipurpose electronic device. Can be loaded with a variety of " -#~ "apps, providing all kinds of functionality." -#~ msgstr "" -#~ "다용도 소형 전자기기입니다. 다양한 앱을 로드해서 수많은 기능을 사용할 수 " -#~ "있습니다." +#~ msgid "Emma" +#~ msgstr "엠마" -#~ msgid "A small pocket knife, not great for combat, but better than nothing." -#~ msgstr "" -#~ "작은 주머니 칼입니다. 전투에는 적합하지 않지만, 그래도 없는 것보다는 낫습" -#~ "니다." +#~ msgid "Emily" +#~ msgstr "에밀리" -#~ msgid "" -#~ "A small multipurpose electronic device. This PDA has its flashlight app " -#~ "on, and is providing light." -#~ msgstr "" -#~ "다용도 소형 전자기기입니다. 이 PDA 에는 손전등 앱이 들어있어서, 조명으로 " -#~ "사용할 수 있습니다." +#~ msgid "Green" +#~ msgstr "그린" -#~ msgid "A piece of kevlar. Can be used to repair kevlar items" -#~ msgstr "" -#~ "케블라, 즉 방탄 직물 조각입니다. 케블라로 만들어진 물품을 수리할 때 사용됩" -#~ "니다." +#~ msgid "Gendo" +#~ msgstr "겐도" -#~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." -#~ msgstr "" -#~ "'킹 사이즈' 사의 공업용 반영구 마커입니다. 일반적인 마커와 캔 스프레이의 " -#~ "중간 정도 크기입니다." +#~ msgid "Gray" +#~ msgstr "그레이" -#~ msgid "A large steel pickaxe, strike the earth!" -#~ msgstr "큼직한 철제 곡괭이입니다. 땅을 찍으세요!" +#~ msgid "Gracie" +#~ msgstr "그레이시" -#~ msgid "" -#~ "A spray can, filled with paint. Use this tool to make graffiti on the " -#~ "floor." -#~ msgstr "페인트 스프레이입니다. 사용하여 바닥에 낙서를 할 수 있습니다." +#~ msgid "Genesis" +#~ msgstr "지노시스" -#~ msgid "" -#~ "A combination lock box, breaking inside would destroy anything of value." -#~ msgstr "" -#~ "복합 잠금 장치가 되어있는 상자입니다. 강제로 열면 안에 있는 것이 부서질 " -#~ "것 같습니다." +#~ msgid "Gavin" +#~ msgstr "개빈" -#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." -#~ msgstr "올가미 덫에 사용하기 위해 손질한 막대기입니다." +#~ msgid "Grace" +#~ msgstr "그레이스" -#~ msgid "" -#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " -#~ "gauge wire." -#~ msgstr "" -#~ "대형 절단기입니다. 사용하여 맹꽁이자물쇠나 굵은 철사를 잘라낼 수 있습니다." +#~ msgid "Gonzalez" +#~ msgstr "곤잘레스" -#~ msgid "An unwieldy mop. Good for cleaning up spills." -#~ msgstr "다루기 불편한 대걸레입니다. 바닥의 액체를 닦아낼 때 사용합니다." +#~ msgid "Gonzales" +#~ msgstr "곤잘레스" -#~ msgid "" -#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " -#~ "quickly opening locks." -#~ msgstr "" -#~ "조용히 잠금장치를 여는데 필요한, 자물쇠 수리공의 견고한 철제 도구입니다." +#~ msgid "Gianna" +#~ msgstr "지안나" -#~ msgid "" -#~ "An improvised easy breaking picklock made from scrap metal, needs " -#~ "MacGyver like skills to open locks, it's light material lessens chances " -#~ "of alarms being set off." -#~ msgstr "" -#~ "고철로 만든 조잡한 락픽입니다. 쉽게 부러지기 때문에, 이걸로 잠금 장치를 열" -#~ "려면 맥가이버 급의 기술이 필요합니다. 대신 아주 가볍기 때문에, 경보를 울" -#~ "릴 가능성은 낮습니다." +#~ msgid "Henderson" +#~ msgstr "헨더슨" -#~ msgid "" -#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " -#~ "mechanics crafting recipes." -#~ msgstr "" -#~ "조절 가능한 렌치입니다. 근접무기로도 쓸만하며, 다양한 기계 제작에 쓰입니" -#~ "다." +#~ msgid "Henry" +#~ msgstr "헨리" -#~ msgid "" -#~ "A Philips-head screwdriver, important for almost all electronics crafting " -#~ "and most mechanics crafting." -#~ msgstr "" -#~ "필립스 사에서 만든 드라이버입니다. 거의 모든 전자기기 제작과 다른 기계 제" -#~ "작에 상당히 중요하게 쓰입니다." +#~ msgid "Griffin" +#~ msgstr "그리핀" -#~ msgid "A tool used for disassembling firearm ammunition." -#~ msgstr "탄환류의 분해에 쓰이는 도구입니다." +#~ msgid "Hailey" +#~ msgstr "헤일리" -#~ msgid "" -#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " -#~ "outside and place a container beneath it to collect water when it rains." -#~ msgstr "" -#~ "빗물을 모으는 수제 깔때기입니다. 야외에서 'a' 키를 눌러 작동한 다음 밑에 " -#~ "용기를 놔두면, 비가 올 때 물을 모을 수 있습니다." +#~ msgid "Hall" +#~ msgstr "홀" -#~ msgid "" -#~ "A small hand press for hand loading firearm ammunition. Comes with " -#~ "everything you need to start hand loading." -#~ msgstr "" -#~ "총기의 탄약에 장약을 넣는데 사용하는, 소형 수동 압착기입니다. 탄약 제작에 " -#~ "필요한 다른 도구도 포함되어 있습니다." +#~ msgid "Hannah" +#~ msgstr "헤나" -#~ msgid "" -#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " -#~ "container beneath it to collect water when it rains." -#~ msgstr "" -#~ "빗물을 모으는 깔때기입니다. 야외에서 'a' 키를 눌러 작동한 다음 밑에 용기" -#~ "를 놔두면, 비가 올 때 물을 모을 수 있습니다." +#~ msgid "Harris" +#~ msgstr "해리스" -#~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time." -#~ msgstr "" -#~ "굵은 양초입니다. 아주 밝은 빛을 내진 않지만, 제법 오랫동안 켜둘 수 있습니" -#~ "다." +#~ msgid "Hayden" +#~ msgstr "헤이던" -#~ msgid "" -#~ "A large stand with slots in the side. (a)ctivate it and place it " -#~ "somewhere then set fires in it with no risk of spreading." -#~ msgstr "" -#~ "한 쪽에 구멍이 있는 스탠드입니다. (a) 키를 눌러 설치하며, 불을 화재의 위" -#~ "험 없이 붙일 수 있습니다." +#~ msgid "Heather" +#~ msgstr "헤더" -#~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time. This candle is lit." -#~ msgstr "" -#~ "굵은 양초입니다. 아주 밝은 빛을 내진 않지만, 제법 오랫동안 켜둘 수 있습니" -#~ "다. 이 양초는 켜져 있습니다." +#~ msgid "Hayes" +#~ msgstr "헤이즈" -#~ msgid "" -#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." -#~ msgstr "" -#~ "커다란 양손 도끼로, 근접전 무기로 유용하지만 공격은 조금 느려집니다." +#~ msgid "Hikari" +#~ msgstr "히카리" -#~ msgid "A sturdy saw, useful for cutting through metal objects." -#~ msgstr "금속 물체를 자르는데 유용한, 튼튼한 톱입니다." +#~ msgid "Isabel" +#~ msgstr "이사벨" -#~ msgid "A small tent, just big enough to fit a person comfortably." -#~ msgstr "사람 한 명이 들어가 쉴 만한 크기의, 소형 텐트입니다." +#~ msgid "Hill" +#~ msgstr "힐" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " -#~ "amount of light" -#~ msgstr "" -#~ "천에 휘발유를 적셔 큰 막대기에 감아둔 횃불입니다. 불을 붙이면 상당한 빛을 " -#~ "제공합니다." +#~ msgid "Hernandez" +#~ msgstr "헤르난데스" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " -#~ "producing plenty of light" -#~ msgstr "" -#~ "천에 휘발유를 적셔 큰 막대기에 감아둔 횃불입니다. 불타고 있으며, 환하게 빛" -#~ "을 뿜어내고 있습니다." +#~ msgid "Hughes" +#~ msgstr "휴즈" -#~ msgid "" -#~ "Designed for combat, and deadly in the right hands. Can be used to " -#~ "butcher corpses." -#~ msgstr "" -#~ "전투용으로 설계되었으며, 능숙한 손에 들리면 치명적인 군용 나이프입니다." -#~ "\r\n" -#~ "시체를 도축할 때 사용할 수 있습니다." +#~ msgid "Howard" +#~ msgstr "하워드" -#~ msgid "" -#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " -#~ "corpses." -#~ msgstr "" -#~ "날카로운 나이프입니다. 근접전 무기로써는 형편없지만, 시체를 도축할 때 상당" -#~ "히 좋습니다." +#~ msgid "Ian" +#~ msgstr "란" -#~ msgid "" -#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " -#~ "butchering corpses." -#~ msgstr "" -#~ "날카롭고 무거운 칼입니다. 좋은 근접전 무기일 뿐만 아니라, 시체를 도축하는" -#~ "데 있어 최고의 무기입니다." +#~ msgid "Hunter" +#~ msgstr "헌터" -#~ msgid "" -#~ "A large blade attached to a long stick. Could do a considerable amount of " -#~ "damage." -#~ msgstr "" -#~ "큰 칼날을 긴 막대에 붙인 무기입니다. 상당한 양의 데미지를 줄 수 있습니다." +#~ msgid "Isaac" +#~ msgstr "아이작" -#~ msgid "" -#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " -#~ "built into the insulated hilt. When filled with gasoline, the blade can " -#~ "be made scorching hot to singe enemies and light your way." -#~ msgstr "" -#~ "큰 칼날 옆에 연료 파이프, 작은 연료 탱크, 점화기, 방열 손잡이가 달린 무기" -#~ "입니다. 연료가 있으면 칼날이 불로 타올라, 적을 태워버리고 앞을 밝힐 수 있" -#~ "습니다." +#~ msgid "Isabella" +#~ msgstr "이사벨라" -#~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " -#~ "eat it's heart out." -#~ msgstr "" -#~ "중세 암흑기의 고전적인 결의 표현 도구였던 브로드 소드와, 횃불을 합친 것입" -#~ "니다. 칼날이 열로 빛나고 있습니다. 꼭 엑스칼리버 같네요." +#~ msgid "Jasmine" +#~ msgstr "재스민" -#~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. Light it up and show those heathen zombies " -#~ "who's Lord around here." -#~ msgstr "" -#~ "중세 암흑기의 고전적인 결의 표현 도구였던 브로드 소드와, 횃불을 합친 것입" -#~ "니다. 좀비들을 불태우고 신이 아직 존재하심을 보여줍시다." +#~ msgid "Jason" +#~ msgstr "제이슨" -#~ msgid "" -#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " -#~ "built into the insulated hilt. The blade is glowing brightly." -#~ msgstr "" -#~ "큰 칼날 옆에 연료 파이프, 작은 연료 탱크, 점화기, 방열 손잡이가 달린 무기" -#~ "입니다. 칼날이 밝게 빛나고 있습니다." +#~ msgid "Jaden" +#~ msgstr "제이든" -#~ msgid "" -#~ "A large blade that has had a portion of the handle wrapped in duct tape, " -#~ "making it easier to wield as a rough machete." -#~ msgstr "" -#~ "큰 칼날의 밑부분을 접착 테이프로 감아서, 손잡이로 쓸 수 있게 만든 칼입니" -#~ "다. 조잡한 정글도 정도로 사용할 수 있습니다." +#~ msgid "Jackson" +#~ msgstr "잭슨" -#~ msgid "A huge two-handed sword from Germany. Packs a real whallop." -#~ msgstr "" -#~ "독일에서 처음 만들어진 거대한 양손검입니다. 적에게 일격을 날려보세요." +#~ msgid "Jacob" +#~ msgstr "제이콥" -#~ msgid "" -#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " -#~ "Called 'broad' to contrast with the slimmer rapiers." -#~ msgstr "" -#~ "근대 초기, 즉 16~18세기까지 사용되었던 검입니다.\r\n" -#~ "'넒다(Broad)'라는 말은, 얆은 레이피어에 비해서 넒다는 뜻입니다." +#~ msgid "Isaiah" +#~ msgstr "이사야" -#~ msgid "" -#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " -#~ "Though large and heavy compared to other spears, its accuracy and damage " -#~ "are unparalled." -#~ msgstr "" -#~ "중세시대의 무기로, 나무로 된 자루와 철제 스파이크를 가지고 있습니다.\r\n" -#~ "다른 창들과 비교해 무겁고 큰 편이지만, 그 정확도와 데미지는 어떤 창에도 견" -#~ "줄 수 없습니다." +#~ msgid "Isabelle" +#~ msgstr "이사벨" -#~ msgid "" -#~ "A katana that glows with the fury and heat of the SUN! Well, okay it's " -#~ "not THAT hot, but getting hit with it still stings like the dickens." -#~ msgstr "" -#~ "태양 같은 열기를 내뿜는, 불붙은 일본도 입니다. 물론 태양과 같은 열기를 내" -#~ "뿜는건 아니지만, 명중하면 상당한 피해를 줍니다." +#~ msgid "James" +#~ msgstr "제임스" -#~ msgid "" -#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " -#~ "makes any battle a stylish battle." -#~ msgstr "" -#~ "신사나 허세부리길 좋아하는 사람들이 선호하는 무기입니다.\r\n" -#~ "가볍고 빠른 무기로, 어떠한 전투든 우아하게 바꿔줄 것입니다." +#~ msgid "Jayden" +#~ msgstr "제이든" -#~ msgid "A simple wood pole made deadlier by the blade tied to it." -#~ msgstr "" -#~ "간단한 나무 막대기에 칼날을 끝에 묶음으로써, 치명적인 무기로 재탄생되었습" -#~ "니다." +#~ msgid "Jack" +#~ msgstr "잭" -#~ msgid "" -#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " -#~ "effective against armor." -#~ msgstr "" -#~ "일본의 진귀한 칼입니다. 방어구를 입지 않은 적을 상태로 치명적인 데미지를 " -#~ "줍니다.\r\n" -#~ "하지만, 그렇다고 방어구를 입은 적에게 효과가 없는건 아닙니다." +#~ msgid "Jen" +#~ msgstr "젠" -#~ msgid "" -#~ "People love fire, and people love katanas, so why not put them together? " -#~ "The gas burners attached to this blade can really turn up the heat on " -#~ "your foes." -#~ msgstr "" -#~ "사람들은 일본도와 불을 사랑합니다. 그러니 같이 쓰면 좋지 않을까요? 가스 버" -#~ "너가 칼날에 부착되어 있어서, 적을 불태워버릴 수 있습니다." +#~ msgid "Jenkins" +#~ msgstr "젠킨슨" -#~ msgid "" -#~ "This huge iron knife has been modified with a fuel tank, insulated " -#~ "handguard and ignition system. When filled with gasoline, a system of " -#~ "torches heats the blade, burning your target." -#~ msgstr "" -#~ "연료 탱크를 부착한, 큰 철로 만든 나이프입니다. 손 보호부와 점화 부품이 달" -#~ "려있어서, 가솔린을 채워서 작동시키면 칼날에 불이 붙어 적을 불태울 수 있습" -#~ "니다." +#~ msgid "John" +#~ msgstr "존" -#~ msgid "" -#~ "This huge iron knife has been modified with a fuel tank, insulated " -#~ "handguard and ignition system. The blade is glowing with heat, making it " -#~ "a great plant scorcher and nightlight." -#~ msgstr "" -#~ "연료 탱크를 부착한, 큰 철로 만든 나이프입니다. 손 보호부와 점화 부품이 달" -#~ "려있어서, 칼날에 불이 붙은 상태입니다. 칼날에서 빛이 나며, 뭔가를 태우기" -#~ "에 좋을 것 같습니다." +#~ msgid "Jocelyn" +#~ msgstr "조셀린" -#~ msgid "This huge iron knife makes an excellent melee weapon." -#~ msgstr "거대한 철제 칼로, 훌륭한 근접전 무기입니다." +#~ msgid "Jesus" +#~ msgstr "지져스" -#~ msgid "" -#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " -#~ "with. Its small tip allows for a precision strike in the hands of the " -#~ "skilled. It is too small to butcher corpses with." -#~ msgstr "" -#~ "작고, 굉장히 예리한 칼입니다. 그럭저럭 나쁘지 않은 데미지를 주며, 보통 이 " -#~ "무기를 명중시키는 것은 어렵지만 숙련된 사람은 아주 정확한 공격을 할 수 있" -#~ "습니다. 시체를 도축하기에는 너무 칼이 작습니다. (역주 : 실제 있는 유틸리" -#~ "티 나이프입니다. 프라모델, 공작용)" +#~ msgid "Jessie" +#~ msgstr "제시" -#~ msgid "" -#~ "A small whistle. When used, it produces a high tone that causes nearby " -#~ "friendly dogs to either follow you closely and stop attacking, or start " -#~ "attacking enemies if they are currently docile." -#~ msgstr "" -#~ "작은 호루라기입니다. 사용하면 고주파가 발생되어 주변의 우호적인 개들이 당" -#~ "신을 따라오거나, 당신을 공격하는 걸 멈추거나, 또는 적에게 공격을 가하기도 " -#~ "합니다." +#~ msgid "Jessica" +#~ msgstr "제시카" -#~ msgid "" -#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " -#~ "the sample. Use this tool to draw blood, either from yourself or from a " -#~ "corpse you are standing on." -#~ msgstr "" -#~ "혈액을 채취하는데 사용하는 도구입니다. 샘플을 담기 위한 진공 포장 튜브도 " -#~ "있습니다. 이것을 사용해 자신이나, 당신 발 밑에 있는 시체의 혈액을 채혈할 " -#~ "수 있습니다." +#~ msgid "Jeremiah" +#~ msgstr "제레미" -#~ msgid "" -#~ "A military style fold up cot, not quite as comfortable as a bed but much " -#~ "better than slumming it on the ground." -#~ msgstr "" -#~ "군대식의 접이식 간이 침대. 침대만큼 편하진 않지만, 땅바닥에서 자는 것보단 " -#~ "낫습니다." +#~ msgid "Jennifer" +#~ msgstr "제니퍼" -#~ msgid "" -#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " -#~ "from the floor, making it easier to sleep" -#~ msgstr "" -#~ "단단히 말아서 보관할 수 있는 발포지. 바닥의 냉기나 열기로부터 조금 떨어지" -#~ "게 해서, 조금 더 잠들기 쉽게 만들어줍니다." +#~ msgid "Johnson" +#~ msgstr "존슨" -#~ msgid "Highly explosive, use with caution! Armed with a small timer." -#~ msgstr "고폭탄입니다. 주의해서 사용하십시오! 작은 타이머가 달려있습니다." +#~ msgid "Joshua" +#~ msgstr "조슈아" -#~ msgid "" -#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " -#~ "and ticking!" -#~ msgstr "" -#~ "고폭탄입니다. 주의해서 사용하십시오! 작은 타이머가 달려있습니다.\r\n" -#~ "이미 작동되어, 째깍거리는 소리를 내고 있습니다!" +#~ msgid "Josiah" +#~ msgstr "조시어" -#~ msgid "A crude explosive device triggered by a piece of string." -#~ msgstr "줄 하나로 작동되는, 대충 만들어진 기폭 장치입니다." +#~ msgid "Juan" +#~ msgstr "후안" -#~ msgid "A human skull with strange etchings covering it." -#~ msgstr "수상한 문양이 아로새겨진 인간의 두개골입니다." +#~ msgid "Julia" +#~ msgstr "줄리아" -#~ msgid "Food for dogs. It smells strange, but dogs love it." -#~ msgstr "개를 위한 사료. 이상한 냄새가 나지만, 개들은 정말 좋아합니다." +#~ msgid "Jones" +#~ msgstr "존스" -#~ msgid "" -#~ "A high-powered stun gun. Use this item to attempt to electrocute an " -#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " -#~ "shock can actually jump through the air, it is difficult to miss." -#~ msgstr "" -#~ "고전압의 전기 충격기. 인접한 적을 감전시켜 피해를 주고, 일시적으로 마비시" -#~ "킵니다.\r\n" -#~ "충격이 공기를 빠르게 통과하여 날아가는 형식이기 때문에, 빗나갈 확률이 거" -#~ "의 없습니다." +#~ msgid "Jordan" +#~ msgstr "조단" -#~ msgid "" -#~ "A portable games console in working condition, with a backlit screen " -#~ "allowing you to play in the dark. You can use it to play it for a little " -#~ "while, but this requires batteries." -#~ msgstr "" -#~ "백라이트 액정이 달려, 어두운 곳에서도 사용할 수 있는 휴대용 게임기입니다. " -#~ "사용하면 갖고 놀 수 있지만, 배터리가 필요합니다." +#~ msgid "Jose" +#~ msgstr "조시" -#~ msgid "" -#~ "A stone with spirals all over it, and holes around its perimeter. Though " -#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " -#~ "it." -#~ msgstr "" -#~ "나선이 빼곡히 새겨진 돌입니다. 주변부에 구멍이 많이 뚫려있습니다.\r\n" -#~ "상당히 큼직지만, 무게는 그리 나가지 않습니다. 바람이 주위로 모여드는 것 같" -#~ "습니다." +#~ msgid "Joseph" +#~ msgstr "조셉" -#~ msgid "" -#~ "An inactive turret. Using this item involves turning it on and placing it " -#~ "on the ground, where it will attach itself. The turret will then identify " -#~ "you as a friendly, and attack all enemies with an SMG." -#~ msgstr "" -#~ "비활성화된 터렛. 작동시켜서 땅 위에 올려두면 자동으로 설치됩니다. 터렛은 " -#~ "당신을 아군으로 생각할 것이며, 모든 적들을 기관단총으로 공격할 것입니다." +#~ msgid "Julian" +#~ msgstr "줄리안" -#~ msgid "" -#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " -#~ "air. They are covered with whirring blades and attack by throwing " -#~ "themselves against their target. Use this item to activate the manhack." -#~ msgstr "" -#~ "비활성화된 맨핵입니다. 맨핵은 공중에 뜨는 능력이 있는, 주먹 크기의 로봇입" -#~ "니다. 회전하는 칼날이 부착되어 있어 작동되면 적에 직접 부딪치는 방식으로 " -#~ "공격합니다.\r\n" -#~ "(a) 키로 사용하면 맨핵을 활성화 시킵니다." +#~ msgid "Jonathan" +#~ msgstr "조나단" -#~ msgid "" -#~ "An advanced version of the unified power supply, or UPS. This device has " -#~ "been significantly redesigned to provide better efficiency as well as to " -#~ "consume plutonium fuel cells rather than batteries." -#~ msgstr "" -#~ "통합 전원 장치의 개량된 버전입니다. 효율이 떨어지는 배터리 대신 플루토늄 " -#~ "연료 전지를 사용해서, 높은 효율을 내도록 만들어졌습니다." +#~ msgid "Keita" +#~ msgstr "케이타" -#~ msgid "" -#~ "This miniature nuclear bomb has a light blinking on the side, showing " -#~ "that it will soon explode. You should probably get far away from it." -#~ msgstr "" -#~ "옆부분에 빛이 깜빡거리는 소형화된 핵폭탄입니다. 곧 폭발할 것 같아보입니" -#~ "다. 멀리 피해야만 합니다." +#~ msgid "Kaiko" +#~ msgstr "카이코" -#~ msgid "A rare and arcane device, covered in alien markings." -#~ msgstr "" -#~ "매우 희귀하고 알 수 없는 방식으로 작동하는 장치입니다. 알 수 없는 기괴한 " -#~ "문양으로 덮여있습니다." +#~ msgid "Kelly" +#~ msgstr "켈리" -#~ msgid "" -#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " -#~ "it to activate the timer. Ten turns later it will explode, leaving behind " -#~ "a radioactive crater. The explosion is large enough to take out a house." -#~ msgstr "" -#~ "위력이 극도로 강력한, 소형화된 핵폭탄입니다. 손에 들 수 있을 정도로 작습니" -#~ "다. 타이머를 작동시킨 후 10 턴이 지나면 폭발합니다. 터지면 방사능을 남기" -#~ "며, 폭발력은 집 하나를 날려버리기에 충분합니다." +#~ msgid "Kaden" +#~ msgstr "카덴" -#~ msgid "" -#~ "Several sticks of explosives with a fuse attached. Use this item to light " -#~ "the fuse; you will, of course, need a lighter in your inventory to do " -#~ "this. Shortly after lighting the fuse, this item will explode, so get " -#~ "away!" -#~ msgstr "" -#~ "몇개의 폭발물 막대 묶음에 신관을 연결한 것입니다. 불을 붙여 사용할 수 있으" -#~ "며, 불을 붙일 라이터 등을 가지고 있어야 합니다. 신관에 불을 붙이면 얼마 있" -#~ "지 않아 폭발하기 때문에, 대피해야 합니다!" +#~ msgid "Justin" +#~ msgstr "저스틴" -#~ msgid "" -#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " -#~ "now." -#~ msgstr "뇌관에 불이 붙어 소리를 내고 있습니다. 곧 폭발할 것입니다." +#~ msgid "Kaylee" +#~ msgstr "케일리" -#~ msgid "" -#~ "A firecracker with a short fuse. Use this item to light the fuse; you " -#~ "will need a lighter of course. Shortly after you light the fuse it will " -#~ "explode, so throw it quickly!" -#~ msgstr "" -#~ "짧은 도선이 달린 폭죽입니다. 도선에 불을 붙여서 사용할 수 있습니다. 불을 " -#~ "붙이면 얼마 있지 않아 폭발합니다. 대피하세요!" +#~ msgid "Kayla" +#~ msgstr "케일라" -#~ msgid "" -#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " -#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " -#~ "they will begin to explode, so throw them quickly!" -#~ msgstr "" -#~ "폭죽 25개를 묶어놓은 것입니다. 불을 붙여서 사용합니다. 물론 라이터가 필요" -#~ "하며, 불을 붙이면 얼마 있지 않아 폭발합니다. 대피하세요!" +#~ msgid "Kaitlin" +#~ msgstr "케이틀린" -#~ msgid "" -#~ "A glass vial, split into two chambers. The divider is removable, which " -#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " -#~ "happens if you throw the vial) they will spill out as a pool of potent " -#~ "acid." -#~ msgstr "" -#~ "내부가 2개로 나뉘어진 유리 약병입니다. 내부 분리 부분은 제거가 가능하며, " -#~ "제거하면 내부 화학물질이 혼합됩니다. 이 혼합물이 공기중에 노출되면 강한 산" -#~ "성 웅덩이가 생깁니다." +#~ msgid "Katie" +#~ msgstr "케티" -#~ msgid "" -#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " -#~ "the rag; you will, of course, need a lighter in your inventory to do " -#~ "this. After lighting it, throw it to cause fires." -#~ msgstr "" -#~ "가연성 액채를 채우고 천을 꽂은 병입니다. 사용하면 불을 붙이고(물론 라이터" -#~ "가 필요합니다), 불을 붙인 후에 던지면 불을 낼 수 있습니다." +#~ msgid "Katelyn" +#~ msgstr "카텔린" -#~ msgid "" -#~ "Use this item to pull the pin. Five turns after you do that, it will " -#~ "begin to expel a highly toxic gas for several turns. This gas damages and " -#~ "slows those who enter it, as well as obscuring vision and scent." -#~ msgstr "" -#~ "핀을 뽑아 사용하며, 5턴 후 고독성의 가스를 방출합니다. 이 가스를 들이마시" -#~ "면 느린 속도로 데미지를 입으며, 시각과 후각을 방해받습니다." +#~ msgid "Kira" +#~ msgstr "키라" -#~ msgid "" -#~ "This canister of teargas has had its pin removed, indicating that it is " -#~ "(or will shortly be) expelling highly toxic gas." -#~ msgstr "" -#~ "핀이 뽑힌 최루탄으로, 지금 독가스를 뿜어내고 있습니다. (또는 곧 뿜어낼 것" -#~ "입니다)" +#~ msgid "Kylie" +#~ msgstr "카일리" -#~ msgid "" -#~ "Use this item to pull the pin. Five turns after you do that, it will " -#~ "begin to expel a thick black smoke. This smoke will slow those who enter " -#~ "it, as well as obscuring vision and scent." -#~ msgstr "" -#~ "핀을 뽑아 사용하며, 5턴이 지나면 짙은 검은색 연기를 방출합니다.\r\n" -#~ "이 짙은 연기는 행동에 방해를 주며, 시각과 후각 또한 방해합니다." +#~ msgid "Landon" +#~ msgstr "렌던" -#~ msgid "" -#~ "This is a highly modified EMP grenade, designed to scramble robots' " -#~ "control chips, rather than destroy them. This converts the robot to your " -#~ "side for a short time, before the backup systems kick in." -#~ msgstr "" -#~ "EMP 수류탄을 개조한 것으로, 로봇의 CPU 를 파괴하지 않고 방해하도록 만들어" -#~ "졌습니다.\r\n" -#~ "단순히 방해만 하기 때문에, 백업 시스템이 즉시 작동하지 않고 약간의 시간이 " -#~ "걸리게 됩니다." +#~ msgid "King" +#~ msgstr "킹" -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active flashbang. You " -#~ "will then have five turns before it detonates with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." -#~ msgstr "" -#~ "사용하면 핀을 뽑아, 섬광탄을 활성화시킬 수 있습니다. 5턴 후에 폭발하여 강" -#~ "력한 빛과 소리를 내며, 근처에있는 전원을 실명시키고, 귀먹게 만들고, 무력화" -#~ "시킵니다." +#~ msgid "Kyle" +#~ msgstr "카일" -#~ msgid "" -#~ "This flashbang is active, and will soon detonate with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." -#~ msgstr "" -#~ "활성화된 섬광탄으로, 곧 폭발하여 강력한 빛과 소리를 냅니다. 근처에있는 전" -#~ "원을 실명시키고, 귀먹게 만들고, 무력화시킵니다." +#~ msgid "Lauren" +#~ msgstr "로렌" -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " -#~ "will then have three turns before it detonates, creating an EMP field " -#~ "that damages robots and drains bionic energy." -#~ msgstr "" -#~ "사용하면 핀을 뽑아 EMP 수류탄을 활성화시킬 수 있습니다. 3턴 후에 폭발하" -#~ "며, 바이오닉 에너지를 소모시키고 로봇에게 피해를 주는 EMP장을 만듭니다." +#~ msgid "Kyosuki" +#~ msgstr "교수키" -#~ msgid "" -#~ "This EMP grenade is active, and will shortly detonate, creating a large " -#~ "EMP field that damages robots and drains bionic energy." -#~ msgstr "" -#~ "이 EMP 수류탄은 활성화되어 곧 폭발합니다. 폭발하면 바이오닉 에너지를 소모" -#~ "시키고 로봇에게 피해를 주는 EMP장을 만듭니다." +#~ msgid "Kimberly" +#~ msgstr "킬벌리" -#~ msgid "" -#~ "This grenade is active, and will explode any second now. Better throw it!" -#~ msgstr "" -#~ "활성화된 수류탄으로, 언제라도 폭발할 수 있습니다. 던져버리는게 낫겠어!" +#~ msgid "Kim" +#~ msgstr "킴" -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active grenade. You " -#~ "will then have five turns before it explodes; throwing it would be a good " -#~ "idea." -#~ msgstr "" -#~ "사용하면 수류탄의 핀을 뽑아 활성화시킬 수 있습니다. 5턴이 지난 후에 폭발하" -#~ "니, 던져버리는게 좋은 생각입니다." +#~ msgid "Kevin" +#~ msgstr "케빈" -#~ msgid "" -#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " -#~ "sentient. Open at your own risk.\"" -#~ msgstr "" -#~ "\"경고 : 고 독성 부식물질이 들어있음. 지각 능력이 있을 수 있음. 개봉시 주" -#~ "의요망.\"" +#~ msgid "Lewis" +#~ msgstr "레위스" -#~ msgid "" -#~ "A tool for measuring radiation. It is in continuous scan mode, and will " -#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " -#~ "it allows you to turn it off, or scan yourself or the ground." -#~ msgstr "" -#~ "방사능을 계측하는 도구입니다. 지속 측정 모드로 작동하는 중이며, 주변에 방" -#~ "사능이 있다면 조용한 딱딱 소리를 냅니다. 사용하여 끌 수도 있고, 몸이나 땅" -#~ "을 검사할 수도 있습니다." +#~ msgid "Liam" +#~ msgstr "리엠" -#~ msgid "" -#~ "A tool for measuring radiation. Using it will prompt you to choose " -#~ "whether to scan yourself or the terrain, or to turn it on, which will " -#~ "provide continuous feedback on ambient radiation." -#~ msgstr "" -#~ "방사능을 계측하는 도구입니다. 사용하면 자신을 검사할 것인지, 지형을 검사" -#~ "할 것인지, 아니면 켜놓을 것인지 선택할 수 있다. 켜놓으면, 주변 방사능을 지" -#~ "속적으로 계측할 수 있습니다." +#~ msgid "Leah" +#~ msgstr "레아" -#~ msgid "" -#~ "A section of a pipe filled with explosive materials. Use this item to " -#~ "light the fuse, which gives you 3 turns before it detonates. You will " -#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." -#~ msgstr "" -#~ "폭발물을 채운 파이프 동강입니다. 사용하여 심지에 불을 붙이면, 3턴이 지난 " -#~ "후에 폭발합니다. 점화에는 라이터가 필요합니다. 그리 신뢰성이 높진 않아, 불" -#~ "발될 수도 있습니다." +#~ msgid "Lee" +#~ msgstr "리" -#~ msgid "" -#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " -#~ "Requires a young tree nearby. Effective at trapping and killing some " -#~ "small animals." -#~ msgstr "" -#~ "줄로 만든 올가미 덫입니다. 설치할 때 근처에 어린 나무가 필요합니다. 작은 " -#~ "동물을 죽이거나 잡는데 유용합니다." +#~ msgid "Layla" +#~ msgstr "레일라" -#~ msgid "" -#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " -#~ "Requires a tree nearby. Effective at trapping monsters." -#~ msgstr "" -#~ "견고한 로프로 만든 올가미 덫입니다. 설치할 때 근처에 나무가 필요합니다. 괴" -#~ "물을 잡는데 유용합니다." +#~ msgid "Lopez" +#~ msgstr "로페즈" -#~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " -#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " -#~ "time the trigger is pulled, one or two may be used." -#~ msgstr "" -#~ "인계철선에 장전된 소드오프 샷건을 연결한 것입니다. \r\n" -#~ "줄이 당겨지면, 산탄총이 발사됩니다.\r\n" -#~ "발사될 때 한 발이 나갈 수도 있고, 두 발이 나갈 수도 있습니다." +#~ msgid "Logan" +#~ msgstr "로겐" -#~ msgid "" -#~ "A machete is attached laterally to a motor, with a tripwire controlling " -#~ "its throttle. When the tripwire is pulled, the blade is swung around with " -#~ "great force. The trap forms a 3x3 area of effect." -#~ msgstr "" -#~ "전기 모터에 정글도를 부착한 것입니다. 모터 출력을 조절하기 위해 줄을 연결" -#~ "했습니다. 줄을 당기면 모터에 달린 칼날이 엄청난 힘으로 회전합니다. 설치하" -#~ "는데 3x3 의 공간이 필요합니다." +#~ msgid "Long" +#~ msgstr "롱" -#~ msgid "An anti-personnel mine that is triggered when stepped upon." -#~ msgstr "위에 올라서면 격발되는 대인지뢰입니다." +#~ msgid "Lillian" +#~ msgstr "릴리언" -#~ msgid "" -#~ "A tripwire trap must be placed across a doorway or other thin passage. " -#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " -#~ "hurt themselves minorly." -#~ msgstr "" -#~ "인계철선 부비트랩, 즉 선으로 만든 덫입니다.\r\n" -#~ "선으로 연결하기 때문에 문이나 여타 다른 좁은 길에만 설치할 수 있습니다." -#~ "\r\n" -#~ "지나가는 사람이 걸려 넘어지거나, 넘어져 다칠 수도 있습니다." +#~ msgid "Lily" +#~ msgstr "릴리" -#~ msgid "" -#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " -#~ "the ground, creating a trap that will warn you with noise when something " -#~ "steps on it." -#~ msgstr "" -#~ "기포로 덮여있는 비닐입니다. 사용하면 무언가가 밟을 때 소리를 내는 덫을 만" -#~ "들 수 있습니다." +#~ msgid "Makayla" +#~ msgstr "마켈라" -#~ msgid "" -#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " -#~ "creating a trap that will ensnare and damage anything that steps on it. " -#~ "If you are carrying a shovel, you will have the option of burying it." -#~ msgstr "" -#~ "스프링과 강철 죔쇠가 달린 덫입니다. 땅에 설치해서 사용하며, 이 덫을 밟으" -#~ "면 강철로 된 턱이 서로 맞물려서 피해를 입힙니다. 삽을 가지고 있으면 땅속" -#~ "에 묻어서 사용할 수도 있습니다." +#~ msgid "Madison" +#~ msgstr "메디슨" -#~ msgid "" -#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " -#~ "a vehicle." -#~ msgstr "" -#~ "탄력 좋은 고무호스입니다. 제작에 쓸 수도 있고, 차량에서 기름을 빨아내는데 " -#~ "쓸 수도 있습니다." +#~ msgid "Maria" +#~ msgstr "마리아" -#~ msgid "" -#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " -#~ "adjacent solid terrain." -#~ msgstr "" -#~ "잭해머라고도 불리는 도구로, 가솔린을 사용해 단단한 땅에 구멍을 뚫는 용도" -#~ "로 사용됩니다." +#~ msgid "Martin" +#~ msgstr "마틴" -#~ msgid "A digging tool. Use it to dig pits adjacent to your location." -#~ msgstr "" -#~ "땅 파는 공구입니다. 사용하면 주변의 땅을 파서 구덩이를 만들 수 있습니다." +#~ msgid "Mariah" +#~ msgstr "마리아" -#~ msgid "" -#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " -#~ "pile of dirt." -#~ msgstr "단단한 땅을 부드러운 흙으로 개간하는데 사용하는 농업기구입니다." +#~ msgid "Madeline" +#~ msgstr "메들린" -#~ msgid "" -#~ "A prying tool. Use it to open locked doors without destroying them, or to " -#~ "lift manhole covers." -#~ msgstr "" -#~ "뭔가를 따낼 때 쓰는 공구입니다. 잠긴 문이나 상자를 부수지 않고 열 때나, 맨" -#~ "홀 뚜껑을 열 때 사용합니다." +#~ msgid "Madelyn" +#~ msgstr "메델린" -#~ msgid "" -#~ "This device was constructed by 'enhancing' a radio with some amplifier " -#~ "circuits. It's completely lost its ability to pick up a station, but it's " -#~ "nice and loud now. Could be useful to distract zombies." -#~ msgstr "" -#~ "이 장치는 라디오를 증폭시켜 강화시킨 것입니다. 신호 수신 능력은 완전히 잃" -#~ "었지만, 엄청나게 큰 소리를 냅니다.\r\n" -#~ "좀비 유인에 유용할 것 같습니다." +#~ msgid "Luis" +#~ msgstr "루이스" -#~ msgid "" -#~ "If you can find a system to analyze this you may find something of " -#~ "interest." -#~ msgstr "" -#~ "만약 이걸 해독할 시스템을 찾는다면, 뭔가 쓸만한걸 건질 수 있을지도 모릅니" -#~ "다." +#~ msgid "Luke" +#~ msgstr "류크" -#~ msgid "" -#~ "A string of numbers to access the elevator in the hazardous waste " -#~ "sarcophagus." -#~ msgstr "" -#~ "위험 폐기물을 봉인하는 석관이 있는 곳으로 가는 \r\n" -#~ "엘리베이터를 작동 시킬 수 있는, 숫자로 된 접속 코드입니다." +#~ msgid "Lucas" +#~ msgstr "루카스" -#~ msgid "" -#~ "A road map. Use it to read points of interest, including, but not limited " -#~ "to, location(s) of hospital(s) nearby." -#~ msgstr "명소와 근처의 병원이 표시된 약도입니다." +#~ msgid "Mary" +#~ msgstr "마리" -#~ msgid "" -#~ "Using this item on a container full of water will purify the water. Water " -#~ "taken from uncertain sources like a river may be dirty." -#~ msgstr "" -#~ "물이 채워진 용기에 사용해서 물을 정화시킬 수 있는 정수기입니다. 강처럼 확" -#~ "실히 정수되지 않은 곳에서 뜬 물은 오염됐을 수도 있으니까요." +#~ msgid "Mia" +#~ msgstr "미아" -#~ msgid "" -#~ "Using this allows you to send out a signal; either a general SOS, or if " -#~ "you are in contact with a faction, to send a direct call to them." -#~ msgstr "" -#~ "이것을 사용하면 전파신호를 송출할 수 있습니다. 일반적인 SOS를 보낼 수도 있" -#~ "고, 특정 세력과 연락하고 있다면 그들과 직접 교신할 수도 있습니다." +#~ msgid "Martinez" +#~ msgstr "마틴즈" -#~ msgid "" -#~ "Using this radio turns it on. It will pick up any nearby signals being " -#~ "broadcast and play them audibly." -#~ msgstr "" -#~ "라디오를 작동하면 켜집니다. 주변에 송출되는 신호가 있다면, 무엇이든 수신하" -#~ "여 재생합니다." +#~ msgid "Maya" +#~ msgstr "마야" -#~ msgid "" -#~ "This radio is turned on, and continually draining its batteries. It is " -#~ "playing the broadcast being sent from any nearby radio towers." -#~ msgstr "" -#~ "이 라디오는 켜져 있고, 배터리를 소모하고 있습니다. 근처 라디오 송신탑에서 " -#~ "나오는 방송을 재생하고 있습니다." +#~ msgid "Matthew" +#~ msgstr "매튜" -#~ msgid "" -#~ "An antenna designed to pick up signals better when pointed at the source." -#~ msgstr "" -#~ "전파 송신지를 향하면 쉽게 전파를 잡아낼 수 있도록 설계된 안테나입니다." +#~ msgid "Mason" +#~ msgstr "마손" -#~ msgid "" -#~ "A small heating element. Indispensable for cooking and chemistry. Try not " -#~ "to burn yourself." -#~ msgstr "" -#~ "작은 가열기구로, 조리와 화학 실험에 주로 쓰입니다. 손을 데지 않도록 조심하" -#~ "는게 좋습니다." +#~ msgid "Michael" +#~ msgstr "마이클" -#~ msgid "" -#~ "A piece of metal that can get very hot. Necessary for electronics " -#~ "crafting. You could also use it to cauterize wounds, if you had to." -#~ msgstr "" -#~ "아주 뜨겁게 달궈질 수 있는 금속으로, 전자기기 제조에 필요합니다. 굳이 쓰겠" -#~ "다면, 상처를 지지는 데에도 쓸 수 있습니다." +#~ msgid "Miller" +#~ msgstr "밀러" -#~ msgid "A spent glowstick, essentially trash." -#~ msgstr "이미 사용된 야광봉입니다. 결국 쓰레기죠." +#~ msgid "Megan" +#~ msgstr "메건" -#~ msgid "" -#~ "This glowstick is active and producing light. It will last for a few " -#~ "hours before burning out." -#~ msgstr "" -#~ "이 발광 스틱은 켜져서 빛을 내고 있습니다. 완전히 소모되기 전까지 몇 시간" -#~ "쯤 갈 것입니다." +#~ msgid "Melanie" +#~ msgstr "맬라니" -#~ msgid "" -#~ "A burnt-out lightstrip. You could disassemble this to recover the " -#~ "amplifier circuit." -#~ msgstr "고장난 케이블 조명입니다. 분해해서 증폭 회로를 회수할 수 있습니다." +#~ msgid "Nathan" +#~ msgstr "나단" -#~ msgid "" -#~ "This flashlight is turned on, and continually draining its batteries. It " -#~ "provides light during the night or while underground. Use it to turn it " -#~ "off." -#~ msgstr "" -#~ "켜진 손전등으로, 배터리를 소모하고 있습니다. 손전등은 어두운 밤이나 지하에" -#~ "서 빛을 제공합니다. 'a' 키를 눌러 손전등을 끌 수 있습니다." +#~ msgid "Nakiya" +#~ msgstr "나키야" -#~ msgid "" -#~ "Using this flashlight will turn it on, assuming it is charged with " -#~ "batteries. A turned-on flashlight will provide light during the night or " -#~ "while underground." -#~ msgstr "" -#~ "(충전되어 있는)손전등을 사용하면 불이 켜집니다. 손전등은 어두운 밤이나 지" -#~ "하에서 빛을 제공합니다." +#~ msgid "Nathaniel" +#~ msgstr "나다니엘" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Provides a " -#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " -#~ "die, you'll need to scrap it to recover the components that are reusable." -#~ msgstr "" -#~ "케이블 형태의 빛을 내는 회로에 배터리를 연결한 것입니다. 작동하면 배터리 " -#~ "충전량 3 당 25 시간 동안 빛을 냅니다. 배터리가 다 떨어지면 분해해서 재활" -#~ "용 할 수 있습니다." +#~ msgid "Natalie" +#~ msgstr "나탈리" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Once " -#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " -#~ "batteries die, you'll need to scrap it to recover the components that are " -#~ "reusable." -#~ msgstr "" -#~ "케이블 형태의 빛을 내는 회로에 배터리를 연결한 것입니다. 작동하면 배터리 " -#~ "충전량 3 당 25 시간 동안 빛을 냅니다. 배터리가 다 떨어지면 분해해서 재활" -#~ "용 할 수 있습니다." +#~ msgid "Natsuki" +#~ msgstr "나스키" -#~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. Use it to turn it on." -#~ msgstr "" -#~ "휘발유를 사용하는 랜턴입니다. 아주 환하지는 않지만, 오래 갑니다.\r\n" -#~ "불을 켜려면 작동시키세요." +#~ msgid "Mitchell" +#~ msgstr "미췔" -#~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. It is turned on. Use it to turn it off." -#~ msgstr "" -#~ "휘발유를 사용하는 랜턴입니다. 아주 환하지는 않지만, 오래 갑니다.\r\n" -#~ "불이 켜진 상태입니다. 불을 끄려면 작동시키세요." +#~ msgid "Moore" +#~ msgstr "무어" -#~ msgid "" -#~ "With enough electronics skill, you could attach this to your devices to " -#~ "increase their battery capacity." -#~ msgstr "" -#~ "전자기기 기술이 받쳐준다면, 이것을 달아 배터리 용량을 늘릴 수 있습니다." +#~ msgid "Morgan" +#~ msgstr "모건" -#~ msgid "" -#~ "Use a hammer, with nails and two by fours in your inventory, to board up " -#~ "adjacent doors and windows." -#~ msgstr "" -#~ "망치가 있으면, 못과 재목을 사용해서 근처의 문이나 창문을 막을 수 있습니다." +#~ msgid "Morris" +#~ msgstr "모리스" -#~ msgid "Use a fire extinguisher to put out adjacent fires." -#~ msgstr "근처의 불을 끌 때 사용하는 소화기입니다." +#~ msgid "Murphy" +#~ msgstr "머피" -#~ msgid "A simple hand-powered stone quern." -#~ msgstr "손으로 돌리는 단순한 구조로 만들어진, 돌 맷돌입니다." +#~ msgid "Nuku" +#~ msgstr "누쿠" -#~ msgid "" -#~ "Use a sewing kit on an article of clothing to attempt to repair or " -#~ "reinforce that clothing. This uses your tailoring skill." -#~ msgstr "" -#~ "옷에 반짇고리를 사용해서 옷을 수선하거나 보강할 수 있습니다. 재봉 기술이 " -#~ "적용됩니다." +#~ msgid "Olivia" +#~ msgstr "올리비아" -#~ msgid "" -#~ "Thin paper strips intended for the rolling of cigarettes. Could also be " -#~ "used to make cartridges for a cap and ball revolver." -#~ msgstr "" -#~ "담배를 마는데 사용되는 종이입니다.\r\n" -#~ "구식 종이 장약을 사용하는 리볼버 탄약 제조에 사용할 수도 있습니다." +#~ msgid "Noah" +#~ msgstr "노아" -#~ msgid "" -#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." -#~ msgstr "" -#~ "가위로 면 재질의 물품(주로 의류)을 잘라 천조각으로 만들 수 있습니다." +#~ msgid "Nicholas" +#~ msgstr "니콜라스" -#~ msgid "" -#~ "A fire drill is a simple item for firestarting, made from two pieces of " -#~ "wood and some string. Although it is constructed out of simple materials, " -#~ "it's slow and rather difficult to get a fire started with this tool." -#~ msgstr "" -#~ "불을 붙이는데 사용되는 간단한 드릴입니다. 나무 두 개에 줄을 사용해 만들었" -#~ "습니다. 구하기 쉬운 물건으로 만들어져 만들기 쉽지만, 이 도구를 가지고 불" -#~ "을 붙이는 것은 극히 힘듭니다." +#~ msgid "Nevaeh" +#~ msgstr "니베" -#~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire." -#~ msgstr "" -#~ "라이터는 담배 등을 사용하거나 화염병 따위의 점화용으로 필요합니다. 근처의 " -#~ "탈 만한 물건에 불을 붙이는 용도로도 쓸 수 있습니다." +#~ msgid "Nelson" +#~ msgstr "넬손" -#~ msgid "" -#~ "Matches must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use matches to light " -#~ "nearby items on fire." -#~ msgstr "" -#~ "성냥은 담배 등을 사용하거나 화염병 따위의 점화용으로 필요합니다. 근처의 " -#~ "탈 만한 물건에 불을 붙이는 용도로도 쓸 수 있습니다." +#~ msgid "Paige" +#~ msgstr "페이지" -#~ msgid "" -#~ "A powdered antihemorrhagic compound which reacts with blood to " -#~ "immediately form a gel-like substance which stops bleeding." -#~ msgstr "" -#~ "가루 형태의 항출혈제, 즉 지혈제입니다. 혈액에 닿으면 젤 형태의 물질로 변" -#~ "해 출혈을 막습니다." +#~ msgid "Owen" +#~ msgstr "오웬" -#~ msgid "Bright pink chewing gum. Sugary, sweet and bad for your teeth." -#~ msgstr "밝은 분홍색 츄잉껌입니다. 달고 설탕이 많아 치아에 좋지 않습니다." +#~ msgid "Parker" +#~ msgstr "파커" -#~ msgid "" -#~ "Strawberries left to ferment with a few other choice ingredients offer up " -#~ "a surprisingly platable mixture; you barely even have to force yourself " -#~ "to drink it after the first few gulps." -#~ msgstr "" -#~ "몇개의 엄선된 재료와 딸기를 같이 발효시켜 만든, 놀랄만큼 훌륭한 조합의 음" -#~ "료입니다.\r\n" -#~ "한 모금을 마시는 순간, 입을 뗄 수 없을 것입니다." +#~ msgid "Patterson" +#~ msgstr "페터슨" -#~ msgid "" -#~ "Antibacterial medication designed to prevent or stop the spread of " -#~ "infection, in exchange for making future infections harder to stop or " -#~ "prevent." -#~ msgstr "" -#~ "의료용 항생제로, 감염의 확산 혹은 방지를 위해 만들어진 의약품입니다. 대신 " -#~ "미래에 일어날 감염을 막거나 멈추는게 힘들어지죠.\r\n" -#~ "(역주 : 항생제 오남용은 병균의 약품 내성을 키웁니다)" +#~ msgid "Reed" +#~ msgstr "리드" -#~ msgid "This white flour is useful for baking." -#~ msgstr "이 하얀색 가루는 제빵에 유용하게 쓰입니다." +#~ msgid "Ramirez" +#~ msgstr "라미레즈" -#~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." -#~ msgstr "" -#~ "인간의 기형 태아입니다. 먹을 수는 있지만, 매우 불쾌해집니다. 먹으면 DNA " -#~ "에 변이를 일으킵니다." +#~ msgid "Powell" +#~ msgstr "포웰" -#~ msgid "" -#~ "A misshapen human arm, eating this would be pretty disgusting and cause " -#~ "your DNA to mutate." -#~ msgstr "" -#~ "기형적으로 변한 인간의 팔입니다. 먹을 수는 있지만, 매우 불쾌해집니다. 먹으" -#~ "면 DNA 에 변이를 일으킵니다." +#~ msgid "Payton" +#~ msgstr "페이턴" -#~ msgid "" -#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." -#~ msgstr "" -#~ "큰 개미 알입니다. 크기는 야구공만 합니다. 영양가가 매우 높습니다만, 역겹습" -#~ "니다." +#~ msgid "Perez" +#~ msgstr "페레즈" -#~ msgid "" -#~ "A malformed human leg, this would be gross to eat, and cause mutations." -#~ msgstr "" -#~ "기형적으로 변한 인간의 다리입니다. 먹을 수는 있지만, 매우 불쾌해집니다. 먹" -#~ "으면 DNA 에 변이를 일으킵니다." +#~ msgid "Phillips" +#~ msgstr "필립" -#~ msgid "" -#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " -#~ "emergency." -#~ msgstr "" -#~ "큰 밀랍 덩어리입니다. 정말 맛과 영양가가 없습니다. 하지만 비상시에는 이거" -#~ "라도 먹어야죠." +#~ msgid "Perry" +#~ msgstr "페리" -#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." -#~ msgstr "으, 꽤 역겹습니다. 굶어 죽을 때를 대비해서 저장해두세요." +#~ msgid "Peterson" +#~ msgstr "피터슨" -#~ msgid "" -#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " -#~ "all sorts of afflictions." -#~ msgstr "" -#~ "검은 꿀이 빽빽하게 채워진 큰 밀랍 덩어리입니다. 모든 종류의 질병 치료에 유" -#~ "용합니다." +#~ msgid "Price" +#~ msgstr "프라이스" -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "우엑, 맛이 좋지는 않지만, 꽤나 배불리 먹을 수 있습니다." +#~ msgid "Rachel" +#~ msgstr "라췔" -#~ msgid "Canned beans. A staple for hobos." -#~ msgstr "통조림 콩입니다. 노숙자들을 위한 주식이죠." +#~ msgid "Robert" +#~ msgstr "로버트" -#~ msgid "Bread and turkey, that's it." -#~ msgstr "빵과 칠면조가 들어있습니다. 네, 저게 재료의 끝이에요." +#~ msgid "Rivera" +#~ msgstr "리버라" -#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." -#~ msgstr "산성비로부터 농축된 산성 입니다. 마시지 마세요." +#~ msgid "Robinson" +#~ msgstr "로빈슨" -#~ msgid "Basic Sword & Sorcery." -#~ msgstr "널리 알려진 중세 판타지물." +#~ msgid "Riley" +#~ msgstr "라일리" -#~ msgid "Primer from a small caliber round." -#~ msgstr "소구경 탄의 뇌관입니다." +#~ msgid "Rogers" +#~ msgstr "로거스" -#~ msgid "A 40mm grenade with a concussive explosion." -#~ msgstr "체내 충격을 주는 충격탄두 40mm 유탄입니다." +#~ msgid "Rodriguez" +#~ msgstr "로드리게즈" -#~ msgid "" -#~ "A 40mm grenade with a small explosion and a high number of damaging " -#~ "fragments." -#~ msgstr "적은 양의 폭약과 다량의 파편을 탄두에 넣은 40mm 유탄입니다." +#~ msgid "Roberts" +#~ msgstr "로버트즈" -#~ msgid "" -#~ "The .454 Casull round a very powerful revolver round capable of killing " -#~ "Huge game like Elephants with ease, it's designed to be used with the " -#~ "Taurus Raging Bull." -#~ msgstr "" -#~ ".454 카술 탄은 코끼리같이 큰 생물도 쉽게 잡을만큼 강력한 리볼버용 탄환입니" -#~ "다. 타우러스 레이징 불에 사용되도록 만들어졌습니다." +#~ msgid "Richardson" +#~ msgstr "리차드손" -#~ msgid "" -#~ "Designed during World War II by the Soviet Union, the popularity of the " -#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " -#~ "rifle round. However, due to its lack of yaw, this round deals less " -#~ "damage than most." -#~ msgstr "" -#~ "2차대전 중 소련이 개발한 7.62x39mm M43탄은, AK-47과 SKS의 유명세에 힘입어 " -#~ "전세계적으로 퍼져나갔습니다. 하지만, 탄두 요동 현상이 적어 위력은 다소 약" -#~ "합니다." +#~ msgid "Ross" +#~ msgstr "로스" -#~ msgid "" -#~ "This small caliber pistol round offers quite good armor penetration at " -#~ "the cost of slightly less damage. It is rarely used outside of the " -#~ "Chinese army." -#~ msgstr "" -#~ "이 소구경 권총탄은 좋은 관통력을 가진 대신, 살상력이 약간 적습니다. 중국" -#~ "군 외에는 거의 사용하지 않습니다." +#~ msgid "Savannah" +#~ msgstr "사바나" -#~ msgid "" -#~ "A brass-jacketed .22 calibre round with superior penetration capacity." -#~ msgstr "탄두가 코팅되어 더 높은 관통력을 가진 .22 구경 탄입니다." +#~ msgid "Sara" +#~ msgstr "사라" -#~ msgid "" -#~ "9 millimeter parabellum is generally regarded as the most popular handgun " -#~ "cartridge, used by the majority of US police forces. It is also a very " -#~ "popular round in sub-machine guns." -#~ msgstr "" -#~ "9 밀리미터 파라블럼 탄은 미국 경찰들의 폭넓은 사용으로 인해, 가장 인기있" -#~ "는 권총탄으로 간주되는 탄환입니다. 기관단총 쪽에서도 인기가 있습니다." +#~ msgid "Sarah" +#~ msgstr "사라" -#~ msgid "" -#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " -#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " -#~ "round. It is nearly silent, but is so weak as to be nearly useless." -#~ msgstr "" -#~ "코니컬 볼 .22 구경 탄은 .22 구경 중 가장 장약이 적게 들어간 탄종입니다. 화" -#~ "약이 매우 적게 들어있으며, 탄속이 음속을 넘지 않는 저탄속 탄입니다. 거의 " -#~ "소음이 없지만, 거의 쓸모가 없을 정도로 약합니다." +#~ msgid "Russell" +#~ msgstr "러쎌" -#~ msgid "A tough sinew cut from a corpse, useable as thread." -#~ msgstr "사체에서 잘라낸 힘줄입니다. 실타래 대용으로 사용할 수 있습니다." +#~ msgid "Ryan" +#~ msgstr "랸" -#~ msgid "Pry" -#~ msgstr "지레" +#~ msgid "Sabastian" +#~ msgstr "사바스티안" -#~ msgid "" -#~ "A leather sling, it is easy to use and accurate, but pebbles do little " -#~ "damage. Pebbles are used as ammunition." -#~ msgstr "" -#~ "돌을 사이에 넣은 다음, 돌려서 던지는데 사용하는 가죽 슬링입니다. 사용하기 " -#~ "쉽고 정확하지만,\r\n" -#~ "조약돌을 사용하기 때문에 거의 데미지를 주지 못합니다. 조약돌을 탄약으로 사" -#~ "용합니다." +#~ msgid "Samantha" +#~ msgstr "사만타" -#~ msgid "" -#~ "A tool used to drive nails into wood or other material. It could also be " -#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." -#~ msgstr "" -#~ "주로 못을 나무나 다른 물질에 박을 때 사용되는 도구입니다. 그냥 무기로 사용" -#~ "할 수도 있고, 권총 기술을 1 레벨까지 연습하는데 쓸 수도 있습니다." +#~ msgid "Samuel" +#~ msgstr "싸무엘" -#~ msgid "" -#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " -#~ "damage. It could be used to practice your rifle skill up to level 1." -#~ msgstr "" -#~ "어린아이들이 흔히 가지고 노는 총입니다. 꽤 정확하게 사격할 수 있지만, BB " -#~ "탄의 특성 때문에 거의 피해를 주지 못합니다.\r\n" -#~ "라이플 기술을 1 레벨까지 올리는데 사용할 수도 있습니다." +#~ msgid "Sanchez" +#~ msgstr "산체스" -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "조금 거추장스럽지만, 약간의 저장공간을 제공하는 손가방입니다." +#~ msgid "Sanders" +#~ msgstr "센더스" -#~ msgid "A thin pair of leather gloves. Good for doing manual labor." -#~ msgstr "" -#~ "얇은 가죽으로 만들어진 장갑 한 쌍입니다. 육체 노동을 할 때 좋습니다." +#~ msgid "Taylor" +#~ msgstr "타일러" -#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." -#~ msgstr "" -#~ "무거운 면 코트입니다. 거추장스럽지만, 보온력이 좋고 주머니가 큽니다." +#~ msgid "Sydney" +#~ msgstr "시드니" -#~ msgid "Pitch the tent" -#~ msgstr "천막 치기" +#~ msgid "Simmons" +#~ msgstr "시몬스" -#~ msgid "Your tazer crackles in the air." -#~ msgstr "테이져가 공중에서 파직거리는 소리를 냅니다." +#~ msgid "Sean" +#~ msgstr "션" -#~ msgid "" -#~ "There is only the space where an object should be, but isn't. No item " -#~ "template of this type exists." -#~ msgstr "" -#~ "하나의 오브젝트만이 존재해야 하는 공간이지만, 그렇지 않습니다.\r\n" -#~ "이런 종류의 템플릿은 존재하지 않습니다." +#~ msgid "Scott" +#~ msgstr "스캇" -#~ msgid "" -#~ "Many important items can be very hard to find, or will cost a great deal " -#~ "of\n" -#~ "money to trade for. Fortunately, it is possible to craft a wide variety " -#~ "of\n" -#~ "goods with the proper tools, materials, and training.\n" -#~ "\n" -#~ "Some recipes require a set of tools. These are not used up when " -#~ "crafting,\n" -#~ "so you can keep your tool set. All recipes require one or more " -#~ "ingredients.\n" -#~ "These ARE used up in crafting.\n" -#~ "\n" -#~ "%sThere are five categories; Weapons, Food, \n" -#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" -#~ "no skill to create, the majority require you to have some knowledge:\n" -#~ "\n" -#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" -#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" -#~ "at higher levels, you have an understanding of chemistry and can make\n" -#~ "chemical weapons and beneficial elixirs.\n" -#~ "->Electronics skill lets you make a wide variety of tools with intricate " -#~ "uses.\n" -#~ "->Tailoring skill is used to create basic clothing, and later tough " -#~ "armor.\n" -#~ "\n" -#~ "In addition to the primary crafting skills, other skills may be " -#~ "necessary\n" -#~ "to create certain items. Traps skill, Firearms skill, and First Aid " -#~ "skill\n" -#~ "are all required for certain items." -#~ msgstr "" -#~ "많은 물건들이 매우 찾기 힘들며, 사려면 많은 돈이 필요합니다.\n" -#~ "다행스럽게도 적당한 도구와, 재료, 기술이 있으면 꽤 많은 종류를\n" -#~ "스스로 제작할 수도 있습니다.\n" -#~ "\n" -#~ "몇몇 제작법은 '도구' 가 필요합니다. 제작을 해도 도구가 소모되는 것은\n" -#~ "아니며, 계속 가지고 있을 수 있습니다. 또한 모든 제작은 하나 혹은\n" -#~ "그 이상의 '재료' 가 필요하며, 재료는 제작을 하면 소모됩니다.\n" -#~ "\n" -#~ "%s\n" -#~ "제작은 다섯 가지의 분류로 나눠집니다. (무기, 식품, 전자기기, 방호구,\n" -#~ "잡다) 몇몇 물품은 제작하는데 별다른 기술이 필요하지 않지만,\n" -#~ "대부분은 특정한 지식이 필요합니다.\n" -#~ "\n" -#~ "-> 기계공학 기술은 무기, 함정, 몇몇 도구를 만드는데 쓰입니다.\n" -#~ "-> 요리 기술은 낮은 수준에서는 음식을 만드는데 쓰이지만, 높은 수준이 되" -#~ "면\n" -#~ "화학 지식을 얻을 수 있으며 화학 무기 혹은 유용한 물질을 만들 수 있습니" -#~ "다.\n" -#~ "-> 전자공학 기술은 복잡한 곳에 쓰이는 다양한 도구를 만드는데 쓰입니다.\n" -#~ "-> 재봉 기술은 기본적인 의류 제작에, 수준이 높으면 강한 방호구 제작에 쓰입" -#~ "니다.\n" -#~ "\n" -#~ "제작에 쓰이는 주 기술 말고도, 다른 기술이 보조적으로 쓰이는 경우가 있습니" -#~ "다.\n" -#~ "몇몇 물품의 경우 함정, 총기, 응급 치료 기술이 쓰이기도 합니다." +#~ msgid "Stewart" +#~ msgstr "스튜아트" -#~ msgid "Refill vehicle" -#~ msgstr "차량 충전 완료" +#~ msgid "Sophie" +#~ msgstr "소피" -#~ msgid "Fill a container?" -#~ msgstr "용기를 채우시겠습니까?" +#~ msgid "Sofia" +#~ msgstr "소피아" -#~ msgid "Peek" -#~ msgstr "코너 훔쳐보기" +#~ msgid "Takeuchi" +#~ msgstr "타케우치" -#~ msgid "You haven't had anything to drink in 2 days!" -#~ msgstr "이틀 동안 아무 것도 마시지 않았습니다!" +#~ msgid "Smith" +#~ msgstr "스미스" -#~ msgid "You haven't eaten in over a week!" -#~ msgstr "일주일 동안 아무 것도 먹지 않았습니다!" +#~ msgid "Van Wilde" +#~ msgstr "반 와일드" -#~ msgid "4 days... no water.." -#~ msgstr "물을 못 마신지 4일째..." +#~ msgid "Tyler" +#~ msgstr "타일러" -#~ msgid "" -#~ "Strength - 1; Intelligence - 2\n" -#~ "You stop to scratch yourself frequently; high intelligence helps you " -#~ "resist\n" -#~ "this urge." -#~ msgstr "" -#~ "체력 - 1; 지능 - 2;\n" -#~ "몸을 긁기 위해 자주 멈춤; 지능이 높으면 자제할 수 있는 가능성이 높아짐." +#~ msgid "Valeria" +#~ msgstr "발레리아" -#~ msgid "Spores" -#~ msgstr "포자 감염" +#~ msgid "Tristan" +#~ msgstr "트리스탄" -#~ msgid "You wake up to the ringing of an alarm-clock." -#~ msgstr "알람 시계가 울리는 소리 때문에 깼습니다." +#~ msgid "Turner" +#~ msgstr "터너" -#~ msgid "Can't move furniture there! Choose a direction with open floor." -#~ msgstr "" -#~ "그쪽으로 가구를 움직일 수 없습니다! 빈 공간이 있는 다른 방향을 선택하십시" -#~ "오." +#~ msgid "Torres" +#~ msgstr "토레스" -#~ msgid "Use Metric Weights" -#~ msgstr "미터법 무게 표기" +#~ msgid "Trinity" +#~ msgstr "트리니티" -#~ msgid "Use Metric Speeds" -#~ msgstr "미터법 속도 표기" +#~ msgid "Thomas" +#~ msgstr "토마스" -#~ msgid "" -#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " -#~ "you to teleport a short distance away." -#~ msgstr "" -#~ "플루토늄 연료 전지로 작동하는 초자연적 장치입니다.\n" -#~ "사용하면 가까운 거리의 어딘가로 순간이동 됩니다." +#~ msgid "Thompson" +#~ msgstr "톰슨" -#~ msgid " lack" -#~ msgstr "부족함" +#~ msgid "Vanessa" +#~ msgstr "바네사" -#~ msgid "enough" -#~ msgstr "충분함" +#~ msgid "Wilson" +#~ msgstr "윌슨" -#~ msgid " to install parts." -#~ msgstr "로 부품 설치" +#~ msgid "Ward" +#~ msgstr "워드" -#~ msgid " and a " -#~ msgstr "와 " +#~ msgid "Walker" +#~ msgstr "워커" -#~ msgid " +Damage" -#~ msgstr " + 피해" +#~ msgid "Washington" +#~ msgstr "워싱턴" -#~ msgid "You drain %s body heat!" -#~ msgstr "%s의 체온을 빼앗았다!" +#~ msgid "William" +#~ msgstr "윌리엄" -#~ msgid "%s's" -#~ msgstr "%s" +#~ msgid "White" +#~ msgstr "화이트" -#~ msgid "the %s's" -#~ msgstr "%s" +#~ msgid "Williams" +#~ msgstr "윌리엄스" -#~ msgid "You throw %s." -#~ msgstr "%s를(을) 던졌다." +#~ msgid "West" +#~ msgstr "웨스트" -#~ msgid "You disarm %s." -#~ msgstr "%s를(을) 무장해제 시켰다." +#~ msgid "Victoria" +#~ msgstr "빅토리아" -#~ msgid " disarms %s." -#~ msgstr "가(이) %s를(을) 무장해제 시켰다." +#~ msgid "Watson" +#~ msgstr "왓슨" -#~ msgid " throws %s." -#~ msgstr "가(이) %s를(을) 던졌다." +#~ msgid "Wyatt" +#~ msgstr "와이어트" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Wright" +#~ msgstr "라이트" -#~ msgid "%s's %s" -#~ msgstr "%s %s" +#~ msgid "Wood" +#~ msgstr "우드" -#~ msgid "the %s" -#~ msgstr "%s" +#~ msgid "Yuki" +#~ msgstr "유키" -#~ msgid "his" -#~ msgstr "" +#~ msgid "Zoey" +#~ msgstr "조이" -#~ msgid "your" -#~ msgstr "" +#~ msgid "Zoe" +#~ msgstr "조이" -#~ msgid "Your" -#~ msgstr "" +#~ msgid "Zachary" +#~ msgstr "재커리" -#~ msgid "You" -#~ msgstr "" +#~ msgid "Young" +#~ msgstr "영" -#~ msgid "her" -#~ msgstr "" +#~ msgid "Xavier" +#~ msgstr "자비엘" -#~ msgid "Edmunds" -#~ msgstr "에드문즈" +#~ msgid "Albany" +#~ msgstr "엘바니" -#~ msgid "Dixfield" -#~ msgstr "딕스필드" +#~ msgid "Albion" +#~ msgstr "얼비온" -#~ msgid "Abbot" -#~ msgstr "에벗" +#~ msgid "Alburg" +#~ msgstr "얼버그" -#~ msgid "your %s" -#~ msgstr "%s" +#~ msgid "Alexandria" +#~ msgstr "알렉산드리어" -#~ msgid "" -#~ "Everyone at work knew you as the person who always had a cigarette or two " -#~ "in hand. Now, you're down to a single pack, and you hope you find more " -#~ "soon. You start out with a strong nicotine addiction, and 10 cigarettes." -#~ msgstr "" -#~ "직장 동료들은 당신에 대해 항상 담배를 태우던 사람으로 기억합니다. 지금은, " -#~ "담배 한 갑을 가지고 쓰러져 있으며 곧 더 찾을 수 있을 겁니다. 강력한 니코" -#~ "틴 중독 증상과 담배 10개를 소지하고 시작합니다." +#~ msgid "Alford" +#~ msgstr "어포드" -#~ msgid "" -#~ "Inside your body is a fleet of tiny dormant robots. Once charged from " -#~ "your energy banks, they will flit about your body, repairing any damage." -#~ msgstr "" -#~ "당신의 몸 안에는 초소형 로봇들이 있어서 작동시키면, 몸을 돌아다니며 피해" -#~ "를 복구한다." +#~ msgid "Acworth" +#~ msgstr "어클쓰" -#~ msgid "" -#~ "Your memory has been enhanced with small quantum storage drives. Any " -#~ "time you start to forget a skill, you have a chance at retaining all " -#~ "knowledge, at the cost of a small amount of poweron." -#~ msgstr "" -#~ "소형 양자저장장치로 당신의 기억력은 보다 향상되었다. 스킬이 하락되기 시작" -#~ "할 때, 일정 확률로 전력을 소비하는 대신 스킬이 감소하지 않게 된다." +#~ msgid "Agawam" +#~ msgstr "아궈웜" -#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" -#~ msgstr "%s %s에 %s가(이) 치어서 %d 피해를 입었다! %s!" +#~ msgid "Abington" +#~ msgstr "어빙턴" -#~ msgid "" -#~ "A medieval helmet that provides excellent protection to head, with a Y " -#~ "shaped opening for the face." -#~ msgstr "" -#~ "얼굴 부분이 Y 형태로 되어 있는 중세 유럽의 투구 입니다. 머리에 매우 높은 " -#~ "방어력을 제공합니다." +#~ msgid "Acushnet" +#~ msgstr "어큐쉬넷" -#~ msgid "Place trap" -#~ msgstr "덫 설치" +#~ msgid "Acton" +#~ msgstr "액턴" -#~ msgid "active teargas" -#~ msgstr "최루탄-켜짐(teargas)" +#~ msgid "Alfred" +#~ msgstr "어프레드" -#~ msgid "" -#~ "Using this item will, if loaded with gas, cause it to turn on, making a " -#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." -#~ msgstr "" -#~ "휘발유를 채운 다음 작동하면, 아주 강력하지만 느리고 다루기도 어렵고 소리" -#~ "도 시끄러운 근접무기가 됩니다." +#~ msgid "Allagash" +#~ msgstr "엘라가쉬" -#~ msgid "" -#~ "Several pieces of wood, nailed together, with nails sticking straight up. " -#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." -#~ msgstr "" -#~ "나무 판에 못을 거꾸로 박은 덫입니다. 밟으면 못이 발에 박히게 됩니다." +#~ msgid "Allenstown" +#~ msgstr "엘렌스톤" -#~ msgid "" -#~ "A glass vial, with two chemicals mixing inside. If this mixture is " -#~ "exposed to air (as happens if you throw the vial), they will spill out as " -#~ "a pool of potent acid." -#~ msgstr "" -#~ "두가지 화학물질이 혼합되어 있는 유리 약병입니다. 공기에 유출되면 강한 산" -#~ "성 웅덩이가 생깁니다." +#~ msgid "Alstead" +#~ msgstr "엘스티드" -#~ msgid "" -#~ "Your entire body may resonate at very high power, creating a short-range " -#~ "shockwave. While it will not too much damage to flexible creatures, " -#~ "stiff items such as walls, doors, and even robots will be severely " -#~ "damaged." -#~ msgstr "" -#~ "몸 전체에서 고출력의 단거리 충격파를 만들어 낼수 있습니다. 단단하지 않은 " -#~ "생물에겐 별 피해를 줄수 없지만 벽, 문, 로봇 등 단단한 것에는 상당한 피해" -#~ "를 줄수 있습니다." +#~ msgid "Alna" +#~ msgstr "엘나" -#~ msgid "" -#~ "Compact Bionics Module developed at DoubleTech Industries as a " -#~ "replacement for the highly successful CBM: Power Storage. Increases you " -#~ "power capacity by 10 units." -#~ msgstr "" -#~ "성공적이었던 CBM: 전력 배터리를 대체하기 위해 더블텍 산업에서 개발한 컴팩" -#~ "트 바이오닉 모듈 입니다.\r\n" -#~ "전력 보유량이 10 증가합니다." +#~ msgid "Amesbury" +#~ msgstr "엠스부리" -#~ msgid "MRE - beef" -#~ msgstr "휴대식량-쇠고기(MRE - beef)" +#~ msgid "Alton" +#~ msgstr "엘톤" -#~ msgid "" -#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " -#~ "precision strike in the hands of the skilled." -#~ msgstr "" -#~ "작고, 굉장히 예리한 나이프입니다. 수술에 사용됩니다. 작은 칼끝은 숙련자가 " -#~ "사용시 정밀한 타격을 가능케 합니다." +#~ msgid "Amity" +#~ msgstr "에미티" -#~ msgid "" -#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." -#~ msgstr "" -#~ "당신은 매우 쓰러뜨리기 힘듭니다! 모든 HP 에 20%%의 보너스를 받습니다." +#~ msgid "Amherst" +#~ msgstr "엠허스트" -#~ msgid "" -#~ "You can manage to find space for anything! You can carry 40%% more volume." -#~ msgstr "" -#~ "공간을 어떻게 활용하는지 잘 알고 있습니다! 40%% 더 많은 부피를 운반할 수 " -#~ "있습니다." +#~ msgid "Andover" +#~ msgstr "언도버" -#~ msgid "" -#~ "The .500 S&W Magnum round the World's most powerful handgun round " -#~ "recently developed by Smith and Wesson together with the revolutionary " -#~ "S&W 500 Revolver, it has enough power to kill anything with ease." -#~ msgstr "" -#~ ".500 S&W 매그넘 탄은 세상에서 가장 강력한 권총탄으로, 스미스 & 웨슨이 자사" -#~ "의 S&W 500 리볼버를 위해 최근에 개발했습니다. 무엇이든지 쉽게 죽일 수 있" -#~ "는 위력을 지녔습니다." +#~ msgid "Anson" +#~ msgstr "엔손" -#~ msgid "I am looking for a master to train my fighting techniques." -#~ msgstr "전투 기술을 가르쳐줄 선생을 찾고 있어." +#~ msgid "Ashburnham" +#~ msgstr "애슈번햄" -#~ msgid "I am a wandering master of " -#~ msgstr "난 방랑중인 고수라네 " +#~ msgid "Arrowsic" +#~ msgstr "에로우식" -#~ msgid "%1$s assumes a %2$s stance." -#~ msgstr "%1$s 가 %2$s 의 태도를 가정합니다." +#~ msgid "Argyle" +#~ msgstr "아가일" -#~ msgid "tankbot" -#~ msgstr "탱크봇(tankbot)" +#~ msgid "Arlington" +#~ msgstr "알링턴" -#~ msgid "Play ow!" -#~ msgstr "빠른 시작!" +#~ msgid "Appleton" +#~ msgstr "에플톤" -#~ msgid "andom Character" -#~ msgstr "랜덤 캐릭터" +#~ msgid "Aquinnah" +#~ msgstr "아쿠이나" -#~ msgid "

reset Character" -#~ msgstr "캐릭터 탬플릿" +#~ msgid "Arundel" +#~ msgstr "어룬델" -#~ msgid "ustom Character" -#~ msgstr "캐릭터 제작" +#~ msgid "Antrim" +#~ msgstr "엔트림" -#~ msgid "uit" -#~ msgstr "종료" +#~ msgid "Ansonia" +#~ msgstr "엔소니아" -#~ msgid "redits" -#~ msgstr "만든이" +#~ msgid "Ashfield" +#~ msgstr "애슈필드" -#~ msgid "elp" -#~ msgstr "도움말" +#~ msgid "Ashby" +#~ msgstr "애슈비" -#~ msgid "ptions" -#~ msgstr "옵션" +#~ msgid "Ashford" +#~ msgstr "애슈포드" -#~ msgid "pecial" -#~ msgstr "스페셜" +#~ msgid "Athens" +#~ msgstr "아텐스" -#~ msgid "oad" -#~ msgstr "로드" +#~ msgid "Atkinson" +#~ msgstr "엣킨슨" -#~ msgid "ew Game" -#~ msgstr "새 게임" +#~ msgid "Athol" +#~ msgstr "아톨" -#~ msgid "" -#~ "A diseased zombie. Fungus sprouts from its\n" -#~ "mouth and eyes, and thick gray mold grows all\n" -#~ "over its translucent flesh." -#~ msgstr "" -#~ "병에 걸린 좀비입니다. 균사체가 입과 눈을 통해 싹을 틔웠고, 두꺼운 진균체" -#~ "가 투명한 피부 전체에 걸쳐 자라고 있습니다." +#~ msgid "Ashland" +#~ msgstr "애슈랜드" -#~ msgid "Your injured arms prevent a viper strike!" -#~ msgstr "팔이 다쳐서 독사 공격을 할수 없다!" +#~ msgid "Augusta" +#~ msgstr "오거스타" -#~ msgid "" -#~ "A sluglike creature, eight feet long and the width of a refrigerator, " -#~ "it's black body glistens as it oozes it's way along the ground. Eye " -#~ "stalks occassionally push their way out of the oily mass and look around." -#~ msgstr "" -#~ "민달팽이 같이 생긴 생물입니다. 2.4 미터 길이에 냉장고 크기의 넓이를 가지" -#~ "고 있습니다. 검은 몸은 분비물로 반짝거리며, 가끔씩 몸속에서 기름기 덮인 눈" -#~ "이 솟아올라 주변을 봅니다. 그리곤 분노로 울부짖..." +#~ msgid "Auburn" +#~ msgstr "오우번" -#~ msgid "" -#~ "This zombie emits a constant haze of\n" -#~ "thick, obfuscating smoke." -#~ msgstr "이 좀비는 짙은 안개를 계속 내뿜고 있습니다." +#~ msgid "Attleboro" +#~ msgstr "엣틀보로" -#~ msgid "A grey wolf. A vicious and fast pack hunter." -#~ msgstr "회색 늑대입니다. 영악하고 빠르며 무리를 이루어 사냥합니다." +#~ msgid "Baileyville" +#~ msgstr "벨리빌" -#~ msgid "A buck of the largest deer species." -#~ msgstr "사슴 종류중에 가장 큰 종류인 무스의 수컷입니다." +#~ msgid "Bakersfield" +#~ msgstr "베이커스필드" -#~ msgid "Venom Mob Protege" -#~ msgstr "극독파 문하생" +#~ msgid "Baldwin" +#~ msgstr "벨드윈" -#~ msgid "" -#~ "You are a pupil of the Venom Clan. You start with one of the five deadly " -#~ "venoms: Centipede, Viper, Scorpion, Lizard, or Toad." -#~ msgstr "" -#~ "당신은 극독파의 문하생이다. 시작할때 다음 다섯가지 극독 무공중에 하나를 가" -#~ "지고 시작한다 : 지네, 독사, 전갈, 도마뱀, 두꺼비." +#~ msgid "Baltimore" +#~ msgstr "벨티모어" -#~ msgid "" -#~ "One of the Five Deadly Venoms. Lizard Style focuses on using walls to " -#~ "one's\n" -#~ "advantage. Moving alongside a wall will make you run up along it, giving " -#~ "you\n" -#~ "a large to-hit bonus. Standing by a wall allows you to use it to boost " -#~ "dodge." -#~ msgstr "" -#~ "극독파의 다섯 무공중 하나입니다. 도마뱀권은 벽을 이용하는 것에 초점을 둡니" -#~ "다. 벽을 두고 싸우면 이를 타고 달리거나, 명중률에 큰 보너스를 받습니다. " -#~ "벽 옆에 서 있으면 회피능력이 상승합니다." +#~ msgid "Bancroft" +#~ msgstr "반크로프트" -#~ msgid "%1$s nick %4$s" -#~ msgstr "%1$s 긁었다 %4$s" +#~ msgid "Bangor" +#~ msgstr "반고" -#~ msgid "%1$s whacks %4$s" -#~ msgstr "%1$s 후려치다 %4$s" +#~ msgid "Ayer" +#~ msgstr "에이어" -#~ msgid "%1$s whack %4$s" -#~ msgstr "%1$s 후려치다 %4$s" +#~ msgid "Avon" +#~ msgstr "에이번" -#~ msgid "%1$s slice %4$s" -#~ msgstr "%1$s 가로베기 %4$s" +#~ msgid "Aurora" +#~ msgstr "오로라" -#~ msgid "%1$s clobber %4$s" -#~ msgstr "%1$s 찍었다 %4$s" +#~ msgid "Bar Harbor" +#~ msgstr "바 하버" -#~ msgid "%1$s batters %4$s" -#~ msgstr "%1$s 팼다 %4$s" +#~ msgid "Barkhamsted" +#~ msgstr "버크햄스티드" -#~ msgid "%1$s cut %4$s" -#~ msgstr "%1$s 베기 %4$s" +#~ msgid "Barnard" +#~ msgstr "버나드" -#~ msgid "%1$s slices %4$s" -#~ msgstr "%1$s 가로베기 %4$s" +#~ msgid "Baring Plantation" +#~ msgstr "베어링 플렌테이션" -#~ msgid "%1$s cuts %4$s" -#~ msgstr "%1$s 베기 %4$s" +#~ msgid "Barton" +#~ msgstr "바턴" -#~ msgid "%1$s nicks %4$s" -#~ msgstr "%1$s 긇었다 %4$s" +#~ msgid "Bartlett" +#~ msgstr "버트렛" -#~ msgid "%1$s batter %4$s" -#~ msgstr "%1$s 팼다 %4$s" +#~ msgid "Barrington" +#~ msgstr "베링턴" -#~ msgid "%1$s clobbers %4$s" -#~ msgstr "%1$s 찍었다 %4$s" +#~ msgid "Barnstable" +#~ msgstr "번스테블" -#~ msgid "%1$s pokes %4$s" -#~ msgstr "%1$s 꿰뚫다 %4$s" +#~ msgid "Barnet" +#~ msgstr "버넷" -#~ msgid "%1$s hack %4$s" -#~ msgstr "%1$s 베었다 %4$s" +#~ msgid "Barre" +#~ msgstr "바레" -#~ msgid "%1$s stabs %4$s" -#~ msgstr "%1$s 찌름 %4$s" +#~ msgid "Barnstead" +#~ msgstr "번스테드" -#~ msgid "%1$s poke %4$s" -#~ msgstr "%1$s 꿰뚫다 %4$s" +#~ msgid "Beddington" +#~ msgstr "베딩턴" -#~ msgid "%1$s pierces %4$s" -#~ msgstr "%1$s 관통 %4$s" +#~ msgid "Bedford" +#~ msgstr "베드포드" -#~ msgid "%1$s stab %4$s" -#~ msgstr "%1$s 찌름 %4$s" +#~ msgid "Beaver Cove" +#~ msgstr "비버 코브" -#~ msgid "%1$s pierce %4$s" -#~ msgstr "%1$s 관통 %4$s" +#~ msgid "Becket" +#~ msgstr "베킷" -#~ msgid "%1$s hacks %4$s" -#~ msgstr "%1$s 베었다 %4$s" +#~ msgid "Belgrade" +#~ msgstr "벨그레이드" -#~ msgid "%1$s use %2$s %3$s to toss %4$s" -#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" +#~ msgid "Belchertown" +#~ msgstr "벨쳐타운" -#~ msgid "%1$s uses %2$s %3$s to toss %4$s" -#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" +#~ msgid "Belfast" +#~ msgstr "벨페스트" -#~ msgid "%1$s wrap %2$s %3$s around %4$s" -#~ msgstr "%1$s 조였다 %2$s %3$s 주변을 %4$s" +#~ msgid "Bath" +#~ msgstr "베스" -#~ msgid "%1$s sweep %2$s %3$s at %4$s" -#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" +#~ msgid "Beals" +#~ msgstr "빌스" -#~ msgid "%1$s sweeps %2$s %3$s at %4$s" -#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" +#~ msgid "Beacon Falls" +#~ msgstr "베이컨 폴스" -#~ msgid "%1$s jab %2$s %3$s at %4$s" -#~ msgstr "%1$s 잽을 %2$s %3$s 의 %4$s" +#~ msgid "Bellingham" +#~ msgstr "벨링햄" -#~ msgid "%1$s slams %2$s %3$s against %4$s" -#~ msgstr "%1$s 돌진 %2$s %3$s 의 %4$s" +#~ msgid "Benton" +#~ msgstr "벤턴" -#~ msgid "%1$s slam %2$s %3$s against %4$s" -#~ msgstr "%1$s 돌진 %2$s %3$s 의 %4$s" +#~ msgid "Belmont" +#~ msgstr "벨몬트" -#~ msgid "%1$s jabs %2$s %3$s at %4$s" -#~ msgstr "%1$s 잽을 %2$s %3$s 의 %4$s" +#~ msgid "Belvidere" +#~ msgstr "벨비드리" -#~ msgid "%1$s swings %2$s %3$s wide at %4$s" -#~ msgstr "%1$s 휘둘렀다 %2$s %3$s 주변을 %4$s" +#~ msgid "Benson" +#~ msgstr "벤슨" -#~ msgid "%1$s swing %2$s %3$s wide at %4$s" -#~ msgstr "%1$s 휘둘렀다 %2$s %3$s 주변을 %4$s" +#~ msgid "Berlin" +#~ msgstr "베를린" -#~ msgid "%1$s wraps %2$s %3$s around %4$s" -#~ msgstr "%1$s 조였다 %2$s %3$s 주변을 %4$s" +#~ msgid "Berkshire" +#~ msgstr "버크셔" -#~ msgid "%1$s impales %4$s" -#~ msgstr "%1$s가(이) %4$s를(을) 꿰뚫어" +#~ msgid "Berkley" +#~ msgstr "버클리" -#~ msgid "%1$s impale %4$s" -#~ msgstr "%1$s가(이) %4$s를(을) 꿰뚫어" +#~ msgid "Bennington" +#~ msgstr "베닝턴" -#~ msgid "%1$s hits %4$s" -#~ msgstr "%1$s이 %4$s 를(을) 쳐서" +#~ msgid "Benedicta" +#~ msgstr "베네딕타" -#~ msgid "%1$s hit %4$s" -#~ msgstr "%1$s이 %4$s 를(을) 쳐서" +#~ msgid "Beverly" +#~ msgstr "베버리" -#~ msgid " for %d damage." -#~ msgstr " %d 피해를 입혔다." +#~ msgid "Billerica" +#~ msgstr "빌러리카" -#~ msgid "" -#~ "Originating in Israel, Krav Maga is based on taking down an enemy quickly " -#~ "and\n" -#~ "effectively. It focuses on applicable attacks rather than showy or " -#~ "complex\n" -#~ "moves. Popular among police and armed forces everywhere." -#~ msgstr "" -#~ "이스라엘에서 탄생한 크라브 마가는 적을 빠르고 효과적으로 제압하는 것이 기" -#~ "초를 두고 있습니다. 화려하고 복잡한 기술보단 실용적이고 응용 가능한 기술" -#~ "에 초점을 둡니다. 경찰과 무장병력들에게 인기가 좋습니다." +#~ msgid "Bingham" +#~ msgstr "빙햄" -#~ msgid ". Requires Unarmed Skill of " -#~ msgstr ": 비무장 기술 필요" +#~ msgid "Bethel" +#~ msgstr "베살" -#~ msgid " +Attack" -#~ msgstr " +공격" +#~ msgid "Bethlehem" +#~ msgstr "베들레햄" -#~ msgid " +Dodge" -#~ msgstr " +회피" +#~ msgid "Biddeford" +#~ msgstr "비드포드" -#~ msgid "Wheels: " -#~ msgstr "바퀴 수 : " +#~ msgid "Bethany" +#~ msgstr "베서니" -#~ msgid "Accel.: mph/t" -#~ msgstr "가속력(mph/t) :" +#~ msgid "Berwick" +#~ msgstr "버윜" -#~ msgid "Accel.: Kmh/t" -#~ msgstr "가속력(Km/h) :" +#~ msgid "Bernardston" +#~ msgstr "버나즈턴" -#~ msgid "Top speed: mph" -#~ msgstr "최고속도(mph) :" +#~ msgid "Blackstone" +#~ msgstr "블랙스톤" -#~ msgid "Top speed: Km/h" -#~ msgstr "최고속도(Km/h) :" +#~ msgid "Blanchard" +#~ msgstr "블랜챠드" -#~ msgid "Safe speed: mph" -#~ msgstr "안전속도(mph) :" +#~ msgid "Blandford" +#~ msgstr "블랜드포드" -#~ msgid "Safe speed: Km/h" -#~ msgstr "안전속도(Km/h) :" +#~ msgid "Blaine" +#~ msgstr "블레인" -#~ msgid "Mass: kg" -#~ msgstr "무게(kg) :" +#~ msgid "Bloomfield" +#~ msgstr "블룸필드" -#~ msgid "" -#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " -#~ "before it explodes." -#~ msgstr "" -#~ "도선에 불이 붙은 폭죽입니다. 도선이 타고 있습니다. 터지기 전에 빨리 던져야" -#~ "합니다." +#~ msgid "Blue Hill" +#~ msgstr "블루 힐" -#~ msgid "" -#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " -#~ "them quickly before the start to explode." -#~ msgstr "" -#~ "불을 붙인 폭죽 25개 묶음입니다. 도선이 타고 있습니다. 터지기 시작하기 전" -#~ "에 빨리 던져야 합니다." +#~ msgid "Bolton" +#~ msgstr "볼턴" -#~ msgid "sealed jar of canned apple" -#~ msgstr "밀봉 유리병-사과(canned apple)" +#~ msgid "Boothbay" +#~ msgstr "부스베이" -#~ msgid "Default: %f - Min: %f, Max %f" -#~ msgstr "기본 : %f - 최저 : %f, 최대 : %f" +#~ msgid "Boothbay Harbor" +#~ msgstr "부스베이 하버" -#~ msgid "Default: %d - Min: %d, Max %d" -#~ msgstr "기본 : %d - 최저 : %d, 최대 : %d" +#~ msgid "Boscawen" +#~ msgstr "보스카웬" -#~ msgid "%s butt %s with %s antlers!" -#~ msgstr "%s가(이) %s를(을) %s 사슴뿔로 받았다!" +#~ msgid "Boston" +#~ msgstr "보스턴" -#~ msgid "%s butts %s with %s antlers!" -#~ msgstr "%s가(이) %s를(을) %s 사슴뿔로 받았다!" +#~ msgid "Boxford" +#~ msgstr "박스포드" -#~ msgid "%s sting %s with %s tail!" -#~ msgstr "%s가(이) %s를(을) %s 꼬리로 찍었다!" +#~ msgid "Boxborough" +#~ msgstr "박스버러" -#~ msgid "%s stings %s with %s tail!" -#~ msgstr "%s가(이) %s를(을) %s 꼬리로 찍었다!" +#~ msgid "Bowerbank" +#~ msgstr "보워뱅크" -#~ msgid "%s hit %s with %s tail!" -#~ msgstr "%s가(이) %s를(을) %s 꼬리로 쳤다!" +#~ msgid "Bowdoinham" +#~ msgstr "보우다인햄" -#~ msgid "%s hits %s with %s tail!" -#~ msgstr "%s가(이) %s를(을) %s 꼬리로 쳤다!" +#~ msgid "Bradford" +#~ msgstr "브래드포드" -#~ msgid "%s slap %s with %s tentacle!" -#~ msgstr "%s가(이) %s를(을) %s 촉수로 쳤다!!" +#~ msgid "Bozrah" +#~ msgstr "보즈라" -#~ msgid "%s slaps %s with %s tentacle!" -#~ msgstr "%s가(이) %s를(을) %s 촉수로 쳤다!!" +#~ msgid "Boylston" +#~ msgstr "보일스턴" -#~ msgid "%s stabs %s with %s pointed horns!" -#~ msgstr "%s가(이) %s를(을) %s 뾰족한 뿔로 찍었다!" +#~ msgid "Bow" +#~ msgstr "보우" -#~ msgid "%s headbutts %s with %s curled horns!" -#~ msgstr "%s가(이) %s를(을) %s 휜 뿔로 받았다!" +#~ msgid "Bowdoin" +#~ msgstr "보우다인" -#~ msgid "%s stab %s with %s pointed horns!" -#~ msgstr "%s가(이) %s를(을) %s 뾰족한 뿔로 찍었다!" +#~ msgid "Bourne" +#~ msgstr "본" -#~ msgid "%s headbutts %s with %s horns!" -#~ msgstr "%s가(이) %s를(을) %s 뿔로 받았다!" +#~ msgid "Branford" +#~ msgstr "브란포드" -#~ msgid "%s headbutt %s with %s curled horns!" -#~ msgstr "%s가(이) %s를(을) %s 휜 뿔로 받았다!" +#~ msgid "Braintree" +#~ msgstr "브레인트리" -#~ msgid "%s kicks %s with %s hooves!" -#~ msgstr "%s가(이) %s를(을) %s 발굽으로 찼다!" +#~ msgid "Bradley" +#~ msgstr "브래들리" -#~ msgid "%s headbutt %s with %s horns!" -#~ msgstr "%s가(이) %s를(을) %s 뿔로 받았다!" +#~ msgid "Brentwood" +#~ msgstr "브렌트우드" -#~ msgid "%s kick %s with %s hooves!" -#~ msgstr "%s가(이) %s를(을) %s 발굽으로 찼다!" +#~ msgid "Brewer" +#~ msgstr "브루워" -#~ msgid "%s slice %s with %s mandibles!" -#~ msgstr "%s가(이) %s를(을) %s으로 잘라버렸다!" +#~ msgid "Brattleboro" +#~ msgstr "브래틀보로" -#~ msgid "%s slices %s with %s mandibles!" -#~ msgstr "%s가(이) %s를(을) %s으로 잘라버렸다!" +#~ msgid "Bremen" +#~ msgstr "브레멘" -#~ msgid "ker-rash!" -#~ msgstr "카-라쉬!" +#~ msgid "Bridgewater" +#~ msgstr "브릿지워터" -#~ msgid "%s sink %s fangs into %s!" -#~ msgstr "%s가(이) %s 손톱을 %s에 박아넣었습니다!" +#~ msgid "Brewster" +#~ msgstr "브루워스터" -#~ msgid "%s sinks %s fangs into %s!" -#~ msgstr "%s가(이) %s 손톱을 %s에 박아넣었습니다!" +#~ msgid "Bridgeport" +#~ msgstr "브릿지포트" -#~ msgid "Tail whip! Viper Combo Intiated!" -#~ msgstr "꼬리치기! 독사권 초식 시작!" +#~ msgid "Brookfield" +#~ msgstr "브룩필드" -#~ msgid "Stinger Strike!" -#~ msgstr "침 찌르기!" +#~ msgid "Brooklin" +#~ msgstr "브루클린" -#~ msgid " drains %s body heat!" -#~ msgstr "가(이) %s의 체온을 빼앗았다!" +#~ msgid "Brimfield" +#~ msgstr "브림필드" -#~ msgid "%s break the grab!" -#~ msgstr "%s가(이) 잡기를 풀었습니다!" +#~ msgid "Brighton Plantation" +#~ msgstr "브라잇턴 플랜테이션" -#~ msgid "%s breaks the grab!" -#~ msgstr "%s가(이) 잡기를 풀었습니다!" +#~ msgid "Brockton" +#~ msgstr "브룩턴" -#~ msgid "metal screeching!" -#~ msgstr "끼기기기긱!" +#~ msgid "Bristol" +#~ msgstr "브리스톨" -#~ msgid "OTD" -#~ msgstr "OTD" +#~ msgid "Brookline" +#~ msgstr "브룩클린" -#~ msgid " but do no damage." -#~ msgstr " 그러나 아무런 피해도 주지 못했다." +#~ msgid "Bridgton" +#~ msgstr "브리지튼" -#~ msgid "%s peck %s!" -#~ msgstr "%s는(은) %s를(을) 쪼았다!" +#~ msgid "Bridport" +#~ msgstr "브리드포트" -#~ msgid "" -#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." -#~ msgstr "확인할 때 Y/ N으로 선택하고 y/n은 사용되지 않습니다." +#~ msgid "Brighton" +#~ msgstr "브라잇턴" -#~ msgid "you" -#~ msgstr "당신" +#~ msgid "Buckland" +#~ msgstr "벅랜드" -#~ msgid "%s's" -#~ msgstr "%s의 것" +#~ msgid "Burke" +#~ msgstr "버크" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Brownington" +#~ msgstr "브라우닝튼" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Brunswick" +#~ msgstr "브런즈윜" -#~ msgid "whunk!" -#~ msgstr "터엉!" +#~ msgid "Brownville" +#~ msgstr "브라운빌" -#~ msgid "plunk." -#~ msgstr "쿵." +#~ msgid "Buckfield" +#~ msgstr "벅필드" -#~ msgid "clang!" -#~ msgstr "뗑그렁!" +#~ msgid "Brooksville" +#~ msgstr "브룩스빌" -#~ msgid "crak" -#~ msgstr "쩌억" +#~ msgid "Bucksport" +#~ msgstr "벅스포드" -#~ msgid "" -#~ "If true, bright backgrounds are not used--some consoles are not " -#~ "compatible." -#~ msgstr "밝은 배경이 사용되지 않습니다--일부 단말기는 호환되지 않습니다." +#~ msgid "Brownfield" +#~ msgstr "브라운필드" -#~ msgid "" -#~ "A unified power supply, or UPS, is a device developed jointly by military " -#~ "and scientific interests for use in combat and the field. The UPS is " -#~ "designed to power armor and some guns, but drains batteries quickly." -#~ msgstr "" -#~ "통합 전원장치, 혹은 통칭 UPS 는 군과 과학 단체에서 전투 또는 현장에서 사용" -#~ "하기 위해 개발한 장치입니다. UPS는 파워 아머나 몇몇 특수한 총기를 위해 설" -#~ "계되었으며, 배터리를 빠르게 소모합니다." +#~ msgid "Brookton" +#~ msgstr "브룩튼" -#~ msgid "" -#~ "This is an advertisement for Robert's Universal Robotics brand law " -#~ "enforcement robots. It shows a picture of tripod robot incinerating a mob " -#~ "of looters and stepping over charred and smoking corpses. The caption " -#~ "reads: \"Built to Protect. Programmed to Serve.\"" -#~ msgstr "" -#~ "로버트 유니버셜 로봇 브랜드의 경찰 로봇 광고입니다. 발이 3개 달린 로봇이 " -#~ "랍스터 떼를 소각하며 연기나는 랍스터를 밟는 사진입니다. \"보호를 위해 만들" -#~ "어져, 공익을 위해 프로그래밍 되다.\" 라고 써있습니다." +#~ msgid "Burlington" +#~ msgstr "벌링턴" -#~ msgid "" -#~ "Before the Apocalypse, you turned to Heroin to soothe your many " -#~ "problems.\n" -#~ "Now, your habit is your only comfort and your only drive." -#~ msgstr "" -#~ "당신은 대재앙 전에는 여러 문제를 잊기위해 헤로인을 사용했지만, 지금은 헤로" -#~ "인만이 위안이며 목표가 되었습니다." +#~ msgid "Burnham" +#~ msgstr "번햄" -#~ msgid "" -#~ "You were on your way to collect your check, when your pimp tried to kill " -#~ "you. You wish that it wasn't a common occurence. You start with a skirt, " -#~ "tank top, a pair of high heels, your stash, and a strong crack addiction." -#~ msgstr "" -#~ "당신의 몪을 받으려고 갔는데 포주가 죽이려고 달려들었습니다. 이런일이 자주 " -#~ "일어나지 않았으면 하고 바랬지만... 셔츠, 탱크탑, 하이힐 한쌍, 약 주머니" -#~ "와 심한 크랙 중독을 가지고 시작합니다." +#~ msgid "Burrillville" +#~ msgstr "버릴빌" -#~ msgid "" -#~ "Being a paramedic put you in a bad spot when it all ended. You had to " -#~ "fight your way out of a hospital full of infected to get to the shelter. " -#~ "You start with a few related tools and some skill in first aid." -#~ msgstr "" -#~ "당신은 세상이 끝장날 때 구급대원으로서 영 좋지 않은 곳에 있었습니다. 피난" -#~ "처로 가기위해 병원에 가득찬 좀비와 싸워야 했습니다. 약간의 응급 치료 기술" -#~ "과 관련 도구를 소지하고 시작합니다." +#~ msgid "Cambridge" +#~ msgstr "캠브리지" -#~ msgid "" -#~ "You were one of those guys who watched one too many survivalist shows. " -#~ "You start with a backpack, a blazer, and some survival skills." -#~ msgstr "" -#~ "당신은 생존 관련 TV 프로그램을 너무 많이 본사람들중 하나입니다. 배낭, 블레" -#~ "이저, 약간의 서바이벌 기술을 갖고 시작합니다." +#~ msgid "Cabot" +#~ msgstr "카봇" -#~ msgid "Evelyn" -#~ msgstr "에블린" +#~ msgid "Campton" +#~ msgstr "캄프튼" -#~ msgid "%s %s" -#~ msgstr "%s %s" +#~ msgid "Camden" +#~ msgstr "캄덴" -#~ msgid "" -#~ "You haven't seen this much blood since the war. The whole world's gone " -#~ "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay " -#~ "for what they've done. You start with a cane and your pocketwatch." -#~ msgstr "" -#~ "당신은 전쟁 이후로 이 정도로 대량의 피를 본 적이 없습니다. 세상이 미쳐 돌" -#~ "아가고 있습니다! 사람들이 당신의 손자를 먹었다구요! 망할.. 당신은 놈들에" -#~ "게 똑같이 갚아줄 겁니다. 지팡이와 회중 시계를 갖고 시작합니다." +#~ msgid "Calais" +#~ msgstr "칼레" -#~ msgid "" -#~ "You worked for a small-time security company guarding local businesses. " -#~ "You start with a security outfit and a flashlight." -#~ msgstr "" -#~ "당신은 작은 경비 업체에서 지역 상가를 지키는 일을 했었습니다. 경비복과 손" -#~ "전등을 갖고 시작합니다." +#~ msgid "Byron" +#~ msgstr "바이런" -#~ msgid "" -#~ "You used to be a ballroom dancer before the cataclysm, and now you use " -#~ "your skills to save your life. You start with a tuxedo and a level in " -#~ "dodging." -#~ msgstr "" -#~ "대격변 이전의 당신은 사교춤을 추곤 했었으며, 이 기술을 활용해 생존했습니" -#~ "다. 턱시도 정장과 회피 1 레벨 보너스를 받습니다." +#~ msgid "Buxton" +#~ msgstr "벅스턴" -#~ msgid "" -#~ "You've always loved tinkering with stuff. You start with a tool belt, and " -#~ "know a little bit about mechanics, tailoring, electronics, and carpentry." -#~ msgstr "" -#~ "당신은 줄곧 물건을 다뤄보는 걸 좋아했습니다. 연장벨트, 약간의 기계공학, 재" -#~ "봉, 전자공학, 목공 지식을 갖고 시작합니다." +#~ msgid "Canaan" +#~ msgstr "캐이넌" -#~ msgid "" -#~ "You've worked the streets since you were a kid, and now you use your " -#~ "street skills to survive. You start with a Glock 19 and some of your " -#~ "\"goods\", but no bullets." -#~ msgstr "" -#~ "당신은 어려서부터 길에서 자랐고, 길에서 터득한 기술로 살아갑니다. 글록 19 " -#~ "권총과 몇 가지 당신의 \"물품\"을 갖고 시작합니다만, 총알은 없습니다." +#~ msgid "Canterbury" +#~ msgstr "켄터베리" -#~ msgid "Switch between Km/h and mph." -#~ msgstr "Km/h 와 mph를 바꿉니다." +#~ msgid "Candia" +#~ msgstr "칸디아" -#~ msgid "crunch." -#~ msgstr "으드득." +#~ msgid "Carrabassett Valley" +#~ msgstr "카라바셋 벨리" -#~ msgid "whump!" -#~ msgstr "쿵!" +#~ msgid "Carlisle" +#~ msgstr "칼라일" -#~ msgid "whack!" -#~ msgstr "철썩!" +#~ msgid "Carmel" +#~ msgstr "카멜" -#~ msgid "wham!" -#~ msgstr "꽝!" +#~ msgid "Caratunk" +#~ msgstr "카라텅크" -#~ msgid "whump." -#~ msgstr "쿵." +#~ msgid "Caribou" +#~ msgstr "카리부" -#~ msgid "" -#~ "You spent most of your life on a Harley, and it's only natural you spend " -#~ "the rest of it riding one. You start with some biker clothes." -#~ msgstr "" -#~ "당신은 인생의 대부분을 할리(오토바이)에 투자했고, 투자하고 남은 인생은 이" -#~ "걸 타는 것에 투자했습니다. 바이커 의상을 갖고 시작합니다." +#~ msgid "Canton" +#~ msgstr "캔톤" -#~ msgid "" -#~ "You used to work for some small-time business owner doing minor " -#~ "electrical work, and you just so happened to be working on an evac " -#~ "shelter when the cataclysm struck. You start with a level in electronics, " -#~ "and a tool belt." -#~ msgstr "" -#~ "당신은 작은 전기 계통 가게에서 일하고 있었고, 대피소에서 일을 하던 중 대격" -#~ "변이 일어났습니다. 전자공학 1 레벨, 연장 벨트를 갖고 시작합니다." +#~ msgid "Cape Elizabeth" +#~ msgstr "케이프 엘리자베스" -#~ msgid "" -#~ "You were in the middle of a nice shower when the cataclysm struck! You " -#~ "start buck naked." -#~ msgstr "" -#~ "하필이면 대격변이라는게 당신이 기분좋게 샤워하던 중에 발생했습니다! 홀딱 " -#~ "벗고 게임을 시작합니다." +#~ msgid "Cary Plantation" +#~ msgstr "카리 플랜테이션" -#~ msgid "" -#~ "You used to work at the home depot, and you did a lot of home renovations " -#~ "yourself. You start with steel toe boots, a tool belt, a hammer, and a " -#~ "level in construction." -#~ msgstr "" -#~ "당신은 자택 창고에서 종종 작업을 하곤 했으며 직접 집을 개조한 일도 많았습" -#~ "니다. 철을 덧댄 부츠와 연장 벨트, 망치, 건설 스킬 1 레벨을 갖고 시작합니" -#~ "다." +#~ msgid "Carver" +#~ msgstr "카버" -#~ msgid "" -#~ "You lived on the streets your whole life because you would rather have a " -#~ "bottle of whiskey than a roof over your head. You start with a strong " -#~ "alcohol addiction and a pair of pants." -#~ msgstr "" -#~ "당신은 지붕 밑보다 위스키 한 병을 선호했기에 평생을 길에서 살았습니다. 강" -#~ "력한 알콜 중독 증상과 바지 한 벌을 갖고 시작합니다." +#~ msgid "Castine" +#~ msgstr "캐스틴" -#~ msgid "" -#~ "You're a high school drop-out with one goal in mind: to join the " -#~ "military. You finally got in, and now it's hell on Earth in cataclysmic " -#~ "proportions. You start out with some military gear, and a level in " -#~ "survival and firearms." -#~ msgstr "" -#~ "당신은 한 가지 목표를 위해 고등학교를 그만뒀습니다. 입대 말이죠. 입대는 했" -#~ "지만 대격변이 일어나 지구에 지옥이 강림하고 말았습니다. 몇 가지 군용품을 " -#~ "소지하고, 생존과 화기 1 레벨 보너스와 함께 시작합니다." +#~ msgid "Casco" +#~ msgstr "카스코" -#~ msgid "" -#~ "Your flexible outlook on law has ensured your survival, but now what? You " -#~ "start with cargo pants, a hoodie, \"sundries\", and one additional level " -#~ "of melee." -#~ msgstr "" -#~ "당신의 법적인 면에서 유연한 태도는 그동안의 삶을 살아오는데 도움이 됐습니" -#~ "다만 이젠 어쩔 건가요? 카고 바지, 후드 티, \"잡동사니\", 근접공격 1 레벨 " -#~ "추가 보너스와 함께 시작합니다." +#~ msgid "Castleton" +#~ msgstr "캐슬턴" -#~ msgid "" -#~ "Although you never got your driver's license, you've always loved cars. " -#~ "You start with a wrench, a toolbelt, and some car-related reading " -#~ "material." -#~ msgstr "" -#~ "운전면허는 없지만, 그래도 당신은 항상 자동차를 사랑해왔습니다. 렌치, 연장" -#~ "벨트, 자동차 관련 물품을 소지하고 시작합니다." +#~ msgid "Castle Hill" +#~ msgstr "캐슬 힐" -#~ msgid "Delete world upon player death." -#~ msgstr "캐릭터 사망시 월드 삭제" +#~ msgid "Caswell" +#~ msgstr "카스웰" -#~ msgid "Auto Pickup 0 Vol light items" -#~ msgstr "0 부피 물품 자동 줍기" +#~ msgid "Carroll" +#~ msgstr "캐롤" -#~ msgid "" -#~ "If true, replaces some TTF rendered text with Tiles. Only applicable on " -#~ "SDL builds. Requires restart." -#~ msgstr "" -#~ "이 옵션을 켜면, 몇몇 트루타입 폰트 랜더링된 문자를 그래픽 타일로 대체합니" -#~ "다. SDL 버젼에서만 적용됩니다. 재시작 필요." +#~ msgid "Carroll Plantation" +#~ msgstr "캐롤 플랜테이션" -#~ msgid "Use Tiles" -#~ msgstr "타일 사용" +#~ msgid "Carthage" +#~ msgstr "카르타고" -#~ msgid "" -#~ "If true, shift the view toward the selected item if it is outside of your " -#~ "current viewport." -#~ msgstr "" -#~ "이 옵션을 켜면, 현재 시야를 벗어난 경우 선택한 물품으로 시야를 이동합니다." +#~ msgid "Charlton" +#~ msgstr "찰턴" -#~ msgid "0 - Center map on character" -#~ msgstr "0 - 캐릭터 중심" +#~ msgid "Chatham" +#~ msgstr "채텀" -#~ msgid "N - Add/Edit a note " -#~ msgstr "N - 메모 추가/수정 " +#~ msgid "Central Falls" +#~ msgstr "센트럴 폴" -#~ msgid "/ - Search " -#~ msgstr "/ - 검색 " +#~ msgid "Chaplin" +#~ msgstr "채플린" -#~ msgid "D - Delete a note " -#~ msgstr "D - 메모 삭제 " +#~ msgid "Chapman" +#~ msgstr "챕맨" -#~ msgid "L - List notes " -#~ msgstr "좌 - 노트 리스트 " +#~ msgid "Charlemont" +#~ msgstr "찰레몬트" -#~ msgid "Esc or q - Return to game " -#~ msgstr "Esc 또는 q - 돌아가기 " +#~ msgid "Charleston" +#~ msgstr "찰레스턴" -#~ msgid "Winchester" -#~ msgstr "윈체스터" +#~ msgid "Charlestown" +#~ msgstr "찰리스타운" -#~ msgid "Westfield" -#~ msgstr "웨스트필드" +#~ msgid "Centerville" +#~ msgstr "센터빌" -#~ msgid "Westford" -#~ msgstr "웨스트포드" +#~ msgid "Center Harbor" +#~ msgstr "센터 하버" -#~ msgid "Westminster" -#~ msgstr "웨스트민스터" +#~ msgid "Chesterville" +#~ msgstr "체스터빌" -#~ msgid "Westmore" -#~ msgstr "웨스트모어" +#~ msgid "Chebeague Island" +#~ msgstr "샤비그 아일랜드" -#~ msgid "Wallingford" -#~ msgstr "월링포드" +#~ msgid "Chelmsford" +#~ msgstr "쳄스포드" -#~ msgid "Waldoboro" -#~ msgstr "왈도보로" +#~ msgid "Chester" +#~ msgstr "체스터" -#~ msgid "Wales" -#~ msgstr "웨일즈" +#~ msgid "Cheshire" +#~ msgstr "체셔" -#~ msgid "Whitman" -#~ msgstr "휘트먼" +#~ msgid "Cherryfield" +#~ msgstr "체리필드" -#~ msgid "Whitefield" -#~ msgstr "화이트필드" +#~ msgid "Chelsea" +#~ msgstr "첼시" -#~ msgid "Troy" -#~ msgstr "트로이" +#~ msgid "Chicopee" +#~ msgstr "치코피" -#~ msgid "Wade" -#~ msgstr "웨이드" +#~ msgid "Chichester" +#~ msgstr "치체스터" -#~ msgid "Vienna" -#~ msgstr "비엔나" +#~ msgid "Chesterfield" +#~ msgstr "체스터필드" -#~ msgid "Victory" -#~ msgstr "빅토리" +#~ msgid "Claremont" +#~ msgstr "클레어몬트" -#~ msgid "Walden" -#~ msgstr "월든" +#~ msgid "Chittenden" +#~ msgstr "치텐던" -#~ msgid "Waldo" -#~ msgstr "왈도" +#~ msgid "Clarksburg" +#~ msgstr "클락스버그" -#~ msgid "Upton" -#~ msgstr "업튼" +#~ msgid "Clarendon" +#~ msgstr "클라렌든" -#~ msgid "Uxbridge" -#~ msgstr "억스브리지" +#~ msgid "Clifton" +#~ msgstr "클리프턴" -#~ msgid "Vershire" -#~ msgstr "버셔" +#~ msgid "Clarksville" +#~ msgstr "클락스빌" -#~ msgid "Wakefield" -#~ msgstr "웨이크필드" +#~ msgid "Codyville Plantation" +#~ msgstr "코디빌 플랜테이션" -#~ msgid "Tinmouth" -#~ msgstr "틴마우스" +#~ msgid "Clinton" +#~ msgstr "클린턴" -#~ msgid "Thomaston" -#~ msgstr "토마스톤" +#~ msgid "China" +#~ msgstr "차이나" -#~ msgid "Thornton" -#~ msgstr "쏜턴" +#~ msgid "Chilmark" +#~ msgstr "칠마크" -#~ msgid "Tilton" -#~ msgstr "틸턴" +#~ msgid "Cohasset" +#~ msgstr "코하셋" -#~ msgid "Townsend" -#~ msgstr "타운샌드" +#~ msgid "Colchester" +#~ msgstr "콜체스터" -#~ msgid "Torrington" -#~ msgstr "토링턴" +#~ msgid "Coplin Plantation" +#~ msgstr "캅린 플랜테이션Coplin Plantation" -#~ msgid "Townshend" -#~ msgstr "타운스핸드" +#~ msgid "Corinna" +#~ msgstr "코리나" -#~ msgid "Tolland" -#~ msgstr "톨랜드" +#~ msgid "Concord" +#~ msgstr "콩코드" -#~ msgid "Topsham" -#~ msgstr "탑스햄" +#~ msgid "Conway" +#~ msgstr "콘웨이" -#~ msgid "Topsfield" -#~ msgstr "탑스필드" +#~ msgid "Columbia" +#~ msgstr "컬럼비아" -#~ msgid "Washburn" -#~ msgstr "워시본" +#~ msgid "Colebrook" +#~ msgstr "콜브룩" -#~ msgid "Westwood" -#~ msgstr "웨스트우드" +#~ msgid "Colrain" +#~ msgstr "콜레인" -#~ msgid "Westmoreland" -#~ msgstr "웨스트모어랜드" +#~ msgid "Columbia Falls" +#~ msgstr "컬럼비아 폴스" -#~ msgid "Westport" -#~ msgstr "웨스트포트" +#~ msgid "Crawford" +#~ msgstr "크라우포드" -#~ msgid "MEDICINE/DRUGS" -#~ msgstr "의약품/약물 :" +#~ msgid "Cranston" +#~ msgstr "크렌스턴" -#~ msgid "Wallagrass" -#~ msgstr "왈라그라스" +#~ msgid "Craftsbury" +#~ msgstr "크레프트스베리" -#~ msgid "Wardsboro" -#~ msgstr "워즈보로" +#~ msgid "Coventry" +#~ msgstr "코벤트리" -#~ msgid "Walpole" -#~ msgstr "왈폴" +#~ msgid "Cornwall" +#~ msgstr "콘월" -#~ msgid "Waltham" -#~ msgstr "왈스헴" +#~ msgid "Cornville" +#~ msgstr "콘빌" -#~ msgid "Critical! " -#~ msgstr "치명타! " +#~ msgid "Cranberry Isles" +#~ msgstr "크렌베리 아이리쉬" -#~ msgid "Truro" -#~ msgstr "트루로" +#~ msgid "Corinth" +#~ msgstr "코린스" -#~ msgid "Trumbull" -#~ msgstr "트럼벨" +#~ msgid "Cornish" +#~ msgstr "코니쉬" -#~ msgid "Tremont" -#~ msgstr "트레몬트" +#~ msgid "Cromwell" +#~ msgstr "크롬웰" -#~ msgid "Trescott" -#~ msgstr "트레스콧" +#~ msgid "Crystal" +#~ msgstr "크리스탈" -#~ msgid "Trenton" -#~ msgstr "트렌턴" +#~ msgid "Croydon" +#~ msgstr "크로이던" -#~ msgid "West Windsor" -#~ msgstr "웨스트 윈저" +#~ msgid "Damariscotta" +#~ msgstr "다 마리스 코타" -#~ msgid "Westborough" -#~ msgstr "웨스트보로우" +#~ msgid "Cyr Plantation" +#~ msgstr "시르 농장" -#~ msgid "Westerly" -#~ msgstr "웨스터리" +#~ msgid "Dallas Plantation" +#~ msgstr "달라스 농장" -#~ msgid "West Tisbury" -#~ msgstr "웨스트 티스버리" +#~ msgid "Dalton" +#~ msgstr "달튼" -#~ msgid "West Stockbridge" -#~ msgstr "웨스트 스톡브릿지" +#~ msgid "Cumberland" +#~ msgstr "컴벌 랜드" -#~ msgid "West Springfield" -#~ msgstr "웨스트 스프링필드" +#~ msgid "Cummington" +#~ msgstr "커밍턴" -#~ msgid "Westbrook" -#~ msgstr "웨스트브룩" +#~ msgid "Cushing" +#~ msgstr "커싱" -#~ msgid "West Warwick" -#~ msgstr "웨스트 워윅" +#~ msgid "Danbury" +#~ msgstr "댄 버리" -#~ msgid "Wellington" -#~ msgstr "웰링턴" +#~ msgid "" +#~ "You just put on an article of clothing that provides ample storage " +#~ "space.\n" +#~ "This will allow you to carry much more stuff, but be aware that there is " +#~ "also\n" +#~ "a limit on the weight you can carry which depends on strength. The item " +#~ "you\n" +#~ "put on also encumbered your torso. This will make combat a little more\n" +#~ "difficult. To check encumberance, press @." +#~ msgstr "" +#~ "지금 착용한것은 저장 공간을 늘려주는 의류입니다.\n" +#~ "좀더 많은 물건을 휴대할수 있게 되지만, 힘에 따라서 최대 중량 한도 내에서\n" +#~ "휴대가 가능합니다. 이런 종류의 의류들은 상체에 방해도를 주며\n" +#~ "전투가 좀더 힘들어집니다. 방해도는 '@' 로 확인 가능합니다." -#~ msgid "Wells" -#~ msgstr "웰스" +#~ msgid "" +#~ "You just put on an article of clothing that protects against the " +#~ "environment.\n" +#~ "The most common and imporant are respiratory devices, which will protect " +#~ "you\n" +#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" +#~ "However, they also make it a little harder to breath when running, so " +#~ "you'll\n" +#~ "move more slowly. To check encumberance, press @." +#~ msgstr "" +#~ "지금 착용한것은 환경에 대한 보호력을 주는 의류입니다.\n" +#~ "가장 일반적이고 중요한 것은 호흡장치 입니다. 연기, 공기 흡입 독성물질\n" +#~ "혹은 독성 유기물과 다른 일반적인 위험요소를 막아줍니다. 하지만\n" +#~ "달릴때 호흡이 힘들어지기 때문에 움직임이 좀 느려집니다.\n" +#~ "방해도를 확인하려면 '@' 를 누르면 됩니다." -#~ msgid "West Rutland" -#~ msgstr "웨스트 럿랜드" +#~ msgid "Danby" +#~ msgstr "댄비" -#~ msgid "West Newbury" -#~ msgstr "웨스트 뉴버리" +#~ msgid "Dayton" +#~ msgstr "데이톤" -#~ msgid "West Paris" -#~ msgstr "웨스트 패리스" +#~ msgid "Dartmouth" +#~ msgstr "다트무스" -#~ msgid "West Hartford" -#~ msgstr "웨스트 하트포드" +#~ msgid "Dedham" +#~ msgstr "데드햄" -#~ msgid "West Haven" -#~ msgstr "웨스트 헤이븐" +#~ msgid "Deblois" +#~ msgstr "데블로이스" -#~ msgid "West Gardiner" -#~ msgstr "웨스트 가디너" +#~ msgid "Danvers" +#~ msgstr "댄버스" -#~ msgid "West Greenwich" -#~ msgstr "웨스트 그린위치" +#~ msgid "Danforth" +#~ msgstr "댄포스" -#~ msgid "Wellfleet" -#~ msgstr "웰플릿" +#~ msgid "Darien" +#~ msgstr "대리언" -#~ msgid "Wayland" -#~ msgstr "웨이랜드" +#~ msgid "Danville" +#~ msgstr "댄빌" -#~ msgid "Waterville Valley" -#~ msgstr "워터빌 밸리" +#~ msgid "Deep River" +#~ msgstr "딥 리버" -#~ msgid "Waterville" -#~ msgstr "워터빌" +#~ msgid "Denmark" +#~ msgstr "덴마크" -#~ msgid "Wayne" -#~ msgstr "웨인" +#~ msgid "Dennis" +#~ msgstr "데니스" -#~ msgid "Weare" -#~ msgstr "위어" +#~ msgid "Deerfield" +#~ msgstr "디어필드" -#~ msgid "Weathersfield" -#~ msgstr "웨더스필드" +#~ msgid "Deering" +#~ msgstr "디어링" -#~ msgid "Webster" -#~ msgstr "웹스터" +#~ msgid "Derby" +#~ msgstr "더비" -#~ msgid "Webster Plantation" -#~ msgstr "웹스터 플랜테이션" +#~ msgid "Dennistown" +#~ msgstr "데니스타운" -#~ msgid "Weld" -#~ msgstr "웰드" +#~ msgid "Dennysville" +#~ msgstr "데니스빌" -#~ msgid "Wellesley" -#~ msgstr "웰즐리" +#~ msgid "Derry" +#~ msgstr "데어리" -#~ msgid "Waterford" -#~ msgstr "워터포드" +#~ msgid "Detroit" +#~ msgstr "디트로이트" -#~ msgid "Watertown" -#~ msgstr "워터타운" +#~ msgid "Deer Isle" +#~ msgstr "디어 아일" -#~ msgid "Warwick" -#~ msgstr "워윅" +#~ msgid "Dexter" +#~ msgstr "덱스터" -#~ msgid "Warren" -#~ msgstr "워렌" +#~ msgid "Dracut" +#~ msgstr "드라컷" -#~ msgid "Waterboro" -#~ msgstr "워터보로" +#~ msgid "Dorchester" +#~ msgstr "도어체스터" -#~ msgid "Wareham" -#~ msgstr "웨어햄" +#~ msgid "Dixmont" +#~ msgstr "딕스몬트" -#~ msgid "Warner" -#~ msgstr "워너" +#~ msgid "Dighton" +#~ msgstr "다이튼" -#~ msgid "Ware" -#~ msgstr "웨어" +#~ msgid "Dover-Foxcroft" +#~ msgstr "도버-폭스크로프트" -#~ msgid "Waterbury" -#~ msgstr "워터버리" +#~ msgid "Dover" +#~ msgstr "도버" -#~ msgid "Vassalboro" -#~ msgstr "배살보로" +#~ msgid "Douglas" +#~ msgstr "더글라스" -#~ msgid "Veazie" -#~ msgstr "배아지" +#~ msgid "Dorset" +#~ msgstr "도어셋" -#~ msgid "Vergennes" -#~ msgstr "버겐스" +#~ msgid "Duxbury" +#~ msgstr "덕스베리" -#~ msgid "Vernon" -#~ msgstr "버논" +#~ msgid "Drew Plantation" +#~ msgstr "드류의 대농장" -#~ msgid "Vanceboro" -#~ msgstr "밴스버러" +#~ msgid "Dublin" +#~ msgstr "더블린" -#~ msgid "Verona Island" -#~ msgstr "베로나 아일랜드" +#~ msgid "Dudley" +#~ msgstr "더들리" -#~ msgid "The Forks" -#~ msgstr "포크" +#~ msgid "Dummer" +#~ msgstr "덤머" -#~ msgid "Thorndike" -#~ msgstr "손다이크" +#~ msgid "Dummerston" +#~ msgstr "덤머스턴" -#~ msgid "Lebanon" -#~ msgstr "레바논" +#~ msgid "Dunbarton" +#~ msgstr "던바턴" -#~ msgid "Lawrence" -#~ msgstr "로렌스" +#~ msgid "Dunstable" +#~ msgstr "던스테이블" -#~ msgid "Langdon" -#~ msgstr "랭던" +#~ msgid "Durham" +#~ msgstr "더햄" -#~ msgid "Lanesborough" -#~ msgstr "레인즈버러" +#~ msgid "Dresden" +#~ msgstr "드레스덴" -#~ msgid "Landgrove" -#~ msgstr "랜드그로브" +#~ msgid "East Haven" +#~ msgstr "이스트 해븐" -#~ msgid "Landaff" -#~ msgstr "랜대프" +#~ msgid "East Bridgewater" +#~ msgstr "이스트 브리지워터" -#~ msgid "Lancaster" -#~ msgstr "랭커스터" +#~ msgid "Eagle Lake" +#~ msgstr "이글 레이크" -#~ msgid "Lamoine" -#~ msgstr "라모인" +#~ msgid "East Brookfield" +#~ msgstr "이스트 브룩필드" -#~ msgid "Lakeville" -#~ msgstr "레이크빌" +#~ msgid "East Haddam" +#~ msgstr "이스트 해덤" -#~ msgid "Lake View Plantation" -#~ msgstr "레이크 뷰 플랜테이션" +#~ msgid "East Greenwich" +#~ msgstr "이스트 그린위치" -#~ msgid "Lagrange" -#~ msgstr "라그랑쥬" +#~ msgid "East Hartford" +#~ msgstr "이스트 하트포드" -#~ msgid "Laconia" -#~ msgstr "라코니아" +#~ msgid "East Hampton" +#~ msgstr "이스트 햄프턴" -#~ msgid "Knox" -#~ msgstr "녹스" +#~ msgid "Dyer Brook" +#~ msgstr "다이어 브룩" -#~ msgid "Kittery" -#~ msgstr "키터리" +#~ msgid "East Granby" +#~ msgstr "이스트 그랜비" -#~ msgid "Kirby" -#~ msgstr "커비" +#~ msgid "East Kingston" +#~ msgstr "이스트 킹스턴" -#~ msgid "Kingston" -#~ msgstr "킹스턴" +#~ msgid "East Windsor" +#~ msgstr "이스트 윈저" -#~ msgid "Kingsbury Plantation" -#~ msgstr "킹스버리 플랜테이션" +#~ msgid "Eastbrook" +#~ msgstr "이스트브룩" -#~ msgid "Kingman" -#~ msgstr "킹맨" +#~ msgid "East Montpelier" +#~ msgstr "이스트 몬트필리어" -#~ msgid "Kingfield" -#~ msgstr "킹필드" +#~ msgid "East Providence" +#~ msgstr "이스트 프로비던스" -#~ msgid "Killingworth" -#~ msgstr "킬링워스" +#~ msgid "East Machias" +#~ msgstr "이스트 마키어즈" -#~ msgid "Killington" -#~ msgstr "킬링턴" +#~ msgid "East Millinocket" +#~ msgstr "이스트 밀리노켓" -#~ msgid "Kent" -#~ msgstr "켄트" +#~ msgid "East Longmeadow" +#~ msgstr "이스트 롱메도우" -#~ msgid "Kensington" -#~ msgstr "켄싱턴" +#~ msgid "East Lyme" +#~ msgstr "이스트 라임" -#~ msgid "Kennebunk" -#~ msgstr "케네벙크" +#~ msgid "Eastford" +#~ msgstr "이스트포드" -#~ msgid "Kenduskeag" -#~ msgstr "켄덕스키그" +#~ msgid "Edinburg" +#~ msgstr "에딘버그" -#~ msgid "Keene" -#~ msgstr "킨" +#~ msgid "Eastport" +#~ msgstr "이스트포트" -#~ msgid "Jonesport" -#~ msgstr "존스포트" +#~ msgid "Eaton" +#~ msgstr "이튼" -#~ msgid "Jonesboro" -#~ msgstr "존스보로" +#~ msgid "Easthampton" +#~ msgstr "이스트햄프턴" -#~ msgid "Johnston" -#~ msgstr "존스턴" +#~ msgid "Easton" +#~ msgstr "이스턴" -#~ msgid "Jericho" -#~ msgstr "제리코" +#~ msgid "Edgartown" +#~ msgstr "에드가타운" -#~ msgid "Jefferson" -#~ msgstr "제퍼슨" +#~ msgid "Edgecomb" +#~ msgstr "에지콤" -#~ msgid "Jay" -#~ msgstr "제이" +#~ msgid "Eddington" +#~ msgstr "에딩턴" -#~ msgid "Jamestown" -#~ msgstr "제임스타운" +#~ msgid "Eden" +#~ msgstr "에덴" -#~ msgid "Jamaica" -#~ msgstr "자메이카" +#~ msgid "Eastham" +#~ msgstr "이스트햄" -#~ msgid "Jaffrey" -#~ msgstr "제프리" +#~ msgid "Enosburg" +#~ msgstr "에노스버그" -#~ msgid "Jackman" -#~ msgstr "잭맨" +#~ msgid "Embden" +#~ msgstr "엠덴" -#~ msgid "Islesboro" -#~ msgstr "아일보로" +#~ msgid "Elmore" +#~ msgstr "엘모어" -#~ msgid "Isle au Haut" -#~ msgstr "아일 오 호트" +#~ msgid "Ellsworth" +#~ msgstr "엘스워스" -#~ msgid "Isle La Motte" -#~ msgstr "아일 라 오트" +#~ msgid "Enfield" +#~ msgstr "엔필드" -#~ msgid "Island Falls" -#~ msgstr "아일랜드 폴스" +#~ msgid "Egremont" +#~ msgstr "에그리몬트" -#~ msgid "Irasburg" -#~ msgstr "이라스버그" +#~ msgid "Effingham" +#~ msgstr "에핑엄" -#~ msgid "Ira" -#~ msgstr "이라" +#~ msgid "Ellington" +#~ msgstr "엘링턴" -#~ msgid "Ipswich" -#~ msgstr "입스위치" +#~ msgid "Eliot" +#~ msgstr "엘리엇" -#~ msgid "Industry" -#~ msgstr "인더스트리" +#~ msgid "Everett" +#~ msgstr "에버렛" -#~ msgid "Hyde Park" -#~ msgstr "하이드 공원" +#~ msgid "Exeter" +#~ msgstr "엑세터" -#~ msgid "Hurricane Isle" -#~ msgstr "허리케인 섬" +#~ msgid "Epsom" +#~ msgstr "엡섬" -#~ msgid "Huntington" -#~ msgstr "헌팅턴" +#~ msgid "Errol" +#~ msgstr "에롤" -#~ msgid "Hull" -#~ msgstr "훌" +#~ msgid "Erving" +#~ msgstr "어빙" -#~ msgid "Hudson" -#~ msgstr "허드슨" +#~ msgid "Essex" +#~ msgstr "에섹스" -#~ msgid "Hubbardton" -#~ msgstr "하버드턴" +#~ msgid "Etna" +#~ msgstr "에트나" -#~ msgid "Hubbardston" -#~ msgstr "하버드스턴" +#~ msgid "Eustis" +#~ msgstr "유스티스" -#~ msgid "Howland" -#~ msgstr "하울랜드" +#~ msgid "Fair Haven" +#~ msgstr "페어 해븐" -#~ msgid "Houlton" -#~ msgstr "훌턴" +#~ msgid "Epping" +#~ msgstr "에핑" -#~ msgid "Hopkinton" -#~ msgstr "홉킨턴" +#~ msgid "Farmingdale" +#~ msgstr "파밍데일" -#~ msgid "Hopedale" -#~ msgstr "호프데일" +#~ msgid "Fairfax" +#~ msgstr "페어팩스" -#~ msgid "Hope" -#~ msgstr "호프" +#~ msgid "Fall River" +#~ msgstr "폴 리버" -#~ msgid "Hooksett" -#~ msgstr "후크세트" +#~ msgid "Fairlee" +#~ msgstr "페어리" -#~ msgid "Holyoke" -#~ msgstr "홀리요크" +#~ msgid "Fairhaven" +#~ msgstr "페어해븐" -#~ msgid "Holliston" -#~ msgstr "홀리스턴" +#~ msgid "Fairfield" +#~ msgstr "페어필드" -#~ msgid "Hollis" -#~ msgstr "홀리스" +#~ msgid "Fayette" +#~ msgstr "파이에트" -#~ msgid "Yarmouth" -#~ msgstr "얄머스" +#~ msgid "Farmington" +#~ msgstr "파밍튼" -#~ msgid "York" -#~ msgstr "요크" +#~ msgid "Falmouth" +#~ msgstr "팰머스" -#~ msgid "Worthington" -#~ msgstr "월싱턴" +#~ msgid "Fitchburg" +#~ msgstr "피치버그" -#~ msgid "Wrentham" -#~ msgstr "렌헴" +#~ msgid "Fort Fairfield" +#~ msgstr "포트 페어필드" -#~ msgid "Woodstock" -#~ msgstr "우드스탁" +#~ msgid "Fort Kent" +#~ msgstr "포트 켄트" -#~ msgid "Woolwich" -#~ msgstr "월리치" +#~ msgid "Fomer towns:" +#~ msgstr "포머 타운즈:" -#~ msgid "Woodville" -#~ msgstr "우드빌" +#~ msgid "Forest City" +#~ msgstr "포레스트 시티" -#~ msgid "Worcester" -#~ msgstr "월스터" +#~ msgid "Fletcher" +#~ msgstr "플레쳐" -#~ msgid "Woonsocket" -#~ msgstr "운소켓" +#~ msgid "Florida" +#~ msgstr "플로리다" -#~ msgid "Holland" -#~ msgstr "홀랜드" +#~ msgid "Fitzwilliam" +#~ msgstr "피츠윌리엄" -#~ msgid "Kennebunkport" -#~ msgstr "케네벙크포트" +#~ msgid "Foxborough" +#~ msgstr "폭스버러" -#~ msgid "Holderness" -#~ msgstr "홀더니스" +#~ msgid "Ferrisburg" +#~ msgstr "페리스버그" -#~ msgid "Woburn" -#~ msgstr "우번" +#~ msgid "Framingham" +#~ msgstr "프레이밍햄" -#~ msgid "Wolcott" -#~ msgstr "월콧" +#~ msgid " where? (Direction button)" +#~ msgstr " : 방향키로 방향 선택" -#~ msgid "Winterville Plantation" -#~ msgstr "윈터빌 플랜테이션" +#~ msgid "firearms" +#~ msgstr "총기" -#~ msgid "Winthrop" -#~ msgstr "윈스롭" +#~ msgid "Georgia" +#~ msgstr "조지아" -#~ msgid "Wiscasset" -#~ msgstr "위스카셋" +#~ msgid "Glenburn" +#~ msgstr "글렌번" -#~ msgid "Woodbridge" -#~ msgstr "우드브릿지" +#~ msgid "Glastonbury" +#~ msgstr "글래스턴베리" -#~ msgid "Wolfeboro" -#~ msgstr "월프보로" +#~ msgid "Glastenbury" +#~ msgstr "글래스턴베리" -#~ msgid "Woodford" -#~ msgstr "우드포드" +#~ msgid "Gilsum" +#~ msgstr "길섬" -#~ msgid "Woodbury" -#~ msgstr "우드버리" +#~ msgid "Gilmanton" +#~ msgstr "길맨턴" -#~ msgid "Woodland" -#~ msgstr "우들랜드" +#~ msgid "Gill" +#~ msgstr "길" -#~ msgid "Winn" -#~ msgstr "윈" +#~ msgid "Gilford" +#~ msgstr "길포드" -#~ msgid "Winooski" -#~ msgstr "위누스키" +#~ msgid "Glenwood Plantation" +#~ msgstr "글렌우드 대농장" -#~ msgid "Winter Harbor" -#~ msgstr "윈터 하버" +#~ msgid "Glocester" +#~ msgstr "글로스터" -#~ msgid "Winterport" -#~ msgstr "윈터포트" +#~ msgid "Goffstown" +#~ msgstr "고프스타운" -#~ msgid "Winhall" -#~ msgstr "윈홀" +#~ msgid "Gorham" +#~ msgstr "고어햄" -#~ msgid "Winslow" -#~ msgstr "윈슬로우" +#~ msgid "Gloucester" +#~ msgstr "글러스터" -#~ msgid "Windsor Locks" -#~ msgstr "윈저 락스" +#~ msgid "Glover" +#~ msgstr "글로버" -#~ msgid "Windsor" -#~ msgstr "윈저" +#~ msgid "Gouldsboro" +#~ msgstr "굴즈버로" -#~ msgid "Windham" -#~ msgstr "윈뎀" +#~ msgid "Grafton" +#~ msgstr "그래프턴" -#~ msgid "Wilton" -#~ msgstr "윌턴" +#~ msgid "Goshen" +#~ msgstr "고센" -#~ msgid "Wilmot" -#~ msgstr "윌멋" +#~ msgid "Gosnold" +#~ msgstr "고스널드" -#~ msgid "Wilmington" -#~ msgstr "윌밍턴" +#~ msgid "Greene" +#~ msgstr "그린" -#~ msgid "Williston" -#~ msgstr "윌리스턴" +#~ msgid "Great Pond" +#~ msgstr "그레이트 폰드" -#~ msgid "Winchendon" -#~ msgstr "윈첸던" +#~ msgid "Greenbush" +#~ msgstr "그린부쉬" -#~ msgid "Willington" -#~ msgstr "윌링턴" +#~ msgid "Greenfield" +#~ msgstr "그린필드" -#~ msgid "Willimantic" -#~ msgstr "윌리만틱" +#~ msgid "Grantham" +#~ msgstr "그랜트햄" -#~ msgid "Williamstown" -#~ msgstr "윌리암스타운" +#~ msgid "Grand Lake Stream" +#~ msgstr "그랜드 레이크 스트림" -#~ msgid "Williamsburg" -#~ msgstr "윌리암스버그" +#~ msgid "Great Barrington" +#~ msgstr "그레이트 배링턴" -#~ msgid "Wilbraham" -#~ msgstr "윌브라함" +#~ msgid "Granville" +#~ msgstr "그랜빌" -#~ msgid "Whately" -#~ msgstr "웨이틀리" +#~ msgid "Granby" +#~ msgstr "그랜비" -#~ msgid "Wheelock" -#~ msgstr "윌락" +#~ msgid "Grand Isle" +#~ msgstr "그랜드 아일" -#~ msgid "Weybridge" -#~ msgstr "웨이브릿지" +#~ msgid "Griswold" +#~ msgstr "그리스올드" -#~ msgid "Weymouth" -#~ msgstr "웨이머스" +#~ msgid "Greenwood" +#~ msgstr "그린우드" -#~ msgid "Whitneyville" -#~ msgstr "위트니빌" +#~ msgid "Greenwich" +#~ msgstr "그린위치" -#~ msgid "Whitingham" -#~ msgstr "와이팅헴" +#~ msgid "Greenville" +#~ msgstr "그린빌" -#~ msgid "Whiting" -#~ msgstr "와이팅" +#~ msgid "Guilford" +#~ msgstr "길포드" -#~ msgid "Templeton" -#~ msgstr "템플턴" +#~ msgid "Guildhall" +#~ msgstr "길드홀" -#~ msgid "Suffield" -#~ msgstr "서필드" +#~ msgid "Groveland" +#~ msgstr "그로브랜드" -#~ msgid "Sugar Hill" -#~ msgstr "슈거 힐" +#~ msgid "Groton" +#~ msgstr "그로턴" -#~ msgid "Stockholm" -#~ msgstr "스톡홀름" +#~ msgid "Greensboro" +#~ msgstr "그린즈버러" -#~ msgid "Springfield" -#~ msgstr "스프링필드" +#~ msgid "Greenland" +#~ msgstr "그린랜드" -#~ msgid "Spencer" -#~ msgstr "스펜서" +#~ msgid "Hampstead" +#~ msgstr "햄스테드" -#~ msgid "Stark" -#~ msgstr "스타크" +#~ msgid "Hadley" +#~ msgstr "해들리" -#~ msgid "Stamford" -#~ msgstr "스탬포드" +#~ msgid "Haddam" +#~ msgstr "해덤" -#~ msgid "Sterling" -#~ msgstr "스털링" +#~ msgid "Hampden" +#~ msgstr "햄프덴" -#~ msgid "Westhampton" -#~ msgstr "웨스트햄프턴" +#~ msgid "Halifax" +#~ msgstr "할리팩스" -#~ msgid "Westmanland" -#~ msgstr "웨스트맨랜드" +#~ msgid "Hallowell" +#~ msgstr "할로웰" -#~ msgid "Wethersfield" -#~ msgstr "웨더즈필드" +#~ msgid "Hamden" +#~ msgstr "햄덴" -#~ msgid "Weston" -#~ msgstr "웨스턴" +#~ msgid "Hamilton" +#~ msgstr "해밀턴" -#~ msgid "West Forks" -#~ msgstr "웨스트 포크스" +#~ msgid "Hamlin" +#~ msgstr "햄린" -#~ msgid "West Fairlee" -#~ msgstr "웨스트 페얼리" +#~ msgid "Hammond" +#~ msgstr "해몬드" -#~ msgid "Wesley" -#~ msgstr "웨슬리" +#~ msgid "Harpswell" +#~ msgstr "하프스웰" -#~ msgid "Wentworth" -#~ msgstr "웬트워스" +#~ msgid "Harmony" +#~ msgstr "하모니" -#~ msgid "Wenham" -#~ msgstr "웬헴" +#~ msgid "Harrison" +#~ msgstr "해리슨" -#~ msgid "Wendell" -#~ msgstr "웬델" +#~ msgid "Hanover" +#~ msgstr "하노버" -#~ msgid "West Brookfield" -#~ msgstr "웨스트 브룩필드" +#~ msgid "Hancock" +#~ msgstr "핸콕" -#~ msgid "West Bridgewater" -#~ msgstr "웨스트 브릿지워터" +#~ msgid "Hardwick" +#~ msgstr "하드윅" -#~ msgid "West Boylston" -#~ msgstr "웨스트 보일스턴" +#~ msgid "Harrington" +#~ msgstr "해링턴" -#~ msgid "West Bath" -#~ msgstr "웨스트 배스" +#~ msgid "Hampton" +#~ msgstr "햄프턴" -#~ msgid "Vinalhaven" -#~ msgstr "비날헤이븐" +#~ msgid "Hampton Falls" +#~ msgstr "햄프턴 폴스" -#~ msgid "Voluntown" -#~ msgstr "볼룬타운" +#~ msgid "Hanson" +#~ msgstr "핸슨" -#~ msgid "Waitsfield" -#~ msgstr "웨아츠필드" +#~ msgid "Hart's Location" +#~ msgstr "하츠 로케이션" -#~ msgid "Waite" -#~ msgstr "웨이트" +#~ msgid "Harrisville" +#~ msgstr "해리스빌" -#~ msgid "Stow" -#~ msgstr "스토우" +#~ msgid "Harvard" +#~ msgstr "하버드" -#~ msgid "Stowe" -#~ msgstr "스토위" +#~ msgid "Harwich" +#~ msgstr "하위치" -#~ msgid "Starks" -#~ msgstr "스타크" +#~ msgid "Hartford" +#~ msgstr "하트포드" -#~ msgid "Tuftonboro" -#~ msgstr "터프튼보로" +#~ msgid "Hartland" +#~ msgstr "하트랜드" -#~ msgid "Tyringham" -#~ msgstr "타이링헴" +#~ msgid "Haverhill" +#~ msgstr "해이버힐" -#~ msgid "Underhill" -#~ msgstr "언더힐" +#~ msgid "Hawley" +#~ msgstr "홀리" -#~ msgid "Tunbridge" -#~ msgstr "턴브릿지" +#~ msgid "Harwinton" +#~ msgstr "하윈턴" -#~ msgid "Tyngsborough" -#~ msgstr "팅스버러" +#~ msgid "Hatfield" +#~ msgstr "해트필드" -#~ msgid "Union" -#~ msgstr "유니온" +#~ msgid "Hinesburg" +#~ msgstr "하인즈버그" -#~ msgid "Unity" -#~ msgstr "유니티" +#~ msgid "Hillsborough" +#~ msgstr "힐스버러" -#~ msgid "Van Buren" -#~ msgstr "밴 뷰런" +#~ msgid "Highland Plantation" +#~ msgstr "하이랜드 대농장" -#~ msgid "St. Francis" -#~ msgstr "세인트프란시스" +#~ msgid "Hersey" +#~ msgstr "허시" -#~ msgid "St. Agatha" -#~ msgstr "세인트아가사" +#~ msgid "Hermon" +#~ msgstr "허먼" -#~ msgid "Southbury" -#~ msgstr "사우스베리" +#~ msgid "Henniker" +#~ msgstr "헨니커" -#~ msgid "St. George" -#~ msgstr "세인트조지" +#~ msgid "Hebron" +#~ msgstr "헤브론" -#~ msgid "St. Albans" -#~ msgstr "세인트앨번스" +#~ msgid "Highgate" +#~ msgstr "하이게이트" -#~ msgid "Southborough" -#~ msgstr "사우스버러" +#~ msgid "Heath" +#~ msgstr "히스" -#~ msgid "Sheldon" -#~ msgstr "셸던" +#~ msgid "Georgetown" +#~ msgstr "조지타운" -#~ msgid "Sorrento" -#~ msgstr "소렌토" +#~ msgid "Haynesville" +#~ msgstr "헤인즈빌" -#~ msgid "Holbrook" -#~ msgstr "홀브룩" +#~ msgid "Triggered a boobytrap." +#~ msgstr "부비트랩을 작동시킴." -#~ msgid "Hodgdon" -#~ msgstr "허지든" +#~ msgid "Stepped on a lane mine." +#~ msgstr "지뢰에 발을 내딛음." -#~ msgid "Hiram" -#~ msgstr "하이럼" +#~ msgid "Stepped on bubblewrap." +#~ msgstr "뾱뾱이에 발을 내딛음." -#~ msgid "Hinsdale" -#~ msgstr "힌스데일" +#~ msgid "Lovell" +#~ msgstr "러벨" -#~ msgid "Hingham" -#~ msgstr "힝햄" +#~ msgid "Lowell" +#~ msgstr "로웰" -#~ msgid "Smithfield" -#~ msgstr "스미스필드" +#~ msgid "Livermore" +#~ msgstr "리버모어" -#~ msgid "Sidney" -#~ msgstr "시드니" +#~ msgid "Livermore Falls" +#~ msgstr "리버모어 폴즈" -#~ msgid "Shirley" -#~ msgstr "셜리" +#~ msgid "Londonderry" +#~ msgstr "런던데리" -#~ msgid "Sheffield" -#~ msgstr "셰필드" +#~ msgid "Long Island" +#~ msgstr "롱 아일랜드" -#~ msgid "Sharon" -#~ msgstr "샤론" +#~ msgid "Longmeadow" +#~ msgstr "롱메도우" -#~ msgid "Somerset" -#~ msgstr "서머셋" +#~ msgid "Loudon" +#~ msgstr "라우던" -#~ msgid "" -#~ "Head encumberance has no effect; it simply limits how much you can put on." -#~ msgstr "" -#~ "머리 방해도는 얼마나 입을수 있는가 만에 영향을 주며 다른 효과는 없습니다;" +#~ msgid "Lubec" +#~ msgstr "루벡" -#~ msgid "Gilead" -#~ msgstr "길레아" +#~ msgid "Holden" +#~ msgstr "홀덴" -#~ msgid "Frenchville" -#~ msgstr "프렌치빌" +#~ msgid "Madawaska" +#~ msgstr "마다와스카" -#~ msgid "Garland" -#~ msgstr "갈랜드" +#~ msgid "Masardis" +#~ msgstr "마사르디스" -#~ msgid "Garfield Plantation" -#~ msgstr "가필드 플랜테이션" +#~ msgid "Mashpee" +#~ msgstr "마시피" -#~ msgid "Gardner" -#~ msgstr "가드너" +#~ msgid "Marlboro" +#~ msgstr "말보로" -#~ msgid "Frenchboro" -#~ msgstr "프렌치버로" +#~ msgid "Marion" +#~ msgstr "매리언" -#~ msgid "Fremont" -#~ msgstr "프리몬트" +#~ msgid "Marlow" +#~ msgstr "말로우" -#~ msgid "Freetown" -#~ msgstr "프리타운" +#~ msgid "Marlborough" +#~ msgstr "말보로우" -#~ msgid "Freeport" -#~ msgstr "프리포트" +#~ msgid "Mariaville" +#~ msgstr "마리아빌" -#~ msgid "Tisbury" -#~ msgstr "티즈버리" +#~ msgid "Mars Hill" +#~ msgstr "마스 힐" -#~ msgid "Tiverton" -#~ msgstr "티버튼" +#~ msgid "Marshfield" +#~ msgstr "마쉬필드" -#~ msgid "Gardiner" -#~ msgstr "가디너" +#~ msgid "Leyden" +#~ msgstr "레이든" -#~ msgid "Fryeburg" -#~ msgstr "프라이버그" +#~ msgid "Ledyard" +#~ msgstr "레디어드" -#~ msgid "Frye Island" -#~ msgstr "프라이 아일랜드" +#~ msgid "Leeds" +#~ msgstr "리즈" -#~ msgid "Friendship" -#~ msgstr "우정" +#~ msgid "Leicester" +#~ msgstr "레스터" -#~ msgid "Tewksbury" -#~ msgstr "턱스베리" +#~ msgid "Lemington" +#~ msgstr "레밍턴" -#~ msgid "Thetford" -#~ msgstr "텟포드" +#~ msgid "Lempster" +#~ msgstr "렘스터" -#~ msgid "Temple" -#~ msgstr "템플" +#~ msgid "Lenox" +#~ msgstr "레녹스" -#~ msgid "Taunton" -#~ msgstr "타우튼" +#~ msgid "" +#~ "Your %s already has 4 mods installed! To remove the mods,press 'U' while " +#~ "wielding the unloaded gun." +#~ msgstr "" +#~ "%s 에는 4번의 개조가 설치되어 있습니다! 개조를 제거 하려면, 빈 무기를 장비" +#~ "하고 'U' 키를 누르면 됩니다." -#~ msgid "Tamworth" -#~ msgstr "탐워스" +#~ msgid "Matinicus Isle" +#~ msgstr "마티니커스 섬" -#~ msgid "Swanville" -#~ msgstr "스완빌" +#~ msgid "Leominster" +#~ msgstr "레민스터" -#~ msgid "Swanton" -#~ msgstr "스완튼" +#~ msgid "Levant" +#~ msgstr "레반트" -#~ msgid "Swansea" -#~ msgstr "스완지" +#~ msgid "Leverett" +#~ msgstr "레버렛" -#~ msgid "Talmadge" -#~ msgstr "탈마지" +#~ msgid "Lewiston" +#~ msgstr "루이스턴" -#~ msgid "Swanzey" -#~ msgstr "스완지" +#~ msgid "Lexington" +#~ msgstr "렉싱턴" -#~ msgid "Sweden" -#~ msgstr "스웨든" +#~ msgid "Meredith" +#~ msgstr "메레디스" -#~ msgid "Killingly" -#~ msgstr "킬링리" +#~ msgid "Mendon" +#~ msgstr "멘든" -#~ msgid "Sudbury" -#~ msgstr "서버리" +#~ msgid "Medway" +#~ msgstr "메드웨이" -#~ msgid "Sturbridge" -#~ msgstr "스터브리지" +#~ msgid "Medford" +#~ msgstr "메드포드" -#~ msgid "Stoddard" -#~ msgstr "스토다드" +#~ msgid "Medfield" +#~ msgstr "메드필드" -#~ msgid "Stoneham" -#~ msgstr "스톤햄" +#~ msgid "Liberty" +#~ msgstr "자유" -#~ msgid "Stonington" -#~ msgstr "스토닝턴" +#~ msgid "Limerick" +#~ msgstr "리머릭" -#~ msgid "Stoughton" -#~ msgstr "스토턴" +#~ msgid "Middleborough" +#~ msgstr "미들보로" -#~ msgid "Strafford" -#~ msgstr "스트라포드" +#~ msgid "Middlefield" +#~ msgstr "미들필드" -#~ msgid "Stratham" -#~ msgstr "스트레텀" +#~ msgid "Middlebury" +#~ msgstr "미들버리" -#~ msgid "Stratford" -#~ msgstr "스트랫포드" +#~ msgid "Middlesex" +#~ msgstr "미들섹스" -#~ msgid "Stratton" -#~ msgstr "스트래튼" +#~ msgid "Methuen" +#~ msgstr "메투엔" -#~ msgid "Stockbridge" -#~ msgstr "스톡브리지" +#~ msgid "Merrimack" +#~ msgstr "메리맥" -#~ msgid "Steuben" -#~ msgstr "스테우벤" +#~ msgid "Mexico" +#~ msgstr "멕시코" -#~ msgid "Stewartstown" -#~ msgstr "스튜워츠타운" +#~ msgid "Merrimac" +#~ msgstr "메리맥" -#~ msgid "Stockton Springs" -#~ msgstr "스톡턴 스프링스" +#~ msgid "Merrill" +#~ msgstr "메릴" -#~ msgid "Starksboro" -#~ msgstr "스탁스보로" +#~ msgid "Meriden" +#~ msgstr "메리든" -#~ msgid "Stacyville" -#~ msgstr "스테이시빌" +#~ msgid "Limestone" +#~ msgstr "석회암" -#~ msgid "Stafford" -#~ msgstr "스타포드" +#~ msgid "Limington" +#~ msgstr "리밍턴" -#~ msgid "St. Johnsbury" -#~ msgstr "세인트 존스버리" +#~ msgid "Lincoln" +#~ msgstr "링컨" -#~ msgid "Stannard" -#~ msgstr "스태너드" +#~ msgid "Middletown Springs" +#~ msgstr "미들타운 스프링스" -#~ msgid "Southwest Harbor" -#~ msgstr "사우스웨스트 하버" +#~ msgid "Middletown" +#~ msgstr "미들타운" -#~ msgid "Southwick" -#~ msgstr "사우스윅" +#~ msgid "Middleton" +#~ msgstr "미들턴" -#~ msgid "Southport" -#~ msgstr "사우스포트" +#~ msgid "Milford" +#~ msgstr "밀포드" -#~ msgid "Sprague" -#~ msgstr "스프라그" +#~ msgid "Milan" +#~ msgstr "밀란" -#~ msgid "New Salem" -#~ msgstr "뉴 세일럼" +#~ msgid "Milbridge" +#~ msgstr "밀브리지" -#~ msgid "New Braintree" -#~ msgstr "뉴 브레인트리" +#~ msgid "Millville" +#~ msgstr "밀빌" -#~ msgid "New Canada" -#~ msgstr "뉴 캐나다" +#~ msgid "Millinocket" +#~ msgstr "밀리노켓" -#~ msgid "Montgomery" -#~ msgstr "몽고메리" +#~ msgid "Millis" +#~ msgstr "밀즈" -#~ msgid "Marblehead" -#~ msgstr "마블헤드" +#~ msgid "Lincoln Plantation" +#~ msgstr "링컨 농장" -#~ msgid "Mansfield" -#~ msgstr "맨스필드" +#~ msgid "Lincolnville" +#~ msgstr "링컨빌" -#~ msgid "Mapleton" -#~ msgstr "메이플턴" +#~ msgid "Linneus" +#~ msgstr "린네" -#~ msgid "Malden" -#~ msgstr "몰든" +#~ msgid "Lisbon" +#~ msgstr "리스본" -#~ msgid "Lynn" -#~ msgstr "린" +#~ msgid "Milton" +#~ msgstr "밀튼" -#~ msgid "Lynnfield" -#~ msgstr "린필드" +#~ msgid "Milo" +#~ msgstr "밀로" -#~ msgid "Machias" -#~ msgstr "마키아스" +#~ msgid "Litchfield" +#~ msgstr "리치필드" -#~ msgid "Madrid" -#~ msgstr "마드리드" +#~ msgid "Little Compton" +#~ msgstr "리틀 콤프턴" -#~ msgid "Maidstone" -#~ msgstr "메이드스톤" +#~ msgid "Littleton" +#~ msgstr "리틀턴" -#~ msgid "Macwahoc Plantation" -#~ msgstr "맥와호크 농장" +#~ msgid "Mechanic Falls" +#~ msgstr "메카닉 폴즈" -#~ msgid "Machiasport" -#~ msgstr "마키아스포트" +#~ msgid "Meddybemps" +#~ msgstr "메디벺스" -#~ msgid "Madbury" -#~ msgstr "매드버리" +#~ msgid "Mattapoisett" +#~ msgstr "매타포이세트" -#~ msgid "Magalloway Plantation" -#~ msgstr "마갈로웨이 농장" +#~ msgid "Mattawamkeag" +#~ msgstr "매타웜키" -#~ msgid "Lyme" -#~ msgstr "라임" +#~ msgid "Maxfield" +#~ msgstr "맥스필드" -#~ msgid "Lyndeborough" -#~ msgstr "린데버러" +#~ msgid "Maynard" +#~ msgstr "메이너드" -#~ msgid "Lyndon" -#~ msgstr "린던" +#~ msgid "Mattamiscontis" +#~ msgstr "매타미스콘티스" -#~ msgid "Lunenburg" -#~ msgstr "루넨버그" +#~ msgid "Mercer" +#~ msgstr "머서" -#~ msgid "Lyman" -#~ msgstr "라이먼" +#~ msgid "Melrose" +#~ msgstr "멜로즈" -#~ msgid "Ludlow" -#~ msgstr "러들로" +#~ msgid "Monmouth" +#~ msgstr "몬머스" -#~ msgid "Southington" -#~ msgstr "사우스 잉턴" +#~ msgid "Monkton" +#~ msgstr "몽튼" -#~ msgid "Southbridge" -#~ msgstr "사우스 브리지" +#~ msgid "Monhegan" +#~ msgstr "몬헤이건" -#~ msgid "South Windsor" -#~ msgstr "사우스 윈저" +#~ msgid "Minot" +#~ msgstr "미노" -#~ msgid "South Thomaston" -#~ msgstr "사우스 토마스톤" +#~ msgid "Monroe" +#~ msgstr "몬로" -#~ msgid "Southampton" -#~ msgstr "사우스 앰튼" +#~ msgid "Monterey" +#~ msgstr "몬트레이" -#~ msgid "South Hero" -#~ msgstr "사우스 히어로" +#~ msgid "Montague" +#~ msgstr "몬태규" -#~ msgid "South Portland" -#~ msgstr "사우스 포틀랜드" +#~ msgid "Mont Vernon" +#~ msgstr "몬트 버넌" -#~ msgid "South Kingstown" -#~ msgstr "사우스 킹스타운" +#~ msgid "Monson" +#~ msgstr "몬슨" -#~ msgid "Shrewsbury" -#~ msgstr "쇼워스베리" +#~ msgid "Monticello" +#~ msgstr "몬티첼로" -#~ msgid "South Hampton" -#~ msgstr "사우스 햄프턴" +#~ msgid "Montpelier" +#~ msgstr "몬필리어" -#~ msgid "Somers" -#~ msgstr "서머스" +#~ msgid "Montville" +#~ msgstr "몬트빌" -#~ msgid "Somersworth" -#~ msgstr "서머스워쓰" +#~ msgid "Moose River" +#~ msgstr "무스 리버" -#~ msgid "Somerville" -#~ msgstr "서머빌" +#~ msgid "Mount Holly" +#~ msgstr "마운트 홀리" -#~ msgid "South Bristol" -#~ msgstr "사우스 브리스톨" +#~ msgid "Mount Desert" +#~ msgstr "마운트 데저트" -#~ msgid "South Berwick" -#~ msgstr "사우스 베릭" +#~ msgid "Mount Tabor" +#~ msgstr "마운트 테이버" -#~ msgid "South Burlington" -#~ msgstr "사우스 벌링턴" +#~ msgid "Moretown" +#~ msgstr "모어타운" -#~ msgid "South Hadley" -#~ msgstr "사우스 하들리" +#~ msgid "Moro Plantation" +#~ msgstr "모로 플랜테이션" -#~ msgid "Seboeis Plantation" -#~ msgstr "세보아이스 플렌테이션" +#~ msgid "Morrill" +#~ msgstr "모릴" -#~ msgid "Smyrna" -#~ msgstr "스미르나" +#~ msgid "Morristown" +#~ msgstr "모리스타운" -#~ msgid "Simsbury" -#~ msgstr "심즈버리" +#~ msgid "Moscow" +#~ msgstr "모스크바" -#~ msgid "Skowhegan" -#~ msgstr "스코헤간" +#~ msgid "Moultonborough" +#~ msgstr "몰튼버러" -#~ msgid "Shutesbury" -#~ msgstr "슈츠버리" +#~ msgid "Mount Chase" +#~ msgstr "마운트 체이스" -#~ msgid "Shoreham" -#~ msgstr "쇼어햄" +#~ msgid "Narragansett" +#~ msgstr "내러갠셋" -#~ msgid "Solon" -#~ msgstr "솔론" +#~ msgid "Mount Vernon" +#~ msgstr "마운트 버넌" -#~ msgid "Shapleigh" -#~ msgstr "쉐플레이" +#~ msgid "Nahant" +#~ msgstr "네이헌트" -#~ msgid "Sherborn" -#~ msgstr "셔본" +#~ msgid "Naples" +#~ msgstr "나폴리" -#~ msgid "Shelton" -#~ msgstr "쉘톤" +#~ msgid "Nantucket" +#~ msgstr "난터켓" -#~ msgid "Shelburne" -#~ msgstr "쉘번" +#~ msgid "Mount Washington" +#~ msgstr "마운트 워싱턴" -#~ msgid "Sherman" -#~ msgstr "셔먼" +#~ msgid "Nashville Plantation" +#~ msgstr "내쉬빌 플랜테이션" -#~ msgid "Seekonk" -#~ msgstr "시콩크" +#~ msgid "Millbury" +#~ msgstr "밀베리" -#~ msgid "Seymour" -#~ msgstr "시모어" +#~ msgid "Nashua" +#~ msgstr "내슈어" -#~ msgid "Sedgwick" -#~ msgstr "세지윅" +#~ msgid "New Boston" +#~ msgstr "뉴 보스턴" -#~ msgid "Searsmont" -#~ msgstr "시어스몬트" +#~ msgid "New Ashford" +#~ msgstr "뉴 애쉬포드" -#~ msgid "Searsport" -#~ msgstr "시어스포트" +#~ msgid "New Bedford" +#~ msgstr "뉴 베드포드" -#~ msgid "Sebago" -#~ msgstr "세바고" +#~ msgid "Naugatuck" +#~ msgstr "노거턱" -#~ msgid "Sebec" -#~ msgstr "세벡" +#~ msgid "Needham" +#~ msgstr "니덤" -#~ msgid "Searsburg" -#~ msgstr "시어스버그" +#~ msgid "New Limerick" +#~ msgstr "뉴 리머릭" -#~ msgid "Newburyport" -#~ msgstr "뉴 버리포트" +#~ msgid "New Ipswich" +#~ msgstr "뉴 입스위치" -#~ msgid "Sunapee" -#~ msgstr "서나피" +#~ msgid "New Haven" +#~ msgstr "뉴 헤이븐" -#~ msgid "Surrey" -#~ msgstr "서레이" +#~ msgid "New Hartford" +#~ msgstr "뉴 할트포드" -#~ msgid "Sullivan" -#~ msgstr "설리번" +#~ msgid "New Hampton" +#~ msgstr "뉴 햄튼" -#~ msgid "Sutton" -#~ msgstr "서턴" +#~ msgid "New Gloucester" +#~ msgstr "뉴 글로스터" -#~ msgid "Swampscott" -#~ msgstr "스웜프스캇" +#~ msgid "New Fairfield" +#~ msgstr "뉴 페어필드" -#~ msgid "Surry" -#~ msgstr "써리" +#~ msgid "New London" +#~ msgstr "뉴 런던" -#~ msgid "Swans Island" -#~ msgstr "스완스 아일랜드" +#~ msgid "New Marlborough" +#~ msgstr "뉴 말보로" -#~ msgid "Sunderland" -#~ msgstr "선덜랜드" +#~ msgid "New Milford" +#~ msgstr "뉴 밀포드" -#~ msgid "New Shoreham" -#~ msgstr "뉴 쇼어햄" +#~ msgid "Newfield" +#~ msgstr "뉴필드" -#~ msgid "New Sharon" -#~ msgstr "뉴 샤론" +#~ msgid "Newfane" +#~ msgstr "뉴패인" -#~ msgid "Sumner" -#~ msgstr "섬너" +#~ msgid "Newington" +#~ msgstr "뉴잉턴" -#~ msgid "Stetson" -#~ msgstr "스테슨" +#~ msgid "Newfields" +#~ msgstr "뉴필즈" -#~ msgid "Standish" -#~ msgstr "스탠디쉬" +#~ msgid "Newcastle" +#~ msgstr "뉴캐슬" -#~ msgid "Strong" -#~ msgstr "스트롱" +#~ msgid "Newmarket" +#~ msgstr "뉴마켓" -#~ msgid "Shaftsbury" -#~ msgstr "샤프츠버리" +#~ msgid "Newport" +#~ msgstr "뉴포트" -#~ msgid "New Portland" -#~ msgstr "뉴 포틀랜드" +#~ msgid "Newtown" +#~ msgstr "뉴타운" -#~ msgid "New Britain" -#~ msgstr "뉴 브리튼" +#~ msgid "Newry" +#~ msgstr "너리" -#~ msgid "New Canaan" -#~ msgstr "뉴 가나안" +#~ msgid "Newton" +#~ msgstr "뉴튼" -#~ msgid "New Durham" -#~ msgstr "뉴 더럼" +#~ msgid "Norfolk" +#~ msgstr "놀포크" -#~ msgid "New Castle" -#~ msgstr "뉴 캐슬" +#~ msgid "Norridgewock" +#~ msgstr "노리지웍" -#~ msgid "New Sweden" -#~ msgstr "뉴 스웨덴" +#~ msgid "North Canaan" +#~ msgstr "노스 캐이넌" -#~ msgid "Newark" -#~ msgstr "뉴아크" +#~ msgid "Nobleboro" +#~ msgstr "노블보로" -#~ msgid "New Vineyard" -#~ msgstr "뉴 바인야드" +#~ msgid "North Adams" +#~ msgstr "노스 아담스" -#~ msgid "Newburgh" -#~ msgstr "뉴버지" +#~ msgid "North Andover" +#~ msgstr "노스 앤도버" -#~ msgid "Newbury" -#~ msgstr "뉴버리" +#~ msgid "North Attleborough" +#~ msgstr "노스 애틀보로" -#~ msgid "Freeman" -#~ msgstr "프리먼" +#~ msgid "North Berwick" +#~ msgstr "노스 베릭" -#~ msgid "Freedom" -#~ msgstr "프리덤" +#~ msgid "North Branford" +#~ msgstr "노스 브랜포드" -#~ msgid "Franklin" -#~ msgstr "프랭클린" +#~ msgid "North Brookfield" +#~ msgstr "노스 브룩필드" -#~ msgid "Frankfort" -#~ msgstr "프랭크포트" +#~ msgid "Northampton" +#~ msgstr "노샘프턴" -#~ msgid "Franconia" -#~ msgstr "프랑코니아" +#~ msgid "North Yarmouth" +#~ msgstr "노스 야마스" -#~ msgid "Francestown" -#~ msgstr "프랜시스타운" +#~ msgid "North Stonington" +#~ msgstr "노스 스토닝턴" -#~ msgid "Fayston" -#~ msgstr "페이스턴" +#~ msgid "North Hampton" +#~ msgstr "노스 햄프턴" -#~ msgid "Manchester-by-the-Sea" -#~ msgstr "멘체스터 바이 더 시" +#~ msgid "North Haven" +#~ msgstr "노스 헤이븐" -#~ msgid "Manchester" -#~ msgstr "멘체스터" +#~ msgid "North Hero" +#~ msgstr "노스 히어로" -#~ msgid "Natick" -#~ msgstr "나티크" +#~ msgid "North Kingstown" +#~ msgstr "노스 킹스타운" -#~ msgid "Cutler" -#~ msgstr "커틀러" +#~ msgid "North Providence" +#~ msgstr "노스 프로비던스" -#~ msgid "Scituate" -#~ msgstr "시추에이트" +#~ msgid "North Reading" +#~ msgstr "노스 리딩" -#~ msgid "Scotland" -#~ msgstr "스코틀랜드" +#~ msgid "North Smithfield" +#~ msgstr "노스 스미스필드" -#~ msgid "Seabrook" -#~ msgstr "시브룩" +#~ msgid "Northborough" +#~ msgstr "노스버러" -#~ msgid "Sanford" -#~ msgstr "샌퍼드" +#~ msgid "Northumberland" +#~ msgstr "노섬버랜드" -#~ msgid "Sandy River Plantation" -#~ msgstr "샌디 리버 플랜테이션" +#~ msgid "Northport" +#~ msgstr "노스포트" -#~ msgid "Saugus" -#~ msgstr "서거스" +#~ msgid "Northfield" +#~ msgstr "노스필드" -#~ msgid "Sangerville" -#~ msgstr "생거빌" +#~ msgid "Northbridge" +#~ msgstr "노스브릿지" -#~ msgid "Sandwich" -#~ msgstr "샌드위치" +#~ msgid "Northwood" +#~ msgstr "노스우드" -#~ msgid "Scarborough" -#~ msgstr "스카보로" +#~ msgid "Norton" +#~ msgstr "놀턴" -#~ msgid "Savoy" -#~ msgstr "사보이" +#~ msgid "Norwell" +#~ msgstr "노르웰" -#~ msgid "Salem" -#~ msgstr "세일럼" +#~ msgid "Norwalk" +#~ msgstr "노르워크" -#~ msgid "Ryegate" -#~ msgstr "라이게이트" +#~ msgid "Norway" +#~ msgstr "노르웨이" -#~ msgid "Saint John Plantation" -#~ msgstr "세인트 존 플랜테이션" +#~ msgid "It looks girly.\n" +#~ msgstr "여자옷 같다.\n" -#~ msgid "Sabattus" -#~ msgstr "사바터스" +#~ msgid "It looks manly.\n" +#~ msgstr "남자옷 같다.\n" -#~ msgid "Saco" -#~ msgstr "사코" +#~ msgid "Old Lyme" +#~ msgstr "올드 라임" -#~ msgid "Salisbury" -#~ msgstr "샐스버리" +#~ msgid "Ogunquit" +#~ msgstr "오건큇트" -#~ msgid "Sanbornton" -#~ msgstr "샌본턴" +#~ msgid "Old Orchard Beach" +#~ msgstr "올드 오챠드 비치" -#~ msgid "Sandisfield" -#~ msgstr "샌디스필드" +#~ msgid "Oakham" +#~ msgstr "오컴" -#~ msgid "Sandgate" -#~ msgstr "샌드게이트" +#~ msgid "Oakland" +#~ msgstr "오클랜드" -#~ msgid "Sandown" -#~ msgstr "샌다운" +#~ msgid "Norwich" +#~ msgstr "노르위치" -#~ msgid "Rutland" -#~ msgstr "러틀랜드" +#~ msgid "Oak Bluffs" +#~ msgstr "오크 블렆스" -#~ msgid "Rowe" -#~ msgstr "로우" +#~ msgid "Oakfield" +#~ msgstr "오크필드" -#~ msgid "Royalton" -#~ msgstr "로얄턴" +#~ msgid "Norwood" +#~ msgstr "노르우드" -#~ msgid "Royalston" -#~ msgstr "로얄스턴" +#~ msgid "Nottingham" +#~ msgstr "노팅험" -#~ msgid "Roxbury" -#~ msgstr "록스버리" +#~ msgid "Orleans" +#~ msgstr "오를리언스" -#~ msgid "Rowley" -#~ msgstr "롤리" +#~ msgid "Orland" +#~ msgstr "오를랜드" -#~ msgid "Rumney" -#~ msgstr "럼니" +#~ msgid "Orange" +#~ msgstr "오렌지" -#~ msgid "Rumford" -#~ msgstr "럼포드" +#~ msgid "Old Town" +#~ msgstr "올드 타운" -#~ msgid "Rye" -#~ msgstr "라이" +#~ msgid "Orford" +#~ msgstr "오퍼드" -#~ msgid "Rupert" -#~ msgstr "루퍼트" +#~ msgid "Old Saybrook" +#~ msgstr "올드 세이브룩" -#~ msgid "Ripton" -#~ msgstr "립톤" +#~ msgid "Orono" +#~ msgstr "오로노" -#~ msgid "Robbinston" -#~ msgstr "로빈스턴" +#~ msgid "Orneville" +#~ msgstr "오느빌" -#~ msgid "Rochester" -#~ msgstr "로체스터" +#~ msgid "Orient" +#~ msgstr "오리엔트" -#~ msgid "Rockingham" -#~ msgstr "록킹헴" +#~ msgid "Orrington" +#~ msgstr "오링턴" -#~ msgid "Rockland" -#~ msgstr "록클랜드" +#~ msgid "Palmer" +#~ msgstr "팔머" -#~ msgid "Rockport" -#~ msgstr "록포트" +#~ msgid "Palermo" +#~ msgstr "팔레르모" -#~ msgid "Rocky Hill" -#~ msgstr "록키 힐" +#~ msgid "Oxford" +#~ msgstr "옥스포드" -#~ msgid "Rollinsford" -#~ msgstr "롤린스포드" +#~ msgid "Owls Head" +#~ msgstr "아울스 헤드" -#~ msgid "Roque Bluffs" -#~ msgstr "로크 블럽스" +#~ msgid "Oxbow" +#~ msgstr "옥스보우" -#~ msgid "Rome" -#~ msgstr "로마" +#~ msgid "Osborn" +#~ msgstr "오스본" -#~ msgid "Ridgefield" -#~ msgstr "리치필드" +#~ msgid "Ossipee" +#~ msgstr "오시피" -#~ msgid "Rindge" -#~ msgstr "린지" +#~ msgid "Otis" +#~ msgstr "오티스" -#~ msgid "Ripley" -#~ msgstr "리플리" +#~ msgid "Otisfield" +#~ msgstr "오티스필드" -#~ msgid "Richmond" -#~ msgstr "리치몬드" +#~ msgid "Orwell" +#~ msgstr "오르웰" -#~ msgid "Richford" -#~ msgstr "리치포드" +#~ msgid "Patten" +#~ msgstr "패튼" -#~ msgid "Reading" -#~ msgstr "리딩" +#~ msgid "Passadumkeag" +#~ msgstr "파사덤키" -#~ msgid "Reed Plantation" -#~ msgstr "리드 플랜테이션" +#~ msgid "Parsonsfield" +#~ msgstr "파슨스필드" -#~ msgid "Readsboro" -#~ msgstr "리즈보로" +#~ msgid "Parkman" +#~ msgstr "파크맨" -#~ msgid "Revere" -#~ msgstr "리비어" +#~ msgid "Paris" +#~ msgstr "파리" -#~ msgid "Rehoboth" -#~ msgstr "리호보스" +#~ msgid "Panton" +#~ msgstr "판톤" -#~ msgid "Quincy" -#~ msgstr "퀸시" +#~ msgid "Palmyra" +#~ msgstr "팔마이라" -#~ msgid "Randolph" -#~ msgstr "랜돌프" +#~ msgid "Pawtucket" +#~ msgstr "퍼터킷" -#~ msgid "Putney" -#~ msgstr "풋니" +#~ msgid "Paxton" +#~ msgstr "팩스턴" -#~ msgid "Provincetown" -#~ msgstr "프로빈스타운" +#~ msgid "Pawlet" +#~ msgstr "포를릿" -#~ msgid "Rangeley" -#~ msgstr "레인질리" +#~ msgid "Peru" +#~ msgstr "페루" -#~ msgid "Rangeley Plantation" -#~ msgstr "레인질리 플랜테이션" - -#~ msgid "Putnam" -#~ msgstr "풋남" +#~ msgid "Perkins" +#~ msgstr "퍼킨스" -#~ msgid "Raynham" -#~ msgstr "레인헴" +#~ msgid "Peterborough" +#~ msgstr "피터보로" -#~ msgid "Raymond" -#~ msgstr "레이몬드" +#~ msgid "Pembroke" +#~ msgstr "팸브로크" -#~ msgid "Readfield" -#~ msgstr "리드필드" +#~ msgid "Penobscot" +#~ msgstr "페놉스콧" -#~ msgid "Proctor" -#~ msgstr "프록터" +#~ msgid "Peacham" +#~ msgstr "피챔" -#~ msgid "Prospect" -#~ msgstr "프로스펙트" +#~ msgid "Pelham" +#~ msgstr "펠햄" -#~ msgid "Providence" -#~ msgstr "프로비던스" +#~ msgid "Peabody" +#~ msgstr "피바디" -#~ msgid "Pownal" -#~ msgstr "퍼널" +#~ msgid "Pepperell" +#~ msgstr "페퍼렐" -#~ msgid "Prentiss" -#~ msgstr "프렌티스" +#~ msgid "Perham" +#~ msgstr "퍼햄" -#~ msgid "Prescott" -#~ msgstr "프레스콧" +#~ msgid "Plainville" +#~ msgstr "플레인빌" -#~ msgid "Presque Isle" -#~ msgstr "프레스크 아일" +#~ msgid "Pittsfield" +#~ msgstr "핏츠필드" -#~ msgid "Poultney" -#~ msgstr "폴트니" +#~ msgid "Pittsford" +#~ msgstr "핏츠포드" -#~ msgid "Preston" -#~ msgstr "프레스턴" +#~ msgid "Petersham" +#~ msgstr "피터샘" -#~ msgid "Princeton" -#~ msgstr "프린스턴" +#~ msgid "Phippsburg" +#~ msgstr "핍스버그" -#~ msgid "Portland" -#~ msgstr "포틀랜드" +#~ msgid "Pittsburg" +#~ msgstr "핏츠버그" -#~ msgid "Poland" -#~ msgstr "폴란드" +#~ msgid "Piermont" +#~ msgstr "피에르몬트" -#~ msgid "Plympton" -#~ msgstr "플림턴" +#~ msgid "Pittston" +#~ msgstr "핏츠턴" -#~ msgid "Plymouth" -#~ msgstr "플리머스" +#~ msgid "Plainfield" +#~ msgstr "플레인필드" -#~ msgid "Pleasant Ridge Plantation" -#~ msgstr "플리전트 릿지 플렌테이션" +#~ msgid "Phillipston" +#~ msgstr "필립스턴" -#~ msgid "Plaistow" -#~ msgstr "플레이스토우" +#~ msgid "Portsmouth" +#~ msgstr "포츠머스" -#~ msgid "Portage Lake" -#~ msgstr "포테지 레이크" +#~ msgid "Porter" +#~ msgstr "포터" #~ msgid "Pomfret" #~ msgstr "폼프렛" -#~ msgid "Porter" -#~ msgstr "포터" - -#~ msgid "Portsmouth" -#~ msgstr "포츠머스" +#~ msgid "Portage Lake" +#~ msgstr "포테지 레이크" -#~ msgid "Phillipston" -#~ msgstr "필립스턴" +#~ msgid "Plaistow" +#~ msgstr "플레이스토우" -#~ msgid "Plainfield" -#~ msgstr "플레인필드" +#~ msgid "Pleasant Ridge Plantation" +#~ msgstr "플리전트 릿지 플렌테이션" -#~ msgid "Pittston" -#~ msgstr "핏츠턴" +#~ msgid "Plymouth" +#~ msgstr "플리머스" -#~ msgid "Piermont" -#~ msgstr "피에르몬트" +#~ msgid "Plympton" +#~ msgstr "플림턴" -#~ msgid "Pittsburg" -#~ msgstr "핏츠버그" +#~ msgid "Poland" +#~ msgstr "폴란드" -#~ msgid "Phippsburg" -#~ msgstr "핍스버그" +#~ msgid "Portland" +#~ msgstr "포틀랜드" -#~ msgid "Petersham" -#~ msgstr "피터샘" +#~ msgid "Princeton" +#~ msgstr "프린스턴" -#~ msgid "Pittsford" -#~ msgstr "핏츠포드" +#~ msgid "Preston" +#~ msgstr "프레스턴" -#~ msgid "Pittsfield" -#~ msgstr "핏츠필드" +#~ msgid "Poultney" +#~ msgstr "폴트니" -#~ msgid "Plainville" -#~ msgstr "플레인빌" +#~ msgid "Presque Isle" +#~ msgstr "프레스크 아일" -#~ msgid "Perham" -#~ msgstr "퍼햄" +#~ msgid "Prescott" +#~ msgstr "프레스콧" -#~ msgid "Pepperell" -#~ msgstr "페퍼렐" +#~ msgid "Prentiss" +#~ msgstr "프렌티스" -#~ msgid "Peabody" -#~ msgstr "피바디" +#~ msgid "Pownal" +#~ msgstr "퍼널" -#~ msgid "Pelham" -#~ msgstr "펠햄" +#~ msgid "Providence" +#~ msgstr "프로비던스" -#~ msgid "Peacham" -#~ msgstr "피챔" +#~ msgid "Prospect" +#~ msgstr "프로스펙트" -#~ msgid "Penobscot" -#~ msgstr "페놉스콧" +#~ msgid "Proctor" +#~ msgstr "프록터" -#~ msgid "Pembroke" -#~ msgstr "팸브로크" +#~ msgid "Readfield" +#~ msgstr "리드필드" -#~ msgid "Peterborough" -#~ msgstr "피터보로" +#~ msgid "Raymond" +#~ msgstr "레이몬드" -#~ msgid "Perkins" -#~ msgstr "퍼킨스" +#~ msgid "Raynham" +#~ msgstr "레인헴" -#~ msgid "Peru" -#~ msgstr "페루" +#~ msgid "Putnam" +#~ msgstr "풋남" -#~ msgid "Pawlet" -#~ msgstr "포를릿" +#~ msgid "Rangeley Plantation" +#~ msgstr "레인질리 플랜테이션" -#~ msgid "Paxton" -#~ msgstr "팩스턴" +#~ msgid "Rangeley" +#~ msgstr "레인질리" -#~ msgid "Pawtucket" -#~ msgstr "퍼터킷" +#~ msgid "Provincetown" +#~ msgstr "프로빈스타운" -#~ msgid "Palmyra" -#~ msgstr "팔마이라" +#~ msgid "Putney" +#~ msgstr "풋니" -#~ msgid "Panton" -#~ msgstr "판톤" +#~ msgid "Randolph" +#~ msgstr "랜돌프" -#~ msgid "Paris" -#~ msgstr "파리" +#~ msgid "Quincy" +#~ msgstr "퀸시" -#~ msgid "Parkman" -#~ msgstr "파크맨" +#~ msgid "Rehoboth" +#~ msgstr "리호보스" -#~ msgid "Parsonsfield" -#~ msgstr "파슨스필드" +#~ msgid "Revere" +#~ msgstr "리비어" -#~ msgid "Passadumkeag" -#~ msgstr "파사덤키" +#~ msgid "Readsboro" +#~ msgstr "리즈보로" -#~ msgid "Patten" -#~ msgstr "패튼" +#~ msgid "Reed Plantation" +#~ msgstr "리드 플랜테이션" -#~ msgid "Orwell" -#~ msgstr "오르웰" +#~ msgid "Reading" +#~ msgstr "리딩" -#~ msgid "Otisfield" -#~ msgstr "오티스필드" +#~ msgid "Richford" +#~ msgstr "리치포드" -#~ msgid "Otis" -#~ msgstr "오티스" +#~ msgid "Richmond" +#~ msgstr "리치몬드" -#~ msgid "Ossipee" -#~ msgstr "오시피" +#~ msgid "Ripley" +#~ msgstr "리플리" -#~ msgid "Osborn" -#~ msgstr "오스본" +#~ msgid "Rindge" +#~ msgstr "린지" -#~ msgid "Oxbow" -#~ msgstr "옥스보우" +#~ msgid "Ridgefield" +#~ msgstr "리치필드" -#~ msgid "Owls Head" -#~ msgstr "아울스 헤드" +#~ msgid "Rome" +#~ msgstr "로마" -#~ msgid "Oxford" -#~ msgstr "옥스포드" +#~ msgid "Roque Bluffs" +#~ msgstr "로크 블럽스" -#~ msgid "Palermo" -#~ msgstr "팔레르모" +#~ msgid "Rollinsford" +#~ msgstr "롤린스포드" -#~ msgid "Palmer" -#~ msgstr "팔머" +#~ msgid "Rocky Hill" +#~ msgstr "록키 힐" -#~ msgid "Orrington" -#~ msgstr "오링턴" +#~ msgid "Rockport" +#~ msgstr "록포트" -#~ msgid "Orient" -#~ msgstr "오리엔트" +#~ msgid "Rockland" +#~ msgstr "록클랜드" -#~ msgid "Orneville" -#~ msgstr "오느빌" +#~ msgid "Rockingham" +#~ msgstr "록킹헴" -#~ msgid "Orono" -#~ msgstr "오로노" +#~ msgid "Rochester" +#~ msgstr "로체스터" -#~ msgid "Old Saybrook" -#~ msgstr "올드 세이브룩" +#~ msgid "Robbinston" +#~ msgstr "로빈스턴" -#~ msgid "Orford" -#~ msgstr "오퍼드" +#~ msgid "Ripton" +#~ msgstr "립톤" -#~ msgid "Old Town" -#~ msgstr "올드 타운" +#~ msgid "Rupert" +#~ msgstr "루퍼트" -#~ msgid "Orange" -#~ msgstr "오렌지" +#~ msgid "Rye" +#~ msgstr "라이" -#~ msgid "Orland" -#~ msgstr "오를랜드" +#~ msgid "Rumford" +#~ msgstr "럼포드" -#~ msgid "Orleans" -#~ msgstr "오를리언스" +#~ msgid "Rumney" +#~ msgstr "럼니" -#~ msgid "Nottingham" -#~ msgstr "노팅험" +#~ msgid "Rowley" +#~ msgstr "롤리" -#~ msgid "Norwood" -#~ msgstr "노르우드" +#~ msgid "Roxbury" +#~ msgstr "록스버리" -#~ msgid "Oakfield" -#~ msgstr "오크필드" +#~ msgid "Royalston" +#~ msgstr "로얄스턴" -#~ msgid "Oak Bluffs" -#~ msgstr "오크 블렆스" +#~ msgid "Royalton" +#~ msgstr "로얄턴" -#~ msgid "Norwich" -#~ msgstr "노르위치" +#~ msgid "Rowe" +#~ msgstr "로우" -#~ msgid "Oakland" -#~ msgstr "오클랜드" +#~ msgid "Rutland" +#~ msgstr "러틀랜드" -#~ msgid "Oakham" -#~ msgstr "오컴" +#~ msgid "Sandown" +#~ msgstr "샌다운" -#~ msgid "Old Orchard Beach" -#~ msgstr "올드 오챠드 비치" +#~ msgid "Sandgate" +#~ msgstr "샌드게이트" -#~ msgid "Ogunquit" -#~ msgstr "오건큇트" +#~ msgid "Sandisfield" +#~ msgstr "샌디스필드" -#~ msgid "Old Lyme" -#~ msgstr "올드 라임" +#~ msgid "Sanbornton" +#~ msgstr "샌본턴" -#~ msgid "It looks manly.\n" -#~ msgstr "남자옷 같다.\n" +#~ msgid "Salisbury" +#~ msgstr "샐스버리" -#~ msgid "It looks girly.\n" -#~ msgstr "여자옷 같다.\n" +#~ msgid "Saco" +#~ msgstr "사코" -#~ msgid "Norway" -#~ msgstr "노르웨이" +#~ msgid "Sabattus" +#~ msgstr "사바터스" -#~ msgid "Norwalk" -#~ msgstr "노르워크" +#~ msgid "Saint John Plantation" +#~ msgstr "세인트 존 플랜테이션" -#~ msgid "Norwell" -#~ msgstr "노르웰" +#~ msgid "Ryegate" +#~ msgstr "라이게이트" -#~ msgid "Norton" -#~ msgstr "놀턴" +#~ msgid "Salem" +#~ msgstr "세일럼" -#~ msgid "Northwood" -#~ msgstr "노스우드" +#~ msgid "Savoy" +#~ msgstr "사보이" -#~ msgid "Northbridge" -#~ msgstr "노스브릿지" +#~ msgid "Scarborough" +#~ msgstr "스카보로" -#~ msgid "Northfield" -#~ msgstr "노스필드" +#~ msgid "Sandwich" +#~ msgstr "샌드위치" -#~ msgid "Northport" -#~ msgstr "노스포트" +#~ msgid "Sangerville" +#~ msgstr "생거빌" -#~ msgid "Northumberland" -#~ msgstr "노섬버랜드" +#~ msgid "Saugus" +#~ msgstr "서거스" -#~ msgid "Northborough" -#~ msgstr "노스버러" +#~ msgid "Sandy River Plantation" +#~ msgstr "샌디 리버 플랜테이션" -#~ msgid "North Smithfield" -#~ msgstr "노스 스미스필드" +#~ msgid "Sanford" +#~ msgstr "샌퍼드" -#~ msgid "North Reading" -#~ msgstr "노스 리딩" +#~ msgid "Seabrook" +#~ msgstr "시브룩" -#~ msgid "North Providence" -#~ msgstr "노스 프로비던스" +#~ msgid "Scotland" +#~ msgstr "스코틀랜드" -#~ msgid "North Kingstown" -#~ msgstr "노스 킹스타운" +#~ msgid "Scituate" +#~ msgstr "시추에이트" -#~ msgid "North Hero" -#~ msgstr "노스 히어로" +#~ msgid "Cutler" +#~ msgstr "커틀러" -#~ msgid "North Haven" -#~ msgstr "노스 헤이븐" +#~ msgid "Natick" +#~ msgstr "나티크" -#~ msgid "North Hampton" -#~ msgstr "노스 햄프턴" +#~ msgid "Manchester" +#~ msgstr "멘체스터" -#~ msgid "North Stonington" -#~ msgstr "노스 스토닝턴" +#~ msgid "Manchester-by-the-Sea" +#~ msgstr "멘체스터 바이 더 시" -#~ msgid "North Yarmouth" -#~ msgstr "노스 야마스" +#~ msgid "Fayston" +#~ msgstr "페이스턴" -#~ msgid "Northampton" -#~ msgstr "노샘프턴" +#~ msgid "Francestown" +#~ msgstr "프랜시스타운" -#~ msgid "North Brookfield" -#~ msgstr "노스 브룩필드" +#~ msgid "Franconia" +#~ msgstr "프랑코니아" -#~ msgid "North Branford" -#~ msgstr "노스 브랜포드" +#~ msgid "Frankfort" +#~ msgstr "프랭크포트" -#~ msgid "North Berwick" -#~ msgstr "노스 베릭" +#~ msgid "Franklin" +#~ msgstr "프랭클린" -#~ msgid "North Attleborough" -#~ msgstr "노스 애틀보로" +#~ msgid "Freedom" +#~ msgstr "프리덤" -#~ msgid "North Andover" -#~ msgstr "노스 앤도버" +#~ msgid "Freeman" +#~ msgstr "프리먼" -#~ msgid "North Adams" -#~ msgstr "노스 아담스" +#~ msgid "Newbury" +#~ msgstr "뉴버리" -#~ msgid "Nobleboro" -#~ msgstr "노블보로" +#~ msgid "Newburgh" +#~ msgstr "뉴버지" -#~ msgid "North Canaan" -#~ msgstr "노스 캐이넌" +#~ msgid "New Vineyard" +#~ msgstr "뉴 바인야드" -#~ msgid "Norridgewock" -#~ msgstr "노리지웍" +#~ msgid "Newark" +#~ msgstr "뉴아크" -#~ msgid "Norfolk" -#~ msgstr "놀포크" +#~ msgid "New Sweden" +#~ msgstr "뉴 스웨덴" -#~ msgid "Newton" -#~ msgstr "뉴튼" +#~ msgid "New Castle" +#~ msgstr "뉴 캐슬" -#~ msgid "Newry" -#~ msgstr "너리" +#~ msgid "New Durham" +#~ msgstr "뉴 더럼" -#~ msgid "Newtown" -#~ msgstr "뉴타운" +#~ msgid "New Canaan" +#~ msgstr "뉴 가나안" -#~ msgid "Newport" -#~ msgstr "뉴포트" +#~ msgid "New Britain" +#~ msgstr "뉴 브리튼" -#~ msgid "Newmarket" -#~ msgstr "뉴마켓" +#~ msgid "New Portland" +#~ msgstr "뉴 포틀랜드" -#~ msgid "Newcastle" -#~ msgstr "뉴캐슬" +#~ msgid "Shaftsbury" +#~ msgstr "샤프츠버리" -#~ msgid "Newfields" -#~ msgstr "뉴필즈" +#~ msgid "Strong" +#~ msgstr "스트롱" -#~ msgid "Newington" -#~ msgstr "뉴잉턴" +#~ msgid "Standish" +#~ msgstr "스탠디쉬" -#~ msgid "Newfane" -#~ msgstr "뉴패인" +#~ msgid "Stetson" +#~ msgstr "스테슨" -#~ msgid "Newfield" -#~ msgstr "뉴필드" +#~ msgid "Sumner" +#~ msgstr "섬너" -#~ msgid "New Milford" -#~ msgstr "뉴 밀포드" +#~ msgid "New Sharon" +#~ msgstr "뉴 샤론" -#~ msgid "New Marlborough" -#~ msgstr "뉴 말보로" +#~ msgid "New Shoreham" +#~ msgstr "뉴 쇼어햄" -#~ msgid "New London" -#~ msgstr "뉴 런던" +#~ msgid "Sunderland" +#~ msgstr "선덜랜드" -#~ msgid "New Fairfield" -#~ msgstr "뉴 페어필드" +#~ msgid "Swans Island" +#~ msgstr "스완스 아일랜드" -#~ msgid "New Gloucester" -#~ msgstr "뉴 글로스터" +#~ msgid "Surry" +#~ msgstr "써리" -#~ msgid "New Hampton" -#~ msgstr "뉴 햄튼" +#~ msgid "Swampscott" +#~ msgstr "스웜프스캇" -#~ msgid "New Hartford" -#~ msgstr "뉴 할트포드" +#~ msgid "Sutton" +#~ msgstr "서턴" -#~ msgid "New Haven" -#~ msgstr "뉴 헤이븐" +#~ msgid "Sullivan" +#~ msgstr "설리번" -#~ msgid "New Ipswich" -#~ msgstr "뉴 입스위치" +#~ msgid "Surrey" +#~ msgstr "서레이" -#~ msgid "New Limerick" -#~ msgstr "뉴 리머릭" +#~ msgid "Sunapee" +#~ msgstr "서나피" -#~ msgid "Needham" -#~ msgstr "니덤" +#~ msgid "Newburyport" +#~ msgstr "뉴 버리포트" -#~ msgid "Naugatuck" -#~ msgstr "노거턱" +#~ msgid "Searsburg" +#~ msgstr "시어스버그" -#~ msgid "New Bedford" -#~ msgstr "뉴 베드포드" +#~ msgid "Sebec" +#~ msgstr "세벡" -#~ msgid "New Ashford" -#~ msgstr "뉴 애쉬포드" +#~ msgid "Sebago" +#~ msgstr "세바고" -#~ msgid "New Boston" -#~ msgstr "뉴 보스턴" +#~ msgid "Searsport" +#~ msgstr "시어스포트" -#~ msgid "Nashua" -#~ msgstr "내슈어" +#~ msgid "Searsmont" +#~ msgstr "시어스몬트" -#~ msgid "Millbury" -#~ msgstr "밀베리" +#~ msgid "Sedgwick" +#~ msgstr "세지윅" -#~ msgid "Nashville Plantation" -#~ msgstr "내쉬빌 플랜테이션" +#~ msgid "Seymour" +#~ msgstr "시모어" -#~ msgid "Mount Washington" -#~ msgstr "마운트 워싱턴" +#~ msgid "Seekonk" +#~ msgstr "시콩크" -#~ msgid "Nantucket" -#~ msgstr "난터켓" +#~ msgid "Sherman" +#~ msgstr "셔먼" -#~ msgid "Naples" -#~ msgstr "나폴리" +#~ msgid "Shelburne" +#~ msgstr "쉘번" -#~ msgid "Nahant" -#~ msgstr "네이헌트" +#~ msgid "Shelton" +#~ msgstr "쉘톤" -#~ msgid "Mount Vernon" -#~ msgstr "마운트 버넌" +#~ msgid "Sherborn" +#~ msgstr "셔본" -#~ msgid "Narragansett" -#~ msgstr "내러갠셋" +#~ msgid "Shapleigh" +#~ msgstr "쉐플레이" -#~ msgid "Mount Chase" -#~ msgstr "마운트 체이스" +#~ msgid "Solon" +#~ msgstr "솔론" -#~ msgid "Moultonborough" -#~ msgstr "몰튼버러" +#~ msgid "Shoreham" +#~ msgstr "쇼어햄" -#~ msgid "Moscow" -#~ msgstr "모스크바" +#~ msgid "Shutesbury" +#~ msgstr "슈츠버리" -#~ msgid "Morristown" -#~ msgstr "모리스타운" +#~ msgid "Skowhegan" +#~ msgstr "스코헤간" -#~ msgid "Morrill" -#~ msgstr "모릴" +#~ msgid "Simsbury" +#~ msgstr "심즈버리" -#~ msgid "Moro Plantation" -#~ msgstr "모로 플랜테이션" +#~ msgid "Smyrna" +#~ msgstr "스미르나" -#~ msgid "Moretown" -#~ msgstr "모어타운" +#~ msgid "Seboeis Plantation" +#~ msgstr "세보아이스 플렌테이션" -#~ msgid "Mount Tabor" -#~ msgstr "마운트 테이버" +#~ msgid "South Hadley" +#~ msgstr "사우스 하들리" -#~ msgid "Mount Desert" -#~ msgstr "마운트 데저트" +#~ msgid "South Burlington" +#~ msgstr "사우스 벌링턴" -#~ msgid "Mount Holly" -#~ msgstr "마운트 홀리" +#~ msgid "South Berwick" +#~ msgstr "사우스 베릭" -#~ msgid "Moose River" -#~ msgstr "무스 리버" +#~ msgid "South Bristol" +#~ msgstr "사우스 브리스톨" -#~ msgid "Montville" -#~ msgstr "몬트빌" +#~ msgid "Somerville" +#~ msgstr "서머빌" -#~ msgid "Montpelier" -#~ msgstr "몬필리어" +#~ msgid "Somersworth" +#~ msgstr "서머스워쓰" -#~ msgid "Monticello" -#~ msgstr "몬티첼로" +#~ msgid "Somers" +#~ msgstr "서머스" -#~ msgid "Monson" -#~ msgstr "몬슨" +#~ msgid "South Hampton" +#~ msgstr "사우스 햄프턴" -#~ msgid "Mont Vernon" -#~ msgstr "몬트 버넌" +#~ msgid "Shrewsbury" +#~ msgstr "쇼워스베리" -#~ msgid "Montague" -#~ msgstr "몬태규" +#~ msgid "South Kingstown" +#~ msgstr "사우스 킹스타운" -#~ msgid "Monterey" -#~ msgstr "몬트레이" +#~ msgid "South Portland" +#~ msgstr "사우스 포틀랜드" -#~ msgid "Monroe" -#~ msgstr "몬로" +#~ msgid "South Hero" +#~ msgstr "사우스 히어로" -#~ msgid "Minot" -#~ msgstr "미노" +#~ msgid "Southampton" +#~ msgstr "사우스 앰튼" -#~ msgid "Monhegan" -#~ msgstr "몬헤이건" +#~ msgid "South Thomaston" +#~ msgstr "사우스 토마스톤" -#~ msgid "Monkton" -#~ msgstr "몽튼" +#~ msgid "South Windsor" +#~ msgstr "사우스 윈저" -#~ msgid "Monmouth" -#~ msgstr "몬머스" +#~ msgid "Southbridge" +#~ msgstr "사우스 브리지" -#~ msgid "Melrose" -#~ msgstr "멜로즈" +#~ msgid "Southington" +#~ msgstr "사우스 잉턴" -#~ msgid "Mercer" -#~ msgstr "머서" +#~ msgid "Ludlow" +#~ msgstr "러들로" -#~ msgid "Mattamiscontis" -#~ msgstr "매타미스콘티스" +#~ msgid "Lyman" +#~ msgstr "라이먼" -#~ msgid "Maynard" -#~ msgstr "메이너드" +#~ msgid "Lunenburg" +#~ msgstr "루넨버그" -#~ msgid "Maxfield" -#~ msgstr "맥스필드" +#~ msgid "Lyndon" +#~ msgstr "린던" -#~ msgid "Mattawamkeag" -#~ msgstr "매타웜키" +#~ msgid "Lyndeborough" +#~ msgstr "린데버러" -#~ msgid "Mattapoisett" -#~ msgstr "매타포이세트" +#~ msgid "Lyme" +#~ msgstr "라임" -#~ msgid "Meddybemps" -#~ msgstr "메디벺스" +#~ msgid "Magalloway Plantation" +#~ msgstr "마갈로웨이 농장" -#~ msgid "Mechanic Falls" -#~ msgstr "메카닉 폴즈" +#~ msgid "Madbury" +#~ msgstr "매드버리" -#~ msgid "Littleton" -#~ msgstr "리틀턴" +#~ msgid "Machiasport" +#~ msgstr "마키아스포트" -#~ msgid "Little Compton" -#~ msgstr "리틀 콤프턴" +#~ msgid "Macwahoc Plantation" +#~ msgstr "맥와호크 농장" -#~ msgid "Litchfield" -#~ msgstr "리치필드" +#~ msgid "Maidstone" +#~ msgstr "메이드스톤" -#~ msgid "Milo" -#~ msgstr "밀로" +#~ msgid "Madrid" +#~ msgstr "마드리드" -#~ msgid "Milton" -#~ msgstr "밀튼" +#~ msgid "Machias" +#~ msgstr "마키아스" -#~ msgid "Lisbon" -#~ msgstr "리스본" +#~ msgid "Lynnfield" +#~ msgstr "린필드" -#~ msgid "Linneus" -#~ msgstr "린네" +#~ msgid "Lynn" +#~ msgstr "린" -#~ msgid "Lincolnville" -#~ msgstr "링컨빌" +#~ msgid "Malden" +#~ msgstr "몰든" -#~ msgid "Lincoln Plantation" -#~ msgstr "링컨 농장" +#~ msgid "Mapleton" +#~ msgstr "메이플턴" -#~ msgid "Millis" -#~ msgstr "밀즈" +#~ msgid "Mansfield" +#~ msgstr "맨스필드" -#~ msgid "Millinocket" -#~ msgstr "밀리노켓" +#~ msgid "Marblehead" +#~ msgstr "마블헤드" -#~ msgid "Millville" -#~ msgstr "밀빌" +#~ msgid "Montgomery" +#~ msgstr "몽고메리" -#~ msgid "Milbridge" -#~ msgstr "밀브리지" +#~ msgid "New Canada" +#~ msgstr "뉴 캐나다" -#~ msgid "Milan" -#~ msgstr "밀란" +#~ msgid "New Braintree" +#~ msgstr "뉴 브레인트리" -#~ msgid "Milford" -#~ msgstr "밀포드" +#~ msgid "New Salem" +#~ msgstr "뉴 세일럼" -#~ msgid "Middleton" -#~ msgstr "미들턴" +#~ msgid "Sprague" +#~ msgstr "스프라그" -#~ msgid "Middletown" -#~ msgstr "미들타운" +#~ msgid "Southport" +#~ msgstr "사우스포트" -#~ msgid "Middletown Springs" -#~ msgstr "미들타운 스프링스" +#~ msgid "Southwick" +#~ msgstr "사우스윅" -#~ msgid "Lincoln" -#~ msgstr "링컨" +#~ msgid "Southwest Harbor" +#~ msgstr "사우스웨스트 하버" -#~ msgid "Limington" -#~ msgstr "리밍턴" +#~ msgid "Stannard" +#~ msgstr "스태너드" -#~ msgid "Limestone" -#~ msgstr "석회암" +#~ msgid "St. Johnsbury" +#~ msgstr "세인트 존스버리" -#~ msgid "Meriden" -#~ msgstr "메리든" +#~ msgid "Stafford" +#~ msgstr "스타포드" -#~ msgid "Merrill" -#~ msgstr "메릴" +#~ msgid "Stacyville" +#~ msgstr "스테이시빌" -#~ msgid "Merrimac" -#~ msgstr "메리맥" +#~ msgid "Starksboro" +#~ msgstr "스탁스보로" -#~ msgid "Mexico" -#~ msgstr "멕시코" +#~ msgid "Stockton Springs" +#~ msgstr "스톡턴 스프링스" -#~ msgid "Merrimack" -#~ msgstr "메리맥" +#~ msgid "Stewartstown" +#~ msgstr "스튜워츠타운" -#~ msgid "Methuen" -#~ msgstr "메투엔" +#~ msgid "Steuben" +#~ msgstr "스테우벤" -#~ msgid "Middlesex" -#~ msgstr "미들섹스" +#~ msgid "Stockbridge" +#~ msgstr "스톡브리지" -#~ msgid "Middlebury" -#~ msgstr "미들버리" +#~ msgid "Stratton" +#~ msgstr "스트래튼" -#~ msgid "Middlefield" -#~ msgstr "미들필드" +#~ msgid "Stratford" +#~ msgstr "스트랫포드" -#~ msgid "Middleborough" -#~ msgstr "미들보로" +#~ msgid "Stratham" +#~ msgstr "스트레텀" -#~ msgid "Limerick" -#~ msgstr "리머릭" +#~ msgid "Strafford" +#~ msgstr "스트라포드" -#~ msgid "Liberty" -#~ msgstr "자유" +#~ msgid "Stoughton" +#~ msgstr "스토턴" -#~ msgid "Medfield" -#~ msgstr "메드필드" +#~ msgid "Stonington" +#~ msgstr "스토닝턴" -#~ msgid "Medford" -#~ msgstr "메드포드" +#~ msgid "Stoneham" +#~ msgstr "스톤햄" -#~ msgid "Medway" -#~ msgstr "메드웨이" +#~ msgid "Stoddard" +#~ msgstr "스토다드" -#~ msgid "Mendon" -#~ msgstr "멘든" +#~ msgid "Sturbridge" +#~ msgstr "스터브리지" -#~ msgid "Meredith" -#~ msgstr "메레디스" +#~ msgid "Sudbury" +#~ msgstr "서버리" -#~ msgid "Lexington" -#~ msgstr "렉싱턴" +#~ msgid "Killingly" +#~ msgstr "킬링리" -#~ msgid "Lewiston" -#~ msgstr "루이스턴" +#~ msgid "Sweden" +#~ msgstr "스웨든" -#~ msgid "Leverett" -#~ msgstr "레버렛" +#~ msgid "Swanzey" +#~ msgstr "스완지" -#~ msgid "Levant" -#~ msgstr "레반트" +#~ msgid "Talmadge" +#~ msgstr "탈마지" -#~ msgid "Leominster" -#~ msgstr "레민스터" +#~ msgid "Swansea" +#~ msgstr "스완지" -#~ msgid "Matinicus Isle" -#~ msgstr "마티니커스 섬" +#~ msgid "Swanton" +#~ msgstr "스완튼" -#~ msgid "" -#~ "Your %s already has 4 mods installed! To remove the mods,press 'U' while " -#~ "wielding the unloaded gun." -#~ msgstr "" -#~ "%s 에는 4번의 개조가 설치되어 있습니다! 개조를 제거 하려면, 빈 무기를 장비" -#~ "하고 'U' 키를 누르면 됩니다." +#~ msgid "Swanville" +#~ msgstr "스완빌" -#~ msgid "Lenox" -#~ msgstr "레녹스" +#~ msgid "Tamworth" +#~ msgstr "탐워스" -#~ msgid "Lempster" -#~ msgstr "렘스터" +#~ msgid "Taunton" +#~ msgstr "타우튼" -#~ msgid "Lemington" -#~ msgstr "레밍턴" +#~ msgid "Temple" +#~ msgstr "템플" -#~ msgid "Leicester" -#~ msgstr "레스터" +#~ msgid "Thetford" +#~ msgstr "텟포드" -#~ msgid "Leeds" -#~ msgstr "리즈" +#~ msgid "Tewksbury" +#~ msgstr "턱스베리" -#~ msgid "Ledyard" -#~ msgstr "레디어드" +#~ msgid "Friendship" +#~ msgstr "우정" -#~ msgid "Leyden" -#~ msgstr "레이든" +#~ msgid "Frye Island" +#~ msgstr "프라이 아일랜드" -#~ msgid "Marshfield" -#~ msgstr "마쉬필드" +#~ msgid "Fryeburg" +#~ msgstr "프라이버그" -#~ msgid "Mars Hill" -#~ msgstr "마스 힐" +#~ msgid "Gardiner" +#~ msgstr "가디너" -#~ msgid "Mariaville" -#~ msgstr "마리아빌" +#~ msgid "Tiverton" +#~ msgstr "티버튼" -#~ msgid "Marlborough" -#~ msgstr "말보로우" +#~ msgid "Tisbury" +#~ msgstr "티즈버리" -#~ msgid "Marlow" -#~ msgstr "말로우" +#~ msgid "Freeport" +#~ msgstr "프리포트" -#~ msgid "Marion" -#~ msgstr "매리언" +#~ msgid "Freetown" +#~ msgstr "프리타운" -#~ msgid "Marlboro" -#~ msgstr "말보로" +#~ msgid "Fremont" +#~ msgstr "프리몬트" -#~ msgid "Mashpee" -#~ msgstr "마시피" +#~ msgid "Frenchboro" +#~ msgstr "프렌치버로" -#~ msgid "Masardis" -#~ msgstr "마사르디스" +#~ msgid "Gardner" +#~ msgstr "가드너" -#~ msgid "Madawaska" -#~ msgstr "마다와스카" +#~ msgid "Garfield Plantation" +#~ msgstr "가필드 플랜테이션" -#~ msgid "Holden" -#~ msgstr "홀덴" +#~ msgid "Garland" +#~ msgstr "갈랜드" -#~ msgid "Lubec" -#~ msgstr "루벡" +#~ msgid "Frenchville" +#~ msgstr "프렌치빌" -#~ msgid "Loudon" -#~ msgstr "라우던" +#~ msgid "Gilead" +#~ msgstr "길레아" -#~ msgid "Longmeadow" -#~ msgstr "롱메도우" +#~ msgid "" +#~ "Head encumberance has no effect; it simply limits how much you can put on." +#~ msgstr "" +#~ "머리 방해도는 얼마나 입을수 있는가 만에 영향을 주며 다른 효과는 없습니다;" -#~ msgid "Long Island" -#~ msgstr "롱 아일랜드" +#~ msgid "Somerset" +#~ msgstr "서머셋" -#~ msgid "Londonderry" -#~ msgstr "런던데리" +#~ msgid "Sharon" +#~ msgstr "샤론" -#~ msgid "Livermore Falls" -#~ msgstr "리버모어 폴즈" +#~ msgid "Sheffield" +#~ msgstr "셰필드" -#~ msgid "Livermore" -#~ msgstr "리버모어" +#~ msgid "Shirley" +#~ msgstr "셜리" -#~ msgid "Lowell" -#~ msgstr "로웰" +#~ msgid "Sidney" +#~ msgstr "시드니" -#~ msgid "Lovell" -#~ msgstr "러벨" +#~ msgid "Smithfield" +#~ msgstr "스미스필드" -#~ msgid "Stepped on bubblewrap." -#~ msgstr "뾱뾱이에 발을 내딛음." +#~ msgid "Hingham" +#~ msgstr "힝햄" -#~ msgid "Stepped on a lane mine." -#~ msgstr "지뢰에 발을 내딛음." +#~ msgid "Hinsdale" +#~ msgstr "힌스데일" -#~ msgid "Triggered a boobytrap." -#~ msgstr "부비트랩을 작동시킴." +#~ msgid "Hiram" +#~ msgstr "하이럼" -#~ msgid "Haynesville" -#~ msgstr "헤인즈빌" +#~ msgid "Hodgdon" +#~ msgstr "허지든" -#~ msgid "Georgetown" -#~ msgstr "조지타운" +#~ msgid "Holbrook" +#~ msgstr "홀브룩" -#~ msgid "Heath" -#~ msgstr "히스" +#~ msgid "Sorrento" +#~ msgstr "소렌토" -#~ msgid "Highgate" -#~ msgstr "하이게이트" +#~ msgid "Sheldon" +#~ msgstr "셸던" -#~ msgid "Hebron" -#~ msgstr "헤브론" +#~ msgid "Southborough" +#~ msgstr "사우스버러" -#~ msgid "Henniker" -#~ msgstr "헨니커" +#~ msgid "St. Albans" +#~ msgstr "세인트앨번스" -#~ msgid "Hermon" -#~ msgstr "허먼" +#~ msgid "St. George" +#~ msgstr "세인트조지" -#~ msgid "Hersey" -#~ msgstr "허시" +#~ msgid "Southbury" +#~ msgstr "사우스베리" -#~ msgid "Highland Plantation" -#~ msgstr "하이랜드 대농장" +#~ msgid "St. Agatha" +#~ msgstr "세인트아가사" -#~ msgid "Hillsborough" -#~ msgstr "힐스버러" +#~ msgid "St. Francis" +#~ msgstr "세인트프란시스" -#~ msgid "Hinesburg" -#~ msgstr "하인즈버그" +#~ msgid "Van Buren" +#~ msgstr "밴 뷰런" -#~ msgid "Hatfield" -#~ msgstr "해트필드" +#~ msgid "Unity" +#~ msgstr "유니티" -#~ msgid "Harwinton" -#~ msgstr "하윈턴" +#~ msgid "Union" +#~ msgstr "유니온" -#~ msgid "Hawley" -#~ msgstr "홀리" +#~ msgid "Tyngsborough" +#~ msgstr "팅스버러" -#~ msgid "Haverhill" -#~ msgstr "해이버힐" +#~ msgid "Tunbridge" +#~ msgstr "턴브릿지" -#~ msgid "Hartland" -#~ msgstr "하트랜드" +#~ msgid "Underhill" +#~ msgstr "언더힐" -#~ msgid "Hartford" -#~ msgstr "하트포드" +#~ msgid "Tyringham" +#~ msgstr "타이링헴" -#~ msgid "Harwich" -#~ msgstr "하위치" +#~ msgid "Tuftonboro" +#~ msgstr "터프튼보로" -#~ msgid "Harvard" -#~ msgstr "하버드" +#~ msgid "Starks" +#~ msgstr "스타크" -#~ msgid "Harrisville" -#~ msgstr "해리스빌" +#~ msgid "Stowe" +#~ msgstr "스토위" -#~ msgid "Hart's Location" -#~ msgstr "하츠 로케이션" +#~ msgid "Stow" +#~ msgstr "스토우" -#~ msgid "Hanson" -#~ msgstr "핸슨" +#~ msgid "Waite" +#~ msgstr "웨이트" -#~ msgid "Hampton Falls" -#~ msgstr "햄프턴 폴스" +#~ msgid "Waitsfield" +#~ msgstr "웨아츠필드" -#~ msgid "Hampton" -#~ msgstr "햄프턴" +#~ msgid "Voluntown" +#~ msgstr "볼룬타운" -#~ msgid "Harrington" -#~ msgstr "해링턴" +#~ msgid "Vinalhaven" +#~ msgstr "비날헤이븐" -#~ msgid "Hardwick" -#~ msgstr "하드윅" +#~ msgid "West Bath" +#~ msgstr "웨스트 배스" -#~ msgid "Hancock" -#~ msgstr "핸콕" +#~ msgid "West Boylston" +#~ msgstr "웨스트 보일스턴" -#~ msgid "Hanover" -#~ msgstr "하노버" +#~ msgid "West Bridgewater" +#~ msgstr "웨스트 브릿지워터" -#~ msgid "Harrison" -#~ msgstr "해리슨" +#~ msgid "West Brookfield" +#~ msgstr "웨스트 브룩필드" -#~ msgid "Harmony" -#~ msgstr "하모니" +#~ msgid "Wendell" +#~ msgstr "웬델" -#~ msgid "Harpswell" -#~ msgstr "하프스웰" +#~ msgid "Wenham" +#~ msgstr "웬헴" -#~ msgid "Hammond" -#~ msgstr "해몬드" +#~ msgid "Wentworth" +#~ msgstr "웬트워스" -#~ msgid "Hamlin" -#~ msgstr "햄린" +#~ msgid "Wesley" +#~ msgstr "웨슬리" -#~ msgid "Hamilton" -#~ msgstr "해밀턴" +#~ msgid "West Fairlee" +#~ msgstr "웨스트 페얼리" -#~ msgid "Hamden" -#~ msgstr "햄덴" +#~ msgid "West Forks" +#~ msgstr "웨스트 포크스" -#~ msgid "Hallowell" -#~ msgstr "할로웰" +#~ msgid "Weston" +#~ msgstr "웨스턴" -#~ msgid "Halifax" -#~ msgstr "할리팩스" +#~ msgid "Wethersfield" +#~ msgstr "웨더즈필드" -#~ msgid "Hampden" -#~ msgstr "햄프덴" +#~ msgid "Westmanland" +#~ msgstr "웨스트맨랜드" -#~ msgid "Haddam" -#~ msgstr "해덤" +#~ msgid "Westhampton" +#~ msgstr "웨스트햄프턴" -#~ msgid "Hadley" -#~ msgstr "해들리" +#~ msgid "Sterling" +#~ msgstr "스털링" -#~ msgid "Hampstead" -#~ msgstr "햄스테드" +#~ msgid "Stamford" +#~ msgstr "스탬포드" -#~ msgid "Greenland" -#~ msgstr "그린랜드" +#~ msgid "Stark" +#~ msgstr "스타크" -#~ msgid "Greensboro" -#~ msgstr "그린즈버러" +#~ msgid "Spencer" +#~ msgstr "스펜서" -#~ msgid "Groton" -#~ msgstr "그로턴" +#~ msgid "Springfield" +#~ msgstr "스프링필드" -#~ msgid "Groveland" -#~ msgstr "그로브랜드" +#~ msgid "Stockholm" +#~ msgstr "스톡홀름" -#~ msgid "Guildhall" -#~ msgstr "길드홀" +#~ msgid "Sugar Hill" +#~ msgstr "슈거 힐" -#~ msgid "Guilford" -#~ msgstr "길포드" +#~ msgid "Suffield" +#~ msgstr "서필드" -#~ msgid "Greenville" -#~ msgstr "그린빌" +#~ msgid "Templeton" +#~ msgstr "템플턴" -#~ msgid "Greenwich" -#~ msgstr "그린위치" +#~ msgid "Whiting" +#~ msgstr "와이팅" -#~ msgid "Greenwood" -#~ msgstr "그린우드" +#~ msgid "Whitingham" +#~ msgstr "와이팅헴" -#~ msgid "Griswold" -#~ msgstr "그리스올드" +#~ msgid "Whitneyville" +#~ msgstr "위트니빌" -#~ msgid "Grand Isle" -#~ msgstr "그랜드 아일" +#~ msgid "Weymouth" +#~ msgstr "웨이머스" -#~ msgid "Granby" -#~ msgstr "그랜비" +#~ msgid "Weybridge" +#~ msgstr "웨이브릿지" -#~ msgid "Granville" -#~ msgstr "그랜빌" +#~ msgid "Wheelock" +#~ msgstr "윌락" -#~ msgid "Great Barrington" -#~ msgstr "그레이트 배링턴" +#~ msgid "Whately" +#~ msgstr "웨이틀리" -#~ msgid "Grand Lake Stream" -#~ msgstr "그랜드 레이크 스트림" +#~ msgid "Wilbraham" +#~ msgstr "윌브라함" -#~ msgid "Grantham" -#~ msgstr "그랜트햄" +#~ msgid "Williamsburg" +#~ msgstr "윌리암스버그" -#~ msgid "Greenfield" -#~ msgstr "그린필드" +#~ msgid "Williamstown" +#~ msgstr "윌리암스타운" -#~ msgid "Greenbush" -#~ msgstr "그린부쉬" +#~ msgid "Willimantic" +#~ msgstr "윌리만틱" -#~ msgid "Great Pond" -#~ msgstr "그레이트 폰드" +#~ msgid "Willington" +#~ msgstr "윌링턴" -#~ msgid "Greene" -#~ msgstr "그린" +#~ msgid "Winchendon" +#~ msgstr "윈첸던" -#~ msgid "Gosnold" -#~ msgstr "고스널드" +#~ msgid "Williston" +#~ msgstr "윌리스턴" -#~ msgid "Goshen" -#~ msgstr "고센" +#~ msgid "Wilmington" +#~ msgstr "윌밍턴" -#~ msgid "Grafton" -#~ msgstr "그래프턴" +#~ msgid "Wilmot" +#~ msgstr "윌멋" -#~ msgid "Gouldsboro" -#~ msgstr "굴즈버로" +#~ msgid "Wilton" +#~ msgstr "윌턴" -#~ msgid "Glover" -#~ msgstr "글로버" +#~ msgid "Windham" +#~ msgstr "윈뎀" -#~ msgid "Gloucester" -#~ msgstr "글러스터" +#~ msgid "Windsor" +#~ msgstr "윈저" -#~ msgid "Gorham" -#~ msgstr "고어햄" +#~ msgid "Windsor Locks" +#~ msgstr "윈저 락스" -#~ msgid "Goffstown" -#~ msgstr "고프스타운" +#~ msgid "Winslow" +#~ msgstr "윈슬로우" -#~ msgid "Glocester" -#~ msgstr "글로스터" +#~ msgid "Winhall" +#~ msgstr "윈홀" -#~ msgid "Glenwood Plantation" -#~ msgstr "글렌우드 대농장" +#~ msgid "Winterport" +#~ msgstr "윈터포트" -#~ msgid "Gilford" -#~ msgstr "길포드" +#~ msgid "Winter Harbor" +#~ msgstr "윈터 하버" -#~ msgid "Gill" -#~ msgstr "길" +#~ msgid "Winooski" +#~ msgstr "위누스키" -#~ msgid "Gilmanton" -#~ msgstr "길맨턴" +#~ msgid "Winn" +#~ msgstr "윈" -#~ msgid "Gilsum" -#~ msgstr "길섬" +#~ msgid "Woodland" +#~ msgstr "우들랜드" -#~ msgid "Glastenbury" -#~ msgstr "글래스턴베리" +#~ msgid "Woodbury" +#~ msgstr "우드버리" -#~ msgid "Glastonbury" -#~ msgstr "글래스턴베리" +#~ msgid "Woodford" +#~ msgstr "우드포드" -#~ msgid "Glenburn" -#~ msgstr "글렌번" +#~ msgid "Wolfeboro" +#~ msgstr "월프보로" -#~ msgid "Georgia" -#~ msgstr "조지아" +#~ msgid "Woodbridge" +#~ msgstr "우드브릿지" -#~ msgid "firearms" -#~ msgstr "총기" +#~ msgid "Wiscasset" +#~ msgstr "위스카셋" -#~ msgid " where? (Direction button)" -#~ msgstr " : 방향키로 방향 선택" +#~ msgid "Winthrop" +#~ msgstr "윈스롭" -#~ msgid "Framingham" -#~ msgstr "프레이밍햄" +#~ msgid "Winterville Plantation" +#~ msgstr "윈터빌 플랜테이션" -#~ msgid "Ferrisburg" -#~ msgstr "페리스버그" +#~ msgid "Wolcott" +#~ msgstr "월콧" -#~ msgid "Foxborough" -#~ msgstr "폭스버러" +#~ msgid "Woburn" +#~ msgstr "우번" -#~ msgid "Fitzwilliam" -#~ msgstr "피츠윌리엄" +#~ msgid "Holderness" +#~ msgstr "홀더니스" -#~ msgid "Florida" -#~ msgstr "플로리다" +#~ msgid "Kennebunkport" +#~ msgstr "케네벙크포트" -#~ msgid "Fletcher" -#~ msgstr "플레쳐" +#~ msgid "Holland" +#~ msgstr "홀랜드" -#~ msgid "Forest City" -#~ msgstr "포레스트 시티" +#~ msgid "Woonsocket" +#~ msgstr "운소켓" -#~ msgid "Fomer towns:" -#~ msgstr "포머 타운즈:" +#~ msgid "Worcester" +#~ msgstr "월스터" -#~ msgid "Fort Kent" -#~ msgstr "포트 켄트" +#~ msgid "Woodville" +#~ msgstr "우드빌" -#~ msgid "Fort Fairfield" -#~ msgstr "포트 페어필드" +#~ msgid "Woolwich" +#~ msgstr "월리치" -#~ msgid "Fitchburg" -#~ msgstr "피치버그" +#~ msgid "Woodstock" +#~ msgstr "우드스탁" -#~ msgid "Falmouth" -#~ msgstr "팰머스" +#~ msgid "Wrentham" +#~ msgstr "렌헴" -#~ msgid "Farmington" -#~ msgstr "파밍튼" +#~ msgid "Worthington" +#~ msgstr "월싱턴" -#~ msgid "Fayette" -#~ msgstr "파이에트" +#~ msgid "York" +#~ msgstr "요크" -#~ msgid "Fairfield" -#~ msgstr "페어필드" +#~ msgid "Yarmouth" +#~ msgstr "얄머스" -#~ msgid "Fairhaven" -#~ msgstr "페어해븐" +#~ msgid "Hollis" +#~ msgstr "홀리스" -#~ msgid "Fairlee" -#~ msgstr "페어리" +#~ msgid "Holliston" +#~ msgstr "홀리스턴" -#~ msgid "Fall River" -#~ msgstr "폴 리버" +#~ msgid "Holyoke" +#~ msgstr "홀리요크" -#~ msgid "Fairfax" -#~ msgstr "페어팩스" +#~ msgid "Hooksett" +#~ msgstr "후크세트" -#~ msgid "Farmingdale" -#~ msgstr "파밍데일" +#~ msgid "Hope" +#~ msgstr "호프" -#~ msgid "Epping" -#~ msgstr "에핑" +#~ msgid "Hopedale" +#~ msgstr "호프데일" -#~ msgid "Fair Haven" -#~ msgstr "페어 해븐" +#~ msgid "Hopkinton" +#~ msgstr "홉킨턴" -#~ msgid "Eustis" -#~ msgstr "유스티스" +#~ msgid "Houlton" +#~ msgstr "훌턴" -#~ msgid "Etna" -#~ msgstr "에트나" +#~ msgid "Howland" +#~ msgstr "하울랜드" -#~ msgid "Essex" -#~ msgstr "에섹스" +#~ msgid "Hubbardston" +#~ msgstr "하버드스턴" -#~ msgid "Erving" -#~ msgstr "어빙" +#~ msgid "Hubbardton" +#~ msgstr "하버드턴" -#~ msgid "Errol" -#~ msgstr "에롤" +#~ msgid "Hudson" +#~ msgstr "허드슨" -#~ msgid "Epsom" -#~ msgstr "엡섬" +#~ msgid "Hull" +#~ msgstr "훌" -#~ msgid "Exeter" -#~ msgstr "엑세터" +#~ msgid "Huntington" +#~ msgstr "헌팅턴" -#~ msgid "Everett" -#~ msgstr "에버렛" +#~ msgid "Hurricane Isle" +#~ msgstr "허리케인 섬" -#~ msgid "Eliot" -#~ msgstr "엘리엇" +#~ msgid "Hyde Park" +#~ msgstr "하이드 공원" -#~ msgid "Ellington" -#~ msgstr "엘링턴" +#~ msgid "Industry" +#~ msgstr "인더스트리" -#~ msgid "Effingham" -#~ msgstr "에핑엄" +#~ msgid "Ipswich" +#~ msgstr "입스위치" -#~ msgid "Egremont" -#~ msgstr "에그리몬트" +#~ msgid "Ira" +#~ msgstr "이라" -#~ msgid "Enfield" -#~ msgstr "엔필드" +#~ msgid "Irasburg" +#~ msgstr "이라스버그" -#~ msgid "Ellsworth" -#~ msgstr "엘스워스" +#~ msgid "Island Falls" +#~ msgstr "아일랜드 폴스" -#~ msgid "Elmore" -#~ msgstr "엘모어" +#~ msgid "Isle La Motte" +#~ msgstr "아일 라 오트" -#~ msgid "Embden" -#~ msgstr "엠덴" +#~ msgid "Isle au Haut" +#~ msgstr "아일 오 호트" -#~ msgid "Enosburg" -#~ msgstr "에노스버그" +#~ msgid "Islesboro" +#~ msgstr "아일보로" -#~ msgid "Eastham" -#~ msgstr "이스트햄" +#~ msgid "Jackman" +#~ msgstr "잭맨" -#~ msgid "Eden" -#~ msgstr "에덴" +#~ msgid "Jaffrey" +#~ msgstr "제프리" -#~ msgid "Eddington" -#~ msgstr "에딩턴" +#~ msgid "Jamaica" +#~ msgstr "자메이카" -#~ msgid "Edgecomb" -#~ msgstr "에지콤" +#~ msgid "Jamestown" +#~ msgstr "제임스타운" -#~ msgid "Edgartown" -#~ msgstr "에드가타운" +#~ msgid "Jay" +#~ msgstr "제이" -#~ msgid "Easton" -#~ msgstr "이스턴" +#~ msgid "Jefferson" +#~ msgstr "제퍼슨" -#~ msgid "Easthampton" -#~ msgstr "이스트햄프턴" +#~ msgid "Jericho" +#~ msgstr "제리코" -#~ msgid "Eaton" -#~ msgstr "이튼" +#~ msgid "Johnston" +#~ msgstr "존스턴" -#~ msgid "Eastport" -#~ msgstr "이스트포트" +#~ msgid "Jonesboro" +#~ msgstr "존스보로" -#~ msgid "Edinburg" -#~ msgstr "에딘버그" +#~ msgid "Jonesport" +#~ msgstr "존스포트" -#~ msgid "Eastford" -#~ msgstr "이스트포드" +#~ msgid "Keene" +#~ msgstr "킨" -#~ msgid "East Lyme" -#~ msgstr "이스트 라임" +#~ msgid "Kenduskeag" +#~ msgstr "켄덕스키그" -#~ msgid "East Longmeadow" -#~ msgstr "이스트 롱메도우" +#~ msgid "Kennebunk" +#~ msgstr "케네벙크" -#~ msgid "East Millinocket" -#~ msgstr "이스트 밀리노켓" +#~ msgid "Kensington" +#~ msgstr "켄싱턴" -#~ msgid "East Machias" -#~ msgstr "이스트 마키어즈" +#~ msgid "Kent" +#~ msgstr "켄트" -#~ msgid "East Providence" -#~ msgstr "이스트 프로비던스" +#~ msgid "Killington" +#~ msgstr "킬링턴" -#~ msgid "East Montpelier" -#~ msgstr "이스트 몬트필리어" +#~ msgid "Killingworth" +#~ msgstr "킬링워스" -#~ msgid "Eastbrook" -#~ msgstr "이스트브룩" +#~ msgid "Kingfield" +#~ msgstr "킹필드" -#~ msgid "East Windsor" -#~ msgstr "이스트 윈저" +#~ msgid "Kingman" +#~ msgstr "킹맨" -#~ msgid "East Kingston" -#~ msgstr "이스트 킹스턴" +#~ msgid "Kingsbury Plantation" +#~ msgstr "킹스버리 플랜테이션" -#~ msgid "East Granby" -#~ msgstr "이스트 그랜비" +#~ msgid "Kingston" +#~ msgstr "킹스턴" -#~ msgid "Dyer Brook" -#~ msgstr "다이어 브룩" +#~ msgid "Kirby" +#~ msgstr "커비" -#~ msgid "East Hampton" -#~ msgstr "이스트 햄프턴" +#~ msgid "Kittery" +#~ msgstr "키터리" -#~ msgid "East Hartford" -#~ msgstr "이스트 하트포드" +#~ msgid "Knox" +#~ msgstr "녹스" -#~ msgid "East Greenwich" -#~ msgstr "이스트 그린위치" +#~ msgid "Laconia" +#~ msgstr "라코니아" -#~ msgid "East Haddam" -#~ msgstr "이스트 해덤" +#~ msgid "Lagrange" +#~ msgstr "라그랑쥬" -#~ msgid "East Brookfield" -#~ msgstr "이스트 브룩필드" +#~ msgid "Lake View Plantation" +#~ msgstr "레이크 뷰 플랜테이션" -#~ msgid "Eagle Lake" -#~ msgstr "이글 레이크" +#~ msgid "Lakeville" +#~ msgstr "레이크빌" -#~ msgid "East Bridgewater" -#~ msgstr "이스트 브리지워터" +#~ msgid "Lamoine" +#~ msgstr "라모인" -#~ msgid "East Haven" -#~ msgstr "이스트 해븐" +#~ msgid "Lancaster" +#~ msgstr "랭커스터" -#~ msgid "Dresden" -#~ msgstr "드레스덴" +#~ msgid "Landaff" +#~ msgstr "랜대프" -#~ msgid "Durham" -#~ msgstr "더햄" +#~ msgid "Landgrove" +#~ msgstr "랜드그로브" -#~ msgid "Dunstable" -#~ msgstr "던스테이블" +#~ msgid "Lanesborough" +#~ msgstr "레인즈버러" -#~ msgid "Dunbarton" -#~ msgstr "던바턴" +#~ msgid "Langdon" +#~ msgstr "랭던" -#~ msgid "Dummerston" -#~ msgstr "덤머스턴" +#~ msgid "Lawrence" +#~ msgstr "로렌스" -#~ msgid "Dummer" -#~ msgstr "덤머" +#~ msgid "Lebanon" +#~ msgstr "레바논" -#~ msgid "Dudley" -#~ msgstr "더들리" +#~ msgid "Thorndike" +#~ msgstr "손다이크" -#~ msgid "Dublin" -#~ msgstr "더블린" +#~ msgid "The Forks" +#~ msgstr "포크" -#~ msgid "Drew Plantation" -#~ msgstr "드류의 대농장" +#~ msgid "Verona Island" +#~ msgstr "베로나 아일랜드" -#~ msgid "Duxbury" -#~ msgstr "덕스베리" +#~ msgid "Vanceboro" +#~ msgstr "밴스버러" -#~ msgid "Dorset" -#~ msgstr "도어셋" +#~ msgid "Vernon" +#~ msgstr "버논" -#~ msgid "Douglas" -#~ msgstr "더글라스" +#~ msgid "Vergennes" +#~ msgstr "버겐스" -#~ msgid "Dover" -#~ msgstr "도버" +#~ msgid "Veazie" +#~ msgstr "배아지" -#~ msgid "Dover-Foxcroft" -#~ msgstr "도버-폭스크로프트" +#~ msgid "Vassalboro" +#~ msgstr "배살보로" -#~ msgid "Dighton" -#~ msgstr "다이튼" +#~ msgid "Waterbury" +#~ msgstr "워터버리" -#~ msgid "Dixmont" -#~ msgstr "딕스몬트" +#~ msgid "Ware" +#~ msgstr "웨어" -#~ msgid "Dorchester" -#~ msgstr "도어체스터" +#~ msgid "Warner" +#~ msgstr "워너" -#~ msgid "Dracut" -#~ msgstr "드라컷" +#~ msgid "Wareham" +#~ msgstr "웨어햄" -#~ msgid "Dexter" -#~ msgstr "덱스터" +#~ msgid "Waterboro" +#~ msgstr "워터보로" -#~ msgid "Deer Isle" -#~ msgstr "디어 아일" +#~ msgid "Warren" +#~ msgstr "워렌" -#~ msgid "Detroit" -#~ msgstr "디트로이트" +#~ msgid "Warwick" +#~ msgstr "워윅" -#~ msgid "Derry" -#~ msgstr "데어리" +#~ msgid "Watertown" +#~ msgstr "워터타운" -#~ msgid "Dennysville" -#~ msgstr "데니스빌" +#~ msgid "Waterford" +#~ msgstr "워터포드" -#~ msgid "Dennistown" -#~ msgstr "데니스타운" +#~ msgid "Wellesley" +#~ msgstr "웰즐리" -#~ msgid "Derby" -#~ msgstr "더비" +#~ msgid "Weld" +#~ msgstr "웰드" -#~ msgid "Deering" -#~ msgstr "디어링" +#~ msgid "Webster Plantation" +#~ msgstr "웹스터 플랜테이션" -#~ msgid "Deerfield" -#~ msgstr "디어필드" +#~ msgid "Webster" +#~ msgstr "웹스터" -#~ msgid "Dennis" -#~ msgstr "데니스" +#~ msgid "Weathersfield" +#~ msgstr "웨더스필드" -#~ msgid "Denmark" -#~ msgstr "덴마크" +#~ msgid "Weare" +#~ msgstr "위어" -#~ msgid "Deep River" -#~ msgstr "딥 리버" +#~ msgid "Wayne" +#~ msgstr "웨인" -#~ msgid "Danville" -#~ msgstr "댄빌" +#~ msgid "Waterville" +#~ msgstr "워터빌" -#~ msgid "Darien" -#~ msgstr "대리언" +#~ msgid "Waterville Valley" +#~ msgstr "워터빌 밸리" -#~ msgid "Danforth" -#~ msgstr "댄포스" +#~ msgid "Wayland" +#~ msgstr "웨이랜드" -#~ msgid "Danvers" -#~ msgstr "댄버스" +#~ msgid "Wellfleet" +#~ msgstr "웰플릿" -#~ msgid "Deblois" -#~ msgstr "데블로이스" +#~ msgid "West Greenwich" +#~ msgstr "웨스트 그린위치" -#~ msgid "Dedham" -#~ msgstr "데드햄" +#~ msgid "West Gardiner" +#~ msgstr "웨스트 가디너" -#~ msgid "Dartmouth" -#~ msgstr "다트무스" +#~ msgid "West Haven" +#~ msgstr "웨스트 헤이븐" -#~ msgid "Dayton" -#~ msgstr "데이톤" +#~ msgid "West Hartford" +#~ msgstr "웨스트 하트포드" -#~ msgid "Danby" -#~ msgstr "댄비" +#~ msgid "West Paris" +#~ msgstr "웨스트 패리스" -#~ msgid "" -#~ "You just put on an article of clothing that protects against the " -#~ "environment.\n" -#~ "The most common and imporant are respiratory devices, which will protect " -#~ "you\n" -#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" -#~ "However, they also make it a little harder to breath when running, so " -#~ "you'll\n" -#~ "move more slowly. To check encumberance, press @." -#~ msgstr "" -#~ "지금 착용한것은 환경에 대한 보호력을 주는 의류입니다.\n" -#~ "가장 일반적이고 중요한 것은 호흡장치 입니다. 연기, 공기 흡입 독성물질\n" -#~ "혹은 독성 유기물과 다른 일반적인 위험요소를 막아줍니다. 하지만\n" -#~ "달릴때 호흡이 힘들어지기 때문에 움직임이 좀 느려집니다.\n" -#~ "방해도를 확인하려면 '@' 를 누르면 됩니다." +#~ msgid "West Newbury" +#~ msgstr "웨스트 뉴버리" -#~ msgid "" -#~ "You just put on an article of clothing that provides ample storage " -#~ "space.\n" -#~ "This will allow you to carry much more stuff, but be aware that there is " -#~ "also\n" -#~ "a limit on the weight you can carry which depends on strength. The item " -#~ "you\n" -#~ "put on also encumbered your torso. This will make combat a little more\n" -#~ "difficult. To check encumberance, press @." -#~ msgstr "" -#~ "지금 착용한것은 저장 공간을 늘려주는 의류입니다.\n" -#~ "좀더 많은 물건을 휴대할수 있게 되지만, 힘에 따라서 최대 중량 한도 내에서\n" -#~ "휴대가 가능합니다. 이런 종류의 의류들은 상체에 방해도를 주며\n" -#~ "전투가 좀더 힘들어집니다. 방해도는 '@' 로 확인 가능합니다." +#~ msgid "West Rutland" +#~ msgstr "웨스트 럿랜드" -#~ msgid "Danbury" -#~ msgstr "댄 버리" +#~ msgid "Wells" +#~ msgstr "웰스" -#~ msgid "Cushing" -#~ msgstr "커싱" +#~ msgid "Wellington" +#~ msgstr "웰링턴" -#~ msgid "Cummington" -#~ msgstr "커밍턴" +#~ msgid "West Warwick" +#~ msgstr "웨스트 워윅" -#~ msgid "Cumberland" -#~ msgstr "컴벌 랜드" +#~ msgid "Westbrook" +#~ msgstr "웨스트브룩" -#~ msgid "Dalton" -#~ msgstr "달튼" +#~ msgid "West Springfield" +#~ msgstr "웨스트 스프링필드" -#~ msgid "Dallas Plantation" -#~ msgstr "달라스 농장" +#~ msgid "West Stockbridge" +#~ msgstr "웨스트 스톡브릿지" -#~ msgid "Cyr Plantation" -#~ msgstr "시르 농장" +#~ msgid "West Tisbury" +#~ msgstr "웨스트 티스버리" -#~ msgid "Damariscotta" -#~ msgstr "다 마리스 코타" +#~ msgid "Westerly" +#~ msgstr "웨스터리" -#~ msgid "Croydon" -#~ msgstr "크로이던" +#~ msgid "Westborough" +#~ msgstr "웨스트보로우" -#~ msgid "Crystal" -#~ msgstr "크리스탈" +#~ msgid "West Windsor" +#~ msgstr "웨스트 윈저" -#~ msgid "Cromwell" -#~ msgstr "크롬웰" +#~ msgid "Trenton" +#~ msgstr "트렌턴" -#~ msgid "Cornish" -#~ msgstr "코니쉬" +#~ msgid "Trescott" +#~ msgstr "트레스콧" -#~ msgid "Corinth" -#~ msgstr "코린스" +#~ msgid "Tremont" +#~ msgstr "트레몬트" -#~ msgid "Cranberry Isles" -#~ msgstr "크렌베리 아이리쉬" +#~ msgid "Trumbull" +#~ msgstr "트럼벨" -#~ msgid "Cornville" -#~ msgstr "콘빌" +#~ msgid "Truro" +#~ msgstr "트루로" -#~ msgid "Cornwall" -#~ msgstr "콘월" +#~ msgid "Critical! " +#~ msgstr "치명타! " -#~ msgid "Coventry" -#~ msgstr "코벤트리" +#~ msgid "Waltham" +#~ msgstr "왈스헴" -#~ msgid "Craftsbury" -#~ msgstr "크레프트스베리" +#~ msgid "Walpole" +#~ msgstr "왈폴" -#~ msgid "Cranston" -#~ msgstr "크렌스턴" +#~ msgid "Wardsboro" +#~ msgstr "워즈보로" -#~ msgid "Crawford" -#~ msgstr "크라우포드" +#~ msgid "Wallagrass" +#~ msgstr "왈라그라스" -#~ msgid "Columbia Falls" -#~ msgstr "컬럼비아 폴스" +#~ msgid "MEDICINE/DRUGS" +#~ msgstr "의약품/약물 :" -#~ msgid "Colrain" -#~ msgstr "콜레인" +#~ msgid "Westport" +#~ msgstr "웨스트포트" -#~ msgid "Colebrook" -#~ msgstr "콜브룩" +#~ msgid "Westmoreland" +#~ msgstr "웨스트모어랜드" -#~ msgid "Columbia" -#~ msgstr "컬럼비아" +#~ msgid "Westwood" +#~ msgstr "웨스트우드" -#~ msgid "Conway" -#~ msgstr "콘웨이" +#~ msgid "Washburn" +#~ msgstr "워시본" -#~ msgid "Concord" -#~ msgstr "콩코드" +#~ msgid "Topsfield" +#~ msgstr "탑스필드" -#~ msgid "Corinna" -#~ msgstr "코리나" +#~ msgid "Topsham" +#~ msgstr "탑스햄" -#~ msgid "Coplin Plantation" -#~ msgstr "캅린 플랜테이션Coplin Plantation" +#~ msgid "Tolland" +#~ msgstr "톨랜드" -#~ msgid "Colchester" -#~ msgstr "콜체스터" +#~ msgid "Townshend" +#~ msgstr "타운스핸드" -#~ msgid "Cohasset" -#~ msgstr "코하셋" +#~ msgid "Torrington" +#~ msgstr "토링턴" -#~ msgid "Chilmark" -#~ msgstr "칠마크" +#~ msgid "Townsend" +#~ msgstr "타운샌드" -#~ msgid "China" -#~ msgstr "차이나" +#~ msgid "Tilton" +#~ msgstr "틸턴" -#~ msgid "Clinton" -#~ msgstr "클린턴" +#~ msgid "Thornton" +#~ msgstr "쏜턴" -#~ msgid "Codyville Plantation" -#~ msgstr "코디빌 플랜테이션" +#~ msgid "Thomaston" +#~ msgstr "토마스톤" -#~ msgid "Clarksville" -#~ msgstr "클락스빌" +#~ msgid "Tinmouth" +#~ msgstr "틴마우스" -#~ msgid "Clifton" -#~ msgstr "클리프턴" +#~ msgid "Wakefield" +#~ msgstr "웨이크필드" -#~ msgid "Clarendon" -#~ msgstr "클라렌든" +#~ msgid "Vershire" +#~ msgstr "버셔" -#~ msgid "Clarksburg" -#~ msgstr "클락스버그" +#~ msgid "Uxbridge" +#~ msgstr "억스브리지" -#~ msgid "Chittenden" -#~ msgstr "치텐던" +#~ msgid "Upton" +#~ msgstr "업튼" -#~ msgid "Claremont" -#~ msgstr "클레어몬트" +#~ msgid "Waldo" +#~ msgstr "왈도" -#~ msgid "Chesterfield" -#~ msgstr "체스터필드" +#~ msgid "Walden" +#~ msgstr "월든" -#~ msgid "Chichester" -#~ msgstr "치체스터" +#~ msgid "Victory" +#~ msgstr "빅토리" -#~ msgid "Chicopee" -#~ msgstr "치코피" +#~ msgid "Vienna" +#~ msgstr "비엔나" -#~ msgid "Chelsea" -#~ msgstr "첼시" +#~ msgid "Wade" +#~ msgstr "웨이드" -#~ msgid "Cherryfield" -#~ msgstr "체리필드" +#~ msgid "Troy" +#~ msgstr "트로이" -#~ msgid "Cheshire" -#~ msgstr "체셔" +#~ msgid "Whitefield" +#~ msgstr "화이트필드" -#~ msgid "Chester" -#~ msgstr "체스터" +#~ msgid "Whitman" +#~ msgstr "휘트먼" -#~ msgid "Chelmsford" -#~ msgstr "쳄스포드" +#~ msgid "Wales" +#~ msgstr "웨일즈" -#~ msgid "Chebeague Island" -#~ msgstr "샤비그 아일랜드" +#~ msgid "Waldoboro" +#~ msgstr "왈도보로" -#~ msgid "Chesterville" -#~ msgstr "체스터빌" +#~ msgid "Wallingford" +#~ msgstr "월링포드" -#~ msgid "Center Harbor" -#~ msgstr "센터 하버" +#~ msgid "Westmore" +#~ msgstr "웨스트모어" -#~ msgid "Centerville" -#~ msgstr "센터빌" +#~ msgid "Westminster" +#~ msgstr "웨스트민스터" -#~ msgid "Charlestown" -#~ msgstr "찰리스타운" +#~ msgid "Westford" +#~ msgstr "웨스트포드" -#~ msgid "Charleston" -#~ msgstr "찰레스턴" +#~ msgid "Westfield" +#~ msgstr "웨스트필드" -#~ msgid "Charlemont" -#~ msgstr "찰레몬트" +#~ msgid "Winchester" +#~ msgstr "윈체스터" -#~ msgid "Chapman" -#~ msgstr "챕맨" +#~ msgid "Esc or q - Return to game " +#~ msgstr "Esc 또는 q - 돌아가기 " -#~ msgid "Chaplin" -#~ msgstr "채플린" +#~ msgid "L - List notes " +#~ msgstr "좌 - 노트 리스트 " -#~ msgid "Central Falls" -#~ msgstr "센트럴 폴" +#~ msgid "D - Delete a note " +#~ msgstr "D - 메모 삭제 " -#~ msgid "Chatham" -#~ msgstr "채텀" +#~ msgid "/ - Search " +#~ msgstr "/ - 검색 " -#~ msgid "Charlton" -#~ msgstr "찰턴" +#~ msgid "N - Add/Edit a note " +#~ msgstr "N - 메모 추가/수정 " -#~ msgid "Carthage" -#~ msgstr "카르타고" +#~ msgid "0 - Center map on character" +#~ msgstr "0 - 캐릭터 중심" -#~ msgid "Carroll Plantation" -#~ msgstr "캐롤 플랜테이션" +#~ msgid "" +#~ "If true, shift the view toward the selected item if it is outside of your " +#~ "current viewport." +#~ msgstr "" +#~ "이 옵션을 켜면, 현재 시야를 벗어난 경우 선택한 물품으로 시야를 이동합니다." -#~ msgid "Carroll" -#~ msgstr "캐롤" +#~ msgid "Use Tiles" +#~ msgstr "타일 사용" -#~ msgid "Caswell" -#~ msgstr "카스웰" +#~ msgid "" +#~ "If true, replaces some TTF rendered text with Tiles. Only applicable on " +#~ "SDL builds. Requires restart." +#~ msgstr "" +#~ "이 옵션을 켜면, 몇몇 트루타입 폰트 랜더링된 문자를 그래픽 타일로 대체합니" +#~ "다. SDL 버젼에서만 적용됩니다. 재시작 필요." -#~ msgid "Castle Hill" -#~ msgstr "캐슬 힐" +#~ msgid "Auto Pickup 0 Vol light items" +#~ msgstr "0 부피 물품 자동 줍기" -#~ msgid "Castleton" -#~ msgstr "캐슬턴" +#~ msgid "Delete world upon player death." +#~ msgstr "캐릭터 사망시 월드 삭제" -#~ msgid "Casco" -#~ msgstr "카스코" +#~ msgid "" +#~ "Although you never got your driver's license, you've always loved cars. " +#~ "You start with a wrench, a toolbelt, and some car-related reading " +#~ "material." +#~ msgstr "" +#~ "운전면허는 없지만, 그래도 당신은 항상 자동차를 사랑해왔습니다. 렌치, 연장" +#~ "벨트, 자동차 관련 물품을 소지하고 시작합니다." -#~ msgid "Castine" -#~ msgstr "캐스틴" +#~ msgid "" +#~ "Your flexible outlook on law has ensured your survival, but now what? You " +#~ "start with cargo pants, a hoodie, \"sundries\", and one additional level " +#~ "of melee." +#~ msgstr "" +#~ "당신의 법적인 면에서 유연한 태도는 그동안의 삶을 살아오는데 도움이 됐습니" +#~ "다만 이젠 어쩔 건가요? 카고 바지, 후드 티, \"잡동사니\", 근접공격 1 레벨 " +#~ "추가 보너스와 함께 시작합니다." -#~ msgid "Carver" -#~ msgstr "카버" +#~ msgid "" +#~ "You're a high school drop-out with one goal in mind: to join the " +#~ "military. You finally got in, and now it's hell on Earth in cataclysmic " +#~ "proportions. You start out with some military gear, and a level in " +#~ "survival and firearms." +#~ msgstr "" +#~ "당신은 한 가지 목표를 위해 고등학교를 그만뒀습니다. 입대 말이죠. 입대는 했" +#~ "지만 대격변이 일어나 지구에 지옥이 강림하고 말았습니다. 몇 가지 군용품을 " +#~ "소지하고, 생존과 화기 1 레벨 보너스와 함께 시작합니다." -#~ msgid "Cary Plantation" -#~ msgstr "카리 플랜테이션" +#~ msgid "" +#~ "You lived on the streets your whole life because you would rather have a " +#~ "bottle of whiskey than a roof over your head. You start with a strong " +#~ "alcohol addiction and a pair of pants." +#~ msgstr "" +#~ "당신은 지붕 밑보다 위스키 한 병을 선호했기에 평생을 길에서 살았습니다. 강" +#~ "력한 알콜 중독 증상과 바지 한 벌을 갖고 시작합니다." -#~ msgid "Cape Elizabeth" -#~ msgstr "케이프 엘리자베스" +#~ msgid "" +#~ "You used to work at the home depot, and you did a lot of home renovations " +#~ "yourself. You start with steel toe boots, a tool belt, a hammer, and a " +#~ "level in construction." +#~ msgstr "" +#~ "당신은 자택 창고에서 종종 작업을 하곤 했으며 직접 집을 개조한 일도 많았습" +#~ "니다. 철을 덧댄 부츠와 연장 벨트, 망치, 건설 스킬 1 레벨을 갖고 시작합니" +#~ "다." -#~ msgid "Canton" -#~ msgstr "캔톤" +#~ msgid "" +#~ "You were in the middle of a nice shower when the cataclysm struck! You " +#~ "start buck naked." +#~ msgstr "" +#~ "하필이면 대격변이라는게 당신이 기분좋게 샤워하던 중에 발생했습니다! 홀딱 " +#~ "벗고 게임을 시작합니다." -#~ msgid "Caribou" -#~ msgstr "카리부" +#~ msgid "" +#~ "You used to work for some small-time business owner doing minor " +#~ "electrical work, and you just so happened to be working on an evac " +#~ "shelter when the cataclysm struck. You start with a level in electronics, " +#~ "and a tool belt." +#~ msgstr "" +#~ "당신은 작은 전기 계통 가게에서 일하고 있었고, 대피소에서 일을 하던 중 대격" +#~ "변이 일어났습니다. 전자공학 1 레벨, 연장 벨트를 갖고 시작합니다." -#~ msgid "Caratunk" -#~ msgstr "카라텅크" +#~ msgid "" +#~ "You spent most of your life on a Harley, and it's only natural you spend " +#~ "the rest of it riding one. You start with some biker clothes." +#~ msgstr "" +#~ "당신은 인생의 대부분을 할리(오토바이)에 투자했고, 투자하고 남은 인생은 이" +#~ "걸 타는 것에 투자했습니다. 바이커 의상을 갖고 시작합니다." -#~ msgid "Carmel" -#~ msgstr "카멜" +#~ msgid "whump." +#~ msgstr "쿵." -#~ msgid "Carlisle" -#~ msgstr "칼라일" +#~ msgid "wham!" +#~ msgstr "꽝!" -#~ msgid "Carrabassett Valley" -#~ msgstr "카라바셋 벨리" +#~ msgid "whack!" +#~ msgstr "철썩!" -#~ msgid "Candia" -#~ msgstr "칸디아" +#~ msgid "whump!" +#~ msgstr "쿵!" -#~ msgid "Canterbury" -#~ msgstr "켄터베리" +#~ msgid "crunch." +#~ msgstr "으드득." -#~ msgid "Canaan" -#~ msgstr "캐이넌" +#~ msgid "Switch between Km/h and mph." +#~ msgstr "Km/h 와 mph를 바꿉니다." -#~ msgid "Buxton" -#~ msgstr "벅스턴" +#~ msgid "" +#~ "You've worked the streets since you were a kid, and now you use your " +#~ "street skills to survive. You start with a Glock 19 and some of your " +#~ "\"goods\", but no bullets." +#~ msgstr "" +#~ "당신은 어려서부터 길에서 자랐고, 길에서 터득한 기술로 살아갑니다. 글록 19 " +#~ "권총과 몇 가지 당신의 \"물품\"을 갖고 시작합니다만, 총알은 없습니다." -#~ msgid "Byron" -#~ msgstr "바이런" +#~ msgid "" +#~ "You've always loved tinkering with stuff. You start with a tool belt, and " +#~ "know a little bit about mechanics, tailoring, electronics, and carpentry." +#~ msgstr "" +#~ "당신은 줄곧 물건을 다뤄보는 걸 좋아했습니다. 연장벨트, 약간의 기계공학, 재" +#~ "봉, 전자공학, 목공 지식을 갖고 시작합니다." -#~ msgid "Calais" -#~ msgstr "칼레" +#~ msgid "" +#~ "You used to be a ballroom dancer before the cataclysm, and now you use " +#~ "your skills to save your life. You start with a tuxedo and a level in " +#~ "dodging." +#~ msgstr "" +#~ "대격변 이전의 당신은 사교춤을 추곤 했었으며, 이 기술을 활용해 생존했습니" +#~ "다. 턱시도 정장과 회피 1 레벨 보너스를 받습니다." -#~ msgid "Camden" -#~ msgstr "캄덴" +#~ msgid "" +#~ "You worked for a small-time security company guarding local businesses. " +#~ "You start with a security outfit and a flashlight." +#~ msgstr "" +#~ "당신은 작은 경비 업체에서 지역 상가를 지키는 일을 했었습니다. 경비복과 손" +#~ "전등을 갖고 시작합니다." -#~ msgid "Campton" -#~ msgstr "캄프튼" +#~ msgid "" +#~ "You haven't seen this much blood since the war. The whole world's gone " +#~ "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay " +#~ "for what they've done. You start with a cane and your pocketwatch." +#~ msgstr "" +#~ "당신은 전쟁 이후로 이 정도로 대량의 피를 본 적이 없습니다. 세상이 미쳐 돌" +#~ "아가고 있습니다! 사람들이 당신의 손자를 먹었다구요! 망할.. 당신은 놈들에" +#~ "게 똑같이 갚아줄 겁니다. 지팡이와 회중 시계를 갖고 시작합니다." -#~ msgid "Cabot" -#~ msgstr "카봇" +#~ msgid "%s %s" +#~ msgstr "%s %s" -#~ msgid "Cambridge" -#~ msgstr "캠브리지" +#~ msgid "Evelyn" +#~ msgstr "에블린" -#~ msgid "Burrillville" -#~ msgstr "버릴빌" +#~ msgid "" +#~ "You were one of those guys who watched one too many survivalist shows. " +#~ "You start with a backpack, a blazer, and some survival skills." +#~ msgstr "" +#~ "당신은 생존 관련 TV 프로그램을 너무 많이 본사람들중 하나입니다. 배낭, 블레" +#~ "이저, 약간의 서바이벌 기술을 갖고 시작합니다." -#~ msgid "Burnham" -#~ msgstr "번햄" +#~ msgid "" +#~ "Being a paramedic put you in a bad spot when it all ended. You had to " +#~ "fight your way out of a hospital full of infected to get to the shelter. " +#~ "You start with a few related tools and some skill in first aid." +#~ msgstr "" +#~ "당신은 세상이 끝장날 때 구급대원으로서 영 좋지 않은 곳에 있었습니다. 피난" +#~ "처로 가기위해 병원에 가득찬 좀비와 싸워야 했습니다. 약간의 응급 치료 기술" +#~ "과 관련 도구를 소지하고 시작합니다." -#~ msgid "Burlington" -#~ msgstr "벌링턴" +#~ msgid "" +#~ "You were on your way to collect your check, when your pimp tried to kill " +#~ "you. You wish that it wasn't a common occurence. You start with a skirt, " +#~ "tank top, a pair of high heels, your stash, and a strong crack addiction." +#~ msgstr "" +#~ "당신의 몪을 받으려고 갔는데 포주가 죽이려고 달려들었습니다. 이런일이 자주 " +#~ "일어나지 않았으면 하고 바랬지만... 셔츠, 탱크탑, 하이힐 한쌍, 약 주머니" +#~ "와 심한 크랙 중독을 가지고 시작합니다." -#~ msgid "Brookton" -#~ msgstr "브룩튼" +#~ msgid "" +#~ "Before the Apocalypse, you turned to Heroin to soothe your many " +#~ "problems.\n" +#~ "Now, your habit is your only comfort and your only drive." +#~ msgstr "" +#~ "당신은 대재앙 전에는 여러 문제를 잊기위해 헤로인을 사용했지만, 지금은 헤로" +#~ "인만이 위안이며 목표가 되었습니다." -#~ msgid "Brownfield" -#~ msgstr "브라운필드" +#~ msgid "" +#~ "This is an advertisement for Robert's Universal Robotics brand law " +#~ "enforcement robots. It shows a picture of tripod robot incinerating a mob " +#~ "of looters and stepping over charred and smoking corpses. The caption " +#~ "reads: \"Built to Protect. Programmed to Serve.\"" +#~ msgstr "" +#~ "로버트 유니버셜 로봇 브랜드의 경찰 로봇 광고입니다. 발이 3개 달린 로봇이 " +#~ "랍스터 떼를 소각하며 연기나는 랍스터를 밟는 사진입니다. \"보호를 위해 만들" +#~ "어져, 공익을 위해 프로그래밍 되다.\" 라고 써있습니다." -#~ msgid "Bucksport" -#~ msgstr "벅스포드" +#~ msgid "" +#~ "A unified power supply, or UPS, is a device developed jointly by military " +#~ "and scientific interests for use in combat and the field. The UPS is " +#~ "designed to power armor and some guns, but drains batteries quickly." +#~ msgstr "" +#~ "통합 전원장치, 혹은 통칭 UPS 는 군과 과학 단체에서 전투 또는 현장에서 사용" +#~ "하기 위해 개발한 장치입니다. UPS는 파워 아머나 몇몇 특수한 총기를 위해 설" +#~ "계되었으며, 배터리를 빠르게 소모합니다." -#~ msgid "Brooksville" -#~ msgstr "브룩스빌" +#~ msgid "" +#~ "If true, bright backgrounds are not used--some consoles are not " +#~ "compatible." +#~ msgstr "밝은 배경이 사용되지 않습니다--일부 단말기는 호환되지 않습니다." -#~ msgid "Buckfield" -#~ msgstr "벅필드" +#~ msgid "crak" +#~ msgstr "쩌억" -#~ msgid "Brownville" -#~ msgstr "브라운빌" +#~ msgid "clang!" +#~ msgstr "뗑그렁!" -#~ msgid "Brunswick" -#~ msgstr "브런즈윜" +#~ msgid "plunk." +#~ msgstr "쿵." -#~ msgid "Brownington" -#~ msgstr "브라우닝튼" +#~ msgid "whunk!" +#~ msgstr "터엉!" -#~ msgid "Burke" -#~ msgstr "버크" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Buckland" -#~ msgstr "벅랜드" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Brighton" -#~ msgstr "브라잇턴" +#~ msgid "%s's" +#~ msgstr "%s의 것" -#~ msgid "Bridport" -#~ msgstr "브리드포트" +#~ msgid "you" +#~ msgstr "당신" -#~ msgid "Bridgton" -#~ msgstr "브리지튼" +#~ msgid "" +#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." +#~ msgstr "확인할 때 Y/ N으로 선택하고 y/n은 사용되지 않습니다." -#~ msgid "Brookline" -#~ msgstr "브룩클린" +#~ msgid "%s peck %s!" +#~ msgstr "%s는(은) %s를(을) 쪼았다!" -#~ msgid "Bristol" -#~ msgstr "브리스톨" +#~ msgid " but do no damage." +#~ msgstr " 그러나 아무런 피해도 주지 못했다." -#~ msgid "Brockton" -#~ msgstr "브룩턴" +#~ msgid "OTD" +#~ msgstr "OTD" -#~ msgid "Brighton Plantation" -#~ msgstr "브라잇턴 플랜테이션" +#~ msgid "metal screeching!" +#~ msgstr "끼기기기긱!" -#~ msgid "Brimfield" -#~ msgstr "브림필드" +#~ msgid "%s breaks the grab!" +#~ msgstr "%s가(이) 잡기를 풀었습니다!" -#~ msgid "Brooklin" -#~ msgstr "브루클린" +#~ msgid "%s break the grab!" +#~ msgstr "%s가(이) 잡기를 풀었습니다!" -#~ msgid "Brookfield" -#~ msgstr "브룩필드" +#~ msgid " drains %s body heat!" +#~ msgstr "가(이) %s의 체온을 빼앗았다!" -#~ msgid "Bridgeport" -#~ msgstr "브릿지포트" +#~ msgid "Tail whip! Viper Combo Intiated!" +#~ msgstr "꼬리치기! 독사권 초식 시작!" -#~ msgid "Brewster" -#~ msgstr "브루워스터" +#~ msgid "%s sinks %s fangs into %s!" +#~ msgstr "%s가(이) %s 손톱을 %s에 박아넣었습니다!" -#~ msgid "Bridgewater" -#~ msgstr "브릿지워터" +#~ msgid "%s sink %s fangs into %s!" +#~ msgstr "%s가(이) %s 손톱을 %s에 박아넣었습니다!" -#~ msgid "Bremen" -#~ msgstr "브레멘" +#~ msgid "ker-rash!" +#~ msgstr "카-라쉬!" -#~ msgid "Brattleboro" -#~ msgstr "브래틀보로" +#~ msgid "%s slices %s with %s mandibles!" +#~ msgstr "%s가(이) %s를(을) %s으로 잘라버렸다!" -#~ msgid "Brewer" -#~ msgstr "브루워" +#~ msgid "%s slice %s with %s mandibles!" +#~ msgstr "%s가(이) %s를(을) %s으로 잘라버렸다!" -#~ msgid "Brentwood" -#~ msgstr "브렌트우드" +#~ msgid "%s kick %s with %s hooves!" +#~ msgstr "%s가(이) %s를(을) %s 발굽으로 찼다!" -#~ msgid "Bradley" -#~ msgstr "브래들리" +#~ msgid "%s headbutt %s with %s horns!" +#~ msgstr "%s가(이) %s를(을) %s 뿔로 받았다!" -#~ msgid "Braintree" -#~ msgstr "브레인트리" +#~ msgid "%s kicks %s with %s hooves!" +#~ msgstr "%s가(이) %s를(을) %s 발굽으로 찼다!" -#~ msgid "Branford" -#~ msgstr "브란포드" +#~ msgid "%s headbutt %s with %s curled horns!" +#~ msgstr "%s가(이) %s를(을) %s 휜 뿔로 받았다!" -#~ msgid "Bourne" -#~ msgstr "본" +#~ msgid "%s headbutts %s with %s horns!" +#~ msgstr "%s가(이) %s를(을) %s 뿔로 받았다!" -#~ msgid "Bowdoin" -#~ msgstr "보우다인" +#~ msgid "%s stab %s with %s pointed horns!" +#~ msgstr "%s가(이) %s를(을) %s 뾰족한 뿔로 찍었다!" -#~ msgid "Bow" -#~ msgstr "보우" +#~ msgid "%s headbutts %s with %s curled horns!" +#~ msgstr "%s가(이) %s를(을) %s 휜 뿔로 받았다!" -#~ msgid "Boylston" -#~ msgstr "보일스턴" +#~ msgid "%s stabs %s with %s pointed horns!" +#~ msgstr "%s가(이) %s를(을) %s 뾰족한 뿔로 찍었다!" -#~ msgid "Bozrah" -#~ msgstr "보즈라" +#~ msgid "%s slaps %s with %s tentacle!" +#~ msgstr "%s가(이) %s를(을) %s 촉수로 쳤다!!" -#~ msgid "Bradford" -#~ msgstr "브래드포드" +#~ msgid "%s slap %s with %s tentacle!" +#~ msgstr "%s가(이) %s를(을) %s 촉수로 쳤다!!" -#~ msgid "Bowdoinham" -#~ msgstr "보우다인햄" +#~ msgid "%s hits %s with %s tail!" +#~ msgstr "%s가(이) %s를(을) %s 꼬리로 쳤다!" -#~ msgid "Bowerbank" -#~ msgstr "보워뱅크" +#~ msgid "%s hit %s with %s tail!" +#~ msgstr "%s가(이) %s를(을) %s 꼬리로 쳤다!" -#~ msgid "Boxborough" -#~ msgstr "박스버러" +#~ msgid "%s stings %s with %s tail!" +#~ msgstr "%s가(이) %s를(을) %s 꼬리로 찍었다!" -#~ msgid "Boxford" -#~ msgstr "박스포드" +#~ msgid "%s sting %s with %s tail!" +#~ msgstr "%s가(이) %s를(을) %s 꼬리로 찍었다!" -#~ msgid "Boston" -#~ msgstr "보스턴" +#~ msgid "%s butts %s with %s antlers!" +#~ msgstr "%s가(이) %s를(을) %s 사슴뿔로 받았다!" -#~ msgid "Boscawen" -#~ msgstr "보스카웬" +#~ msgid "%s butt %s with %s antlers!" +#~ msgstr "%s가(이) %s를(을) %s 사슴뿔로 받았다!" -#~ msgid "Boothbay Harbor" -#~ msgstr "부스베이 하버" +#~ msgid "Default: %d - Min: %d, Max %d" +#~ msgstr "기본 : %d - 최저 : %d, 최대 : %d" -#~ msgid "Boothbay" -#~ msgstr "부스베이" +#~ msgid "Default: %f - Min: %f, Max %f" +#~ msgstr "기본 : %f - 최저 : %f, 최대 : %f" -#~ msgid "Bolton" -#~ msgstr "볼턴" +#~ msgid "sealed jar of canned apple" +#~ msgstr "밀봉 유리병-사과(canned apple)" -#~ msgid "Blue Hill" -#~ msgstr "블루 힐" +#~ msgid "" +#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " +#~ "them quickly before the start to explode." +#~ msgstr "" +#~ "불을 붙인 폭죽 25개 묶음입니다. 도선이 타고 있습니다. 터지기 시작하기 전" +#~ "에 빨리 던져야 합니다." -#~ msgid "Bloomfield" -#~ msgstr "블룸필드" +#~ msgid "" +#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " +#~ "before it explodes." +#~ msgstr "" +#~ "도선에 불이 붙은 폭죽입니다. 도선이 타고 있습니다. 터지기 전에 빨리 던져야" +#~ "합니다." -#~ msgid "Blaine" -#~ msgstr "블레인" +#~ msgid "Mass: kg" +#~ msgstr "무게(kg) :" -#~ msgid "Blandford" -#~ msgstr "블랜드포드" +#~ msgid "Safe speed: Km/h" +#~ msgstr "안전속도(Km/h) :" -#~ msgid "Blanchard" -#~ msgstr "블랜챠드" +#~ msgid "Safe speed: mph" +#~ msgstr "안전속도(mph) :" -#~ msgid "Blackstone" -#~ msgstr "블랙스톤" +#~ msgid "Top speed: Km/h" +#~ msgstr "최고속도(Km/h) :" -#~ msgid "Bernardston" -#~ msgstr "버나즈턴" +#~ msgid "Top speed: mph" +#~ msgstr "최고속도(mph) :" -#~ msgid "Berwick" -#~ msgstr "버윜" +#~ msgid "Accel.: Kmh/t" +#~ msgstr "가속력(Km/h) :" -#~ msgid "Bethany" -#~ msgstr "베서니" +#~ msgid "Accel.: mph/t" +#~ msgstr "가속력(mph/t) :" -#~ msgid "Biddeford" -#~ msgstr "비드포드" +#~ msgid "Wheels: " +#~ msgstr "바퀴 수 : " -#~ msgid "Bethlehem" -#~ msgstr "베들레햄" +#~ msgid " +Dodge" +#~ msgstr " +회피" -#~ msgid "Bethel" -#~ msgstr "베살" +#~ msgid " +Attack" +#~ msgstr " +공격" -#~ msgid "Bingham" -#~ msgstr "빙햄" +#~ msgid ". Requires Unarmed Skill of " +#~ msgstr ": 비무장 기술 필요" -#~ msgid "Billerica" -#~ msgstr "빌러리카" +#~ msgid "" +#~ "Originating in Israel, Krav Maga is based on taking down an enemy quickly " +#~ "and\n" +#~ "effectively. It focuses on applicable attacks rather than showy or " +#~ "complex\n" +#~ "moves. Popular among police and armed forces everywhere." +#~ msgstr "" +#~ "이스라엘에서 탄생한 크라브 마가는 적을 빠르고 효과적으로 제압하는 것이 기" +#~ "초를 두고 있습니다. 화려하고 복잡한 기술보단 실용적이고 응용 가능한 기술" +#~ "에 초점을 둡니다. 경찰과 무장병력들에게 인기가 좋습니다." -#~ msgid "Beverly" -#~ msgstr "베버리" +#~ msgid " for %d damage." +#~ msgstr " %d 피해를 입혔다." -#~ msgid "Benedicta" -#~ msgstr "베네딕타" +#~ msgid "%1$s hit %4$s" +#~ msgstr "%1$s이 %4$s 를(을) 쳐서" -#~ msgid "Bennington" -#~ msgstr "베닝턴" +#~ msgid "%1$s hits %4$s" +#~ msgstr "%1$s이 %4$s 를(을) 쳐서" -#~ msgid "Berkley" -#~ msgstr "버클리" +#~ msgid "%1$s impale %4$s" +#~ msgstr "%1$s가(이) %4$s를(을) 꿰뚫어" -#~ msgid "Berkshire" -#~ msgstr "버크셔" - -#~ msgid "Berlin" -#~ msgstr "베를린" - -#~ msgid "Benson" -#~ msgstr "벤슨" +#~ msgid "%1$s impales %4$s" +#~ msgstr "%1$s가(이) %4$s를(을) 꿰뚫어" -#~ msgid "Belvidere" -#~ msgstr "벨비드리" +#~ msgid "%1$s wraps %2$s %3$s around %4$s" +#~ msgstr "%1$s 조였다 %2$s %3$s 주변을 %4$s" -#~ msgid "Belmont" -#~ msgstr "벨몬트" +#~ msgid "%1$s swing %2$s %3$s wide at %4$s" +#~ msgstr "%1$s 휘둘렀다 %2$s %3$s 주변을 %4$s" -#~ msgid "Benton" -#~ msgstr "벤턴" +#~ msgid "%1$s swings %2$s %3$s wide at %4$s" +#~ msgstr "%1$s 휘둘렀다 %2$s %3$s 주변을 %4$s" -#~ msgid "Bellingham" -#~ msgstr "벨링햄" +#~ msgid "%1$s jabs %2$s %3$s at %4$s" +#~ msgstr "%1$s 잽을 %2$s %3$s 의 %4$s" -#~ msgid "Beacon Falls" -#~ msgstr "베이컨 폴스" +#~ msgid "%1$s slam %2$s %3$s against %4$s" +#~ msgstr "%1$s 돌진 %2$s %3$s 의 %4$s" -#~ msgid "Beals" -#~ msgstr "빌스" +#~ msgid "%1$s slams %2$s %3$s against %4$s" +#~ msgstr "%1$s 돌진 %2$s %3$s 의 %4$s" -#~ msgid "Bath" -#~ msgstr "베스" +#~ msgid "%1$s jab %2$s %3$s at %4$s" +#~ msgstr "%1$s 잽을 %2$s %3$s 의 %4$s" -#~ msgid "Belfast" -#~ msgstr "벨페스트" +#~ msgid "%1$s sweeps %2$s %3$s at %4$s" +#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" -#~ msgid "Belchertown" -#~ msgstr "벨쳐타운" +#~ msgid "%1$s sweep %2$s %3$s at %4$s" +#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" -#~ msgid "Belgrade" -#~ msgstr "벨그레이드" +#~ msgid "%1$s wrap %2$s %3$s around %4$s" +#~ msgstr "%1$s 조였다 %2$s %3$s 주변을 %4$s" -#~ msgid "Becket" -#~ msgstr "베킷" +#~ msgid "%1$s uses %2$s %3$s to toss %4$s" +#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" -#~ msgid "Beaver Cove" -#~ msgstr "비버 코브" +#~ msgid "%1$s use %2$s %3$s to toss %4$s" +#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" -#~ msgid "Bedford" -#~ msgstr "베드포드" +#~ msgid "%1$s hacks %4$s" +#~ msgstr "%1$s 베었다 %4$s" -#~ msgid "Beddington" -#~ msgstr "베딩턴" +#~ msgid "%1$s pierce %4$s" +#~ msgstr "%1$s 관통 %4$s" -#~ msgid "Barnstead" -#~ msgstr "번스테드" +#~ msgid "%1$s stab %4$s" +#~ msgstr "%1$s 찌름 %4$s" -#~ msgid "Barre" -#~ msgstr "바레" +#~ msgid "%1$s pierces %4$s" +#~ msgstr "%1$s 관통 %4$s" -#~ msgid "Barnet" -#~ msgstr "버넷" +#~ msgid "%1$s poke %4$s" +#~ msgstr "%1$s 꿰뚫다 %4$s" -#~ msgid "Barnstable" -#~ msgstr "번스테블" +#~ msgid "%1$s stabs %4$s" +#~ msgstr "%1$s 찌름 %4$s" -#~ msgid "Barrington" -#~ msgstr "베링턴" +#~ msgid "%1$s hack %4$s" +#~ msgstr "%1$s 베었다 %4$s" -#~ msgid "Bartlett" -#~ msgstr "버트렛" +#~ msgid "%1$s pokes %4$s" +#~ msgstr "%1$s 꿰뚫다 %4$s" -#~ msgid "Barton" -#~ msgstr "바턴" +#~ msgid "%1$s clobbers %4$s" +#~ msgstr "%1$s 찍었다 %4$s" -#~ msgid "Baring Plantation" -#~ msgstr "베어링 플렌테이션" +#~ msgid "%1$s batter %4$s" +#~ msgstr "%1$s 팼다 %4$s" -#~ msgid "Barnard" -#~ msgstr "버나드" +#~ msgid "%1$s nicks %4$s" +#~ msgstr "%1$s 긇었다 %4$s" -#~ msgid "Barkhamsted" -#~ msgstr "버크햄스티드" +#~ msgid "%1$s cuts %4$s" +#~ msgstr "%1$s 베기 %4$s" -#~ msgid "Bar Harbor" -#~ msgstr "바 하버" +#~ msgid "%1$s slices %4$s" +#~ msgstr "%1$s 가로베기 %4$s" -#~ msgid "Aurora" -#~ msgstr "오로라" +#~ msgid "%1$s cut %4$s" +#~ msgstr "%1$s 베기 %4$s" -#~ msgid "Avon" -#~ msgstr "에이번" +#~ msgid "%1$s batters %4$s" +#~ msgstr "%1$s 팼다 %4$s" -#~ msgid "Ayer" -#~ msgstr "에이어" +#~ msgid "%1$s clobber %4$s" +#~ msgstr "%1$s 찍었다 %4$s" -#~ msgid "Bangor" -#~ msgstr "반고" +#~ msgid "%1$s slice %4$s" +#~ msgstr "%1$s 가로베기 %4$s" -#~ msgid "Bancroft" -#~ msgstr "반크로프트" +#~ msgid "%1$s whack %4$s" +#~ msgstr "%1$s 후려치다 %4$s" -#~ msgid "Baltimore" -#~ msgstr "벨티모어" +#~ msgid "%1$s whacks %4$s" +#~ msgstr "%1$s 후려치다 %4$s" -#~ msgid "Baldwin" -#~ msgstr "벨드윈" +#~ msgid "%1$s nick %4$s" +#~ msgstr "%1$s 긁었다 %4$s" -#~ msgid "Bakersfield" -#~ msgstr "베이커스필드" +#~ msgid "" +#~ "One of the Five Deadly Venoms. Lizard Style focuses on using walls to " +#~ "one's\n" +#~ "advantage. Moving alongside a wall will make you run up along it, giving " +#~ "you\n" +#~ "a large to-hit bonus. Standing by a wall allows you to use it to boost " +#~ "dodge." +#~ msgstr "" +#~ "극독파의 다섯 무공중 하나입니다. 도마뱀권은 벽을 이용하는 것에 초점을 둡니" +#~ "다. 벽을 두고 싸우면 이를 타고 달리거나, 명중률에 큰 보너스를 받습니다. " +#~ "벽 옆에 서 있으면 회피능력이 상승합니다." -#~ msgid "Baileyville" -#~ msgstr "벨리빌" +#~ msgid "" +#~ "You are a pupil of the Venom Clan. You start with one of the five deadly " +#~ "venoms: Centipede, Viper, Scorpion, Lizard, or Toad." +#~ msgstr "" +#~ "당신은 극독파의 문하생이다. 시작할때 다음 다섯가지 극독 무공중에 하나를 가" +#~ "지고 시작한다 : 지네, 독사, 전갈, 도마뱀, 두꺼비." -#~ msgid "Attleboro" -#~ msgstr "엣틀보로" +#~ msgid "Venom Mob Protege" +#~ msgstr "극독파 문하생" -#~ msgid "Auburn" -#~ msgstr "오우번" +#~ msgid "A buck of the largest deer species." +#~ msgstr "사슴 종류중에 가장 큰 종류인 무스의 수컷입니다." -#~ msgid "Augusta" -#~ msgstr "오거스타" +#~ msgid "A grey wolf. A vicious and fast pack hunter." +#~ msgstr "회색 늑대입니다. 영악하고 빠르며 무리를 이루어 사냥합니다." -#~ msgid "Ashland" -#~ msgstr "애슈랜드" +#~ msgid "" +#~ "This zombie emits a constant haze of\n" +#~ "thick, obfuscating smoke." +#~ msgstr "이 좀비는 짙은 안개를 계속 내뿜고 있습니다." -#~ msgid "Athol" -#~ msgstr "아톨" +#~ msgid "" +#~ "A sluglike creature, eight feet long and the width of a refrigerator, " +#~ "it's black body glistens as it oozes it's way along the ground. Eye " +#~ "stalks occassionally push their way out of the oily mass and look around." +#~ msgstr "" +#~ "민달팽이 같이 생긴 생물입니다. 2.4 미터 길이에 냉장고 크기의 넓이를 가지" +#~ "고 있습니다. 검은 몸은 분비물로 반짝거리며, 가끔씩 몸속에서 기름기 덮인 눈" +#~ "이 솟아올라 주변을 봅니다. 그리곤 분노로 울부짖..." -#~ msgid "Atkinson" -#~ msgstr "엣킨슨" +#~ msgid "Your injured arms prevent a viper strike!" +#~ msgstr "팔이 다쳐서 독사 공격을 할수 없다!" -#~ msgid "Athens" -#~ msgstr "아텐스" +#~ msgid "" +#~ "A diseased zombie. Fungus sprouts from its\n" +#~ "mouth and eyes, and thick gray mold grows all\n" +#~ "over its translucent flesh." +#~ msgstr "" +#~ "병에 걸린 좀비입니다. 균사체가 입과 눈을 통해 싹을 틔웠고, 두꺼운 진균체" +#~ "가 투명한 피부 전체에 걸쳐 자라고 있습니다." -#~ msgid "Ashford" -#~ msgstr "애슈포드" +#~ msgid "ew Game" +#~ msgstr "새 게임" -#~ msgid "Ashby" -#~ msgstr "애슈비" +#~ msgid "oad" +#~ msgstr "로드" -#~ msgid "Ashfield" -#~ msgstr "애슈필드" +#~ msgid "pecial" +#~ msgstr "스페셜" -#~ msgid "Ansonia" -#~ msgstr "엔소니아" +#~ msgid "ptions" +#~ msgstr "옵션" -#~ msgid "Antrim" -#~ msgstr "엔트림" +#~ msgid "elp" +#~ msgstr "도움말" -#~ msgid "Arundel" -#~ msgstr "어룬델" +#~ msgid "redits" +#~ msgstr "만든이" -#~ msgid "Aquinnah" -#~ msgstr "아쿠이나" +#~ msgid "uit" +#~ msgstr "종료" -#~ msgid "Appleton" -#~ msgstr "에플톤" +#~ msgid "ustom Character" +#~ msgstr "캐릭터 제작" -#~ msgid "Arlington" -#~ msgstr "알링턴" +#~ msgid "

reset Character" +#~ msgstr "캐릭터 탬플릿" -#~ msgid "Argyle" -#~ msgstr "아가일" +#~ msgid "andom Character" +#~ msgstr "랜덤 캐릭터" -#~ msgid "Arrowsic" -#~ msgstr "에로우식" +#~ msgid "Play ow!" +#~ msgstr "빠른 시작!" -#~ msgid "Ashburnham" -#~ msgstr "애슈번햄" +#~ msgid "tankbot" +#~ msgstr "탱크봇(tankbot)" -#~ msgid "Anson" -#~ msgstr "엔손" +#~ msgid "%1$s assumes a %2$s stance." +#~ msgstr "%1$s 가 %2$s 의 태도를 가정합니다." -#~ msgid "Andover" -#~ msgstr "언도버" +#~ msgid "I am a wandering master of " +#~ msgstr "난 방랑중인 고수라네 " -#~ msgid "Amherst" -#~ msgstr "엠허스트" +#~ msgid "I am looking for a master to train my fighting techniques." +#~ msgstr "전투 기술을 가르쳐줄 선생을 찾고 있어." -#~ msgid "Amity" -#~ msgstr "에미티" +#~ msgid "" +#~ "The .500 S&W Magnum round the World's most powerful handgun round " +#~ "recently developed by Smith and Wesson together with the revolutionary " +#~ "S&W 500 Revolver, it has enough power to kill anything with ease." +#~ msgstr "" +#~ ".500 S&W 매그넘 탄은 세상에서 가장 강력한 권총탄으로, 스미스 & 웨슨이 자사" +#~ "의 S&W 500 리볼버를 위해 최근에 개발했습니다. 무엇이든지 쉽게 죽일 수 있" +#~ "는 위력을 지녔습니다." -#~ msgid "Alton" -#~ msgstr "엘톤" +#~ msgid "" +#~ "You can manage to find space for anything! You can carry 40%% more volume." +#~ msgstr "" +#~ "공간을 어떻게 활용하는지 잘 알고 있습니다! 40%% 더 많은 부피를 운반할 수 " +#~ "있습니다." -#~ msgid "Amesbury" -#~ msgstr "엠스부리" +#~ msgid "" +#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." +#~ msgstr "" +#~ "당신은 매우 쓰러뜨리기 힘듭니다! 모든 HP 에 20%%의 보너스를 받습니다." -#~ msgid "Alna" -#~ msgstr "엘나" +#~ msgid "" +#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " +#~ "precision strike in the hands of the skilled." +#~ msgstr "" +#~ "작고, 굉장히 예리한 나이프입니다. 수술에 사용됩니다. 작은 칼끝은 숙련자가 " +#~ "사용시 정밀한 타격을 가능케 합니다." -#~ msgid "Alstead" -#~ msgstr "엘스티드" +#~ msgid "MRE - beef" +#~ msgstr "휴대식량-쇠고기(MRE - beef)" -#~ msgid "Allenstown" -#~ msgstr "엘렌스톤" +#~ msgid "" +#~ "Compact Bionics Module developed at DoubleTech Industries as a " +#~ "replacement for the highly successful CBM: Power Storage. Increases you " +#~ "power capacity by 10 units." +#~ msgstr "" +#~ "성공적이었던 CBM: 전력 배터리를 대체하기 위해 더블텍 산업에서 개발한 컴팩" +#~ "트 바이오닉 모듈 입니다.\r\n" +#~ "전력 보유량이 10 증가합니다." -#~ msgid "Allagash" -#~ msgstr "엘라가쉬" +#~ msgid "" +#~ "Your entire body may resonate at very high power, creating a short-range " +#~ "shockwave. While it will not too much damage to flexible creatures, " +#~ "stiff items such as walls, doors, and even robots will be severely " +#~ "damaged." +#~ msgstr "" +#~ "몸 전체에서 고출력의 단거리 충격파를 만들어 낼수 있습니다. 단단하지 않은 " +#~ "생물에겐 별 피해를 줄수 없지만 벽, 문, 로봇 등 단단한 것에는 상당한 피해" +#~ "를 줄수 있습니다." -#~ msgid "Alfred" -#~ msgstr "어프레드" +#~ msgid "" +#~ "A glass vial, with two chemicals mixing inside. If this mixture is " +#~ "exposed to air (as happens if you throw the vial), they will spill out as " +#~ "a pool of potent acid." +#~ msgstr "" +#~ "두가지 화학물질이 혼합되어 있는 유리 약병입니다. 공기에 유출되면 강한 산" +#~ "성 웅덩이가 생깁니다." -#~ msgid "Acton" -#~ msgstr "액턴" +#~ msgid "" +#~ "Several pieces of wood, nailed together, with nails sticking straight up. " +#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." +#~ msgstr "" +#~ "나무 판에 못을 거꾸로 박은 덫입니다. 밟으면 못이 발에 박히게 됩니다." -#~ msgid "Acushnet" -#~ msgstr "어큐쉬넷" +#~ msgid "" +#~ "Using this item will, if loaded with gas, cause it to turn on, making a " +#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." +#~ msgstr "" +#~ "휘발유를 채운 다음 작동하면, 아주 강력하지만 느리고 다루기도 어렵고 소리" +#~ "도 시끄러운 근접무기가 됩니다." -#~ msgid "Abington" -#~ msgstr "어빙턴" +#~ msgid "active teargas" +#~ msgstr "최루탄-켜짐(teargas)" -#~ msgid "Agawam" -#~ msgstr "아궈웜" +#~ msgid "Place trap" +#~ msgstr "덫 설치" -#~ msgid "Acworth" -#~ msgstr "어클쓰" +#~ msgid "" +#~ "A medieval helmet that provides excellent protection to head, with a Y " +#~ "shaped opening for the face." +#~ msgstr "" +#~ "얼굴 부분이 Y 형태로 되어 있는 중세 유럽의 투구 입니다. 머리에 매우 높은 " +#~ "방어력을 제공합니다." -#~ msgid "Alford" -#~ msgstr "어포드" +#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" +#~ msgstr "%s %s에 %s가(이) 치어서 %d 피해를 입었다! %s!" -#~ msgid "Alexandria" -#~ msgstr "알렉산드리어" +#~ msgid "" +#~ "Your memory has been enhanced with small quantum storage drives. Any " +#~ "time you start to forget a skill, you have a chance at retaining all " +#~ "knowledge, at the cost of a small amount of poweron." +#~ msgstr "" +#~ "소형 양자저장장치로 당신의 기억력은 보다 향상되었다. 스킬이 하락되기 시작" +#~ "할 때, 일정 확률로 전력을 소비하는 대신 스킬이 감소하지 않게 된다." -#~ msgid "Alburg" -#~ msgstr "얼버그" +#~ msgid "" +#~ "Inside your body is a fleet of tiny dormant robots. Once charged from " +#~ "your energy banks, they will flit about your body, repairing any damage." +#~ msgstr "" +#~ "당신의 몸 안에는 초소형 로봇들이 있어서 작동시키면, 몸을 돌아다니며 피해" +#~ "를 복구한다." -#~ msgid "Albion" -#~ msgstr "얼비온" +#~ msgid "" +#~ "Everyone at work knew you as the person who always had a cigarette or two " +#~ "in hand. Now, you're down to a single pack, and you hope you find more " +#~ "soon. You start out with a strong nicotine addiction, and 10 cigarettes." +#~ msgstr "" +#~ "직장 동료들은 당신에 대해 항상 담배를 태우던 사람으로 기억합니다. 지금은, " +#~ "담배 한 갑을 가지고 쓰러져 있으며 곧 더 찾을 수 있을 겁니다. 강력한 니코" +#~ "틴 중독 증상과 담배 10개를 소지하고 시작합니다." -#~ msgid "Albany" -#~ msgstr "엘바니" +#~ msgid "your %s" +#~ msgstr "%s" -#~ msgid "Xavier" -#~ msgstr "자비엘" +#~ msgid "Abbot" +#~ msgstr "에벗" -#~ msgid "Young" -#~ msgstr "영" +#~ msgid "Dixfield" +#~ msgstr "딕스필드" -#~ msgid "Zachary" -#~ msgstr "재커리" +#~ msgid "Edmunds" +#~ msgstr "에드문즈" -#~ msgid "Zoe" -#~ msgstr "조이" +#~ msgid "her" +#~ msgstr "" -#~ msgid "Zoey" -#~ msgstr "조이" +#~ msgid "You" +#~ msgstr "" -#~ msgid "Yuki" -#~ msgstr "유키" +#~ msgid "Your" +#~ msgstr "" -#~ msgid "Wood" -#~ msgstr "우드" +#~ msgid "your" +#~ msgstr "" -#~ msgid "Wright" -#~ msgstr "라이트" +#~ msgid "his" +#~ msgstr "" -#~ msgid "Wyatt" -#~ msgstr "와이어트" +#~ msgid "the %s" +#~ msgstr "%s" -#~ msgid "Watson" -#~ msgstr "왓슨" +#~ msgid "%s's %s" +#~ msgstr "%s %s" -#~ msgid "Victoria" -#~ msgstr "빅토리아" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "West" -#~ msgstr "웨스트" +#~ msgid " throws %s." +#~ msgstr "가(이) %s를(을) 던졌다." -#~ msgid "Williams" -#~ msgstr "윌리엄스" +#~ msgid " disarms %s." +#~ msgstr "가(이) %s를(을) 무장해제 시켰다." -#~ msgid "White" -#~ msgstr "화이트" +#~ msgid "You disarm %s." +#~ msgstr "%s를(을) 무장해제 시켰다." -#~ msgid "William" -#~ msgstr "윌리엄" +#~ msgid "You throw %s." +#~ msgstr "%s를(을) 던졌다." -#~ msgid "Washington" -#~ msgstr "워싱턴" +#~ msgid "the %s's" +#~ msgstr "%s" -#~ msgid "Walker" -#~ msgstr "워커" +#~ msgid "%s's" +#~ msgstr "%s" -#~ msgid "Ward" -#~ msgstr "워드" +#~ msgid "You drain %s body heat!" +#~ msgstr "%s의 체온을 빼앗았다!" -#~ msgid "Wilson" -#~ msgstr "윌슨" +#~ msgid " +Damage" +#~ msgstr " + 피해" -#~ msgid "Vanessa" -#~ msgstr "바네사" +#~ msgid " and a " +#~ msgstr "와 " -#~ msgid "Thompson" -#~ msgstr "톰슨" +#~ msgid " to install parts." +#~ msgstr "로 부품 설치" -#~ msgid "Thomas" -#~ msgstr "토마스" +#~ msgid "enough" +#~ msgstr "충분함" -#~ msgid "Trinity" -#~ msgstr "트리니티" +#~ msgid " lack" +#~ msgstr "부족함" -#~ msgid "Torres" -#~ msgstr "토레스" +#~ msgid "" +#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " +#~ "you to teleport a short distance away." +#~ msgstr "" +#~ "플루토늄 연료 전지로 작동하는 초자연적 장치입니다.\n" +#~ "사용하면 가까운 거리의 어딘가로 순간이동 됩니다." -#~ msgid "Turner" -#~ msgstr "터너" +#~ msgid "Use Metric Speeds" +#~ msgstr "미터법 속도 표기" -#~ msgid "Tristan" -#~ msgstr "트리스탄" +#~ msgid "Use Metric Weights" +#~ msgstr "미터법 무게 표기" -#~ msgid "Valeria" -#~ msgstr "발레리아" +#~ msgid "Can't move furniture there! Choose a direction with open floor." +#~ msgstr "" +#~ "그쪽으로 가구를 움직일 수 없습니다! 빈 공간이 있는 다른 방향을 선택하십시" +#~ "오." -#~ msgid "Tyler" -#~ msgstr "타일러" +#~ msgid "You wake up to the ringing of an alarm-clock." +#~ msgstr "알람 시계가 울리는 소리 때문에 깼습니다." -#~ msgid "Van Wilde" -#~ msgstr "반 와일드" +#~ msgid "Spores" +#~ msgstr "포자 감염" -#~ msgid "Smith" -#~ msgstr "스미스" - -#~ msgid "Takeuchi" -#~ msgstr "타케우치" - -#~ msgid "Sofia" -#~ msgstr "소피아" +#~ msgid "" +#~ "Strength - 1; Intelligence - 2\n" +#~ "You stop to scratch yourself frequently; high intelligence helps you " +#~ "resist\n" +#~ "this urge." +#~ msgstr "" +#~ "체력 - 1; 지능 - 2;\n" +#~ "몸을 긁기 위해 자주 멈춤; 지능이 높으면 자제할 수 있는 가능성이 높아짐." -#~ msgid "Sophie" -#~ msgstr "소피" +#~ msgid "4 days... no water.." +#~ msgstr "물을 못 마신지 4일째..." -#~ msgid "Stewart" -#~ msgstr "스튜아트" +#~ msgid "You haven't eaten in over a week!" +#~ msgstr "일주일 동안 아무 것도 먹지 않았습니다!" -#~ msgid "Scott" -#~ msgstr "스캇" +#~ msgid "You haven't had anything to drink in 2 days!" +#~ msgstr "이틀 동안 아무 것도 마시지 않았습니다!" -#~ msgid "Sean" -#~ msgstr "션" +#~ msgid "Peek" +#~ msgstr "코너 훔쳐보기" -#~ msgid "Simmons" -#~ msgstr "시몬스" +#~ msgid "Fill a container?" +#~ msgstr "용기를 채우시겠습니까?" -#~ msgid "Sydney" -#~ msgstr "시드니" +#~ msgid "Refill vehicle" +#~ msgstr "차량 충전 완료" -#~ msgid "Taylor" -#~ msgstr "타일러" +#~ msgid "" +#~ "Many important items can be very hard to find, or will cost a great deal " +#~ "of\n" +#~ "money to trade for. Fortunately, it is possible to craft a wide variety " +#~ "of\n" +#~ "goods with the proper tools, materials, and training.\n" +#~ "\n" +#~ "Some recipes require a set of tools. These are not used up when " +#~ "crafting,\n" +#~ "so you can keep your tool set. All recipes require one or more " +#~ "ingredients.\n" +#~ "These ARE used up in crafting.\n" +#~ "\n" +#~ "%sThere are five categories; Weapons, Food, \n" +#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" +#~ "no skill to create, the majority require you to have some knowledge:\n" +#~ "\n" +#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" +#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" +#~ "at higher levels, you have an understanding of chemistry and can make\n" +#~ "chemical weapons and beneficial elixirs.\n" +#~ "->Electronics skill lets you make a wide variety of tools with intricate " +#~ "uses.\n" +#~ "->Tailoring skill is used to create basic clothing, and later tough " +#~ "armor.\n" +#~ "\n" +#~ "In addition to the primary crafting skills, other skills may be " +#~ "necessary\n" +#~ "to create certain items. Traps skill, Firearms skill, and First Aid " +#~ "skill\n" +#~ "are all required for certain items." +#~ msgstr "" +#~ "많은 물건들이 매우 찾기 힘들며, 사려면 많은 돈이 필요합니다.\n" +#~ "다행스럽게도 적당한 도구와, 재료, 기술이 있으면 꽤 많은 종류를\n" +#~ "스스로 제작할 수도 있습니다.\n" +#~ "\n" +#~ "몇몇 제작법은 '도구' 가 필요합니다. 제작을 해도 도구가 소모되는 것은\n" +#~ "아니며, 계속 가지고 있을 수 있습니다. 또한 모든 제작은 하나 혹은\n" +#~ "그 이상의 '재료' 가 필요하며, 재료는 제작을 하면 소모됩니다.\n" +#~ "\n" +#~ "%s\n" +#~ "제작은 다섯 가지의 분류로 나눠집니다. (무기, 식품, 전자기기, 방호구,\n" +#~ "잡다) 몇몇 물품은 제작하는데 별다른 기술이 필요하지 않지만,\n" +#~ "대부분은 특정한 지식이 필요합니다.\n" +#~ "\n" +#~ "-> 기계공학 기술은 무기, 함정, 몇몇 도구를 만드는데 쓰입니다.\n" +#~ "-> 요리 기술은 낮은 수준에서는 음식을 만드는데 쓰이지만, 높은 수준이 되" +#~ "면\n" +#~ "화학 지식을 얻을 수 있으며 화학 무기 혹은 유용한 물질을 만들 수 있습니" +#~ "다.\n" +#~ "-> 전자공학 기술은 복잡한 곳에 쓰이는 다양한 도구를 만드는데 쓰입니다.\n" +#~ "-> 재봉 기술은 기본적인 의류 제작에, 수준이 높으면 강한 방호구 제작에 쓰입" +#~ "니다.\n" +#~ "\n" +#~ "제작에 쓰이는 주 기술 말고도, 다른 기술이 보조적으로 쓰이는 경우가 있습니" +#~ "다.\n" +#~ "몇몇 물품의 경우 함정, 총기, 응급 치료 기술이 쓰이기도 합니다." -#~ msgid "Sanders" -#~ msgstr "센더스" +#~ msgid "" +#~ "There is only the space where an object should be, but isn't. No item " +#~ "template of this type exists." +#~ msgstr "" +#~ "하나의 오브젝트만이 존재해야 하는 공간이지만, 그렇지 않습니다.\r\n" +#~ "이런 종류의 템플릿은 존재하지 않습니다." -#~ msgid "Sanchez" -#~ msgstr "산체스" +#~ msgid "Your tazer crackles in the air." +#~ msgstr "테이져가 공중에서 파직거리는 소리를 냅니다." -#~ msgid "Samuel" -#~ msgstr "싸무엘" +#~ msgid "Pitch the tent" +#~ msgstr "천막 치기" -#~ msgid "Samantha" -#~ msgstr "사만타" +#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." +#~ msgstr "" +#~ "무거운 면 코트입니다. 거추장스럽지만, 보온력이 좋고 주머니가 큽니다." -#~ msgid "Sabastian" -#~ msgstr "사바스티안" +#~ msgid "A thin pair of leather gloves. Good for doing manual labor." +#~ msgstr "" +#~ "얇은 가죽으로 만들어진 장갑 한 쌍입니다. 육체 노동을 할 때 좋습니다." -#~ msgid "Ryan" -#~ msgstr "랸" +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "조금 거추장스럽지만, 약간의 저장공간을 제공하는 손가방입니다." -#~ msgid "Russell" -#~ msgstr "러쎌" +#~ msgid "" +#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " +#~ "damage. It could be used to practice your rifle skill up to level 1." +#~ msgstr "" +#~ "어린아이들이 흔히 가지고 노는 총입니다. 꽤 정확하게 사격할 수 있지만, BB " +#~ "탄의 특성 때문에 거의 피해를 주지 못합니다.\r\n" +#~ "라이플 기술을 1 레벨까지 올리는데 사용할 수도 있습니다." -#~ msgid "Sarah" -#~ msgstr "사라" +#~ msgid "" +#~ "A tool used to drive nails into wood or other material. It could also be " +#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." +#~ msgstr "" +#~ "주로 못을 나무나 다른 물질에 박을 때 사용되는 도구입니다. 그냥 무기로 사용" +#~ "할 수도 있고, 권총 기술을 1 레벨까지 연습하는데 쓸 수도 있습니다." -#~ msgid "Sara" -#~ msgstr "사라" +#~ msgid "" +#~ "A leather sling, it is easy to use and accurate, but pebbles do little " +#~ "damage. Pebbles are used as ammunition." +#~ msgstr "" +#~ "돌을 사이에 넣은 다음, 돌려서 던지는데 사용하는 가죽 슬링입니다. 사용하기 " +#~ "쉽고 정확하지만,\r\n" +#~ "조약돌을 사용하기 때문에 거의 데미지를 주지 못합니다. 조약돌을 탄약으로 사" +#~ "용합니다." -#~ msgid "Savannah" -#~ msgstr "사바나" +#~ msgid "Pry" +#~ msgstr "지레" -#~ msgid "Ross" -#~ msgstr "로스" +#~ msgid "A tough sinew cut from a corpse, useable as thread." +#~ msgstr "사체에서 잘라낸 힘줄입니다. 실타래 대용으로 사용할 수 있습니다." -#~ msgid "Richardson" -#~ msgstr "리차드손" +#~ msgid "" +#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " +#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " +#~ "round. It is nearly silent, but is so weak as to be nearly useless." +#~ msgstr "" +#~ "코니컬 볼 .22 구경 탄은 .22 구경 중 가장 장약이 적게 들어간 탄종입니다. 화" +#~ "약이 매우 적게 들어있으며, 탄속이 음속을 넘지 않는 저탄속 탄입니다. 거의 " +#~ "소음이 없지만, 거의 쓸모가 없을 정도로 약합니다." -#~ msgid "Roberts" -#~ msgstr "로버트즈" +#~ msgid "" +#~ "9 millimeter parabellum is generally regarded as the most popular handgun " +#~ "cartridge, used by the majority of US police forces. It is also a very " +#~ "popular round in sub-machine guns." +#~ msgstr "" +#~ "9 밀리미터 파라블럼 탄은 미국 경찰들의 폭넓은 사용으로 인해, 가장 인기있" +#~ "는 권총탄으로 간주되는 탄환입니다. 기관단총 쪽에서도 인기가 있습니다." -#~ msgid "Rodriguez" -#~ msgstr "로드리게즈" +#~ msgid "" +#~ "A brass-jacketed .22 calibre round with superior penetration capacity." +#~ msgstr "탄두가 코팅되어 더 높은 관통력을 가진 .22 구경 탄입니다." -#~ msgid "Rogers" -#~ msgstr "로거스" +#~ msgid "" +#~ "This small caliber pistol round offers quite good armor penetration at " +#~ "the cost of slightly less damage. It is rarely used outside of the " +#~ "Chinese army." +#~ msgstr "" +#~ "이 소구경 권총탄은 좋은 관통력을 가진 대신, 살상력이 약간 적습니다. 중국" +#~ "군 외에는 거의 사용하지 않습니다." -#~ msgid "Riley" -#~ msgstr "라일리" +#~ msgid "" +#~ "Designed during World War II by the Soviet Union, the popularity of the " +#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " +#~ "rifle round. However, due to its lack of yaw, this round deals less " +#~ "damage than most." +#~ msgstr "" +#~ "2차대전 중 소련이 개발한 7.62x39mm M43탄은, AK-47과 SKS의 유명세에 힘입어 " +#~ "전세계적으로 퍼져나갔습니다. 하지만, 탄두 요동 현상이 적어 위력은 다소 약" +#~ "합니다." -#~ msgid "Robinson" -#~ msgstr "로빈슨" +#~ msgid "" +#~ "The .454 Casull round a very powerful revolver round capable of killing " +#~ "Huge game like Elephants with ease, it's designed to be used with the " +#~ "Taurus Raging Bull." +#~ msgstr "" +#~ ".454 카술 탄은 코끼리같이 큰 생물도 쉽게 잡을만큼 강력한 리볼버용 탄환입니" +#~ "다. 타우러스 레이징 불에 사용되도록 만들어졌습니다." -#~ msgid "Rivera" -#~ msgstr "리버라" +#~ msgid "" +#~ "A 40mm grenade with a small explosion and a high number of damaging " +#~ "fragments." +#~ msgstr "적은 양의 폭약과 다량의 파편을 탄두에 넣은 40mm 유탄입니다." -#~ msgid "Robert" -#~ msgstr "로버트" +#~ msgid "A 40mm grenade with a concussive explosion." +#~ msgstr "체내 충격을 주는 충격탄두 40mm 유탄입니다." -#~ msgid "Rachel" -#~ msgstr "라췔" +#~ msgid "Primer from a small caliber round." +#~ msgstr "소구경 탄의 뇌관입니다." -#~ msgid "Price" -#~ msgstr "프라이스" +#~ msgid "Basic Sword & Sorcery." +#~ msgstr "널리 알려진 중세 판타지물." -#~ msgid "Peterson" -#~ msgstr "피터슨" +#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." +#~ msgstr "산성비로부터 농축된 산성 입니다. 마시지 마세요." -#~ msgid "Perry" -#~ msgstr "페리" +#~ msgid "Bread and turkey, that's it." +#~ msgstr "빵과 칠면조가 들어있습니다. 네, 저게 재료의 끝이에요." -#~ msgid "Phillips" -#~ msgstr "필립" +#~ msgid "Canned beans. A staple for hobos." +#~ msgstr "통조림 콩입니다. 노숙자들을 위한 주식이죠." -#~ msgid "Perez" -#~ msgstr "페레즈" +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "우엑, 맛이 좋지는 않지만, 꽤나 배불리 먹을 수 있습니다." -#~ msgid "Payton" -#~ msgstr "페이턴" +#~ msgid "" +#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " +#~ "all sorts of afflictions." +#~ msgstr "" +#~ "검은 꿀이 빽빽하게 채워진 큰 밀랍 덩어리입니다. 모든 종류의 질병 치료에 유" +#~ "용합니다." -#~ msgid "Powell" -#~ msgstr "포웰" +#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." +#~ msgstr "으, 꽤 역겹습니다. 굶어 죽을 때를 대비해서 저장해두세요." -#~ msgid "Ramirez" -#~ msgstr "라미레즈" +#~ msgid "" +#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " +#~ "emergency." +#~ msgstr "" +#~ "큰 밀랍 덩어리입니다. 정말 맛과 영양가가 없습니다. 하지만 비상시에는 이거" +#~ "라도 먹어야죠." -#~ msgid "Reed" -#~ msgstr "리드" +#~ msgid "" +#~ "A malformed human leg, this would be gross to eat, and cause mutations." +#~ msgstr "" +#~ "기형적으로 변한 인간의 다리입니다. 먹을 수는 있지만, 매우 불쾌해집니다. 먹" +#~ "으면 DNA 에 변이를 일으킵니다." -#~ msgid "Patterson" -#~ msgstr "페터슨" +#~ msgid "" +#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." +#~ msgstr "" +#~ "큰 개미 알입니다. 크기는 야구공만 합니다. 영양가가 매우 높습니다만, 역겹습" +#~ "니다." -#~ msgid "Parker" -#~ msgstr "파커" +#~ msgid "" +#~ "A misshapen human arm, eating this would be pretty disgusting and cause " +#~ "your DNA to mutate." +#~ msgstr "" +#~ "기형적으로 변한 인간의 팔입니다. 먹을 수는 있지만, 매우 불쾌해집니다. 먹으" +#~ "면 DNA 에 변이를 일으킵니다." -#~ msgid "Owen" -#~ msgstr "오웬" +#~ msgid "" +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." +#~ msgstr "" +#~ "인간의 기형 태아입니다. 먹을 수는 있지만, 매우 불쾌해집니다. 먹으면 DNA " +#~ "에 변이를 일으킵니다." -#~ msgid "Paige" -#~ msgstr "페이지" +#~ msgid "This white flour is useful for baking." +#~ msgstr "이 하얀색 가루는 제빵에 유용하게 쓰입니다." -#~ msgid "Nelson" -#~ msgstr "넬손" +#~ msgid "" +#~ "Antibacterial medication designed to prevent or stop the spread of " +#~ "infection, in exchange for making future infections harder to stop or " +#~ "prevent." +#~ msgstr "" +#~ "의료용 항생제로, 감염의 확산 혹은 방지를 위해 만들어진 의약품입니다. 대신 " +#~ "미래에 일어날 감염을 막거나 멈추는게 힘들어지죠.\r\n" +#~ "(역주 : 항생제 오남용은 병균의 약품 내성을 키웁니다)" -#~ msgid "Nevaeh" -#~ msgstr "니베" +#~ msgid "" +#~ "Strawberries left to ferment with a few other choice ingredients offer up " +#~ "a surprisingly platable mixture; you barely even have to force yourself " +#~ "to drink it after the first few gulps." +#~ msgstr "" +#~ "몇개의 엄선된 재료와 딸기를 같이 발효시켜 만든, 놀랄만큼 훌륭한 조합의 음" +#~ "료입니다.\r\n" +#~ "한 모금을 마시는 순간, 입을 뗄 수 없을 것입니다." -#~ msgid "Nicholas" -#~ msgstr "니콜라스" +#~ msgid "Bright pink chewing gum. Sugary, sweet and bad for your teeth." +#~ msgstr "밝은 분홍색 츄잉껌입니다. 달고 설탕이 많아 치아에 좋지 않습니다." -#~ msgid "Noah" -#~ msgstr "노아" +#~ msgid "" +#~ "A powdered antihemorrhagic compound which reacts with blood to " +#~ "immediately form a gel-like substance which stops bleeding." +#~ msgstr "" +#~ "가루 형태의 항출혈제, 즉 지혈제입니다. 혈액에 닿으면 젤 형태의 물질로 변" +#~ "해 출혈을 막습니다." -#~ msgid "Olivia" -#~ msgstr "올리비아" +#~ msgid "" +#~ "Matches must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use matches to light " +#~ "nearby items on fire." +#~ msgstr "" +#~ "성냥은 담배 등을 사용하거나 화염병 따위의 점화용으로 필요합니다. 근처의 " +#~ "탈 만한 물건에 불을 붙이는 용도로도 쓸 수 있습니다." -#~ msgid "Nuku" -#~ msgstr "누쿠" +#~ msgid "" +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire." +#~ msgstr "" +#~ "라이터는 담배 등을 사용하거나 화염병 따위의 점화용으로 필요합니다. 근처의 " +#~ "탈 만한 물건에 불을 붙이는 용도로도 쓸 수 있습니다." -#~ msgid "Murphy" -#~ msgstr "머피" +#~ msgid "" +#~ "A fire drill is a simple item for firestarting, made from two pieces of " +#~ "wood and some string. Although it is constructed out of simple materials, " +#~ "it's slow and rather difficult to get a fire started with this tool." +#~ msgstr "" +#~ "불을 붙이는데 사용되는 간단한 드릴입니다. 나무 두 개에 줄을 사용해 만들었" +#~ "습니다. 구하기 쉬운 물건으로 만들어져 만들기 쉽지만, 이 도구를 가지고 불" +#~ "을 붙이는 것은 극히 힘듭니다." -#~ msgid "Morris" -#~ msgstr "모리스" +#~ msgid "" +#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." +#~ msgstr "" +#~ "가위로 면 재질의 물품(주로 의류)을 잘라 천조각으로 만들 수 있습니다." -#~ msgid "Morgan" -#~ msgstr "모건" +#~ msgid "" +#~ "Thin paper strips intended for the rolling of cigarettes. Could also be " +#~ "used to make cartridges for a cap and ball revolver." +#~ msgstr "" +#~ "담배를 마는데 사용되는 종이입니다.\r\n" +#~ "구식 종이 장약을 사용하는 리볼버 탄약 제조에 사용할 수도 있습니다." -#~ msgid "Moore" -#~ msgstr "무어" +#~ msgid "" +#~ "Use a sewing kit on an article of clothing to attempt to repair or " +#~ "reinforce that clothing. This uses your tailoring skill." +#~ msgstr "" +#~ "옷에 반짇고리를 사용해서 옷을 수선하거나 보강할 수 있습니다. 재봉 기술이 " +#~ "적용됩니다." -#~ msgid "Mitchell" -#~ msgstr "미췔" +#~ msgid "A simple hand-powered stone quern." +#~ msgstr "손으로 돌리는 단순한 구조로 만들어진, 돌 맷돌입니다." -#~ msgid "Natsuki" -#~ msgstr "나스키" +#~ msgid "Use a fire extinguisher to put out adjacent fires." +#~ msgstr "근처의 불을 끌 때 사용하는 소화기입니다." -#~ msgid "Natalie" -#~ msgstr "나탈리" +#~ msgid "" +#~ "Use a hammer, with nails and two by fours in your inventory, to board up " +#~ "adjacent doors and windows." +#~ msgstr "" +#~ "망치가 있으면, 못과 재목을 사용해서 근처의 문이나 창문을 막을 수 있습니다." -#~ msgid "Nathaniel" -#~ msgstr "나다니엘" +#~ msgid "" +#~ "With enough electronics skill, you could attach this to your devices to " +#~ "increase their battery capacity." +#~ msgstr "" +#~ "전자기기 기술이 받쳐준다면, 이것을 달아 배터리 용량을 늘릴 수 있습니다." -#~ msgid "Nakiya" -#~ msgstr "나키야" +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. It is turned on. Use it to turn it off." +#~ msgstr "" +#~ "휘발유를 사용하는 랜턴입니다. 아주 환하지는 않지만, 오래 갑니다.\r\n" +#~ "불이 켜진 상태입니다. 불을 끄려면 작동시키세요." -#~ msgid "Nathan" -#~ msgstr "나단" +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. Use it to turn it on." +#~ msgstr "" +#~ "휘발유를 사용하는 랜턴입니다. 아주 환하지는 않지만, 오래 갑니다.\r\n" +#~ "불을 켜려면 작동시키세요." -#~ msgid "Melanie" -#~ msgstr "맬라니" +#~ msgid "" +#~ "A light-emitting circuit wired directly to some batteries. Once " +#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " +#~ "batteries die, you'll need to scrap it to recover the components that are " +#~ "reusable." +#~ msgstr "" +#~ "케이블 형태의 빛을 내는 회로에 배터리를 연결한 것입니다. 작동하면 배터리 " +#~ "충전량 3 당 25 시간 동안 빛을 냅니다. 배터리가 다 떨어지면 분해해서 재활" +#~ "용 할 수 있습니다." -#~ msgid "Megan" -#~ msgstr "메건" +#~ msgid "" +#~ "A light-emitting circuit wired directly to some batteries. Provides a " +#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " +#~ "die, you'll need to scrap it to recover the components that are reusable." +#~ msgstr "" +#~ "케이블 형태의 빛을 내는 회로에 배터리를 연결한 것입니다. 작동하면 배터리 " +#~ "충전량 3 당 25 시간 동안 빛을 냅니다. 배터리가 다 떨어지면 분해해서 재활" +#~ "용 할 수 있습니다." -#~ msgid "Miller" -#~ msgstr "밀러" +#~ msgid "" +#~ "Using this flashlight will turn it on, assuming it is charged with " +#~ "batteries. A turned-on flashlight will provide light during the night or " +#~ "while underground." +#~ msgstr "" +#~ "(충전되어 있는)손전등을 사용하면 불이 켜집니다. 손전등은 어두운 밤이나 지" +#~ "하에서 빛을 제공합니다." -#~ msgid "Michael" -#~ msgstr "마이클" +#~ msgid "" +#~ "This flashlight is turned on, and continually draining its batteries. It " +#~ "provides light during the night or while underground. Use it to turn it " +#~ "off." +#~ msgstr "" +#~ "켜진 손전등으로, 배터리를 소모하고 있습니다. 손전등은 어두운 밤이나 지하에" +#~ "서 빛을 제공합니다. 'a' 키를 눌러 손전등을 끌 수 있습니다." -#~ msgid "Mason" -#~ msgstr "마손" +#~ msgid "" +#~ "A burnt-out lightstrip. You could disassemble this to recover the " +#~ "amplifier circuit." +#~ msgstr "고장난 케이블 조명입니다. 분해해서 증폭 회로를 회수할 수 있습니다." -#~ msgid "Matthew" -#~ msgstr "매튜" +#~ msgid "" +#~ "This glowstick is active and producing light. It will last for a few " +#~ "hours before burning out." +#~ msgstr "" +#~ "이 발광 스틱은 켜져서 빛을 내고 있습니다. 완전히 소모되기 전까지 몇 시간" +#~ "쯤 갈 것입니다." -#~ msgid "Maya" -#~ msgstr "마야" +#~ msgid "A spent glowstick, essentially trash." +#~ msgstr "이미 사용된 야광봉입니다. 결국 쓰레기죠." -#~ msgid "Martinez" -#~ msgstr "마틴즈" +#~ msgid "" +#~ "A piece of metal that can get very hot. Necessary for electronics " +#~ "crafting. You could also use it to cauterize wounds, if you had to." +#~ msgstr "" +#~ "아주 뜨겁게 달궈질 수 있는 금속으로, 전자기기 제조에 필요합니다. 굳이 쓰겠" +#~ "다면, 상처를 지지는 데에도 쓸 수 있습니다." -#~ msgid "Mia" -#~ msgstr "미아" +#~ msgid "" +#~ "A small heating element. Indispensable for cooking and chemistry. Try not " +#~ "to burn yourself." +#~ msgstr "" +#~ "작은 가열기구로, 조리와 화학 실험에 주로 쓰입니다. 손을 데지 않도록 조심하" +#~ "는게 좋습니다." -#~ msgid "Mary" -#~ msgstr "마리" +#~ msgid "" +#~ "An antenna designed to pick up signals better when pointed at the source." +#~ msgstr "" +#~ "전파 송신지를 향하면 쉽게 전파를 잡아낼 수 있도록 설계된 안테나입니다." -#~ msgid "Lucas" -#~ msgstr "루카스" +#~ msgid "" +#~ "This radio is turned on, and continually draining its batteries. It is " +#~ "playing the broadcast being sent from any nearby radio towers." +#~ msgstr "" +#~ "이 라디오는 켜져 있고, 배터리를 소모하고 있습니다. 근처 라디오 송신탑에서 " +#~ "나오는 방송을 재생하고 있습니다." -#~ msgid "Luke" -#~ msgstr "류크" - -#~ msgid "Luis" -#~ msgstr "루이스" - -#~ msgid "Madelyn" -#~ msgstr "메델린" - -#~ msgid "Madeline" -#~ msgstr "메들린" +#~ msgid "" +#~ "Using this radio turns it on. It will pick up any nearby signals being " +#~ "broadcast and play them audibly." +#~ msgstr "" +#~ "라디오를 작동하면 켜집니다. 주변에 송출되는 신호가 있다면, 무엇이든 수신하" +#~ "여 재생합니다." -#~ msgid "Mariah" -#~ msgstr "마리아" +#~ msgid "" +#~ "Using this allows you to send out a signal; either a general SOS, or if " +#~ "you are in contact with a faction, to send a direct call to them." +#~ msgstr "" +#~ "이것을 사용하면 전파신호를 송출할 수 있습니다. 일반적인 SOS를 보낼 수도 있" +#~ "고, 특정 세력과 연락하고 있다면 그들과 직접 교신할 수도 있습니다." -#~ msgid "Martin" -#~ msgstr "마틴" +#~ msgid "" +#~ "Using this item on a container full of water will purify the water. Water " +#~ "taken from uncertain sources like a river may be dirty." +#~ msgstr "" +#~ "물이 채워진 용기에 사용해서 물을 정화시킬 수 있는 정수기입니다. 강처럼 확" +#~ "실히 정수되지 않은 곳에서 뜬 물은 오염됐을 수도 있으니까요." -#~ msgid "Maria" -#~ msgstr "마리아" +#~ msgid "" +#~ "A road map. Use it to read points of interest, including, but not limited " +#~ "to, location(s) of hospital(s) nearby." +#~ msgstr "명소와 근처의 병원이 표시된 약도입니다." -#~ msgid "Madison" -#~ msgstr "메디슨" +#~ msgid "" +#~ "A string of numbers to access the elevator in the hazardous waste " +#~ "sarcophagus." +#~ msgstr "" +#~ "위험 폐기물을 봉인하는 석관이 있는 곳으로 가는 \r\n" +#~ "엘리베이터를 작동 시킬 수 있는, 숫자로 된 접속 코드입니다." -#~ msgid "Makayla" -#~ msgstr "마켈라" +#~ msgid "" +#~ "If you can find a system to analyze this you may find something of " +#~ "interest." +#~ msgstr "" +#~ "만약 이걸 해독할 시스템을 찾는다면, 뭔가 쓸만한걸 건질 수 있을지도 모릅니" +#~ "다." -#~ msgid "Lily" -#~ msgstr "릴리" +#~ msgid "" +#~ "This device was constructed by 'enhancing' a radio with some amplifier " +#~ "circuits. It's completely lost its ability to pick up a station, but it's " +#~ "nice and loud now. Could be useful to distract zombies." +#~ msgstr "" +#~ "이 장치는 라디오를 증폭시켜 강화시킨 것입니다. 신호 수신 능력은 완전히 잃" +#~ "었지만, 엄청나게 큰 소리를 냅니다.\r\n" +#~ "좀비 유인에 유용할 것 같습니다." -#~ msgid "Lillian" -#~ msgstr "릴리언" +#~ msgid "" +#~ "A prying tool. Use it to open locked doors without destroying them, or to " +#~ "lift manhole covers." +#~ msgstr "" +#~ "뭔가를 따낼 때 쓰는 공구입니다. 잠긴 문이나 상자를 부수지 않고 열 때나, 맨" +#~ "홀 뚜껑을 열 때 사용합니다." -#~ msgid "Long" -#~ msgstr "롱" +#~ msgid "" +#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " +#~ "pile of dirt." +#~ msgstr "단단한 땅을 부드러운 흙으로 개간하는데 사용하는 농업기구입니다." -#~ msgid "Logan" -#~ msgstr "로겐" +#~ msgid "A digging tool. Use it to dig pits adjacent to your location." +#~ msgstr "" +#~ "땅 파는 공구입니다. 사용하면 주변의 땅을 파서 구덩이를 만들 수 있습니다." -#~ msgid "Lopez" -#~ msgstr "로페즈" +#~ msgid "" +#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " +#~ "adjacent solid terrain." +#~ msgstr "" +#~ "잭해머라고도 불리는 도구로, 가솔린을 사용해 단단한 땅에 구멍을 뚫는 용도" +#~ "로 사용됩니다." -#~ msgid "Layla" -#~ msgstr "레일라" +#~ msgid "" +#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " +#~ "a vehicle." +#~ msgstr "" +#~ "탄력 좋은 고무호스입니다. 제작에 쓸 수도 있고, 차량에서 기름을 빨아내는데 " +#~ "쓸 수도 있습니다." -#~ msgid "Lee" -#~ msgstr "리" +#~ msgid "" +#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " +#~ "creating a trap that will ensnare and damage anything that steps on it. " +#~ "If you are carrying a shovel, you will have the option of burying it." +#~ msgstr "" +#~ "스프링과 강철 죔쇠가 달린 덫입니다. 땅에 설치해서 사용하며, 이 덫을 밟으" +#~ "면 강철로 된 턱이 서로 맞물려서 피해를 입힙니다. 삽을 가지고 있으면 땅속" +#~ "에 묻어서 사용할 수도 있습니다." -#~ msgid "Leah" -#~ msgstr "레아" +#~ msgid "" +#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " +#~ "the ground, creating a trap that will warn you with noise when something " +#~ "steps on it." +#~ msgstr "" +#~ "기포로 덮여있는 비닐입니다. 사용하면 무언가가 밟을 때 소리를 내는 덫을 만" +#~ "들 수 있습니다." -#~ msgid "Liam" -#~ msgstr "리엠" +#~ msgid "" +#~ "A tripwire trap must be placed across a doorway or other thin passage. " +#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " +#~ "hurt themselves minorly." +#~ msgstr "" +#~ "인계철선 부비트랩, 즉 선으로 만든 덫입니다.\r\n" +#~ "선으로 연결하기 때문에 문이나 여타 다른 좁은 길에만 설치할 수 있습니다." +#~ "\r\n" +#~ "지나가는 사람이 걸려 넘어지거나, 넘어져 다칠 수도 있습니다." -#~ msgid "Lewis" -#~ msgstr "레위스" +#~ msgid "An anti-personnel mine that is triggered when stepped upon." +#~ msgstr "위에 올라서면 격발되는 대인지뢰입니다." -#~ msgid "Kevin" -#~ msgstr "케빈" +#~ msgid "" +#~ "A machete is attached laterally to a motor, with a tripwire controlling " +#~ "its throttle. When the tripwire is pulled, the blade is swung around with " +#~ "great force. The trap forms a 3x3 area of effect." +#~ msgstr "" +#~ "전기 모터에 정글도를 부착한 것입니다. 모터 출력을 조절하기 위해 줄을 연결" +#~ "했습니다. 줄을 당기면 모터에 달린 칼날이 엄청난 힘으로 회전합니다. 설치하" +#~ "는데 3x3 의 공간이 필요합니다." -#~ msgid "Kim" -#~ msgstr "킴" +#~ msgid "" +#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " +#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " +#~ "time the trigger is pulled, one or two may be used." +#~ msgstr "" +#~ "인계철선에 장전된 소드오프 샷건을 연결한 것입니다. \r\n" +#~ "줄이 당겨지면, 산탄총이 발사됩니다.\r\n" +#~ "발사될 때 한 발이 나갈 수도 있고, 두 발이 나갈 수도 있습니다." -#~ msgid "Kimberly" -#~ msgstr "킬벌리" +#~ msgid "" +#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " +#~ "Requires a tree nearby. Effective at trapping monsters." +#~ msgstr "" +#~ "견고한 로프로 만든 올가미 덫입니다. 설치할 때 근처에 나무가 필요합니다. 괴" +#~ "물을 잡는데 유용합니다." -#~ msgid "Kyosuki" -#~ msgstr "교수키" +#~ msgid "" +#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " +#~ "Requires a young tree nearby. Effective at trapping and killing some " +#~ "small animals." +#~ msgstr "" +#~ "줄로 만든 올가미 덫입니다. 설치할 때 근처에 어린 나무가 필요합니다. 작은 " +#~ "동물을 죽이거나 잡는데 유용합니다." -#~ msgid "Lauren" -#~ msgstr "로렌" +#~ msgid "" +#~ "A section of a pipe filled with explosive materials. Use this item to " +#~ "light the fuse, which gives you 3 turns before it detonates. You will " +#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." +#~ msgstr "" +#~ "폭발물을 채운 파이프 동강입니다. 사용하여 심지에 불을 붙이면, 3턴이 지난 " +#~ "후에 폭발합니다. 점화에는 라이터가 필요합니다. 그리 신뢰성이 높진 않아, 불" +#~ "발될 수도 있습니다." -#~ msgid "Kyle" -#~ msgstr "카일" +#~ msgid "" +#~ "A tool for measuring radiation. Using it will prompt you to choose " +#~ "whether to scan yourself or the terrain, or to turn it on, which will " +#~ "provide continuous feedback on ambient radiation." +#~ msgstr "" +#~ "방사능을 계측하는 도구입니다. 사용하면 자신을 검사할 것인지, 지형을 검사" +#~ "할 것인지, 아니면 켜놓을 것인지 선택할 수 있다. 켜놓으면, 주변 방사능을 지" +#~ "속적으로 계측할 수 있습니다." -#~ msgid "King" -#~ msgstr "킹" +#~ msgid "" +#~ "A tool for measuring radiation. It is in continuous scan mode, and will " +#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " +#~ "it allows you to turn it off, or scan yourself or the ground." +#~ msgstr "" +#~ "방사능을 계측하는 도구입니다. 지속 측정 모드로 작동하는 중이며, 주변에 방" +#~ "사능이 있다면 조용한 딱딱 소리를 냅니다. 사용하여 끌 수도 있고, 몸이나 땅" +#~ "을 검사할 수도 있습니다." -#~ msgid "Landon" -#~ msgstr "렌던" +#~ msgid "" +#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " +#~ "sentient. Open at your own risk.\"" +#~ msgstr "" +#~ "\"경고 : 고 독성 부식물질이 들어있음. 지각 능력이 있을 수 있음. 개봉시 주" +#~ "의요망.\"" -#~ msgid "Kylie" -#~ msgstr "카일리" +#~ msgid "" +#~ "Use this item to pull the pin, turning it into an active grenade. You " +#~ "will then have five turns before it explodes; throwing it would be a good " +#~ "idea." +#~ msgstr "" +#~ "사용하면 수류탄의 핀을 뽑아 활성화시킬 수 있습니다. 5턴이 지난 후에 폭발하" +#~ "니, 던져버리는게 좋은 생각입니다." -#~ msgid "Kira" -#~ msgstr "키라" +#~ msgid "" +#~ "This grenade is active, and will explode any second now. Better throw it!" +#~ msgstr "" +#~ "활성화된 수류탄으로, 언제라도 폭발할 수 있습니다. 던져버리는게 낫겠어!" -#~ msgid "Katelyn" -#~ msgstr "카텔린" +#~ msgid "" +#~ "This EMP grenade is active, and will shortly detonate, creating a large " +#~ "EMP field that damages robots and drains bionic energy." +#~ msgstr "" +#~ "이 EMP 수류탄은 활성화되어 곧 폭발합니다. 폭발하면 바이오닉 에너지를 소모" +#~ "시키고 로봇에게 피해를 주는 EMP장을 만듭니다." -#~ msgid "Katie" -#~ msgstr "케티" +#~ msgid "" +#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " +#~ "will then have three turns before it detonates, creating an EMP field " +#~ "that damages robots and drains bionic energy." +#~ msgstr "" +#~ "사용하면 핀을 뽑아 EMP 수류탄을 활성화시킬 수 있습니다. 3턴 후에 폭발하" +#~ "며, 바이오닉 에너지를 소모시키고 로봇에게 피해를 주는 EMP장을 만듭니다." -#~ msgid "Kaitlin" -#~ msgstr "케이틀린" +#~ msgid "" +#~ "This flashbang is active, and will soon detonate with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ msgstr "" +#~ "활성화된 섬광탄으로, 곧 폭발하여 강력한 빛과 소리를 냅니다. 근처에있는 전" +#~ "원을 실명시키고, 귀먹게 만들고, 무력화시킵니다." -#~ msgid "Kayla" -#~ msgstr "케일라" +#~ msgid "" +#~ "Use this item to pull the pin, turning it into an active flashbang. You " +#~ "will then have five turns before it detonates with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ msgstr "" +#~ "사용하면 핀을 뽑아, 섬광탄을 활성화시킬 수 있습니다. 5턴 후에 폭발하여 강" +#~ "력한 빛과 소리를 내며, 근처에있는 전원을 실명시키고, 귀먹게 만들고, 무력화" +#~ "시킵니다." -#~ msgid "Kaylee" -#~ msgstr "케일리" +#~ msgid "" +#~ "This is a highly modified EMP grenade, designed to scramble robots' " +#~ "control chips, rather than destroy them. This converts the robot to your " +#~ "side for a short time, before the backup systems kick in." +#~ msgstr "" +#~ "EMP 수류탄을 개조한 것으로, 로봇의 CPU 를 파괴하지 않고 방해하도록 만들어" +#~ "졌습니다.\r\n" +#~ "단순히 방해만 하기 때문에, 백업 시스템이 즉시 작동하지 않고 약간의 시간이 " +#~ "걸리게 됩니다." -#~ msgid "Justin" -#~ msgstr "저스틴" +#~ msgid "" +#~ "Use this item to pull the pin. Five turns after you do that, it will " +#~ "begin to expel a thick black smoke. This smoke will slow those who enter " +#~ "it, as well as obscuring vision and scent." +#~ msgstr "" +#~ "핀을 뽑아 사용하며, 5턴이 지나면 짙은 검은색 연기를 방출합니다.\r\n" +#~ "이 짙은 연기는 행동에 방해를 주며, 시각과 후각 또한 방해합니다." -#~ msgid "Kaden" -#~ msgstr "카덴" +#~ msgid "" +#~ "This canister of teargas has had its pin removed, indicating that it is " +#~ "(or will shortly be) expelling highly toxic gas." +#~ msgstr "" +#~ "핀이 뽑힌 최루탄으로, 지금 독가스를 뿜어내고 있습니다. (또는 곧 뿜어낼 것" +#~ "입니다)" -#~ msgid "Kelly" -#~ msgstr "켈리" +#~ msgid "" +#~ "Use this item to pull the pin. Five turns after you do that, it will " +#~ "begin to expel a highly toxic gas for several turns. This gas damages and " +#~ "slows those who enter it, as well as obscuring vision and scent." +#~ msgstr "" +#~ "핀을 뽑아 사용하며, 5턴 후 고독성의 가스를 방출합니다. 이 가스를 들이마시" +#~ "면 느린 속도로 데미지를 입으며, 시각과 후각을 방해받습니다." -#~ msgid "Kaiko" -#~ msgstr "카이코" +#~ msgid "" +#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " +#~ "the rag; you will, of course, need a lighter in your inventory to do " +#~ "this. After lighting it, throw it to cause fires." +#~ msgstr "" +#~ "가연성 액채를 채우고 천을 꽂은 병입니다. 사용하면 불을 붙이고(물론 라이터" +#~ "가 필요합니다), 불을 붙인 후에 던지면 불을 낼 수 있습니다." -#~ msgid "Keita" -#~ msgstr "케이타" +#~ msgid "" +#~ "A glass vial, split into two chambers. The divider is removable, which " +#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " +#~ "happens if you throw the vial) they will spill out as a pool of potent " +#~ "acid." +#~ msgstr "" +#~ "내부가 2개로 나뉘어진 유리 약병입니다. 내부 분리 부분은 제거가 가능하며, " +#~ "제거하면 내부 화학물질이 혼합됩니다. 이 혼합물이 공기중에 노출되면 강한 산" +#~ "성 웅덩이가 생깁니다." -#~ msgid "Jonathan" -#~ msgstr "조나단" +#~ msgid "" +#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " +#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " +#~ "they will begin to explode, so throw them quickly!" +#~ msgstr "" +#~ "폭죽 25개를 묶어놓은 것입니다. 불을 붙여서 사용합니다. 물론 라이터가 필요" +#~ "하며, 불을 붙이면 얼마 있지 않아 폭발합니다. 대피하세요!" -#~ msgid "Julian" -#~ msgstr "줄리안" +#~ msgid "" +#~ "A firecracker with a short fuse. Use this item to light the fuse; you " +#~ "will need a lighter of course. Shortly after you light the fuse it will " +#~ "explode, so throw it quickly!" +#~ msgstr "" +#~ "짧은 도선이 달린 폭죽입니다. 도선에 불을 붙여서 사용할 수 있습니다. 불을 " +#~ "붙이면 얼마 있지 않아 폭발합니다. 대피하세요!" -#~ msgid "Joseph" -#~ msgstr "조셉" +#~ msgid "" +#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " +#~ "now." +#~ msgstr "뇌관에 불이 붙어 소리를 내고 있습니다. 곧 폭발할 것입니다." -#~ msgid "Jose" -#~ msgstr "조시" +#~ msgid "" +#~ "Several sticks of explosives with a fuse attached. Use this item to light " +#~ "the fuse; you will, of course, need a lighter in your inventory to do " +#~ "this. Shortly after lighting the fuse, this item will explode, so get " +#~ "away!" +#~ msgstr "" +#~ "몇개의 폭발물 막대 묶음에 신관을 연결한 것입니다. 불을 붙여 사용할 수 있으" +#~ "며, 불을 붙일 라이터 등을 가지고 있어야 합니다. 신관에 불을 붙이면 얼마 있" +#~ "지 않아 폭발하기 때문에, 대피해야 합니다!" -#~ msgid "Jordan" -#~ msgstr "조단" +#~ msgid "" +#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " +#~ "it to activate the timer. Ten turns later it will explode, leaving behind " +#~ "a radioactive crater. The explosion is large enough to take out a house." +#~ msgstr "" +#~ "위력이 극도로 강력한, 소형화된 핵폭탄입니다. 손에 들 수 있을 정도로 작습니" +#~ "다. 타이머를 작동시킨 후 10 턴이 지나면 폭발합니다. 터지면 방사능을 남기" +#~ "며, 폭발력은 집 하나를 날려버리기에 충분합니다." -#~ msgid "Jones" -#~ msgstr "존스" +#~ msgid "A rare and arcane device, covered in alien markings." +#~ msgstr "" +#~ "매우 희귀하고 알 수 없는 방식으로 작동하는 장치입니다. 알 수 없는 기괴한 " +#~ "문양으로 덮여있습니다." -#~ msgid "Julia" -#~ msgstr "줄리아" +#~ msgid "" +#~ "This miniature nuclear bomb has a light blinking on the side, showing " +#~ "that it will soon explode. You should probably get far away from it." +#~ msgstr "" +#~ "옆부분에 빛이 깜빡거리는 소형화된 핵폭탄입니다. 곧 폭발할 것 같아보입니" +#~ "다. 멀리 피해야만 합니다." -#~ msgid "Juan" -#~ msgstr "후안" +#~ msgid "" +#~ "An advanced version of the unified power supply, or UPS. This device has " +#~ "been significantly redesigned to provide better efficiency as well as to " +#~ "consume plutonium fuel cells rather than batteries." +#~ msgstr "" +#~ "통합 전원 장치의 개량된 버전입니다. 효율이 떨어지는 배터리 대신 플루토늄 " +#~ "연료 전지를 사용해서, 높은 효율을 내도록 만들어졌습니다." -#~ msgid "Josiah" -#~ msgstr "조시어" +#~ msgid "" +#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " +#~ "air. They are covered with whirring blades and attack by throwing " +#~ "themselves against their target. Use this item to activate the manhack." +#~ msgstr "" +#~ "비활성화된 맨핵입니다. 맨핵은 공중에 뜨는 능력이 있는, 주먹 크기의 로봇입" +#~ "니다. 회전하는 칼날이 부착되어 있어 작동되면 적에 직접 부딪치는 방식으로 " +#~ "공격합니다.\r\n" +#~ "(a) 키로 사용하면 맨핵을 활성화 시킵니다." -#~ msgid "Joshua" -#~ msgstr "조슈아" +#~ msgid "" +#~ "An inactive turret. Using this item involves turning it on and placing it " +#~ "on the ground, where it will attach itself. The turret will then identify " +#~ "you as a friendly, and attack all enemies with an SMG." +#~ msgstr "" +#~ "비활성화된 터렛. 작동시켜서 땅 위에 올려두면 자동으로 설치됩니다. 터렛은 " +#~ "당신을 아군으로 생각할 것이며, 모든 적들을 기관단총으로 공격할 것입니다." -#~ msgid "Johnson" -#~ msgstr "존슨" +#~ msgid "" +#~ "A stone with spirals all over it, and holes around its perimeter. Though " +#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " +#~ "it." +#~ msgstr "" +#~ "나선이 빼곡히 새겨진 돌입니다. 주변부에 구멍이 많이 뚫려있습니다.\r\n" +#~ "상당히 큼직지만, 무게는 그리 나가지 않습니다. 바람이 주위로 모여드는 것 같" +#~ "습니다." -#~ msgid "Jennifer" -#~ msgstr "제니퍼" +#~ msgid "" +#~ "A portable games console in working condition, with a backlit screen " +#~ "allowing you to play in the dark. You can use it to play it for a little " +#~ "while, but this requires batteries." +#~ msgstr "" +#~ "백라이트 액정이 달려, 어두운 곳에서도 사용할 수 있는 휴대용 게임기입니다. " +#~ "사용하면 갖고 놀 수 있지만, 배터리가 필요합니다." -#~ msgid "Jeremiah" -#~ msgstr "제레미" +#~ msgid "" +#~ "A high-powered stun gun. Use this item to attempt to electrocute an " +#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " +#~ "shock can actually jump through the air, it is difficult to miss." +#~ msgstr "" +#~ "고전압의 전기 충격기. 인접한 적을 감전시켜 피해를 주고, 일시적으로 마비시" +#~ "킵니다.\r\n" +#~ "충격이 공기를 빠르게 통과하여 날아가는 형식이기 때문에, 빗나갈 확률이 거" +#~ "의 없습니다." -#~ msgid "Jessica" -#~ msgstr "제시카" +#~ msgid "Food for dogs. It smells strange, but dogs love it." +#~ msgstr "개를 위한 사료. 이상한 냄새가 나지만, 개들은 정말 좋아합니다." -#~ msgid "Jessie" -#~ msgstr "제시" +#~ msgid "A human skull with strange etchings covering it." +#~ msgstr "수상한 문양이 아로새겨진 인간의 두개골입니다." -#~ msgid "Jesus" -#~ msgstr "지져스" +#~ msgid "A crude explosive device triggered by a piece of string." +#~ msgstr "줄 하나로 작동되는, 대충 만들어진 기폭 장치입니다." -#~ msgid "Jocelyn" -#~ msgstr "조셀린" +#~ msgid "" +#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " +#~ "and ticking!" +#~ msgstr "" +#~ "고폭탄입니다. 주의해서 사용하십시오! 작은 타이머가 달려있습니다.\r\n" +#~ "이미 작동되어, 째깍거리는 소리를 내고 있습니다!" -#~ msgid "John" -#~ msgstr "존" +#~ msgid "Highly explosive, use with caution! Armed with a small timer." +#~ msgstr "고폭탄입니다. 주의해서 사용하십시오! 작은 타이머가 달려있습니다." -#~ msgid "Jenkins" -#~ msgstr "젠킨슨" +#~ msgid "" +#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " +#~ "from the floor, making it easier to sleep" +#~ msgstr "" +#~ "단단히 말아서 보관할 수 있는 발포지. 바닥의 냉기나 열기로부터 조금 떨어지" +#~ "게 해서, 조금 더 잠들기 쉽게 만들어줍니다." -#~ msgid "Jen" -#~ msgstr "젠" +#~ msgid "" +#~ "A military style fold up cot, not quite as comfortable as a bed but much " +#~ "better than slumming it on the ground." +#~ msgstr "" +#~ "군대식의 접이식 간이 침대. 침대만큼 편하진 않지만, 땅바닥에서 자는 것보단 " +#~ "낫습니다." -#~ msgid "Jack" -#~ msgstr "잭" +#~ msgid "" +#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " +#~ "the sample. Use this tool to draw blood, either from yourself or from a " +#~ "corpse you are standing on." +#~ msgstr "" +#~ "혈액을 채취하는데 사용하는 도구입니다. 샘플을 담기 위한 진공 포장 튜브도 " +#~ "있습니다. 이것을 사용해 자신이나, 당신 발 밑에 있는 시체의 혈액을 채혈할 " +#~ "수 있습니다." -#~ msgid "Jayden" -#~ msgstr "제이든" +#~ msgid "" +#~ "A small whistle. When used, it produces a high tone that causes nearby " +#~ "friendly dogs to either follow you closely and stop attacking, or start " +#~ "attacking enemies if they are currently docile." +#~ msgstr "" +#~ "작은 호루라기입니다. 사용하면 고주파가 발생되어 주변의 우호적인 개들이 당" +#~ "신을 따라오거나, 당신을 공격하는 걸 멈추거나, 또는 적에게 공격을 가하기도 " +#~ "합니다." -#~ msgid "James" -#~ msgstr "제임스" +#~ msgid "" +#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " +#~ "with. Its small tip allows for a precision strike in the hands of the " +#~ "skilled. It is too small to butcher corpses with." +#~ msgstr "" +#~ "작고, 굉장히 예리한 칼입니다. 그럭저럭 나쁘지 않은 데미지를 주며, 보통 이 " +#~ "무기를 명중시키는 것은 어렵지만 숙련된 사람은 아주 정확한 공격을 할 수 있" +#~ "습니다. 시체를 도축하기에는 너무 칼이 작습니다. (역주 : 실제 있는 유틸리" +#~ "티 나이프입니다. 프라모델, 공작용)" -#~ msgid "Isabelle" -#~ msgstr "이사벨" +#~ msgid "This huge iron knife makes an excellent melee weapon." +#~ msgstr "거대한 철제 칼로, 훌륭한 근접전 무기입니다." -#~ msgid "Isaiah" -#~ msgstr "이사야" +#~ msgid "" +#~ "This huge iron knife has been modified with a fuel tank, insulated " +#~ "handguard and ignition system. The blade is glowing with heat, making it " +#~ "a great plant scorcher and nightlight." +#~ msgstr "" +#~ "연료 탱크를 부착한, 큰 철로 만든 나이프입니다. 손 보호부와 점화 부품이 달" +#~ "려있어서, 칼날에 불이 붙은 상태입니다. 칼날에서 빛이 나며, 뭔가를 태우기" +#~ "에 좋을 것 같습니다." -#~ msgid "Jacob" -#~ msgstr "제이콥" +#~ msgid "" +#~ "This huge iron knife has been modified with a fuel tank, insulated " +#~ "handguard and ignition system. When filled with gasoline, a system of " +#~ "torches heats the blade, burning your target." +#~ msgstr "" +#~ "연료 탱크를 부착한, 큰 철로 만든 나이프입니다. 손 보호부와 점화 부품이 달" +#~ "려있어서, 가솔린을 채워서 작동시키면 칼날에 불이 붙어 적을 불태울 수 있습" +#~ "니다." -#~ msgid "Jackson" -#~ msgstr "잭슨" +#~ msgid "" +#~ "People love fire, and people love katanas, so why not put them together? " +#~ "The gas burners attached to this blade can really turn up the heat on " +#~ "your foes." +#~ msgstr "" +#~ "사람들은 일본도와 불을 사랑합니다. 그러니 같이 쓰면 좋지 않을까요? 가스 버" +#~ "너가 칼날에 부착되어 있어서, 적을 불태워버릴 수 있습니다." -#~ msgid "Jaden" -#~ msgstr "제이든" +#~ msgid "" +#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " +#~ "effective against armor." +#~ msgstr "" +#~ "일본의 진귀한 칼입니다. 방어구를 입지 않은 적을 상태로 치명적인 데미지를 " +#~ "줍니다.\r\n" +#~ "하지만, 그렇다고 방어구를 입은 적에게 효과가 없는건 아닙니다." -#~ msgid "Jason" -#~ msgstr "제이슨" +#~ msgid "A simple wood pole made deadlier by the blade tied to it." +#~ msgstr "" +#~ "간단한 나무 막대기에 칼날을 끝에 묶음으로써, 치명적인 무기로 재탄생되었습" +#~ "니다." -#~ msgid "Jasmine" -#~ msgstr "재스민" +#~ msgid "" +#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " +#~ "makes any battle a stylish battle." +#~ msgstr "" +#~ "신사나 허세부리길 좋아하는 사람들이 선호하는 무기입니다.\r\n" +#~ "가볍고 빠른 무기로, 어떠한 전투든 우아하게 바꿔줄 것입니다." -#~ msgid "Isabella" -#~ msgstr "이사벨라" +#~ msgid "" +#~ "A katana that glows with the fury and heat of the SUN! Well, okay it's " +#~ "not THAT hot, but getting hit with it still stings like the dickens." +#~ msgstr "" +#~ "태양 같은 열기를 내뿜는, 불붙은 일본도 입니다. 물론 태양과 같은 열기를 내" +#~ "뿜는건 아니지만, 명중하면 상당한 피해를 줍니다." -#~ msgid "Isaac" -#~ msgstr "아이작" +#~ msgid "" +#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " +#~ "Though large and heavy compared to other spears, its accuracy and damage " +#~ "are unparalled." +#~ msgstr "" +#~ "중세시대의 무기로, 나무로 된 자루와 철제 스파이크를 가지고 있습니다.\r\n" +#~ "다른 창들과 비교해 무겁고 큰 편이지만, 그 정확도와 데미지는 어떤 창에도 견" +#~ "줄 수 없습니다." -#~ msgid "Hunter" -#~ msgstr "헌터" +#~ msgid "" +#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " +#~ "Called 'broad' to contrast with the slimmer rapiers." +#~ msgstr "" +#~ "근대 초기, 즉 16~18세기까지 사용되었던 검입니다.\r\n" +#~ "'넒다(Broad)'라는 말은, 얆은 레이피어에 비해서 넒다는 뜻입니다." -#~ msgid "Ian" -#~ msgstr "란" +#~ msgid "A huge two-handed sword from Germany. Packs a real whallop." +#~ msgstr "" +#~ "독일에서 처음 만들어진 거대한 양손검입니다. 적에게 일격을 날려보세요." -#~ msgid "Howard" -#~ msgstr "하워드" +#~ msgid "" +#~ "A large blade that has had a portion of the handle wrapped in duct tape, " +#~ "making it easier to wield as a rough machete." +#~ msgstr "" +#~ "큰 칼날의 밑부분을 접착 테이프로 감아서, 손잡이로 쓸 수 있게 만든 칼입니" +#~ "다. 조잡한 정글도 정도로 사용할 수 있습니다." -#~ msgid "Hughes" -#~ msgstr "휴즈" +#~ msgid "" +#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " +#~ "built into the insulated hilt. The blade is glowing brightly." +#~ msgstr "" +#~ "큰 칼날 옆에 연료 파이프, 작은 연료 탱크, 점화기, 방열 손잡이가 달린 무기" +#~ "입니다. 칼날이 밝게 빛나고 있습니다." -#~ msgid "Hernandez" -#~ msgstr "헤르난데스" +#~ msgid "" +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. Light it up and show those heathen zombies " +#~ "who's Lord around here." +#~ msgstr "" +#~ "중세 암흑기의 고전적인 결의 표현 도구였던 브로드 소드와, 횃불을 합친 것입" +#~ "니다. 좀비들을 불태우고 신이 아직 존재하심을 보여줍시다." -#~ msgid "Hill" -#~ msgstr "힐" +#~ msgid "" +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " +#~ "eat it's heart out." +#~ msgstr "" +#~ "중세 암흑기의 고전적인 결의 표현 도구였던 브로드 소드와, 횃불을 합친 것입" +#~ "니다. 칼날이 열로 빛나고 있습니다. 꼭 엑스칼리버 같네요." -#~ msgid "Isabel" -#~ msgstr "이사벨" +#~ msgid "" +#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " +#~ "built into the insulated hilt. When filled with gasoline, the blade can " +#~ "be made scorching hot to singe enemies and light your way." +#~ msgstr "" +#~ "큰 칼날 옆에 연료 파이프, 작은 연료 탱크, 점화기, 방열 손잡이가 달린 무기" +#~ "입니다. 연료가 있으면 칼날이 불로 타올라, 적을 태워버리고 앞을 밝힐 수 있" +#~ "습니다." -#~ msgid "Hikari" -#~ msgstr "히카리" +#~ msgid "" +#~ "A large blade attached to a long stick. Could do a considerable amount of " +#~ "damage." +#~ msgstr "" +#~ "큰 칼날을 긴 막대에 붙인 무기입니다. 상당한 양의 데미지를 줄 수 있습니다." -#~ msgid "Hayes" -#~ msgstr "헤이즈" +#~ msgid "" +#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " +#~ "butchering corpses." +#~ msgstr "" +#~ "날카롭고 무거운 칼입니다. 좋은 근접전 무기일 뿐만 아니라, 시체를 도축하는" +#~ "데 있어 최고의 무기입니다." -#~ msgid "Heather" -#~ msgstr "헤더" +#~ msgid "" +#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " +#~ "corpses." +#~ msgstr "" +#~ "날카로운 나이프입니다. 근접전 무기로써는 형편없지만, 시체를 도축할 때 상당" +#~ "히 좋습니다." -#~ msgid "Hayden" -#~ msgstr "헤이던" +#~ msgid "" +#~ "Designed for combat, and deadly in the right hands. Can be used to " +#~ "butcher corpses." +#~ msgstr "" +#~ "전투용으로 설계되었으며, 능숙한 손에 들리면 치명적인 군용 나이프입니다." +#~ "\r\n" +#~ "시체를 도축할 때 사용할 수 있습니다." -#~ msgid "Harris" -#~ msgstr "해리스" +#~ msgid "" +#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " +#~ "producing plenty of light" +#~ msgstr "" +#~ "천에 휘발유를 적셔 큰 막대기에 감아둔 횃불입니다. 불타고 있으며, 환하게 빛" +#~ "을 뿜어내고 있습니다." -#~ msgid "Hannah" -#~ msgstr "헤나" +#~ msgid "" +#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " +#~ "amount of light" +#~ msgstr "" +#~ "천에 휘발유를 적셔 큰 막대기에 감아둔 횃불입니다. 불을 붙이면 상당한 빛을 " +#~ "제공합니다." -#~ msgid "Hall" -#~ msgstr "홀" +#~ msgid "A small tent, just big enough to fit a person comfortably." +#~ msgstr "사람 한 명이 들어가 쉴 만한 크기의, 소형 텐트입니다." -#~ msgid "Hailey" -#~ msgstr "헤일리" +#~ msgid "A sturdy saw, useful for cutting through metal objects." +#~ msgstr "금속 물체를 자르는데 유용한, 튼튼한 톱입니다." -#~ msgid "Griffin" -#~ msgstr "그리핀" +#~ msgid "" +#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." +#~ msgstr "" +#~ "커다란 양손 도끼로, 근접전 무기로 유용하지만 공격은 조금 느려집니다." -#~ msgid "Henry" -#~ msgstr "헨리" +#~ msgid "" +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time. This candle is lit." +#~ msgstr "" +#~ "굵은 양초입니다. 아주 밝은 빛을 내진 않지만, 제법 오랫동안 켜둘 수 있습니" +#~ "다. 이 양초는 켜져 있습니다." -#~ msgid "Henderson" -#~ msgstr "헨더슨" +#~ msgid "" +#~ "A large stand with slots in the side. (a)ctivate it and place it " +#~ "somewhere then set fires in it with no risk of spreading." +#~ msgstr "" +#~ "한 쪽에 구멍이 있는 스탠드입니다. (a) 키를 눌러 설치하며, 불을 화재의 위" +#~ "험 없이 붙일 수 있습니다." -#~ msgid "Gianna" -#~ msgstr "지안나" +#~ msgid "" +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time." +#~ msgstr "" +#~ "굵은 양초입니다. 아주 밝은 빛을 내진 않지만, 제법 오랫동안 켜둘 수 있습니" +#~ "다." -#~ msgid "Gonzales" -#~ msgstr "곤잘레스" +#~ msgid "" +#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " +#~ "container beneath it to collect water when it rains." +#~ msgstr "" +#~ "빗물을 모으는 깔때기입니다. 야외에서 'a' 키를 눌러 작동한 다음 밑에 용기" +#~ "를 놔두면, 비가 올 때 물을 모을 수 있습니다." -#~ msgid "Gonzalez" -#~ msgstr "곤잘레스" +#~ msgid "" +#~ "A small hand press for hand loading firearm ammunition. Comes with " +#~ "everything you need to start hand loading." +#~ msgstr "" +#~ "총기의 탄약에 장약을 넣는데 사용하는, 소형 수동 압착기입니다. 탄약 제작에 " +#~ "필요한 다른 도구도 포함되어 있습니다." -#~ msgid "Grace" -#~ msgstr "그레이스" +#~ msgid "" +#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " +#~ "outside and place a container beneath it to collect water when it rains." +#~ msgstr "" +#~ "빗물을 모으는 수제 깔때기입니다. 야외에서 'a' 키를 눌러 작동한 다음 밑에 " +#~ "용기를 놔두면, 비가 올 때 물을 모을 수 있습니다." -#~ msgid "Gavin" -#~ msgstr "개빈" +#~ msgid "A tool used for disassembling firearm ammunition." +#~ msgstr "탄환류의 분해에 쓰이는 도구입니다." -#~ msgid "Genesis" -#~ msgstr "지노시스" +#~ msgid "" +#~ "A Philips-head screwdriver, important for almost all electronics crafting " +#~ "and most mechanics crafting." +#~ msgstr "" +#~ "필립스 사에서 만든 드라이버입니다. 거의 모든 전자기기 제작과 다른 기계 제" +#~ "작에 상당히 중요하게 쓰입니다." -#~ msgid "Gracie" -#~ msgstr "그레이시" +#~ msgid "" +#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " +#~ "mechanics crafting recipes." +#~ msgstr "" +#~ "조절 가능한 렌치입니다. 근접무기로도 쓸만하며, 다양한 기계 제작에 쓰입니" +#~ "다." -#~ msgid "Gray" -#~ msgstr "그레이" +#~ msgid "" +#~ "An improvised easy breaking picklock made from scrap metal, needs " +#~ "MacGyver like skills to open locks, it's light material lessens chances " +#~ "of alarms being set off." +#~ msgstr "" +#~ "고철로 만든 조잡한 락픽입니다. 쉽게 부러지기 때문에, 이걸로 잠금 장치를 열" +#~ "려면 맥가이버 급의 기술이 필요합니다. 대신 아주 가볍기 때문에, 경보를 울" +#~ "릴 가능성은 낮습니다." -#~ msgid "Gendo" -#~ msgstr "겐도" +#~ msgid "" +#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " +#~ "quickly opening locks." +#~ msgstr "" +#~ "조용히 잠금장치를 여는데 필요한, 자물쇠 수리공의 견고한 철제 도구입니다." -#~ msgid "Green" -#~ msgstr "그린" +#~ msgid "An unwieldy mop. Good for cleaning up spills." +#~ msgstr "다루기 불편한 대걸레입니다. 바닥의 액체를 닦아낼 때 사용합니다." -#~ msgid "Emily" -#~ msgstr "에밀리" +#~ msgid "" +#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " +#~ "gauge wire." +#~ msgstr "" +#~ "대형 절단기입니다. 사용하여 맹꽁이자물쇠나 굵은 철사를 잘라낼 수 있습니다." -#~ msgid "Emma" -#~ msgstr "엠마" +#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." +#~ msgstr "올가미 덫에 사용하기 위해 손질한 막대기입니다." -#~ msgid "Eben" -#~ msgstr "에번" +#~ msgid "" +#~ "A combination lock box, breaking inside would destroy anything of value." +#~ msgstr "" +#~ "복합 잠금 장치가 되어있는 상자입니다. 강제로 열면 안에 있는 것이 부서질 " +#~ "것 같습니다." -#~ msgid "Edwards" -#~ msgstr "에드워드" +#~ msgid "" +#~ "A spray can, filled with paint. Use this tool to make graffiti on the " +#~ "floor." +#~ msgstr "페인트 스프레이입니다. 사용하여 바닥에 낙서를 할 수 있습니다." -#~ msgid "Ella" -#~ msgstr "엘라" +#~ msgid "A large steel pickaxe, strike the earth!" +#~ msgstr "큼직한 철제 곡괭이입니다. 땅을 찍으세요!" -#~ msgid "Eli" -#~ msgstr "엘리" +#~ msgid "" +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." +#~ msgstr "" +#~ "'킹 사이즈' 사의 공업용 반영구 마커입니다. 일반적인 마커와 캔 스프레이의 " +#~ "중간 정도 크기입니다." -#~ msgid "Elijah" -#~ msgstr "일라이자" +#~ msgid "A piece of kevlar. Can be used to repair kevlar items" +#~ msgstr "" +#~ "케블라, 즉 방탄 직물 조각입니다. 케블라로 만들어진 물품을 수리할 때 사용됩" +#~ "니다." -#~ msgid "Elizabeth" -#~ msgstr "엘리자베스" +#~ msgid "" +#~ "A small multipurpose electronic device. This PDA has its flashlight app " +#~ "on, and is providing light." +#~ msgstr "" +#~ "다용도 소형 전자기기입니다. 이 PDA 에는 손전등 앱이 들어있어서, 조명으로 " +#~ "사용할 수 있습니다." -#~ msgid "Ethan" -#~ msgstr "에단" +#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgstr "" +#~ "작은 주머니 칼입니다. 전투에는 적합하지 않지만, 그래도 없는 것보다는 낫습" +#~ "니다." -#~ msgid "Eric" -#~ msgstr "에릭" +#~ msgid "" +#~ "A small multipurpose electronic device. Can be loaded with a variety of " +#~ "apps, providing all kinds of functionality." +#~ msgstr "" +#~ "다용도 소형 전자기기입니다. 다양한 앱을 로드해서 수많은 기능을 사용할 수 " +#~ "있습니다." -#~ msgid " You also need level " -#~ msgstr " 또한 " +#~ msgid "" +#~ "A sharpened stone affixed to a stick, works passably well as an axe but " +#~ "really can't compare to a proper axe." +#~ msgstr "" +#~ "막대기에 날카로운 돌을 붙인 것입니다. 도끼로 사용할 수 있지만, 진짜 도끼보" +#~ "다는 못합니다." -#~ msgid " skill in mechanics to install additional engine." -#~ msgstr " 기계공학 기술이 있으면 추가 엔진을 설치 할수 있음." +#~ msgid "" +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." +#~ msgstr "" +#~ "납작한 돌을 막대기에 묶은 것입니다. 삽으로 사용할수 있지만, 진짜 삽보다는 " +#~ "못합니다." -#~ msgid "Needs " -#~ msgstr " 조건 " +#~ msgid "" +#~ "A rock affixed to a stick, functions adequately as a hammer, but really " +#~ "can't compare to a proper hammer." +#~ msgstr "" +#~ "돌에 막대기를 부착한 것입니다. 망치로서는 충분한 기능을 수행하지만, 진짜 " +#~ "망치보다는 못합니다." -#~ msgid ", a " -#~ msgstr ", " +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. Usable only " +#~ "once." +#~ msgstr "운동 부상 치료와 음식을 데울 때 사용하는 발열팩으로, 일회용입니다." -#~ msgid ", and level " -#~ msgstr ", 그리고 레벨 " +#~ msgid "" +#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " +#~ "shelter has been damaged, and needs repairs." +#~ msgstr "" +#~ "작은 피난처를 만드는데 필요한 막대기와 천입니다. (a) 키로 설치합니다. 이 " +#~ "키트는 손상을 입었기 때문에, 수리가 필요합니다." -#~ msgid " skill in mechanics." -#~ msgstr " 기계공학 기술 필요" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. This one has " +#~ "been used already and is now useless." +#~ msgstr "" +#~ "운동 부상 치료와 음식을 데울 때 사용하는 발열팩입니다. 이미 사용했기 때문" +#~ "에, 이제 쓸모가 없습니다." -#~ msgid "K dynamics: " -#~ msgstr "K dynamics: " +#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgstr "" +#~ "작은 피난처를 만드는데 필요한 막대기와 천입니다. (a) 키로 설치합니다." -#~ msgid "K mass: " -#~ msgstr "K mass: " +#~ msgid "" +#~ "A large stick, with the end carved into a blade for digging. Can be used " +#~ "to dig shallow pits, but not deep ones." +#~ msgstr "" +#~ "끝을 날처럼 깎아서 구멍을 파는데 쓰는 긴 막대기입니다. 얕은 구멍은 팔 수 " +#~ "있지만, 깊은 구덩이는 팔 수 없습니다." -#~ msgid "You need level %d skill in mechanics." -#~ msgstr "기계공학 스킬이 %d 필요합니다." +#~ msgid "" +#~ "A sealed glass jar containing some meat. Activate to open and enjoy." +#~ msgstr "" +#~ "유리병에 고기를 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." -#~ msgid " to remove parts." -#~ msgstr " 으로 부품 제거" +#~ msgid "" +#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " +#~ "make it ready to fire. Once activated, it cannot be repacked." +#~ msgstr "" +#~ "가지고 다니기 위해 접어놓은 M72 LAW 입니다. (a) 키로 무기를 펼쳐 발사할 " +#~ "수 있게 만들 수 있습니다. 단 한번 펴면, 다시 접을 수 없습니다." -#~ msgid "Gabrielle" -#~ msgstr "가브리엘" +#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." +#~ msgstr "" +#~ "채소를 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." -#~ msgid "Garcia" -#~ msgstr "가르시아" +#~ msgid "" +#~ "A sealed glass jar containing human meat. Activate to open and enjoy." +#~ msgstr "" +#~ "대체 고기... 즉 인육을 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 " +#~ "수 있습니다." -#~ msgid "Foster" -#~ msgstr "포스터" +#~ msgid "A sealed glass jar containing kompot. Activate to open and enjoy." +#~ msgstr "" +#~ "캄포트가 들어있는 밀봉된 유리병입니다. (a) 키로 열어서 먹을 수 있습니다. " +#~ "캄포트는 과일을 넣고 물을 많이 넣어 끓인 주스입니다." -#~ msgid "Gabriella" -#~ msgstr "가브리엘라" +#~ msgid "" +#~ "A sealed glass jar containing pickled meat. Activate to open and enjoy." +#~ msgstr "" +#~ "절인 고기를 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." -#~ msgid "Gabriel" -#~ msgstr "가브리엘" +#~ msgid "" +#~ "A sealed glass jar containing a pickled vegetable. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "절인 채소를 유리병에 넣어 밀봉한 것입니다. (a) 키로 열어 먹을 수 있습니다." -#~ msgid "Faith" -#~ msgstr "페이트" +#~ msgid "" +#~ "A sealed glass jar containing pickled human flesh. Activate to open. You " +#~ "might even enjoy it." +#~ msgstr "" +#~ "절인 인육을 유리병에 넣어 밀봉한 것입니다. (a)로 열어 먹을 수 있습니다. 조" +#~ "금 더 맛있을지도 모릅니다." -#~ msgid "Flores" -#~ msgstr "플로레스" +#~ msgid "" +#~ "A cordless drill with a selection of drill bits. The charger base " +#~ "contains a battery draining attachment so the drill can be charged in " +#~ "lieu of mains power." +#~ msgstr "" +#~ "몇개의 드릴이 포함된 무선 드릴입니다. 충전장치에 배터리를 사용할 수 있는 " +#~ "부분이 추가로 있어서, 주 전원 없이도 사용할 수 있습니다." -#~ msgid "Evans" -#~ msgstr "에반스" +#~ msgid "A decent sized piece of cotton designed for medical purposes." +#~ msgstr "의료용으로 만들어진, 적당한 크기의 면 조각입니다." -#~ msgid "Evan" -#~ msgstr "에반" +#~ msgid "" +#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "플라스틱 비닐을 이용해 진공 포장한 야채 조각입니다. (a) 키로 열어서 먹을 " +#~ "수 있습니다." -#~ msgid "Diaz" -#~ msgstr "디아즈" +#~ msgid "" +#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." +#~ msgstr "" +#~ "공기 펌프를 사용하여 진공상태로 만든 후, 열을 가해 밀봉하는 이동식 진공 포" +#~ "장기입니다. 음식을 포장하는데 사용할 수 있습니다." -#~ msgid "Diego" -#~ msgstr "디에고" +#~ msgid "" +#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "플라스틱 비닐을 이용해 진공 포장한 고기 조각입니다. (a) 키로 열어서 먹을 " +#~ "수 있습니다." -#~ msgid "Dominic" -#~ msgstr "도미닉" +#~ msgid "" +#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " +#~ "metal, and complete disregard for personal safety. Not as efficient as a " +#~ "factory welder, but it will serve in a pinch." +#~ msgstr "" +#~ "구리 전선과 고철을 가지고 직접 손으로 만든, 조악한 수제 용접기입니다. 사용" +#~ "자 안전성 따위는 고려되지 않았습니다. 공장제 용접기만큼 효율적이지는 않지" +#~ "만, 그래도 작동은 합니다." -#~ msgid "Dylan" -#~ msgstr "딜런" +#~ msgid "A bicycle folded into a relatively portable package." +#~ msgstr "보관하기 쉽도록 접을 수 있는 자전거입니다." -#~ msgid "Davis" -#~ msgstr "데이비스" +#~ msgid "A fluffy towel, can be used to dry yourself." +#~ msgstr "" +#~ "털이 많은 수건으로, 젖은 몸을 말리는데 쓸 수 있습니다. 여행자의 필수품이" +#~ "죠." -#~ msgid "Destiny" -#~ msgstr "데스티니" +#~ msgid "A talking doll for children, luckily it still works." +#~ msgstr "" +#~ "어린아이들이 가지고 노는, 말하는 인형입니다. 운 좋게도, 아직 작동합니다." #~ msgid "" -#~ "Your legs have transformed into six tentacles. This decreases your speed " -#~ "on land by 20%%, but makes your movement silent. However, they also " -#~ "increase your swimming speed. Somewhat decreases wet penalties." +#~ "A fine glass tube with a bulb on the end, used in partaking of certain " +#~ "illicit substances." #~ msgstr "" -#~ "다리가 6개의 촉수로 바뀌었습니다. 지상에서 이동시 속도가 20%% 감소하지만, " -#~ "소음을 내지 않고 이동할수 있으며, 수영시 이동속도가 증가합니다. 물에 젖을" -#~ "때 패널티를 줄여줍니다." +#~ "끝부분이 원형인 유리관입니다. 몇몇 불법적인 약물을 흡입하는데 사용됩니다." -#~ msgid "Clark" -#~ msgstr "클라크" +#~ msgid "" +#~ "A hand-carved wooden smoking pipe designed to facilitate consumption of " +#~ "fire cured tobacco leaves." +#~ msgstr "" +#~ "손으로 직접 조각해서 만든 목제 담뱃대입니다. 담배잎을 태워 흡입하는데 사용" +#~ "됩니다." -#~ msgid "Daisuki" -#~ msgstr "다이스키" +#~ msgid "" +#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " +#~ "cooking or in metalworking fabrication recipes." +#~ msgstr "" +#~ "긴 철제 집게 입니다. 근접 무기로도 쓸만하며, 일반적으로 금속 물품을 제작" +#~ "할 때 사용됩니다. 음식을 만들 때 사용하기도 합니다." -#~ msgid "Connor" -#~ msgstr "코너" +#~ msgid "" +#~ "An enormously heavy block of oddly shaped steel with a chisel-like " +#~ "projection set into the corner. Used in most metalworking fabrication " +#~ "recipes." +#~ msgstr "" +#~ "옆 부분이 정 모양으로 생긴, 거대하고 매우 무거운 쇳덩어리입니다. 철제 물" +#~ "품 제작에 주로 사용됩니다." -#~ msgid "Cook" -#~ msgstr "쿡" +#~ msgid "" +#~ "A portable electric metalworking forge, powered by standard batteries. " +#~ "Combined with the right tools, you can use this for metalworking." +#~ msgstr "" +#~ "이동용 전기식 용광로입니다. 일반 배터리를 사용하며, 적절한 다른 도구와 함" +#~ "께 사용하면 철제 물품을 제작할 수 있습니다." -#~ msgid "Cooper" -#~ msgstr "쿠퍼" +#~ msgid "" +#~ "A set of swages and dies for metalsmithing. Used in some metalworking " +#~ "fabrication recipes." +#~ msgstr "금속 제작에 사용되는 거푸집과 압착기입니다. 금속 제작에 사용됩니다." -#~ msgid "Cox" -#~ msgstr "콕스" +#~ msgid "" +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire. This one features a flip top cover and can be " +#~ "refueled when empty." +#~ msgstr "" +#~ "다양한 담배, 약물, 혹은 화염병 등에 불을 붙이는 용도로 사용되는 라이터입니" +#~ "다. 이 라이터는 위를 열어 연료를 재충전할 수 있습니다." -#~ msgid "David" -#~ msgstr "데이비드" +#~ msgid "" +#~ "A bottle filled with match heads and equipped with a fuse. Use this item " +#~ "to light the fuse; you will, of course, need a lighter in your inventory " +#~ "to do this. After lighting it, throw it to cause fires." +#~ msgstr "" +#~ "병에 성냥머리를 채워넣고 퓨즈를 연결한 것입니다. 퓨즈에 불을 붙여 사용하" +#~ "며, 던지면 불을 낼 수 있습니다." -#~ msgid "Daniel" -#~ msgstr "다니엘" +#~ msgid "" +#~ "A bottle filled with match heads and equipped with a fuse. This one has " +#~ "been lit, and its fuse is rapidly burning down." +#~ msgstr "" +#~ "병에 성냥머리를 채워넣고 퓨즈를 연결한 것입니다. 퓨즈에 불이 붙어있으며, " +#~ "빠른 속도로 타들어가고 있습니다." -#~ msgid "Colton" -#~ msgstr "콜턴" +#~ msgid "" +#~ "A portable charcoal fired metalworking forge. Combined with the right " +#~ "tools, you can use this for metalworking." +#~ msgstr "" +#~ "목탄, 즉 숯을 사용하는 이동형 노입니다. 적당한 도구와 같이 사용하면 금속 " +#~ "물품을 제작할 수 있습니다." -#~ msgid "Collins" -#~ msgstr "콜린" +#~ msgid "A common hydraulic jack, used when changing tires." +#~ msgstr "" +#~ "차량을 들어올릴 때 사용하는 수압식 잭입니다. 타이어 교환시 사용됩니다." -#~ msgid "Coleman" -#~ msgstr "콜맨" +#~ msgid "" +#~ "A cute wiggling nose, cotton tail, and\n" +#~ "delicious flesh." +#~ msgstr "" +#~ "꼼지락거리는 귀여운 코, 복실복실한 꼬리, 그리고 맛있는 고기를 가지고 있습" +#~ "니다." -#~ msgid "Aizawa" -#~ msgstr "아이자와" +#~ msgid "" +#~ "An eastern coyote, also called tweed wolf. It is an hybrid of grey wolves " +#~ "and the smaller western coyotes." +#~ msgstr "" +#~ "얼룩이 늑대라고도 불리는 동부 코요테입니다. 회색 늑대와 좀더 작은 서부 코" +#~ "요테의 혼혈입니다." -#~ msgid "Akiko" -#~ msgstr "아키코" +#~ msgid "A large buck, fast-moving and strong." +#~ msgstr "큰 수컷 사슴으로, 속도가 빠르고 힘도 좋습니다." -#~ msgid "Christopher" -#~ msgstr "크리스토퍼" +#~ msgid "A vicious and fast hunter." +#~ msgstr "포악하며 재빠른 사냥꾼입니다." -#~ msgid "Christian" -#~ msgstr "크리스티안" +#~ msgid "An american black bear. Remember, only YOU can prevent forest fires." +#~ msgstr "" +#~ "미국 검은곰입니다. 기억하세요, '당신' 만이 산불을 막을 수 있습니다. (역" +#~ "주 : 미국의 유명한 산불 공익광고 모델이 검은 곰입니다)" -#~ msgid "Cole" -#~ msgstr "콜" +#~ msgid "A small domesticated cat, gone feral." +#~ msgstr "작은 크기의 가축화된 고양이입니다. 다시 야생화 되었습니다." -#~ msgid "Claire" -#~ msgstr "클레어" +#~ msgid "A medium-sized domesticated dog, gone feral." +#~ msgstr "중간 크기의 가축화된 개입니다. 다시 야생화 되었습니다." #~ msgid "" -#~ "The bottoms of your feet are strongly padded. You receive no movement " -#~ "penalty for not wearing shoes, and even receive a 10%% bonus when running " -#~ "barefoot. Slightly decreases wet penalties." +#~ "This ant has a long, bloated thorax, bulging\n" +#~ "with hundreds of small ant eggs. It moves\n" +#~ "slowly, tending to nearby eggs and laying\n" +#~ "still more." #~ msgstr "" -#~ "발바닥에 두꺼운 말랑거리는 부분이 있습니다. 신발을 신지 않아도 이동 패널티" -#~ "가 없으며, 오히려 달릴때 10% 의 보너스를 받습니다. 몸이 젖을때 받는 패널티" -#~ "를 약간 줄여줍니다." +#~ "이 개미는 크고, 부푼 가슴부분에 수백 개의 작은 개미알이 튀어나와 있습니" +#~ "다. 매우 느리게 움직이며 주변의 알을 돌보고 있고, 알을 더 낳고 있습니다." #~ msgid "" -#~ "Covering your body in clothing typical for the opposite gender makes you " -#~ "feel better." -#~ msgstr "자신의 성과 반대되는 옷을 입을때 기분이 좋습니다." - -#~ msgid "Cross-Dresser" -#~ msgstr "크로스-드레서" +#~ "This insect is pale gray in color, its\n" +#~ "chitin weakened by the fungus sprouting\n" +#~ "from every joint on its body." +#~ msgstr "" +#~ "이 곤충은 창백한 회색이며, 키틴질 갑각은 진균체에 감염되어 온몸의 관절에" +#~ "서 발아하고 있습니다." #~ msgid "" -#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "짧고 튼튼한 금속 제작용 정입니다. 금속 물품 제작시에 사용됩니다." +#~ "Darker in color than the other ants, this\n" +#~ "more aggresive variety has even larger\n" +#~ "mandibles." +#~ msgstr "" +#~ "다른 개미보다 어두운 놈으로, 좀더 공격적이며 큰 턱을 가지고 있습니다." #~ msgid "" -#~ "A huge curved two-handed sword from Japan. Surprisingly light for its " -#~ "size." +#~ "A red ant the size of a crocodile. It is\n" +#~ "covered in chitinous armor, and has a pair of\n" +#~ "vicious mandibles." #~ msgstr "" -#~ "일본에서 사용되었던 거대한 일본도 입니다. 크기에 비해 놀랍도록 가볍습니다." +#~ "악어 크기의 붉은 개미입니다. 키틴질 갑각으로 덮혀있으며, 흉악하게 생긴 턱" +#~ "을 가지고 있습니다." #~ msgid "" -#~ "A hand-blown glass pipe of the type most commonly used to smoke " -#~ "hallucinatory plants." -#~ msgstr "주로 환각성 식물을 피우는데 사용되는 유리관입니다." +#~ "The size of a large cat, this pulsating mass\n" +#~ "of glistening white flesh turns your stomach." +#~ msgstr "" +#~ "큰 고양이 크기의 꿈틀거리는 몸에, 반들거리는 눈이 당신을 바라보고 있습니" +#~ "다." #~ msgid "" -#~ "A small metalworking crucible. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "철제 물품 제작에 사용되는 소형 도가니입니다." +#~ "Half of this monster is emerging from a\n" +#~ "hole in the ground. It looks like a huge\n" +#~ "earthworm, but the end has split into a\n" +#~ "large, fanged mouth." +#~ msgstr "" +#~ "몸집의 반이 땅에 난 구멍 밖으로 나와있습니다. 거대한 지렁이처럼 보이지만, " +#~ "끝부분이 이빨이 난 거대한 입으로 나뉘어 있습니다." #~ msgid "" -#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " -#~ "stimulant when you inject yourself with it." +#~ "A large housefly the size of a small dog.\n" +#~ "It buzzes around incessantly." #~ msgstr "" -#~ "아드레날린이 들어있는 주사기입니다. 몸에 주입하면 강력한 각성 효과를 냅니" +#~ "작은 개 정도의 크기를 가진 집파리입니다. 미친듯이 왱왱거리며 날고 있습니" #~ "다." #~ msgid "" -#~ "A still, useful for the distillation of alcohol and other, more curious " -#~ "substances." +#~ "A honey bee the size of a small dog. It\n" +#~ "buzzes angrily through the air, dagger-\n" +#~ "sized sting pointed forward." #~ msgstr "" -#~ "알콜 혹은 다른 여러 의문스러운 물질을 증류하는데 사용되는 증류기입니다." +#~ "작은 개 정도의 크기를 가진 꿀벌입니다. 꼬리에 단검 크기의 벌침을 가지고 있" +#~ "으며, 화난 듯이 날고 있습니다." #~ msgid "" -#~ "This chemistry set stored in a bag contains some glass containers, some " -#~ "metal wire and safety glasses. It might be used to craft some chems if " -#~ "you're so inclined." +#~ "An evil-looking, slender-bodied wasp with\n" +#~ "a vicious sting on its abdomen." #~ msgstr "" -#~ "가방안에 몇가지 유리 용기, 철선, 보안경을 넣은 화학 용품 세트입니다. 화학 " -#~ "지식이 있으면 몇가지 화학 물질을 제조하는데 사용할수 있습니다." +#~ "흉악하게 생겼으며, 날렵한 몸을 가진 말벌입니다. 무서운 벌침을 가지고 있습" +#~ "니다." -#~ msgid "A plastic mold which can be used to craft items made of plastic." -#~ msgstr "플라스틱 물품을 만들때 사용하는 거푸집입니다." +#~ msgid "" +#~ "A hideous slithering beast with a tri-\n" +#~ "sectional mouth that opens to reveal\n" +#~ "hundreds of writhing tongues. Most of its\n" +#~ "enormous body is hidden underground." +#~ msgstr "" +#~ "입이 3부분으로 나뉘어 있으며 속에 수백 개의 움직이는 혀를 가진 괴물입니" +#~ "다.\n" +#~ "땅속으로 숨어다니며, 거대한 몸집 대부분이 땅 속에 있습니다." #~ msgid "" -#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " -#~ "enjoy." +#~ "This zombie's jaw has been torn off, leaving\n" +#~ "a gaping hole from mid-neck up." #~ msgstr "" -#~ "사과 조각을 플라스틱 비닐 진공 포장한것입니다. (a)로 열어 먹을수 있습니다." +#~ "이 좀비의 턱은 뜯겨져 나갔고, 목 중간 부분에 벌어진 구멍이 있습니다." -#~ msgid "vacuum-packed apple slices" -#~ msgstr "밀봉 포장 사과 조각(apple slices)" +#~ msgid "A portion of a giant worm that is still alive." +#~ msgstr "거대한 지렁이의 몸 일부입니다. 아직도 꿈틀거리며 살아있습니다." #~ msgid "" -#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." +#~ "A human body, stumbling slowly forward on\n" +#~ "uncertain legs, possessed with an unstoppable\n" +#~ "rage." #~ msgstr "" -#~ "조각낸 사과를 유리병에 넣어 밀봉한 것입니다. (a)로 열어 먹을수 있습니다." +#~ "사람의 형상을 하고 있습니다. 다리 힘이 풀린 채로 앞을 향해 비틀비틀 걸어가" +#~ "며, 끝없는 분노에 사로잡혀 있습니다." #~ msgid "" -#~ "A sharp needle made from a bone. It would be useful for making rough " -#~ "clothing and items" +#~ "This zombie's hands and feet are\n" +#~ "webbed, and it is clad in swimwear." #~ msgstr "" -#~ "뼈로 만든 날카로운 바늘입니다. 단순한 의류나 물품을 제작하는데 유용합니다." +#~ "이 좀비의 손과 발에는 갈퀴가 있어서, 마치 수영복을 입은 것 같습니다." -#~ msgid "A piece of plastic. Not much use except to repair plastic items" +#~ msgid "" +#~ "This zombie's flesh is pale blue, and it\n" +#~ "occasionally crackles with small bolts of\n" +#~ "lightning." #~ msgstr "" -#~ "플라스틱 물품을 수리하는 용도 이외에는 딱히 용도가 없는 플라스틱 조각입니" -#~ "다." - -#~ msgid "Rag, useful in crafting and possibly stopping bleeding" -#~ msgstr "출혈을 막거나 제작에 유용하게 사용되는 헝겊입니다." - -#~ msgid "A flimsy saw, useful for cutting through wood objects." -#~ msgstr "엉성하게 만든 톱입니다. 나무를 자르는데 유용합니다." +#~ "이 좀비의 살은 창백하면서도 파랗습니다. 그리고 주기적으로 몸에서 번개를 뿜" +#~ "어내며 파직 소리를 냅니다." -#~ msgid ".223 caliber retool" -#~ msgstr ".223 총열 부품(.223 caliber retool)" +#~ msgid "" +#~ "This zombie's mouth is deformed into a round\n" +#~ "spitter, and its body throbs with a dense\n" +#~ "yellow fluid." +#~ msgstr "" +#~ "이 좀비의 입은 무언가 뱉어낼 수 있게 변형됐습니다. 또한 이 좀비의 몸은 노" +#~ "란 액체로 꿀렁거리고 있습니다." -#~ msgid ".308 caliber retool" -#~ msgstr ".308 총열 부품(.308 caliber retool)" +#~ msgid "" +#~ "This deformed, sinewy canine stays close to\n" +#~ "the ground, loping forward faster than most\n" +#~ "humans ever could." +#~ msgstr "" +#~ "변형된 근육질의 개입니다. 땅에 붙은 채로 대부분의 인간보다 빠른 속도로 움" +#~ "직입니다." -#~ msgid "9mm caliber retool" -#~ msgstr "9mm 총열 부품(9mm caliber retool)" +#~ msgid "" +#~ "A hideous beast of a zombie, bulging with\n" +#~ "distended muscles on both arms and legs." +#~ msgstr "" +#~ "좀비 중에서도 가장 무시무시한 괴물입니다.\n" +#~ "양 팔과 다리의 근육들이 팽창하고 부풀어 있습니다." -#~ msgid ".22 caliber retool" -#~ msgstr ".22 총열 부품(.22 caliber retool)" +#~ msgid "" +#~ "A zombie that has somehow grown to the size of\n" +#~ "6 men, with arms as wide as a trash can." +#~ msgstr "" +#~ "어떻게인지는 몰라도, 사람 여섯명을 합쳐놓은 크기에 팔은 쓰레기통만큼 굵게 " +#~ "자라난 좀비입니다." -#~ msgid ".45 caliber retool" -#~ msgstr ".45 구경 교환기(.45 caliber retool)" +#~ msgid "" +#~ "This zombie was clearly a soldier before.\n" +#~ "Its tattered armor gives it strong defense,\n" +#~ "and it is much more physically fit than\n" +#~ "most zombies." +#~ msgstr "" +#~ "이 좀비는 군인이었던 것이 확실합니다. 입고 있는 찢어진 방어구 덕분에 방어" +#~ "력이 강하고, 대부분의 좀비들보다 육체능력도 뛰어납니다." -#~ msgid " and stunning it" -#~ msgstr " 그리고 기절 시켰다" +#~ msgid "" +#~ "A zombie with jet black skin and glowing red\n" +#~ "eyes. As you look at it, you're gripped by a\n" +#~ "feeling of dread and terror." +#~ msgstr "" +#~ "불에 탄 듯 검은 피부와 붉게 빛나는 눈을 가진 좀비입니다. 이 좀비를 보고 있" +#~ "자니, 엄청난 공포에 휩싸이는 것 같습니다." -#~ msgid "Fuel usage (safe): " -#~ msgstr "연료 소모량 (안전상태): " +#~ msgid "" +#~ "A zombie wearing a tattered lab coat and\n" +#~ "some sort of utility belt. It looks weaker\n" +#~ "than most zombies, but more resourceful too." +#~ msgstr "" +#~ "다목적 벨트와 찢어진 연구실 코트를 입은 좀비입니다. 일반적인 좀비보다 약해" +#~ "보이면서도, 일반적인 좀비들보다 유용한 것을 가지고 있습니다." -#~ msgid "Mass: lbs" -#~ msgstr "중량: 파운드" +#~ msgid "" +#~ "A skeleton picked clean of all but a few\n" +#~ "rotten scraps of flesh, somehow still in\n" +#~ "motion." +#~ msgstr "" +#~ "썩은 고깃 조각이 약간 달린 것을 제외하면, 깨끗한 뼈로 이루어진 좀비입니" +#~ "다. 무슨 이유에선지 아직도 움직이고 있습니다." -#~ msgid "You need a hose to siphon water." -#~ msgstr "물을 빨아내려면 호스가 필요하다." +#~ msgid "" +#~ "This zombie seems to have slightly longer\n" +#~ "than ordinary arms, and constantly gropes\n" +#~ "at its surroundings as it moves." +#~ msgstr "" +#~ "이 좀비는 보통 팔보다 약간 긴 팔을 가졌으며, 주변의 움직이는 것은 모두 붙" +#~ "잡으려고 합니다." -#~ msgid "Choose wheel to use as replacement: " -#~ msgstr "어느 바퀴로 갈아끼울지 선택하시오: " +#~ msgid "" +#~ "Hundreds of bee stings have given this zombie\n" +#~ "a thick covering of scar tissue, it will be\n" +#~ "much harder to damage than an ordinary zombie\n" +#~ "but moves a bit slower" +#~ msgstr "" +#~ "수백 방에 달하는 벌침은 이 좀비에게 두꺼운 흉터 조직을 남겼습니다.\n" +#~ "일반 좀비보다 쓰러뜨리기 어렵지만, 움직임이 느립니다." -#~ msgid "hose" -#~ msgstr "호스" +#~ msgid "" +#~ "An amalgamation of putrid human and animal\n" +#~ "parts that have become fused in this golem\n" +#~ "of flesh. The eyes of all the heads dart\n" +#~ "rapidly and the mouths scream or groan." +#~ msgstr "" +#~ "썩고 있는 인간과 동물 부위를 합쳐놓은 살덩이 골렘입니다. 몸에 붙어있는 눈" +#~ "이 빠르게 움직이며, 입에선 비명과 신음이 흘러나옵니다." -#~ msgid "You need a hose to siphon fuel." -#~ msgstr "연료를 흡인하려면 호스가 필요하다." +#~ msgid "" +#~ "This zombie seems to have a cloud of black\n" +#~ "dust surrounding it. It also seems to have\n" +#~ "a better grasp of movement than most..." +#~ msgstr "" +#~ "이 좀비는 검은 구름으로 둘러싸여 있습니다. 평범한 좀비들과는 격이 다른 것 " +#~ "같습니다..." -#~ msgid "You cannot remove mount point while something is attached to it." -#~ msgstr "무언가가 거치된 상태에선 거치대를 철거할 수 없다." +#~ msgid "" +#~ "A horrifying child zombie, you feel\n" +#~ "a twinge of remorse looking at it." +#~ msgstr "" +#~ "공포스러운 어린이 좀비입니다.\n" +#~ "보고 있으면 양심의 가책 때문에 고통스럽습니다." -#~ msgid "To change a wheel you need a " -#~ msgstr "휠을 바꾸기 위해서 필요한건 " +#~ msgid "" +#~ "A plant that grows as high as your head,\n" +#~ "with one thick, bark-coated stalk\n" +#~ "supporting a flower-like head with a sharp\n" +#~ "sting within." +#~ msgstr "" +#~ "머리 높이만큼 길게 자란 식물입니다. 두꺼운 껍질로 덮힌 줄기가 꽃처럼 생긴 " +#~ "머리를 받치고 있으며, 머리엔 날카로운 가시가 달려있습니다." -#~ msgid "You need %s." -#~ msgstr "당신은 %s가 필요하다." +#~ msgid "" +#~ "A thick stalk topped with a purple\n" +#~ "flower. The flower's petals are closed,\n" +#~ "and pulsate ominously." +#~ msgstr "" +#~ "자주색 꽃이 달려있는 두꺼운 줄기입니다. 꽃은 아직 피지 않았지만, 기분 나쁘" +#~ "게 흔들리고 있습니다." -#~ msgid "You also need a wrench and %s to replace broken one." -#~ msgstr "부서진 것을 교체하려면 렌치와 %s도 필요하다." +#~ msgid "" +#~ "A thick stalk, rooted to the ground.\n" +#~ "It rapidly sprouts thorny vines in all\n" +#~ "directions." +#~ msgstr "" +#~ "땅속에 뿌리를 내린 두꺼운 줄기입니다. 모든 방향으로 빠르게, 가시로 덮힌 줄" +#~ "기가 자라고 있습니다." -#~ msgid "You need a powered welder to repair." -#~ msgstr "수리를 위해서는 충전된 용접기가 필요하다." +#~ msgid "" +#~ "A very large triffid, with a particularly\n" +#~ "vicious sting and thick bark. As it\n" +#~ "moves, plant matter drops off its body\n" +#~ "and immediately takes root." +#~ msgstr "" +#~ "매우 큰 트리피드입니다. 극히 흉악스럽게 생긴 가시와 두꺼운 껍질을 가지고 " +#~ "있습니다. 움직이면 몸에서 식물 조각들이 떨어지는데, 조각들은 떨어지자마자 " +#~ "뿌리를 내립니다." -#~ msgid "Choose new part to install here: " -#~ msgstr "이 칸에 설치할 부품을 고르시오: " +#~ msgid "" +#~ "A small triffid, only a few feet tall. It\n" +#~ "has not yet developed bark, but its sting\n" +#~ "is still sharp and deadly." +#~ msgstr "" +#~ "어린 트리피드로, 아직 1 미터 정도밖에 자라지 않았습니다. 껍질이 자라지 않" +#~ "았지만, 가시는 여전히 날카롭고 위협적입니다." -#~ msgid "powered welder" -#~ msgstr "충전된 용접기" +#~ msgid "" +#~ "A thorny vine. It twists wildly as\n" +#~ "it grows, spreading rapidly." +#~ msgstr "" +#~ "가시로 덮힌 줄기입니다. 마구 꼬아져 있으며, 빠른 속도로 자라고 있습니다." -#~ msgid "You need a " -#~ msgstr "다음이 필요 " +#~ msgid "" +#~ "A fungal tendril just a couple feet tall. Its\n" +#~ "exterior is hardened into a leathery bark and\n" +#~ "covered in thorns; it also moves faster than\n" +#~ "full-grown fungaloids." +#~ msgstr "" +#~ "1미터 정도 길이의 진균체 덩굴손입니다. 가죽 질감의 껍질에 가시로 덮힌 외형" +#~ "을 가지고 있으며, 완전히 자란 진균체보다 빨리 움직입니다." -#~ msgid "The %s triggers a boobytrap!" -#~ msgstr "%s가 부비트랩을 건드렸다!" +#~ msgid "" +#~ "A pale white fungus, one meaty gray stalk\n" +#~ "supporting a bloom at the top. A few\n" +#~ "tendrils extend from the base, allowing\n" +#~ "mobility and a weak attack." +#~ msgstr "" +#~ "창백한 하얀색의 진균체 더미입니다. 고깃덩이같은 회색 줄기가 맨 위의 봉오리" +#~ "를 받치고 있으며, 몇개의 덩굴손이 중심에서 뻗어나와 있습니다. 이걸로 움직" +#~ "이고 공격을 하는 것 같습니다." -#~ msgid "You trigger a boobytrap!" -#~ msgstr "부비트랩을 작동시켰다!" +#~ msgid "" +#~ "A knot of roots that looks bizarrely like a\n" +#~ "heart. It beats slowly with sap, powering\n" +#~ "the root walls around it." +#~ msgstr "" +#~ "심장처럼 얽혀있는 뿌리입니다. 수액이 흐르고 있으며, 느리게 뛰면서 주변을 " +#~ "둘러싼 벽에 수액을 보내고 있습니다." -#~ msgid "The %s steps on a landmine!" -#~ msgstr "%s 가 지뢰를 밟았다!" +#~ msgid "" +#~ "A wispy spore, about the size of a fist,\n" +#~ "wafting on the breeze." +#~ msgstr "주먹 크기만한, 성긴 포자입니다. 바람에 흩날립니다." -#~ msgid "You trigger a landmine!" -#~ msgstr "지뢰를 작동시켰다!" +#~ msgid "" +#~ "This appears to be a mass of vines, moving\n" +#~ "with surprising speed. It is so thick and\n" +#~ "tangled that you cannot see what lies in\n" +#~ "the middle." +#~ msgstr "" +#~ "큰 줄기처럼 보이지만, 놀랄만한 속도로 이동하고 있습니다. 너무 두껍게 얽혀" +#~ "있어서, 중간에 뭐가 있는지 보이지 않습니다." -#~ msgid "You step on some bubblewrap!" -#~ msgstr "뽁뽁이 위에 올라섰습니다!" +#~ msgid "C.H.U.D." +#~ msgstr "C.H.U.D." -#~ msgid "boobytrap" -#~ msgstr "부비트랩" +#~ msgid "" +#~ "Cannibalistic Humanoid Underground Dweller.\n" +#~ "A human, turned pale and mad from years in\n" +#~ "the subways." +#~ msgstr "" +#~ "지하에 사는 식인 휴머노이드. 인간이었지만, 지하철에서 몇년동안 있으면서 창" +#~ "백해지고 미쳐버렸습니다." -#~ msgid "You are already wielding nothing." -#~ msgstr "이미 아무것도 들고 있지 않습니다." +#~ msgid "" +#~ "A veritable wall of fungus, grown as a\n" +#~ "natural defense by the fungal spire. It\n" +#~ "looks very tough, and spews spores at an\n" +#~ "alarming rate." +#~ msgstr "" +#~ "진균체가 모여서 만들어진, 제대로 된 벽입니다. 진균체 나선을 막는 자연 방어" +#~ "벽으로 자란 것 같습니다. 매우 단단해 보이며, 공격을 받으면 포자를 쏘는 것 " +#~ "같습니다." -#~ msgid "ENCUMBERANCE AND WARMTH" -#~ msgstr "방해도 와 보온력" +#~ msgid "" +#~ "A black blob of viscous goo that oozes\n" +#~ "across the ground like a mass of living\n" +#~ "oil." +#~ msgstr "" +#~ "끈적이는 액체를 몸체로 한 검은 슬라임입니다. 기름덩어리가 땅을 기어가는 것" +#~ "처럼 생겼습니다." -#~ msgid "Auto Pickup Safemode" -#~ msgstr "자동 줍기 안전모드" +#~ msgid "" +#~ "An enormous fungal spire, towering 30 feet\n" +#~ "above the ground. It pulsates slowly,\n" +#~ "continuously growing new defenses." +#~ msgstr "" +#~ "거대한 나선 형태의 진균체입니다. 9미터 정도의 높이를 가지고 있으며, 느리" +#~ "게 떨리고 있습니다. 지속적으로 새로운 껍질이 자라고 있습니다." -#~ msgid "Enable item Auto Pickup" -#~ msgstr "물건 자동 줍기 켜기" +#~ msgid "" +#~ "Two or three humans fused together somehow,\n" +#~ "slowly dragging their thick-hided, hideous\n" +#~ "body across the ground." +#~ msgstr "" +#~ "무슨 이유에선지 두세명의 인간이 하나로 합쳐져 있습니다. 느린 속도로 두꺼" +#~ "운 가죽으로 덮힌 몸뚱이를 끌고 다닙니다." -#~ msgid "Hide Mouse Cursor" -#~ msgstr "마우스 커서 숨기기" +#~ msgid "" +#~ "A large, mangey rat with red eyes. It\n" +#~ "scampers quickly across the ground, squeaking\n" +#~ "hungrily." +#~ msgstr "" +#~ "거대한 빨간 눈을 가진 더러운 쥐입니다. 땅바닥에서 재빨리 움직이며, 배고픈" +#~ "듯이 찍찍거립니다." -#~ msgid "Delete World" -#~ msgstr "세계 삭제" +#~ msgid "" +#~ "A large green fish, it's mouth lined with\n" +#~ "three rows of razor-sharp teeth." +#~ msgstr "" +#~ "거대한 녹색 물고기입니다. 입에 3줄의 면도날같이 날카로운 이빨이 나있습니" +#~ "다." -#~ msgid "Skill Rust" -#~ msgstr "스킬 감쇄" +#~ msgid "" +#~ "A relatively humanoid mutant with purple\n" +#~ "hair and a grapefruit-sized bloodshot eye." +#~ msgstr "" +#~ "보라색 털에 과일 크기의 새빨간 눈을 가진 돌연변이입니다. 제법 사람처럼 생" +#~ "겼습니다." -#~ msgid "Periodically Autosave" -#~ msgstr "주기적 자동 저장" +#~ msgid "" +#~ "A large snake, turned pale yellow from its\n" +#~ "underground life." +#~ msgstr "지하생활로 창백해진 노란색 거대한 뱀입니다." -#~ msgid "Auto-Safemode on by default" -#~ msgstr "자동-안전모드 기본으로" +#~ msgid "" +#~ "A meter-long centipede, moving swiftly on\n" +#~ "dozens of thin legs, a pair of venomous\n" +#~ "pincers attached to its head." +#~ msgstr "" +#~ "1미터 길이의 지네입니다. 수십 개의 얇은 다리를 빠르게 움직이고 있으며, 머" +#~ "리에 맹독을 뿝는 집게가 달려있습니다." -#~ msgid "Snap to Target" -#~ msgstr "낚아채는 방식 목표 선택" +#~ msgid "" +#~ "A thick-skinned green frog. It eyes you\n" +#~ "much as you imagine it might eye an insect." +#~ msgstr "두꺼운 피부의 초록색 개구리입니다. 꼭 곤충의 눈을 닮은 것 같습니다." -#~ msgid "24 Hour Time" -#~ msgstr "24 시간 단위 표시" +#~ msgid "" +#~ "An enormous mosquito, fluttering erratically,\n" +#~ "its face dominated by a long, spear-tipped\n" +#~ "proboscis." +#~ msgstr "" +#~ "아주 거대한 모기입니다. 불규칙하게 날개짓을 하고있습니다. 얼굴엔 길고 창" +#~ "끝 같은 침이 달려있습니다." -#~ msgid "No Bright Backgrounds" -#~ msgstr "밝은 배경" +#~ msgid "" +#~ "A group of several rats, their tails\n" +#~ "knotted together in a filthy mass. A wave\n" +#~ "of nausea washes over you in its presence." +#~ msgstr "" +#~ "쥐 몇마리가 모인 무리이며, 꼬리 끝이 이상하게 묶여있는 것 같습니다. 갑자" +#~ "기 어지럼증이 밀려옵니다." -#~ msgid "Use Celsius" -#~ msgstr "섭씨 사용" +#~ msgid "" +#~ "A ferocious airborne predator, flying swiftly\n" +#~ "through the air, its mouth a cluster of fangs." +#~ msgstr "" +#~ "날아다니는 흉포한 사냥꾼입니다. 공중에서 민첩하게 움직이며, 입안에 송곳니" +#~ "가 수없이 박혀있습니다." -#~ msgid "Toad" -#~ msgstr "두꺼비" +#~ msgid "" +#~ "A fat, white grub the size of your foot, with\n" +#~ "a set of mandibles that look more suited for\n" +#~ "digging than fighting." +#~ msgstr "" +#~ "사람의 발 정도 크기의 뚱뚱한 애벌레입니다. 입에 달린 턱은 싸우기보다는 땅" +#~ "을 파는데 더 적합해 보입니다." -#~ msgid "Viper" -#~ msgstr "독사" +#~ msgid "" +#~ "A gigantic slug, the size of a small car.\n" +#~ "It moves slowly, dribbling acidic goo from\n" +#~ "its fang-lined mouth." +#~ msgstr "" +#~ "거대한 민달팽이로, 크기가 거의 작은 자동차 급으로 거대합니다. 느릿느릿 움" +#~ "직이고 있지만, 움직인 곳에 산성 독을 뿌리고 있습니다. 입에 이빨이 빼곡하" +#~ "게 나있습니다." -#~ msgid "Snake" -#~ msgstr "뱀" +#~ msgid "" +#~ "A large, brown spider, which moves quickly\n" +#~ "and aggresively." +#~ msgstr "큰 갈색 거미입니다. 움직임이 빠르고, 아주 공격적입니다." -#~ msgid "Crane" -#~ msgstr "학" +#~ msgid "" +#~ "A wasp-like flying insect, smaller than most\n" +#~ "mutated wasps. It does not looke very\n" +#~ "threatening, but has a large ovipositor in\n" +#~ "place of a sting." +#~ msgstr "" +#~ "말벌같이 생긴 날아다니는 곤충입니다. 다른 대부분의 돌연변이 말벌보다 작습" +#~ "니다. 별로 무서워 보이지는 않지만, 벌침 자리에 커다란 산란관이 달려있습니" +#~ "다." #~ msgid "" -#~ "A strange, immobile pink goo. It seems to\n" -#~ "be breathing slowly." +#~ "A yellow spider the size of a dog. It lives\n" +#~ "in webs, waiting for prey to become\n" +#~ "entangled before pouncing and biting." #~ msgstr "" -#~ "이상하게 생긴, 움직이지 않는 핑크색 덩어리입니다. 천천히 숨을 쉬는 것 같습" -#~ "니다." +#~ "개 크기의 노란 거미입니다. 거미줄에서 살며 사냥감이 거미줄에 걸리기를 기다" +#~ "렸다가, 걸리면 거미줄에 묶어서 먹어버립니다." #~ msgid "" -#~ "A bloated zombie that is coated with slimy\n" -#~ "gray mold. Its flesh is translucent and gray,\n" -#~ "and it dribbles a gray sludge from its mouth." +#~ "A small, almost cute-looking spider. It\n" +#~ "leaps so quickly that it almost appears to\n" +#~ "instantaneously move from one place to\n" +#~ "another." #~ msgstr "" -#~ "끈적한 곰팡이로 뒤덮힌 부풀어오른 좀비입니다. 살은 반투명하고 회색이며 입" -#~ "에서 회색 찌꺼기를 흘리고 있습니다." +#~ "작고, 어찌 보면 귀엽기도 한 거미입니다. 아주 빠르게 뛰어다니기 때문에, 마" +#~ "치 순간이동 하는 것처럼 보입니다." #~ msgid "" -#~ "A bloated zombie sagging with fat. It emits a\n" -#~ "horrible odor, and putrid, pink sludge drips\n" -#~ "from its mouth." +#~ "A large spider with a bulbous thorax. It\n" +#~ "creates a subterranean nest and lies in\n" +#~ "wait for prey to fall in and become trapped\n" +#~ "in its webs." #~ msgstr "" -#~ "지방으로 부풀어오른 좀비입니다. 입에서 역겨운 냄새가 나는 액체를 흘리고 있" -#~ "습니다." +#~ "둥그렇고 납작한 가슴부분을 가지고 있는, 큰 거미입니다. 땅에다가 거미줄을 " +#~ "설치한 다음, 땅속에 숨어서 거미줄로 떨어지는 먹이를 기다렸다가 잡아먹습니" +#~ "다." #~ msgid "" -#~ "A human body, encapsulated in tough riot\n" -#~ "armour, this zombie was clearly a cop gearing\n" -#~ "up to fight the infection." +#~ "A spider with a characteristic red\n" +#~ "hourglass on its black carapace. It is\n" +#~ "known for its highly toxic venom." #~ msgstr "" -#~ "사람의 형상을 하고 있습니다. 튼튼한 시위진압용 방어구로 무장하고 있으며, " -#~ "분명히 이 좀비는 감염사태에 대항하던 경찰일 것입니다." - -#~ msgid "Counter-attack!" -#~ msgstr "반격!" - -#~ msgid "Wagon" -#~ msgstr "화물차" +#~ "검은 껍질에 특유의 붉은 모래시계 모양이 있는 거미입니다. 극히 위험한 맹독" +#~ "으로 유명합니다." #~ msgid "" -#~ "You were a high school student until the teachers literally tried to pick " -#~ "your brains. You start with a backpack and a zombie survival guide." +#~ "A huge, black worm, its flesh glistening\n" +#~ "with an acidic, blue slime. It has a gaping\n" +#~ "round mouth lined with dagger-like teeth." #~ msgstr "" -#~ "선생님이 문자 그대로 당신의 뇌를 꺼내려 하기 전까진 당신은 고등학생이었습" -#~ "니다. 배낭과 좀비 서바이벌 가이드를 소지하고 시작합니다." - -#~ msgid "Cavendish" -#~ msgstr "동굴 물고기" - -#~ msgid "Chloe" -#~ msgstr " 클로에" - -#~ msgid "Chase" -#~ msgstr " 체이스" - -#~ msgid "Charlotte" -#~ msgstr " 샬롯" - -#~ msgid "Charles" -#~ msgstr " 찰스" - -#~ msgid "Carter" -#~ msgstr " 카터" - -#~ msgid "Carson" -#~ msgstr " 카슨" - -#~ msgid "Caroline" -#~ msgstr " 캐롤라인" - -#~ msgid "Carlos" -#~ msgstr " 카를로스" - -#~ msgid "Campbell" -#~ msgstr " 켐벨" - -#~ msgid "Camilla" -#~ msgstr " 카밀라" - -#~ msgid "Cameron" -#~ msgstr " 카메론" - -#~ msgid "Caleb" -#~ msgstr " 칼렙" - -#~ msgid "Caden" -#~ msgstr "케이든" - -#~ msgid "Butler" -#~ msgstr " 버틀러" +#~ "거대한 검은 벌레입니다. 몸에서 분비되는 파란 산성 점액으로 반들반들거립니" +#~ "다. 단검같은 이빨이 줄줄이 나있는 둥근 입으로 먹이를 잡아삼킵니다." -#~ msgid "Bryant" -#~ msgstr " 브라이언트" +#~ msgid "" +#~ "A spindly body, standing at least 15 feet\n" +#~ "tall. It looks vaguely human, but its face is\n" +#~ "grotesquely stretched out, and its limbs are\n" +#~ "distorted to the point of being tentacles." +#~ msgstr "" +#~ "막대기같은 몸을 가지고 있으며, 약 15 미터 정도의 키를 가지고 있는 인간처" +#~ "럼 생긴 것입니다. 하지만 얼굴은 괴기스럽게 일그러져 있으며, 사지는 촉수처" +#~ "럼 길게 늘어져 흐느적거립니다." -#~ msgid "Bryan" -#~ msgstr " 브라이언" +#~ msgid "" +#~ "A dog's body with a mass of ropy, black\n" +#~ "tentacles extending from its head." +#~ msgstr "개의 몸에, 길고 검은 촉수가 머리에서 뻗어나옵니다." -#~ msgid "Brown" -#~ msgstr " 브라운" +#~ msgid "" +#~ "An amorphous black creature which seems to\n" +#~ "sprout tentacles rapidly." +#~ msgstr "형태가 없는 검은 무언가입니다. 촉수가 사방으로 빠르게 뻗어나옵니다." -#~ msgid "Brooks" -#~ msgstr " 브룩스" +#~ msgid "A large snail, with an oddly human face." +#~ msgstr "사람 얼굴이 달린, 이상한 달팽이입니다." -#~ msgid "Brooklyn" -#~ msgstr " 브룩클린" +#~ msgid "" +#~ "A human body, but with its limbs, neck, and\n" +#~ "hair impossibly twisted." +#~ msgstr "" +#~ "사람의 형상을 하고 있습니다. 하지만 관절, 목, 머리카락이 말도 안되게 뒤틀" +#~ "려 있습니다." -#~ msgid "Brooke" -#~ msgstr " 브룩" +#~ msgid "" +#~ "A twisting spot in the air, with some kind\n" +#~ "of morphing mass at its center." +#~ msgstr "" +#~ "비틀리는 무언가가 공중에 떠있습니다. 중심에서는 무언가가 끊임없이 변하고 " +#~ "있습니다." -#~ msgid "Brody" -#~ msgstr " 브로디" +#~ msgid "" +#~ "A shapeless blob the size of a cow. It\n" +#~ "oozes slowly across the ground, small\n" +#~ "chunks falling off of its sides." +#~ msgstr "" +#~ "이상하게 생긴, 황소 정도 크기의 슬라임. 천천히 땅을 꿀렁이며 기어다니고 있" +#~ "습니다. 작은 덩어리들이 옆으로 떨어지고 있습니다." -#~ msgid "Brianna" -#~ msgstr " 브리아나" +#~ msgid "" +#~ "An enormous white flatworm writhing\n" +#~ "beneath the earth. Poking from the\n" +#~ "ground is a bulbous head dominated by a\n" +#~ "pink mouth, lined with rows of fangs." +#~ msgstr "" +#~ "거대한 하얀색의 평평한 벌레가 뒤틀리고 있습니다. 지구 아래에서 땅을 지배하" +#~ "는 생물로, 분홍빛 입에 일렬로 늘어선 이빨을 가지고 있습니다." -#~ msgid "Brian" -#~ msgstr " 브라이언" +#~ msgid "" +#~ "A pinkish, fungoid crustacean-like\n" +#~ "creature with numerous pairs of clawed\n" +#~ "appendages and a head covered with waving\n" +#~ "antennae." +#~ msgstr "" +#~ "갑각류같이 생긴 분홍색 진균체입니다. 많은 발톱이 달려있고, 머리엔 더듬이" +#~ "가 달려있습니다." -#~ msgid "Brayden" -#~ msgstr " 브레이든" +#~ msgid "" +#~ "A ropy, worm-like creature that flies on\n" +#~ "bat-like wings. Its form continually\n" +#~ "shifts and changes, twitching and\n" +#~ "writhing." +#~ msgstr "" +#~ "길고 지렁이같이 생긴 생물입니다. 박쥐같은 날개가 달려있어서, 날고 있습니" +#~ "다. 형태가 끊임없이 흔들리고 비틀리면서 변하고 있습니다." -#~ msgid "Brandon" -#~ msgstr " 브렌든" +#~ msgid "" +#~ "An amorphous mass of twisting black flesh\n" +#~ "that flies through the air swiftly." +#~ msgstr "" +#~ "형태가 없는 무언가의 검은 살덩이 같은 것으로, 공중을 재빠르게 날아다닙니" +#~ "다." -#~ msgid "Brady" -#~ msgstr " 브레디" +#~ msgid "" +#~ "An eyeball the size of an easy chair and\n" +#~ "covered in rolling blue flames. It floats\n" +#~ "through the air." +#~ msgstr "" +#~ "이 눈알은 의자 정도의 크기이며, 파란색 불꽃으로 덮여있습니다. 공중을 떠다" +#~ "닙니다." -#~ msgid "Blake" -#~ msgstr " 블레이크" +#~ msgid "" +#~ "A small humanoid, the size of a dog, with\n" +#~ "twisted red flesh and a distended neck. It\n" +#~ "scampers across the ground, panting and\n" +#~ "grunting." +#~ msgstr "" +#~ "작은 인간형 생명체로, 크기는 개 정도 됩니다. 뒤틀린 붉은 살로 이루어져 있" +#~ "으며, 목이 팽창하고 있습니다. 지상에서 빠르게 움직이고, 계속해서 헐떡이고 " +#~ "있습니다." -#~ msgid "Bennett" -#~ msgstr " 베넷" +#~ msgid "" +#~ "An eldritch creature, shuffling\n" +#~ "along, its hands twitching so\n" +#~ "fast they appear as nothing but\n" +#~ "blurs." +#~ msgstr "" +#~ "무시무시한 생물로, 오래 전부터 존재해온 존재입니다. 손이 너무나도 빠르게 " +#~ "움직이고 있어서, 흐릿하게 보입니다." -#~ msgid "Benjamin" -#~ msgstr " 벤자민" +#~ msgid "" +#~ "This looks like a human body, but its\n" +#~ "flesh is snow-white and its face has no\n" +#~ "features save for a perfectly round\n" +#~ "mouth." +#~ msgstr "" +#~ "인간의 몸처럼 보이지만, 이것의 살은 눈처럼 하얗고 얼굴이 없습니다. 기억할" +#~ "만한 특징이 있다면, 그 동그란 입입니다." -#~ msgid "Bell" -#~ msgstr " 벨" +#~ msgid "" +#~ "A beast with the body of a slightly-overweight\n" +#~ "man and the head of a cow. It walks slowly,\n" +#~ "milky white drool dripping from its mouth,\n" +#~ "wearing only a pair of white underwear." +#~ msgstr "" +#~ "소의 머리에 약간 과체중인 남자의 몸을 가진 괴물입니다. 매우 느리게 걷고, " +#~ "입에서 우윳빛 액체가 떨어지고 있습니다. 하얀색 속옷만 입고 있습니다." -#~ msgid "Barnes" -#~ msgstr " 반즈" +#~ msgid "" +#~ "A pale white man with a physically flawless athletic\n" +#~ "body and shaved head. His eyes are completely black\n" +#~ "as bloody tears pour forth from them." +#~ msgstr "" +#~ "창백한 하얀색 남자입니다. 반들반들한 머리에 매끈한 육상선수같은 몸을 가지" +#~ "고 있습니다. 눈이 완전히 검은색이며, 눈에서 피눈물이 나고 있습니다." -#~ msgid "Baker" -#~ msgstr " 베이커" +#~ msgid "" +#~ "A strange dark area in the area. It whispers\n" +#~ "softly as it moves." +#~ msgstr "" +#~ "매우 이상한, 검은 공간입니다. 무언가를 부드럽게 속삭이면서 움직이고 있습니" +#~ "다." -#~ msgid "Bailey" -#~ msgstr " 베일리" +#~ msgid "" +#~ "An insane individual with many bloody holes\n" +#~ "on the sides of their shaved head. Some form\n" +#~ "of lobotomy has left it with a partially re-\n" +#~ "animated brain." +#~ msgstr "" +#~ "맨들맨들한 머리 옆에 피가 나오는 구멍이 많이 뚫린, 정신이 나간 인간입니" +#~ "다. 뇌엽 절리술 중 일부는 부분적으로만 뇌를 제거해버린다고 합니다." -#~ msgid "Ayden" -#~ msgstr " 에이든" +#~ msgid "A large snake, translucent black." +#~ msgstr "큰 뱀으로, 반투명한 검정색 피부를 가지고 있습니다." -#~ msgid "Avery" -#~ msgstr " 아베리" +#~ msgid "" +#~ "A robot with an insectoid design, about\n" +#~ "the size of a small dog. It skitters\n" +#~ "quickly across the ground, two electric\n" +#~ "prods at the ready." +#~ msgstr "" +#~ "곤충에 비슷하게 설계된 로봇으로, 작은 개 정도의 크기를 하고 있습니다. 두 " +#~ "개의 전기 봉을 사용해 빠르게 땅을 달립니다." -#~ msgid "Ava" -#~ msgstr " 에바" +#~ msgid "" +#~ "Slender and terrifying, this gigantic man lacks\n" +#~ "any skin yet moves swiftly and gracefully without\n" +#~ "it. Wings of flesh protrude uselessly from his\n" +#~ "back and a third eye dominates his forehead." +#~ msgstr "" +#~ "호리호리하지만 공포스러운 이 거대한 남자는 피부가 없는 것처럼 보이는데도 " +#~ "전혀 문제가 없는 것 같아보입니다. 등에는 쓸모없어보이는 살로 된 날개가 뻗" +#~ "어나와있고, 이마에는 제 3의 눈이 달려있습니다." -#~ msgid "Autumn" -#~ msgstr " 어텀" +#~ msgid "" +#~ "This poor victim was sliced open and bled to\n" +#~ "death long ago. Yet, chained down it thrashes\n" +#~ "in eternal misery from its tortures." +#~ msgstr "" +#~ "이 불쌍한 피해자는 오래전에 몸이 잘리고 내부가 열려져 죽었지만, 영원의 고" +#~ "통에 묶여 아직도 고문당하고 있습니다.\n" +#~ "(역주 : 영화 헬레이저)" -#~ msgid "Austin" -#~ msgstr " 오스틴" +#~ msgid "" +#~ "A fist-sized robot that flies swiftly through\n" +#~ "the air. It's covered with whirring blades\n" +#~ "and has one small, glowing red eye." +#~ msgstr "" +#~ "공중을 떠다니는 주먹 크기의 로봇입니다. 움직이는 칼날로 덮혀있으며, 붉은색" +#~ "으로 빛나는 작은 눈이 있습니다." -#~ msgid "Audrey" -#~ msgstr " 오드리" +#~ msgid "" +#~ "A roughly spherical robot that hovers about\n" +#~ "five feet of the ground. Its front side is\n" +#~ "dominated by a huge eye and a flash bulb.\n" +#~ "Frequently used for reconaissance." +#~ msgstr "" +#~ "1.5 미터 높이의 공중에 떠다니는 원형 로봇입니다. 앞부분에는 커다란 눈과 점" +#~ "멸등이 달려있습니다. 주로 정찰용으로 사용됩니다." -#~ msgid "Aubrey" -#~ msgstr " 오브리" +#~ msgid "" +#~ "A utility robot designed for hazardous\n" +#~ "conditions. Its only means to stop intruders\n" +#~ "appears to involve thrashing around one of its\n" +#~ "multiple legs." +#~ msgstr "" +#~ "위험지대에서 사용하기 위한 유틸리티 로봇입니다. 침입자를 막을 수 있는 방법" +#~ "이 다수의 다리를 휘두르는 것밖에 없는 것 같습니다." -#~ msgid "Ashley" -#~ msgstr " 애쉴리" +#~ msgid "" +#~ "A 8-foot-tall robot that walks on three long\n" +#~ "legs. It has a pair of spiked tentacles, as\n" +#~ "well as a flamethrower mounted on its head." +#~ msgstr "" +#~ "긴 다리가 3개 달린 2.5 미터 높이의 로봇입니다. 가시달린 촉수가 한쌍 달려있" +#~ "고, 머리에는 화염 방사기가 달려있습니다." -#~ msgid "Arianna" -#~ msgstr " 아리안나" +#~ msgid "" +#~ "A blue-painted robot that moves quickly on a\n" +#~ "set of three omniwheels. It has a nightstick\n" +#~ "readied, and appears to be well-armored." +#~ msgstr "" +#~ "파란색 페인트로 칠해진 로봇입니다. 바퀴 3개가 달려있어서 빠른 속도로 움직" +#~ "일 수 있으며, 경찰봉을 들고 있어 잘 무장한 것처럼 보입니다." -#~ msgid "Ariana" -#~ msgstr " 아리아나" +#~ msgid "" +#~ "A boxy robot about four feet high. It moves\n" +#~ "slowly on a set of treads, and is armed with\n" +#~ "a large machine gun type weapon. It is\n" +#~ "heavily armored." +#~ msgstr "" +#~ "상자처럼 생긴 1.2미터 높이의 로봇입니다. 몇쌍의 발로 느리게 움직이며, 커다" +#~ "란 기관총같은 무기로 무장하고 있습니다. 두꺼운 장갑을 가지고 있습니다." -#~ msgid "Anthony" -#~ msgstr " 앤소니" +#~ msgid "" +#~ "A snake-shaped robot that tunnels through the\n" +#~ "ground slowly. When it emerges from the\n" +#~ "ground it can attack with its large, spike-\n" +#~ "covered head." +#~ msgstr "" +#~ "땅속을 느린 속도로 파고 다니는 뱀 모양의 로봇입니다. 땅속에서 튀어나올 때 " +#~ "큰 뿔로 덮힌 머리로 공격합니다." -#~ msgid "Anna" -#~ msgstr " 아나" +#~ msgid "" +#~ "This fearsome robot is essentially an\n" +#~ "autonomous tank. It moves surprisingly fast\n" +#~ "on its treads, and is armed with a variety of\n" +#~ "deadly weapons." +#~ msgstr "" +#~ "간단히 말하자면 무인 탱크나 다름없는 이 공포스러운 로봇은, 다리로 놀랍도" +#~ "록 빠르게 움직이며 다양한 치명적인 무기로 무장하고 있습니다." -#~ msgid "Angelina" -#~ msgstr " 안젤리나" +#~ msgid "" +#~ "A 10-foot-tall, heavily-armored robot that\n" +#~ "walks on a pair of legs with the knees\n" +#~ "facing backwards. It's armed with a\n" +#~ "nasty-looking machine gun." +#~ msgstr "" +#~ "3미터 크기에, 역관절인 두 다리로 걸어다니는 중장갑 로봇입니다. 위험하게 생" +#~ "긴 기관총으로 무장하고 있습니다." -#~ msgid "Angel" -#~ msgstr " 엔젤" +#~ msgid "" +#~ "Your precious generator, noisily humming\n" +#~ "away. Defend it at all costs!" +#~ msgstr "" +#~ "귀중한 발전기로, 시끄럽게 웅웅거리고 있습니다. 무조건 방어해야 합니다!" -#~ msgid "Andrew" -#~ msgstr " 앤드류" +#~ msgid "" +#~ "You've traveled for a living, sightseeing here and there, and living off " +#~ "your parents' trust fund. But now they're gone, and the only thing " +#~ "between you and death is the open road and your backpack." +#~ msgstr "" +#~ "당신은 이곳 저곳을 유람하며 생활했으며, 부모님의 신용 펀드에 의지해 살아왔" +#~ "습니다. 하지만 이젠 모두 사라졌고, 죽음과 당신 사이에 남은 것은 당신의 배" +#~ "낭과 미래 뿐입니다." -#~ msgid "Andrea" -#~ msgstr " 안드레아" +#~ msgid "" +#~ "You were about to marry your bride before the cataclysm, now you spend " +#~ "you days searching for her." +#~ msgstr "" +#~ "대격변 이전의 당신은 이제 막 아내와 결혼했었습니다. 이제 당신은 아내를 찾" +#~ "기 위해 살아갑니다." -#~ msgid "Anderson" -#~ msgstr " 앤더슨" +#~ msgid "" +#~ "Your overall skill in using firearms. With higher levels, this general " +#~ "experience increases accuracy with any gun, but is secondary to practice " +#~ "with the type of gun in question." +#~ msgstr "" +#~ "총기를 사용하는데 필요한 전체적인 기술입니다. 높은 수준에 도달하면 모든 총" +#~ "기의 명중률이 증가합니다." -#~ msgid "Amelia" -#~ msgstr " 아멜리아" +#~ msgid "porcelain breaking!" +#~ msgstr "도자기가 깨졌습니다!" -#~ msgid "Alyssa" -#~ msgstr " 알리사" +#~ msgid "brush." +#~ msgstr "스윽." -#~ msgid "Allison" -#~ msgstr " 엘리슨" +#~ msgid "The %s sinks its ovipositor into you!" +#~ msgstr "%s가(이) 산란관을 몸에 박아넣었습니다!" -#~ msgid "Allen" -#~ msgstr " 알렌" +#~ msgid "It disintegrates!" +#~ msgstr "붕괴해버렸습니다!" -#~ msgid "Alexis" -#~ msgstr " 알렉시아" +#~ msgid "a boomer explodes!" +#~ msgstr "부머가 폭발했습니다!" -#~ msgid "Alexandra" -#~ msgstr " 알렉산드라" +#~ msgid "The %s's corpse melts into a pool of acid." +#~ msgstr "%s의 시체가 녹아서, 산성 웅덩이가 되었습니다." -#~ msgid "Alexander" -#~ msgstr " 알렉산더" +#~ msgid "The root walls begin to crumble around you." +#~ msgstr "주위에 있는 뿌리 벽들이 허물어지기 시작합니다." -#~ msgid "Alexa" -#~ msgstr " 알렉사" +#~ msgid "a smoker explodes!" +#~ msgstr "스모커가 폭발했습니다!" -#~ msgid "Alex" -#~ msgstr " 알렉스" +#~ msgid "The %s melts away!" +#~ msgstr "%s이(가) 녹아 없어졌습니다!" -#~ msgid "Aiden" -#~ msgstr " 아이덴" +#~ msgid "The %s splatters into tiny, dead pieces." +#~ msgstr "%s이(가) 죽어버린 작은 조각으로 나뉘었습니다." -#~ msgid "Aidan" -#~ msgstr " 아이단" +#~ msgid "The %s splits!" +#~ msgstr "%s이(가) 둘로 나누어졌습니다!" -#~ msgid "Adrian" -#~ msgstr " 에이드리안" +#~ msgid "The %s disappears! Was it in your head?" +#~ msgstr "%s이(가) 사라졌습니다! 내 상상이였나?" -#~ msgid "Addison" -#~ msgstr " 에디슨" +#~ msgid "You feel terrible for killing %s!" +#~ msgstr "%s를(을) 죽인 것에 대해 기분이 좋지 않습니다!" -#~ msgid "Adams" -#~ msgstr " 아담스" +#~ msgid "Your %s is destroyed! GAME OVER!" +#~ msgstr "%s이(가) 파괴되었습니다! 게임 오버!" -#~ msgid "Adam" -#~ msgstr " 아담" +#~ msgid "Rats swarm from nowhere to avenge the %s." +#~ msgstr "쥐 떼가 갑자기 나타나, %s에 돌진했습니다." -#~ msgid "Abigail" -#~ msgstr " 아비게일" +#~ msgid "You cannot save a template with unused points!" +#~ msgstr "모든 포인트를 사용하지 않으면 템플릿을 저장할 수 없습니다!" -#~ msgid "Aaron" -#~ msgstr " 아론" +#~ msgid "" +#~ "To see what the symbols around you mean, press ';'. You'll be able to " +#~ "scroll\n" +#~ "around and get information on the terrain, monsters, and items in the " +#~ "world\n" +#~ "around you." +#~ msgstr "" +#~ "주변의 기호가 뭔지 확인하려면 ';' 키를 누른 후, 이동 키로 선택해서 확인하" +#~ "면 됩니다.\n" +#~ "이것으로 지형, 괴물, 어떤 곳에 떨어져 있는 물건 등을 확인할 수 있습니다." -#~ msgid "Aaliyah" -#~ msgstr " 알리야" +#~ msgid "" +#~ "The '@' character in the center of the screen represents you. To move, " +#~ "you\n" +#~ "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have " +#~ "your\n" +#~ "character wait in place, press '.'" +#~ msgstr "" +#~ "화면 중앙의 '@' 표시는 플레이어, 즉 당신을 나타냅니다. 움직이려면\n" +#~ "넘버패드 키를 사용해야 합니다. 혹은 (hjklyubn) 키, 혹은 화살표 키도\n" +#~ "가능합니다. 잠시 대기하려면 '.' 키를 누르면 됩니다." #~ msgid "" -#~ "You are cold-blooded and rely on heat to keep moving. Your lose 1%% of " -#~ "your speed for every 2 degrees below 65 F." +#~ "Welcome to the Cataclysm tutorial! As you play, pop-ups like this one " +#~ "will\n" +#~ "appear to guide you through the basic game actions. Pressing spacebar " +#~ "will\n" +#~ "close the pop-up." #~ msgstr "" -#~ "당신은 냉혈생물이 되어 움직이려면 열이 필요하다. 기온이 섭씨 18도 밑으로 1" -#~ "도씩 내려갈때마다 속도가 1%%씩 느려진다." +#~ "카타클리즘 튜토리얼에 어서오십시오! 튜토리얼을 하는 동안, 지금 떠있는\n" +#~ "이런 팝업 창이 기본적인 게임 행동을 할 때마다 뜰 것입니다.\n" +#~ "스페이스 키를 눌러서 팝업을 닫을 수 있습니다." #~ msgid "" -#~ "Your muscle response is highly dependent on ambient temperatures. You " -#~ "lose 1%% of your speed for every 3 degrees below 65 F." +#~ "You don't have space in your inventory to store the item you just tried " +#~ "to\n" +#~ "pick up. You need to wear something with storage space, like a backpace " +#~ "or\n" +#~ "cargo pants, to gain more storage space." #~ msgstr "" -#~ "당신의 근육 반응속도는 기온에 따라 크게 변한다. 기온이 섭씨 18도 밑으로 " -#~ "1.5도씩 내려갈때마다 속도가 1%%씩 느려진다." +#~ "지금 주우려고 한 물건을 넣을, 저장 공간이 없습니다. 저장 공간을 늘릴만한\n" +#~ "가방, 혹은 카고 바지 같은 것을 착용해야 합니다." #~ msgid "" -#~ "Your muscle response is dependent on ambient temperatures. You lose 1%% " -#~ "of your speed for every 5 degrees below 65 F." +#~ "The item you just picked up has been wielded as a weapon automatically. " +#~ "This\n" +#~ "happened because you do not have space in your inventory to stash the " +#~ "item,\n" +#~ "and so you must carry it in your hand. To expand your inventory space, " +#~ "try\n" +#~ "wearing clothing with a lot of storage space, like a backpack, or cargo " +#~ "pants." #~ msgstr "" -#~ "당신의 근육 반응속도는 기온에 따라 변한다. 기온이 섭씨 18도 밑으로 3도씩 " -#~ "내려갈때마다 속도가 1%%씩 느려진다." +#~ "주운 물품이 무기로 장비되었습니다. 지금은 물건을 넣을만한 저장공간이\n" +#~ "없기 때문에, 손에 들고 있는 것 입니다. 휴대 공간을 늘리려면\n" +#~ "가방, 카고 바지 같은 저장 공간을 늘려주는 의류를 착용해야 합니다." #~ msgid "" -#~ "You feel very sluggish when not in direct sunlight. You suffer a 5%% drop " -#~ "in speed when in shade, and a 10%% drop in speed when in the dark." +#~ "The item you just picked up has been wielded as a weapon automatically. " +#~ "This\n" +#~ "happened because it is a good melee weapon, and you were empty-handed. " +#~ "This\n" +#~ "usually is faster than than picking it up, then wielding it." #~ msgstr "" -#~ "당신은 직사광선을 받지 않으면 매우 굼떠진다. 그늘에 들어가면 속도가 5%% 느" -#~ "려지고, 빛이 들지 않는 곳이라면 10%% 느려진다." - -#~ msgid "Your muscles are very slow to move. You run 30%% slower." -#~ msgstr "당신의 근육은 매우 느리게 움직인다. 이동이 30%% 느려진다." - -#~ msgid "Your muscles are quite slow to move. You run 20%% slower." -#~ msgstr "당신의 근육은 꽤 느리게 움직인다. 이동이 20%% 느려진다." - -#~ msgid "Your muscles are generally slow to move. You run 10%% slower." -#~ msgstr "당신의 근육은 좀 느리게 움직인다. 이동이 10%% 느려진다." +#~ "주운 물품이 무기로 장비되었습니다. 주운 물건이 좋은 근접 무기거나, \n" +#~ "현재 손에 든 것이 없기 때문입니다. 이 방법은 물건을 주운 다음 장비하는\n" +#~ "것보다 더 빠릅니다." #~ msgid "" -#~ "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is " -#~ "very light as a result, enabling you to run and attack 20%% faster, but " -#~ "also frail; you can carry 40%% less, and bashing attacks injure you more." +#~ "The nearby { is a display rack, and the blue background indicates that " +#~ "there\n" +#~ "are items there. If you examine the square by pressing 'e', you can pick " +#~ "up\n" +#~ "items without moving to the square." #~ msgstr "" -#~ "당신의 뼈는 속이 거의 비어있는, 조류 골조 증후군이다. 따라서 몸이 매우 가" -#~ "벼워졌고, 공격속도와 이동속도에 20%%보너스를 받지만, 허약해지기도 했다. 운" -#~ "반 가능 중량이 40%% 줄고, 둔기 공격에 더 큰 피해를 입는다." +#~ "근처의 { 표시는 진열대를 나타냅니다. 또한 파란색은 그곳에 물품이 있음을 나" +#~ "타냅니다.\n" +#~ "'e' 키를 눌러서 그곳을 확인해볼 수 있으며, 물품을 주울 수도 있습니다." #~ msgid "" -#~ "Your legs are extremely limber and fast-moving. You run 30%% faster on " -#~ "flat surfaces." +#~ "You just stepped on a space with one or more items. If you wish to pick " +#~ "it\n" +#~ "up, press ',' or 'g'." #~ msgstr "" -#~ "당신의 다리는 매우 유연하고 빠르게 움직이게 되었다. 평지에서 30%% 더 빨리 " -#~ "움직일 수 있다." +#~ "물건이 하나 이상 있는 곳에 있습니다. 물건을 줍기 위해서는 ',' 키, 혹은 " +#~ "'g' 키를 누르면 됩니다." #~ msgid "" -#~ "Your bones are very light. This enables you to run and attack 10%% " -#~ "faster, but also reduces your carrying weight by 20%% and makes bashing " -#~ "attacks hurt a little more." +#~ "You can smash through windows by pressing 's' and then a movement key. " +#~ "A\n" +#~ "smashed window takes a long time to climb through, and it's possible to " +#~ "hurt\n" +#~ "yourself on the broken glass, but it's a good last-ditch escape route. " +#~ "You\n" +#~ "can smash through other things, too; use the ';' command and look for " +#~ "things\n" +#~ "that are \"Smashable.\"" #~ msgstr "" -#~ "당신의 뼈는 매우 가볍다. 공격과 달리기가 10%% 빨라지지만, 가지고 다닐수 있" -#~ "는 무게가 20%% 줄어들고 둔기 공격에 약간 취약해진다." +#~ "'s' 키를 사용해서 유리창을 부수고 들어갈 수 있습니다. 창문은 타고 올라가" +#~ "야 하기 때문에\n" +#~ "시간이 더 걸리며, 깨진 유리에 다칠 수도 있습니다. 도주 시에 쓸만한 방법이" +#~ "기도 합니다.\n" +#~ "다른 것도 부술 수 있는데, ';' 키로 주변의 것을 확인해서 \"부술 수 있음\" " +#~ "여부를 확인하면 됩니다." #~ msgid "" -#~ "Your whole body can't take much abuse. Its maximum HP is 75%% points " -#~ "lower than usual. Stacks with Glass Jaw. Not for casuals." +#~ "Most monsters will have to smash their way through a closed door. If a " +#~ "door\n" +#~ "is locked or stuck, you can smash it by pressing 's' and then a movement " +#~ "key." #~ msgstr "" -#~ "몸 전체가 타격을 잘 견딜수 없다. 전체 HP 가 보통보다 75%% 낮다. 약한 턱뼈" -#~ "와 중첩된다. 초보자에게 추천하지 않음." +#~ "대부분의 괴물들은 닫힌 문이 가로막고 있다면 부숴버립니다. 문이 잠겨 있거" +#~ "나\n" +#~ "끼어 있다면, 's' 키를 누른 후 방향 키로 방향을 선택해서 부술 수 있습니다." #~ msgid "" -#~ "Your head can't take much abuse. Its maximum HP is 20%% lower than usual." +#~ "You can close an opened door by pressing 'c' and then a movement key. " +#~ "Closing\n" +#~ "doors behind you can often slow down throngs of monsters greatly." #~ msgstr "" -#~ "당신의 머리는 충격에 약하다. 머리의 최대 HP 가 일반적인 량보다 20%% 줄어든" -#~ "다." +#~ "열려 있는 문은 'c' 를 누른 후 방향을 눌러서 닫을 수 있습니다.\n" +#~ "문을 닫으면 괴물들의 이동을 상당히 늦출 수 있습니다." #~ msgid "" -#~ "You simply can not carry as much as people with a similar strength could. " -#~ "Your maximum weight carried is reduced by 35%%." +#~ "That brown '+' next to you is a closed door. To open it, either simply " +#~ "walk\n" +#~ "into it, or press 'o' and then a movement key." #~ msgstr "" -#~ "같은 체력을 가지고도 적은 무게의 물건을 운반할수있습니다. 최대 운반 무게" -#~ "가 35%% 줄어듭니다." +#~ "옆에 있는 갈색 '+' 표시는 닫혀있는 문을 뜻합니다. 문을 열려면 그냥 그쪽으" +#~ "로\n" +#~ "걸어가거나, 근처에서 'o' 를 누른 후 방향 키를 누르면 됩니다." #~ msgid "" -#~ "You have studied the arts of the Shaolin monks. You start with one of the " -#~ "five animal fighting styles: Tiger, Crane, Leopard, Snake, or Dragon." +#~ "The item you just picked up went into your inventory, the shared storage\n" +#~ "space of all the clothing you're wearing. To view your inventory, press " +#~ "'i'.\n" +#~ "You can then press the letter of any item to get more information about " +#~ "it." #~ msgstr "" -#~ "당신은 소림승의 무예를 익혔다. 시작할때 다음 다섯가지의 무예중 하나를 가지" -#~ "고 시작한다: 호랑이, 학, 표범, 뱀, 혹은 용." - -#~ msgid "Shaolin Adept" -#~ msgstr "소림승의 제자" +#~ "지금 주운 물품은 인벤토리로 들어갔습니다. 인벤토리는 지금 입고있는 의류" +#~ "가 \n" +#~ "제공하는 모든 저장공간이 통합되어 표시되는 곳입니다. 인벤토리를 보려면 \n" +#~ "'i' 키를 누르면 됩니다. 그 다음, 해당 물품의 기호를 눌러서 더 많은 정보" +#~ "를 \n" +#~ "볼 수 있습니다." #~ msgid "" -#~ "At some point in the past you had a bionic upgrade installed in your " -#~ "body. You start the game with a power system, and one random bionic " -#~ "enhancement." +#~ "The item you just picked up is a type of clothing! To wear clothing, " +#~ "press\n" +#~ "W and then select an item. To take off clothing, press T, or simply take " +#~ "it\n" +#~ "off and drop it in one action by pressing d." #~ msgstr "" -#~ "과거 어느땐가 당신은 바이오닉 업그레이드를 몸속에 설치 했습니다. 한가지 전" -#~ "력 충전 시스템과, 무작위 바이오닉 하나를 가지고 시작합니다." - -#~ msgid "Android" -#~ msgstr "안드로이드" - -#~ msgid "You're just generally quick! You get a 10%% bonus to action points." -#~ msgstr "당신은 일반인 보다 빠르다! 액션 포인트에 10%% 의 보너스를 받는다." +#~ "지금 주운 물품은 의류입니다! 의류를 입으려면 'W' 키를 누른 후\n" +#~ "해당 물품을 선택하면 됩니다. 의류를 벗으려면 'T' 키를 누른후\n" +#~ "해당 물품을 선택하면 됩니다. 혹은 간단히 벗어서 버리려면\n" +#~ "'d' 키를 사용한 후 물품을 선택하면 됩니다." #~ msgid "" -#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " -#~ "sure footing." +#~ "The item you just picked up is a good weapon! To wield a weapon, press " +#~ "w,\n" +#~ "then pick what to wield. To wield nothing, either drop your weapon with " +#~ "d,\n" +#~ "or press 'w-' to put it away. A zombie has spawned nearby. To attack " +#~ "it,\n" +#~ "simply move into it." #~ msgstr "" -#~ "당신은 일반인 보다 빨리 뛸수 있습니다. 안정된 지면위에서 속도에 15%% 보너" -#~ "스를 받습니다." +#~ "방금 주운 물건은 좋은 무기입니다! 무기를 장비하려면 'w' 키를 누르고\n" +#~ "주운 물건의 기호를 누르면 됩니다. 무기를 내려놓거나 다시 가방에 넣으려면\n" +#~ "'d' 키로 버리거나, 'w' 키를 누른 다음 '-' 키를 누르면 됩니다. \n" +#~ "좀비가 근처에 생성되었습니다. 공격하려면 좀비 쪽으로 이동하면 됩니다." -#~ msgid "A tool for welding metal pieces together. Useful for construction." +#~ msgid "" +#~ "You just put on an article of clothing that provides physical " +#~ "protection.\n" +#~ "There are two types of damage that clothing defends against, bashing, " +#~ "and\n" +#~ "cutting. Most monsters deal bashing damage, but cutting is often the " +#~ "more\n" +#~ "deadly of the two. Bullets are considered cutting damage." #~ msgstr "" -#~ "철 조각들을 하나로 이어붙일 수 있는 도구입니다. 제작, 건설에 유용합니다." - -#~ msgid "bubblewrap" -#~ msgstr "뽁뽁이(bubblewrap)" - -#~ msgid "A listening tool. Use it to listen to things. Closely." -#~ msgstr "무언가를 자세히 듣는데 사용되는 도구입니다." +#~ "지금 착용한 것은 물리적 방어력을 주는 의류입니다.\n" +#~ "의류가 주는 방어력은 2가지 종류가 있습니다. 타격과 베기입니다.\n" +#~ "대부분의 괴물은 타격 데미지를 주고, 몇몇 치명적인 괴물은\n" +#~ "베기 데미지를 줍니다. 또한 총탄은 베기 데미지를 줍니다." #~ msgid "" -#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" -#~ msgstr "신선함과 모양을 보존하기 위해 설탕 시럽을 입힌 사과 조각 입니다." - -#~ msgid "apple slices" -#~ msgstr "사과 조각(apple slices)" +#~ "The item you just picked up is ammunition, used with a gun. It has many\n" +#~ "special attributes. The damage value is the maximum done on a standard " +#~ "hit;\n" +#~ "a critical hit or headshot will do much more damage. Some monsters or " +#~ "NPCs\n" +#~ "will wear armor which reduces the damage from gunfire; a high Armor-" +#~ "pierce\n" +#~ "value will reduce this effect. The Range is the maximum range the ammo " +#~ "can\n" +#~ "achieve, and the dispersion affects its chance to hit." +#~ msgstr "" +#~ "지금 주운 물건은 탄약입니다. 총기에 사용되며, 여러 특수한 수치가 있습니" +#~ "다.\n" +#~ "데미지는 일반적으로 명중시 최대 데미지를 뜻하며, 치명타 혹은 헤드샷일 경" +#~ "우\n" +#~ "더 큰 피해를 줍니다. 몇몇 괴물이나 NPC는 갑옷을 입어서, 총기에 대한 피해" +#~ "가\n" +#~ "감소합니다. 높은 관통력은 이런 방어 효과를 줄여줍니다. 사거리는 탄약의 최" +#~ "대\n" +#~ "사거리를 뜻하며, 분산도는 명중률에 영향을 줍니다." #~ msgid "" -#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " -#~ "color." +#~ "The item you just picked up is a comestible! To eat a comestible, press " +#~ "'E'.\n" +#~ "Comestibles are items you can use up, like food, drink, pills, etc. " +#~ "Most\n" +#~ "food expires eventually, so be careful. Some comestibles, especially " +#~ "drugs,\n" +#~ "can cause subtle, long-term effects." #~ msgstr "" -#~ "보존처리된 사과가 들어있는 밀폐된 유리병 입니다. 흐늘흐늘거리고 색을 잃었" -#~ "습니다." - -#~ msgid "canned apple slices" -#~ msgstr "사과 조각 통조림(canned apple slices)" - -#~ msgid "tuna fish" -#~ msgstr "참치(tuna fish)" - -#~ msgid "sardines" -#~ msgstr "정어리(sardines)" - -#~ msgid "cooked spaghetti" -#~ msgstr "요리 된 스파게티(cooked spaghetti)" - -#~ msgid "carrot" -#~ msgstr "당근(carrot)" - -#~ msgid "beef jerky" -#~ msgstr "소고기 육포(beef jerky)" - -#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." -#~ msgstr "마시지 마세요. 표백제와 섞으면 독성 가스가 생성됩니다." - -#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." -#~ msgstr "마시지 마세요. 암모니아와 섞으면 독성 가스가 생성됩니다." +#~ "지금 주운 물건은 식품입니다! 먹으려면 'E' 키를 누르면 됩니다.\n" +#~ "식품은 음식, 음료, 알약 등이 있으며, 대부분의 음식은 시간이\n" +#~ "지나면 상하기 때문에 주의해야 합니다. 의약품 혹은 약물은\n" +#~ "미묘한 효과를 오랜 시간 내기도 합니다." #~ msgid "" -#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " -#~ "does less damage and is less accurate. Stands a good chance of remaining " -#~ "intact once fired." +#~ "You just activated a grenade! You probably want to throw it. To throw " +#~ "an\n" +#~ "item, press 't' and then select the item to throw. The maximum range " +#~ "depends\n" +#~ "on your strength and the object's weight and size. Throwing isn't very " +#~ "good\n" +#~ "in most combat situations, but if you've got some fire power..." #~ msgstr "" -#~ "나무를 날카롭게 깎아 만든 볼트이다. 철제 볼트에 비해 가볍지만, 위력도 약하" -#~ "고 정확도도 떨어진다. 발사된 후 회수할 수 있을 가능성이 높다." +#~ "수류탄을 활성화시켰습니다! 아마 던지고 싶을 것입니다. 물건을 던지려면\n" +#~ "'t' 키를 눌러서 던질 물건을 선택하면 됩니다. 투척 거리는 힘과 물체의 무" +#~ "게, 크기에\n" +#~ "따라 달라집니다. 대부분의 전투 상황에서는 던지기 공격은 그다지 좋지 않지" +#~ "만,\n" +#~ "던진 무기의 화력이 충분하다면야..." #~ msgid "" -#~ "Will you be able to place the arrow right into bull's eye? It is not that " -#~ "easy, but once you know how it's done, you will have a lot of fun with " -#~ "archery." +#~ "You're carrying more volume than you have storage for, which means you " +#~ "are\n" +#~ "carrying some stuff in the crook of your arm or in some other awkward " +#~ "manner.\n" +#~ "While overloaded like this, you will suffer SEVERE encumberment " +#~ "penalties,\n" +#~ "making combat dangerous. Either drop an item, or possibly wield " +#~ "something--\n" +#~ "the object you are wielding does not take up inventory space." #~ msgstr "" -#~ "정중앙에 화살을 박아 넣을수 있나요? 쉽지는 않습니다. 하지만 하는 방법을 알" -#~ "게 되면, 활쏘는것에서 많은 재미를 느낄수 있을겁니다." +#~ "현재 가지고 있을수 있는 최대치보다 더 많은 부피를 가지고 있습니다. 손에 물" +#~ "건을 가득\n" +#~ "끌어안거나 다른 이상한 자세가 되었다는 뜻입니다. 이렇게 소유 부피를 초과하" +#~ "면\n" +#~ "상당한 방해도 패널티를 받습니다, 전투가 훨씬 힘들어지죠. 물건을 버리거" +#~ "나,\n" +#~ "아니면 부피가 더 큰 물건을 장비로 선택해서 손에 드는 방법이 있습니다." #~ msgid "" -#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " -#~ "feet of concrete." +#~ "You just placed a trap. Traps are permanent until set off, and can be " +#~ "an\n" +#~ "important defensive tactic, particularly when sleeping in unsafe " +#~ "territory.\n" +#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." #~ msgstr "" -#~ "60mm 대전차 고폭탄입니다. 60cm 두께의 콘크리트도 파괴할 수 있습니다." +#~ "덫을 놓았습니다. 덫은 작동하기 전까지 영구히 존재하며, 또한 방어적인 전술" +#~ "에서\n" +#~ "아주 중요하기도 합니다. 특히 안전하지 못한 곳에서 잠을 청할 때는 더욱요.\n" +#~ "지금 설치한 _ 를 지나가보세요. 걱정은 안하셔도 됩니다. 그냥 뾱뾱이 덫이니" +#~ "까요." #~ msgid "" -#~ "A brass-jacketed variant of the .40 Smith & Wesson round. This increases " -#~ "penetration slightly at the cost of reduced expansion." +#~ "You just drank a bottle of water, reducing your thirst level and reducing " +#~ "the\n" +#~ "water level in the bottle. You'll probably want to drop empty bottles,\n" +#~ "or you might want to save them to refill from a water source later." #~ msgstr "" -#~ "탄두가 코팅된 .44 구경 스미스앤웨슨 탄입니다. 관통력이 약간 증가되었지만 " -#~ "살상력도 약간 줄었습니다." - -#~ msgid "An ornamental suit of armor." -#~ msgstr "장식이 붙어 있는 갑옷입니다." - -#~ msgid "light plate mail" -#~ msgstr "경량 플레이트 메일(light plate mail)" - -#~ msgid "plate armor gauntlets" -#~ msgstr "플레이트 건틀렛(plate armor gauntlets)" +#~ "방금 물병에서 마신 물은 갈증 수치를 낮춰줍니다. 물을 다 마시면 빈 병을 버" +#~ "릴 수도,\n" +#~ "다른 수원을 찾아서 물을 채워넣을 때까지 가지고 있을 수도 있습니다." -#~ msgid "plate armor boots" -#~ msgstr "플레이트 부츠(plate armor boots)" +#~ msgid "" +#~ "That drug you just took is a painkiller. Painkillers are very important " +#~ "to\n" +#~ "keep on hand, as pain both penalizes your stats and makes you slower. " +#~ "Be\n" +#~ "careful, as the stronger painkillers can make you woozy, and some are " +#~ "even\n" +#~ "addictive." +#~ msgstr "" +#~ "지금 주운 약물은 진통제입니다. 진통제를 항상 보유하고 있는게 상당히 중요합" +#~ "니다.\n" +#~ "고통이 심해지면 능력치도 낮아지고, 속도도 느려집니다. 하지만 강력한 진통제" +#~ "는\n" +#~ "몸을 느려지게 하고, 중독성도 대부분 높습니다." -#~ msgid "A padded coat with deep pockets. Very warm." -#~ msgstr "깊은 주머니가 달린 천이 덧대여진 코트 입니다. 아주 따뜻합니다." +#~ msgid "" +#~ "That drug you just took placed an effect on you. To check your effects,\n" +#~ "press '@'. Most only last a short while, while others, like chronic " +#~ "disease,\n" +#~ "last until cured by some other means." +#~ msgstr "" +#~ "방금 먹은 약물의 약효가 들고 있습니다. 현재 상태를 보려면 '@' 키를 누르면 " +#~ "됩니다.\n" +#~ "대부분은 지속시간이 짧지만, 몇몇은 만성화된 질병처럼 다른 방법을 사용해" +#~ "서\n" +#~ "치료하지 않으면 계속 효과를 냅니다." -#~ msgid "A thin cotton jacket. Good for brisk weather." -#~ msgstr "얇은 면 상의 입니다. 상쾌한 날씨에 입기 좋습니다." +#~ msgid "" +#~ "Taking damage often causes pain. Small amounts of pain are tolerable, " +#~ "but as\n" +#~ "it gets worse your stats will drop and you will move much slower. To " +#~ "reduce\n" +#~ "pain, take painkillers like codeine, or simply wait it out." +#~ msgstr "" +#~ "피해를 입으면 고통이 발생합니다. 크지 않은 고통은 참을만 하지만\n" +#~ "심해질수록 능력치가 감소하고 움직이는 속도가 떨어집니다.\n" +#~ "고통을 줄이려면 코데인 같은 진통제를 먹거나, 그냥 기다려야 합니다." -#~ msgid "plate mail" -#~ msgstr "철판 갑옷(plate mail)" +#~ msgid "" +#~ "When you kill a monster it will often leave behind a corpse. Corpses can " +#~ "be\n" +#~ "important sources of food, but you must Butcher them by standing on the\n" +#~ "corpse and pressing 'B'. You'll need a bladed weapon in your inventory,\n" +#~ "preferably a small, very sharp one. An unskilled butcher may only get a " +#~ "few\n" +#~ "pieces of meat, or none at all. Note that many monsters, such as " +#~ "zombies,\n" +#~ "leave tainted meat, unsuitable for consumption." +#~ msgstr "" +#~ "괴물을 죽이면 대부분 시체가 남습니다. 시체는 중요한 식량 공급원이며, 고기" +#~ "를 얻으려면\n" +#~ "시체 위에서 'B' 키를 누르면 됩니다. 물론 칼붙이를 가지고 있어야 합니다. 작" +#~ "고 날카로우면\n" +#~ "더욱 좋습니다. 고기를 잘라내는 기술이 부족하면 아예 고기를 얻지 못하거나 " +#~ "몇점밖에 잘라내지 \n" +#~ "못합니다. 참고로 좀비같은 괴물들은 오염된 고기를 남기는데, 이는 먹기에 적" +#~ "합하지 않습니다." #~ msgid "" -#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " -#~ "will provide excellent protection against ambient radiation." +#~ "If you press 'i' and then the letter of your weapon, you'll see its " +#~ "combat\n" +#~ "stats. Bashing damage ignores most armor, but varies greatly and " +#~ "requires\n" +#~ "strength. Cutting damage is a fixed amount, but is blocked by armor. " +#~ "The\n" +#~ "To-hit bonus affects your chances of hitting. The amount of time it takes " +#~ "to\n" +#~ "swing your melee weapon depends on both its size and weight; small, " +#~ "compact\n" +#~ "weapons are the fastest." #~ msgstr "" -#~ "꽤 불편하지만 이걸 입으면 방사선에 대해 훌륭한 방호력을 갖게 됩니다." +#~ "'i' 키를 누르고 무기의 문자를 누르면 전투 수치를 확인할 수 있습니다.\n" +#~ "타격 데미지는 대부분의 장갑을 무시하지만, 상황에 따라 큰 편차가 생기고\n" +#~ "상당한 힘이 필요합니다. 베기 데미지는 고정된 데미지를 주지만, 장갑을\n" +#~ "관통하지 못합니다. 명중률 보너스는 명중률에 영향을 줍니다.\n" +#~ "근접 무기를 휘두르는데 걸리는 시간은 무기의 크기와 무게에 달렸습니다.\n" +#~ "작은 무기일수록 빠르죠." #~ msgid "" -#~ "A long cotton dress. Difficult to move in and lacks any storage space." +#~ "Hitting a monster will stun it briefly, allowing you to escape or get in\n" +#~ "another attack. Your dexterity and melee skills are used to determine\n" +#~ "whether an attack hits, while strength affects damage." #~ msgstr "" -#~ "면으로 된 긴 드레스 입니다. 입고 움직이기가 어렵고 저장 공간이 없습니다." +#~ "괴물을 공격하는 것에 성공하면 기절시킬 확률이 있습니다. 괴물을 기절시키" +#~ "면\n" +#~ "도망가거나 추가 공격할 기회가 생기죠. 민첩성과 근접 공격 기술로 명중률이\n" +#~ "결정되고, 체력으로 데미지가 결정됩니다." -#~ msgid "long underwear" -#~ msgstr "긴 속옷(long underwear)" +#~ msgid "" +#~ "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " +#~ "then\n" +#~ "select your flashlight to turn it on." +#~ msgstr "" +#~ "여긴 어둡군요! 운좋게도 손전등이 있습니다. 'a' 키를 누른 후, 손전등을 선택" +#~ "해서 켜세요." #~ msgid "" -#~ "Powerful heatsinks supermaterials are woven into your flesh. While " -#~ "powered, this system will prevent heat damage up to 2000 degrees " -#~ "fahrenheit. Note that this does not affect your internal temperature." +#~ "It's dark down here! Without a source of light, you'll be limited to " +#~ "seeing\n" +#~ "only one space in any direction. You'll encounter darkness while " +#~ "underground\n" +#~ "or at night. Press '<' to go back upstairs, and look around for a " +#~ "flashlight." #~ msgstr "" -#~ "강력한 방열 초전도체가 피부에 삽입되어 있습니다. 전력이 공급되면, 약 1100 " -#~ "도 까지의 열을 냉각시킬수 있습니다, 단 신체만 냉각시키는걸 명심해야합니다." +#~ "여긴 어둡군요! 빛이 없으면 시야가 제한되어 한 칸밖에 보지 못합니다. 지하" +#~ "로 내려가거나\n" +#~ "밤이 되면 어두워집니다. '<' 키로 다시 올라가거나, 손전등을 찾아야 합니다." -#~ msgid "That isn't knife!" -#~ msgstr "이건 나이프가 아닙니다!" +#~ msgid "" +#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " +#~ "using\n" +#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " +#~ "your\n" +#~ "gun, possibly to change ammunition types, press 'U'." +#~ msgstr "" +#~ "무기를 발사하기 위해서는 먼저 'w' 키로 장비를 해야 합니다. 다음에는 \n" +#~ "'r' 키를 눌러 장전해야 합니다. 물론 적합한 탄약이 있어야겠지요. 탄약을 \n" +#~ "총에서 다시 빼내고 싶다면 'U' 키로 뺄 수 있습니다. 탄약 종류를 바꿀 때 유" +#~ "용합니다." -#~ msgid "You couldn't stop the bleeding." -#~ msgstr "출혈을 멈출수가 없습니다." +#~ msgid "" +#~ "After firing your gun, you will probably notice a Recoil alert in the " +#~ "lower\n" +#~ "right. Generally speaking, the more damaging the ammo, the worse the " +#~ "recoil.\n" +#~ "Recoil severely reduces your chance to hit, but you can eliminate recoil " +#~ "by\n" +#~ "pausing ('.') for a turn or moving normally. High strength reduces " +#~ "recoil,\n" +#~ "so weak characters might want to stick to .22 or 9mm guns." +#~ msgstr "" +#~ "사격한 후, 오른쪽 하단에 반동 경고가 보일겁니다. 간단히 말해서 사용하는 탄" +#~ "약이\n" +#~ "살상력이 높을수록, 반동은 심해집니다. 반동은 명중률을 상당히 감소시키지" +#~ "만,\n" +#~ "'.' 키로 잠시 기다리거나 그냥 아무 곳이나 움직이는 것으로 반동을 제거할 " +#~ "수 있습니다.\n" +#~ "힘이 세다면 반동이 감소하기 때문에, 힘이 약한 캐릭터는 .22 구경 혹은 9mm " +#~ "탄을\n" +#~ "사용하는 총 정도만 사용할 수 있습니다." -#~ msgid "You managed to stop the bleeding." -#~ msgstr "출혈을 막는데 성공했습니다." +#~ msgid "" +#~ "That yellow > next to you is a staircase leading down. To go downtairs, " +#~ "step\n" +#~ "onto the staircase and press the '>' key. Similarly, a yellow < is " +#~ "stairs\n" +#~ "leading up, and can be followed with the '<' key." +#~ msgstr "" +#~ "그 노란 > 표시는 아래로 내려가는 계단을 뜻합니다. 내려가려면 계단 위로 간 " +#~ "다음\n" +#~ "'>' 키를 누르면 됩니다. 비슷하게 노란 < 표시는 위로 올라가는 계단이죠.\n" +#~ "올라가려면 역시 계단으로 간 후 '<' 키를 누르면 됩니다." #~ msgid "" -#~ "You neatly sever all of the veins\n" -#~ "and arteries in your body. Oh wait,\n" -#~ "Never mind." +#~ "~ is a terrain symbol that indicates water. From a water source like " +#~ "this,\n" +#~ "you can fill any containers you might have. Step onto the water, then " +#~ "press\n" +#~ "the pickup key (',' or 'g'), then select a watertight container to put " +#~ "the\n" +#~ "water into." #~ msgstr "" -#~ "솜씨 좋게 몸에 있는 모든\n" -#~ "혈관과 동맥을 잘라냅니다. 오 잠깐만,\n" -#~ "아무것도 아닙니다." +#~ "'~' 는 물을 가리키는 지형 표시입니다. 물을 얻을 수 있습니다.\n" +#~ "병같은 것이 있으면 물을 채울 수 있습니다. 물에 가까이 접근해서\n" +#~ "',' 혹은 'g' 같은 줍는 키를 누른 후, 물을 담을 수 있는 용기를 선택하면 됩" +#~ "니다." -#~ msgid "Put up the shelter" -#~ msgstr "피난처 설치" +#~ msgid "Your raincoat protects you from the acidic drizzle." +#~ msgstr "비옷이 산성 가랑비를 막아줍니다." -#~ msgid "Cut up metal" -#~ msgstr "금속 잘라내기" +#~ msgid "Your raincoat protects you from the acid rain." +#~ msgstr "비옷이 산성비를 막아줍니다." -#~ msgid "Place the turret" -#~ msgstr "터렛 설치" +#~ msgid "create an EMP" +#~ msgstr "EMP를 만들었습니다" -#~ msgid "You set the landmine." -#~ msgstr "지뢰를 설치했습니다." +#~ msgid "Activate your bio lockpick" +#~ msgstr "바이오닉 락픽을 발동시켰습니다" -#~ msgid "You bury the landmine." -#~ msgstr "지뢰를 묻었습니다." +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "벌레들이 피부 밑을 기어다닙니다!" -#~ msgid "Bury the landmine?" -#~ msgstr "지뢰를 매설합니까?" +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s는(은) 온 몸을 긁기 시작합니다!" -#~ msgid "You set the bubblewrap on the ground, ready to be popped." -#~ msgstr "바닥에 뽁뽁이 포장지를 설치했다. 뽁뽁 준비는 끝났다." +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s는(은) 온 몸을 긁기 시작합니다!" -#~ msgid "You set the boobytrap up and activate the grenade." -#~ msgstr "부비트랩을 설치하고 신관을 작동시켰다." +#~ msgid "" +#~ "Speed -40%\n" +#~ "You can feel the tiny spores sinking directly into your flesh." +#~ msgstr "" +#~ "속도 - 40%\n" +#~ "작은 포자가 살갗 속으로 직접 들어가는게 느껴집니다." -#~ msgid "Drill" -#~ msgstr "드릴" +#~ msgid "The sludge is thick and sticky." +#~ msgstr "두껍고 끈적거리는 진흙입니다." -#~ msgid "Siphon from" -#~ msgstr "다음에서 빼냅니다" +#~ msgid "Study %s?" +#~ msgstr "%s을(를) 공부합니까?" -#~ msgid "The door swings open..." -#~ msgstr "문이 부드럽게 열렸다..." +#~ msgid "You greatly damage the %s!" +#~ msgstr "%s에게 엄청난 피해를 입혔습니다!" -#~ msgid "It's %d squares to the %s" -#~ msgstr "%d 타일 (%s 까지)" +#~ msgid "You damage the %s!" +#~ msgstr "%s에게 피해를 입혔습니다!" -#~ msgid "You don't have enough battery power to purify all the water." -#~ msgstr "정수할만한 전력이 없다." +#~ msgid "The corpse is now thoroughly pulped." +#~ msgstr "그 시체는 완전히 피떡이 되었습니다." -#~ msgid "You don't have enough batteries!" -#~ msgstr "배터리가 부족합니다!" +#~ msgid "" +#~ "The item you just picked up is a tool! To activate a tool, press 'a'. " +#~ "Some\n" +#~ "tools have a set charge, which can be reloaded once depleted. Other are\n" +#~ "single-use items, and still others are reusable." +#~ msgstr "" +#~ "방금 주운 물건은 도구입니다! 도구를 사용하려면 'a' 키를 누르면 됩니다.\n" +#~ "몇몇 도구는 충전량을 가지고 있는데, 사용하면 다시 충전이 가능합니다.\n" +#~ "몇 가지는 일회용인 경우도 있지만, 대부분 다시 사용할 수 있습니다." -#~ msgid "Light" -#~ msgstr "빛" +#~ msgid "" +#~ "The item you just picked up is a firearm! Guns are very powerful weapons " +#~ "but\n" +#~ "they require ammunition. Firearms have many special attributes. Most\n" +#~ "modify the damage done by their ammunition. They also have dispersion, " +#~ "which\n" +#~ "affects their chance to hit. Some guns are semi-automatic, while others " +#~ "can\n" +#~ "fire a burst. Some firearms (mainly bows and other muscle-powered " +#~ "weapons)\n" +#~ "have a range, which is added on top of the ammo's range when firing." +#~ msgstr "" +#~ "방금 주운 물건은 총기입니다! 총기는 탄약이 필요하긴 하지만, 매우 강력한\n" +#~ "무기입니다. 총기는 몇 가지 특별한 수치가 있는데, 우선 살상력은 사용하는 \n" +#~ "탄약에 많은 영향을 받습니다. 또한 분산도는 명중률에 영향을 미칩니다.\n" +#~ "총기는 단발 사격만 가능한 것도 있고 연발 사격도 가능한 것, 연발만 가능한 " +#~ "것도\n" +#~ "있습니다. 활과 근력을 사용하는 몇몇 무기는 사거리가 있으며, 사거리는\n" +#~ "사격할 때 위에 표시됩니다." -#~ msgid "Put the dog food" -#~ msgstr "개 먹이를 넣습니다." +#~ msgid "" +#~ "The Examine command is useful for grabbing items off window frames, " +#~ "around\n" +#~ "corners, etc. It's also used for interacting with a few terrain types.\n" +#~ "Interactive terrain is usually designated with a '6' symbol." +#~ msgstr "" +#~ "살펴보기 명령은 창문틀 혹은 진열대 같은 곳의 물건을 주울 때 유용합니다.\n" +#~ "또한 몇 가지 지형 종류를 작동시키는데도 사용됩니다.\n" +#~ "일반적으로 작동 가능한 지형은 '6' 으로 표시됩니다." -#~ msgid "You disinfect the bite wound." -#~ msgstr "물린 상처를 소독했습니다." +#~ msgid "" +#~ "Once you have a loaded gun wielded, you can fire it. Press the 'f' key " +#~ "to\n" +#~ "fire a single shot. With many guns, you can fire a burst by pressing " +#~ "'F'.\n" +#~ "You'll automatically target the last monster you shot at, or the closest\n" +#~ "monster to you. You can change your target with the movement keys, or " +#~ "cycle\n" +#~ "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " +#~ "hit\n" +#~ "the escape key." +#~ msgstr "" +#~ "일단 장전한 무기를 장비하면, 발사할 수 있게 됩니다. 'f' 키로 단발사격을 합" +#~ "니다.\n" +#~ "몇 가지 종류의 무기는 연발 사격이 가능한데, 'F' 키로 연발 사격이 가능합니" +#~ "다.\n" +#~ "일단 키를 누르면 자동적으로 가장 가까운 괴물 혹은 마지막으로 쏜 것에 조준" +#~ "이 됩니다.\n" +#~ "이동 키를 통해서 목표를 바꿀 수 있습니다. 혹은 '<' 와 '>' 키를 눌러서 이동" +#~ "할 수도 있죠.\n" +#~ "이 상태에서 발사하려면 'f' 혹은 '.' 키를 누르면 됩니다. ESC 키로 취소할 " +#~ "수 있습니다." -#~ msgid "You clean the bite wound." -#~ msgstr "물린 상처를 닦았습니다." +#~ msgid "You can't find a hospital near your location." +#~ msgstr "이 지역에선 병원을 찾을 수 없습니다." -#~ msgid "Clean Wound" -#~ msgstr "상처 닦기" +#~ msgid "You add a %s location to your map." +#~ msgstr "%s에 대한 장소를 지도에 추가했습니다." -#~ msgid "You stopped the bleeding." -#~ msgstr "피 흘리는것을 멈췄다." +#~ msgid "Use your pick lock" +#~ msgstr "자물쇠따개를 사용하세요." -#~ msgid "Stop Bleeding" -#~ msgstr "지혈" +#~ msgid "You %4$s the %1$s into %2$i %3$s." +#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." +#~ msgstr[0] "%4$s %1$s을(를) %2$i %3$s(으)로 잘랐습니다." -#~ msgid "8: Exit" -#~ msgstr "8: 나가기" +#~ msgid "" +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." +#~ msgstr "" +#~ "방사선 방호 필름으로 봉인된 방사선 노출 탐지용 배지.\r\n" +#~ "사용하면 활성화시킵니다." -#~ msgid "7: %s" -#~ msgstr "7: %s" +#~ msgid "" +#~ "A small blue light glowstick, bend it to break the glass cylinder inside " +#~ "and start the reaction to produce a very small amount of light." +#~ msgstr "" +#~ "작은 청색광 막대기입니다. 꺾어서 내부의 유리관을 깨면, 화학반응을 일으켜" +#~ "서 아주 약한 빛을 냅니다." -#~ msgid "%1$s stumbles and leers at %4$s" -#~ msgstr "%1$s 비틀거리다 %4$s 를 찾았습니다.(오역표12)" +#~ msgid "" +#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " +#~ "pulled, the crossbow fires. Only a single round can be used, after which " +#~ "the trap is disabled." +#~ msgstr "" +#~ "인계철선에 장전된 쇠뇌를 연결한 덫입니다. 줄이 당겨지면 쇠뇌가 발사됩니" +#~ "다. 십자궁에는 단 한발만 장전 가능하기 때문에 한번만 작동합니다." -#~ msgid "%1$s stumble and leer at %4$s" -#~ msgstr "%1$s 비틀거리다 %4$s 를 찾았습니다.(오역표19)" +#~ msgid "4.6mm caliber retool" +#~ msgstr "4.6mm 총열 부품(4.6mm retool)" -#~ msgid "zui quan" -#~ msgstr "취권" +#~ msgid "5.7mm caliber retool" +#~ msgstr "5.7mm 총열 부품(5.7mm retool)" -#~ msgid "toad style" -#~ msgstr "두꺼비권" +#~ msgid "A small woodland animal." +#~ msgstr "작은 초원 동물입니다." -#~ msgid "lizard style" -#~ msgstr "도마뱀권" +#~ msgid "fungal insect" +#~ msgstr "진균체 감염 곤충(fungal insect)" -#~ msgid "%1$s strikes %4$s with spincer fist" -#~ msgstr "%1$s 스펜서 주먹 공격%4$s" +#~ msgid "master zombie" +#~ msgstr "마스터 좀비(master zombie)" -#~ msgid "%1$s strike %4$s with spincer fist" -#~ msgstr "%1$s 스펜서 주먹 공격%4$s" +#~ msgid "child zombie" +#~ msgstr "아기 좀비(child zombie)" -#~ msgid "scorpion style" -#~ msgstr "전갈권" +#~ msgid "young triffid" +#~ msgstr "어린 트리피드(young triffid)" -#~ msgid "viper style" -#~ msgstr "독사권" +#~ msgid "vinebeast" +#~ msgstr "줄기 괴물(vinebeast)" -#~ msgid "%1$s swiftly hits %4$s" -#~ msgstr "%1$s 재빠른 공격 %4$s" +#~ msgid "creeping vine" +#~ msgstr "크리퍼 줄기(creeping vine)" -#~ msgid "%1$s swiftly hit %4$s" -#~ msgstr "%1$s 재빠른 공격 %4$s" +#~ msgid "queen triffid" +#~ msgstr "여왕 트리피드(queen triffid)" -#~ msgid "centipede style" -#~ msgstr "지네권" +#~ msgid "young fungaloid" +#~ msgstr "어린 진균체(young fungaloid)" -#~ msgid "%1$s uses dragon strike on %4$s" -#~ msgstr "%1$s 용머리 치기 %4$s" +#~ msgid "spore" +#~ msgstr "포자(spore)" -#~ msgid "%1$s use dragon strike on %4$s" -#~ msgstr "%1$s 용머리 치기 %4$s" +#~ msgid "one-eyed mutant" +#~ msgstr "외눈 돌연변이(one-eyed mutant)" -#~ msgid "dragon style" -#~ msgstr "용권" +#~ msgid "sewer fish" +#~ msgstr "하수구 물고기(sewer fish)" -#~ msgid "%1$s writhes free from %4$s" -#~ msgstr "%1$s 비틀어서 %4$s 빠져나오기" +#~ msgid "crawler mutant" +#~ msgstr "기어다니는 뮤턴트(crawler mutant)" -#~ msgid "%1$s writhe free from %4$s" -#~ msgstr "%1$s 비틀어서 %4$s 빠져나오기" +#~ msgid "web spider" +#~ msgstr "웹 거미(web spider)" -#~ msgid "%1$s snakebites %4$s" -#~ msgstr "%1$s 뱀물기 %4$s" +#~ msgid "trap door spider" +#~ msgstr "문짝거미(trap door spider)" -#~ msgid "%1$s snakebite %4$s" -#~ msgstr "%1$s 뱀물기 %4$s" +#~ msgid "black widow" +#~ msgstr "검은과부거미(black widow)" -#~ msgid "snake style" -#~ msgstr "사권" +#~ msgid "Amigara horror" +#~ msgstr "아미가라 공포체(Amigara horror)" -#~ msgid "%1$s strikes %4$s with leopard fist" -#~ msgstr "%1$s 표범주먹 공격 %4$s" +#~ msgid "Thing" +#~ msgstr "무언가(Thing)" -#~ msgid "%1$s strike %4$s with leopard fist" -#~ msgstr "%1$s 표범주먹 공격 %4$s" +#~ msgid "gelatinous blob" +#~ msgstr "젤리 덩어리(gelatinous blob)" -#~ msgid "%1$s swiftly jabs %4$s" -#~ msgstr "%1$s 재빠른 잽 %4$s" +#~ msgid "Mi-go" +#~ msgstr "미고(Mi-go)" -#~ msgid "%1$s swiftly jab %4$s" -#~ msgstr "%1$s 재빠른 잽 %4$s" +#~ msgid "Gozu" +#~ msgstr "고주(Gozu)" -#~ msgid "%1$s hand-pecks %4$s" -#~ msgstr "%1$s 손 쪼기 %4$s" +#~ msgid "secubot" +#~ msgstr "보안로봇(secubot)" -#~ msgid "%1$s hand-peck %4$s" -#~ msgstr "%1$s 손 쪼기 %4$s" +#~ msgid "tripod robot" +#~ msgstr "세발 로봇(tripod robot)" -#~ msgid "crane style" -#~ msgstr "학권" +#~ msgid "copbot" +#~ msgstr "경찰 로봇(copbot)" -#~ msgid "tiger style" -#~ msgstr "맹호권" +#~ msgid "molebot" +#~ msgstr "두더쥐 로봇(molebot)" -#~ msgid "%1$s brutally kicks %4$s" -#~ msgstr "%1$s 공격적 발차기 %4$s" +#~ msgid "hazmatbot" +#~ msgstr "험지 로봇(hazmatbot)" -#~ msgid "%1$s brutally kick %4$s" -#~ msgstr "%1$s 공격적 발차기 %4$s" +#~ msgid "Bandage" +#~ msgstr "붕대" -#~ msgid "taekwondo" -#~ msgstr "태권도" +#~ msgid "Disinfectant" +#~ msgstr "소독약(disinfectant)" #~ msgid "" -#~ "Taekwondo is the national sport of Korea, and was used by the South " -#~ "Korean\n" -#~ "army in the 20th century. Focused on kicks and punches, it also includes\n" -#~ "strength training; your blocks absorb extra damage the stronger you are." +#~ "A bow with wheels that fires high velocity arrows. Weaker people can use " +#~ "compound bows more easily. Arrows fired from this weapon have a good " +#~ "chance of remaining intact for re-use. It requires 8 strength to fire" #~ msgstr "" -#~ "태권도는 한국의 국기이며, 20세기 부터는 한국군에서도 사용했습니다.\n" -#~ "발차기와 주먹에 초점을 두고 있으며 신체단련도 포함됩니다.\n" -#~ "방어시 당신보다 강한 상대의 공격을 보통보다 더 많이 흡수합니다." - -#~ msgid "ninjutsu" -#~ msgstr "닌자술" +#~ "도르레가 달려 화살을 고속으로 발사하는 활입니다. 힘이 약한 사람이 사용하기" +#~ "에 좀 더 편합니다. 이 활로 쏜 화살은 부서지지 않을 확률이 높습니다. 힘 8 " +#~ "포인트가 필요합니다." #~ msgid "" -#~ "Ninjutsu is a martial art and set of tactics used by ninja in feudal " -#~ "Japan.\n" -#~ "It focuses on rapid, precise, silent strikes. Ninjutsu is entirely " -#~ "silent.\n" -#~ "It also provides small combat bonuses the turn after moving a tile." +#~ "A six-foot wooden bow that fires feathered arrows. This takes a fair " +#~ "amount of strength to draw. Arrows fired from this weapon have a good " +#~ "chance of remaining intact for re-use. It requires 10 strength to fire" #~ msgstr "" -#~ "인술은 봉건시대 일본의 무술이며 전술로 사용되기도 했습니다.\n" -#~ "빠르고, 정확하고, 조용한 공격에 초점을 두고 있습니다. 인술은 소리를 내지 " -#~ "않습니다.\n" -#~ "또한 한 타일을 움직일 때마다 소량의 전투 보너스를 줍니다." - -#~ msgid "%1$s power-kicks %4$s" -#~ msgstr "%1$s 강한 발차기 %4$s" - -#~ msgid "%1$s power-kick %4$s" -#~ msgstr "%1$s 강한 발차기 %4$s" - -#~ msgid "%1$s slaps %4$s" -#~ msgstr "%1$s 손바닥치기 %4$s" - -#~ msgid "%1$s slap %4$s" -#~ msgstr "%1$s 손바닥치기 %4$s" +#~ "깃털을 사용한 화살을 쏘는 1.8m 길이의 목제 활입니다. 화살을 쏘려면 상당한 " +#~ "힘을 가지고 있어야합니다. 이 활로 쏜 화살은 부서지지 않을 확률이 꽤 있습니" +#~ "다. 사용하는데 10 포인트의 힘이 필요합니다." -#~ msgid "muay thai" -#~ msgstr "무에타이" +#~ msgid "bow-like_object" +#~ msgstr "활같이 생긴 물체(bow-like_object)" #~ msgid "" -#~ "Also referred to as the \"Art of 8 Limbs,\" Muay Thai is a popular " -#~ "fighting\n" -#~ "technique from Thailand that uses powerful strikes. It does extra damage\n" -#~ "against large or strong opponents." +#~ "An object that looks like a bow from afar, but closer inspection will " +#~ "reveal its simple nature. This is a bow someone with absolutely no " +#~ "knowledge of bows would make. Solely based on popular depictions from " +#~ "movies and video games, this object merely tries to look and act like a " +#~ "bow, nothing more." #~ msgstr "" -#~ "\"여덟 관절의 예술\"이라고도 알려진 무에 타이는 태국에서 발생했으며 강력" -#~ "한 공격을 사용해, 싸움의 기술로 매우 인기 있습니다.\n" -#~ "덩치가 큰 상대와 강한 상대에게 추가 피해를 줍니다." - -#~ msgid "%1$s counter-attacks %4$s" -#~ msgstr "%1$s 반격 %4$s" - -#~ msgid "%1$s counter-attack %4$s" -#~ msgstr "%1$s 반격 %4$s" - -#~ msgid "%1$s jabs %4$s" -#~ msgstr "%1$s 잽 %4$s" - -#~ msgid "%1$s jab %4$s" -#~ msgstr "%1$s 잽 %4$s" - -#~ msgid "krav maga" -#~ msgstr "크라브마가" +#~ "멀리서 보면 활처럼 생겼지만 가까이 살펴보면 활이 아닌것이 보입니다. 이 활 " +#~ "같은 것은 분명히 활에 대해 아무런 지식이 없는 사람이 만든것입니다. 컴퓨터 " +#~ "게임이나 영화에서 본 지식만으로 만들어져서 활처럼 생기고 활과 비슷하게 작" +#~ "동하지만 그뿐입니다." -#~ msgid "%1$s spin-kicks %4$s" -#~ msgstr "%1$s 회전 발차기 %4$s" +#~ msgid "10kg bow" +#~ msgstr "10kg 활(bow)" -#~ msgid "%1$s spin-kick %4$s" -#~ msgstr "%1$s 회전 발차기 %4$s" +#~ msgid "" +#~ "Made using the most rudimentary knowledge of bows, this short and weak " +#~ "bow is just enough to take down small game in a shot or two." +#~ msgstr "" +#~ "활에 대한 가장 기초적인 지식을 사용해서 만든 활입니다. 이 짧고 약한 활은 " +#~ "작은 동물을 사냥하기엔 충분합니다." -#~ msgid "%1$s spins and hits %4$s" -#~ msgstr "%1$s 회전공격 %4$s" +#~ msgid "20kg_bow" +#~ msgstr "20kg 활(bow)" -#~ msgid "%1$s spin and hit %4$s" -#~ msgstr "%1$s spin and hit %4$s" +#~ msgid "" +#~ "A bow with a semi-powerful draw. Its relatively low draw weight gives a " +#~ "good draw speed, as well as precision for lack of strain on the user when " +#~ "the bow is fully drawn." +#~ msgstr "" +#~ "당기는데 어느정도 힘이 필요한 활입니다. 드로우 웨이트(활을 당기는데 필요" +#~ "한 힘)가 비교적 적은편에 속하기 때문에 당기는 속도가 빠르며 최대한 당겨도 " +#~ "팔에 부담이 적기 때문에 비교적 정확합니다." -#~ msgid "%1$s low kicks %4$s" -#~ msgstr "%1$s 로우킥 %4$s" +#~ msgid "30kg bow" +#~ msgstr "30kg 활(bow)" -#~ msgid "%1$s low kick %4$s" -#~ msgstr "%1$s 로우킥 %4$s" +#~ msgid "" +#~ "With a draw weight slightly above what professional users use, this bow " +#~ "can take down medium game, and even large game with enough skill." +#~ msgstr "" +#~ "전문적인 사용자 초기 수준의 드로우 웨이트(활을 당기는데 필요한 힘)를 가진 " +#~ "이 활은 중간 크기의 동물을 사냥할수 있고 숙련된 사용자가 사용하면 대형 크" +#~ "기의 동물도 사냥할수 있습니다." -#~ msgid "%1$s bluffs %4$s" -#~ msgstr "%1$s 허풍 %4$s" +#~ msgid "30kg bow compound" +#~ msgstr "30kg 컴파운드 보우(bow compound)" -#~ msgid "%1$s bluff %4$s" -#~ msgstr "%1$s 허풍 %4$s" +#~ msgid "" +#~ "A bow that uses a set of pulleys to take the strain off the user when a " +#~ "bow is fully drawn to provide better accuracy. This does not mean however " +#~ "that the draw weight on these must be less than a bow with similar draw " +#~ "weight." +#~ msgstr "" +#~ "2개의 도르래가 달려있어서 최대한 당겼을때 유지하는 힘을 상당히 줄여 높은 " +#~ "정확도를 가진 활 입니다. 그러나 드로우 웨이트(활을 당기는데 필요한 힘)가 " +#~ "다른 활보다 작은건 아닙니다." -#~ msgid "capoeira" -#~ msgstr "카포에이라" +#~ msgid "40kg bow" +#~ msgstr "40kg 활(bow)" #~ msgid "" -#~ "A dance-like style with its roots in Brazilian slavery, capoeira is " -#~ "focused\n" -#~ "on fluid movement and sweeping kicks. Moving a tile will boost attack " -#~ "and\n" -#~ "dodge; attacking boosts dodge, and dodging boosts attack." +#~ "A bow with a draw strength rarely seen in modern day. The bow's power is " +#~ "akin to those of big game hunters in the safari. However, due to its draw " +#~ "weight, the draw time is slower, and the strain of the draw hinders " +#~ "accuracy." #~ msgstr "" -#~ "춤을 추는 것 같은 카포에라는 브라질 노예들에 의해서 만들어졌으며\n" -#~ "유연한 동작과 쓰는듯한 발차기가 핵심입니다.\n" -#~ "한 타일을 움직이면 공격과 회피가 증가 하며,\n" -#~ "공격을 하면 회피력 증가, 회피시는 공격력이 증가합니다." +#~ "현대에는 거의 사용하지 않는 높은 드로우 웨이트(활을 당기는데 필요한 힘)를 " +#~ "가진 활입니다. 사파리에 있는 큰 동물을 사냥하는데 충분한 힘을 가지고 있습" +#~ "니다. 하지만 워낙 드로우 웨이트가 높기 때문에 당기는데 필요한 시간이 오래 " +#~ "걸립니다. 또한 유지하는데 필요한 힘 또한 커서 정확도가 낮습니다." -#~ msgid "%1$s strikes %4$s" -#~ msgstr "%1$s 공격 %4$s" +#~ msgid "50kg bow" +#~ msgstr "50kg 활(bow)" -#~ msgid "%1$s strike %4$s" -#~ msgstr "%1$s 공격 %4$s" +#~ msgid "" +#~ "Among the most distinctive things about this bow are the curled arms that " +#~ "turn away from the archer at the ends. Due to high workmanship, the high " +#~ "draw weight is much more efficiently transferred into throwing the arrow. " +#~ "The strain does however put a great deal of strain onto the user, " +#~ "lowering both accuracy and rate of fire." +#~ msgstr "" +#~ "이 활의 가장 특이한 점은 활 모양이 역으로 휘어져 있다는것입니다. 실력 좋" +#~ "은 장인이 만든 덕분에 강력한 드로우 웨이트(활을 당기는데 필요한 힘)에서 나" +#~ "오는 힘을 좀더 효율적으로 화살에 전달합니다. 하지만 시위를 당긴 상태로 유" +#~ "지하는 힘이 매우 크기 때문에 정확도와 발사 속도가 낮습니다." -#~ msgid "tai chi" -#~ msgstr "태극권" +#~ msgid "65kg bow" +#~ msgstr "65kg 활(bow)" #~ msgid "" -#~ "Though tai chi is often seen as a form of mental and physical exercise, " -#~ "it is\n" -#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " -#~ "the\n" -#~ "force of an attack makes your Perception decrease damage further on a " -#~ "block." +#~ "The massive frame of this weapon belies its monstrous power and a draw " +#~ "weight at the edge of human capability. The immense strain that this bow " +#~ "puts on the user comes at a drastic cost of accuracy and rate of fire, " +#~ "but the power and range rewarded is unparalleled." #~ msgstr "" -#~ "태극권은 정신수양과 육체단련을 위한 것으로 보이지만 엄연히 무술이며 자기방" -#~ "어에 초점을 두고 있습니다. 방어시 본인의 지각능력에 비례해 방어력이 높아집" -#~ "니다." +#~ "이 활은 거대한 활몸을 가지고 있어서 인간이 낼수 있는 최대 한계의 엄청난 파" +#~ "괴력과 드로우 웨이트(활을 당기는데 필요한 힘)를 가지고 있습니다. 당긴 상태" +#~ "로 유지하는데 필요한 힘이 극도로 높기 때문에 정확도와 발사속도가 극단적으" +#~ "로 낮지만, 살상력과 사거리는 타의 추종을 불허합니다." -#~ msgid "%1$s grabs %4$s" -#~ msgstr "%1$s 잡다 %4$s" +#~ msgid "%s %s" +#~ msgstr "%s %s" -#~ msgid "%1$s grab %4$s" -#~ msgstr "%1$s 잡다 %4$s" +#, fuzzy +#~ msgid "24 hour time" +#~ msgstr "24 시간 단위 표시" -#~ msgid "judo" -#~ msgstr "유도" +#, fuzzy +#~ msgid "%1$s sweep-kicks %4$s" +#~ msgstr "%1$s 회전 발차기 %4$s" -#~ msgid "" -#~ "Judo is a martial art that focuses on grabs and throws, both defensive " -#~ "and\n" -#~ "offensive. It also focuses on recovering from throws; while using judo, " -#~ "you\n" -#~ "will not lose any turns to being thrown or knocked down." -#~ msgstr "" -#~ "유도는 잡기와 던지기에 특화되었으며, 둘 다 공수양면을 수행할 수 있습니" -#~ "다.\n" -#~ "던지기에서 다시 복귀하는 것에 초점을 두고 있으며, 유도를 사용하는 중에는 " -#~ "던지기나 쓰러지는 것으로 인한 턴 손실이 없습니다." +#, fuzzy +#~ msgid "%1$s side-kicks %4$s" +#~ msgstr "%1$s 회전 발차기 %4$s" -#~ msgid "%1$s disarms %4$s" -#~ msgstr "%1$s 무장해제 %4$s" +#, fuzzy +#~ msgid "%1$s surprise attack %4$s" +#~ msgstr "%1$s 반격 %4$s" -#~ msgid "%1$s disarm %4$s" -#~ msgstr "%1$s disarm %4$s" +#, fuzzy +#~ msgid "%1$s flying knees %4$s" +#~ msgstr "%1$s 가로베기 %4$s" -#~ msgid "%1$s throws %4$s" +#, fuzzy +#~ msgid "%1$s elbows %4$s" #~ msgstr "%1$s throws %4$s" -#~ msgid "%1$s throw %4$s" +#, fuzzy +#~ msgid "%1$s elbow %4$s" #~ msgstr "%1$s throw %4$s" -#~ msgid "%1$s feints at %4$s" -#~ msgstr "%1$s 속이기 %4$s" - -#~ msgid "%1$s feint at %4$s" -#~ msgstr "%1$s 속이기를 사용하다 %4$s" +#, fuzzy +#~ msgid "%1$s uses %2$s %3$s to sweep %4$s" +#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" -#~ msgid "aikido" -#~ msgstr "합기도" +#, fuzzy +#~ msgid "%1$s use %2$s %3$s to sweep %4$s" +#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" -#~ msgid "" -#~ "Aikido is a Japanese martial art focused on self-defense, while " -#~ "minimizing\n" -#~ "injury to the attacker. It uses defense throws and disarms. Damage done\n" -#~ "while using this technique is halved, but pain inflicted is doubled." -#~ msgstr "" -#~ "합기도는 일본에서 유래된 호신술로, 공격자의 부상을 최소화하는 데 초점을 둡" -#~ "니다. 방어를 위한 던지기와 무장 해제 기술을 사용합니다.\n" -#~ "합기도를 사용하면 공격력은 절반이 되지만, 고통은 두 배가 됩니다." +#, fuzzy +#~ msgid "%1$s uses %2$s %3$s to wrap up %4$s" +#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" -#~ msgid "%1$s karate chops %4$s" -#~ msgstr "%1$s 가라테 당수 %4$s" +#, fuzzy +#~ msgid "%1$s use %2$s %3$s to wrap up %4$s" +#~ msgstr "%1$s 사용했다 %2$s %3$s 던졌다 %4$s" -#~ msgid "%1$s karate chop %4$s" -#~ msgstr "%1$s 가라테 당수 %4$s" +#, fuzzy +#~ msgid "%1$s quickly strikes with %2$s %3$s at %4$s" +#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" -#~ msgid "%1$s blocks %4$s" -#~ msgstr "%1$s 방어 %4$s" +#, fuzzy +#~ msgid "%1$s quickly strike with %2$s %3$s at %4$s" +#~ msgstr "%1$s 쓸다 %2$s %3$s 의 %4$s" -#~ msgid "%1$s block %4$s" -#~ msgstr "%1$s 방어 %4$s" +#, fuzzy +#~ msgid "Very Heavily Bleeding " +#~ msgstr "심한 열 의존증" -#~ msgid "%1$s quickly punches %4$s" -#~ msgstr "%1$s 빠른 펀치 %4$s" +#, fuzzy +#~ msgid "Cart" +#~ msgstr "골프 카트" -#~ msgid "%1$s quickly punch %4$s" -#~ msgstr "%1$s 빠른 펀치 %4$s" +#, fuzzy +#~ msgid "Enter new cart name:" +#~ msgstr "차량의 새로운 이름 입력:" -#~ msgid "karate" -#~ msgstr "가라테" +#, fuzzy +#~ msgid "Start cart construction" +#~ msgstr "자동차 제작 시작" #~ msgid "" -#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" -#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " -#~ "allows\n" -#~ "you an extra dodge and two extra blocks on the following round." +#~ "You just put on an article of clothing that provides ample storage " +#~ "space.\n" +#~ "This will allow you to carry much more stuff, but be aware that there is " +#~ "also\n" +#~ "a limit on the weight you can carry which depends on strength. The item " +#~ "you\n" +#~ "put on also encumbered your torso. This will make combat a little more\n" +#~ "difficult. To check encumbrance, press @." #~ msgstr "" -#~ "공수도는 일본에서 시작되었고, 매우 인기있는 무술입니다.\n" -#~ "빠르고 정확한 공격과 방어, 유연한 움직임에 초점을 두고 있습니다.\n" -#~ "성공적인 공격은 추가 회피와 다음 라운드에 추가 방어 2 를 제공합니다." - -#~ msgid "Error: Item Missing." -#~ msgstr "오류 : 물품 없음." - -#~ msgid "MODS/BIONICS" -#~ msgstr "모드/바이오닉" +#~ "저장공간을 제공해주는 의류를 입으면 자동으로 저장공간이 늘어납니다.\n" +#~ "이러한 의류는 더 많은 부피의 짐을 들게 해주지만, 소지 가능한 물품의 한계" +#~ "는\n" +#~ "부피만이 아닌, 체력에 따라 달라지는 최대 무게에 의해서도 결정된다는 점을\n" +#~ "기억해야 합니다. 그리고 방금 전에 당신이 착용한 의류는 상체 부위의 방해도" +#~ "를\n" +#~ "높입니다. 이렇게 되면 근접 전투가 약간 더 어려워지죠. 방해도를 확인하려" +#~ "면\n" +#~ "'@' 키를 누르세요." #~ msgid "" -#~ "While sleeping in dangerous territory, it may be wise to set traps to " -#~ "ward\n" -#~ "off unwanted intrusions. There are a few traps to be found in the world,\n" -#~ "most notably bubblewrap (which will make a loud noise if stepped on, " -#~ "helping\n" -#~ "to wake you up) and bear traps (which make noise AND damage and trap " -#~ "anything\n" -#~ "that steps on them). Others need to be crafted; this requires the Traps " -#~ "skill\n" -#~ "and possibly Mechanics.\n" -#~ "\n" -#~ "To set a trap, simply use the item%s and choose a direction; the trap\n" -#~ "will be placed on an adjacent tile. Some traps may require additional " -#~ "tools,\n" -#~ "like a shovel, to be set. Once set, a trap will remain in place until\n" -#~ "stepped on or disarmed.\n" -#~ "\n" -#~ "To disarm a trap, examine%s the space it is on. Your success depends\n" -#~ "upon your Traps skill and Dexterity. If you succeed, the trap is removed\n" -#~ "and replaced by some or all of its constituent parts; however, if you " -#~ "fail,\n" -#~ "there is a chance that you will set off the trap, suffering the " -#~ "consequences.\n" -#~ "\n" -#~ "Many traps are fully or partially hidden. Your ability to detect traps " -#~ "is\n" -#~ "entirely dependent upon your Perception. Should you stumble into a trap, " +#~ "You just put on an article of clothing that protects against the " +#~ "environment.\n" +#~ "The most common and imporant are respiratory devices, which will protect " #~ "you\n" -#~ "may have a chance to avoid it, depending on your Dodge skill." +#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" +#~ "However, they also make it a little harder to breath when running, so " +#~ "you'll\n" +#~ "move more slowly. To check encumbrance, press @." #~ msgstr "" -#~ "위험한 지역에서 잠을 자는 경우, 함정을 설치해서 침입자를 막는게\n" -#~ "현명한 선택입니다. 몇가지 함정이 있지만 가장 인상적인건\n" -#~ "뾱뾱이 함정입니다 누군가 밟으면 소리가 나기 때문에 깨는데 도움이\n" -#~ "됩니다. 또 곰 함정도 있습니다 소리도 나면서 데미지도 줍니다.\n" -#~ "제작 가능한 함정도 있는데, 함정 스킬과 기계공학도 필요합니다.\n" -#~ "\n" -#~ "함정을 설치하려면, %s 로 사용해서 위치를 지정하면 됩니다.\n" -#~ "간혹 몇몇 함정은 추가적인 도구가 필요하기도 한데, 삽이 대표적이죠\n" -#~ "일단 설치되면 함정은 누가 밟거나 해체하기 전까진 그대로 있습니다.\n" -#~ "\n" -#~ "함정을 해체하려면 %s 로 해당 타일을 살펴야 합니다. 성공률은\n" -#~ "함정 스킬과 민첩성에 달려있습니다. 성공하면 함정은 제거되고\n" -#~ "해당 부품의 일부분 혹은 전체가 그 곳에 남게 됩니다. 하지만\n" -#~ "실패하면 함정을 작동시킬 가능성이 있고, 그에 따란 결과를 보게되죠.\n" -#~ "\n" -#~ "대부분의 함정들은 전체 혹은 부분적으로 숨겨져 있습니다.\n" -#~ "이런 함정을 찾는 능력은 지각력으로만 가능합니다.\n" -#~ "함정을 밟는 경우 회피 스킬로 함정을 피할 가능성도 있습니다." +#~ "환경 보호력을 제공해주는 의류를 입으면, 자동으로 대 환경 보호력이 올라갑니" +#~ "다.\n" +#~ "마스크는 가장 흔한 대 환경 보호 장비로, 주로 연기나 독안개 등으로부터 몸" +#~ "을\n" +#~ "지켜줍니다. 하지만, 이런 마스크류 장비는 달릴 때 호흡을 방해하기 때문에\n" +#~ "이동속도가 약간 느려집니다. 방해도를 확인하려면 '@' 키를 누르세요." #~ msgid "" -#~ "Whoa. Whoa. Hey. This game requires a minimum terminal size of %dx%d. " -#~ "I'm\n" -#~ "sorry if your graphical terminal emulator went with the woefully-" -#~ "diminutive\n" -#~ "%dx%d as its default size, but that just won't work here. Now stretch " -#~ "the\n" -#~ "window until you've got it at the right size (or bigger).\n" +#~ "Choose the tileset you want to use. Only applicable on SDL builds. " +#~ "Requires restart." #~ msgstr "" -#~ "워. 워. 저기요. 이 게임은 적어도 %dx%d 정도의 화면 크기가 필요 합니다.\n" -#~ "죄송하지만 사용중인 터미널 에뮬레이터의 화면 크기가 %dx%d 가 안된다면, 사" -#~ "용할수가 없습니다.\n" -#~ "필요한 크기가 될수 있도록 화면을 늘려주세요.\n" - -#~ msgid "Wield item: Press - to choose a style" -#~ msgstr "아이템 장착: - 키를 눌러 고르십시오." - -#~ msgid "Butcher the %s corpse?" -#~ msgstr "%s 시체를 도축하시겠습니까?" - -#~ msgid "You need a charged UPS." -#~ msgstr "충전된 UPS(무전원장치) 가 필요합니다." - -#~ msgid "Drop" -#~ msgstr "버린다" - -#~ msgid "There's no vehicle to grab there!" -#~ msgstr "거기엔 붙잡을 차량이 없다!" +#~ "사용하고 싶은 타일셋을 선택합니다. SDL 버전에서만 적용됩니다. 재시작 필요." -#~ msgid "Have a drink?" -#~ msgstr "마시겠습니까?" +#~ msgctxt "Main Menu" +#~ msgid "eset" +#~ msgstr "리셋" -#~ msgid "You dont see any items around you!" -#~ msgstr "주변에 어떤 물품도 없습니다!" +#~ msgid "mole" +#~ msgstr "두더지(mole)" -#~ msgid "Examine" -#~ msgstr "조사" +#~ msgid "" +#~ "An eastern timber rattlesnake, one of New England's most poisonous snakes." +#~ msgstr "" +#~ "위험한 방울뱀으로, 뉴 잉글랜드 지방에서 가장 강력한 독을 가진 뱀들 중 하나" +#~ "입니다." -#~ msgid "Control vehicle" -#~ msgstr "차량 조종" +#~ msgid "A small, omnivorous marsupial native to North America." +#~ msgstr "작은 잡식성의 주머니쥐로, 북아메리카 출신입니다." -#~ msgid "You swing at the corpse." -#~ msgid_plural "You swing at the corpses." -#~ msgstr[0] "시체를 한대 쳤습니다." +#~ msgid "" +#~ "A small mammal native to North America, distinctive for its dexterous " +#~ "paws and facial markings." +#~ msgstr "" +#~ "북아메리카에서 살던 작은 포유류로, 손재주가 뛰어난 손과 얼굴에 난 표식으" +#~ "로 구분할 수 있습니다." -#~ msgid "Smash" -#~ msgstr "부수기" +#~ msgid "" +#~ "A small blob of viscous goo that oozes\n" +#~ "across the ground like a mass of living\n" +#~ "oil." +#~ msgstr "" +#~ "작고 끈적거리는 점액질로, 마치 살아 움직이는 석유를 떠올리게 합니다." -#~ msgid "Close" -#~ msgstr "문 닫기" +#, fuzzy +#~ msgid "" +#~ "A plant that grows as high as your head,\n" +#~ "with one thick, bark-coated stalk\n" +#~ "supporting a flower-like head with a paralyzing\n" +#~ "sting within." +#~ msgstr "" +#~ "머리 높이만큼 길게 자란 식물입니다. 두꺼운 껍질로 덮힌 줄기가 꽃처럼 생긴 " +#~ "머리를 받치고 있으며, 머리엔 날카로운 가시가 달려있습니다." -#~ msgid "Open" -#~ msgstr "문 열기" +#~ msgid "" +#~ "A massive, mutated freshwater shellfish,\n" +#~ "resembling a humongous lobster." +#~ msgstr "거대한, 변이된 갑각류입니다. 엄청나게 큰 랍스타 같습니다." -#~ msgid "Martial arts gained." -#~ msgstr "무술 배움." +#~ msgid "" +#~ "A large and colorful game bird native to the forests of North America." +#~ msgstr "형형색색의 깃털을 가진 큰 새로, 북아메리카의 숲에서 살던 새입니다." -#~ msgid "%s Stop %s?" -#~ msgstr "%s %s 를(을) 중단합니까?" +#~ msgid "clams" +#~ msgstr "대합(clams)" -#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." -#~ msgstr "%s %s 를(을) 중단합니까? Y : 중단 N : 계속 I : 다른 소리도 무시" +#~ msgid "" +#~ "Vacuum packed fruit slices in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "진공 포장된 과일 조각입니다. 포장을 뜯으면, 즐거움이 시작됩니다." -#~ msgid "training" -#~ msgstr "훈련" +#~ msgid "" +#~ "This chemistry set stored in a bag contains glass containers, hoses, " +#~ "metal wire, a hotplate, and safety glasses. It might be used to craft " +#~ "some chemistry projects if you're so inclined." +#~ msgstr "" +#~ "화학용 도구를 담아둔 가방으로, 유리병, 호스, 철사, 전열기, 보안경으로 이루" +#~ "어져 있습니다. 할 수 있다면, 화학 약품 등을 만들 때 도구로 사용할 수 있습" +#~ "니다." -#~ msgid "pumping gas" -#~ msgstr "기름 퍼올리기" +#, fuzzy +#~ msgid "" +#~ "Small metal objects covered with many sharp points. If an unsuspecting " +#~ "victim steps on it, they'll get a spine through the foot." +#~ msgstr "" +#~ "나무 판에 못을 거꾸로 박은 덫입니다. 밟으면 못이 발에 박히게 됩니다." -#~ msgid "foraging" -#~ msgstr "채집중.." +#~ msgid "Really cheap fortified red wine." +#~ msgstr "알코올을 첨가한 싸구려 와인입니다." -#~ msgid "disassembly" -#~ msgstr "분해" +#~ msgid "RPG-7 Ammo" +#~ msgstr "RPG-7 Ammo" -#~ msgid "butchering" -#~ msgstr "도축중..." +#~ msgid "Lumpy white soup made of clams and potatoes." +#~ msgstr "대합과 감자를 넣어 만든, 덩어리진 흰색 수프입니다." -#~ msgid "waiting" -#~ msgstr "대기" +#~ msgid "An empty hull from a 5x50mm flechette round." +#~ msgstr "5x50mm 플레쉐트 탄의 빈 탄피입니다." -#~ msgid "reloading" -#~ msgstr "재장전" +#~ msgid "Ammunition for the RPG-7." +#~ msgstr "RPG-7 용 탄두입니다." -#~ msgid "reading" -#~ msgstr "독서" +#~ msgid "A very loud horn, usually found on large trucks like semis." +#~ msgstr "아주 시끄러운 경적입니다. 주로 큰 트럭에 달려있습니다." -#~ msgid "playing" -#~ msgstr "플레이중" +#~ msgid "" +#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " +#~ "stimulant when you inject yourself with it. Asthmatics can use it in an " +#~ "emergency to clear their asthma." +#~ msgstr "" +#~ "1회분 용량의 아드레날린 주사기로, 투여시 강력한 흥분 촉진을 유발합니다. 천" +#~ "식 증상이 위중할 때 사용할 수도 있습니다." -#~ msgid "crafting" -#~ msgstr "제작중..." +#~ msgid "" +#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " +#~ "ball game will REALLY heat up." +#~ msgstr "" +#~ "튼튼한 목제 야구방망이에 휘발유를 먹인 천 조각을 둘둘 감은 무기입니다. 불" +#~ "을 붙이면, 말 그대로 경기가 불타오를 것입니다. (역자 주 : Louisville " +#~ "Slaghterer라는 이름은 유명한 야구방망이 메이커인 Louisville Slugger의 패러" +#~ "디입니다)" -#~ msgid "whatever" -#~ msgstr "됐어" +#~ msgid "" +#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " +#~ "brightly, and makes it much easier to see the baselines at night games " +#~ "(It also makes the umpire FAR more likely to call a ball instead of a " +#~ "strike)." +#~ msgstr "" +#~ "튼튼한 목제 야구방망이에 휘발유를 먹인 천 조각을 둘둘 감은 무기입니다. 환" +#~ "하게 불타오르고 있어, 야간 경기의 베이스 라인을 훨씬 더 보기 쉽게 만들어" +#~ "줄 것입니다. (그리고, 심판이 스트라이크보다 볼을 외칠 확률도 *엄청* 높아지" +#~ "겠죠)" -#~ msgid "You learn %s." -#~ msgstr "%s 를 배웠습니다." +#~ msgid "" +#~ "A stout collapsible spade commonly used by military forces and favored by " +#~ "hikers." +#~ msgstr "접을 수 있는 튼튼한 삽입니다. 주로 군인이나 등산가들이 사용합니다." -#~ msgid "Your bite wound feels swollen and painful." -#~ msgstr "물린 상처에 종기가 생기고 고통스럽습니다." +#~ msgid "A simple bulb horn, found on many bicycles. Honk honk." +#~ msgstr "동그랗고 평범한 자전거 경적입니다. 빵빵." -#~ msgid "Your bite wound really hurts." -#~ msgstr "물린 상처가 정말 아픕니다." +#~ msgid "" +#~ "A shell filled with tiny steel darts. Extremely damaging, plus the spread " +#~ "makes it very accurate at short range. Slices through most forms of armor " +#~ "with ease." +#~ msgstr "" +#~ "작은 강철 침을 가득 채운 플레쉐트 탄환. 매우 위력적이며 넓게 퍼지기 때문" +#~ "에 근거리 명중률이 높습니다. 대부분의 갑옷을 무용지물로 만들 수 있습니다." -#~ msgid "Pus Filled Wound" -#~ msgstr "고름이 찬 상처" +#~ msgid "" +#~ "A sealed glass jar containing a sliced fruit. Activate to open and enjoy." +#~ msgstr "" +#~ "과일 조각을 밀봉해둔 유리병입니다. 뚜껑을 열면, 즐거움이 시작됩니다." -#~ msgid "Painful Infected Wound" -#~ msgstr "고통스러운 감염된 상처" +#~ msgid "A portable electric food dehydrator, powered by standard batteries." +#~ msgstr "일반적인 배터리로 돌아가는, 휴대용 전기 음식 건조기입니다." -#~ msgid "Infected Wound" -#~ msgstr "감염된 상처" +#~ msgid "" +#~ "A portable charcoal smoker. Good for weekend barbecuing and preserving " +#~ "meat with smoke." +#~ msgstr "" +#~ "숯을 사용하는 휴대용 그릴입니다. 주말에 바베큐를 구워 먹거나, 고기를 훈제" +#~ "시킬 때 좋습니다." -#~ msgid "Painful Bite Wound" -#~ msgstr "고통스러운 물린 상처" +#~ msgid "" +#~ "A pipe whose ends have been bent and hammered flat to resemble a crowbar." +#~ msgstr "파이프를 망치질해서 쇠지레처럼 만든, 급조 쇠지레입니다." -#~ msgid "Bite Wound" -#~ msgstr "물린 상처" +#~ msgid "" +#~ "A huge, curved, two-handed sword from Japan. Surprisingly light for its " +#~ "size." +#~ msgstr "" +#~ "일본에서 온 거대하고, 구부러진, 양손검입니다. 그 크기에 비하면, 놀라울 정" +#~ "도로 가볍습니다." -#~ msgid "Bugs Under Skin" -#~ msgstr "피부 밑의 벌레" +#~ msgid "A handful of large, purple plums. It is good for your digestion." +#~ msgstr "손에 꽉 잡힐만큼 큰, 보라색 자두입니다. 소화가 잘 됩니다." -#~ msgid "Bleeding" -#~ msgstr "출혈된" +#~ msgid "" +#~ "A dry and tasteless bread product capable of remaining edible without " +#~ "spoilage for vast lengths of time." +#~ msgstr "오래오래 보존할 수 있는, 무미건조한 건빵입니다." -#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." -#~ msgstr "고열이 나고 메스껍습니다. 상처부위가 초록으로 변해갑니다." +#~ msgid "A car horn meant to be attached to a car's electrical system." +#~ msgstr "차량의 전력 시스템에 연결시켜 사용하는, 차량용 경적입니다." -#~ msgid "You start scratching yourself all over!" -#~ msgstr "온 몸을 긁기 시작합니다!" +#~ msgid "" +#~ "A brass-jacketed variant of the .44 Magnum round. This increases " +#~ "penetration slightly at the cost of reduced expansion." +#~ msgstr "" +#~ "황동을 채운 .44 매그넘 탄환. 폭발력이 약간 줄어든 대신, 관통력이 늘어났습" +#~ "니다." -#~ msgid "Sterilized the infection... this time." -#~ msgstr "감염 부위를 소독했습니다... 지금은." +#, fuzzy +#~ msgid "" +#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " +#~ "you from the floor, making it easier to sleep" +#~ msgstr "" +#~ "단단히 말아서 보관할 수 있는 발포지. 바닥의 냉기나 열기로부터 조금 떨어지" +#~ "게 해서, 조금 더 잠들기 쉽게 만들어줍니다." -#~ msgid "Cleaned the bite wound." -#~ msgstr "물린 상처를 닦았습니다." +#~ msgid "A bacon, lettuce and tomato sandwich on toasted bread." +#~ msgstr "" +#~ "베이컨(Bacon), 상추(Lettuce), 토마토(Tomato)가 들어간 구운 샌드위치입니다." -#~ msgid "Contracted the infection." -#~ msgstr "감염됨." +#~ msgid " misses!" +#~ msgstr "가(이) 빗맞혔습니다!" -#~ msgid "You disassemble the item into its components." -#~ msgstr "당신은 아이템을 여러 부품으로 분해했습니다." +#~ msgid " barely misses!" +#~ msgstr "가(이) 아슬아슬하게 빗맞혔습니다!" -#~ msgid "Press a direction for the furniture to move (. to cancel):" -#~ msgstr "가구를 움직일 방향을 눌러 주십시오 (. 으로 취소) :" +#~ msgid "l, 6, or right arrow" +#~ msgstr "l, 6, 혹은 오른쪽 화살표" -#~ msgid "You're not strong enough!" -#~ msgstr "힘이 약해서 할 수 없다!" +#~ msgid "j/k, 8/2, or arrows" +#~ msgstr "j/k, 8/2, 혹은 화살표" -#~ msgid "Contruct" -#~ msgstr "건설" +#~ msgid "h, 4, or left arrow" +#~ msgstr "h, 4, 혹은 왼쪽 화살표" -#~ msgid "Start a fire" -#~ msgstr "불을 피우다" +#~ msgid "(Press spacebar to toggle)" +#~ msgstr "(Spacebar를 눌러서 토글)" -#~ msgid "Too many itens" -#~ msgstr "물품이 너무 많음" +#~ msgid " select a statistic." +#~ msgstr " 수치를 선택함" -#~ msgid "You have a craving for crack." -#~ msgstr "넌 크랙(강력한 코카인의 일종인 마약) 을 필요로 한다." +#~ msgctxt "Main Menu" +#~ msgid "oad" +#~ msgstr "불러오기" -#~ msgid "You have a craving for cocaine." -#~ msgstr "코카인이 간절히 필요합니다." +#~ msgctxt "Main Menu" +#~ msgid "elp" +#~ msgstr "도움말" -#~ msgid "You have a speed craving." -#~ msgstr "당신은 각성제 금단증상을 겪고 있다." +#~ msgid "" +#~ "Your body has bionics worth millions payed by public taxes. The " +#~ "government employed you as a spy: you have night vision, an alarm and a " +#~ "hacking module powered by your own metabolism." +#~ msgstr "" +#~ "당신의 몸에는 세금으로 지불된 수백 만 가치의 바이오닉 - 몸의 신진 대사를 " +#~ "사용하는 야간 시야, 알람 시스템, 해킹 모듈 - 이 장착되어 있습니다. 정부는 " +#~ "당신을 스파이로 고용해왔습니다." -#~ msgid "You have a craving." -#~ msgstr "금단증상이 나타납니다." +#~ msgid "" +#~ "You were on your way to collect your check, when your pimp tried to kill " +#~ "you. You wish that it wasn't a common occurence. You start with the last " +#~ "of your stash and a strong crack addiction." +#~ msgstr "" +#~ "당신은 돈을 받아가려 했다가, 포주에게 살해당할 뻔 했습니다. 평소에는 이런 " +#~ "일이 일어나지 않았는데 말이죠. 마지막으로 챙겨둔 마약과, 심한 크랙 중독을 " +#~ "가지고 시작합니다." -#~ msgid "You have an opiate craving." -#~ msgstr "아편 금단증상이 나타납니다." +#~ msgid "" +#~ "Before the Apocalypse, you turned to Heroin to soothe your many problems. " +#~ "Now, your habit is your only comfort and your only drive." +#~ msgstr "" +#~ "대격변이 일어나기 전에는, 당신은 여러 문제를 잊기 위해 헤로인을 사용해왔습" +#~ "니다. 이제 헤로인은 당신의 유일한 삶의 목표이자 위안이 되었습니다." -#~ msgid "You have an alcohol craving." -#~ msgstr "알콜 금단증상이 나타납니다." +#~ msgid "Hardcore" +#~ msgstr "간당간당함" -#~ msgid "You have a caffeine craving." -#~ msgstr "카페인을 금단증상이 나타납니다." +#~ msgid "" +#~ "The shuffling corpse of a once-proud bear, its eyes ooze with black " +#~ "fluid, and its flesh is torn and scarred." +#~ msgstr "" +#~ "한때는 자랑스러운 곰이였지만, 이제는 움직이는 좀비 곰이 되었습니다. 눈에서" +#~ "는 검은 액체가 흐르고 있으며, 살덩이는 흉터가 난 채 찢어발겨졌습니다." -#~ msgid "You have a nicotine craving." -#~ msgstr "니코틴 금단증상이 나타납니다." +#~ msgid "" +#~ "The Northern short-tailed shrew, an insectvorous mammal that resembles a " +#~ "cross between a mouse and a mole. Notably for a mammal, it has a " +#~ "venomous bite, which can prove painful for humans." +#~ msgstr "" +#~ "북쪽 지방의 짧은 꼬리를 가진 쥐로, 쥐와 두더지의 중간 정도에 있는 포유류입" +#~ "니다. 이빨에 독성이 있기 때문에, 물리면 상당히 고통스럽습니다." #~ msgid "" -#~ "The mere thought of eating this stuff is enough to make your hair stand " -#~ "on end. Save it for when you're about to die of starvation." +#~ "There's no room in your inventory for the %s, and you can't unwield your " +#~ "%s." #~ msgstr "" -#~ "이런걸 먹는다는 생각만으로도 온몸의 털이 곤두서는 느낌이 듭니다. 정말 굶어" -#~ "죽기 직전에나 먹기 위해, 저장해두는 편이 좋을 것 같습니다." +#~ "%s을(를) 넣을만한 공간이 없으며, 또한 %s을(를) 손에 들 수도 없습니다." + +#~ msgid "Monster Spotted!" +#~ msgstr "적 발견!" + +#~ msgid "Normal" +#~ msgstr "단발" diff --git a/lang/po/pl.po b/lang/po/pl.po index 220adeb533a6e..16cedb1fa00b7 100644 --- a/lang/po/pl.po +++ b/lang/po/pl.po @@ -1,23 +1,23 @@ -# Polish translation for Cataclysm-DDA. -# Copyright (C) 2013 CleverRaven and Cataclysm-DDA Contributors -# This file is distributed under the same license as Cataclysm-DDA. -# Michał Walczak , 2013. +# Polish translation for cdda +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the cdda package. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: Cataclysm-DDA\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-10-09 10:37+0000\n" -"Last-Translator: Michał Walczak \n" -"Language-Team: Polish Translation Team\n" -"Language: PL\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 05:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Polish \n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:27+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:36+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -8541,9 +8541,8 @@ msgid "You fall on the ground for %d damage." msgstr "" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "Czujesz że przydałaby się ścieżka." +msgstr "" #: game.cpp #, c-format @@ -11313,6 +11312,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11836,6 +11839,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12716,6 +12723,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -12868,6 +12881,10 @@ msgstr "" msgid "You damage your %s!" msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "" @@ -12981,6 +12998,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -13001,6 +13022,10 @@ msgstr "" msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "" @@ -13148,6 +13173,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -14618,6 +14647,10 @@ msgstr "" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14669,6 +14702,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14686,6 +14725,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14694,6 +14737,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14702,6 +14754,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14718,6 +14775,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14743,10 +14804,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14760,6 +14831,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14812,6 +14888,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14824,6 +14910,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14844,10 +14935,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -14896,6 +14995,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -14905,10 +15008,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -15886,6 +15997,14 @@ msgstr "" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -16927,6 +17046,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17288,6 +17413,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17326,6 +17458,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17606,6 +17744,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18001,6 +18145,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -18013,6 +18171,12 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18525,6 +18689,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18682,6 +18860,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -18705,6 +18891,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -18926,6 +19118,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19069,7 +19267,7 @@ msgstr "" #: lang/json/json_items.py msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" @@ -19878,6 +20076,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21128,6 +21330,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21159,6 +21367,13 @@ msgstr "" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -21510,6 +21725,18 @@ msgstr "" msgid "PDA - Flashlight" msgstr "" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -21698,6 +21925,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -22595,6 +22828,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -22691,6 +22930,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23690,6 +23935,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24284,6 +24535,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -24527,6 +24792,12 @@ msgstr "" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -24646,6 +24917,10 @@ msgstr "" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "" @@ -25350,6 +25625,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "" @@ -25506,6 +25785,10 @@ msgstr "" msgid "compound bow" msgstr "" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "" @@ -25594,6 +25877,10 @@ msgstr "" msgid "cotton hat" msgstr "" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "" @@ -25638,6 +25925,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "" @@ -25870,6 +26161,10 @@ msgstr "" msgid "feather" msgstr "" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26142,6 +26437,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "" @@ -26242,6 +26541,10 @@ msgstr "" msgid "glowstick" msgstr "" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -26306,6 +26609,10 @@ msgstr "" msgid "hand press & die set" msgstr "" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -26446,6 +26753,10 @@ msgstr "" msgid "holster" msgstr "" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "" @@ -26702,6 +27013,10 @@ msgstr "" msgid "leather jacket" msgstr "" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "" @@ -26798,6 +27113,10 @@ msgstr "" msgid "log" msgstr "" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "" @@ -26858,6 +27177,10 @@ msgstr "" msgid "makeshift halberd" msgstr "" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "" @@ -26930,6 +27253,10 @@ msgstr "" msgid "medical gloves" msgstr "" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "" @@ -27106,6 +27433,10 @@ msgstr "" msgid "nail gun" msgstr "" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -27630,6 +27961,10 @@ msgstr "" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "" @@ -27926,6 +28261,10 @@ msgstr "" msgid "sharpened metal arrow" msgstr "" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "" @@ -28242,6 +28581,10 @@ msgstr "" msgid "steel plating" msgstr "" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -28475,9 +28818,8 @@ msgid "tea leaves" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "broń" +msgstr "" #: lang/json/json_items.py msgid "teargas canister" @@ -28491,6 +28833,10 @@ msgstr "" msgid "television" msgstr "" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "" @@ -29031,6 +29377,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29258,6 +29613,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -29266,6 +29629,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -29542,8 +29914,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -33095,6 +33468,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -33283,6 +33664,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -33648,6 +34033,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34101,6 +34492,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34216,6 +34614,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -45022,6 +45426,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45042,6 +45455,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45052,11 +45469,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45067,6 +45509,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45082,21 +45538,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45112,6 +45598,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45127,14 +45623,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45143,10 +45684,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45155,6 +45736,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45185,6 +45771,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45200,11 +45806,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45215,21 +45836,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45245,11 +45904,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45260,6 +45933,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47238,6 +47916,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -47524,6 +48212,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49156,6 +49849,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -53539,7 +54237,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -53593,7 +54291,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "" @@ -54071,10 +54769,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -54522,6 +55216,11 @@ msgstr "" msgid "Weapon: %s" msgstr "" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -54723,7 +55422,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55129,6 +55828,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" @@ -56419,29 +57123,26 @@ msgstr "" msgid "______NO NAME ENTERED!!!!_____" msgstr "" -#~ msgid "You have a nicotine craving." -#~ msgstr "Nie możesz wytrzymać bez papierosa." - -#~ msgid "You have a caffeine craving." -#~ msgstr "Potrzebujesz napić się kawy." - -#~ msgid "You have an alcohol craving." -#~ msgstr "Potrzebujesz się napić alkoholu." +#~ msgid "Too many itens" +#~ msgstr "Zbyt wiele przedmiotów" -#~ msgid "You have an opiate craving." -#~ msgstr "Nie możesz wytrzymać bez opiatów." +#~ msgid "You have a craving for crack." +#~ msgstr "Naprawdę potrzebujesz cracku." -#~ msgid "You have a craving." -#~ msgstr "Pragniesz czegoś." +#~ msgid "You have a craving for cocaine." +#~ msgstr "Potrzebujesz kokainy." #~ msgid "You have a speed craving." #~ msgstr "Potrzebujesz amfetaminy." -#~ msgid "You have a craving for cocaine." -#~ msgstr "Potrzebujesz kokainy." +#~ msgid "You have an opiate craving." +#~ msgstr "Nie możesz wytrzymać bez opiatów." -#~ msgid "You have a craving for crack." -#~ msgstr "Naprawdę potrzebujesz cracku." +#~ msgid "You have an alcohol craving." +#~ msgstr "Potrzebujesz się napić alkoholu." -#~ msgid "Too many itens" -#~ msgstr "Zbyt wiele przedmiotów" +#~ msgid "You have a caffeine craving." +#~ msgstr "Potrzebujesz napić się kawy." + +#~ msgid "You have a nicotine craving." +#~ msgstr "Nie możesz wytrzymać bez papierosa." diff --git a/lang/po/pt.po b/lang/po/pt.po index 713981542d25f..da8c93f912bcb 100644 --- a/lang/po/pt.po +++ b/lang/po/pt.po @@ -1,22 +1,22 @@ -# Portuguese translations for PACKAGE package. -# Copyright (C) 2013 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Administrator , 2013. +# Portuguese translation for cdda +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the cdda package. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: 0.7-git\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-08-11 13:49+0000\n" -"Last-Translator: YOUR NAME \n" -"Language-Team: Portuguese\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 05:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:35+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:39+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -11291,6 +11291,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11814,6 +11818,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12694,6 +12702,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -12846,6 +12860,10 @@ msgstr "" msgid "You damage your %s!" msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "" @@ -12959,6 +12977,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -12979,6 +13001,10 @@ msgstr "" msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "" @@ -13126,6 +13152,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -14596,6 +14626,10 @@ msgstr "" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14647,6 +14681,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14664,6 +14704,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14672,6 +14716,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14680,6 +14733,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14696,6 +14754,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14721,10 +14783,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14738,6 +14810,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14790,6 +14867,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14802,6 +14889,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14822,10 +14914,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -14874,6 +14974,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -14883,10 +14987,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -15864,6 +15976,14 @@ msgstr "" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -16905,6 +17025,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17266,6 +17392,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17304,6 +17437,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17584,6 +17723,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -17979,6 +18124,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -17991,6 +18150,12 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18503,6 +18668,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18660,6 +18839,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -18683,6 +18870,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -18904,6 +19097,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19047,7 +19246,7 @@ msgstr "" #: lang/json/json_items.py msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" @@ -19856,6 +20055,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21106,6 +21309,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21137,6 +21346,13 @@ msgstr "" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -21488,6 +21704,18 @@ msgstr "" msgid "PDA - Flashlight" msgstr "" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -21676,6 +21904,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -22573,6 +22807,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -22669,6 +22909,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23668,6 +23914,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24262,6 +24514,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -24505,6 +24771,12 @@ msgstr "" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -24624,6 +24896,10 @@ msgstr "" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "" @@ -25328,6 +25604,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "" @@ -25484,6 +25764,10 @@ msgstr "" msgid "compound bow" msgstr "" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "" @@ -25572,6 +25856,10 @@ msgstr "" msgid "cotton hat" msgstr "" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "" @@ -25616,6 +25904,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "" @@ -25848,6 +26140,10 @@ msgstr "" msgid "feather" msgstr "" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26120,6 +26416,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "" @@ -26220,6 +26520,10 @@ msgstr "" msgid "glowstick" msgstr "" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -26284,6 +26588,10 @@ msgstr "" msgid "hand press & die set" msgstr "" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -26424,6 +26732,10 @@ msgstr "" msgid "holster" msgstr "" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "" @@ -26680,6 +26992,10 @@ msgstr "" msgid "leather jacket" msgstr "" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "" @@ -26776,6 +27092,10 @@ msgstr "" msgid "log" msgstr "" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "" @@ -26836,6 +27156,10 @@ msgstr "" msgid "makeshift halberd" msgstr "" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "" @@ -26908,6 +27232,10 @@ msgstr "" msgid "medical gloves" msgstr "" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "" @@ -27084,6 +27412,10 @@ msgstr "" msgid "nail gun" msgstr "" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -27608,6 +27940,10 @@ msgstr "" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "" @@ -27904,6 +28240,10 @@ msgstr "" msgid "sharpened metal arrow" msgstr "" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "" @@ -28220,6 +28560,10 @@ msgstr "" msgid "steel plating" msgstr "" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -28468,6 +28812,10 @@ msgstr "" msgid "television" msgstr "" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "" @@ -29008,6 +29356,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29235,6 +29592,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -29243,6 +29608,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -29519,8 +29893,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -33072,6 +33447,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -33260,6 +33643,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -33625,6 +34012,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34078,6 +34471,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34193,6 +34593,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -44999,6 +45405,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45019,6 +45434,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45029,11 +45448,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45044,6 +45488,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45059,21 +45517,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45089,6 +45577,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45104,14 +45602,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45120,10 +45663,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45132,6 +45715,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45162,6 +45750,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45177,11 +45785,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45192,21 +45815,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45222,11 +45883,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45237,6 +45912,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47215,6 +47895,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -47501,6 +48191,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49133,6 +49828,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -53516,7 +54216,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -53570,7 +54270,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "" @@ -54048,10 +54748,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -54499,6 +55195,11 @@ msgstr "" msgid "Weapon: %s" msgstr "" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -54700,7 +55401,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55106,6 +55807,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" diff --git a/lang/po/ru.po b/lang/po/ru.po index e5c00bb1d6e26..205875cac00db 100644 --- a/lang/po/ru.po +++ b/lang/po/ru.po @@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-01 07:43+0000\n" -"Last-Translator: Kevin Granade \n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 05:00+0000\n" +"Last-Translator: iKlim \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:28+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:31+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -61,7 +61,7 @@ msgstr "Подняться по лестнице" #: action.cpp msgid "Burst-Fire Wielded Item" -msgstr "Стрелять очередью из оружия в руках" +msgstr "Стрелять очередью" #: action.cpp msgid "Butcher" @@ -113,7 +113,7 @@ msgstr "Спуститься по лестнице" #: action.cpp msgid "Disassemble items" -msgstr "Разобрать предмет" +msgstr "Разобрать предметы" #: action.cpp msgid "Drop Item" @@ -133,7 +133,7 @@ msgstr "Осмотреть соседнюю клетку" #: action.cpp msgid "Fire Wielded Item" -msgstr "Стрелять из оружия в руках" +msgstr "Стрелять" #: action.cpp msgid "Grab a nearby vehicle" @@ -249,7 +249,7 @@ msgstr "Быстрое сохранение" #: action.cpp msgid "Re-layer armour/clothing" -msgstr "Изменить очерёдность брони и одежды" +msgstr "Изменить очерёдность брони/одежды" #: action.cpp msgid "Read" @@ -293,19 +293,19 @@ msgstr "Метнуть предмет" #: action.cpp msgid "Toggle Auto-Safemode" -msgstr "Переключить автовключение безопасного режима" +msgstr "Вкл/Выкл авто-безопасный режим" #: action.cpp msgid "Toggle Debug Messages" -msgstr "Переключить отладочные сообщения" +msgstr "Вкл/Выкл собщения отладки" #: action.cpp msgid "Toggle Safemode" -msgstr "Переключить безопасный режим" +msgstr "Вкл/Выкл безопасный режим" #: action.cpp msgid "Toggle attack mode of Wielded Item" -msgstr "Сменить режим стрельбы оружия в руках" +msgstr "Сменить режим стрельбы" #: action.cpp msgid "Try" @@ -313,7 +313,7 @@ msgstr "Попробуйте" #: action.cpp msgid "Unload or Empty Wielded Item" -msgstr "Разрядить или опустошить предмет в руках" +msgstr "Разрядить/опустошить предмет в руках" #: action.cpp msgid "View Factions" @@ -325,7 +325,7 @@ msgstr "Справка" #: action.cpp msgid "View Kills" -msgstr "Список совершенных убийств" +msgstr "Список убийств" #: action.cpp msgid "View Map" @@ -460,11 +460,11 @@ msgstr "Было бы неплохо выпить." #: addiction.cpp msgid "You feel anxious. You need your painkillers!" -msgstr "Вы чувствуете себя тревожно. Вам нужно болеутоляющее!" +msgstr "У вас чувство тревоги. Вам нужно болеутоляющее!" #: addiction.cpp msgid "You feel depressed. Speed would help." -msgstr "Вы чувствуете себя подавленным. Спиды бы помогли." +msgstr "Вы чувствуете себя подавленым. Стимулянты могут помочь." #: addiction.cpp msgid "You feel like you need a bump." @@ -480,11 +480,11 @@ msgstr "Вам надо покурить." #: addiction.cpp msgid "You stop suddenly, feeling bewildered." -msgstr "Ощутив замешательство, вы внезапно остановились." +msgstr "Вы резко останавливаетесь, ощутив замешательство." #: addiction.cpp player.cpp msgid "You throw up heavily!" -msgstr "Вас тяжело вырвало!" +msgstr "У вас сильная рвота!" #: addiction.cpp msgid "You want some caffeine." @@ -545,7 +545,7 @@ msgstr "снотворное" #. ~ advanced inventory; "weight", "volume"; 14 letters, right-aligned #: advanced_inv.cpp msgid " weight vol" -msgstr " вес объ" +msgstr " вес объём" #: advanced_inv.cpp msgid " (FULL)" @@ -558,7 +558,7 @@ msgstr "" #: advanced_inv.cpp msgid "< [?] show help >" -msgstr "< [?] справка >" +msgstr "< [?] справка >" #: advanced_inv.cpp msgid "< [?] show log >" @@ -567,7 +567,7 @@ msgstr "< [?] пок. лог >" #: advanced_inv.cpp #, c-format msgid "< [s]ort: %s >" -msgstr "< [s]: %s >" +msgstr "< [s] сортировка: %s >" #: advanced_inv.cpp msgid "All 9 squares" @@ -685,7 +685,7 @@ msgstr "Это слишком тяжело!" #: advanced_inv.cpp msgid "Too many items." -msgstr "" +msgstr "Слишком много предметов." #: advanced_inv.cpp msgid "Unsorted (recently added first)" @@ -739,11 +739,11 @@ msgstr "книги" #: advanced_inv.cpp msgid "category" -msgstr "категории" +msgstr "категория" #: advanced_inv.cpp msgid "charges" -msgstr "зарядам" +msgstr "заряды" #: advanced_inv.cpp msgid "clothing" @@ -773,11 +773,11 @@ msgstr "модификации" #: advanced_inv.cpp msgid "name" -msgstr "названию" +msgstr "название" #: advanced_inv.cpp msgid "none" -msgstr "не задана" +msgstr "нет" #: advanced_inv.cpp msgid "other" @@ -798,7 +798,7 @@ msgstr "инструменты" #: advanced_inv.cpp msgid "volume" -msgstr "объёму" +msgstr "по объёму" #: advanced_inv.cpp msgid "weapons" @@ -806,7 +806,7 @@ msgstr "оружие" #: advanced_inv.cpp msgid "weight" -msgstr "весу" +msgstr "по весу" #: advanced_inv.h msgid "Initializing..." @@ -1323,7 +1323,7 @@ msgstr "полый, прозрачный куб" #: artifact.cpp msgid "humming" -msgstr "жужжащий" +msgstr "гудящий" #: artifact.cpp msgid "hums very quietly" @@ -1339,7 +1339,7 @@ msgstr "покрыт необычными гравюрами" #: artifact.cpp msgid "is icy cold to the touch" -msgstr "ледянной на ощупь" +msgstr "ледяной на ощупь" #: artifact.cpp msgid "is warm to the touch" @@ -1473,11 +1473,11 @@ msgstr "набор бус" #: artifact.cpp msgid "tapered rod" -msgstr "клиновидный стержень" +msgstr "конический стержень" #: artifact.cpp msgid "teardrop" -msgstr "капля" +msgstr "слеза" #: artifact.cpp msgid "teardrop-shaped stone" @@ -1541,7 +1541,7 @@ msgstr "шепчущий" #: artifact.cpp msgid "winding, flexible rod" -msgstr "вьющийся, гибкий стержень" +msgstr "витой гибкий стержень" #: artifact.cpp msgid "wriggling" @@ -1619,7 +1619,7 @@ msgstr "Убрать" #: auto_pickup.cpp msgid "est" -msgstr "Тест" +msgstr "<Т>ест" #: auto_pickup.cpp msgid "-Switch Page" @@ -1682,7 +1682,7 @@ msgstr "%s выключено." #: bionics.cpp msgid "Activate your bio lockpick where?" -msgstr "" +msgstr "Где использовать био отмычку?" #: bionics.cpp msgid "Activating. Press '!' to examine your implants." @@ -1718,7 +1718,7 @@ msgstr "БИОНИКА -" #: bionics.cpp msgid "Create an EMP where?" -msgstr "" +msgstr "Где создать электромагнитное поле?" #: bionics.cpp msgid "Drink directly from the condensor?" @@ -1753,7 +1753,7 @@ msgstr "Сильное обезболивающие" #: bionics.cpp #, c-format msgid "Increased storage capacity by %i" -msgstr "Ёмкость аккумулятора увеличена на %i." +msgstr "Объем инвентаря увеличен на %i" #: bionics.cpp msgid "Insect Parasite" @@ -1788,7 +1788,7 @@ msgstr "Ужасно больно!" #: bionics.cpp #, c-format msgid "Lost %d units of power capacity." -msgstr "Ёмкость аккумулятора уменьшена на %d." +msgstr "Энергетическая ёмкость уменьшена на %d." #: bionics.cpp msgid "Magic Mushroom" @@ -1841,7 +1841,7 @@ msgstr "Часть установленных модулей потеряна!" #: bionics.cpp msgid "Start a fire where?" -msgstr "" +msgstr "Где зажечь огонь?" #: bionics.cpp #, c-format @@ -1904,7 +1904,7 @@ msgstr "Вы не можете разжечь огонь здесь" #: bionics.cpp #, c-format msgid "You can't unlock that %s." -msgstr "Вы не можете открыть %s" +msgstr "Вы не можете вскрыть %s." #: bionics.cpp #, c-format @@ -1941,7 +1941,7 @@ msgstr "Вы выпускаете мощную ударную волну!" #: bionics.cpp msgid "You unlock the door." -msgstr "Вы открываете дверь" +msgstr "Вы вскрываете дверь." #: bionics.cpp msgid "You withdraw your claws." @@ -2102,8 +2102,8 @@ msgstr[2] "%d дней" #, c-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "%d часа" -msgstr[1] "%d часа" +msgstr[0] "%d час" +msgstr[1] "%d часов" msgstr[2] "%d часов" #: calendar.cpp @@ -3163,7 +3163,7 @@ msgstr "Очистить разбитое окно" #: construction.cpp msgid "Contruct where?" -msgstr "" +msgstr "Строить где?" #: construction.cpp msgid "Deconstruct Furniture" @@ -3298,7 +3298,7 @@ msgstr "Сложность: %d" #: crafting.cpp msgid "Disassemble item:" -msgstr "Разобрать прдмет:" +msgstr "Разобрать предмет:" #: crafting.cpp #, c-format @@ -3346,7 +3346,7 @@ msgstr "Требует навыки: %s" #: crafting.cpp #, c-format msgid "Requires %d tools with %s of %d or more." -msgstr "" +msgstr "Требуется %d инструментов с значением %s %d или больше." #: crafting.cpp msgid "Search:" @@ -3715,7 +3715,7 @@ msgstr "? - меню помощи." #: defense.cpp msgid "Press S to start, ! to save as a template" -msgstr "Нажмите S чтобы начать, ! чтобы сохранить как шаблон." +msgstr "Нажмите \"S\" чтобы начать, \"!\" чтобы сохранить как шаблон." #: defense.cpp msgid "Really buy nothing?" @@ -3802,11 +3802,11 @@ msgstr "Кол-во волн между караванами." #: defense.cpp msgid "The robots have decided that humans are the enemy!" -msgstr "Роботы решили, что люди - враги!" +msgstr "Роботы восстали против людей!" #: defense.cpp msgid "The time, in minutes, between waves." -msgstr "Время, в минутах, между волнами." +msgstr "Время между волнами, в минутах." #: defense.cpp msgid "Time b/w Waves:" @@ -3946,7 +3946,7 @@ msgstr "Скорость атаки +%d" #: disease.cpp msgid "Bad Bleeding - " -msgstr "" +msgstr "Сред. кровотечение - " #: disease.cpp msgid "Badly Infected - " @@ -3962,7 +3962,7 @@ msgstr "Укус - " #: disease.cpp msgid "Bleeding - " -msgstr "" +msgstr "Кровотечение - " #: disease.cpp msgid "Blind" @@ -3998,7 +3998,7 @@ msgstr "Заблёваный" #: disease.cpp msgid "Bugs in skin - " -msgstr "" +msgstr "Жуки в коже - " #: disease.cpp msgid "Caught a cold." @@ -4086,7 +4086,7 @@ msgstr "Простуда" #: disease.cpp msgid "Completely Paralyzed" -msgstr "" +msgstr "Полностью парализован" #: disease.cpp msgid "Contracted a fungal infection." @@ -4124,7 +4124,7 @@ msgstr "Ловкость +1; Интеллект +1; Восприятие +1" #: disease.cpp #, c-format msgid "Dexterity - %d" -msgstr "" +msgstr "Ловкость -%d" #: disease.cpp #, c-format @@ -4222,7 +4222,7 @@ msgstr "Замёрзший торс!!" #: disease.cpp msgid "Frostbite" -msgstr "" +msgstr "Обморожение" #: disease.cpp msgid "Frostbite - face" @@ -4278,7 +4278,7 @@ msgstr "Тяжелая астма" #: disease.cpp msgid "Heavy Bleeding - " -msgstr "" +msgstr "Тяж. кровотечение - " #: disease.cpp msgid "High" @@ -4371,7 +4371,7 @@ msgstr "Это мучительно." #: disease.cpp msgid "Itchy skin - " -msgstr "" +msgstr "Кожный зуд - " #: disease.cpp msgid "Left Arm" @@ -4407,7 +4407,7 @@ msgstr "Болезненный укус - " #: disease.cpp msgid "Partially Paralyzed" -msgstr "" +msgstr "Частично парализован" #: disease.cpp #, c-format @@ -4534,11 +4534,11 @@ msgstr "Покрыт слизью" #: disease.cpp msgid "Slowed" -msgstr "" +msgstr "Замедленный" #: disease.cpp msgid "Sluggish" -msgstr "" +msgstr "Вялый" #: disease.cpp faction.cpp msgid "Smoke" @@ -4562,6 +4562,8 @@ msgid "" "Speed %d%%\n" "You can feel the tiny spores sinking directly into your flesh." msgstr "" +"Скорость %d%%\n" +"Вы чувствуете, что маленькие споры проникают в вашу плоть." #: disease.cpp msgid "" @@ -4611,7 +4613,7 @@ msgstr "" #: disease.cpp msgid "Spore covered" -msgstr "" +msgstr "Покрыт спорами" #: disease.cpp msgid "Spore covered - " @@ -4794,11 +4796,11 @@ msgstr "Пьяный вдрызг" #: disease.cpp msgid "Webbed" -msgstr "Перепончатый" +msgstr "Опутанный" #: disease.cpp msgid "Writhing skin - " -msgstr "" +msgstr "Шевелится кожа - " #: disease.cpp msgid "You are losing blood." @@ -4996,6 +4998,8 @@ msgid "" "You stop to scratch yourself frequently; high intelligence helps you resist\n" "this urge.\n" msgstr "" +"Вы перестаете часто чесаться, высокий интеллект позволяет справиться с этим " +"желанием.\n" #: disease.cpp msgid "You succumb to the infection." @@ -5015,7 +5019,7 @@ msgstr "Вы пытаетесь поспать, но не можете..." #: disease.cpp msgid "You turn off your alarm-clock." -msgstr "" +msgstr "Вы выключили будильник." #: disease.cpp #, c-format @@ -5482,7 +5486,7 @@ msgstr "" #: disease.cpp msgid "Your skin feels extremely itchy!" -msgstr "" +msgstr "Ваша кожа очень чешется!" #: disease.cpp msgid "Your thoughts are unclear." @@ -7121,7 +7125,7 @@ msgstr "сеть" #. ~ appended to "Close where?" "Pry where?" etc. #: game.cpp msgid " (Direction button)" -msgstr "" +msgstr " (укажите направление)" #: game.cpp msgid " (Y)es, (N)o, (I)gnore further distractions and finish." @@ -7516,7 +7520,7 @@ msgstr "Проверить состояние игры..." #: game.cpp msgid "Choose corpse to butcher" -msgstr "" +msgstr "Выберите труп для разделки" #: game.cpp msgid "Choose vehicle to spawn" @@ -7524,11 +7528,11 @@ msgstr "Выберете машину для создания" #: game.cpp msgid "Close where?" -msgstr "" +msgstr "Что закрыть?" #: game.cpp msgid "Commit suicide?" -msgstr "Совершить самоубийство" +msgstr "Совершить самоубийство?" #: game.cpp msgid "Confirm:" @@ -7544,7 +7548,7 @@ msgstr "Контейнер для " #: game.cpp msgid "Control vehicle where?" -msgstr "" +msgstr "Управлять какой машиной?" #: game.cpp msgid "Crack!" @@ -7605,7 +7609,7 @@ msgstr "Погрузиться в воду?" #: game.cpp msgid "Drop where?" -msgstr "" +msgstr "Куда выбросить?" #: game.cpp #, c-format @@ -7634,11 +7638,11 @@ msgstr "" #: game.cpp msgid "Examine vehicle" -msgstr "" +msgstr "Изучить автомобиль" #: game.cpp msgid "Examine where?" -msgstr "" +msgstr "Что изучить?" #: game.cpp msgid "Example: -pipe,chunk,steel" @@ -7663,7 +7667,7 @@ msgstr "ФРАКЦИИ:" #: game.cpp msgid "FAILED MISSIONS" -msgstr "" +msgstr "ПРОВАЛЕННЫЕ ЗАДАНИЯ" #: game.cpp newcharacter.cpp msgid "Female" @@ -7671,7 +7675,7 @@ msgstr "Женский" #: game.cpp msgid "Fill a container with water" -msgstr "" +msgstr "Наполнить контейнер водой" #: game.cpp msgid "Filter:" @@ -7705,7 +7709,7 @@ msgstr "Взять предметы из %s?" #: game.cpp msgid "Grab where?" -msgstr "" +msgstr "Что схватить?" #: game.cpp msgid "HEAD" @@ -7717,7 +7721,7 @@ msgstr "На полпути вниз, вы обнаруживаете, что п #: game.cpp msgid "Have a drink" -msgstr "" +msgstr "Выпить воды" #: game.cpp #, c-format @@ -7734,7 +7738,7 @@ msgstr "Высокий приоритет:" #: game.cpp msgid "Hostiles are nearby! Start Butchering anyway?" -msgstr "" +msgstr "Враг поблизости! Всё равно начать разделку?" #: game.cpp msgid "Ignoring enemy!" @@ -7766,11 +7770,11 @@ msgstr "Слишком опасно создавать такой длинный #: game.cpp msgid "Items" -msgstr "" +msgstr "Предметы" #: game.cpp msgid "KILL COUNT:" -msgstr "" +msgstr "ВСЕГО УБИТО" #: game.cpp msgid "Kill NPCs" @@ -7823,12 +7827,11 @@ msgstr "Редактор карты" #: game.cpp msgid "Maybe you should find something new to read..." -msgstr "" +msgstr "Может быть, вам стоит найти что-то новое, чтобы почитать..." #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "Вашему лицу угрожающе холодно." +msgstr "" #: game.cpp msgid "Monster spotted!" @@ -7858,7 +7861,7 @@ msgstr "Замечен монстр--включен безопасный реж #: game.cpp msgid "Monsters" -msgstr "" +msgstr "Монстры" #: game.cpp #, c-format @@ -7907,7 +7910,7 @@ msgstr "Здесь нет двери." #: game.cpp msgid "No furniture at grabbed point." -msgstr "" +msgstr "Нет ничего в клетке захвата." #: game.cpp msgid "No vehicle at grabbed point." @@ -7951,7 +7954,7 @@ msgstr "" #: game.cpp msgid "Open where?" -msgstr "" +msgstr "Что открыть?" #: game.cpp #, c-format @@ -7972,7 +7975,7 @@ msgstr "ЭНЕРГ" #: game.cpp msgid "Peek where?" -msgstr "" +msgstr "Куда выглянуть?" #: game.cpp msgid "Please wait as we build your world" @@ -8006,11 +8009,11 @@ msgstr "П НОГ" #: game.cpp msgid "REALLY commit suicide?" -msgstr "" +msgstr "Точно хотите совершить самоубийство?" #: game.cpp msgid "RV kitchen:" -msgstr "" +msgstr "Авто-кухня" #: game.cpp #, c-format @@ -8047,7 +8050,7 @@ msgstr "Переназначить предмет:" #: game.cpp msgid "Refill vehicle where?" -msgstr "" +msgstr "Что заправить?" #: game.cpp msgid "Refill vehicle?" @@ -8056,7 +8059,7 @@ msgstr "Заправить машину?" #: game.cpp #, c-format msgid "Respect: %s" -msgstr "Уважение: %s" +msgstr "Уважают: %s" #: game.cpp msgid "Reveal map" @@ -8133,7 +8136,7 @@ msgstr "Шрапнель попала в вашу %s" #: game.cpp msgid "Smash where?" -msgstr "" +msgstr "Что разбить?" #: game.cpp msgid "South:" @@ -8314,7 +8317,7 @@ msgstr "Ворота амбара открыты!" #: game.cpp msgid "The battery is dead." -msgstr "" +msgstr "Батарея на нуле." #: game.cpp msgid "The battery is fully charged." @@ -8456,7 +8459,7 @@ msgstr "Там ничего нет!" #: game.cpp msgid "There's nothing to grab there!" -msgstr "" +msgstr "Здесь нечего схватить." #: game.cpp msgid "There's some buffoon in the way!" @@ -8518,15 +8521,15 @@ msgstr "Использовать предмет:" #: game.cpp msgid "Use the hotplate" -msgstr "" +msgstr "Использовать плитку" #: game.cpp msgid "Use the water purifier?" -msgstr "" +msgstr "Использовать водоочиститель?" #: game.cpp msgid "Use the welding rig?" -msgstr "" +msgstr "Использовать сварочный аппарат?" #: game.cpp #, c-format @@ -8851,7 +8854,7 @@ msgstr "Вы не знаете никаких фракций. Нажмите п #: game.cpp msgid "You dont see any items or monsters around you!" -msgstr "" +msgstr "Вы не видите вокруг себя ни предметов, ни монстров!" #: game.cpp #, c-format @@ -8914,9 +8917,8 @@ msgid "You fall on the ground for %d damage." msgstr "Вы ударились об землю, получив %d очков повреждений." #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "Вы не спали 2 дня!" +msgstr "" #: game.cpp #, c-format @@ -9025,7 +9027,7 @@ msgstr "Вы узнали немного про %s! (%d%%%%)" #: game.cpp #, c-format msgid "You let go of the %s" -msgstr "" +msgstr "Вы отпускаете %s" #: game.cpp #, c-format @@ -9349,7 +9351,7 @@ msgstr "%s должна иметь 100 зарядов для выстрела!" #: game.cpp #, c-format msgid "Your %s needs 50 charges to fire!" -msgstr "" +msgstr "Для огня требуется 50 зарядов в %s!" #: game.cpp melee.cpp #, c-format @@ -9399,7 +9401,7 @@ msgstr "Ваш навык не улучшится, но %s содержит но #: game.cpp msgid "Your stomach feels so empty..." -msgstr "" +msgstr "Пустой желудок напоминает о себе..." #: game.cpp msgid "[,] All" @@ -10125,6 +10127,28 @@ msgid "" "skill\n" "are all required for certain items." msgstr "" +"Многие важные предметы очень тяжело найти, или их цена слишком высока. \n" +"К счастью, вы можете сами сделать многие вещи, при наличии соответствующих \n" +"инструментов, материалов и знаний.\n" +"\n" +"Некоторые рецепты требуют нескольких инструментов, которые\n" +"не расходуются во время изготовления. Все рецепты требуют один или \n" +"несколько компонентов, которые исчезнут после завершения работы.\n" +"\n" +"%s\n" +"Есть пять категорий: Оружие, Пища, Электроника, Броня и Прочее. Некоторые\n" +"рецепты не требуют навыков, хотя для изготовления большинства потребуются \n" +"следующие навыки:\n" +"\n" +"-> Механика используется для изготовления оружия, ловушек и инструментов.\n" +"-> Кулинарии на низких уровнях используется для приготовления пищи, на \n" +"высоких приходит понимание химии, которое используется для изготовления \n" +"химического оружия и полезных снадобий.\n" +"-> Электроника позволяет вам делать инструменты для решения сложных задач.\n" +"-> Навык шитья используется для создания одежды, а позднее для брони.\n" +"В дополнение к основным навыкам, могут понадобиться другие навыки для\n" +"изготовления определенных предметов. К примеру, для изготовления некоторых\n" +"предметов, могут понадобиться навыки Первой помощи и Стрельбы." #: help.cpp msgid "" @@ -10807,6 +10831,27 @@ msgid "" "you\n" "may have a chance to avoid it, depending on your Dodge skill." msgstr "" +"Во время сна на опасной территории, было бы разумно установить ловушки, для\n" +"предотвращения нежелательных встреч. Некоторые ловушки могут быть найдены,\n" +"к примеру, пузырчатая пленка (которая издает громкий звук если наступить, " +"что\n" +"должно вас разбудить) или медвежий капкан (который издаст звук и причинит\n" +"урон). Прочие ловушки должны быть сделаны. Это потребует навык Ловушек,\n" +"и возможно Механики.\n" +"\n" +"Для установки ловушки просто используйте её%s в направлении соседней\n" +"клетки. Некоторые ловушки требую для установки инструменты, например\n" +"лопату. \n" +"\n" +"Для обезвреживания ловушки необходимо%s изучить место, в котором она\n" +"находится. Вероятность успеха зависит от навыка Ловушки и Ловкости. В\n" +"случае успеха ловушка будет обезврежена и на ее месте появятся все\n" +"компоненты ловушки. Однако, в случае неудачи, есть вероятность\n" +"срабатывания ловушки, с неприятными последствиями.\n" +"\n" +"Многие ловушки частично или полностью скрыты. Способность их обнаружения\n" +"полностью зависит от вашего параметра Восприятия. При срабатывании ловушки\n" +"есть вероятность, зависящая от навыка Уклонения, что вы избежите ее действия." #: help.cpp msgid "" @@ -11499,7 +11544,7 @@ msgstr "обожжёный " #: item.cpp msgid "bruised " -msgstr " побитый " +msgstr "побитый " #: item.cpp msgid "damaged " @@ -11652,7 +11697,7 @@ msgstr "Разброс: " #: item.cpp msgid "Encumberment: " -msgstr "Сковывание: " +msgstr "Скованность: " #: item.cpp msgid "Enjoyability: " @@ -11881,7 +11926,7 @@ msgstr "Эта одежда подходит вам идеально." #: item.cpp msgid "This piece of clothing has a hood to keep your head warm." -msgstr "" +msgstr "У этой одежды есть капюшон, согревающий голову." #: item.cpp msgid "This piece of clothing has pockets to warm your hands." @@ -11889,7 +11934,7 @@ msgstr "Эта одежда имеет карманы для согрева ру #: item.cpp msgid "This piece of clothing is designed to keep you dry in the rain." -msgstr "" +msgstr "Эта одежда не даст вам промокнуть под дождем." #: item.cpp msgid "This tool has double the normal maximum charges." @@ -11961,7 +12006,7 @@ msgstr ".454" #: itypedef.cpp lang/json/json_items.py msgid ".50 BMG" -msgstr "" +msgstr ".50 BMG" #: itypedef.cpp msgid ".500" @@ -12165,7 +12210,7 @@ msgstr "колёсики" #: itypedef.cpp lang/json/json_items.py msgid "charcoal" -msgstr "уголь" +msgstr "древесный уголь" #: itypedef.cpp lang/json/json_items.py msgid "clean water" @@ -12179,6 +12224,10 @@ msgstr "компоненты" msgid "corpse" msgstr "труп" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "рекламная листовка" @@ -12252,9 +12301,8 @@ msgid "shot" msgstr "12 калибр" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "приёмник" +msgstr "сигнальная ракета" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -12582,7 +12630,7 @@ msgstr "Разрезать ткань/пластик/кевлар/дерево" #: iuse.cpp msgid "Cut up metal where?" -msgstr "" +msgstr "Пилить металл" #: iuse.cpp msgid "Cut up what?" @@ -12648,7 +12696,7 @@ msgstr "Взять свою кровь?" #: iuse.cpp msgid "Drill where?" -msgstr "" +msgstr "Где сверлить?" #. ~ (Flammenschwert) "Start a fire." #: iuse.cpp @@ -12657,7 +12705,7 @@ msgstr "" #: iuse.cpp msgid "Electricity crackles in the air." -msgstr "" +msgstr "Электрические разряды потрескивают в воздухе." #: iuse.cpp msgid "Endless Day" @@ -12669,7 +12717,7 @@ msgstr "Глубокая ночь" #: iuse.cpp msgid "Fill what?" -msgstr "" +msgstr "Что заполнить?" #: iuse.cpp msgid "Fill which vehicle?" @@ -12707,6 +12755,10 @@ msgstr "Появились гигантские мухи!" msgid "Giant wasps appear!" msgstr "Появились гигантские осы!" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "Молоток может удалить доски только из окон, дверей и заборов." @@ -12734,7 +12786,7 @@ msgstr "Я в порядке." #: iuse.cpp msgid "Insufficient power" -msgstr "" +msgstr "Недостаточно энергии." #: iuse.cpp msgid "Invalid Direction" @@ -12755,7 +12807,7 @@ msgstr "КХ-КХ-КХА-ХРКК-КХ!" #: iuse.cpp msgid "Ka-BOOM!" -msgstr "" +msgstr "Ба-бах!" #: iuse.cpp msgid "Keep Fighting!" @@ -12775,7 +12827,7 @@ msgstr "Зажечь что-нибудь" #: iuse.cpp msgid "Light where?" -msgstr "" +msgstr "Что поджечь?" #: iuse.cpp msgid "Living black goo emerges from the canister!" @@ -12783,7 +12835,7 @@ msgstr "Живая черная слизь вытекает из канистр #: iuse.cpp msgid "Louisville Slaughterer (lit)" -msgstr "" +msgstr "Луисвильский погромщик (горит)" #: iuse.cpp msgid "Material of this item is not applicable for cutting up." @@ -12868,19 +12920,19 @@ msgstr "Выполнить крестьянскую работу?" #: iuse.cpp msgid "Pitch the tent where?" -msgstr "" +msgstr "Куда поставить палатку?" #: iuse.cpp msgid "Place the turret where?" -msgstr "" +msgstr "Куда поставить турель?" #: iuse.cpp msgid "Place trap where?" -msgstr "" +msgstr "Куда поставить ловушку?" #: iuse.cpp msgid "Pry where?" -msgstr "" +msgstr "Что взломать?" #: iuse.cpp msgid "Purify what?" @@ -12891,9 +12943,8 @@ msgid "Put a knife in the boot" msgstr "Спрятать нож в голенище" #: iuse.cpp -#, fuzzy msgid "Put the cat food where?" -msgstr "Поставить собачью еду." +msgstr "" #: iuse.cpp msgid "Put the dog food where?" @@ -12901,7 +12952,7 @@ msgstr "" #: iuse.cpp msgid "Put up the shelter where?" -msgstr "" +msgstr "Куда поставить укрытие?" #: iuse.cpp msgid "Put what?" @@ -12985,7 +13036,7 @@ msgstr "" #: iuse.cpp msgid "Siphon from where?" -msgstr "" +msgstr "Слить откуда?" #: iuse.cpp #, c-format @@ -13099,7 +13150,7 @@ msgstr "Похоже, %s нисколько это не впечатлило!" #: iuse.cpp #, c-format msgid "The %s swings open..." -msgstr "" +msgstr "%s распахивается..." #: iuse.cpp #, c-format @@ -13120,11 +13171,11 @@ msgstr "Дневной свет." #: iuse.cpp msgid "The Louisville Slaughterer burns out." -msgstr "" +msgstr "Луисвильский погромщик выгорел." #: iuse.cpp msgid "The Louisville Slaughterer is extinguished" -msgstr "" +msgstr "Луисвильский погромщик потушен." #: iuse.cpp msgid "The Moonlight's Edge" @@ -13164,7 +13215,7 @@ msgstr "Улучшенный УБП выключается со слабым г #: iuse.cpp msgid "The batteries are dead." -msgstr "" +msgstr "Батарейки разряжены." #: iuse.cpp msgid "The candle winks out" @@ -13189,9 +13240,8 @@ msgid "The fabric of space seems to decay." msgstr "" #: iuse.cpp -#, fuzzy msgid "The flare sputters out." -msgstr "Факел выгорел." +msgstr "" #: iuse.cpp msgid "The flashlight flicks off." @@ -13256,11 +13306,11 @@ msgstr "Адский шум замолкает после выключения #: iuse.cpp msgid "The lantern is empty." -msgstr "Фонарь пустой." +msgstr "Бензиновая лампа не заправлена." #: iuse.cpp msgid "The lantern is extinguished." -msgstr "Фонарь потушен." +msgstr "Бензиновая лампа потушена." #: iuse.cpp msgid "The lightstrip dies." @@ -13424,7 +13474,7 @@ msgstr "Включить" #: iuse.cpp msgid "Turn on light" -msgstr "" +msgstr "Включить свет" #: iuse.cpp msgid "Ugh, too much smoke... you feel nasty." @@ -13449,7 +13499,7 @@ msgstr "Использовать как нож" #: iuse.cpp msgid "Use your pick lock where?" -msgstr "" +msgstr "Где использовать отмычку?" #: iuse.cpp msgid "Using boots:" @@ -13592,6 +13642,12 @@ msgstr "Вы прикопали мину." msgid "You can dig a pit via the construction menu--hit *" msgstr "Вы можете выкопать яму через меню постройки (нажмите *)." +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "Эта модификация подходит только для инструментов." @@ -13639,7 +13695,7 @@ msgstr "Вы не можете это пилить." #: iuse.cpp #, c-format msgid "You can't dig in that %s" -msgstr "" +msgstr "Вы не можете рыть в %s" #: iuse.cpp player.cpp #, c-format @@ -13673,9 +13729,8 @@ msgid "You can't see to sew!" msgstr "Недостаточно света для шитья!" #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "Вы не можете выключить светящуюся палочку." +msgstr "" #: iuse.cpp msgid "You can't turn off a glowstick." @@ -13707,9 +13762,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "Вы прижгли свою рану. Просто адская боль!" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "Вы съели %s." +msgstr "" #: iuse.cpp msgid "You churn up the earth here." @@ -13750,6 +13805,10 @@ msgstr "Вы ещё больше повредили %s!" msgid "You damage your %s!" msgstr "Вы повредили %s!" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "Вы уничтожили предмет!" @@ -13789,7 +13848,7 @@ msgstr "Ёмкость батарей %s удвоена!" #: iuse.cpp msgid "You fail to spray a message here." -msgstr "" +msgstr "Вы не смогли написать здесь сообщение." #: iuse.cpp msgid "You fail to stop the bleeding." @@ -13805,7 +13864,7 @@ msgstr "Вы чувствуете лёгкую неуверенность в н #: iuse.cpp msgid "You feel a burning sensation under your skin that quickly fades away." -msgstr "" +msgstr "Вы чувствуете жжение под кожей, но оно быстро исчезает." #: iuse.cpp msgid "You feel a momentary nausea." @@ -13863,6 +13922,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "Вас сильно тянет в сон..." +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -13881,6 +13944,10 @@ msgstr "Вы разогреваете пищу." #: iuse.cpp msgid "You honk the bicycle horn." +msgstr "Вы нажали на гудок велосипеда." + +#: iuse.cpp +msgid "You honk your airhorn." msgstr "" #: iuse.cpp @@ -13910,7 +13977,7 @@ msgstr "Вы подожгли петарду." #: iuse.cpp msgid "You light the Louisville Slaughterer." -msgstr "" +msgstr "Вы зажгли луисвильский погромщик" #: iuse.cpp msgid "You light the arrow!." @@ -14033,9 +14100,13 @@ msgstr "" "боеприпасы." #: iuse.cpp -msgid "You open the jar, exposing it to the atmosphere." +msgid "You need to roar, bask, bite, and flap. NOW." msgstr "" +#: iuse.cpp +msgid "You open the jar, exposing it to the atmosphere." +msgstr "Вы открыли банку, тем самым разгерметизировав ее." + #: iuse.cpp msgid "You open the vacuum pack, exposing it to the atmosphere." msgstr "Вы вскрыли вакуумную упаковку." @@ -14269,9 +14340,8 @@ msgid "You snort some crystal meth." msgstr "Вы втянули носом несколько кристаллов метамфетамина." #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "Вы разплёскиваете собачью еду по земле." +msgstr "" #: iuse.cpp msgid "You spill the dogfood all over the ground." @@ -14279,7 +14349,7 @@ msgstr "Вы разплёскиваете собачью еду по земле. #: iuse.cpp msgid "You spray a message on the ground." -msgstr "" +msgstr "Вы написали сообщение на земле." #: iuse.cpp msgid "You squeeze the pheremone ball.." @@ -14290,9 +14360,8 @@ msgid "You stop the bleeding." msgstr "Вы остановили кровотечение." #: iuse.cpp -#, fuzzy msgid "You strike your flare and light it." -msgstr "Вы ушиваете %s, подгоняя вещь по фигуре." +msgstr "" #: iuse.cpp msgid "You string up the tripwire." @@ -14342,7 +14411,7 @@ msgstr "Вы приняли антибиотики." #: iuse.cpp msgid "You take some fungicide." -msgstr "" +msgstr "Вы приняли фунгициды." #: iuse.cpp msgid "You take some vitamins." @@ -14363,7 +14432,7 @@ msgstr "Вы попробовали зажечь огонь, но не полу #: iuse.cpp msgid "You turn off the light" -msgstr "" +msgstr "Вы выключили свет." #: iuse.cpp msgid "You turn the flashlight on." @@ -14371,11 +14440,11 @@ msgstr "Вы включили фонарик." #: iuse.cpp msgid "You turn the lantern on." -msgstr "Вы зажгли фонарь." +msgstr "Вы зажгли бензиновую лампу." #: iuse.cpp msgid "You turn the light on." -msgstr "" +msgstr "Вы включили свет." #: iuse.cpp msgid "You turn the noise emitter on." @@ -14580,7 +14649,7 @@ msgstr "К вам вернулось зрение!" #: iuse.cpp msgid "Your skin grows warm for a moment." -msgstr "" +msgstr "Ваша кожа на мгновение нагревается." #: iuse.cpp msgid "Your tactical tonfa is out of power" @@ -14715,6 +14784,10 @@ msgid "" "impurities, primarily drugs. It will have limited impact on viruses. Note " "that it is not a targeted filter; ALL drugs in your system will be affected." msgstr "" +"Система фильтрации внутри вашего сердца позволяет выводить химические " +"примеси, в первую очередь наркотики. Система не столь эффективна против " +"вирусов. Обратите внимание, что система действует не целенаправленно, т.е. " +"система будет выводить из организма ВСЕ наркотики." #: lang/json/json_bionics.py msgid "" @@ -14751,6 +14824,9 @@ msgid "" "fifteen-foot radius, and will silently alert you. This is very useful " "during sleep, or if you suspect a cloaked pursuer." msgstr "" +"Система обнаружения движения, которая бесшумно предупредит вас о движущихся " +"объектах в радиусе 15 футов. Полезна для обнаружения тех кто подкрадывается " +"к вам во время сна." #: lang/json/json_bionics.py msgid "" @@ -14920,6 +14996,8 @@ msgid "" "Embedded in your hand is a powerful electromagnet, allowing you to pull " "items made of iron over short distances." msgstr "" +"Встроенный в вашу руку мощный электромагнит, позволяющий вам перемещать " +"железные предметы на небольшое расстояние." #: lang/json/json_bionics.py msgid "Enhanced Hearing" @@ -14983,6 +15061,8 @@ msgid "" "hammer, wrench, and heating elements. You can use this in place of many " "tools when crafting." msgstr "" +"Имплантация в руки и пальцы набора инструментов: отвертка, молоток, ключ и " +"нагревательный элемент. Можно использовать при создании предметов." #: lang/json/json_bionics.py msgid "" @@ -15004,6 +15084,9 @@ msgid "" "walls, reappearing on the other side. Power drain in standby is minimal, " "but each tile tunneled through costs 10 bionic power." msgstr "" +"Увеличивает длину волны вашего тела, что позволяет создавать квантовый " +"туннель для проходя через стены. Потребление мощности в режиме ожидания " +"минимально, но проход через каждую стену стоит 10 бионических зарядов." #: lang/json/json_bionics.py lang/json/json_mutations.py msgid "Infrared Vision" @@ -15066,6 +15149,8 @@ msgid "" "Lying just beneath your skin is a thin armor made of carbon nanotubes. This " "reduces bashing damage by 2 and cutting damage by 4." msgstr "" +"Под кожей располагается тонкий слой брони из углеродных нанотрубок. Это " +"уменьшает урон от удара на 2, от порезов на 4." #: lang/json/json_bionics.py msgid "Membrane Oxygenator" @@ -15091,6 +15176,8 @@ msgid "" "You may use power to fire a short-ranged blast which will disable " "electronics and robots." msgstr "" +"Встроенный в ладонь маленький генератор электромагнитного поля. Можно " +"выстрелить на небольшое расстояние зарядом отключающим электронику и роботов." #: lang/json/json_bionics.py msgid "Muscle Augmentation" @@ -15129,6 +15216,9 @@ msgid "" "long range weapon is not incredibly damaging, but is very accurate, and has " "the potential to start fires." msgstr "" +"В один из ваших пальцев встроен высоко-мощный лазер. Это очень точное " +"дальнобойное оружие, однако оно наносит небольшие повреждения. После " +"попадание есть вероятность возгорания цели." #: lang/json/json_bionics.py msgid "" @@ -15243,6 +15333,8 @@ msgid "" "The flesh on your arms has been replaced by a strong armor, protecting you " "greatly." msgstr "" +"Плоть на ваших руках заменена прочной броней, предоставляя вам отличную " +"защиту." #: lang/json/json_bionics.py msgid "" @@ -15255,12 +15347,16 @@ msgid "" "The flesh on your legs has been replaced by a strong armor, protecting you " "greatly." msgstr "" +"Плоть на ваших ногах заменена прочной броней, предоставляя вам отличную " +"защиту." #: lang/json/json_bionics.py msgid "" "The flesh on your torso has been replaced by a strong armor, protecting you " "greatly." msgstr "" +"Плоть на вашем туловище заменена прочной броней, предоставляя вам отличную " +"защиту." #: lang/json/json_bionics.py msgid "" @@ -15278,6 +15374,9 @@ msgid "" "your background, rendering you fully invisible to normal vision. However, " "you may be detected by infrared, sonar, etc." msgstr "" +"Энергоемкая система использует набор камер и светодиодов, делая вас " +"невидимым для нормального зрения. Однако вас могут обнаружить при помощи " +"инфракрасного зрения, сонара и т.д." #: lang/json/json_bionics.py msgid "" @@ -15291,6 +15390,8 @@ msgid "" "This unit draws moisture from the surrounding air, which then is poured from " "a fingertip in the form of water. It may fail in very dry environments." msgstr "" +"Это устройство собирает влагу из воздуха, которая конденсируется на кончике " +"пальца в виде воду. Может не сработать в сухой обстановке." #: lang/json/json_bionics.py msgid "" @@ -15328,6 +15429,9 @@ msgid "" "that a successful hit will drain body heat, inflicting a small amount of " "extra damage, and increasing your power reserves slightly." msgstr "" +"Во время сражения с теплокровным противником, есть шанс, что удар заберет у " +"него тепло тела, причиняя небольшой дополнительный урон и немного восполняя " +"энергетический запас." #: lang/json/json_bionics.py msgid "" @@ -15335,6 +15439,9 @@ msgid "" "a chance that a successful hit will shock your opponent, inflicting extra " "damage and disabling them temporarily at the cost of some energy." msgstr "" +"Во время рукопашной борьбы или при использовании токопроводящего оружия, " +"есть шанс поражения противника электричеством, которое причинит ему " +"дополнительный урон и обездвижит. Требует энергетических затрат." #: lang/json/json_bionics.py msgid "" @@ -15348,6 +15455,8 @@ msgid "" "While this system is powered, your body will produce very little odor, " "making it nearly impossible for creatures to track you by scent." msgstr "" +"Во время работы системы, ваше тело будет пахнуть очень слабо, тем самым " +"сделав практически невозможным найти вас по запаху." #: lang/json/json_bionics.py msgid "Wire-induced Stiffness" @@ -15402,6 +15511,9 @@ msgid "" "intestines. Not only can you extract much more nutrition from food, but you " "are highly resistant to foodborne illness, and can sometimes eat rotten food." msgstr "" +"Вы оборудованы тремя искусственными желудками и кишечником промышленного " +"класса. Вы не только лучше перевариваете пищу, но и устойчивы к пищевым " +"отравлениям. Так же иногда можете есть гнилые продукты." #: lang/json/json_bionics.py msgid "" @@ -15439,6 +15551,9 @@ msgid "" "shockwave. While it will not do much damage to flexible creatures, stiff " "items such as walls, doors, and even robots will be severely damaged." msgstr "" +"Ваше тело может резонировать, создавая ударную волну малого радиуса. Наносит " +"малые повреждения подвижным существам, однако неподвижным, таким как, стены " +"двери или роботы, наносится значительный урон." #: lang/json/json_bionics.py msgid "" @@ -15462,6 +15577,7 @@ msgid "" "Your eyes have been modified to amplify existing light, allowing you to see " "in the dark." msgstr "" +"Ваши глаза модифицированы для усиления света, позволяя вам видеть в темноте." #: lang/json/json_bionics.py msgid "" @@ -15489,6 +15605,8 @@ msgid "" "to extend. These do considerable cutting damage, but prevent you from " "holding anything else." msgstr "" +"Вместо пальцев из ладони могут вырастать клешни, которые могут причинить " +"значительный режущий урон, однако не позволяют вам держать что-либо в руках." #: lang/json/json_bionics.py msgid "" @@ -15514,6 +15632,10 @@ msgid "" "your energy banks to fire a damaging heat ray; however, you are unable to " "use or carry two-handed items, and may only fire handguns." msgstr "" +"Ваша левая рука была заменена на сверхмощный термоядерный бластер! Вы можете " +"использовать свою энергию, чтобы стрелять тепловым лучом. Однако в таком " +"случае нельзя использовать двуручное оружие или носить предметы двумя " +"руками. Можно пользоваться только одноручным оружием." #: lang/json/json_bionics.py msgid "" @@ -15521,6 +15643,9 @@ msgid "" "you start to forget a skill, you have a chance at retaining all knowledge, " "at the cost of a small amount of power." msgstr "" +"Ваша память была улучшена при помощи маленького квантового устройства " +"хранения данных. Когда вы начнете забывать навыки, есть шанс, что все знания " +"будут сохранены, взамен небольшого количества энергии." #: lang/json/json_bionics.py msgid "" @@ -15544,12 +15669,17 @@ msgid "" "allowing you to dull your senses at will. However, the use of this system " "may cause delayed reaction time and drowsiness." msgstr "" +"Ваша нервная способна препятствовать болевым ощущениям, позволяющая вам " +"притуплять собственные ощущения. Однако, использование этой системы может " +"стать причиной снижения реакции и сонливости." #: lang/json/json_bionics.py msgid "" "Your range of vision extends into the infrared, allowing you to see warm-" "blooded creatures in the dark, and even through walls." msgstr "" +"Спектр вашего зрения расширен до инфракрасного, позволяя вам видеть " +"теплокровных существ в темноте, и даже через стены." #: lang/json/json_bionics.py msgid "" @@ -15567,6 +15697,10 @@ msgstr "Ваше зрение значительно усиливается, ч msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "Ужасный сон, в котором вы разрываете жертву своими острыми клыками." +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -15620,6 +15754,13 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "Во время сна вы чётко видите своё отражение в виде ящерицы." +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" +"Во сне вы видите себя в больничном халате, получающим медицинскую помощь." + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "Во время сна вы чётко видите себя в виде зверя." @@ -15640,6 +15781,10 @@ msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" "Вам пугает окружающая обстановка после реалистичного сна о пещерной жизни." +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "Вы в ужасе от сна, в котором становитесь ящерицей." @@ -15649,6 +15794,15 @@ msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" "Вас ужасает сон, в котором вы бездумно выполняете приказы матки в улье." +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "Вы видите сон, в котором вы примитивный обитатель пещер." @@ -15657,6 +15811,13 @@ msgstr "Вы видите сон, в котором вы примитивный msgid "You dream of grazing in an open field." msgstr "Вам снится, как вы пасётесь в поле." +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" +"Во сне вам приснился успех, который вы заслужили, до того как все это " +"началось." + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "Вам снится жизнь в качестве осьминога-мутанта." @@ -15673,6 +15834,10 @@ msgstr "Вам снится жизнь на дне океана." msgid "You dream of swimming in the open ocean" msgstr "Вам снится как вы плывёте в открытом океане." +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "Вы чувствуете себя... нормально." + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -15700,10 +15865,22 @@ msgstr "Вам снится странный сон как вы нежитесь msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "Вас посещает тревожный сон о странных медицинских процедурах." + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "Вы видите реалистичный сон, в котором живёте как ящерица." +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" +"Во сне доктора и медсестры делают с вашим телом неестественные вещи, и это " +"доставляет вам извращенное удовольствие." + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "Вам снится, как вы трудитесь в улье." @@ -15717,6 +15894,11 @@ msgstr "Вы видите реалистичный сон, в котором у msgid "You have a strange dream about animals." msgstr "Вам снится странный сон про животных." +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "Вам снится странный сон о птицах." @@ -15769,6 +15951,16 @@ msgstr "Вам снится жизнь в навозе." msgid "You have a strange dream of spinning webs" msgstr "Вам снится сон о плетении паутины." +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "Вам приснился странный сон." + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "Вы видите яркий сон, в котором вы охотитесь в лесу." @@ -15781,6 +15973,11 @@ msgstr "Вам снится как вы парите в небесах." msgid "You scream in fear while you dream of being chased by a cat" msgstr "Во сне вы кричите от ужаса, убегая от кошки." +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "Вы видите ужасный сон, в котором вас приводят на скотобойню." @@ -15801,10 +15998,18 @@ msgstr "Вы видите яркий сон об охоте в стае свои msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "Вы видите тревожный сон, в котором опыляете цветы." +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "Ваши сны наполнены существами, похожими на вас." + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "Ваш сон о долгой жизни в кромешной тьме почти реален." +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -15854,6 +16059,10 @@ msgstr "Во сне у вас есть странное ощущение вод msgid "Your dreams give you a strange wet, scaly feeling." msgstr "Во сне у вас появляется странное ощущение влаги и чешуи на теле." +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "Вас пугают сны, в котором вы становитесь настоящим пауком." @@ -15864,13 +16073,21 @@ msgid "" msgstr "" "Ваш сон о жизни на морском дне кажется более реальным, чем сама реальность." +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "В реалистичных снах вы копаетесь в мусоре вместе с остальными крысами." +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." -msgstr "Вас пугает сон, в котором вы были слизнем." +msgstr "Вас пугает сон, в котором вы были комком слизи." #: lang/json/json_furniture.py msgid "animalskin flap" @@ -15894,7 +16111,7 @@ msgstr "ванна" #: lang/json/json_furniture.py lang/json/json_vehicle_parts.py msgid "bed" -msgstr "" +msgstr "кровать" #: lang/json/json_furniture.py msgid "bench" @@ -15962,7 +16179,7 @@ msgstr "тренажёр" #: lang/json/json_furniture.py msgid "fireplace" -msgstr "" +msgstr "камин" #: lang/json/json_furniture.py msgid "fungal clump" @@ -15970,7 +16187,7 @@ msgstr "" #: lang/json/json_furniture.py msgid "fungal flower" -msgstr "" +msgstr "фунгалойдный цветок" #: lang/json/json_furniture.py msgid "fungal mass" @@ -16006,7 +16223,7 @@ msgstr "самодельная кровать" #: lang/json/json_furniture.py msgid "mature plant" -msgstr "" +msgstr "взрослое растение" #: lang/json/json_furniture.py msgid "mutated poppy flower" @@ -16089,12 +16306,16 @@ msgid "" "A chainsaw may seem like a great weapon, but remember that they're slow, " "unwieldy, and very noisy." msgstr "" +"Бензопила может стать отличным оружием, но учтите что она громоздка, " +"неудобна в обращении и слишком шумна." #: lang/json/json_hints.py msgid "" "A good submachine gun can't be beat. Most of them use common ammo, they're " "good at short and long range, and you can burst-fire if you need to!" msgstr "" +"Хороший пистолет-пулемет хорош со всех сторон. Большинство из них используют " +"стандартные патроны и эффективны как на коротких, так и длинных дистанциях." #: lang/json/json_hints.py msgid "" @@ -16107,18 +16328,24 @@ msgid "" "Backpacks let you carry lots of stuff, but they limit your movement a lot. " "If you're an unarmed fighter, don't wear one!" msgstr "" +"Рюкзак вмещает в себя кучу всего, но стесняет движения. Если вы полагаетесь " +"на рукопашную борьбу, то лучше его не надевать!" #: lang/json/json_hints.py msgid "" "Be careful eating wild mushrooms. Some are poisonous, and others can make " "you hallucinate." msgstr "" +"Будьте осторожны при поедании грибов. Некоторые ядовиты и могут вызвать " +"галлюцинации." #: lang/json/json_hints.py msgid "" "Be careful of drinking water from rivers and stuff, it's a good way to get " "sick. But if you have a water purifier, it'll make it safe." msgstr "" +"Опасайтесь пить воду из рек и унитазов, так это может повлечь отравление. Во " +"избежании плачевных последствий пользуйтесь очистителем воды." #: lang/json/json_hints.py msgid "" @@ -16126,18 +16353,24 @@ msgid "" "the first zombie through will get stuck, and the rest won't be able to get " "past!" msgstr "" +"Медвежий капкан отлично прикрывает отход. Если расположить его в дверном " +"проеме, то первый же застрявший зомби заблокирует проход остальным!" #: lang/json/json_hints.py msgid "" "Bubblewrap is pretty harmless, but setting it up around you before going to " "sleep will keep you from waking up to a zombie punching you." msgstr "" +"Пузырчатая пленка - безобидная штука, которая может предупредить вас о " +"приближении зомби во время сна." #: lang/json/json_hints.py msgid "" "Carrying a lighter is something all veterans do. It takes up almost no " "space, and can easily save your life." msgstr "" +"Опытный игрок всегда носит с собой зажигалку. Она не занимеат места, однако " +"в некоторых ситуациях может спасти вам жизнь." #: lang/json/json_hints.py msgid "" @@ -16169,22 +16402,29 @@ msgid "" "Don't relax after killing a giant worm. Little bits of them can break off " "and still attack!" msgstr "" +"Не расслабляйся, после того как убил червя. Его части все еще могут " +"атаковать тебя!" #: lang/json/json_hints.py msgid "" "Don't try to take on a skeleton with a bladed weapon... you'll just leave " "scratch marks. You've got to shatter those bones with a hammer or something." msgstr "" +"Не выходи на скелета с режущим оружием, оно оставит только царапины на нем. " +"Кости лучше разбивать чем-то на подобии молотка." #: lang/json/json_hints.py msgid "" "Don't underestimate a good book. Not only will it keep you company on " "lonely nights, but you can learn a hell of a lot from some of them." msgstr "" +"Не стоит недооценивать хорошую книгу. Можно не только скоротать время за " +"чтением, но и узнать чертовски много интересного." #: lang/json/json_hints.py msgid "Don't use molotovs indoors. Especially in a liquor store." msgstr "" +"Не бросайте коктейль Молотова внутри помещения. Особенно на складе алкоголя." #: lang/json/json_hints.py msgid "" @@ -16210,6 +16450,8 @@ msgid "" "Have you heard about those queen triffids? You gotta keep your distance " "from them, unless you like having a tree grow right through your chest." msgstr "" +"Ты когда-нибудь слышал про королев-триффидов? Советую тебе держаться от них " +"подальше, если только ты не хочешь, чтобы у тебя выросло дерево из груди." #: lang/json/json_hints.py msgid "" @@ -16243,12 +16485,17 @@ msgid "" "Hunting rifles are great at long range, but suck close up. Plus, most of " "them don't carry many rounds. Keep a pistol as a sidearm if you use a rifle." msgstr "" +"Охотничьи ружья хороши на длинных дистанциях, но почти бесполезны на " +"ближних. К тому же в их обоймах мало патронов. Рекомендуется иметь при себе " +"пистолет, в качестве запасного оружия." #: lang/json/json_hints.py msgid "" "I figured out how to take care of those triffids! Let me just say this: " "they're made of wood, and wood and fire don't mix." msgstr "" +"Позволь обрисовать тебе как нужно бороться с триффидами. Они из состоят " +"древесины, а дерево и огонь не дружат." #: lang/json/json_hints.py msgid "" @@ -16256,6 +16503,9 @@ msgid "" "suddenly woke up to trees and vines growing right up through the floor and " "walls! He said it was some kind of huge triffid making it happen..." msgstr "" +"У меня был приятель, который ночевал в вагончике в лесу. Как-то раз он " +"проснулся, а у него из стен и потолка растут деревья и ветки. Он утверждал, " +"что это все козни какого-то огромного триффида..." #: lang/json/json_hints.py msgid "" @@ -16281,6 +16531,8 @@ msgid "" "I know they look dumb, but wearing a fanny pack gives you that extra bit of " "storage without encumbering you." msgstr "" +"Конечно поясные сумки выглядят не очень, но они дают вам возможность носить " +"предметы не обременяя вас." #: lang/json/json_hints.py msgid "" @@ -16322,6 +16574,9 @@ msgid "" "your gun. Be sure to aim at the zombie furthest away; you'll hit more of " "them that way." msgstr "" +"Если впереди вас толпа зомби выстроилась в линию, попробуйте выстрелить в " +"них очередью. Цельтесь в самого дальнего, чтобы поразить как можно больше " +"противников." #: lang/json/json_hints.py msgid "" @@ -16334,18 +16589,25 @@ msgid "" "If you can spare the space, you might want to carry a fire extinguisher " "along. Nothing's worse than being trapped in a burning building!" msgstr "" +"Если у вашем инвентаре осталось свободное место, то возьмите огнетушитель. " +"Он может пригодиться если вас окружил огонь." #: lang/json/json_hints.py msgid "" "If you get a pair of night vision goggles, hold on to them! A flashlight " "will give you away, but with goggles you can be sneaky." msgstr "" +"Если вам попадется прибор ночного видения, лучше держать его при себе. Они " +"помогут вам незаметно пробраться в темноте, однако любая вспышка может вам " +"ослепить." #: lang/json/json_hints.py msgid "" "If you need a bunch of rags for making molotov cocktails, take a pair of " "scissors to an old t-shirt or something." msgstr "" +"Если вам нужны тряпки для создания коктейля Молотова, возьмите ножницы и " +"старую футболку или что-то на подобии." #: lang/json/json_hints.py msgid "" @@ -16360,18 +16622,25 @@ msgid "" "fast as hell, but pretty dumb; they'll try to smash through obstacles rather " "than going around, and that slows them down a lot." msgstr "" +"Если вы встретите зомби-халка, то вам лучше бежать. Они очень быстры, однако " +"глупы. Таким образом, если между вами и ним будет предшествие, то зомби-халк " +"постарается его разбить, а не обойти." #: lang/json/json_hints.py msgid "" "If you see a big mob of zombies coming, RUN! Trying to fight them all is " "suicide unless you have a big tactical advantage." msgstr "" +"Если увидел большую толпу зомби, то лучше беги! Попытка драться с ними равна " +"самоубийству, если у тебя нет мощного оружия." #: lang/json/json_hints.py msgid "" "If you shoot a zombie, but don't quite kill it, try to finish it off with a " "punch or something instead of wasting a bullet." msgstr "" +"Если вы выстрелили в зомби, но не убили его, то лучше добейте его прикладом " +"- не тратьте пули." #: lang/json/json_hints.py msgid "" @@ -16384,6 +16653,8 @@ msgid "" "If you're going to be playing with molotov cocktails around a gas station, " "just make sure you're a long way from those pumps." msgstr "" +"Если решили бросить коктейль Молотова на заправке, то убедитесь, что " +"находитесь подальше от бензоколонок." #: lang/json/json_hints.py msgid "" @@ -16391,6 +16662,8 @@ msgid "" "you down it, try to wound the guy in front badly. He'll start moving slow " "and cause a serious traffic jam!" msgstr "" +"Если в узком коридоре за вами гоняться зомби, то можно тяжело ранить " +"ближайшего, чтобы он замедлился и затормозил остальных." #: lang/json/json_hints.py msgid "" @@ -16398,12 +16671,16 @@ msgid "" "reason too--watch out for those fish. Those suckers are fast, and vicious " "too!" msgstr "" +"Если вы хотите путешествовать по канализации, то опасайтесь рыб живущих там. " +"Это злобные и быстрые твари." #: lang/json/json_hints.py msgid "" "If you're spending the night in a dangerous area, grab a shovel and dig pits " "all around your camp." msgstr "" +"Если вам пришлось спасть в опасном месте, выройте вокруг места ночлега " +"несколько ям при помощи лопаты." #: lang/json/json_hints.py msgid "" @@ -16430,12 +16707,16 @@ msgid "" "plan on eating them. I've seen these weird zombies bring their friends back " "from the dead!" msgstr "" +"Советую разделывать тела если у вас есть время, даже если вы не собираетесь " +"их есть. Я сам видел как зомби возвращаются к жизни!" #: lang/json/json_hints.py msgid "" "It's a good idea to carry around a couple of empty bottles. You can fill " "them up with water, gasoline, or whatever!" msgstr "" +"Не помешает носить с собой несколько пустых бутылок. Их всегда можно " +"заполнить водой, бензином, да чем угодно!" #: lang/json/json_hints.py msgid "" @@ -16448,6 +16729,9 @@ msgid "" "It's good to keep a pistol handy, in case your main gun runs out of ammo or " "something. They're also better than most guns at short range." msgstr "" +"Было бы не плохо иметь при себе, на тот случай если закончатся патроны, " +"кроме основного оружия еще и пистолет. К тому пистолет на коротких " +"расстояниях - самое эффективное оружие." #: lang/json/json_hints.py msgid "" @@ -16478,6 +16762,8 @@ msgid "" "Oh man, have you gone down into the old subway systems? I'd be careful... " "there's these things down there that're like zombies, but tougher." msgstr "" +"Ты когда-нибудь спускался в метро? Будь осторожен... местные обитатели как " +"зомби, только сильнее." #: lang/json/json_hints.py msgid "" @@ -16485,6 +16771,9 @@ msgid "" "Just remember that they're noisy as hell, and you might end up attracting " "more than you kill." msgstr "" +"Дробовик - это здорово. Одним выстрелом можно снять несколько врагов. Вот " +"только они издают слишком много шума, так что выстрел может привлечь еще " +"больше неприятелей." #: lang/json/json_hints.py msgid "" @@ -16498,36 +16787,50 @@ msgid "" "can't smell you, unlike zombies, so if you turn your light off at night you " "can sneak right past." msgstr "" +"Скелеты слишком хрупкие, чтобы разбивать окна. К тому же они не могут учуять " +"тебя по запаху. Таким образом если ночью выключить фонарик, можно проскочить " +"мимо них." #: lang/json/json_hints.py msgid "" "Ski goggles are a great choice if you're worried about getting stuff in your " "eyes. Perfect for dealing with boomers!" msgstr "" +"Лыжные очки, неплохой выбор, для тех кто заботится о безопасности своих " +"глаз. Пригодятся при разборках с бумером." #: lang/json/json_hints.py msgid "" "Sledge hammers may seem like a great weapon, but swinging them is really " "slow, and you won't do much damage unless you're really strong." msgstr "" +"Кувалда - отличное оружие, но очень тяжелое, поэтому вы не причините много " +"вреда, если недостаточно сильны." #: lang/json/json_hints.py msgid "" "Smoke grenades aren't really offensive weapons, but they'll cover up your " "scent and hide you from view--perfect for making a quick escape." msgstr "" +"Дымовые гранаты - не наступательное оружие, они скрывают вас с прямой " +"видимости и маскируют запах. Отличное средство при отступлении." #: lang/json/json_hints.py msgid "" "Squirrels are pretty yummy, but if you shoot them with a high-powered gun " "you'll probably be left with no meat! Use a BB gun or maybe a .22 rifle." msgstr "" +"Белки довольно вкусные, но если выстрелить по ним из мощного оружия, то от " +"них ничего не останется. Рекомендуются стальные шарики или винтовка " +"калибра .22." #: lang/json/json_hints.py msgid "" "Standing behind a window is a good tactic. It takes zombies a long time to " "crawl through, giving you lots of opportunities to hit them." msgstr "" +"Стоять за окном - неплохой тактический прием. Пока зомби карабкаются по " +"подоконнику, у вас будет отличная возможность их атаковать." #: lang/json/json_hints.py msgid "" @@ -16540,6 +16843,8 @@ msgid "" "There's snakes down in most of the old sewer systems. They're slow on land, " "but boy, those suckers can swim fast!" msgstr "" +"В канализации водятся змею. На суши они движутся медленно, зато в воде они " +"очень быстры." #: lang/json/json_hints.py msgid "" @@ -16554,6 +16859,8 @@ msgid "" "then pop up to stab ya. Still, you're safe from them if you stay on " "pavement..." msgstr "" +"Изредка вам могут попадаться довольно опасные роботы-кроты. Они зарываются " +"под землю и поджидают жертву. Чтобы не попасться им, оставайся на асфальте..." #: lang/json/json_hints.py msgid "" @@ -16566,18 +16873,24 @@ msgid "" "Those acid-spitting zombies are pretty nasty, but if you're smart, you can " "get other zombies to wade through the acid." msgstr "" +"Кислотные зомби очень неприятны, однако их кислоту можно обернуть себе на " +"пользу, если ты сможешь заставить других зомби пройти через нее." #: lang/json/json_hints.py msgid "" "Triffids are tough. They've got natural armor, and it takes a lot to bring " "them down. I don't recommend getting into a fight with them." msgstr "" +"Триффиды очень сильные. От рождения у них крепкая броня и их очень тяжело " +"побороть. Лучше с ними не связываться." #: lang/json/json_hints.py msgid "" "Triffids can't see! They figure out where you are by your smell, but if you " "mask it with smoke or something, you're as good as invisible." msgstr "" +"Триффиды слепы! Они могут учуять тебя только по запаху. Таким образом " +"используя дым можно стать невидимым для них." #: lang/json/json_hints.py msgid "" @@ -16590,17 +16903,19 @@ msgid "" "Try to go around swamps, if you can. Some of them have sinkholes that can " "pull you right underground." msgstr "" +"Старайтесь обходить болота. Там есть топи, которые могут засосать вас под " +"землю." #: lang/json/json_hints.py msgid "" "Try to stay on the roads as much as you can. Giant worms can't cross them!" -msgstr "" +msgstr "Старайся ходить по дорогам. Черви тебя на них не достанут!" #: lang/json/json_hints.py msgid "" "Watch out for those zombies that shriek; they'll let other zombies know " "where you are, and will attract them from all over." -msgstr "" +msgstr "Опасайся кричащих зомби, они привлекают внимание других зомби." #: lang/json/json_hints.py msgid "" @@ -16639,6 +16954,8 @@ msgid "" "You know, you don't have to go full auto with an assault rifle. Firing " "single shots is more accurate and efficient!" msgstr "" +"Используя штурмовую винтовку не забывайте переключаться на режим одиночных " +"выстрелов, т.к. такой режим позволяет вести более точную стрельбу." #: lang/json/json_hints.py msgid "" @@ -16651,12 +16968,16 @@ msgid "" "Zombie hulks are NASTY, but they're easy to outsmart. If there's other " "monsters between you and them, they'll kill the monster for you!" msgstr "" +"Зомби-халки очень ЗЛЫЕ, но их можно использовать себе на пользу. Если между " +"ним и тобой есть зомби, то халк будет убивать их на своем пути." #: lang/json/json_hints.py msgid "" "Zombies are pretty dumb... heck, most monsters are! If you can get a fire " "going between you and them, they'll just run straight through it." msgstr "" +"Зомби достаточно глупы. Если между вами и ними будет разведен огонь, то они " +"пойдут прямо на него." #: lang/json/json_items.py msgid ".22 CB" @@ -16672,7 +16993,7 @@ msgstr ".22 LR" #: lang/json/json_items.py msgid ".22 caliber conversion kit" -msgstr "" +msgstr ".22 переточка калибра" #: lang/json/json_items.py msgid ".22 casing" @@ -16688,7 +17009,7 @@ msgstr ".223 Remington" #: lang/json/json_items.py msgid ".223 caliber conversion kit" -msgstr "" +msgstr ".223 переточка калибра" #: lang/json/json_items.py msgid ".223 casing" @@ -16720,7 +17041,7 @@ msgstr ".308 Winchester" #: lang/json/json_items.py msgid ".308 caliber conversion kit" -msgstr "" +msgstr ".308 переточка калибра" #: lang/json/json_items.py msgid ".308 casing" @@ -16780,7 +17101,7 @@ msgstr ".45 Super" #: lang/json/json_items.py msgid ".45 caliber conversion kit" -msgstr "" +msgstr ".45 переточка калибра" #: lang/json/json_items.py msgid ".45 casing" @@ -16800,7 +17121,7 @@ msgstr "" #: lang/json/json_items.py msgid ".50 BMG casing" -msgstr "" +msgstr ".50 BMG гильза" #: lang/json/json_items.py msgid ".50 BMG incendiary" @@ -16812,7 +17133,7 @@ msgstr ".500 S&W Магнум" #: lang/json/json_items.py msgid ".500 S&W Magnum casing" -msgstr "" +msgstr "гильза .500 S&W Магнум" #: lang/json/json_items.py msgid "00 shot" @@ -16848,6 +17169,14 @@ msgstr "10mm Auto" msgid "12 gauge pistol" msgstr "пистолет 12 калибра" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "меч-доска" @@ -16858,7 +17187,7 @@ msgstr "3л стеклянная банка" #: lang/json/json_items.py msgid "4.6mm caliber conversion kit" -msgstr "" +msgstr "4.6мм переточка калибра" #: lang/json/json_items.py msgid "4.6x30mm" @@ -16926,7 +17255,7 @@ msgstr "5.56 зажигательный" #: lang/json/json_items.py msgid "5.7mm caliber conversion kit" -msgstr "" +msgstr "5.7мм переточка калибра" #: lang/json/json_items.py msgid "5.7x28mm" @@ -17042,10 +17371,13 @@ msgid "" "cartridge and used by the majority of US police forces. It is also a very " "popular round in sub-machine guns." msgstr "" +"9 миллиметровый \"Парабеллум\" один из самых популярных пистолетных " +"патронов, большинство полицейских США используют именно его. Также " +"существует много пистолетов-пулеметов, использующих эти боеприпасы." #: lang/json/json_items.py msgid "93mm single-stage high-explosive ammunition for the RPG-7." -msgstr "" +msgstr "Одноразовый 93мм фугасный заряд для RPG-7" #: lang/json/json_items.py msgid "9mm +P" @@ -17061,7 +17393,7 @@ msgstr "9мм FMJ" #: lang/json/json_items.py msgid "9mm caliber conversion kit" -msgstr "" +msgstr "9мм переточка калибра" #: lang/json/json_items.py msgid "9mm casing" @@ -17069,12 +17401,14 @@ msgstr "9мм гильза" #: lang/json/json_items.py msgid "A 12v lead-acid battery used to power car electrical systems." -msgstr "" +msgstr "Кислотно-свинцовая 12В аккумулятор для питания систем автомобиля." #: lang/json/json_items.py msgid "" "A 12v lead-acid battery used to power smaller vehicles' electrical systems." msgstr "" +"Свинцово-кислотный 12В аккумулятор, используемый для питания электрических " +"систем малого транспорта." #: lang/json/json_items.py msgid "A 250 ml laboratory conical flask, with a rubber bung." @@ -17100,7 +17434,7 @@ msgstr "" #: lang/json/json_items.py msgid "A 40mm grenade with a concussive explosion load." -msgstr "" +msgstr "40 мм граната с оглушающим зарядом." #: lang/json/json_items.py msgid "" @@ -17116,6 +17450,8 @@ msgid "" "A 40mm grenade with a small explosive load and a high number of damaging " "fragments." msgstr "" +"40мм осколочная граната с небольшим зарядом взрывчатки и большим количеством " +"поражающих элементов." #: lang/json/json_items.py msgid "" @@ -17149,6 +17485,8 @@ msgid "" "A 60mm High Explosive Anti Tank round. It could blow through up to two feet " "of concrete." msgstr "" +"60мм кумулятивный противотанковый снаряд. Способен пробить бетонную стену " +"толщиной больше полуметра." #: lang/json/json_items.py msgid "" @@ -17245,12 +17583,17 @@ msgid "" "colorful, full-page photos of skilled athletes demonstrating proper form and " "technique." msgstr "" +"Журнал о бейсболе, который фокусирует внимание на обращение с битой. Много " +"цветных картинок и фотографий, на которых профессиональные атлеты показывают " +"технику удара." #: lang/json/json_items.py msgid "" "A baseball, good for throwing at enemies. Getting hit with one of these " "hurts a lot more than you might think." msgstr "" +"Бейсбольный мяч хорошо кидать во врагов. Удар такого гораздо более, чем " +"кажется." #: lang/json/json_items.py msgid "" @@ -17311,6 +17654,8 @@ msgid "" "A big bag of candy wafers, in assorted flavors: orange, lemon, lime, clove, " "chocolate, wintergreen, cinnamon, and licorice. Yum!" msgstr "" +"Большой мешок вафель, разнообразных вкусов: апельсин, лимон, лайм, гвоздика, " +"шоколад, грушанки, корица, и солодки. Вкусно!" #: lang/json/json_items.py msgid "A big bag of peanut butter cups... your favorite!" @@ -17318,7 +17663,7 @@ msgstr "Пачка колечек в арахисовой пасте... Твои #: lang/json/json_items.py msgid "A big bag of soft chocolate-covered peppermint patties... yum!" -msgstr "" +msgstr "Большой пакет мятных печенек, покрытых шоколадом... Вкуснятина!" #: lang/json/json_items.py msgid "" @@ -17386,6 +17731,8 @@ msgid "" "rag. You will, of course, need a lighter or matches in your inventory to do " "this. After lighting it, throw it to cause fires." msgstr "" +"Бутылка с горючей жидкостью и тряпкой, заправленной в горлышко. Используйте " +"зажигалку или спички, чтобы поджечь тряпку, и бросайте в цель." #: lang/json/json_items.py msgid "" @@ -17455,6 +17802,8 @@ msgstr "Коробка шарикоподшипников, полезны как #: lang/json/json_items.py msgid "A box of fast-food fried potatoes. Somehow, they're still edible." msgstr "" +"Упаковка быстрого питания с жареным картофелем. Так или иначе, они все еще " +"съедобны." #: lang/json/json_items.py msgid "A box of nails, mainly useful with a hammer." @@ -17469,6 +17818,8 @@ msgstr "" #: lang/json/json_items.py msgid "A brass-jacketed .22 caliber round with superior penetration capacity." msgstr "" +"Пули .22 калибра с цельнометаллической оболочкой обладают отличной " +"проникающей способностью." #: lang/json/json_items.py msgid "" @@ -17566,6 +17917,9 @@ msgid "" "A chocolate flavored beverage made of artifical flavoring and milk " "byproducts. Shelf stable and vaguely appetizing even when lukewarm." msgstr "" +"Напиток со вкусом шоколада, сделанный из молочных субпродуктов и " +"искусственных ароматизаторов. Пригоден для длительного хранения и вполне " +"аппетитен даже когда тёплый." #: lang/json/json_items.py msgid "" @@ -17596,6 +17950,8 @@ msgid "" "A classic tale about growing up, portraying one young man's funny and " "poignant experiences with life, love, and sex." msgstr "" +"Классическая история о взрослении, изображающая острые переживания молодого " +"человека в жизни, любви и сексе." #: lang/json/json_items.py msgid "" @@ -17607,7 +17963,7 @@ msgstr "" #: lang/json/json_items.py msgid "A cluster of seedless grapes." -msgstr "" +msgstr "Гроздь винограда без косточек." #: lang/json/json_items.py msgid "" @@ -17665,6 +18021,9 @@ msgid "" "photos are beautiful, though the terminology in the sections on " "survivalcraft assume some proficiency." msgstr "" +"Журнал, посвящённый путешествиям с фотоаппаратом в руках по красивым уголкам " +"земли. Содержит красочные фотографии, однако, многие советы по части " +"выживания стоит подвергать сомнениям." #: lang/json/json_items.py msgid "A colorful, hard ball. Essentially a rock." @@ -17709,6 +18068,8 @@ msgid "" "A copper tube, too thin to be much use ad a melee weapon, but will do if " "nothing else is available. Useful in a few crafting recipes." msgstr "" +"Медная трубка, слишком тонкая для того чтобы использоваться как оружие. " +"Используется при крафте." #: lang/json/json_items.py msgid "" @@ -17767,6 +18128,8 @@ msgid "" "A custom-built light vest covered with pockets and pouches. Durable and " "carefully crafted to be comfortable to wear." msgstr "" +"Легкий костюм покрытый карманами. Прочный и аккуратно сделанный, удобен в " +"использовании." #: lang/json/json_items.py msgid "" @@ -17798,7 +18161,7 @@ msgstr "" #: lang/json/json_items.py msgid "A darker cousin of raspberry." -msgstr "" +msgstr "Тёмная родственница малины." #: lang/json/json_items.py msgid "A dead plant. Good for starting fires." @@ -17857,6 +18220,8 @@ msgid "" "A dry and virtually tasteless bread product capable of remaining edible " "without spoilage for vast lengths of time." msgstr "" +"Сухой и практически безвкусный хлебный продукт, который остаётся съедобным и " +"не портится в течение долгого времени." #: lang/json/json_items.py msgid "A dull knife, absolutely worthless in combat." @@ -17898,6 +18263,7 @@ msgid "" "A firecracker that has been lit; the fuse is hissing. Throw it quickly " "before it explodes." msgstr "" +"Петарда с подожженным запалом. Быстрее бросьте её, пока она не взорвалась." #: lang/json/json_items.py msgid "A fish bowl" @@ -17921,7 +18287,7 @@ msgstr "" #: lang/json/json_items.py msgid "A fleshy fruit with large pit." -msgstr "" +msgstr "Мясистый фрукт с большой косточкой." #: lang/json/json_items.py msgid "" @@ -17971,11 +18337,11 @@ msgstr "" #: lang/json/json_items.py msgid "A fruit with hard and hairy shell." -msgstr "" +msgstr "Фрукт с твердой, волосатой оболочкой." #: lang/json/json_items.py msgid "A fruit, bigger than your head. It is very juicy!" -msgstr "" +msgstr "Ягода, которая больше твоей головы. Очень сочная." #: lang/json/json_items.py msgid "" @@ -18032,6 +18398,14 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "Шуба с парой небольших карманов. В ней очень и очень тепло." +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" +"Куски меха сшиты и связаны в импровизированную набедренную повязку. " +"Покрывает ваш пах, но не более того. Теперь вы настоящий варвар-воин." + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -18068,12 +18442,16 @@ msgid "" "A glossy magazine about surviving and hunting in the wilderness. There's an " "exciting article about a bear attack in the back pages." msgstr "" +"Глянцевый журнал о выживании и охоте в условиях дикой природы. На последних " +"страницах находится захватывающее описание атаки медведя на человека." #: lang/json/json_items.py msgid "" "A glossy magazine all about handguns and shooting. There is a good article " "about proper sighting near the middle." msgstr "" +"Глянцевый журнал о пистолетах и стрельбе. Есть хорошая статья о правильном " +"прицеливании на средних дистанциях." #: lang/json/json_items.py msgid "A gold candlestick." @@ -18098,6 +18476,8 @@ msgid "" "A grotesque, horned helmet carved from bone. Covers the entire head; very " "light and strong." msgstr "" +"Гротескный рогатый шлем сделанный из костей. Полностью покрывает голову. " +"Легкий и прочный." #: lang/json/json_items.py msgid "A guide detailing the basics of woodsmanship and outdoor survival." @@ -18123,7 +18503,7 @@ msgstr "Самодельные дротики, используются как #: lang/json/json_items.py msgid "A handful of large, purple plums. Healthy and good for your digestion." -msgstr "" +msgstr "Несколько крупных фиолетовых слив. Полезные и хорошо усваиваемые." #: lang/json/json_items.py msgid "A handful of pebbles, useful as ammunition for slings." @@ -18156,6 +18536,8 @@ msgid "" "weapon, it consists of a stick with a perpendicular handle attached a third " "of the way down its length." msgstr "" +"Жесткая пластиковая дубинка, обычно применяется полицией. Произошло в " +"Японии. Состоит из палки с вертикальной ручкой, отстоящей на треть ее длины." #: lang/json/json_items.py msgid "" @@ -18181,6 +18563,8 @@ msgstr "" #: lang/json/json_items.py msgid "A hardbound book devoted to being an effective and persuasive speaker." msgstr "" +"Книга в твёрдом переплёте, посвящённая навыкам эффективного и убедительного " +"общения." #: lang/json/json_items.py msgid "A hat made from the pelts of animals. Extremely warm." @@ -18212,6 +18596,8 @@ msgid "" "A heavy circular block of solid rubber, normally used for playing hockey. " "You can throw it to cause some serious harm." msgstr "" +"Тяжелый, круглый кусок резины, обычно используется для игры в хоккей. Если " +"кинуть, то может причинить серьезный урон." #: lang/json/json_items.py msgid "A heavy cloak that is thrown over your body." @@ -18244,8 +18630,9 @@ msgid "" "and a metal armor plated jumpsuit made out of leather. Protects from the " "elements as well as from harm." msgstr "" -"Самодельная тяжелая броня, сделанная из бронежилета и усиленного металлом " -"комбинезона. Защищает от вредной среды и повреждений." +"Самодельная тяжелая броня, сделанная из бронежилета и усиленного " +"металлическими пластинами кожаного комбинезона. Защищает от вредной среды и " +"повреждений." #: lang/json/json_items.py msgid "" @@ -18266,6 +18653,8 @@ msgid "" "A heavy metal guard that covers the fist and increases striking power, with " "stout padding underneath to protect the wearers hand." msgstr "" +"Обмотка кожаными ремнями на руках для их защиты и увеличения степени " +"травматичности удара. Между ремнями вложены тяжёлые полоски металла." #: lang/json/json_items.py msgid "" @@ -18342,6 +18731,7 @@ msgstr "" #: lang/json/json_items.py msgid "A heavy wool coat. Cumbersome, but warm and with deep pockets." msgstr "" +"Тяжелое шерстяное пальто. Громоздкое, но теплое и с глубокими карманами." #: lang/json/json_items.py msgid "" @@ -18407,8 +18797,8 @@ msgid "" "jumpsuit made out of leather. Protects from the elements as well as from " "harm." msgstr "" -"Самодельный жилет, сделанный из бронежилета и усиленного комбинезона. " -"Защищает от вредной среды и повреждений." +"Самодельный жилет, сделанный из бронежилета и усиленного кожаного " +"комбинезона. Защищает от вредной среды и повреждений." #: lang/json/json_items.py msgid "" @@ -18458,6 +18848,13 @@ msgstr "" "Самодельное оружие, использующее электромагнитное поле для разгона " "высокоскоростных ферромагнитных снарядов. Питается от УБП." +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -18493,7 +18890,7 @@ msgstr "" #: lang/json/json_items.py msgid "A juicy, bell-shaped pear. Yum!" -msgstr "" +msgstr "Сочная, колокольчико-образная груша. Вкусно!" #: lang/json/json_items.py msgid "" @@ -18504,8 +18901,16 @@ msgstr "" "направляющей. Требует арбалетных болтов для стрельбы." #: lang/json/json_items.py -msgid "A large 12v lead-acid battery used to power truck electrical systems." +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." msgstr "" +"Остро заточенный предмет, обернутый тряпкой в качестве рукоятки. Неплохое " +"холодное оружие." + +#: lang/json/json_items.py +msgid "A large 12v lead-acid battery used to power truck electrical systems." +msgstr "Кислотно-свинцовая 12В аккумулятор для питания систем грузовика." #: lang/json/json_items.py msgid "A large American flag made to fly in even the worst conditions." @@ -18527,7 +18932,7 @@ msgstr "Большой и очень мощный электродвигател #: lang/json/json_items.py msgid "A large and very sweet fruit." -msgstr "" +msgstr "Большой и очень сладкий фрукт." #: lang/json/json_items.py msgid "" @@ -18619,7 +19024,7 @@ msgstr "" #: lang/json/json_items.py msgid "A large sheet of glass strengthened with steel wiring." -msgstr "Большой лист стекла усиленного стальной проволокой." +msgstr "Большой лист стекла армированного стальной проволокой." #: lang/json/json_items.py msgid "A large sheet of glass. Easily shattered. Useful for re-paning windows." @@ -18696,7 +19101,7 @@ msgstr "" #: lang/json/json_items.py msgid "A large, spiky pineapple. A bit sour, though." -msgstr "" +msgstr "Большой и колючий ананасй. Немного кислый на вкус." #: lang/json/json_items.py msgid "" @@ -18704,6 +19109,8 @@ msgid "" "the people in them, but seeing these pictures still makes you think of " "happier times." msgstr "" +"Кожаный альбом с фотографиями чье-то семьи. Вы не знаете, никого из этих " +"людей, но, смотря на эти фотографии вывспоминаете о счастливых временах." #: lang/json/json_items.py msgid "" @@ -18724,6 +19131,8 @@ msgid "" "A leather sling, it is easy to use and accurate, but pebbles do little " "damage." msgstr "" +"Кожаная праща, проста в использовании и точна. Но камешек наносит маленький " +"урон." #: lang/json/json_items.py msgid "A leather-covered seat designed to be straddled." @@ -18752,11 +19161,12 @@ msgstr "" "проволочных оградах." #: lang/json/json_items.py -#, fuzzy msgid "" "A light and breezy cotton dress. Though cool and comfortable to wear, it " "lacks any storage space." -msgstr "Длинное хлопковое платье. Стесняет движения и не имеет карманов." +msgstr "" +"Легкое, дышащее ситцевое платье. Удобное, но в нем нет места для хранения " +"предметов." #: lang/json/json_items.py msgid "A light vest covered in pockets and straps for storage." @@ -18782,6 +19192,8 @@ msgid "" "A lightweight hatchet made for throwing. Its ineffective cutting edge and " "light weight makes it unsuitable for use as a tool." msgstr "" +"Легкий топор сделанный для метания. Его лезвие и легкий вес делает его " +"непригодным для использования в качестве инструмента." #: lang/json/json_items.py msgid "" @@ -18798,6 +19210,9 @@ msgid "" "stories contained herein belong to a different time, before the dead walked " "and the world moved on." msgstr "" +"Маленькая книжка для маленьких читателей. Колоритные персонажи мультфильмов " +"и увлекательные истории из прежнего мира, до того как смерть начала своё " +"шествие." #: lang/json/json_items.py msgid "" @@ -18809,6 +19224,7 @@ msgstr "" msgid "" "A long cotton dress. Though comfortable to wear, it lacks any storage space." msgstr "" +"Длинное платье из хлопка. Удобное, но в нем нет места для хранения предметов." #: lang/json/json_items.py msgid "A long fur scarf, worn over the mouth for warmth." @@ -18819,11 +19235,21 @@ msgid "" "A long handle with a big metal head, flat on one side, for driving golf " "balls. Fore!" msgstr "" +"Длинная палка с большим металлическим набалдашником на конце, плоским с " +"одной стороны. Используется для игры в гольф. Эй, поберегись!" #: lang/json/json_items.py msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "Длинная нейлоновая верёвка. Полезно, чтобы удержать себя от падения." +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" +"Длинная деревянная палка с куском стали привязанным на конце. Медленное в " +"обращение, но очень мощное." + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18901,6 +19327,8 @@ msgid "" "A magazine about mechanical innovations. Full of entertaining articles and " "advertisements for esoteric gadgets." msgstr "" +"Журнал о новостях науки и техники. Полон развлекательных статей и рекламы " +"экзотических устройств." #: lang/json/json_items.py msgid "" @@ -19025,6 +19453,9 @@ msgid "" "punches to do extra damage. A good, quick weapon - but you have to get " "within punching range to use it." msgstr "" +"Металлическое оружие из латуни, надеваемое на пальцы, для нанесения " +"дополнительного урона в рукопашном бою. Хорошее, быстрое оружие, но подходит " +"только для ближнего боя." #: lang/json/json_items.py msgid "" @@ -19050,6 +19481,8 @@ msgid "" "A minimalist pump action shotgun, which can be mounted under the barrel of " "many rifles. It allows a total of four shotgun shells to be loaded and fired." msgstr "" +"Небольшой дробовик, который крепиться к стволу большинства винтовок. Магазин " +"рассчитан на четыре патрона." #: lang/json/json_items.py msgid "" @@ -19076,6 +19509,9 @@ msgid "" "into a filtered paper tube. Stimulates mental acuity and reduces appetite. " "Highly addictive and hazardous to health." msgstr "" +"Смесь сушеных листьев табака, пестицидов и химических добавок, завернутая в " +"бумажную трубочку. Стимулирует умственную активность и снижает аппетит. " +"Вызывает сильное привыкание и опасно для здоровья." #: lang/json/json_items.py msgid "" @@ -19189,24 +19625,27 @@ msgid "" "A one-handed hatchet. Makes a great melee weapon, and is useful both for " "cutting wood, and for use as a hammer." msgstr "" -"Одноручный топор. Превосходное оружие ближнего боя, также используемый для " -"колки дров или в качестве молотка." +"Обычный топор, которым можно работать одной рукой. Превосходное оружие " +"ближнего боя, также используемый для колки дров или в качестве молотка." #: lang/json/json_items.py msgid "" "A one-piece suit of full-body long underwear that helps to maintain body " "temperature." msgstr "" +"Нижнее белье для всего тела, которое помогает поддерживать температуру тела." #: lang/json/json_items.py msgid "" "A pack of 25 firecrackers that has been lit; the fuse is hissing. Throw them " "quickly before the start to explode." msgstr "" +"Упаковка с 25 петардами, запал подожжён и искрится. Бросьте их быстрее, " +"прежде чем они начнут взрываться." #: lang/json/json_items.py msgid "A padded coat with deep pockets and a hood. Very warm." -msgstr "" +msgstr "Теплое пальто с глубокими карманами и капюшоном. Очень теплое." #: lang/json/json_items.py msgid "" @@ -19293,6 +19732,20 @@ msgid "A pair of high heels. Difficult to even walk in." msgstr "" "Туфли на высоких каблуках. В них неудобно не то что бегать, а даже ходить." +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "Штаны цвета хаки. Немного теплее, чем джинсы." @@ -19305,6 +19758,12 @@ msgstr "Шорты цвета хаки." msgid "A pair of knee pads made of stout plastic and cloth." msgstr "Пара наколенников, сделанных из прочного пластика и ткани." +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -19372,6 +19831,8 @@ msgstr "" msgid "" "A pair of rubber boots, often used while cleaning with caustic materials." msgstr "" +"Пара ботинок из резины, обычно используется при уборке едкими моющими " +"средствами." #: lang/json/json_items.py msgid "" @@ -19389,11 +19850,10 @@ msgid "A pair of soft neoprene arm sleeves, often used in contact sports." msgstr "Пара мягких неопреновых наручей, часто применяемых в спорте." #: lang/json/json_items.py -#, fuzzy msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." -msgstr "Солнцезащитные очки, хороши для защиты ваших глаз от бликов." +msgstr "Пара стильных солнечных очков. Здорово смотрятся и защищают от солнца." #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." @@ -19418,7 +19878,7 @@ msgstr "Пара тонких латексных медицинских перч msgid "" "A pair of very flexible neoprene-silicon rubber gloves, suitable for " "underwater use." -msgstr "" +msgstr "Эластичные, резиновые перчатки, пригодные для использования под водой." #: lang/json/json_items.py msgid "A pair of warm fur gloves. They are somewhat cumbersome." @@ -19468,6 +19928,7 @@ msgid "" "A pilot light from a gas-burning device, this particular one is a simple " "piezo electric igniter." msgstr "" +"Поджигатель в газобаллонном оборудовании. Сделан на основе пьезоэлемента." #: lang/json/json_items.py msgid "" @@ -19475,6 +19936,9 @@ msgid "" "handgun, allowing a melee attack to deal piercing damage. The added length " "reduces the gun's overall handling somewhat." msgstr "" +"Пистолетный штык - это оружие, которое крепиться к стволу пистолета и " +"позволяет наносить колющий урон в ближнем бою.\r\n" +"Увеличенная длина ствола, делает пистолет менее удобным." #: lang/json/json_items.py msgid "" @@ -19512,6 +19976,8 @@ msgstr "" #: lang/json/json_items.py msgid "A plastic single shot pistol made to fire signal flares." msgstr "" +"Пластиковый однозарядный пистолет, предназначенный для запуска сигнальных " +"ракет" #: lang/json/json_items.py msgid "" @@ -19613,12 +20079,16 @@ msgid "" "A potent sleep aid extracted from mutated poppy seeds. Effective, but as an " "opiate, it may be addictive." msgstr "" +"Неплохое средство, сделанное из мутировавшего мака, помогающее заснуть. " +"Эффективное, но вызывает зависимость." #: lang/json/json_items.py msgid "" "A powdered antihemorrhagic compound that reacts with blood to immediately " "form a gel-like substance which stops bleeding." msgstr "" +"Порошкообразное кровоостанавливающее средство, которое реагирует с кровью " +"образуя гель, тем самым останавливая кровотечение." #: lang/json/json_items.py msgid "" @@ -19658,6 +20128,8 @@ msgid "" "A printed card that supports and electrically connects electronic components " "on a non-conductive substrate." msgstr "" +"Плата для соединения и монтажа электронных компонентов на токонепроводящей " +"подложке." #: lang/json/json_items.py msgid "A professional-looking wool blazer. Quite cumbersome." @@ -19730,7 +20202,7 @@ msgstr "Клетчатый охотничий картуз. Весьма тёп #: lang/json/json_items.py msgid "A red, sweet fruit which grows in trees." -msgstr "" +msgstr "Красный, сладкий плод, растущий на деревьях." #: lang/json/json_items.py msgid "A resealable glass bottle, holds 750 ml of liquid." @@ -19805,6 +20277,8 @@ msgid "" "A set of ergonomic replacement furniture for a pistol, improves recoil and " "accuracy. Aside from increased weight, there are no drawbacks." msgstr "" +"Заменяет стандартную рукоять на пистолете, уменьшая отдачу и увеличивая " +"точность. Из недостатков - только увеличение веса." #: lang/json/json_items.py msgid "" @@ -19860,6 +20334,9 @@ msgid "" "providing moderate damage and accuracy. Stands a good chance of remaining " "intact once fired." msgstr "" +"Заостренный арбалетный болт сделанный из метала. Тяжелый и громоздкий. " +"Обладает средней пробивной способностью и точностью. Велика вероятность " +"повторного использования после выстрела." #: lang/json/json_items.py msgid "" @@ -19867,6 +20344,8 @@ msgid "" "providing moderate accuracy, because it's been filled with explosives and " "fitted with an impact trigger." msgstr "" +"Заостренный металлический арбалетный болт. Легкий, но громоздкий. Обладает " +"средней точностью, так как начинен взрывчаткой и снабжен детонатором." #: lang/json/json_items.py msgid "A sheet sturdy superalloy, incredibly hard, yet incredibly malleable." @@ -19900,10 +20379,12 @@ msgid "" "A short and sharp double edged dagger made to be gripped in the palm, with " "the blade protruding between the fingers." msgstr "" +"Короткий обоюдоострый Т-образный кинжал. Его зажимают в руке так, что лезвие " +"оказывается между пальцами." #: lang/json/json_items.py msgid "A short dart from a fungal fighter. Makes an average melee weapon." -msgstr "" +msgstr "Короткий дротик фунгалойда-бойца. Средний рукопашный урон." #: lang/json/json_items.py msgid "A short piece of nylon rope. Too small to be of much use." @@ -19911,6 +20392,22 @@ msgstr "" "Короткий кусок нейлоновой верёвки. Слишком маленький, чтоб где-нибудь " "пригодиться." +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" +"Короткий кусок стали заостренный с одного конца. Может использоваться как " +"боеприпас к достаточно мощному ферромагнитному оружию." + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -19933,6 +20430,9 @@ msgid "" "increase in noise, but also reduces recoil greatly as a result of the " "improved manageability of the firearm." msgstr "" +"Укороченный ствол заметно снижает точность, немного усиливает звук выстрела. " +"Однако он значительно уменьшает отдачу в результате повышается управляемость " +"огнестрельным оружием." #: lang/json/json_items.py msgid "" @@ -20021,6 +20521,8 @@ msgid "" "fragile, wearing it will provide excellent protection against ambient " "radiation." msgstr "" +"Лёгкий костюм химической защиты. Не очень прочный и слегка стесняющий " +"движения, зато обеспечивает отличную защиту от радиационного излучения." #: lang/json/json_items.py msgid "A simple leather bikini top." @@ -20098,6 +20600,14 @@ msgstr "" "Однозарядный пистолет, снаряжаемый патронами 12 калибра для дробовиков. " "Сделан из подручных материалов." +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -20125,6 +20635,14 @@ msgstr "Хлопковая майка камуфляжной расцветки. msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "Хлопковая майка. Не стесняет движений." +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" +"Длинный стержень из дерева. Обычно используется для тренировки движений в " +"драке. Хорошее оружие ближнего боя, если больше ничего нет." + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -20212,7 +20730,7 @@ msgstr "Металлический шлем, защищающий голову #: lang/json/json_items.py msgid "A small metal teapot. Teatime wouldn't be complete without one." -msgstr "" +msgstr "Маленький железный чайник. Без него не обойдется ни одно чаепитие." #: lang/json/json_items.py msgid "" @@ -20225,6 +20743,7 @@ msgstr "" #: lang/json/json_items.py msgid "A small pane of glass strengthened with steel wiring." msgstr "" +"Небольшой прямоугольный кусок стекла, армированного стальной проволокой." #: lang/json/json_items.py msgid "A small piece of cotton string." @@ -20259,7 +20778,7 @@ msgstr "" #: lang/json/json_items.py msgid "A small storage battery. Useful for crafting." -msgstr "" +msgstr "Небольшой аккумулятор. Полезен при крафте." #: lang/json/json_items.py msgid "" @@ -20295,7 +20814,7 @@ msgstr "" #: lang/json/json_items.py msgid "A small, open plastic bag. Essentially trash." -msgstr "Маленький, открытый пластиковый пакет. Мусор." +msgstr "Маленький, открытый пластиковый пакет, сам по себе мусор." #: lang/json/json_items.py msgid "A smallish patch of leather, could be used to make tough clothing." @@ -20309,16 +20828,21 @@ msgid "" "reinforced with metal bands and caps. Durable and well-balanced, it is " "surprisingly easy to handle." msgstr "" +"Гладкий и прочный посох с кожаной рукоятью, усиленный металлическими " +"наконечниками. Прочный и хорошо сбалансированный. Удивительно прост в " +"обращении." #: lang/json/json_items.py msgid "" "A smooth and sturdy staff with a leather-wrapped grip. Light and well-" "balanced, it is surprisingly easy to handle." msgstr "" +"Гладкий и прочный посох с кожаной рукоятью. Легкий и хорошо " +"сбалансированный. Удивительно прост в обращении." #: lang/json/json_items.py msgid "A smooth-skinned fruit, related to the peach." -msgstr "" +msgstr "Гладкокожий фрукт, похожий на персик." #: lang/json/json_items.py msgid "" @@ -20331,6 +20855,8 @@ msgid "" "A snug, black leather corset. Has no pockets, but its thick material " "provides good protection from harm." msgstr "" +"Удобный корсет из черной кожи. Нет карманов, но толстый материал дает " +"неплохую защиту." #: lang/json/json_items.py msgid "A snug-fitting cotton hat. Quite warm." @@ -20357,7 +20883,7 @@ msgstr "" #: lang/json/json_items.py msgid "A soft wool hat commonly worn by armed forces and existentialists." -msgstr "" +msgstr "Мягкий шерстяной головной убор. Его носят военные и экзистенциалисты." #: lang/json/json_items.py msgid "" @@ -20365,6 +20891,8 @@ msgid "" "protect the delicate solar cells from zombies or errant baseballs. Useful " "for crafting." msgstr "" +"Солнечная панель закрытая армированным стеклом для защиты от зомби и " +"прочего. Используется при крафте." #: lang/json/json_items.py msgid "" @@ -20378,6 +20906,15 @@ msgid "" "Of course, you will need a lighter or some matches to do so. Shortly after " "you light the fuse it will explode, so throw it quickly!" msgstr "" +"Петарда с коротким запалом. Активируйте, чтобы поджечь запал. Для этого " +"потребуется зажигалка или спички. Вскоре после поджога запала она взорвётся, " +"поэтому бросьте её как можно быстрее!" + +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "Заостренный кусок арматуры, которым все же лучше бить, чем колоть." #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." @@ -20450,14 +20987,17 @@ msgid "" "A stout metal box used for producing charcoal via pyrolysis; the incomplete " "burning of organic materials in the absence of oxygen." msgstr "" +"Массивный металлический ящик, используемый для изготовления древесного угля " +"с помощью пиролиза; неполное сгорание органических веществ без доступа " +"воздуха." #: lang/json/json_items.py msgid "A stout metal pole with a sharp point." -msgstr "" +msgstr "Толстая металическая палка с острым окончанием." #: lang/json/json_items.py msgid "A stout pole with an improvised grip and a fire-hardened point." -msgstr "" +msgstr "Толстая палка с самодельной ручкой и обожженным на огне острием." #: lang/json/json_items.py msgid "" @@ -20465,6 +21005,9 @@ msgid "" "an Okinawan weapon, it consists of a stick with a perpendicular handle " "attached a third of the way down its length." msgstr "" +"Толстая деревянная дубинка, которая обычно используется полицией. Родом из " +"острова Окинава, состоит из палки с перпендикулярной рукояткой, " +"прикрепленной на трети ей длины." #: lang/json/json_items.py msgid "" @@ -20527,6 +21070,8 @@ msgid "" "A suit of snug, black leather. Has no pockets, but does feature an abundance " "of unusually located zippers." msgstr "" +"Костюм из облегающей, черной коже. Нет карманов, но много застегивающихся " +"молний." #: lang/json/json_items.py msgid "A super-hero comic." @@ -20534,7 +21079,7 @@ msgstr "Комикс про супергероев." #: lang/json/json_items.py msgid "A suspenseful tale of betrayal and revenge." -msgstr "" +msgstr "Захватывающий рассказ о предательстве и мести." #: lang/json/json_items.py msgid "" @@ -20543,18 +21088,17 @@ msgstr "Толстовка с капюшоном и большим карман #: lang/json/json_items.py msgid "A sweet red berry." -msgstr "" +msgstr "Сладкая, красная ягода" #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"Штык — это колющее оружие, которое можно установить на дробовики, пистолеты-" -"пулеметы или винтовки. Способен наносить режущий урон в рукопашном бою, " -"нарушает баланс оружия и незначительно увеличивает отдачу." +"Меч-штык большое режущее оружие, которое может быть прикреплено к стволу " +"винтовки или дробовика, позволяя атаковать в ближнем бою. Значительно " +"увеличивает отдачу." #: lang/json/json_items.py msgid "" @@ -20562,6 +21106,9 @@ msgid "" "stimulant when you inject yourself with it. Asthmatics can use it in an " "emergency to clear their asthma." msgstr "" +"Шприц с инъекцией адреналина. Сильнодействующий стимулятором. Астматики " +"могут его использовать его в чрезвычайных ситуациях, чтобы избавиться от " +"астмы." #: lang/json/json_items.py msgid "A t-shirt embroidered with the pattern of an American flag." @@ -20597,7 +21144,7 @@ msgstr "Вкусный и питательный бульон из костей. #: lang/json/json_items.py msgid "A tasty and nutritious fried bread treat." -msgstr "" +msgstr "Вкусная и питательная обжаренная хлебная лепёшка." #: lang/json/json_items.py msgid "A tasty summer squash." @@ -20620,6 +21167,7 @@ msgid "" "A thick and tasty beverage made from pure refined protein and nutritious " "fruit." msgstr "" +"Сочный и вкусный напиток сделанный из чистого протеина и питательных фруктов." #: lang/json/json_items.py msgid "A thick cotton shirt. Provides warmth and a bit of padding." @@ -20638,6 +21186,8 @@ msgid "" "A thick leather body suit made for protection while riding motorcycles. " "Light and very comfortable." msgstr "" +"Толстый кожаный костюм для защиты при езде на мотоцикле. Легкий и очень " +"удобный." #: lang/json/json_items.py msgid "A thick leather helmet that provides excellent protection for the head." @@ -20660,6 +21210,8 @@ msgid "" "A thick soft-cover book filled with vital information about surviving in the " "wild, aimed at the experienced backpacker." msgstr "" +"Толстая книга в мягкой обложке, содержит жизненно важную информацию о " +"выживании в условиях дикой природы. Предназначена для опытных туристов." #: lang/json/json_items.py msgid "" @@ -20698,10 +21250,12 @@ msgid "" "A thin and flat knife made for throwing. Its ineffective cutting edge and " "odd shape makes it unsuitable for use as a tool." msgstr "" +"Тонкий и плоский нож, созданный для метания. Его лезвие и форма делает его " +"непригодным для использования в качестве инструмента." #: lang/json/json_items.py msgid "A thin cotton jacket with a hood. Good for brisk weather." -msgstr "" +msgstr "Тонкий хлопоковый жакет с капюшоном. Одевается в прохладную погоду." #: lang/json/json_items.py msgid "A thin cotton trenchcoat, lined with pockets. Great for storage." @@ -20710,7 +21264,7 @@ msgstr "" #: lang/json/json_items.py msgid "A thin pair of black leather gloves." -msgstr "" +msgstr "Пара тонких перчаток из черной кожи." #: lang/json/json_items.py msgid "A thin sheet of metal." @@ -20721,6 +21275,8 @@ msgid "" "A thin slurry of refined protein mixed with water. While quite nutritious, " "it is not particularly tasty." msgstr "" +"Мелкодисперсная суспензия рафинированного белка, смешанного с водой. " +"Питательная, но не вкусная." #: lang/json/json_items.py msgid "A thin wooden skewer. Squirrel on a stick, anyone?" @@ -20752,7 +21308,7 @@ msgstr "" msgid "" "A tight mask made of black leather. The eyes and mouth can be closed using " "zippers." -msgstr "" +msgstr "Тугая маска из черной кожи. Глаза и рот можно застегнуть молниями." #: lang/json/json_items.py msgid "A tin can, like what beans come in." @@ -20775,6 +21331,8 @@ msgid "" "A tool used to drive nails into wood or other material. It could also be " "used as a ad-hoc weapon." msgstr "" +"Инструмент используемый, чтобы вгонять гвозди в дерево или другой материал. " +"Может быть использовано, как специализированное оружие." #: lang/json/json_items.py msgid "" @@ -20798,11 +21356,12 @@ msgstr "Прочная куртка с множеством карманов. П #: lang/json/json_items.py msgid "A tough pair of pants lined with pockets. Favored by the military." -msgstr "Жёсткие штаны с множеством карманов. Выбор военных." +msgstr "Прочные штаны с множеством карманов. Выбор военных." #: lang/json/json_items.py msgid "A tough sinew cut from a corpse, usable as thread." msgstr "" +"Жесткое сухожилие из трупа, пригодное для использования в качестве нити." #: lang/json/json_items.py msgid "" @@ -20927,10 +21486,12 @@ msgid "" "A very small fridge for keeping food cool, but without electricity it's just " "a very heavy box with shelves inside." msgstr "" +"Очень маленький холодильник для охлаждения продуктов, но без электропитания " +"- просто большая коробка с полками." #: lang/json/json_items.py msgid "A very sweet and soft tropical fruit." -msgstr "" +msgstr "Очень сладкий и мягкий тропический фрукт." #: lang/json/json_items.py msgid "A vest made from thick leather. Offers excellent protection from cuts." @@ -20952,7 +21513,7 @@ msgid "" "A waterproof hood made to be worn in bad weather. Provides extra protection " "from rain." msgstr "" -"Водонепроницаемый козырек для защиты от непогоды. Отлично защищает от дождя." +"Водонепроницаемый капюшон для защиты от непогоды. Отлично защищает от дождя." #: lang/json/json_items.py msgid "A watertight leather bag, can hold 1.5 liters of water." @@ -20982,6 +21543,8 @@ msgid "" "A well-thumbed hardbound book which illustrates simple strategies and " "techniques for close quarters combat encounters." msgstr "" +"Замусоленная книга в твердом переплете, которая иллюстрирует простую " +"стратегию и приемы ближнего боя." #: lang/json/json_items.py msgid "A white button-down shirt with long sleeves. Looks professional!" @@ -21054,7 +21617,7 @@ msgstr "лазер A7" #: lang/json/json_items.py msgid "AEP suit" -msgstr "" +msgstr "костюм AEP" #: lang/json/json_items.py msgid "AK-47" @@ -21062,7 +21625,7 @@ msgstr "AK-47" #: lang/json/json_items.py msgid "ANBC suit" -msgstr "" +msgstr "костюм ANBC" #: lang/json/json_items.py msgid "AR-15" @@ -21086,6 +21649,9 @@ msgid "" "Adds a holographic sight. Used extensively by military forces, it increases " "accuracy and weight but is a step up from a red dot sight." msgstr "" +"Добавляет голографическую метку. Активно используется военными. Увеличивает " +"точность и вес. Представляет из себя следующий шаг в развитии систем " +"наведения, после прицела с красной точкой." #: lang/json/json_items.py msgid "" @@ -21112,6 +21678,8 @@ msgid "" "After their diamond heist goes wrong, the surviving criminals begin to " "suspect that one of them is a police informant." msgstr "" +"После того как кража алмазов пошла не так, уцелевшие преступники начинают " +"подозревать, что один из них полицейский информатор." #: lang/json/json_items.py msgid "" @@ -21132,7 +21700,7 @@ msgstr "" #: lang/json/json_items.py msgid "Alpha Male Quarterly" -msgstr "" +msgstr "мужской журнал \"Альфа\"" #: lang/json/json_items.py msgid "Also called a \"bucket hat.\" Often used in the military." @@ -21176,12 +21744,16 @@ msgid "" "An add on stock for handguns, improves recoil and accuracy. Aside from " "increased weight, there are no drawbacks." msgstr "" +"Добавляет приклад пистолету. Уменьшает отдачу и увеличивает точность. Из " +"недостатков - только увеличение веса." #: lang/json/json_items.py msgid "" "An adjustable replacement stock, improves recoil and accuracy. Aside from " "increased weight, there are no drawbacks." msgstr "" +"Регулируемый приклад уменьшает отдачу и увеличивает точность. Из недостатков " +"- только увеличение веса." #: lang/json/json_items.py msgid "" @@ -21211,22 +21783,17 @@ msgstr "" "Обратной стороной медали является снижение емкости магазина." #: lang/json/json_items.py -#, fuzzy msgid "" "An all-encompassing black helmet that covers your entire face and neck, " "providing excellent protection from all sorts of damage." msgstr "" -"Лёгкая чёрная каска, обеспечивающая превосходную защиту голову от любых " -"видов повреждений." #: lang/json/json_items.py -#, fuzzy msgid "" "An aluminium baseball bat, lighter than a wooden bat and a little easier to " "swing as a result." msgstr "" -"Алюминиевая бейсбольная бита, меньше и легче чем деревянная, но так же " -"наносит меньше повреждений" +"Алюминиевая бейсбольная бита. Легче, чем деревянная, поэтому ей легче махать." #: lang/json/json_items.py msgid "An aluminum can, like what soda comes in." @@ -21244,18 +21811,25 @@ msgid "" "in the wild, potentially containing great knowledge an experienced " "outdoorsman." msgstr "" +"Развлекательный исторический роман, наполненный подробными описаниями " +"выживания в дикой природе, содержит огромное количество необходимой " +"информации для опытных туристов." #: lang/json/json_items.py msgid "" "An amusing magazine about ham radio, with lots of diagrams and illustrations " "for making your own electronic devices." msgstr "" +"Развлекательный журнал о радиолюбителях, с обилием принципиальных схем и " +"иллюстраций для создания электронных устройств своими руками." #: lang/json/json_items.py msgid "" "An annual publication about fencing and dueling. There are many good " "illustrations which describe proper technique and form." msgstr "" +"Ежегодная публикация о фехтовании. Много хороших иллюстраций, которые " +"описывают правильную технику." #: lang/json/json_items.py msgid "An apple a day keeps the doctor away." @@ -21275,6 +21849,9 @@ msgid "" "body armor, it provides excellent protection against both physical harm and " "ambient radiation." msgstr "" +"Бронированный скафандр защищающий от вредного воздействия окружающей среды . " +"Построен на основе от бронежилета и лабораторного костюма, он обеспечивает " +"отличную защиту как от физического вреда, так и от радиационного излучения." #: lang/json/json_items.py msgid "" @@ -21282,6 +21859,8 @@ msgid "" "of all sorts, functioning as body armor as well as protecting from nuclear, " "biological, and chemical hazards." msgstr "" +"Бронированный и герметичный костюм покрывающий все тело. Защищает от всех " +"типов угроз(радиационных, химических, биологических)" #: lang/json/json_items.py msgid "" @@ -21373,7 +21952,7 @@ msgstr "Пустая гильза от патрона Casull .454" msgid "" "An empty casing from a .50 BMG round. These are rare, so you might want to " "hold onto these." -msgstr "" +msgstr "Пустая гильза .50 BMG. Очень редко встречаются." #: lang/json/json_items.py msgid "An empty casing from a .500 S&W Magnum round." @@ -21425,6 +22004,8 @@ msgid "" "An exciting monthly magazine about boxing. There are lots of large, colorful " "photos of pugilistic exploits." msgstr "" +"Захватывающий ежемесячный журнал о боксе. Много больших, красочных " +"фотографий о кулачных боях." #: lang/json/json_items.py msgid "" @@ -21457,6 +22038,10 @@ msgstr "Комплект очень тяжёлых доспешных сапог msgid "An extremely heavy set of armor plated gloves." msgstr "Комплект очень тяжёлых доспешных перчаток." +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21470,6 +22055,9 @@ msgid "" "materials. Though very restrictive and fragile, wearing it will provide " "complete protection against ambient radiation." msgstr "" +"Герметичная одежда, покрывающая все тело. Носится для защиты при работе с " +"опасными материалами. Хрупкая и сковывает движения, однако обеспечивают " +"полную защиту от радиационного излучения." #: lang/json/json_items.py msgid "" @@ -21484,6 +22072,8 @@ msgid "" "An in-depth book about trapping game animals, covering methods both modern " "and ancient." msgstr "" +"Книга, содержащая подробную информацию об охоте на диких зверей с помощью " +"ловушек и капканов. Описывает массу способов, от старинных до современных." #: lang/json/json_items.py msgid "" @@ -21502,6 +22092,8 @@ msgid "" "An in-depth magazine about trapping game. There are lots of articles and " "diagrams that explain simple trap designs." msgstr "" +"Подробный журнал о ловушках. Есть много статей и диаграмм, которые объясняют " +"устройство простых ловушек." #: lang/json/json_items.py msgid "" @@ -21515,6 +22107,8 @@ msgid "" "and recoilless weaponry. Lavishly illustrated with color photographs, it " "contains a wealth of information." msgstr "" +"Очень подробное руководство по современным ракетам, мортирам, гранатометам и " +"безоткатному вооружению. Много цветных фотографий и ценных сведений." #: lang/json/json_items.py msgid "" @@ -21522,17 +22116,24 @@ msgid "" "law enforcement and military market, it is packed with time tested, no-" "nonsense information and written to be understandable for beginners." msgstr "" +"Информативное руководство по самообороне с использованием дубинок. " +"Предназначенная для сотрудников правоохранительных органов и военного " +"персонала. Содержит проверенную временем, актуальную информацию. Написана, " +"так чтобы быть понятной новичкам." #: lang/json/json_items.py msgid "" "An informative magazine all about computers, both hardware and software." msgstr "" +"Информационный журнал о компьютерах, их программном и аппаратном обеспечении." #: lang/json/json_items.py msgid "" "An informative magazine all about rifles and shooting. There is an excellent " "article about proper maintenance in this issue." msgstr "" +"Поучительный журнала о винтовках и стрельбе. Есть отличная статья о " +"надлежащем обслуживании оружия." #: lang/json/json_items.py msgid "" @@ -21545,6 +22146,9 @@ msgid "" "An interesting quarterly report about rocket launchers and recoilless " "rifles. There are lots of large, exciting photos of explosions and weaponry." msgstr "" +"Интересный ежеквартальный журнал о гранатомётах и безоткатных орудиях. " +"Содержит большое количество чётких и захватывающих фотографий взрывов и " +"оружия." #: lang/json/json_items.py msgid "" @@ -21587,6 +22191,8 @@ msgid "" "An oval made of leather and string, it's easily thrown but does little " "damage. You could take it apart into leather if you wanted." msgstr "" +"Шар сделанный из кожи. Легко бросить, но наносит мало урона. Можно разрезать " +"на куски кожи." #: lang/json/json_items.py msgid "An umbrella with a pointy end, useful for keeping dry when wielded." @@ -21615,12 +22221,16 @@ msgstr "" msgid "" "Antibacterial medication designed to prevent or stop the spread of infection." msgstr "" +"Антибактериальный препарат, основным назначением которого является остановка " +"распространения инфекции." #: lang/json/json_items.py msgid "" "Antifungal medication designed to destroy fungal infections and force spores " "from the body." msgstr "" +"Противофунголойдное средство. Способствует уничтожению спор и выводу их из " +"организма." #: lang/json/json_items.py msgid "" @@ -21679,7 +22289,7 @@ msgstr "" #: lang/json/json_items.py msgid "Autobiography of a Mountain Man" -msgstr "" +msgstr "\"Автобиография охотника\"" #: lang/json/json_items.py msgid "BB" @@ -21706,8 +22316,8 @@ msgid "" "less than ideal circumstances." msgstr "" "Штурмовая винтовка Rivtech RM51 поступила в серийное производство как раз " -"перед концом света. Это надежное и легкое в использование оружие для " -"операций в совсем неидеальных условиях." +"перед концом света. Это надежное и лёгкое в использовании оружие для " +"операций в неблагоприятных условиях." #: lang/json/json_items.py msgid "" @@ -21716,7 +22326,7 @@ msgid "" "under less than ideal circumstances." msgstr "" "Боевая винтовка Rivtech RM88 поступила в серийное производство как раз перед " -"концом света. Это надежное и мощное оружие для операций в совсем неидеальных " +"концом света. Это надёжное и мощное оружие для операций в неблагоприятных " "условиях." #: lang/json/json_items.py @@ -21738,11 +22348,11 @@ msgstr "" #: lang/json/json_items.py msgid "Batter Up!" -msgstr "" +msgstr "Отбивай!" #: lang/json/json_items.py msgid "Beauty Magazine" -msgstr "" +msgstr "Журнал \"Красота\"" #: lang/json/json_items.py msgid "" @@ -21760,6 +22370,8 @@ msgid "" "Bipods are commonly used on rifles and machine guns to provide a forward " "rest and reduce motion. Aside from increased weight, there are no drawbacks." msgstr "" +"Сошки используется для уменьшения разброса при стрельбе. Кроме увеличения " +"веса, других недостатков нет." #: lang/json/json_items.py msgid "Birdhouse Monthly" @@ -21774,6 +22386,8 @@ msgid "" "Body armor consisting of a leather backing suit with bone reinforcement. " "Light and strong." msgstr "" +"Бронежилет, состоящий из кожаного костюма укрепленного костями. Легкий и " +"прочный." #: lang/json/json_items.py msgid "Boeing XM-P plasma rifle" @@ -21807,7 +22421,7 @@ msgstr "Ботинки, сшитые из кусочков панциря нас #: lang/json/json_items.py msgid "Boxing Monthly" -msgstr "" +msgstr "журнал о боксе" #: lang/json/json_items.py msgid "Bread and meat, that's it." @@ -21815,7 +22429,7 @@ msgstr "" #: lang/json/json_items.py msgid "Bright pink chewing gum. Sugary, sweet, and bad for your teeth." -msgstr "" +msgstr "Ярко розовая жевательная резинка. Сладкая и вредная для зубов." #: lang/json/json_items.py msgid "Bright pink fish-paste in a can!" @@ -21881,12 +22495,18 @@ msgid "" "other volatile constituents from animal and vegetation substances. It is " "produced by slowly heating wood or other substances in the absence of oxygen." msgstr "" +"Древесный уголь это горючий углеродистый материал, полученный удалением воды " +"и других летучих компонентов из животного и растительного вещества. " +"Производится путем медленного нагревания древесины или других органических " +"веществ без доступа воздуха." #: lang/json/json_items.py msgid "" "Chewing gum with added caffeine. Sugary and bad for your teeth, but it's a " "nice pick-me-up." msgstr "" +"Жевательная резинка с добавлением кофеина. Сладкая и вредная для зубов. " +"Обладает бодрящим эффектом." #: lang/json/json_items.py msgid "Chocolate isn't very healthy, but it does make a delicious treat." @@ -21897,6 +22517,9 @@ msgid "" "Claimed to be the world's most powerful handgun round, the .500 S&W Magnum " "was developed in tandem with the revolutionary S&W 500 Revolver." msgstr "" +"Обойма патрон .500 S&W Магнум, одних из мощнейших пистолетных патронов в " +"мире, была разработана компанией \"Smith and Wesson\" одновременно вместе с " +"крутейшим револьвером S&W 500." #: lang/json/json_items.py msgid "Clear juice obtained by cooking fruit in a large volume of water" @@ -21908,7 +22531,7 @@ msgstr "Очевидно же, идеальный инструмент. Гора #: lang/json/json_items.py msgid "Close Quarter Fighting Manual" -msgstr "" +msgstr "Руководство по борьбе" #: lang/json/json_items.py msgid "Coffee. The morning ritual of the pre-apocalypse world." @@ -21936,7 +22559,7 @@ msgstr "\"Информатика 301\"" #: lang/json/json_items.py msgid "Computer World" -msgstr "" +msgstr "\"Компьютерный мир\"" #: lang/json/json_items.py msgid "Concentrated acid. Don't drink it." @@ -21948,14 +22571,16 @@ msgid "" "charge and generally lacks gunpowder. The end result is a subsonic round. It " "is nearly silent, but is so weak as to be nearly useless." msgstr "" +"Патрон Флобера .22 калибра. В нём вместо пороха используется капсюльный " +"состав. Практически бесшумен, но настолько слаб, что почти бесполезен." #: lang/json/json_items.py msgid "" "Considered overkill by many, the Rivtech M103A remains one of the most " "powerful sidearms ever developed." msgstr "" -"Rivtech M103A одно из самого мощного когда-либо разработанного личного " -"оружия." +"Rivtech M103A один из самых мощных пистолетов среди когда-либо " +"разработанного личного оружия." #: lang/json/json_items.py msgid "" @@ -22044,22 +22669,29 @@ msgid "" "Dehydrated fruit flakes. With proper storage, this dried food will remain " "edible for an incredibly long time." msgstr "" +"Сушёные кусочки фруктов. При правильном хранении, эта высушенная еда будет " +"оставаться съедобной невероятно долго." #: lang/json/json_items.py msgid "" "Dehydrated meat flakes. With proper storage, this dried food will remain " "edible for an incredibly long time." msgstr "" +"Сушёные кусочки мяса. При правильном хранении, эта высушенная еда будет " +"оставаться съедобной невероятно долго." #: lang/json/json_items.py msgid "Dehydrated milk powder. Mix with water to make drinkable milk." msgstr "" +"Сухой молочный порошок. Смешайте с водой, чтобы получить питьевое молоко." #: lang/json/json_items.py msgid "" "Dehydrated vegetable flakes. With proper storage, this dried food will " "remain edible for an incredibly long time." msgstr "" +"Сушёные кусочки овощей. При правильном хранении, эта высушенная еда будет " +"оставаться съедобной невероятно долго." #: lang/json/json_items.py msgid "" @@ -22088,6 +22720,8 @@ msgid "" "Deprotonated cocaine crystals, incredibly addictive and deleterious to brain " "chemistry." msgstr "" +"Депротонированные кристаллы кокаина, вызывают быстрое привыкание и разрушают " +"мозг." #: lang/json/json_items.py msgid "" @@ -22145,6 +22779,9 @@ msgid "" "Designed to defeat modern body armor, the Rivtech 5x50mm flechette round " "features a biodegradable sabot and a single, fin-stabilized penetrator." msgstr "" +"Оперенные подкалиберные патроны Rivtech 5x50мм разработаны для пробивания " +"современных бронежилетов, их отличительной чертой является биоразлагающийся " +"поддон и сердечник со стабилизатором." #: lang/json/json_items.py msgid "" @@ -22210,7 +22847,7 @@ msgstr "\"Дискомёт\"" #: lang/json/json_items.py msgid "Do not try to bend the spoon. That is impossible." -msgstr "" +msgstr "Не пытайся согнуть ложку. Это невозможно." #: lang/json/json_items.py msgid "Don't drink it; feed it to your plants!" @@ -22251,6 +22888,7 @@ msgstr "Выпив это, можно почувствовать себя пир #: lang/json/json_items.py msgid "Dry and salty, these crackers will leave you quite thirsty." msgstr "" +"Сухие и солёные, эти кондитерские изделия оставят после себя чувство жажды." #: lang/json/json_items.py msgid "" @@ -22260,7 +22898,7 @@ msgstr "" #: lang/json/json_items.py msgid "Duelist's Annual" -msgstr "" +msgstr "журнал Дуэлянт" #: lang/json/json_items.py msgid "EMP grenade" @@ -22295,6 +22933,9 @@ msgid "" "feel confident that you won't have to worry about depleting its power supply " "for at least 160 million years of faithful service." msgstr "" +"Наслаждайтесь спокойным синим черенковским свечением атомного ночника от " +"компании Rivtech. Будьте уверены, ближайшие 160 миллионов лет верной службы " +"устройства вам не придётся беспокоиться об истощении источника питания." #: lang/json/json_items.py msgid "" @@ -22395,11 +23036,11 @@ msgstr "" msgid "" "Fluffy and delicious pancakes with real maple syrup, made sweeter and " "healthier with the addition of wholesome fruit." -msgstr "" +msgstr "Пышные вкусные блинчики с кленовым сиропом и фруктовой начинкой" #: lang/json/json_items.py msgid "Fluffy and delicious pancakes with real maple syrup." -msgstr "" +msgstr "Пышные вкусные блинчики с кленовым сиропом." #: lang/json/json_items.py msgid "" @@ -22417,7 +23058,7 @@ msgstr "Ложко-вилки для слабаков, настоящие муж #: lang/json/json_items.py msgid "French fries" -msgstr "" +msgstr "картофель фри" #: lang/json/json_items.py msgid "Fresh blueberries, cooked with sugar to make them last longer." @@ -22425,7 +23066,7 @@ msgstr "Свежая черника, сваренная с сахаром для #: lang/json/json_items.py msgid "Fresh fruit, cooked with sugar to make them last longer." -msgstr "" +msgstr "Свежие фрукты, сваренные с сахаром для более долгого хранения." #: lang/json/json_items.py msgid "Fresh strawberries, cooked with sugar to make them last longer." @@ -22453,7 +23094,7 @@ msgstr "Свежеприготовленное мясо. Очень сытно." #: lang/json/json_items.py msgid "Freshly-squeezed from real fruit! Tasty and nutritious." -msgstr "" +msgstr "Свежевыжатый сок из натуральных фруктов! Вкусно и полезно." #: lang/json/json_items.py msgid "Freshly-squeezed from real oranges! Tasty and nutritious." @@ -22503,7 +23144,7 @@ msgstr "Гигантские клоунские ботинки. В них нев #: lang/json/json_items.py msgid "Glamopolitan" -msgstr "" +msgstr "Журнал \"Гламурия\"" #: lang/json/json_items.py msgid "Glock 19" @@ -22591,13 +23232,15 @@ msgstr "" #: lang/json/json_items.py msgid "Ham Radio Illustrated" -msgstr "" +msgstr "\"Радиолюбитель\"" #: lang/json/json_items.py msgid "" "Handcrafted, bootleg duplicates of Rivtech 8x40mm caseless rounds. Being " "caseless rounds, these cannot be disassembled or reloaded." msgstr "" +"Нелегально изготовленные в кустарных условиях копии безгильзовых патронов " +"Rivtech 8x40мм. Их нельзя разобрать или переснарядить." #: lang/json/json_items.py msgid "" @@ -22605,6 +23248,8 @@ msgid "" "caseless rounds. Being caseless rounds, these cannot be disassembled or " "reloaded." msgstr "" +"Нелегально изготовленные в кустарных условиях копии безгильзовых патронов с " +"полуоболочечной пулей Rivtech 8x40мм. Их нельзя разобрать или переснарядить." #: lang/json/json_items.py msgid "" @@ -22627,7 +23272,7 @@ msgstr "Наконечники для стрел. Повышают урон и #: lang/json/json_items.py msgid "Healthy and filling cornbread." -msgstr "" +msgstr "Вкусный и питательный пшенично-кукурузный хлеб." #: lang/json/json_items.py msgid "Healthy and filling." @@ -22635,7 +23280,7 @@ msgstr "Сытно и полезно." #: lang/json/json_items.py msgid "Heavy fingerless leather gloves. Very flexible and comfortable." -msgstr "" +msgstr "Прочные кожаные перчатки без пальцев. Обтягивающие и удобные." #: lang/json/json_items.py msgid "" @@ -22660,7 +23305,7 @@ msgstr "Прятание здесь не защитит вас от монстр #: lang/json/json_items.py msgid "High Explosives Quarterly" -msgstr "" +msgstr "журнал \"Огневая мощь\"" #: lang/json/json_items.py msgid "High technology engine, working on hydrogen fuel." @@ -22734,6 +23379,9 @@ msgid "" "these halazone-based purification tablets remove dangerous contaminants " "using powerful chemicals." msgstr "" +"Таблетки, созданные на базе галазона, предназначены для очистки и " +"дезинфекции питьевой воды от опасных загрязнителей с помощью " +"сильнодействующей химии." #: lang/json/json_items.py msgid "Internal Combustion Fundamentals" @@ -22781,7 +23429,7 @@ msgstr "Черничный джем, только без сахара." #: lang/json/json_items.py msgid "It's like fruit jam, only without sugar." -msgstr "" +msgstr "Похоже на джем, только без сахара." #: lang/json/json_items.py msgid "It's like strawberry jam, only without sugar." @@ -22793,11 +23441,11 @@ msgstr "Это... это — поваренная книга!" #: lang/json/json_items.py msgid "Italian seasoning" -msgstr "Итальянская приправа" +msgstr "итальянская приправа" #: lang/json/json_items.py msgid "Jane's Mortars and Rocket Launchers" -msgstr "" +msgstr "Мортиры и ракетные установки Джэйн" #: lang/json/json_items.py msgid "" @@ -22822,7 +23470,7 @@ msgstr "Узнайте движения самых модных танцев п #: lang/json/json_items.py msgid "" "Leather boots armored with reinforcements made from bone. Light and strong." -msgstr "" +msgstr "Кожаные ботинки укрепленные костями. Легкие и прочные." #: lang/json/json_items.py msgid "Leather boots with a steel toe. Extremely durable." @@ -22832,6 +23480,14 @@ msgstr "Кожаные сапоги с металлической вставко msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" +"Куски кожи сшиты и связаны в импровизированную набедренную повязку. " +"Покрывает ваш пах, но не более того." + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -22849,11 +23505,11 @@ msgstr "" #: lang/json/json_items.py msgid "Light and easy to wear, but doesn't offer much storage." -msgstr "Небольшой и лёгкий по весу, но даёт переносить не слишком много вещей." +msgstr "Небольшая и лёгкая сумка, но много вещей в неё не засунуть." #: lang/json/json_items.py msgid "Lightweight shoes made of cloth and rubber." -msgstr "" +msgstr "Легкая обувь сделанная из ткани и резины." #: lang/json/json_items.py msgid "Like apple cider, only with vodka." @@ -22863,17 +23519,24 @@ msgstr "Как яблочной сидр, но с водкой." msgid "Like cola, but without caffeine. Still not that healthy." msgstr "Как кола, но без кофеина. Всё равно не самый здоровый напиток." +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "Набит статьями об автомобилях и вождении." #: lang/json/json_items.py msgid "Louisville Slaghterer" -msgstr "" +msgstr "Луисвильский погромщик" #: lang/json/json_items.py msgid "Louisville Slaghterer (lit)" -msgstr "" +msgstr "Луисвильский погромщик (горит)" #: lang/json/json_items.py msgid "" @@ -22941,7 +23604,7 @@ msgstr "MAC-10" #: lang/json/json_items.py msgid "MRE - meat" -msgstr "" +msgstr "ИРП - мясо" #: lang/json/json_items.py msgid "MRE - vegetable" @@ -23060,7 +23723,7 @@ msgstr "Никотиновая жвачка с мятным вкусом. Для #: lang/json/json_items.py msgid "Modern Rifleman" -msgstr "" +msgstr "Современный стрелок" #: lang/json/json_items.py msgid "Modern reinforced tactical combat boots. Very durable." @@ -23092,7 +23755,7 @@ msgstr "NX-17 charge rifle" #: lang/json/json_items.py msgid "Necco wafers" -msgstr "" +msgstr "вафли Necco" #: lang/json/json_items.py msgid "" @@ -23100,6 +23763,9 @@ msgid "" "Rivtech atomic coffee maker! Its simple and robust atomic-age construction " "guarantees a service life of at least 160 million years." msgstr "" +"Атомная кофемашина от Rivtech позволит вам наслаждаться ароматным вкусом " +"напитка и при этом экономить деньги! Простая и надёжная конструкция " +"гарантирует срок службы устройства не менее 160 миллионов лет." #: lang/json/json_items.py msgid "" @@ -23130,6 +23796,9 @@ msgid "" "Normally this glossy, ad-filled magazine about cars would be pointless, but " "it has a series of articles on haggling techniques." msgstr "" +"Этот глянцевый журнал, переполненный рекламными объявлениями практически " +"бесполезен, если не считать пару статей о том, как правильно торговаться в " +"автосалоне." #: lang/json/json_items.py msgid "Now with 95 percent less dolphins!" @@ -23182,6 +23851,8 @@ msgid "" "One of the blue-colored lights from the top of an emergency services " "vehicle. When turned on, the lights rotate to shine in all directions." msgstr "" +"Синий спец сигнал, который устанавливают на крышу автомобилей экстренных " +"служб. Когда включен вращается и светит во все стороны." #: lang/json/json_items.py msgid "" @@ -23225,6 +23896,8 @@ msgid "" "One of the red-colored lights from the top of an emergency services vehicle. " "When turned on, the lights rotate to shine in all directions." msgstr "" +"Красный спец сигнал, который устанавливают на крышу автомобилей экстренных " +"служб. Когда включен вращается и светит во все стороны." #: lang/json/json_items.py msgid "" @@ -23257,11 +23930,11 @@ msgstr "" #: lang/json/json_items.py msgid "Outdoor Adventures" -msgstr "" +msgstr "\"Экстремальный туризм\"" #: lang/json/json_items.py msgid "Outdoor Survival Guide" -msgstr "" +msgstr "\"Выживание в дикой природе\"" #: lang/json/json_items.py msgid "PDA" @@ -23272,9 +23945,21 @@ msgid "PDA - Flashlight" msgstr "КПК - Фонарик" #: lang/json/json_items.py -msgid "PG-7VL rocket" +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" msgstr "" +#: lang/json/json_items.py +msgid "PG-7VL rocket" +msgstr "ракета PG-7VL" + #: lang/json/json_items.py msgid "PPSh-41" msgstr "ППШ-41" @@ -23312,8 +23997,8 @@ msgid "" "Plastic heads for an arrow. Placing these on an arrow will make the arrow " "more damaging and piercing." msgstr "" -"Пластиковый наконечник стрелы. При установке, увеличивает проникновение и " -"повреждения стрел." +"Пластиковый наконечник стрелы. При установке на стрелу, увеличивает её " +"пробивную способность и наносимый урон." #: lang/json/json_items.py msgid "Plastic jacketed copper cable of the type used in small electronics." @@ -23322,7 +24007,7 @@ msgstr "" #: lang/json/json_items.py msgid "Playboy" -msgstr "Журнал \"Плейбой\"" +msgstr "журнал \"Плейбой\"" #: lang/json/json_items.py msgid "Pocket Guide to Firearm Safety" @@ -23346,12 +24031,14 @@ msgstr "Подсоленный попкорн для вкуса." #: lang/json/json_items.py msgid "Popular Mechanics" -msgstr "" +msgstr "\"Популярная механика\"" #: lang/json/json_items.py msgid "" "Popular among children. It's fairly accurate, but BBs deal nearly no damage." msgstr "" +"Популярно среди детей. Довольно точное, но шарики практически не наносят " +"вреда." #: lang/json/json_items.py msgid "Popular among those who need to stay up late working." @@ -23379,6 +24066,8 @@ msgid "" "Notably devoid of euphoric or sedative effects, as an opiate it may still be " "addictive." msgstr "" +"Опиат, сделанный из мутировавшего мака. Примечательно отсутствия эффекта " +"эйфории или седативных эффектов. Может вызвать зависимость." #: lang/json/json_items.py msgid "Powdered caustic soda." @@ -23472,6 +24161,14 @@ msgstr "РПГ-7" msgid "RV kitchen unit" msgstr "автомобильная кухня" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" +"Тряпки сшиты и связаны в импровизированную набедренную повязку. Покрывает " +"ваш пах, но не более того." + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -23492,6 +24189,7 @@ msgid "" "Raw, refined protein. While quite nutritious, it is difficult to enjoy in " "its pure form." msgstr "" +"Сырой, очищенный белок. Довольно питательный. В чистом виде не вкусный." #: lang/json/json_items.py msgid "Really cheap fortified wine." @@ -23502,18 +24200,24 @@ msgid "" "Reconstituted fruit flakes, which are much more enjoyable to eat now that " "they have been rehydrated." msgstr "" +"Восстановленные кусочки фруктов, которые приятнее есть в таком, нежели в " +"сушёном, виде." #: lang/json/json_items.py msgid "" "Reconstituted meat flakes, which are much more enjoyable to eat now that " "they have been rehydrated." msgstr "" +"Восстановленные кусочки мяса, которые приятнее есть в таком, нежели в " +"сушёном, виде." #: lang/json/json_items.py msgid "" "Reconstituted vegetable flakes, which are much more enjoyable to eat now " "that they have been rehydrated." msgstr "" +"Восстановленные кусочки овощей, которые приятнее есть в таком, нежели в " +"сушёном, виде." #: lang/json/json_items.py msgid "Remington 700" @@ -23572,17 +24276,19 @@ msgstr "" #: lang/json/json_items.py msgid "Rising Sun (off)" -msgstr "восходящее солнце(выкл.)" +msgstr "восходящее солнце (выкл.)" #: lang/json/json_items.py msgid "Rising Sun (on)" -msgstr "восходящее солнце(вкл.)" +msgstr "восходящее солнце (вкл.)" #: lang/json/json_items.py msgid "" "Roasted coffee beans coated with dark chocolate, natural source of " "concentrated caffeine." msgstr "" +"Обжаренные кофейные зёрна, покрытые тёмным шоколадом, превосходный источник " +"концентрированного кофеина." #: lang/json/json_items.py msgid "Robots for Fun & Profit" @@ -23593,6 +24299,8 @@ msgid "" "Rolled, cured tobacco leaf, addictive and hazardous to health. A " "gentleman's vice, cigars set the civil man apart from the savage." msgstr "" +"Скрученный табачный лист, опасен для здоровья и вызывает зависимость. " +"Наличие сигары делает из дикаря джентльмена." #: lang/json/json_items.py msgid "Ruger 10/22" @@ -23711,7 +24419,7 @@ msgstr "\"Техника шитья для дизайнеров\"" #: lang/json/json_items.py msgid "Shockingly tart white vinegar." -msgstr "" +msgstr "Очент терпкий белый уксус" #: lang/json/json_items.py msgid "Short and sharp claws made from a high-tech metal." @@ -23719,7 +24427,7 @@ msgstr "Короткие и острые когти сделаны из высо #: lang/json/json_items.py msgid "Shotguns: The art and science" -msgstr "" +msgstr "Дробовики: искусство и наука" #: lang/json/json_items.py msgid "Simple cloth bandages. Used for healing small amounts of damage." @@ -23748,15 +24456,15 @@ msgstr "Слабо пахнет ягодами бузины, но по сути #: lang/json/json_items.py msgid "Snug, soft cloth sleeves to keep your arms warm." -msgstr "" +msgstr "Удобные и мягкие тканевые рукава, согревающие ваши руки." #: lang/json/json_items.py msgid "Snug, soft cloth sleeves to keep your legs warm." -msgstr "" +msgstr "Удобные и мягкие тканевые гетры, согревающие ваши ноги." #: lang/json/json_items.py msgid "So-called ramen noodles. Can be eaten raw." -msgstr "" +msgstr "Лапша быстрого приготовления. Можно есть в сыром виде." #: lang/json/json_items.py msgid "Socks. Put 'em on your feet." @@ -23768,7 +24476,7 @@ msgstr "Несколько семян черники" #: lang/json/json_items.py msgid "Some fungal seeds." -msgstr "" +msgstr "Немного семян фунгала." #: lang/json/json_items.py msgid "Some strawberry seeds." @@ -23780,11 +24488,11 @@ msgstr "Несколько семян пшеницы." #: lang/json/json_items.py msgid "Sour red berries. Good for your health." -msgstr "" +msgstr "Кислые красные ягоды. Полезны для здоровья." #: lang/json/json_items.py msgid "Sour stems of the rhubarb plant, often used in baking pies." -msgstr "" +msgstr "Кислые стебли растения ревень, часто используется при выпечке пирогов." #: lang/json/json_items.py msgid "Spaghetti covered with a thick meat sauce. Yum! " @@ -23808,6 +24516,8 @@ msgid "" "Sport shoes with hard undersides, and studs on the bottom designed to dig " "into the grass." msgstr "" +"Низкая обувь с твердыми шипами, приспособленными чтобы врываться в землю при " +"беге." #: lang/json/json_items.py msgid "Sports wear that clings to your chest to maintain body temperature." @@ -23848,10 +24558,11 @@ msgstr "" #: lang/json/json_items.py msgid "Sweet and delicious cookies, just like grandma used to bake." msgstr "" +"Любимое сладенькое печенье, почти такое же вкусное, как бабушкина выпечка." #: lang/json/json_items.py msgid "Sweet and delicious, real Vermont maple syrup." -msgstr "" +msgstr "Сладкий и вкусный Вермонтский кленовый сироп." #: lang/json/json_items.py msgid "Sweet citrus fruit. Also comes in juice form." @@ -23888,7 +24599,7 @@ msgstr "Журнал \"TIME\"" #: lang/json/json_items.py msgid "Tactical Handgun Digest" -msgstr "" +msgstr "Дайджест тактического вооружения" #: lang/json/json_items.py msgid "Tasty juicy berry, often found growing wild in fields." @@ -23992,6 +24703,9 @@ msgid "" "game, like elephants, with ease. It's designed to be used with the Taurus " "Raging Bull." msgstr "" +"Патрон .454 Casull - это очень мощный револьверный патрон. Создан для " +"большой охоты, например, на слона. Используется в револьвере Таурус " +"\"Бешеный бык\"." #: lang/json/json_items.py msgid "" @@ -23999,6 +24713,9 @@ msgid "" "stupendous accuracy and armor piercing capabilities make it one of the most " "deadly rounds available, offset only by its drastic recoil and noise." msgstr "" +".50 BMG очень мощный и дальнобойный винтовочный патрон. Его точность и " +"колоссальная бесперебойность делают его одним из самых смертоносных из " +"существующих патронов, к недостаткам можно отнести сильную отдачу и шум." #: lang/json/json_items.py msgid "" @@ -24054,7 +24771,7 @@ msgstr "" #: lang/json/json_items.py msgid "The Compleat Trapper" -msgstr "" +msgstr "\"Пушной промысел\"" #: lang/json/json_items.py msgid "The Complete Guide to Pitching" @@ -24109,7 +24826,7 @@ msgstr "Историческое изготовление оружия" #: lang/json/json_items.py msgid "The Hitchhiker's Guide to the Cataclysm" -msgstr "" +msgstr "\"Путеводитель: автостопом по Катаклизму\"" #: lang/json/json_items.py msgid "" @@ -24295,7 +25012,7 @@ msgstr "" #: lang/json/json_items.py msgid "The Tao of the Handgun" -msgstr "" +msgstr "Тао револьвера" #: lang/json/json_items.py msgid "" @@ -24399,6 +25116,7 @@ msgstr "" msgid "" "The fuse on this dynamite is lit and hissing. It'll explode any moment now." msgstr "" +"Фитиль на этом динамите горит и искрит. Он может взорваться в любой момент." #: lang/json/json_items.py msgid "The heavily disputed king of red wines. Pairs well red meats and pasta." @@ -24411,6 +25129,9 @@ msgid "" "sticking at jagged angles from edge of the blade, making it much better at " "chopping than slashing." msgstr "" +"Меч с гвоздями или, для краткости, гвоздемеч. Деревянный меч, лезвие " +"которого утыкано десятком гвоздей, таким гораздо лучше наносить рубящий " +"удар, вместо режущего." #: lang/json/json_items.py msgid "" @@ -24483,6 +25204,9 @@ msgid "" "metalworking fabrication recipes. You could swing them around as a melee " "weapon in a pinch." msgstr "" +"Длинные, стальные щипцы. Обычно используются для приготовления пищи или в " +"металлообработке. В крайнем случае, можно использовать в качестве оружия " +"ближнего боя." #: lang/json/json_items.py msgid "" @@ -24490,6 +25214,8 @@ msgid "" "straight up. If an unsuspecting victim steps on it, they'll get nails " "through the foot." msgstr "" +"Прибитые друг к другу куски доски, с торчащими из них гвоздями. Если кто-то " +"наступит, то может сильно повредить ноги." #: lang/json/json_items.py msgid "" @@ -24498,12 +25224,17 @@ msgid "" "inventory to do this. Shortly after lighting the fuse, this item will " "explode, so get away!" msgstr "" +"Несколько перевязанных вместе динамитных шашек с общим запалом. Активируйте, " +"чтобы поджечь запал (например, зажигалкой). Запал короткий, так что бросайте " +"и бегите!" #: lang/json/json_items.py msgid "" "These are small metal objects covered with many sharp points. If an " "unsuspecting victim steps on one, they'll get a spine through the foot." msgstr "" +"Небольшие металлические объекты с торчащими шипами. Если кто-то наступит, то " +"может сильно повредить ноги." #: lang/json/json_items.py msgid "" @@ -24511,38 +25242,48 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "Она голубого цвета, но это не значит, что она в печали." #: lang/json/json_items.py msgid "Thick body armor made from furs. Warm and comfortable." -msgstr "" +msgstr "Толстая броня из меха. Теплая и удобная." #: lang/json/json_items.py msgid "" "Thick leather body armor that has been hardened via chemical treatment. " "Light and strong." msgstr "" +"Бронежилет из толстой кожи, который был усилен с помощью химической " +"обработки. Легкий и прочный." #: lang/json/json_items.py msgid "" "Thick leather body armor that has been reinforced with strategically-placed " "metal plates. Strong and comfortable." msgstr "" +"Толстая кожаная броня, которая была усилена металлическими пластинами. " +"Крепкая и удобная." #: lang/json/json_items.py msgid "Thick leather body armor. Light and comfortable." -msgstr "" +msgstr "Толстая броня для туловища из кожи. Легкая и удобная." #: lang/json/json_items.py msgid "" "Thick leather boots made specifically to protect the feet. Light and tough." -msgstr "" +msgstr "Ботинки, сделанные из толстой кожи для защиты ног. Легкие и прочные." #: lang/json/json_items.py msgid "Thin yellow vegetable oil used for cooking." -msgstr "" +msgstr "Желтое растительное масло используемое в приготовлении пищи." #: lang/json/json_items.py msgid "Things go better with cola. Sugar water with caffeine added." @@ -24554,6 +25295,9 @@ msgid "" "field that damages robots and drains bionic energy. You may not want to be " "holding it much longer." msgstr "" +"Электромагнитная (ЭМГ) граната с выдернутой чекой должна скоро взорваться, " +"создавая поле электромагнитного излучения, которое выводит из строя " +"роботехнику и бионические имплантанты. Не тяните с броском!" #: lang/json/json_items.py msgid "" @@ -24602,12 +25346,16 @@ msgid "" "This arrow is significantly sturdier than other wooden arrows. It has a " "crude field point head and some fletchings." msgstr "" +"Эта стрела заметно крепче, чем другие деревянные стрелы. Необработанный " +"наконечник и оперение." #: lang/json/json_items.py msgid "" "This arrow is significantly sturdier than other wooden arrows. It has a " "firehardened point and some fletchings." msgstr "" +"Эта стрела заметно крепче, чем другие деревянные стрелы. Закаленный " +"наконечник и оперение." #: lang/json/json_items.py msgid "" @@ -24618,6 +25366,12 @@ msgstr "" "В этом работающем от батареек плеере собрана целая музыкальная коллекция. " "Многие композиции вам по нраву, что может поднять настроение." +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "Костная мука используется для удобрения растений." @@ -24627,15 +25381,14 @@ msgid "" "This book claims to address every problem the shotgunner is likely to face, " "and offers solutions to ensure that shooters can make every shot count." msgstr "" +"Эта книга освещает проблемы, с которыми может столкнуться человек при " +"использовании дробовика." #: lang/json/json_items.py -#, fuzzy msgid "" "This burning magnesium flare is producing light. It will last for about a " "half hour before burning out." msgstr "" -"Эта светящаяся палочка (химический источник света) излучает свет. Она будет " -"светить в течение нескольких часов, а потом потухнет." #: lang/json/json_items.py msgid "" @@ -24643,6 +25396,8 @@ msgid "" "will shortly be) expelling highly toxic gas. You should consider getting rid " "of it soon." msgstr "" +"Граната со слезоточивым газом без чеки. А значит из неё выходит (или скоро " +"будет) высокотоксичный газ. Не тяните с броском." #: lang/json/json_items.py msgid "" @@ -24685,6 +25440,9 @@ msgid "" "metal, and complete disregard for personal safety. While it's not as " "efficient as a factory welder, it will serve in a pinch." msgstr "" +"Этот кустарный сварочный аппарат, сделанный из мотка медной проволоки и " +"металлолома, полностью пренебрегает правилами техники безопасности. Он не " +"так эффективен, как промышленный образцы, но работает." #: lang/json/json_items.py msgid "" @@ -24730,6 +25488,9 @@ msgid "" "rotating its blade 90 degrees, transforming it into a deadly giant blade on " "the end of a stick." msgstr "" +"Этот сельскохозяйственный инструмент был переделан в оружие путем разворота " +"лезвия на 90 градусов, превратив его тем самым в огромное лезвие на конце " +"черенка." #: lang/json/json_items.py msgid "" @@ -24746,7 +25507,7 @@ msgstr "" #: lang/json/json_items.py msgid "This fruit's large pit is surrounded by its tasty flesh." -msgstr "" +msgstr "Фрукт из вкусной мякоти, с углублением." #: lang/json/json_items.py msgid "" @@ -24811,6 +25572,9 @@ msgid "" "This introspective volume covers proper usage of handguns, from safety and " "stance, to maintenance and proper sighting technique." msgstr "" +"Это интроспективный труд охватывающий правильное использование пистолетов, " +"от безопасности и правильной стойки, до технического обслуживания и технике " +"прицеливания." #: lang/json/json_items.py msgid "" @@ -24818,6 +25582,9 @@ msgid "" "between a typical marker and a can of spray paint in size. Use it to write " "something down. However, writing 'Elbereth' probably won't help you." msgstr "" +"Здоровенный промышленный несмываемый маркер, по размерам где-то между " +"обычным маркером и баллончиком краски. Активируйте, чтобы нанести надпись. " +"Стоит предупредить, что писать \"IDDQD\" бесполезно." #: lang/json/json_items.py msgid "" @@ -24832,30 +25599,37 @@ msgid "" "This is a badge that detects radiation dosage sealed in a radiation-blocking " "bag. Use it to remove it from the bag." msgstr "" +"Устройство в виде значка, определяющее дозу облучения. Вмонтировано в " +"радиационно-блокирующую сумку. Активируйте, чтобы снять с сумки." #: lang/json/json_items.py msgid "" "This is a bag of vacuum packed fruit slices in plastic packaging. Use to " "open and eat to enjoy." -msgstr "" +msgstr "Кусочки фруктов в вакуумной упаковке. Открывайте и наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a bag of vacuum packed meat slices in plastic packaging. Use to " "open and eat to enjoy." msgstr "" +"Мясная нарезка, в вакуумной упаковке. Активируйте, чтобы открыть и " +"наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a bag of vacuum packed vegetable slices in plastic packaging. Use " "to open and eat to enjoy." -msgstr "" +msgstr "Куски зелени в вакуумной упаковке. Откройте её и наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a battery powered tool for welding metal pieces together. It is an " "indispensable tool for construction or repair." msgstr "" +"Сварочный аппарат позволяет соединять металлические детали вместе. " +"Незаменимая вещь в строительстве и в работе с автомобилями. Работает от " +"батареек." #: lang/json/json_items.py msgid "" @@ -24866,7 +25640,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a bicycle folded into a relatively portable package." -msgstr "" +msgstr "Велосипед, сложенный в довольно компактную упаковку." #: lang/json/json_items.py msgid "" @@ -24874,6 +25648,9 @@ msgid "" "wreckage. If you can find a system to analyze this you may find something of " "interest." msgstr "" +"Чёрный ящик, скорее всего найденный в обломках военного транспорта. Если " +"сможете найти систему для анализа этого аппарата, то, возможно, узнаете что-" +"нибудь интересное." #: lang/json/json_items.py msgid "" @@ -24881,6 +25658,8 @@ msgid "" "has been lit, and its fuse is rapidly burning down. You may not want to hold " "onto it much longer." msgstr "" +"Бутылка, наполненная спичечными головками и снабжённая запалом. Запал уже " +"горит и скоро огонь доберётся до основного заряда. Не тяните с броском." #: lang/json/json_items.py msgid "" @@ -24888,6 +25667,9 @@ msgid "" "item to light the fuse; you will, of course, need a lighter in your " "inventory to do this. After lighting it, throw it to cause fires." msgstr "" +"Бутылка, наполненная спичечными головками и снабжённая запалом. Чтобы " +"поджечь запал, вам понадобится зажигалка. После этого не тяните с броском в " +"нужное место." #: lang/json/json_items.py msgid "" @@ -24903,6 +25685,10 @@ msgid "" "black smoke. This smoke will slow those who enter it, as well as obscuring " "vision and scent." msgstr "" +"Эта дымовая шашка наполнена различной пиротехнической химией. Активируйте, " +"чтобы выдернуть чеку и перевести гранату в боевое положение. Через пять " +"ходов после активации начнёт выделяться густой чёрный дым. Этот дым " +"замедляет всех, кто в него зайдёт, а также ухудшает зрение и обоняние." #: lang/json/json_items.py msgid "" @@ -24912,22 +25698,31 @@ msgid "" "gas damages and slows those who enter it, as well as obscuring vision and " "scent." msgstr "" +"Эта граната со слезоточивым газом. Активируйте, чтобы выдернуть чеку и " +"перевести гранату в боевое положение. Через пять ходов после активации " +"начнёт выделяться высокотоксичный газ. Этот газ наносит повреждения и " +"замедляет всех, кто в него зайдёт, а также ухудшает зрение и обоняние." #: lang/json/json_items.py msgid "This is a car horn meant to be attached to a car's electrical system." msgstr "" +"Автомобильный гудок, может быть подключён к электрической сети автомобиля." #: lang/json/json_items.py msgid "" "This is a chemical heatpack. It's used to treat sports injuries and heat " "food. It is usable only once." msgstr "" +"Химическая грелка, используется для лечения спортивных травм и разогрева " +"пищи. Используется только один раз." #: lang/json/json_items.py msgid "" "This is a chemical heatpack. It's used to treat sports injuries and heat " "food. This one has been used and is chemically inert, rendering it useless." msgstr "" +"Одноразовая грелка, используется для лечения спортивных травм и разогрева " +"еды. Однако эта уже была использована и теперь бесполезна." #: lang/json/json_items.py msgid "" @@ -24935,6 +25730,10 @@ msgid "" "containers, hoses, metal wire, a hotplate, and safety glasses. It might be " "used to craft some chemistry projects if you're so inclined." msgstr "" +"Сумка с химическими принадлежностями. Содержит в себе стеклянные колбы, " +"резиновые шланги, металлическую проволоку, электроплитку и защитные очки. " +"Необходим для крафта с использованием химических реакций, если у вас " +"появится такое желание." #: lang/json/json_items.py msgid "" @@ -24952,7 +25751,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a common hydraulic jack, used when changing tires." -msgstr "" +msgstr "Обычный гидравлический домкрат. Используется при замене колес." #: lang/json/json_items.py msgid "" @@ -24981,6 +25780,8 @@ msgid "" "surfaces. It runs on gasoline. Use it (if loaded) to blast a hole in " "adjacent solid terrain." msgstr "" +"Отбойный молоток, работающий на бензине. Используйте его, чтобы пробить дыру " +"в нужном месте." #: lang/json/json_items.py msgid "" @@ -24988,12 +25789,17 @@ msgid "" "contains a battery draining attachment so the drill can be charged in lieu " "of mains power." msgstr "" +"Переносная дрель с набором свёрл. Зарядное устройство может использовать " +"батареи, поэтому дрель можно заряжать вдали от розеток." #: lang/json/json_items.py msgid "" "This is a crude explosive device triggered by a piece of string. Use it to " "setup and watch some poor bastard trigger it." msgstr "" +"Кустарно изготовленное взрывное устройство, срабатывает при выдёргивании " +"шнура. Активируйте для установки и ждите, пока какая-нибудь тварь не " +"наступит на неё." #: lang/json/json_items.py msgid "" @@ -25005,6 +25811,8 @@ msgstr "" #: lang/json/json_items.py msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "" +"Инструмент для копания. Используйте лопату, чтобы окопать глубокими ямами " +"ваше убежище." #: lang/json/json_items.py msgid "" @@ -25018,12 +25826,17 @@ msgid "" "This is a farming implement. Use it to turn tillable land into a slow-to-" "cross pile of dirt." msgstr "" +"Сельскохозяйственный инструмент. Используйте тяпку, чтобы вспахать землю " +"(это позволит замедлить монстров)." #: lang/json/json_items.py msgid "" "This is a fine glass tube with a bulb with an bowl on one end. It's used in " "partaking of certain illicit substances." msgstr "" +"Прозрачная стеклянная трубочка с утолщение в виде шарика на конце. " +"Используется для употребления некоторых видов запрещённых веществ, к " +"примеру, крек-кокаина." #: lang/json/json_items.py msgid "" @@ -25037,12 +25850,16 @@ msgid "" "This is a flattened stone affixed to a stick. It works passably well as a " "shovel but really can't compare to a real shovel." msgstr "" +"Плоский камень, присоединённый к палке, работает вполне сносно в качестве " +"лопаты, но естественно не может сравниться с настоящей лопатой." #: lang/json/json_items.py msgid "" "This is a flexible rubber hose. It could be used for crafting, or siphoning " "fuel from a vehicle." msgstr "" +"Гибкий резиновый шланг. Может быть использован для крафта или слива бензина " +"из автомобилей." #: lang/json/json_items.py msgid "" @@ -25051,6 +25868,10 @@ msgid "" "slum it, struggle against terrible odds, win through and still know where " "their towel is, is clearly a force to be reckoned with." msgstr "" +"Большое ворсистое полотенце, можно вытереться, если промокли. Любой знает, " +"что человек, который исколесил апокалиптический мир вдоль и поперёк, прошел " +"через голод, нужду и лишения, одолел толпы ужасных тварей и все-таки имеет " +"при себе полотенце, это человек, с которым можно иметь дело." #: lang/json/json_items.py msgid "" @@ -25065,6 +25886,9 @@ msgid "" "and basic sewing tips somewhere in between the fashion photos and the makeup " "advertisements." msgstr "" +"Глянцевый журнал для женщин. Содержит несколько простых моделей одежды и " +"базовые советы по шитью и кройке, вперемешку с фотографиями модниц и " +"рекламой косметики." #: lang/json/json_items.py msgid "" @@ -25072,12 +25896,16 @@ msgid "" "recipes and some simple cooking tips somewhere in between the fashion photos " "and the sex advice columns." msgstr "" +"Глянцевый журнал для женщин. Содержит банальные и простые рецепты блюд, " +"вперемешку с фотографиями модниц и советами в сексуальной сфере." #: lang/json/json_items.py msgid "" "This is a funnel used to collect rainwater. Use it outside and place a " "container beneath it to collect water when it rains." msgstr "" +"Воронка для сбора дождевой воды. Активируйте её снаружи и разместите под ней " +"контейнер, чтобы собрать воду во время дождя." #: lang/json/json_items.py msgid "" @@ -25085,6 +25913,9 @@ msgid "" "which will cause the chemicals to mix. If this mixture is exposed to air " "(perhaps by throwing the vial) they will spill out as a pool of potent acid." msgstr "" +"Стеклянный флакон со съемной перегородкой. Снятие перегородки приведет к " +"смешению реактивов и образованию вещества, которое при контакте с кислородом " +"(после броска и разбития флакона) выделяет сильную кислоту." #: lang/json/json_items.py msgid "" @@ -25093,6 +25924,9 @@ msgid "" "could happen if you throw the vial), it will spill out as a pool of potent " "acid." msgstr "" +"Стеклянный флакон со смесью двух химических веществ. Флакон на ощупь " +"холодный, а его содержимое пенится. Эта смесь при контакте с кислородом " +"(после броска и разбития пузырька) выделяет сильную кислоту." #: lang/json/json_items.py msgid "" @@ -25107,6 +25941,8 @@ msgid "" "This is a hand-carved wooden smoking pipe. It's designed to facilitate " "consumption of fire cured tobacco leaves." msgstr "" +"Деревянная курительная трубка, ручной работы. Предназначена для употребления " +"табака дымовой сушки." #: lang/json/json_items.py msgid "" @@ -25128,6 +25964,8 @@ msgid "" "them or to lift manhole covers. You could also wield it to bash some heads " "in." msgstr "" +"Пользуясь ломом, вы можете вскрывать без лишнего шума запертые двери и " +"сдвигать крышки канализационных люков. Ну или надавать кому-нибудь по башке." #: lang/json/json_items.py msgid "" @@ -25135,6 +25973,9 @@ msgid "" "adjacent enemy, damaging and temporarily paralyzing them. Because the shock " "can actually jump through the air, it is difficult to miss." msgstr "" +"Мощное шоковое оружие. Используйте тазер, чтобы нанести урон и обездвижить " +"противника. Разряд из тазера просто пробивает к цели через воздух и " +"промахнуться из него сложно." #: lang/json/json_items.py msgid "" @@ -25143,6 +25984,10 @@ msgid "" "side for a short time, before the backup systems kick in. Use this item to " "pull the pin and light the fuse, turning it into an active scrambler grenade." msgstr "" +"Эта модифицированная электромагнитная граната создана для взлома чипов " +"управления роботами, а не уничтожения их. На некоторое время это переводит " +"роботов на вашу сторону, до тех пор пока система не перезапустится. " +"Активируйте, чтобы выдернуть чеку и перевести гранату в боевое положение." #: lang/json/json_items.py msgid "" @@ -25154,7 +25999,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a huge two-handed sword from Germany. It packs a real whallop." -msgstr "" +msgstr "Огромный двуручный меч из Германии. Рубит пачками." #: lang/json/json_items.py msgid "" @@ -25164,7 +26009,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a human skull with strange etchings covering it." -msgstr "" +msgstr "Человеческий череп со странными гравюрами, покрывающими его." #: lang/json/json_items.py msgid "" @@ -25172,6 +26017,8 @@ msgid "" "it's not THAT hot, but getting hit with it still stings like the dickens. " "Use to shut off the gas." msgstr "" +"Катана, пылающая яростью и жаром самого СОЛНЦА! Ну, ладно, не так жарко, но " +"удар припекает, как дьявольский огонь точно. Активируйте, чтобы потушить." #: lang/json/json_items.py msgid "" @@ -25180,6 +26027,9 @@ msgid "" "together? The gas burners attached to this blade can really turn up the heat " "on your foes. Use to ignite." msgstr "" +"Катана с соплами на клинке. Люди любят огонь, люди любят катаны. Так почему " +"не соединить их вместе? Бензиновая горелка, прикреплённая к этому клинку, " +"зажжёт ваших недругов. Активируйте, чтобы зажечь." #: lang/json/json_items.py msgid "" @@ -25193,12 +26043,17 @@ msgid "" "trigger. It requires a young tree nearby. It is effective at trapping and " "killing some small animals." msgstr "" +"Набор для простой ловушки, состоящий из веревочного узла и механизма " +"активации связывающей ловушки. Требует наличие молодого дерева неподалеку. " +"Эффективна для ловли и убийства некоторых мелких животных." #: lang/json/json_items.py msgid "" "This is a large blade that has had a portion of the handle wrapped in duct " "tape, making it easier to wield as a rough machete." msgstr "" +"Огромное лезвие, часть которого обмотана монтажным скотчем, что позволяет " +"орудовать им как мачете." #: lang/json/json_items.py msgid "" @@ -25222,37 +26077,46 @@ msgstr "" #: lang/json/json_items.py msgid "This is a large steel pickaxe, strike the earth (or your enemies)!" -msgstr "" +msgstr "Большая стальная кирка, лупите ей по земле (или лучше по врагам)!" #: lang/json/json_items.py msgid "" "This is a large stick, with the end carved into a broad blade for digging. " "It could be used to dig shallow pits, but not deep ones." msgstr "" +"Это большая палка, конец которой вырезан в форме ножа. Может быть " +"использована, чтобы вырыть неглубокие ямки, но не более того." #: lang/json/json_items.py msgid "" "This is a large stick, wrapped in gasoline soaked rags. This is burning, " "producing plenty of light." msgstr "" +"Большая палка, обмотанная пропитанной в бензине тряпкой. Горит и излучает " +"много света." #: lang/json/json_items.py msgid "" "This is a large stick, wrapped in gasoline soaked rags. When lit, produces a " "fair amount of light. You'll need a lighter or matches to light it." msgstr "" +"Большая палка, обмотанная пропитанной в бензине тряпкой. При горении " +"излучает много света. Чтобы зажечь нужны спички или зажигалка." #: lang/json/json_items.py msgid "" "This is a large, two-handed wood axe. It makes a good melee weapon, but is a " "bit slow to recover between swings." msgstr "" +"Тяжёлый двуручный топор. Хорошее оружие ближнего боя, правда медленное." #: lang/json/json_items.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " "staunching bleeding." msgstr "" +"Довольно большой кусок материи, пригодится при изготовлении других вещей или " +"для остановки кровотечения." #: lang/json/json_items.py msgid "" @@ -25277,18 +26141,23 @@ msgid "" "like molotov cocktails. You can also use a lighter to light nearby items on " "fire." msgstr "" +"Эта модель зажигалки имеет откидную крышку и может при надобности " +"заправляться. Её можно использовать для прикуривания сигарет или поджигания " +"разных вещей (вроде коктейля Молотова), или находящихся рядом предметов." #: lang/json/json_items.py msgid "" "This is a locksmith's set of sturdy steel picklocks. It is essential for " "silently and quickly opening locks, provided you have some mechanical skill." msgstr "" +"Слесарный набор отмычек из крепкой стали, для тихого и быстрого взлома " +"замков, если у вас есть кое-какие знания в механике." #: lang/json/json_items.py msgid "" "This is a long and thin knife with a spring-loaded blade that rests inside " "the handle while not in use." -msgstr "" +msgstr "Это длинный и тонкий нож с выкидным лезвием." #: lang/json/json_items.py msgid "" @@ -25303,10 +26172,14 @@ msgid "" "its throttle. When the tripwire is pulled, the blade is swung around with " "great force. The trap forms a 3x3 area of effect." msgstr "" +"Мачете, присоединенное к двигателю. Когда жертва цепляет шнур, навстречу ей " +"вылетает мачете с огромной скоростью. Ловушка накрывает площадь 3х3 тайла." #: lang/json/json_items.py msgid "This is a medical listening tool. Use it to listen to things. Closely." msgstr "" +"Медицинский прибор. Устройство для прослушивания чего-либо с близкого " +"расстояния." #: lang/json/json_items.py msgid "" @@ -25314,6 +26187,9 @@ msgid "" "spike. Though large and heavy compared to other spears, its accuracy and " "damage are unparalled." msgstr "" +"Средневековое оружие, состоящее из деревянного стержня, покрытой железными " +"шипами. Большое и тяжелое по сравнению с другими копьями, но его точность и " +"повреждения являются непревзойденными." #: lang/json/json_items.py msgid "" @@ -25321,6 +26197,9 @@ msgid "" "light and extremely sharp, and could be deadly in the right hands. It could " "be used to butcher corpses." msgstr "" +"Армейский боевой нож, предназначен для использования в рукопашном бою. " +"Лёгкий и чрезвычайно острый, смертельно опасный в умелых руках. Может быть " +"использован для разделки трупов." #: lang/json/json_items.py msgid "" @@ -25341,6 +26220,8 @@ msgid "" "This is a military style fold up cot. While it may not be quite as " "comfortable as a bed,its better than slumming it on the ground." msgstr "" +"Раскладушка военного образца, по сравнению с кроватью спать на ней довольно " +"неудобно, но намного лучше, чем ворочаться на земле." #: lang/json/json_items.py msgid "" @@ -25357,6 +26238,9 @@ msgid "" "Shortly after you light the fuse they will begin to explode, so throw them " "quickly!" msgstr "" +"Упаковка с 25 петардами, которые оснащены запалом. Для использования нужна " +"зажигалка или спички. Вскоре после поджога запалов она взорвётся, поэтому " +"бросьте её как можно быстрее!" #: lang/json/json_items.py msgid "" @@ -25370,12 +26254,14 @@ msgid "" "This is a philips-head screwdriver. It is important for almost all " "electronics crafting and most mechanics crafting, and has many more uses." msgstr "" +"Крестовая отвёртка. Необходима практически для всех рецептов создания " +"электроники, большой части механического крафта и другого использования." #: lang/json/json_items.py msgid "" "This is a piece of plastic. It doesn't have much use except to repair " "plastic items." -msgstr "" +msgstr "Кусок пластика. Годится только для ремонта пластиковых изделий." #: lang/json/json_items.py msgid "" @@ -25383,6 +26269,9 @@ msgid "" "crowbar. Use it to open locked doors without destroying them, or to lift " "manhole covers. You could also wield it to fight with, in a pinch." msgstr "" +"Труба с загнутыми концами, которые расплющены на подобии ломика. Можно " +"вскрывать без лишнего шума запертые двери и сдвигать крышки канализационных " +"люков. В крайнем случае, можно использовать в качестве оружия." #: lang/json/json_items.py msgid "" @@ -25397,24 +26286,30 @@ msgid "" "This is a plastic mold. It could be shaped and used to craft items made of " "plastic." msgstr "" +"Приспособление, которому можно придать нужную форму и использовать для " +"крафта предметов из пластика." #: lang/json/json_items.py msgid "" "This is a plate of reinforced kevlar. It could be used used to repair items " "made of kevlar." -msgstr "" +msgstr "Кусок кевлара. Используется для ремонта изделий из него." #: lang/json/json_items.py msgid "" "This is a portable charcoal smoker. Good for weekend barbecuing and " "preserving meat with smoke." msgstr "" +"Портативная коптильня на древесном угле. Используется в приготовлении " +"шашлыков на выходных, а также для консервирования мяса с помощью копчения." #: lang/json/json_items.py msgid "" "This is a portable electric food dehydrator. It's powered by batteries, and " "could be invaluable in preserving food." msgstr "" +"Переносной электрический пищевой дегидратор. Питание от батареек. Необходим " +"для сохранения пищи." #: lang/json/json_items.py msgid "" @@ -25423,6 +26318,10 @@ msgid "" "little mechanical know-how, you could probably even hook it directly to a " "vehicle's power system." msgstr "" +"Портативный электрический кузнечный горн, работающий от обычных батареек. В " +"комплекте с нужными инструментами может использоваться при кузнечных " +"работах. С помощью лома и чьей-то матери (используя знания механики) вы " +"можете запитать его от электрики автомобиля." #: lang/json/json_items.py msgid "" @@ -25436,6 +26335,8 @@ msgid "" "This is a portable heat sealer unit with an air pump. It's used for vacuum " "packing food to preserve it." msgstr "" +"Портативный прибор с термоэлементом и воздушным насосом. Предназначен для " +"вакуумной упаковки продуктов для долговременного хранения." #: lang/json/json_items.py msgid "" @@ -25448,6 +26349,8 @@ msgid "" "This is a portable, charcoal fired, metalworking forge. If combined with the " "right tools, you could use this for metalworking." msgstr "" +"Портативная кузня, работающая на древесном угле. При наличии необходимых " +"инструментов может использоваться для кузнечных работ." #: lang/json/json_items.py msgid "" @@ -25461,12 +26364,16 @@ msgid "" "This is a rare sword from Japan. Deadly against unarmored targets, and still " "very effective against armor." msgstr "" +"Редкий меч из Японии. Смертелен против небронированных целей и очень " +"эффективный против брони." #: lang/json/json_items.py msgid "" "This is a rare, bizarre, and arcane device of an otherworldly nature. It's " "giving you a headache just looking at it. It is covered in alien markings." msgstr "" +"Редкое и таинственное устройство, покрытое письменами инопланетного " +"происхождения. От одного взгляда на него начинает болеть голова." #: lang/json/json_items.py msgid "" @@ -25499,47 +26406,61 @@ msgid "" "This is a rock affixed to a stick, in the crude facsimile of a hammer. It " "functions adequately as a hammer, but really can't compare to a proper one." msgstr "" +"Камнем, закрепленным на палке, можно пользоваться как молотком, но он " +"никогда не сравниться с настоящим инструментом." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing human meat. Use to open and eat, if " "you really want to, to enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с человечиной. Откройте её и кушайте, " +"если действительно этого хотите." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing kompot. Use to open and eat to enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с компотом. Открывайте и наслаждайтесь " +"напитком." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing mixed vegetables. Use to open and eat " "to enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с овощами. Откройте её и наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing pickled meat. Use to open and eat to " "enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с маринованным мясом. Откройте её и " +"наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing pickled vegetables. Use to open and " "eat to enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с маринованными овощами. Откройте её и " +"наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing sliced fruits. Use to open and eat to " "enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с кусочками фруктов. Откройте её и " +"наслаждайтесь." #: lang/json/json_items.py msgid "" "This is a sealed glass jar containing some meat. Use to open and eat to " "enjoy." msgstr "" +"Закрученная крышкой стеклянная банка с мясом. Откройте её и наслаждайтесь." #: lang/json/json_items.py msgid "" @@ -25554,6 +26475,8 @@ msgid "" "This is a serving of crisply brined and canned human flesh. Tasty and " "nutritious if you're into that sort of thing." msgstr "" +"Плавающая в рассоле человеческая плоть. Вкусная и питательная, если конечно " +"вам нравятся подобные вещи." #: lang/json/json_items.py msgid "" @@ -25564,25 +26487,31 @@ msgstr "" msgid "" "This is a serving of crisply brined and canned vegetable matter. Tasty and " "nutritious." -msgstr "" +msgstr "Плавающие в рассоле консервированные овощи. Вкусные и питательные." #: lang/json/json_items.py msgid "" "This is a sharp knife, designed for cutting meat. It makes a poor melee " "weapon, but is decent at butchering corpses." msgstr "" +"Острый нож для резки мяса. Как холодное оружие плоховат, но с разделкой туш " +"справляется хорошо." #: lang/json/json_items.py msgid "" "This is a sharp, heavy knife. It makes a good melee weapon, and is an ideal " "item for butchering corpses." msgstr "" +"Острый тяжёлый нож. Хорошее холодное оружие, просто идеально подходит для " +"разделки трупов." #: lang/json/json_items.py msgid "" "This is a sharpened stone affixed to a stick. It works passably well as an " "axe but really can't compare to a proper axe." msgstr "" +"Заострённым камнем, закрепленным на палке, можно пользоваться как топором, " +"но он никогда не сравниться с настоящим инструментом." #: lang/json/json_items.py msgid "" @@ -25590,6 +26519,9 @@ msgid "" "insulates you from the floor, making it easier to sleep. Use it to unroll " "and place on the ground." msgstr "" +"Лист поролона, который легко можно свернуть для хранения. Согревает от " +"холодного пола, поэтому будет проще заснуть. Активируйте, чтобы развернуть и " +"положите на пол." #: lang/json/json_items.py msgid "" @@ -25597,6 +26529,8 @@ msgid "" "on the ground, creating a trap that will warn you with noise when something " "steps on it." msgstr "" +"Упаковочная плёнка с пузырьками. Постелите её на землю, и если кто-нибудь " +"попробует подобраться к вам, вы сразу услышите." #: lang/json/json_items.py msgid "" @@ -25608,6 +26542,7 @@ msgstr "" msgid "" "This is a simple bulb horn, found on many bicycles. Use to honk. Honk honk." msgstr "" +"Обычный гудок с грушей, который можно установить на велосипед. Бип-бип." #: lang/json/json_items.py msgid "This is a simple hand-powered stone quern for grinding grain." @@ -25619,6 +26554,10 @@ msgid "" "shotgun. When pulled, the shotgun fires. Two shells are loaded; the first " "time the trigger is pulled, one or both shells may be discharged." msgstr "" +"Стреляющая ловушка с двуствольным обрезом. Когда жертва цепляется за шнур, " +"ловушка срабатывает. Случайным образом может выстрелить либо одним стволом, " +"либо дуплетом. Если выстрел будет сделан одним стволом, ловушка может " +"выстрелить ещё раз." #: lang/json/json_items.py msgid "" @@ -25626,10 +26565,13 @@ msgid "" "crossbow. When pulled, the crossbow fires. Only a single round can be used, " "after which the trap is disabled." msgstr "" +"Простая растяжка с арбалетом. Когда жертва цепляется за шнур, арбалет " +"стреляет. После того, как арбалет будет разряжен, растяжка становится " +"бесполезной." #: lang/json/json_items.py msgid "This is a simple wood pole made deadlier by the blade tied to it." -msgstr "" +msgstr "Простая деревянная палка с привязанным ножом на конце." #: lang/json/json_items.py msgid "" @@ -25652,23 +26594,38 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" +"Небольшой баллон со сжатым воздухом и гудком. По нажатию кнопки издает " +"громкий звук." + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " "but it lasts a long time. It is turned on. Use it to turn it off." msgstr "" +"Небольшая лампа, работающая на бензине. Даёт не слишком много света, зато " +"хватает надолго. В данный момент зажжена. Потушить можно через команду " +"использования." #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " "but it lasts a long time. Use it to turn it on." msgstr "" +"Небольшая лампа, работающая на бензине. Даёт не слишком много света, зато " +"хватает надолго. Зажечь можно через команду использования." #: lang/json/json_items.py msgid "" "This is a small hand press for hand loading firearm ammunition. It comes " "with everything you need to start hand loading your own munitions." msgstr "" +"Маленький ручной пресс для снаряжения патронов. В комплекте имеется всё " +"необходимое для самостоятельной заправки и обжатия патронов." #: lang/json/json_items.py msgid "" @@ -25685,23 +26642,28 @@ msgstr "" #: lang/json/json_items.py msgid "" "This is a small personal tent, it's just big enough to fit you comfortably." -msgstr "" +msgstr "Маленькая палатка на одного человека." #: lang/json/json_items.py msgid "" "This is a small pocket knife. It isn't great for combat, but it's better " "than nothing. It's sharp enough to butcher with." msgstr "" +"Небольшой карманный нож, не очень эффективен в качестве оружия, но лучше, " +"чем ничего. Достаточно острый, чтобы использовать для разделки." #: lang/json/json_items.py msgid "This is a small shelter, made of sticks and skins. Use it to place." msgstr "" +"Небольшое,укрытие сделанное из палок и кожи. Активируйте, чтобы разместить." #: lang/json/json_items.py msgid "" "This is a small shelter, made of sticks and skins. Use it to place. This " "shelter has been damaged, and needs repairs." msgstr "" +"Небольшое укрытие, сделанное из палок и шкур. Активируйте, чтобы разместить. " +"Эта укрытие повреждено и нуждается в ремонте." #: lang/json/json_items.py msgid "" @@ -25709,24 +26671,35 @@ msgid "" "nearby friendly dogs to either follow you closely and stop attacking, or " "start attacking enemies if they are currently docile." msgstr "" +"Маленький свисток. При активации производит ультразвук, неслышимый для " +"человека, но хорошо различаемый собаками. С помощью него можно подозвать " +"домашнего пса, который будет следовать за вами. Также свистком можно дать " +"собаке команду атаковать противника." #: lang/json/json_items.py msgid "" "This is a small, makeshift funnel used to collect rainwater. Use it outside " "and place a container beneath it to collect water when it rains." msgstr "" +"Маленькая самодельная воронка для сбора дождевой воды. Активируйте её " +"снаружи и разместите под ней контейнер, чтобы собрать воду во время дождя." #: lang/json/json_items.py msgid "" "This is a small, multipurpose electronic device. It can be loaded with a " "variety of apps, providing all kinds of functionality." msgstr "" +"Небольшое устройство многоцелевого назначения. На него можно загрузить " +"множество приложений, которые придадут устройству какую-угодно " +"функциональность." #: lang/json/json_items.py msgid "" "This is a small, multipurpose electronic device. This PDA has its flashlight " "app on, and is providing light." msgstr "" +"Небольшое многофункциональное электронное устройство. На нём запущено " +"приложение \"Фонарик\" и устройство излучает свет." #: lang/json/json_items.py msgid "" @@ -25735,21 +26708,26 @@ msgid "" "it. Its small, sharp blade allows for precision strikes in the hands of the " "skilled. It is too small to butcher corpses with." msgstr "" +"Маленький, но очень острый модельный нож, предназначен для работы с " +"текстильными изделиями и прочим крафтом. Наносит неплохие повреждения, но из-" +"за его маленького кончика нужно много умения, что бы попасть во врага. " +"Слишком мал для разделки трупов." #: lang/json/json_items.py msgid "This is a spent glowstick. It is essentially trash." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is a spent magnesium flare. It is essentially trash." -msgstr "Потраченная светящаяся палочка, по существу хлам." +msgstr "" #: lang/json/json_items.py msgid "" "This is a spray can, filled with paint. Use this tool to make graffiti on " "the floor." msgstr "" +"Аэрозольный баллончик, заполненный краской. Используйте этот инструмент, " +"чтобы делать надписи на полу." #: lang/json/json_items.py msgid "" @@ -25769,13 +26747,15 @@ msgstr "" #: lang/json/json_items.py msgid "" "This is a stick that has been cut into a trigger mechanism for a snare trap." -msgstr "" +msgstr "Палка, врезанная в виде спускового механизма для силковой ловушки." #: lang/json/json_items.py msgid "" "This is a still. It's useful for creating distillation of alcohol and other, " "more curious substances." msgstr "" +"Самогонный аппарат, используется для дистилляции алкоголя и других, не менее " +"интересных субстанций." #: lang/json/json_items.py msgid "" @@ -25783,6 +26763,9 @@ msgid "" "Though it is fairly large, it weighs next to nothing. Air seems to gather " "around it." msgstr "" +"Камень, весь покрытый спиральными углублениями и отверстиями по периметру. " +"Хоть он и кажется крупным, но практически ничего не весит. Такое ощущение, " +"что воздух стягивается к нему." #: lang/json/json_items.py msgid "" @@ -25792,7 +26775,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a sturdy saw, useful for cutting through metal objects." -msgstr "" +msgstr "Прочная пила, полезна для резки металлических объектов." #: lang/json/json_items.py msgid "" @@ -25800,28 +26783,37 @@ msgid "" "brightly, and makes it much easier to see the baselines at night games (It " "also makes the umpire FAR more likely to call a ball instead of a strike)." msgstr "" +"Прочная деревянная бейсбольная бита, обмотанная пропитанной в бензине " +"тряпкой. Ярко горит, что позволяет насладиться ночной игрой по вышибанию " +"мозгов." #: lang/json/json_items.py msgid "" "This is a talking doll, meant for children. Fortunately it still works, and " "you could unload the batteries out of it." msgstr "" +"Говорящая кукла, игрушка для детей. К счастью, она ещё работает и вы можете " +"вытащить батарейки из неё." #: lang/json/json_items.py msgid "" "This is a thick candle. It doesn't provide very much light, but it can burn " "for quite a long time. This candle is lit." msgstr "" +"Толстая свеча, не даёт много света, зато способна гореть в течение " +"длительного времени. Эта свеча горит." #: lang/json/json_items.py msgid "" "This is a thick candle. It doesn't provide very much light, but it can burn " "for quite a long time. You'll need a lighter or matches to light it." msgstr "" +"Толстая свеча, не даёт много света, зато способна гореть в течение " +"длительного времени. Чтобы зажечь нужны спички или зажигалка." #: lang/json/json_items.py msgid "This is a thin saw, useful for cutting through wood objects." -msgstr "" +msgstr "Тонкая пила, полезная для распила деревянных предметов." #: lang/json/json_items.py msgid "" @@ -25829,6 +26821,8 @@ msgid "" "weapon of gentlemen and swashbucklers. Light and quick, it makes any battle " "a stylish battle." msgstr "" +"Меч со штыкообразным клинком и эфесом сложном формы. Любимое оружие " +"джентльменов и пиратов. Лёгкая и быстрая, она делает любую битву стильной." #: lang/json/json_items.py msgid "" @@ -25854,7 +26848,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a tool used for properly disassembling firearm ammunition." -msgstr "" +msgstr "Инструмент, необходимый для разбора патронов." #: lang/json/json_items.py msgid "" @@ -25863,6 +26857,10 @@ msgid "" "is designed to power armor and some guns, but drains batteries quickly. It " "is currently off." msgstr "" +"УБП — это универсальная батарея питания, которая используется в " +"исследовательском и армейском снаряжении для питания аппаратуры в полевых " +"условиях. Также УБП питает силовую броню и некоторые типы энергетического " +"оружия, но в этом случае заряда хватает ненадолго. В данный момент выключено." #: lang/json/json_items.py msgid "" @@ -25871,16 +26869,22 @@ msgid "" "is designed to power armor and some guns, but drains batteries quickly. It " "is currently on." msgstr "" +"УБП — это универсальная батарея питания, которая используется в " +"исследовательском и армейском снаряжении для питания аппаратуры в полевых " +"условиях. Также УБП питает силовую броню и некоторые типы энергетического " +"оружия, но в этом случае заряда хватает ненадолго. В данный момент включён." #: lang/json/json_items.py msgid "This is a very loud horn, usually found on large trucks like semis." -msgstr "" +msgstr "Очень мощный гудок, обычно устанавливается на большегрузные фуры." #: lang/json/json_items.py msgid "" "This is a very sharp knife designed for surgical cutting. It's small, sharp " "blade allows for precision strikes in the hands of the skilled." msgstr "" +"Маленький очень острый нож, используемый в хирургии. В умелых руках его " +"небольшой кончик позволяет наносить очень точные удары." #: lang/json/json_items.py msgid "" @@ -25893,6 +26897,9 @@ msgid "" "This is an M72 LAW, packed in its storage form. Use it to pop it out and " "make it ready to fire. Once it is activated, it cannot be repacked." msgstr "" +"Одноразовый гранатомёт M72 LAW, упакованный для хранения и перевозки. " +"Активируйте его, чтобы привести в состояние боевой готовности, после чего он " +"уже не может быть упакован." #: lang/json/json_items.py msgid "" @@ -25910,6 +26917,8 @@ msgid "" "This is an adjustable crescent wrench. It could be a decent melee weapon, " "and is used in many mechanics crafting recipes." msgstr "" +"Разводной гаечный ключ. Неплохое оружие ближнего боя, а также используется " +"во многих механических крафтах." #: lang/json/json_items.py msgid "" @@ -25917,6 +26926,9 @@ msgid "" "has been significantly redesigned to provide better efficiency as well as to " "consume plutonium fuel cells rather than batteries. It is currently off." msgstr "" +"Улучшенная версия универсальной батареи питания (УБП). Это устройство сильно " +"переработано по сравнению с предшественником для повышения эффективности и " +"использует плутониевые батарейки вместо обычных. В данный момент выключено." #: lang/json/json_items.py msgid "" @@ -25924,6 +26936,9 @@ msgid "" "has been significantly redesigned to provide better efficiency as well as to " "consume plutonium fuel cells rather than batteries. It is currently on." msgstr "" +"Улучшенная версия универсальной батареи питания (УБП). Это устройство сильно " +"переработано по сравнению с предшественником для повышения эффективности и " +"использует плутониевые батарейки вместо обычных. В данный момент включено." #: lang/json/json_items.py msgid "" @@ -25942,6 +26957,8 @@ msgid "" "This is an early modern sword seeing use in the 16th, 17th and 18th " "centuries. Called 'broad' to contrast with the slimmer rapiers." msgstr "" +"Меч времён Модерна, использовавшийся в 16, 17 и 18 веках. Назван \"широким" +"\", чтобы контрастировать со стройными рапирами." #: lang/json/json_items.py msgid "" @@ -25949,6 +26966,8 @@ msgid "" "projection set into the corner. It's used in most metalworking fabrication " "recipes." msgstr "" +"Огромный стальной блок необычной формы с долотообразными выступами ко краям. " +"Используется с большинстве рецептов по металлообработке." #: lang/json/json_items.py msgid "" @@ -25957,6 +26976,9 @@ msgid "" "behind a radioactive crater. You guess that the explosion would be large " "enough to take out a house." msgstr "" +"Очень разрушительное оружие — миниатюрная ядерная бомба. Включайте таймер, " +"бросайте и через десять ходов бомба взорвется, оставив после себя " +"радиоактивную воронку. Мощности бомбы хватит, чтобы одним махом снести дом." #: lang/json/json_items.py msgid "" @@ -25964,6 +26986,9 @@ msgid "" "metal. It needs MacGyver like skills to open locks with these and they are " "brittle, but it lessens the chances of alarms being set off." msgstr "" +"Набор импровизированных отмычек, сделанных из металлолома. Вам понадобятся " +"навыки медвежатника, чтобы отпереть замок, зато они очень лёгкие, что " +"снижает шансы поднять тревогу." #: lang/json/json_items.py msgid "" @@ -25971,6 +26996,9 @@ msgid "" "the air. They are covered with whirring blades and attack by throwing " "themselves against their target. Use this item to activate the manhack." msgstr "" +"Отключенный мэнхак. Мэнхаки — это летающие роботы размером с кулак, " +"оснащенные острыми лезвиями и атакующие противника резкими выпадами. " +"Активируйте мэнхак для использования." #: lang/json/json_items.py msgid "" @@ -25978,6 +27006,9 @@ msgid "" "placing it on the ground, where it will attach itself. The turret will then " "identify you as a friendly, and attack all enemies with an built-in SMG." msgstr "" +"Отключенная турель. Для использования её нужно активировать и выбрать место " +"на земле для установки. Турель будет идентифицировать вас как дружественный " +"объект и атаковать всех врагов из спаренных пулемётов." #: lang/json/json_items.py msgid "" @@ -25986,6 +27017,8 @@ msgid "" "staff, allowing you to zap a dangerous opponent should beating them " "senseless with it prove too hazardous." msgstr "" +"Обитый железо посох, со встроенным электрическим шокером. Шокер прикреплен к " +"металлическим наконечникам на концах посоха." #: lang/json/json_items.py msgid "" @@ -25998,6 +27031,9 @@ msgid "" "be a giant blade on the end of a stick, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"Это старинный сельскохозяйственный инструмент, используемый для срезания " +"высокой травы. Хотя на конце черенка находится огромное лезвие, его " +"чрезвычайно сложно использовать не по назначению." #: lang/json/json_items.py msgid "" @@ -26005,57 +27041,72 @@ msgid "" "be a massive curved blade on a handle, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"Это старинный сельскохозяйственный инструмент, используемый для резки " +"высокой травы. Хотя и имеет здоровое изогнутое лезвие на конце рукоятки, его " +"чрезвычайно сложно использовать не по назначению." #: lang/json/json_items.py msgid "" "This is an unwieldy mop. Good for cleaning up spills. Use to mop up any " "'mess' you may have made." msgstr "" +"Громоздкая швабра. Хороша для чистки пятен. Активируйте, чтобы прибраться за " +"собой." #: lang/json/json_items.py msgid "" "This is decent sized piece of cotton, sterilized and sealed. It's designed " "for medical purposes." -msgstr "" +msgstr "Упаковка стерилизованной марли. Предназначена для медицинских целей." #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "Собачий корм. Пахнет странно, но собакам нравится." +msgstr "Кошачий корм. Пахнет странно, но кошкам, похоже, нравится." #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." -msgstr "" +msgstr "Собачий корм. Пахнет странно, но собакам, похоже, нравится." #: lang/json/json_items.py msgid "" "This is hand-blown glass pipe. It's of the type of pipe most commonly used " "to smoke hallucinatory plants." msgstr "" +"Выдувное стекло ручной работы. Чаще всего используется для курения всякой " +"галлюциногенной травки." #: lang/json/json_items.py msgid "" "This is large blade attached to a long stick. It could do a considerable " "amount of damage." msgstr "" +"Огромное лезвие, прикрепленное к длинной палке. Может нанести серьёзные " +"повреждения." #: lang/json/json_items.py msgid "" "This is large bladed tool for cutting down large vegetation or other " "'obstacles.' This huge iron knife makes an excellent melee weapon." msgstr "" +"Этот огромный железный нож является превосходным холодным оружием. " +"Универсальный инструмент для прорубания прохода в густых зарослях и толпах " +"зомби." #: lang/json/json_items.py msgid "" "This is large metal stand with slots in the side. Use it and place it " "somewhere then set fires in it with no risk of spreading." msgstr "" +"Большой ящик с отверстиями по бокам. Активируйте его, установите где-нибудь " +"и зажгите внутри огонь, без риска распространения." #: lang/json/json_items.py msgid "" "This is large pair of bolt cutters. You could use them to cut padlocks or " "heavy gauge wire." msgstr "" +"Большие арматурные ножницы. Можно срезать замки или перекусывать провода " +"большого сечения." #: lang/json/json_items.py msgid "" @@ -26075,24 +27126,28 @@ msgid "" "This is sealed glass jar containing pickled human flesh. Use to open. You " "might even enjoy it." msgstr "" +"Закрученная крышкой стеклянная банка с маринованной человечиной. Откройте её " +"и кушайте. Возможно вам даже понравится." #: lang/json/json_items.py msgid "" "This is secure combination lock box. Sadly, you don't know the combination. " "Breaking inside it would destroy anything of value." msgstr "" +"Ящик с кодовым замком, к сожалению, вы не знаете правильной комбинации для " +"его открытия. Попытка взломать его силой уничтожит что-либо ценное внутри." #: lang/json/json_items.py msgid "" "This is sharp needle made from a bone. It would be useful for making rough " "clothing and items" -msgstr "" +msgstr "Острая иголка из кости, сгодится для шитья простых вещей." #: lang/json/json_items.py msgid "" "This is small emergency fire extinguisher. It would be useful for putting " "out adjacent fires." -msgstr "" +msgstr "Это небольшой огнетушитель. Полезен для тушения пожаров." #: lang/json/json_items.py msgid "" @@ -26123,6 +27178,9 @@ msgid "" "This is sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " "ball game will REALLY heat up. You'll need a lighter or matches to light it." msgstr "" +"Прочная деревянная бейсбольная бита, обмотанная пропитанной в бензине " +"тряпкой. Поджигайте и игра станет действительно ЖАРКОЙ! Для этого вам " +"понадобится зажигалка или спички." #: lang/json/json_items.py msgid "" @@ -26195,6 +27253,8 @@ msgid "" "This miniature nuclear bomb has a light blinking on the side, showing that " "it will soon explode. You should probably get far, far away from it." msgstr "" +"Светодиод на этой миниатюрной ядерной бомбе моргает, давая понять, что она " +"скоро взорвётся. Вам стоит поскорее убраться отсюда. Если успеете..." #: lang/json/json_items.py msgid "" @@ -26280,6 +27340,20 @@ msgstr "" "создастся управляющая волна, временно обращающая на вашу сторону роботов " "попавших в зону поражения." +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -26297,14 +27371,16 @@ msgid "" "This small caliber pistol round offers good armor penetration at the cost of " "slightly less damage. It is rarely used outside of the Chinese army." msgstr "" +"Этот пистолет малого калибра имеет хорошую бронепробиваемость, но причиняет " +"меньше урона. Редко встречается вне китайской армии." #: lang/json/json_items.py msgid "" "This smoke bomb has had its pin removed, indicating that it is (or will " "shortly be) expelling thick smoke." msgstr "" -"У этой дымовой бомбы сорвана чека. Вокруг нее уже есть или скоро будет " -"густой дым." +"У этой дымовой шашки сорвана чека. Из неё выходит (или скоро повалит) густой " +"дым." #: lang/json/json_items.py msgid "" @@ -26312,6 +27388,9 @@ msgid "" "knuckles. The guard can also be used for striking or blocking, and the knife " "can also be used to butcher corpses." msgstr "" +"Этот крепкий боевой нож, с металлической гардой для защиты пальцев. Гарда " +"может также использоваться для нанесения и блокирования ударов. Подходит для " +"разделки трупов." #: lang/json/json_items.py msgid "This yellow cornmeal is useful for baking." @@ -26323,13 +27402,15 @@ msgstr "Торазин" #: lang/json/json_items.py msgid "Through the Lens" -msgstr "" +msgstr "\"Через объектив\"" #: lang/json/json_items.py msgid "" "Tiny pink candies shaped like hearts, already dosed with some sort of drug. " "Really only useful for entertainment. Will cause hallucinations." msgstr "" +"Маленькие конфетки в форме сердечек, наркотического действия. Можно " +"использовать только для поднятия настроения. Могут вызвать галлюцинации." #: lang/json/json_items.py msgid "To Serve Man" @@ -26365,7 +27446,7 @@ msgstr "" #: lang/json/json_items.py msgid "Trapper's Life" -msgstr "" +msgstr "Жизнь охотника" #: lang/json/json_items.py msgid "UPS (off)" @@ -26397,7 +27478,7 @@ msgstr "\"Под капотом\"" #: lang/json/json_items.py msgid "Under this pomegranate's spongy skin lies hundreds of fleshy seeds." -msgstr "" +msgstr "Под губчатой кожурой, находятся сотни сочных зернышек." #: lang/json/json_items.py msgid "Useful for boiling water when cooking spaghetti and more." @@ -26421,16 +27502,17 @@ msgstr "" "снижает точность и наносимый урон." #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." msgstr "" -"Водоочиститель. Его использование на контейнер с водой позволяет очищать " -"находящуюся там воду. Довольно полезная вещь, так как вода из рек или других " -"сомнительных источников может быть грязной." +"Очищает воду с помощью угольного фильтра, для этого нужно использовать " +"данный предмет на нужную ёмкость с водой. После очистки определённого " +"количества воды угольный фильтр становится непригодным, его можно вынуть и " +"выбросить. Необходимая вещь, так как вода из сомнительных источников, вроде " +"рек, может оказаться загрязнённой." #: lang/json/json_items.py msgid "" @@ -26439,8 +27521,8 @@ msgid "" "circumstances." msgstr "" "Сочетая в себе мощность и необычный калибр, Rivtech RM2000 был разработан " -"как надежный и лёгкий в переноске пистолет-пулемет для операций в совсем " -"неидеальных условиях." +"как надежный и лёгкий в переноске пистолет-пулемет для операций в " +"неблагоприятных условиях." #: lang/json/json_items.py msgid "" @@ -26448,6 +27530,9 @@ msgid "" "gun was designed for durability and extreme volume of sustained fire under " "the worst possible circumstances." msgstr "" +"Используя мощный и необычный калибр, Rivtech RM614 ручной пулемет был " +"разработан для длительного непрерывного огня при наихудших возможных " +"обстоятельствах." #: lang/json/json_items.py msgid "Uzi 9mm" @@ -26549,6 +27634,12 @@ msgstr "\"Что такое транзистор?\"" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -26571,7 +27662,7 @@ msgstr "" #: lang/json/json_items.py msgid "X-Acto knife" -msgstr "канцелярский нож" +msgstr "нож X-Acto" #: lang/json/json_items.py msgid "You can read it for the articles. Or not." @@ -26603,7 +27694,7 @@ msgstr "кислотная бомба" #: lang/json/json_items.py msgid "acid bomb (active)" -msgstr "кислотная бомба (активирована)" +msgstr "активированная кислотная бомба" #: lang/json/json_items.py msgid "acid water" @@ -26618,9 +27709,8 @@ msgid "active Granade" msgstr "активированная Гранада" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "активированная светошумовая граната" +msgstr "" #: lang/json/json_items.py msgid "active flashbang" @@ -26644,11 +27734,11 @@ msgstr "активированная граната-шифратор" #: lang/json/json_items.py msgid "active smoke bomb" -msgstr "активированная дымовая бомба" +msgstr "активированная дымовая шашка" #: lang/json/json_items.py msgid "active teargas grenade" -msgstr "" +msgstr "активированная газовая граната" #: lang/json/json_items.py msgid "adamantite claws" @@ -26656,11 +27746,11 @@ msgstr "адамантовые когти" #: lang/json/json_items.py msgid "adjustable stock" -msgstr "" +msgstr "регулируемый приклад" #: lang/json/json_items.py msgid "adrenaline injector" -msgstr "" +msgstr "инъекци адреналина" #: lang/json/json_items.py msgid "advanced UPS (off)" @@ -26672,6 +27762,10 @@ msgstr "улучшенный УБП (вкл)" #: lang/json/json_items.py msgid "adventure novel" +msgstr "приключенческий роман" + +#: lang/json/json_items.py +msgid "alpha mutagen" msgstr "" #: lang/json/json_items.py @@ -26724,7 +27818,7 @@ msgstr "яблочный сидр" #: lang/json/json_items.py msgid "apricot" -msgstr "" +msgstr "абрикос" #: lang/json/json_items.py msgid "arm splint" @@ -26732,7 +27826,7 @@ msgstr "шина на руку" #: lang/json/json_items.py msgid "arm warmers" -msgstr "" +msgstr "нарукавники" #: lang/json/json_items.py msgid "armored boots" @@ -26768,11 +27862,11 @@ msgstr "аспирин" #: lang/json/json_items.py msgid "atomic coffee maker" -msgstr "" +msgstr "атомная кофемашина" #: lang/json/json_items.py msgid "atomic nightlight" -msgstr "" +msgstr "атомный ночник" #: lang/json/json_items.py msgid "auto-fire mechanism" @@ -26832,7 +27926,7 @@ msgstr "удлинитель ствола" #: lang/json/json_items.py msgid "baseball" -msgstr "" +msgstr "бейсбольный мяч" #: lang/json/json_items.py msgid "baseball bat" @@ -26892,7 +27986,7 @@ msgstr "берет" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "bicycle horn" -msgstr "" +msgstr "гудок велосипедный" #: lang/json/json_items.py msgid "bifocal glasses" @@ -26920,7 +28014,7 @@ msgstr "бутон Биолланте" #: lang/json/json_items.py msgid "bipod" -msgstr "" +msgstr "сошки" #: lang/json/json_items.py msgid "bird mutagen" @@ -26944,7 +28038,7 @@ msgstr "" #: lang/json/json_items.py msgid "blackberries" -msgstr "" +msgstr "ежевика" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "blade" @@ -27000,23 +28094,23 @@ msgstr "семена черники" #: lang/json/json_items.py msgid "boiled leather armor" -msgstr "" +msgstr "броня из вареной кожи" #: lang/json/json_items.py msgid "boiled noodles" -msgstr "" +msgstr "варёная лапша" #: lang/json/json_items.py msgid "bolt cutters" -msgstr "кусачки" +msgstr "арматурные ножницы" #: lang/json/json_items.py msgid "bondage mask" -msgstr "" +msgstr "рабская маска" #: lang/json/json_items.py msgid "bondage suit" -msgstr "" +msgstr "рабский костюм" #: lang/json/json_items.py msgid "bone" @@ -27024,7 +28118,7 @@ msgstr "кость" #: lang/json/json_items.py msgid "bone armor boots" -msgstr "" +msgstr "костяный бронеботинки" #: lang/json/json_items.py msgid "bone armor gauntlets" @@ -27032,11 +28126,11 @@ msgstr "" #: lang/json/json_items.py msgid "bone armor helmet" -msgstr "" +msgstr "костяной шлем" #: lang/json/json_items.py msgid "bone body armor" -msgstr "" +msgstr "костяная броня для туловища" #: lang/json/json_items.py msgid "bone broth" @@ -27108,7 +28202,7 @@ msgstr "гильзоулавливатель" #: lang/json/json_items.py msgid "brass knuckles" -msgstr "" +msgstr "кастет" #: lang/json/json_items.py trapdef.cpp msgid "brazier" @@ -27136,7 +28230,7 @@ msgstr "бульон" #: lang/json/json_items.py trapdef.cpp msgid "bubble wrap" -msgstr "" +msgstr "пузырчатая плёнка" #: lang/json/json_items.py msgid "buddy novel" @@ -27167,9 +28261,8 @@ msgid "cabernet sauvignon" msgstr "Каберне Совиньон" #: lang/json/json_items.py -#, fuzzy msgid "caffeinated chewing gum" -msgstr "жевательная резинка" +msgstr "Кофеиновая жевательная резинка" #: lang/json/json_items.py msgid "caffeine pills" @@ -27237,15 +28330,15 @@ msgstr "консервированная зелень" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "car battery" -msgstr "" +msgstr "автомобильный аккумулятор" #: lang/json/json_items.py msgid "car buyer's guide" -msgstr "" +msgstr "руководство для покупателя авто" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "car horn" -msgstr "" +msgstr "гудок авто" #: lang/json/json_items.py msgid "carbon fiber arrow" @@ -27293,7 +28386,7 @@ msgstr "керамическая пластина" #: lang/json/json_items.py msgid "cestus" -msgstr "" +msgstr "цестус" #: lang/json/json_items.py msgid "chainsaw (off)" @@ -27305,15 +28398,15 @@ msgstr "бензопила (вкл)" #: lang/json/json_items.py msgid "charcoal forge" -msgstr "" +msgstr "угольная кузня" #: lang/json/json_items.py msgid "charcoal kiln" -msgstr "" +msgstr "углевыжигательная печь" #: lang/json/json_items.py msgid "charcoal smoker" -msgstr "" +msgstr "угольная коптильня" #: lang/json/json_items.py msgid "charcoal water purifier" @@ -27361,7 +28454,7 @@ msgstr "\"Учебник химии\"" #: lang/json/json_items.py msgid "cherries" -msgstr "" +msgstr "вишня" #: lang/json/json_items.py msgid "chest rig" @@ -27372,12 +28465,15 @@ msgid "chewing gum" msgstr "жевательная резинка" #: lang/json/json_items.py -#, fuzzy msgid "chewing tobacco" -msgstr "жевательная резинка" +msgstr "" #: lang/json/json_items.py msgid "children's book" +msgstr "детская книжка" + +#: lang/json/json_items.py +msgid "chimera mutagen" msgstr "" #: lang/json/json_items.py @@ -27410,11 +28506,11 @@ msgstr "плитка шоколада" #: lang/json/json_items.py msgid "chocolate drink" -msgstr "" +msgstr "шоколадный напиток" #: lang/json/json_items.py msgid "chocolate-covered coffee beans" -msgstr "" +msgstr "кофейные зёрна в шоколаде" #: lang/json/json_items.py msgid "chunk of chitin" @@ -27438,7 +28534,7 @@ msgstr "сигары" #: lang/json/json_items.py msgid "circuit board" -msgstr "" +msgstr "печатная плата" #: lang/json/json_items.py msgid "clam chowder" @@ -27446,11 +28542,11 @@ msgstr "" #: lang/json/json_items.py msgid "cleansuit" -msgstr "" +msgstr "лабораторный костюм" #: lang/json/json_items.py msgid "cleats" -msgstr "" +msgstr "бутса" #: lang/json/json_items.py msgid "cloak" @@ -27482,7 +28578,7 @@ msgstr "угольный поддон" #: lang/json/json_items.py msgid "coconut" -msgstr "" +msgstr "кокос" #: lang/json/json_items.py msgid "coconut milk" @@ -27526,7 +28622,7 @@ msgstr "комикс" #: lang/json/json_items.py msgid "coming of age novel" -msgstr "" +msgstr "роман о состоявшемся человеке" #: lang/json/json_items.py msgid "composite bow" @@ -27536,6 +28632,10 @@ msgstr "композитный лук" msgid "compound bow" msgstr "блочный лук" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "гудок со сжатым воздухом" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "концентрированная кислота" @@ -27558,7 +28658,7 @@ msgstr "приготовленный проказник" #: lang/json/json_items.py msgid "cooked fruit" -msgstr "" +msgstr "печеный фрукт" #: lang/json/json_items.py msgid "cooked meat" @@ -27582,15 +28682,15 @@ msgstr "варёные дикие овощи" #: lang/json/json_items.py msgid "cookies" -msgstr "" +msgstr "печенье" #: lang/json/json_items.py msgid "cooking oil" -msgstr "" +msgstr "растительное масло" #: lang/json/json_items.py msgid "copper tubing" -msgstr "" +msgstr "медная трубка" #: lang/json/json_items.py msgid "copper wire" @@ -27606,7 +28706,7 @@ msgstr "кукуруза" #: lang/json/json_items.py msgid "cornbread" -msgstr "" +msgstr "пшенично-кукурузный хлеб" #: lang/json/json_items.py msgid "cornmeal" @@ -27624,6 +28724,10 @@ msgstr "раскладушка" msgid "cotton hat" msgstr "хлопчатобумажная шляпа" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "крэк" @@ -27634,11 +28738,11 @@ msgstr "бульбулятор" #: lang/json/json_items.py msgid "crackers" -msgstr "" +msgstr "крекеры" #: lang/json/json_items.py msgid "cranberries" -msgstr "" +msgstr "клюква" #: lang/json/json_items.py msgid "cranberry juice" @@ -27646,7 +28750,7 @@ msgstr "" #: lang/json/json_items.py msgid "crime novel" -msgstr "" +msgstr "детективный роман" #: lang/json/json_items.py msgid "crossbow" @@ -27668,6 +28772,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "дубина" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "повреждённое укрытие" @@ -27681,9 +28789,8 @@ msgid "darts" msgstr "дротики" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "Устал до смерти" +msgstr "" #: lang/json/json_items.py msgid "dead glowstick" @@ -27691,15 +28798,15 @@ msgstr "отработавшая светящаяся палочка" #: lang/json/json_items.py msgid "dehydrated fruit" -msgstr "" +msgstr "сушёные фрукты" #: lang/json/json_items.py msgid "dehydrated meat" -msgstr "" +msgstr "сушёное мясо" #: lang/json/json_items.py msgid "dehydrated vegetables" -msgstr "" +msgstr "сушёные овощи" #: lang/json/json_items.py msgid "deluxe cooked oatmeal" @@ -27811,11 +28918,11 @@ msgstr "походное одеяло" #: lang/json/json_items.py msgid "emergency vehicle light (blue)" -msgstr "" +msgstr "Спецсигнал (синий)" #: lang/json/json_items.py msgid "emergency vehicle light (red)" -msgstr "" +msgstr "Спецсигнал (красный)" #: lang/json/json_items.py msgid "empty canister" @@ -27831,11 +28938,11 @@ msgstr "тактическая рукоять" #: lang/json/json_items.py msgid "entrenching tool" -msgstr "" +msgstr "сапёрная лопатка" #: lang/json/json_items.py msgid "ergonomic grip" -msgstr "" +msgstr "эргономичная рукоять" #: lang/json/json_items.py msgid "erotic novel" @@ -27863,7 +28970,7 @@ msgstr "взрывчатый наконечник для стрел" #: lang/json/json_items.py msgid "explosive crossbow bolt" -msgstr "" +msgstr "взрывчатый болт" #: lang/json/json_items.py msgid "explosive slug" @@ -27891,16 +28998,20 @@ msgstr "поясная сумка" #: lang/json/json_items.py msgid "fantasy novel" -msgstr "фантастический роман" +msgstr "фэнтези роман" #: lang/json/json_items.py msgid "fast noodles" -msgstr "" +msgstr "доширак" #: lang/json/json_items.py msgid "feather" msgstr "перо" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -27947,7 +29058,7 @@ msgstr "петарда" #: lang/json/json_items.py msgid "firecracker (lit)" -msgstr "петарда(горит)" +msgstr "петарда (горит)" #: lang/json/json_items.py msgid "first aid kit" @@ -27975,7 +29086,7 @@ msgstr "зажигательная стрела" #: lang/json/json_items.py msgid "flammable arrow" -msgstr "" +msgstr "зажигательная стрела" #: lang/json/json_items.py msgid "flammenschwert (an)" @@ -27990,14 +29101,12 @@ msgid "flannel jacket" msgstr "фланелевая куртка" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "Ослеплен ярким светом" +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "Ослеплен ярким светом" +msgstr "сигнальный пистолет" #: lang/json/json_items.py msgid "flashbang" @@ -28054,7 +29163,7 @@ msgstr "складной велосипед" #: lang/json/json_items.py msgid "food dehydrator" -msgstr "" +msgstr "пищевой дегидратор" #: lang/json/json_items.py msgid "foon" @@ -28066,7 +29175,7 @@ msgstr "велосипедная трансмиссия" #: lang/json/json_items.py msgid "football" -msgstr "" +msgstr "футбольный мяч" #: lang/json/json_items.py msgid "football armor" @@ -28094,11 +29203,11 @@ msgstr "замороженный ужин" #: lang/json/json_items.py msgid "fruit jam" -msgstr "" +msgstr "фруктовый джем" #: lang/json/json_items.py msgid "fruit juice" -msgstr "" +msgstr "фруктовый сок" #: lang/json/json_items.py msgid "fruit leather" @@ -28106,7 +29215,7 @@ msgstr "" #: lang/json/json_items.py msgid "fruit pancakes" -msgstr "" +msgstr "блинчики с фрукт. начинкой" #: lang/json/json_items.py msgid "fruit pie" @@ -28122,15 +29231,15 @@ msgstr "сковорода" #: lang/json/json_items.py msgid "fungal fighter sting" -msgstr "" +msgstr "жало фунгалойда-бойца" #: lang/json/json_items.py msgid "fungal seeds" -msgstr "" +msgstr "семена фунгала" #: lang/json/json_items.py msgid "fungicide" -msgstr "" +msgstr "фунгицид" #: lang/json/json_items.py trapdef.cpp msgid "funnel" @@ -28146,7 +29255,7 @@ msgstr "меховое одеяло" #: lang/json/json_items.py msgid "fur body armor" -msgstr "" +msgstr "меховая броня для туловища" #: lang/json/json_items.py msgid "fur boots" @@ -28176,6 +29285,10 @@ msgstr "меховые шортики" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "меховая набежренная повязка" + #: lang/json/json_items.py msgid "fur pants" msgstr "меховые штаны" @@ -28222,11 +29335,11 @@ msgstr "противогаз" #: lang/json/json_items.py msgid "gasoline lantern (off)" -msgstr "бензиновый фонарь (выкл)" +msgstr "бензиновая лампа (выкл)" #: lang/json/json_items.py msgid "gasoline lantern (on)" -msgstr "бензиновый фонарь (вкл)" +msgstr "бензиновая лампа (вкл)" #: lang/json/json_items.py msgid "geiger ctr (off)" @@ -28276,6 +29389,10 @@ msgstr "перчатки с подкладкой" msgid "glowstick" msgstr "светящаяся палочка" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "золото" @@ -28290,7 +29407,7 @@ msgstr "золотое кольцо" #: lang/json/json_items.py msgid "golf club" -msgstr "" +msgstr "клюшка для гольфа" #: lang/json/json_items.py msgid "goo canister" @@ -28306,7 +29423,7 @@ msgstr "" #: lang/json/json_items.py msgid "grapes" -msgstr "" +msgstr "виноград" #: lang/json/json_items.py msgid "great helm" @@ -28338,7 +29455,11 @@ msgstr "молоток" #: lang/json/json_items.py msgid "hand press & die set" -msgstr "комплект прессформ и штампов" +msgstr "ручной патронный пресс" + +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" #: lang/json/json_items.py msgid "handheld game system" @@ -28346,11 +29467,11 @@ msgstr "портативная игровая приставка" #: lang/json/json_items.py msgid "handmade 8x40mm caseless" -msgstr "" +msgstr "кустарные 8x40мм безгильзовые" #: lang/json/json_items.py msgid "handmade 8x40mm caseless JSP" -msgstr "" +msgstr "кустарные 8x40мм безгильзовые JSP" #: lang/json/json_items.py msgid "hard arm guards" @@ -28370,7 +29491,7 @@ msgstr "твёрдая пластина" #: lang/json/json_items.py msgid "hardtack" -msgstr "" +msgstr "галета" #: lang/json/json_items.py msgid "hatchet" @@ -28435,7 +29556,7 @@ msgstr "подшлемник" #: lang/json/json_items.py msgid "hemostatic powder" -msgstr "" +msgstr "кровоостанавливающий порошок" #: lang/json/json_items.py msgid "hemp seeds" @@ -28463,7 +29584,7 @@ msgstr "хоккейная маска" #: lang/json/json_items.py msgid "hockey puck" -msgstr "" +msgstr "хоккейная шайба" #: lang/json/json_items.py msgid "hockey stick" @@ -28481,6 +29602,10 @@ msgstr "голографический прицел" msgid "holster" msgstr "кобура" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "молот" + #: lang/json/json_items.py msgid "honey comb" msgstr "медовые соты" @@ -28547,7 +29672,7 @@ msgstr "таблетки йода" #: lang/json/json_items.py msgid "ironshod quarterstaff" -msgstr "" +msgstr "окованный сталью посох" #: lang/json/json_items.py msgid "jack" @@ -28579,7 +29704,7 @@ msgstr "вяленая человечина" #: lang/json/json_items.py msgid "johnnycake" -msgstr "" +msgstr "кукурузная лепёшка" #: lang/json/json_items.py msgid "jumpsuit" @@ -28611,7 +29736,7 @@ msgstr "кинетический молоток" #: lang/json/json_items.py msgid "kiwi" -msgstr "" +msgstr "киви" #: lang/json/json_items.py msgid "knee pads" @@ -28679,11 +29804,11 @@ msgstr "кожаный фартук" #: lang/json/json_items.py msgid "leather armor boots" -msgstr "" +msgstr "кожанные бронированный ботинки" #: lang/json/json_items.py msgid "leather armor gauntlets" -msgstr "" +msgstr "кожанные защитные перчатки" #: lang/json/json_items.py msgid "leather armor helmet" @@ -28699,7 +29824,7 @@ msgstr "кожаное бикини" #: lang/json/json_items.py msgid "leather body armor" -msgstr "" +msgstr "кожанная броня для туловища" #: lang/json/json_items.py msgid "leather cat ears" @@ -28723,7 +29848,7 @@ msgstr "" #: lang/json/json_items.py msgid "leather corset" -msgstr "" +msgstr "кожаный корсет" #: lang/json/json_items.py msgid "leather gloves" @@ -28737,6 +29862,10 @@ msgstr "кожаные шортики" msgid "leather jacket" msgstr "кожаная куртка" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "кожанная набежренная повязка" + #: lang/json/json_items.py msgid "leather pants" msgstr "кожаные штаны" @@ -28752,7 +29881,7 @@ msgstr "кожаный мешок" #: lang/json/json_items.py msgid "leather touring suit" -msgstr "" +msgstr "кожаный костюм для вождения" #: lang/json/json_items.py msgid "leather trenchcoat" @@ -28768,7 +29897,7 @@ msgstr "медицинская шина" #: lang/json/json_items.py msgid "leg warmers" -msgstr "" +msgstr "гетры" #: lang/json/json_items.py msgid "lemon" @@ -28834,6 +29963,10 @@ msgstr "мутаген ящерицы" msgid "log" msgstr "бревно" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "набедренная повязка" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "«Лонг-Айленд» со льдом" @@ -28856,12 +29989,11 @@ msgstr "большой лук" #: lang/json/json_items.py msgid "loose caltrops" -msgstr "" +msgstr "разбросанные триболы" #: lang/json/json_items.py -#, fuzzy msgid "lowtop tennis shoes" -msgstr "клоунские ботинки" +msgstr "низкая тенисная обувь" #: lang/json/json_items.py msgid "lump of steel" @@ -28895,6 +30027,10 @@ msgstr "самодельная воронка" msgid "makeshift halberd" msgstr "самодельная алебарда" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "заточка" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "самодельное мачете" @@ -28909,7 +30045,7 @@ msgstr "" #: lang/json/json_items.py msgid "mango" -msgstr "" +msgstr "манго" #: lang/json/json_items.py lang/json/json_terrain.py msgid "manhole cover" @@ -28917,7 +30053,7 @@ msgstr "крышка люка" #: lang/json/json_items.py msgid "maple syrup" -msgstr "" +msgstr "кленовый сироп" #: lang/json/json_items.py msgid "marloss berry" @@ -28925,7 +30061,7 @@ msgstr "ягода марло" #: lang/json/json_items.py msgid "masterkey shotgun" -msgstr "" +msgstr "подствольный дробовик" #: lang/json/json_items.py msgid "match head bomb" @@ -28967,17 +30103,21 @@ msgstr "медицинская марля" msgid "medical gloves" msgstr "медицинские перчатки" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "медицинская лента" #: lang/json/json_items.py msgid "melon" -msgstr "" +msgstr "дыня" #: lang/json/json_items.py msgid "messenger bag" -msgstr "сумка" +msgstr "курьерская сумка" #: lang/json/json_items.py msgid "metal arm guards" @@ -28993,7 +30133,7 @@ msgstr "стрела с металлическим древком" #: lang/json/json_items.py msgid "metal crossbow bolt" -msgstr "" +msgstr "металлический болт" #: lang/json/json_items.py msgid "metal leg guards" @@ -29037,7 +30177,7 @@ msgstr "молоко" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "minifridge" -msgstr "" +msgstr "мини-холодильник" #: lang/json/json_items.py npctalk.cpp msgid "mininuke" @@ -29089,7 +30229,7 @@ msgstr "моргенштерн" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "motorbike battery" -msgstr "" +msgstr "мото-аккумулятор" #: lang/json/json_items.py msgid "motorcycle helmet" @@ -29143,6 +30283,10 @@ msgstr "доска с гвоздями" msgid "nail gun" msgstr "гвоздострел" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "гвоздеметательное ружье" @@ -29173,7 +30317,7 @@ msgstr "звукогенератор (вкл)" #: lang/json/json_items.py msgid "nord" -msgstr "" +msgstr "гвоздемеч" #: lang/json/json_items.py msgid "oatmeal" @@ -29209,19 +30353,19 @@ msgstr "упаковка петард" #: lang/json/json_items.py msgid "pack of firecrackers (lit)" -msgstr "упаковка петард(горит)" +msgstr "упаковка петард (горит)" #: lang/json/json_items.py msgid "packed M72 LAW" -msgstr "" +msgstr "сложенный M72 LAW" #: lang/json/json_items.py msgid "pancakes" -msgstr "" +msgstr "блинчики" #: lang/json/json_items.py msgid "pane of reinforced glass" -msgstr "" +msgstr "кусок ударопрочного стекла" #: lang/json/json_items.py msgid "pants" @@ -29229,7 +30373,7 @@ msgstr "штаны" #: lang/json/json_items.py msgid "papaya" -msgstr "" +msgstr "папайя" #: lang/json/json_items.py msgid "paper" @@ -29245,7 +30389,7 @@ msgstr "больничные карты" #: lang/json/json_items.py msgid "peach" -msgstr "" +msgstr "персик" #: lang/json/json_items.py msgid "peacoat" @@ -29253,11 +30397,11 @@ msgstr "бушлат" #: lang/json/json_items.py msgid "pear" -msgstr "" +msgstr "груша" #: lang/json/json_items.py msgid "peppermint patties" -msgstr "" +msgstr "мятное печенье" #: lang/json/json_items.py msgid "permanent marker" @@ -29273,7 +30417,7 @@ msgstr "окаменелый глаз" #: lang/json/json_items.py msgid "photo album" -msgstr "" +msgstr "фотоальбом" #: lang/json/json_items.py msgid "pickaxe" @@ -29297,11 +30441,11 @@ msgstr "" #: lang/json/json_items.py msgid "pickled punk" -msgstr "" +msgstr "маринованая человечина" #: lang/json/json_items.py msgid "pickled veggy" -msgstr "" +msgstr "маринованные овощи" #: lang/json/json_items.py msgid "picklock kit" @@ -29317,7 +30461,7 @@ msgstr "ананас" #: lang/json/json_items.py msgid "pink tablets" -msgstr "" +msgstr "розовые таблетки" #: lang/json/json_items.py msgid "pinot noir" @@ -29353,7 +30497,7 @@ msgstr "самопал" #: lang/json/json_items.py msgid "pistol bayonet" -msgstr "" +msgstr "пистолетный штык" #: lang/json/json_items.py msgid "pistol crossbow" @@ -29361,7 +30505,7 @@ msgstr "арбалет-пистолет" #: lang/json/json_items.py msgid "pistol stock" -msgstr "" +msgstr "пистолетный приклад" #: lang/json/json_items.py msgid "placeholder ammunition" @@ -29433,11 +30577,11 @@ msgstr "" #: lang/json/json_items.py msgid "plated leather armor" -msgstr "" +msgstr "Пластинчатая кожаная броня" #: lang/json/json_items.py msgid "plums" -msgstr "" +msgstr "сливы" #: lang/json/json_items.py msgid "plutonium cell" @@ -29469,7 +30613,7 @@ msgstr "футболка поло" #: lang/json/json_items.py msgid "pomegranate" -msgstr "" +msgstr "гранат" #: lang/json/json_items.py msgid "pool ball" @@ -29493,11 +30637,11 @@ msgstr "маковый цветок" #: lang/json/json_items.py msgid "poppy painkillers" -msgstr "" +msgstr "маковое болеутоляющее" #: lang/json/json_items.py msgid "poppy sleep" -msgstr "" +msgstr "маковое снотворное" #: lang/json/json_items.py msgid "portal generator" @@ -29529,7 +30673,7 @@ msgstr "" #: lang/json/json_items.py msgid "powdered milk" -msgstr "" +msgstr "сухое молоко" #: lang/json/json_items.py msgid "power armor hauling frame" @@ -29541,7 +30685,7 @@ msgstr "преобразователь напряжения" #: lang/json/json_items.py msgid "powered quarterstaff" -msgstr "" +msgstr "посох-шокер" #: lang/json/json_items.py msgid "pretzels" @@ -29557,15 +30701,15 @@ msgstr "материнская плата" #: lang/json/json_items.py msgid "protein drink" -msgstr "" +msgstr "протеиновый напиток" #: lang/json/json_items.py msgid "protein powder" -msgstr "" +msgstr "протеиновый порошок" #: lang/json/json_items.py msgid "protein shake" -msgstr "" +msgstr "протеиновый коктейль" #: lang/json/json_items.py msgid "pulp novel" @@ -29573,7 +30717,7 @@ msgstr "" #: lang/json/json_items.py msgid "punch dagger" -msgstr "" +msgstr "тычковый нож" #: lang/json/json_items.py msgid "purifier" @@ -29585,7 +30729,7 @@ msgstr "сумочка" #: lang/json/json_items.py msgid "quarterstaff" -msgstr "" +msgstr "посох" #: lang/json/json_items.py msgid "quern" @@ -29621,7 +30765,7 @@ msgstr "дождевик" #: lang/json/json_items.py msgid "rain hood" -msgstr "козырек от дождя" +msgstr "капюшон от дождя" #: lang/json/json_items.py msgid "rapid blowback" @@ -29633,7 +30777,7 @@ msgstr "рапира" #: lang/json/json_items.py msgid "raspberries" -msgstr "" +msgstr "малина" #: lang/json/json_items.py msgid "rat mutagen" @@ -29667,6 +30811,10 @@ msgstr "очки для чтения" msgid "rebar" msgstr "арматура" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "изогнутый лук" @@ -29693,19 +30841,19 @@ msgstr "рефлексивно изогнутый лук" #: lang/json/json_items.py msgid "rehydrated fruit" -msgstr "" +msgstr "регидрированные фрукты" #: lang/json/json_items.py msgid "rehydrated meat" -msgstr "" +msgstr "регидрированное мясо" #: lang/json/json_items.py msgid "rehydrated vegetables" -msgstr "" +msgstr "регидрированные овощи" #: lang/json/json_items.py msgid "reinforced solar panel" -msgstr "" +msgstr "армированная солнечная панель" #: lang/json/json_items.py msgid "repeating crossbow" @@ -29713,7 +30861,7 @@ msgstr "многозарядный арбалет" #: lang/json/json_items.py msgid "rhubarb" -msgstr "" +msgstr "ревень" #: lang/json/json_items.py msgid "riesling" @@ -29777,7 +30925,7 @@ msgstr "маточное молочко пчёл" #: lang/json/json_items.py msgid "rubber boots" -msgstr "" +msgstr "резиновые ботинки" #: lang/json/json_items.py msgid "rubber gloves" @@ -29905,7 +31053,7 @@ msgstr "отвёртка" #: lang/json/json_items.py msgid "scythe" -msgstr "" +msgstr "коса" #: lang/json/json_items.py msgid "sealed 3-litre jar of kompot" @@ -29913,7 +31061,7 @@ msgstr "закрытая 3л банка компота" #: lang/json/json_items.py msgid "sealed jar of canned fruit" -msgstr "" +msgstr "закрытая банка кусочков фруктов" #: lang/json/json_items.py msgid "sealed jar of canned meat" @@ -29925,15 +31073,15 @@ msgstr "закрытая банка консервированных овоще #: lang/json/json_items.py msgid "sealed jar of pickled human flesh" -msgstr "" +msgstr "закрытая банка маринованной человечины" #: lang/json/json_items.py msgid "sealed jar of pickled meat" -msgstr "" +msgstr "закрытая банка маринованного мяса" #: lang/json/json_items.py msgid "sealed jar of pickled vegetable" -msgstr "" +msgstr "закрытая банка маринованных овощей" #: lang/json/json_items.py msgid "sealed jar of soylent slices" @@ -29963,6 +31111,10 @@ msgstr "швейный набор" msgid "sharpened metal arrow" msgstr "заострённая металлическая стрела" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "заостренная арматура" + #: lang/json/json_items.py msgid "sheet" msgstr "штора" @@ -30036,9 +31188,8 @@ msgid "shovel" msgstr "лопата" #: lang/json/json_items.py -#, fuzzy msgid "sickle" -msgstr "солёные огурчики" +msgstr "серп" #: lang/json/json_items.py msgid "signal receiver" @@ -30110,7 +31261,7 @@ msgstr "маленький LCD дисплей" #: lang/json/json_items.py msgid "small fire extinguisher" -msgstr "" +msgstr "маленький огнетушитель" #: lang/json/json_items.py msgid "small game arrow" @@ -30130,11 +31281,11 @@ msgstr "маленький ружейный капсюль" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "small storage battery" -msgstr "" +msgstr "маленький аккумулятор" #: lang/json/json_items.py msgid "smoke bomb" -msgstr "дымовая бомба" +msgstr "дымовая шашка" #: lang/json/json_items.py msgid "smoked meat" @@ -30230,7 +31381,7 @@ msgstr "хоккейный свитер" #: lang/json/json_items.py msgid "sports novel" -msgstr "" +msgstr "спортивный роман" #: lang/json/json_items.py msgid "spray can" @@ -30246,11 +31397,11 @@ msgstr "пружина" #: lang/json/json_items.py msgid "spring suit" -msgstr "" +msgstr "весенний костюм" #: lang/json/json_items.py msgid "spy novel" -msgstr "шпионская новелла" +msgstr "шпионский роман" #: lang/json/json_items.py msgid "steak knife" @@ -30280,9 +31431,13 @@ msgstr "стальной кастет" msgid "steel plating" msgstr "стальная пластина" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "стальной штырь" + #: lang/json/json_items.py msgid "steel spear" -msgstr "" +msgstr "стальное копье" #: lang/json/json_items.py msgid "steel tongs" @@ -30298,7 +31453,7 @@ msgstr "стетоскоп" #: lang/json/json_items.py msgid "still" -msgstr "" +msgstr "самогонный аппарат" #: lang/json/json_items.py msgid "stone axe" @@ -30318,7 +31473,7 @@ msgstr "каменная лопата" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "storage battery" -msgstr "аккумуляторная батарея" +msgstr "аккумулятор" #: lang/json/json_items.py msgid "strawberries" @@ -30345,9 +31500,8 @@ msgid "string - 6 in" msgstr "нить - 15см" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "солнечные очки" +msgstr "стильный солнечные очки" #: lang/json/json_items.py msgid "sugar" @@ -30358,9 +31512,8 @@ msgid "suit" msgstr "костюм" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "платье" +msgstr "летнее платье" #: lang/json/json_items.py msgid "sunglasses" @@ -30404,7 +31557,7 @@ msgstr "жилет выживальщика" #: lang/json/json_items.py msgid "survivor vest" -msgstr "" +msgstr "жилет" #: lang/json/json_items.py msgid "swage and die set" @@ -30432,7 +31585,7 @@ msgstr "акваобувь" #: lang/json/json_items.py msgid "swimming gloves" -msgstr "" +msgstr "перчатки для плавания" #: lang/json/json_items.py msgid "swimming trunks" @@ -30440,12 +31593,11 @@ msgstr "плавки" #: lang/json/json_items.py msgid "switchblade" -msgstr "" +msgstr "нож-выкидуха" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "штык" +msgstr "меч-штык" #: lang/json/json_items.py msgid "syringe" @@ -30457,16 +31609,15 @@ msgstr "футболка" #: lang/json/json_items.py msgid "tactical baton defense manual" -msgstr "" +msgstr "приемы самообороны с помощью дубинки" #: lang/json/json_items.py msgid "tactical dump pouch" msgstr "тактический подсумок" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "тактический шлем" +msgstr "" #: lang/json/json_items.py msgid "tactical gloves" @@ -30478,11 +31629,11 @@ msgstr "тактический шлем" #: lang/json/json_items.py msgid "tactical tonfa (off)" -msgstr "" +msgstr "тактическая тонфа (выкл)" #: lang/json/json_items.py msgid "tactical tonfa (on)" -msgstr "" +msgstr "тактическая тонфа (вкл)" #: lang/json/json_items.py msgid "tainted meat" @@ -30517,9 +31668,8 @@ msgid "tea leaves" msgstr "чайные листья" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "оружие" +msgstr "чайник" #: lang/json/json_items.py msgid "teargas canister" @@ -30533,6 +31683,10 @@ msgstr "телепорт" msgid "television" msgstr "телевизор" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "палатка" @@ -30543,15 +31697,15 @@ msgstr "текила" #: lang/json/json_items.py msgid "thriller novel" -msgstr "" +msgstr "остросюжетный роман" #: lang/json/json_items.py msgid "throwing axe" -msgstr "" +msgstr "метательный топор" #: lang/json/json_items.py msgid "throwing knife" -msgstr "" +msgstr "метательный нож" #: lang/json/json_items.py msgid "tights" @@ -30579,7 +31733,7 @@ msgstr "помидор" #: lang/json/json_items.py msgid "tonfa" -msgstr "" +msgstr "тонфа" #: lang/json/json_items.py msgid "tool belt" @@ -30615,7 +31769,7 @@ msgstr "передатчик" #: lang/json/json_items.py msgid "trench knife" -msgstr "" +msgstr "окопный нож" #: lang/json/json_items.py msgid "trenchcoat" @@ -30635,11 +31789,11 @@ msgstr "мутаген троглобионта" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "truck battery" -msgstr "" +msgstr "аккумулятор грузовика" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "truck horn" -msgstr "" +msgstr "гудок грузовика" #: lang/json/json_items.py msgid "tube 40mm launcher" @@ -30671,7 +31825,7 @@ msgstr "подствольный дробовик" #: lang/json/json_items.py msgid "union suit" -msgstr "" +msgstr "нательный комбинезон" #: lang/json/json_items.py msgid "used heatpack" @@ -30691,7 +31845,7 @@ msgstr "вакуумный упаковщик" #: lang/json/json_items.py msgid "vacuum-packed fruit slices" -msgstr "" +msgstr "кусочки фруктов в вакуумной упаковке" #: lang/json/json_items.py msgid "vacuum-packed meat slices" @@ -30719,7 +31873,7 @@ msgstr "автомобильная сварочная установка" #: lang/json/json_items.py msgid "vinegar" -msgstr "" +msgstr "уксус" #: lang/json/json_items.py msgid "vitamins" @@ -30739,11 +31893,11 @@ msgstr "трость" #: lang/json/json_items.py msgid "war novel" -msgstr "" +msgstr "военный роман" #: lang/json/json_items.py msgid "war scythe" -msgstr "" +msgstr "боевая коса" #: lang/json/json_items.py msgid "wasp sting" @@ -30755,7 +31909,7 @@ msgstr "вода" #: lang/json/json_items.py msgid "water purification tablets" -msgstr "" +msgstr "водоочистительные таблетки" #: lang/json/json_items.py msgid "water purifier" @@ -30763,7 +31917,7 @@ msgstr "водоочиститель" #: lang/json/json_items.py msgid "watermelon" -msgstr "" +msgstr "арбуз" #: lang/json/json_items.py msgid "waterskin" @@ -30791,7 +31945,7 @@ msgstr "сварочные очки" #: lang/json/json_items.py msgid "western novel" -msgstr "" +msgstr "роман-вестерн" #: lang/json/json_items.py msgid "wetsuit" @@ -30855,7 +32009,7 @@ msgstr "древко деревянной стрелы" #: lang/json/json_items.py msgid "wood axe" -msgstr "топор" +msgstr "топор дровосека" #: lang/json/json_items.py msgid "wood crossbow bolt" @@ -30874,9 +32028,8 @@ msgid "wooden javelin" msgstr "деревянный дротик" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "дровяная печь" +msgstr "деревянная тонфа" #: lang/json/json_items.py msgid "woods soup" @@ -30884,7 +32037,7 @@ msgstr "древесный суп" #: lang/json/json_items.py msgid "wool beret" -msgstr "" +msgstr "шерстяной берет" #: lang/json/json_items.py msgid "wool gloves" @@ -30928,27 +32081,27 @@ msgstr "о-ёрой" #: lang/json/json_keybindings.py msgid "Center On Character" -msgstr "" +msgstr "Центрировать на персонаже" #: lang/json/json_keybindings.py msgid "Confirm Choice" -msgstr "" +msgstr "Потвердить выбор" #: lang/json/json_keybindings.py msgid "Create/Edit Note" -msgstr "" +msgstr "Создать/изменить заметку" #: lang/json/json_keybindings.py msgid "Delete Note" -msgstr "" +msgstr "Удалить заметку" #: lang/json/json_keybindings.py msgid "Display Help" -msgstr "" +msgstr "Показать справку" #: lang/json/json_keybindings.py msgid "Exit Screen" -msgstr "" +msgstr "Закрыть окно" #: lang/json/json_keybindings.py msgid "Go Down" @@ -30960,7 +32113,7 @@ msgstr "" #: lang/json/json_keybindings.py msgid "List Notes" -msgstr "" +msgstr "Список заметок" #: lang/json/json_keybindings.py msgid "Pan down" @@ -30996,7 +32149,7 @@ msgstr "" #: lang/json/json_keybindings.py msgid "Search" -msgstr "" +msgstr "Поиск" #: lang/json/json_lab_notes.py msgid "" @@ -31057,6 +32210,9 @@ msgid "" "substances, alternating between the mutagen and the purifier. Ultimately, " "the subject returned to baseline state with no apparent side effects." msgstr "" +"Оба PE012 и PE018 обладают большой стабильностью. Субъект подвергался " +"попеременно воздействию мутагенным и очистителя. В конечном итоге, субъект " +"вернулся к исходному состоянию, без видимых изменений." #: lang/json/json_lab_notes.py msgid "" @@ -31074,6 +32230,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -31161,6 +32326,8 @@ msgid "" "Our chemical department has made great strides in the production of a " "concentrated mutagen, derived from samples of PE012." msgstr "" +"Наш химический отдел добился больших успехов в производстве " +"концентрированного мутагена, полученного из образцов PE012." #: lang/json/json_lab_notes.py msgid "" @@ -31168,6 +32335,9 @@ msgid "" "Consumption of the treatment will reverse the effects of mutation, and may " "even cure congenital defects. This substance has been denoted PE018." msgstr "" +"Наш химический отдел усовершенствовал технологию не целевого лечения " +"стволовыми клетками. Процедура лечения избавит от последствий мутации, и " +"может даже вылечить врожденные дефекты. Это вещество было названо PE018." #: lang/json/json_lab_notes.py msgid "" @@ -31301,6 +32471,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -31309,6 +32487,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -31421,9 +32608,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "Бонус к скорости атаки" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -31434,34 +32620,22 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "AKA \"drunken boxing,\" Zui Quan imitates the movement of a drunk to confuse " "the enemy. The turn after you successfully attack, you may dodge any number " "of attacks with no penalty." msgstr "" -"Так же известный как \"пьяный мастер\", Зуй-Цуань имитирует движения " -"пьяного,\n" -"чтобы сбить противника с толку. В течение хода, следующего за вашей атакой,\n" -"вы можете увернуться от любого количества ударов противника без штрафов." #: lang/json/json_martialarts.py newcharacter.cpp msgid "Aikido" msgstr "Айкидо" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "Aikido is a Japanese martial art focused on self-defense, while minimizing " "injury to the attacker. It uses defensive throws and disarms. Damage done " "while using this technique is halved, but pain inflicted is doubled." msgstr "" -"Айкидо — японское искусство рукопашного боя, сфокусированное на самообороне " -"и\n" -"уменьшении травм атакующего. В нем используются броски и приёмы " -"разоружения.\n" -"При использовании этой техники наносится половина повреждений, но боль " -"удваивается." #: lang/json/json_martialarts.py msgid "" @@ -31476,9 +32650,8 @@ msgid "Attacks scale better with strength" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Bonus damage from intelligence." -msgstr "Вы стали умнее. Интеллект + 2" +msgstr "" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Capoeira" @@ -31489,42 +32662,36 @@ msgid "Capoeira Tempo" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Centipede Kung Fu" -msgstr "Сороконожка" +msgstr "" #: lang/json/json_martialarts.py msgid "Crane Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Crane Precision" -msgstr "Кранстон" +msgstr "" #: lang/json/json_martialarts.py msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "Интеллект" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Kung Fu" -msgstr "Дракон" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Drunk Dodging" -msgstr "уклонение" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Flat bonus to damage." -msgstr " но не наносит урона." +msgstr "" #: lang/json/json_martialarts.py msgid "Half damage to enemies" @@ -31573,19 +32740,16 @@ msgid "Krav Maga" msgstr "Крав-мага" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Kung Fu" -msgstr "Леопард" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Strategy" -msgstr "стиль леопарда" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Lizard Kung Fu" -msgstr "Ящерица" +msgstr "" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Muay Thai" @@ -31612,112 +32776,74 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Centipede Style uses an onslaught of rapid " "strikes. Each attack you land reduces the cost of attacking by 4." msgstr "" -"Один из Пяти Смертельных Ядов. С этим стилем, вы будете наносить множество\n" -"быстрых ударов. Каждый удар уменьшает кол-во очков действия для нанесения\n" -"следующего на 4. Бонус накапливается, но весь пропадает после получения " -"урона." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Scorpion Style is a mysterious art which " "uses pincer-like hands and a stinger kick. Critical hits should do massive " "damage and knock your target back, and we'll fix that as soon as we can." msgstr "" -"Один из Пяти Смертельных Ядов. Стиль скорпиона фокусируется на нанесении\n" -"щиплющих ударов руками и жалящих ударов ногами. Критические удары\n" -"наносят огромный урон, отбрасывая цель далеко назад." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Toad Style will be immensely powerful " "through its immunity to nearly any weapon, once we get the connection " "rebuilt. Until then, best not meditate by pausing, though it used to give " "you armor proportional to your Intelligence and Perception." msgstr "" -"Один из Пяти Смертельных Ядов. Невероятно мощный и защищающий от\n" -"почти любого оружия. Вы можете медитировать один ход; это даст вам\n" -"временный бонус к защите, пропорциональный вашему интеллекту и восприятию." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Viper Style has a uniqe three-part combo, " "ehich is supposed to initiate on a critical strike, then chain into piercing " "damage and a two-handed Viper Strike." msgstr "" -"Один из Пяти Смертельных Ядов. Стиль гадюки имеет уникальную комбинацию\n" -"из трёх ударов. Первый удар должен быть критическим. Второй наносит " -"проникающий\n" -"урон рукой, сложенной в конус. Мощнейший третий удар наносится двумя руками." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Crane uses intricate hand " "techniques and jumping dodges. Dexterity determines the majority of your " "damage, rather than Strength; you also receive a dodge bonus the turn after " "moving a tile." msgstr "" -"Один из пяти животных стилей Шаолиня. Стиль журавля использует\n" -"сложные движения кисти и увороты в прыжке. Ловкость, а не сила определяет\n" -"урон. Так же вы получаете бонус к увороту после перемещения на 1 тайл." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Dragon uses fluid movements and " "hard strikes. Intelligence improves your accuracy and damage dealt, as does " "moving." msgstr "" -"Один из животных стилей Шаолиня. Стиль дракона использует плавные движения\n" -"и тяжёлые удары. Интеллект увеличивает как шанс нанести удар, так и урон.\n" -"Перемещение на 1 клетку дает бонус к урону на 1 ход." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Leopard focuses on rapid, " "strategically planned strikes. Perception and Inteligence both boost " "accuracy, and moving further boosts your accuracy." msgstr "" -"Один из пяти животных стилей Шаолиня. Стиль леопарда фокусируется на\n" -"быстрых, стратегически наносимых ударах. Ваши восприятие и интеллект\n" -"увеличивают точность, а перемещение на 1 клетку даёт ускорение на 1 ход." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Snake focuses on sinuous " "movement and precision strikes. Your Perception iproves yur accuracy and " "your damage." msgstr "" -"Один из животных стилей Шаолиня. Стиль змеи использует извилистые движения\n" -"и точные удары. Восприятие увеличивает как шанс на успешное попадание, так \n" -"и наносимый урон." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Tiger focuses on relentless " "attacks above all else. Your Strength determines your accuracy, and your " "attacks do increasing damage as you continue attacking." msgstr "" -"Один из пяти животных стилей Шаолиня. Стиль тигра нацелен на нанесение\n" -"непрекращающихся ударов. Не ловкость, а сила определяет успешность удара.\n" -"Так же вы получаете накапливающийся бонус за несколько ходов успешных атак " -"подряд." #: lang/json/json_martialarts.py msgid "" @@ -31743,14 +32869,12 @@ msgid "Perception provides a bonus to hit." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Kung Fu" -msgstr "Скорпион" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Venom" -msgstr "Скорпион" +msgstr "" #: lang/json/json_martialarts.py msgid "Silent melee attacks" @@ -31765,9 +32889,8 @@ msgid "Snake Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Snake Sight" -msgstr "целеуказатель" +msgstr "" #: lang/json/json_martialarts.py msgid "Strength decreases damage when blocking" @@ -31801,23 +32924,20 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "Тигр" +msgstr "" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "Сила" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Toad Armor" -msgstr "броня SWAT" +msgstr "" #: lang/json/json_martialarts.py msgid "Toad Kung Fu" @@ -32968,6 +34088,8 @@ msgid "" "A black blob of viscous goo, oozing across the ground like a glob of living " "oil." msgstr "" +"Чёрный комок слизи неизвестной природы, который целенаправленно двигается по " +"земле словно живой шарик." #: lang/json/json_monsters.py msgid "" @@ -33040,6 +34162,7 @@ msgstr "" msgid "" "A dog's body with a mass of ropy, black tentacles reaching out from its head." msgstr "" +"Собака с множеством чёрных и липких щупалец, прорастающих из её головы." #: lang/json/json_monsters.py msgid "" @@ -33089,6 +34212,8 @@ msgid "" "A ferocious mutant dragonfly as big as a cat, darting through the air with a " "cluster of fangs for a mouth." msgstr "" +"Свирепый воздушный хищник размером с кошку, быстро летит словно пуля; во рту " +"у неё видны гроздья клыков." #: lang/json/json_monsters.py msgid "" @@ -33096,6 +34221,9 @@ msgid "" "clawform tentacles and star-shaped growths, with a head like the insides of " "a fish but for its dire utterance." msgstr "" +"Крабообразные чудовища, покрытые извивающимися антеннами, клешневидными " +"щупальцами и наростами в виде звёзд. Их голова представляет собой потроха " +"рыбы в самом худшем смысле этого слова." #: lang/json/json_monsters.py msgid "" @@ -33122,6 +34250,7 @@ msgid "" "A giant mutated black widow spider. A highly venomous nightmare come to " "life." msgstr "" +"Огромный мутировавший паук чёрная вдова. Крайне ядовитый кошмар на яву." #: lang/json/json_monsters.py msgid "" @@ -33134,6 +34263,8 @@ msgid "" "A giant spider with big forelegs and two pairs of inquisitive-looking eyes. " "It can leap quite quickly, even into the treetops." msgstr "" +"Огромный паук с большими ногами и двумя парами любопытных глаз. Он прыгает " +"очень быстро, даже на верхушки деревьев." #: lang/json/json_monsters.py msgid "" @@ -33146,6 +34277,8 @@ msgid "" "A gigantic spider with a bulbous thorax. It digs a deep underground burrow " "that serves as a pit to trap unwary prey." msgstr "" +"Огромный паук, с выпуклой грудной клеткой. Он выкапывает глубокую нору, " +"которая служит ловушкой для неосторожной жертвы." #: lang/json/json_monsters.py msgid "" @@ -33225,6 +34358,8 @@ msgid "" "A large and colorful game bird native to the forests of North America. Its " "head and beak are covered in fleshy accretions." msgstr "" +"Большая колоритная птица родом из лесов Северной Америки. Их голова и клюв " +"покрыты мясистым придатком." #: lang/json/json_monsters.py msgid "" @@ -33245,6 +34380,9 @@ msgid "" "but leaps very quickly, appearing to move instantaneously from one spot to " "another." msgstr "" +"Небольшой паук с удлинёнными ногами. Он не плетёт много паутины, зато " +"прыгает так быстро, что кажется, будто он мгновенно перемещается с места на " +"место." #: lang/json/json_monsters.py msgid "" @@ -33268,6 +34406,8 @@ msgid "" "A midsized spider with a bulbous thorax. It creates a subterranean nest and " "lies in wait for prey to draw close enough for capture." msgstr "" +"Большой паук, с выпуклой грудной клеткой. Он выкапывает подземное гнездо и " +"ждёт, пока кто-нибудь не свалится туда и не увязнет в паутине." #: lang/json/json_monsters.py msgid "" @@ -33287,6 +34427,7 @@ msgid "" "A mutant, landfaring variety of the signal crayfish, this massive crustacean " "resembles a humongous lobster." msgstr "" +"Мутировавшая разновидность сигнальных раков, массивное ракообразное существо." #: lang/json/json_monsters.py msgid "" @@ -33311,6 +34452,8 @@ msgid "" "A pale hairless man with an impressive athletic physique. Its lidless eyes " "are totally black, and seeping with blood." msgstr "" +"Бритоголовый человек с бледной кожей и спортивным телосложением. Его глаза " +"полностью черного цвета и из них текут кровавые слёзы." #: lang/json/json_monsters.py msgid "" @@ -33380,6 +34523,8 @@ msgid "" "A small black blob of viscous goo, oozing across the ground like a glob of " "living oil." msgstr "" +"Маленький чёрный комок слизи неизвестной природы, который целенаправленно " +"двигается по земле словно живой шарик." #: lang/json/json_monsters.py msgid "" @@ -33401,6 +34546,9 @@ msgid "" "and facial markings. It is resourceful and agile enough to open sealed " "containers with its paws." msgstr "" +"Небольшой зверёк родом из Северной Америки, известен своими ловкими лапками " +"и отметинами на морде. Достаточно находчивый и ловкий, чтобы открывать " +"своими лапами закрытые контейнеры." #: lang/json/json_monsters.py msgid "" @@ -33419,6 +34567,8 @@ msgid "" "A small, elegant black bird, famous for its distinctive call. An " "intelligent bird, there is a glitter of mischief behind its eyes." msgstr "" +"Маленькая чёрная птица, известная своим карканьем. Довольно умная, её глаза " +"сверкают озорством." #: lang/json/json_monsters.py msgid "" @@ -33426,7 +34576,7 @@ msgid "" "the floor. Two SMG barrels swivel 360\n" "degrees." msgstr "" -"Меленькая, круглая турель, выезжающая из пола.\n" +"Маленькая, круглая турель, выезжающая из пола.\n" "Два пулемётных ствола могут поворачиваться на 360 градусов" #: lang/json/json_monsters.py @@ -33440,6 +34590,9 @@ msgid "" "A spotted wild cat living across much of North America. It is not a serious " "threat to humans, but it can be aggressive if not left alone." msgstr "" +"Пестрая дикая кошка, живущая на большей части Северной Америки. Не " +"представляет серьезной угрозы для человека, однако может быть агрессивной, " +"если ее дразнить." #: lang/json/json_monsters.py msgid "A squiggling severed portion of a wounded giant worm." @@ -33453,7 +34606,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "A strange moving darkness, bringing with it the softest of whispers." -msgstr "" +msgstr "Странное движение самой темноты, сопровождающееся тихим шёпотом." #: lang/json/json_monsters.py msgid "" @@ -33495,6 +34648,8 @@ msgid "" "A towering swarm of mutated rats, their tails knotted together in a filthy " "mass. A foetid stench flows from its filthy presence." msgstr "" +"Высокая горка, состоящая из крыс-мутантов, спутанных между собой хвостами в " +"мерзкую массу. Источает зловонный смрад." #: lang/json/json_monsters.py msgid "A translucent black snake, long and fearsome looking." @@ -33534,6 +34689,8 @@ msgid "" "A wolf spider mutated to about thirty times its normal size, it moves " "quickly and aggresively to catch and consume prey." msgstr "" +"Паук-волк, который, в следствии мутации, увеличился примерно в тридцать раз " +"от нормального размера. Агрессивен и быстро передвигается." #: lang/json/json_monsters.py msgid "" @@ -33559,6 +34716,7 @@ msgid "" "An amorphous black creature, detaching and sprouting tentacles without any " "apparent pause." msgstr "" +"Бесформенное чёрное создание, готовое в любой момент выпустить щупальца." #: lang/json/json_monsters.py msgid "" @@ -33584,6 +34742,8 @@ msgid "" "An enormous fleshy snail, with an oddly human face. The eyestalks protrude " "from where the eyes should be." msgstr "" +"Огромная толстая улитка с чудным человеческим лицом. Глазные стебельки " +"выступают из глазниц." #: lang/json/json_monsters.py msgid "" @@ -33596,6 +34756,8 @@ msgid "" "An enormous mutant mosquito, fluttering erratically, its face dominated by a " "long, spear-tipped proboscis." msgstr "" +"Огромный комар-мутант, хаотично мечется, из его головы торчат длинные, " +"похожие на копья хоботки." #: lang/json/json_monsters.py msgid "" @@ -33609,6 +34771,9 @@ msgid "" "lined with pointed teeth, and it is covered in fine hairs which can be shed " "and fired like darts." msgstr "" +"Огромным белый червь, ползающий под землёй. Его пасть утыкана рядами клыков, " +"а сам он покрыт прозрачными волосками, которые, если выдернуть, можно метать " +"как дартс." #: lang/json/json_monsters.py msgid "" @@ -33623,12 +34788,16 @@ msgid "" "An eyeball the size of an easy chair, covered in rolling blue flames. It " "floats through the air, spinning slowly to draw its gaze in every direction." msgstr "" +"Огромный глаз, размером с табуретку, покрытый переливающимся синим пламенем. " +"Он парит в воздухе, медленно вращаясь, чтобы обозревать окрестности." #: lang/json/json_monsters.py msgid "" "An infamous spider with a characteristic red hourglass marking on its black " "carapace, known for its highly toxic bite." msgstr "" +"Паук, с характерными рисунком в виде красных песочных часов на спине. Он " +"известен своим сильнодействующим ядом." #: lang/json/json_monsters.py msgid "" @@ -33642,6 +34811,8 @@ msgid "" "Automated anti-personnel drone, a fist-sized robot surrounded by whirring " "blades." msgstr "" +"Автоматический противопехотный дрон. Робот размером с кулак, окруженный " +"вращающимися лезвиями." #: lang/json/json_monsters.py msgid "" @@ -33670,6 +34841,10 @@ msgid "" "eating all the bodies, \n" "actual cannibal Shia LaBeouf." msgstr "" +"Живёт в лесочке людоед, \n" +"Он ищет жертву на обед, \n" +"Повсюду кости, там и тут, \n" +"Шайя Лабаф его зовут." #: lang/json/json_monsters.py msgid "Mom?" @@ -33719,7 +34894,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "Shia LaBeouf" -msgstr "" +msgstr "Шайя Лабаф" #: lang/json/json_monsters.py msgid "" @@ -33772,6 +34947,8 @@ msgid "" "The Ford Sanitron, a utility robot designed for cleaning up waste material " "in hazardous conditions." msgstr "" +"Форд Санитрон, служебный робот, предназначенный для уборки территории в " +"опасных для жизни условиях." #: lang/json/json_monsters.py msgid "" @@ -33841,6 +35018,9 @@ msgid "" "robots. Initially designed for military patrol and escort service, t rolls " "on a set of hydraulic treads and is armed with a 3\"/50 caliber gun." msgstr "" +"Northrop Watchman X-1 is - серия тяжело бронированных боевых роботов. " +"Изначально предназначенные для военного патруля и эскорта. Передвигается на " +"гидравлических протекторах и вооружен орудием калибра 3 \"/ 50." #: lang/json/json_monsters.py msgid "" @@ -33848,6 +35028,9 @@ msgid "" "About the size of a cat, it is hardy and adaptive, and a fairly common sight " "in urban areas." msgstr "" +"Маленький, всеядный сумчатый зверёк, родом из Северной Америки. Размером с " +"кошку, выносливые и легко адаптирущиеся, являются обычным явлением в " +"городских кварталах." #: lang/json/json_monsters.py msgid "" @@ -33889,6 +35072,8 @@ msgid "" "extends across the continent. It forms its den in small burrows, preferring " "to occupy the nesting holes of its prey." msgstr "" +"Длиннохвостая ласка, небольшой хищник, охотящийся по всему континенту. Живет " +"в небольших норах, предпочитая занимать логово своей добычи." #: lang/json/json_monsters.py msgid "" @@ -33913,12 +35098,16 @@ msgid "" "The snowshoe hare, a small grass-eater with a brown fur coat that changes to " "white in the wintertime." msgstr "" +"Маленькое животное с сильными задними ногами, питающееся травой. С мехом " +"коричневого цвета, который зимой обретает белый окрас." #: lang/json/json_monsters.py msgid "" "The timber rattlesnake is the most venomous viper native to New England. " "Climatic changes have extended its range far into the north." msgstr "" +"Лесной гремучник самая ядовитая змея в Новой Англии. Климатические изменения " +"расширили их ареал обитания на север." #: lang/json/json_monsters.py msgid "" @@ -33943,6 +35132,8 @@ msgid "" "This once-human body is barely recognizable, scrambling about on all fours, " "it's nails and teeth both sharpened into dangerous looking spikes." msgstr "" +"В этой твари едва просматривается бывшее человеческое тело. Передвигается на " +"четвереньках, а его отточенные когти и клыки угрожающе торчат словно шипы." #: lang/json/json_monsters.py msgid "" @@ -33959,6 +35150,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "Your precious generator, noisily humming away. Defend it at all costs!" msgstr "" +"Ваш драгоценный генератор, испускающий громкое гудение. Защищать любой ценой!" #: lang/json/json_monsters.py msgid "amigara horror" @@ -33994,7 +35186,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "black widow spider" -msgstr "" +msgstr "паук чёрная вдова" #: lang/json/json_monsters.py msgid "blank body" @@ -34002,7 +35194,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "blob" -msgstr "слизь" +msgstr "комок слизи" #: lang/json/json_monsters.py msgid "blood sacrifice" @@ -34010,7 +35202,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "bobcat" -msgstr "" +msgstr "рысь" #: lang/json/json_monsters.py msgid "boomer" @@ -34046,7 +35238,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "cleaner bot" -msgstr "" +msgstr "робот-уборщик" #: lang/json/json_monsters.py msgid "cougar" @@ -34122,7 +35314,7 @@ msgstr "робоглаз" #: lang/json/json_monsters.py msgid "feral hunter" -msgstr "" +msgstr "дикий охотник" #: lang/json/json_monsters.py msgid "flaming eye" @@ -34186,7 +35378,7 @@ msgstr "гигантская пчела" #: lang/json/json_monsters.py msgid "giant black widow" -msgstr "" +msgstr "гигантская чёрная вдова" #: lang/json/json_monsters.py msgid "giant centipede" @@ -34194,7 +35386,7 @@ msgstr "гигантская многоножка" #: lang/json/json_monsters.py msgid "giant crayfish" -msgstr "" +msgstr "гигантский рак" #: lang/json/json_monsters.py msgid "giant dragonfly" @@ -34210,7 +35402,7 @@ msgstr "гигантская лягушка" #: lang/json/json_monsters.py msgid "giant jumping spider" -msgstr "" +msgstr "гигантский паук-скакун" #: lang/json/json_monsters.py msgid "giant mosquito" @@ -34222,7 +35414,7 @@ msgstr "гигантский слизень" #: lang/json/json_monsters.py msgid "giant trapdoor spider" -msgstr "" +msgstr "гигантский паук-гнездовик" #: lang/json/json_monsters.py msgid "giant wasp" @@ -34234,7 +35426,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "giant wolf spider" -msgstr "" +msgstr "огромный паук-волк" #: lang/json/json_monsters.py msgid "giant worm" @@ -34286,7 +35478,7 @@ msgstr "бармаглот" #: lang/json/json_monsters.py msgid "jackrabbit" -msgstr "" +msgstr "заяц" #: lang/json/json_monsters.py msgid "jumping spider" @@ -34306,11 +35498,11 @@ msgstr "мэнхак" #: lang/json/json_monsters.py msgid "mi-go" -msgstr "" +msgstr "ми-го" #: lang/json/json_monsters.py msgid "miner bot" -msgstr "" +msgstr "робот-сапёр" #: lang/json/json_monsters.py msgid "mink" @@ -34342,7 +35534,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "police bot" -msgstr "" +msgstr "робот-полицейский" #: lang/json/json_monsters.py msgid "queen ant" @@ -34362,7 +35554,7 @@ msgstr "крысиный король" #: lang/json/json_monsters.py msgid "rattlesnake" -msgstr "" +msgstr "гремучая змея" #: lang/json/json_monsters.py msgid "scarred zombie" @@ -34370,7 +35562,7 @@ msgstr "зомби в шрамах" #: lang/json/json_monsters.py msgid "security bot" -msgstr "" +msgstr "сторожевой бот" #: lang/json/json_monsters.py msgid "sewer rat" @@ -34422,11 +35614,11 @@ msgstr "шламовая гусеница" #: lang/json/json_monsters.py msgid "slug" -msgstr "" +msgstr "слизень" #: lang/json/json_monsters.py msgid "small blob" -msgstr "маленькая слизь" +msgstr "маленький комок слизи" #: lang/json/json_monsters.py msgid "smoker zombie" @@ -34466,11 +35658,11 @@ msgstr "собака с щупальцами" #: lang/json/json_monsters.py msgid "thing" -msgstr "" +msgstr "нечто" #: lang/json/json_monsters.py msgid "trapdoor spider" -msgstr "" +msgstr "паук-гнездовик" #: lang/json/json_monsters.py msgid "tribot" @@ -34514,7 +35706,7 @@ msgstr "" #: lang/json/json_monsters.py msgid "weasel" -msgstr "" +msgstr "ласка" #: lang/json/json_monsters.py msgid "wolf" @@ -34546,7 +35738,7 @@ msgstr "зомби-качок" #: lang/json/json_monsters.py msgid "zombie child" -msgstr "" +msgstr "зомби-ребёнок" #: lang/json/json_monsters.py msgid "zombie cop" @@ -34554,7 +35746,7 @@ msgstr "зомби-полицай" #: lang/json/json_monsters.py msgid "zombie dog" -msgstr "зомби собака" +msgstr "зомби-собака" #: lang/json/json_monsters.py msgid "zombie hulk" @@ -34884,7 +36076,7 @@ msgstr "Раздвоенный язык" #: lang/json/json_mutations.py msgid "Frail" -msgstr "" +msgstr "Хардкор" #: lang/json/json_mutations.py msgid "Full Night Vision" @@ -35267,6 +36459,14 @@ msgstr "Радиогенный" msgid "Regeneration" msgstr "Регенерация" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "Марафонец" @@ -35473,6 +36673,10 @@ msgstr "" msgid "Thick Scales" msgstr "Толстая чешуя" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -35911,6 +37115,12 @@ msgstr "" "У вас есть длинный, изящный хвост, как у большой кошки. Улучшает ваш " "баланс, что позволяет вам чаще уворачиваться." +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -36508,6 +37718,13 @@ msgstr "" "Ваши глаза мутировали и теперь вы можете видеть радиационное излучение в " "инфракрасном спектре." +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -36650,6 +37867,12 @@ msgstr "Ваши мышцы стали ещё сильнее. Сила + 2" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "Ваши мускулы очень замедлены. Вы бегаете на 30% хуже." +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -46455,19 +47678,21 @@ msgid "" "performing at kids' parties was a dream come true until the world ended. " "There's precious few balloon animals in your future now." msgstr "" +"Всё обожаете смешить людей. Сбылась ваша голубая мечта — бросить школу и " +"выступать на детских праздниках, но тут случился конец света. Теперь на вас " +"клоунский наряд, но нет зрителей, кроме зомби." #: lang/json/json_professions.py msgid "" "Although you never got your driver's license, you've always loved cars. At " "least now you'll never be wanting for materials." msgstr "" -"Хотя вы так и не получили свои водительские права, вы всегда любили " -"автомобили. Вы начинаете с гаечным ключом, поясом для инструментов и " -"литературой о машинах." +"Хотя вы так и не получили водительские права, вы всегда любили покопаться в " +"автомобилях. Теперь у вас не будет недостатка в запчастях." #: lang/json/json_professions.py msgid "Back Alley Brawler" -msgstr "" +msgstr "Гроза подворотен" #: lang/json/json_professions.py msgid "Backpacker" @@ -46486,6 +47711,8 @@ msgid "" "Before the apocalypse, you turned to Heroin to soothe your many problems. " "Now, your habit is your only comfort and your only drive." msgstr "" +"Ещё до конца света вы крепко подсели на героин, ища способ уйти от проблем. " +"Теперь вами движет только одна зависимость в поиске очередной дозы." #: lang/json/json_professions.py msgid "" @@ -46540,6 +47767,8 @@ msgid "" "Caffeine pills and all-nighters in front of a computer screen have given you " "some basic hacking skills. You start with a level in computers." msgstr "" +"Литры кофе, круглые сутки перед компьютером и красные глаза вперившиеся в " +"монитор. Вы начинаете с +1 в навыке владения компьютерами." #: lang/json/json_professions.py msgid "Chain Smoker" @@ -46567,6 +47796,9 @@ msgid "" "fate. Now you are on your own with nothing to your name but a suit of really " "kinky black leather. Unfortunately, there's no safewords in the apocalypse." msgstr "" +"В чехарде конца света злая судьба разделила вас с господином. Теперь вы " +"предоставлены самому себе, на вас остался чёрный кожаный костюм, сексуально " +"обтягивающий тело. К сожалению, в апокалипсисе нет стоп-слов." #: lang/json/json_professions.py msgid "Electrician" @@ -46578,8 +47810,8 @@ msgid "" "of hunting with a bow even more. You start with a level in archery and " "survival." msgstr "" -"С детства вы любили охоту, а охоту с луком еще больше. Вы начинаете с " -"навыками стрельбы и выживания." +"С детства вы любили охоту, а охоту с луком еще больше. Вы начинаете с +1 в " +"навыках стрельбы из лука и выживания." #: lang/json/json_professions.py msgid "" @@ -46616,7 +47848,7 @@ msgstr "Слесарь" #: lang/json/json_professions.py msgid "Hitchhiker" -msgstr "" +msgstr "Автостопщик" #: lang/json/json_professions.py msgid "Hobo" @@ -46649,6 +47881,9 @@ msgid "" "for the premier anime convention in the Northeast. It just had to be the " "day of the apocalypse. At least you were ready in case your costume tore." msgstr "" +"Поздно вечером вы с друзьями смотрели аниме и слегка перекусывали, готовясь " +"к грандиозному слёту анимешников. Но как раз в этот день наступил " +"апокалипсис." #: lang/json/json_professions.py msgid "Local Sheriff" @@ -46656,7 +47891,7 @@ msgstr "Местный шериф" #: lang/json/json_professions.py msgid "Lost Submissive" -msgstr "" +msgstr "Раб БДСМ" #: lang/json/json_professions.py msgid "Lumberjack" @@ -46699,7 +47934,7 @@ msgstr "Панк-рокерша" #: lang/json/json_professions.py msgid "Scoundrel" -msgstr "Негодяй" +msgstr "Жулик" #: lang/json/json_professions.py msgid "Security Guard" @@ -46715,7 +47950,7 @@ msgstr "Жертва в душе" #: lang/json/json_professions.py msgid "Street Thug" -msgstr "" +msgstr "Уличный хулиган" #: lang/json/json_professions.py msgid "Student" @@ -46734,14 +47969,16 @@ msgid "" "The apocalypse has been your psychotic dream come true. Now that the system " "is dead, it's time to party among the bones of the world!" msgstr "" +"Апокалипсис исполнил ваши заветные психотические мечты. Система рухнула и " +"теперь время потанцевать на костях старого мира!" #: lang/json/json_professions.py msgid "" "They say you don't have any \"useful skills\", but at least your clothes fit " "well." msgstr "" -"Они говорят, что у тебя нет никаких \"полезных навыков\"... зато у тебя есть " -"нормальная одежда." +"Они говорят, что у тебя нет никаких \"полезных навыков\", но по крайней мере " +"одежда у тебя сидит по фигуре." #: lang/json/json_professions.py msgid "Tinkerer" @@ -46749,7 +47986,7 @@ msgstr "Изобретатель" #: lang/json/json_professions.py msgid "Trapper" -msgstr "Ловец" +msgstr "Зверолов" #: lang/json/json_professions.py msgid "Unemployed" @@ -46757,11 +47994,11 @@ msgstr "Безработный" #: lang/json/json_professions.py msgid "Used Car Salesman" -msgstr "Продавец автомобилей" +msgstr "Продавец б/у автомобилей" #: lang/json/json_professions.py msgid "Wannabe Mechanic" -msgstr "Механик самоучка" +msgstr "Механик-самоучка" #: lang/json/json_professions.py msgid "" @@ -46770,6 +48007,9 @@ msgid "" "best. Now, at the end of the world, you've finally found your place in " "society." msgstr "" +"Босс знал, что на вас можно положиться в самых грязных делах. От простого " +"решения вопроса мордобоем, до более сложного \"урегулирования отношений\". " +"Теперь, после конца света, вы наконец-то нашли своё место в обществе." #: lang/json/json_professions.py msgid "" @@ -46777,6 +48017,9 @@ msgid "" "realize you were in over your head, and needed rescuing yourself. You start " "with a level in firearms." msgstr "" +"Когда вы ехали на очередной вызов, вы и подумать не могли, что придётся " +"спасать не кого-нибудь, а свою собственную задницу. Начинаете игру с +1 " +"уровнем стрельбы." #: lang/json/json_professions.py msgid "" @@ -46799,6 +48042,8 @@ msgid "" "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay for " "what they've done." msgstr "" +"Вы не видели столько крови со времён войны. Весь мир сошёл с ума! Они съели " +"ваших внуков! Чёрт побери, вы с ними рассчитаетесь по полной." #: lang/json/json_professions.py msgid "" @@ -46824,6 +48069,9 @@ msgid "" "decent living off of your catches, and trapping tutorials. You start with a " "skill in trapping." msgstr "" +"Большую часть жизни вы со своим отцом занимались звероловством. Вы неплохо " +"жили за счёт добычи диких зверей и выпуска пособий по их поимке. Начинаете " +"игру с +1 в навыке ловушки." #: lang/json/json_professions.py msgid "" @@ -46839,12 +48087,17 @@ msgid "" "meaning of \"fast\" food by running for your life. You start with a level in " "cooking." msgstr "" +"Вы устроились на работу в закусочную всего неделю назад, а теперь вам " +"приходится на самом деле быть быстрым, чтобы не оказаться чьим-то питанием. " +"Начинаете с одним уровнем навыка в кулинарии." #: lang/json/json_professions.py msgid "" "You used to work at a local hardware store, and you did a lot of home " "renovations yourself. You start with a level in construction." msgstr "" +"Вы работали в местном хозяйственном магазине и имеете большой опыт в ремонте " +"квартир и домов. Начинаете с +1 в навыке строительства." #: lang/json/json_professions.py msgid "" @@ -46852,6 +48105,9 @@ msgid "" "work, and you just so happened to be working on an evac shelter when the " "cataclysm struck. You start with a level in electronics." msgstr "" +"Вы часто выполняли электро-монтажные работы для небольших компаний. Так " +"случилось, что вы как раз меняли проводку в убежище, когда произошёл " +"катаклизм. Начинаете с +1 в навыке электроники." #: lang/json/json_professions.py msgid "" @@ -46899,6 +48155,8 @@ msgid "" "You were about to marry your bride before the cataclysm, now you spend your " "days searching for her." msgstr "" +"Вы собирались жениться до катаклизма, и теперь тратите время на поиски своей " +"невесты." #: lang/json/json_professions.py msgid "" @@ -46906,6 +48164,9 @@ msgid "" "the world ended. You start with a few related tools and some skill in " "fabrication." msgstr "" +"В колледже вы записались на факультатив по изучению кузнечного дела и вскоре " +"после этого наступил конец света. Начинаете игру в рабочей одежде, " +"инструментом и +1 в навыке производства." #: lang/json/json_professions.py msgid "" @@ -46921,6 +48182,9 @@ msgid "" "you. You wish that it wasn't a common occurrence. You start with the last of " "your stash and a strong crack addiction." msgstr "" +"Вы собирались получить деньги за работу, когда сутенер попытался вас убить. " +"Вам не хотелось бы попасть снова в подобную ситуацию. Начинаете в своём " +"прикиде и сильной зависимостью от крэка." #: lang/json/json_professions.py msgid "" @@ -46942,6 +48206,9 @@ msgid "" "You worked for a small-time security company guarding local businesses, but " "there's nothing in the company policy for dealing with zombies." msgstr "" +"Вы работали в небольшом охранном предприятии, предлагающем услуги для " +"местного бизнеса. Но в уставе компании ничего не говорится о том, что нужно " +"иметь дело с зомби." #: lang/json/json_professions.py msgid "" @@ -46949,6 +48216,9 @@ msgid "" "fact, you sold her a broken down beater right before the cataclysm. You " "start with bartering skills." msgstr "" +"Вы бы и мать родную могли продать за доллар без всяких угрызений совести. " +"По правде говоря, вы продали её сломанный миксер прямо перед катаклизмом. " +"Начинаете игру с +1 уровнем торговли." #: lang/json/json_professions.py msgid "" @@ -46974,6 +48244,9 @@ msgid "" "your parents' trust fund. But now they're gone, and the only thing between " "you and death is the open road and your backpack." msgstr "" +"Вы жили в своё удовольствие, путешествуя и осматривая достопримечательности, " +"всё за счёт родительского траст-фонда. Но теперь всё пропало и между вами и " +"смертью лишь бескрайняя дорога и рюкзак за спиной." #: lang/json/json_professions.py msgid "" @@ -46988,6 +48261,9 @@ msgid "" "skills to survive. You kept your gun, but fired the last bullet during your " "escape." msgstr "" +"С детства вас воспитывала улица и вы не гнушались самыми грязными делишками. " +"Теперь пришла пора использовать свои навыки для выживания. У вас имеется " +"пистолет, но с пустой обоймой, так как пришлось отстреливаться от погони." #: lang/json/json_professions.py msgid "" @@ -46995,6 +48271,9 @@ msgid "" "skills to survive. You've got your trusty switchblade, and the skill to use " "it." msgstr "" +"С детства вас воспитывала улица и вы не гнушались самыми грязными делишками. " +"Теперь пришла пора использовать свои навыки для выживания. С собой у вас " +"верный нож-выкидуха и навык для его использования." #: lang/json/json_professions.py msgid "" @@ -47023,12 +48302,16 @@ msgid "" "Your house has been demolished and your planet destroyed, but at least you " "still have your towel." msgstr "" +"Ваш дом снесён, планета уничтожена, но не беда, главное, что у вас есть с " +"собой полотенце." #: lang/json/json_professions.py msgid "" "Your time spent fighting in back-alley brawls just might serve you well in " "the rough-and-tumble world left behind after the apocalypse." msgstr "" +"Долгие годы вы набивали кулаки в уличных драках, теперь это послужит хорошим " +"подспорьем в беспорядке пост-апокалиптического мира." #: lang/json/json_skills.py msgid "" @@ -47105,6 +48388,9 @@ msgid "" "general experience increases accuracy with any bows or firearms, but is " "secondary to practice with the type of ranged weapon in question." msgstr "" +"Общий навык владения луками и огнестрельным оружием. Увеличивает точность " +"стрельбы из любого оружия, но не так сильно, как делает это " +"специализированный навык." #: lang/json/json_skills.py msgid "" @@ -47358,7 +48644,7 @@ msgstr "гранатометы" #: lang/json/json_skills.py msgid "marksmanship" -msgstr "" +msgstr "стрельба" #: lang/json/json_skills.py msgid "mechanics" @@ -47420,8 +48706,8 @@ msgid "" msgstr "" "Реклама бионического импланта \"Инфракрасное зрение\" компании " "\"Двадцать8\". На рисунке механический феникс, окруженный пламенем. Сверху " -"надписи: \"Установи новейшую Модель 28.tx Феникс сегодня!\" и \"Двадцать8. " -"Видит, когда вы сбились с пути.\"" +"надписи: \"Установи новейшую модель 28.tx Феникс прямо сейчас!\" и " +"\"Двадцать8. Заметите всё, что упустили из виду.\"" #: lang/json/json_snippets.py msgid "" @@ -47429,8 +48715,8 @@ msgid "" "shows a picture of a dozen eyebots floating over a woman as she jogs through " "a park. The captions read: \"Built to Protect. Programmed to Serve.\"" msgstr "" -"Реклама роботов-полицейских компании \"ДаблТех\". На рисунке робоглазов, " -"летающих над девушкой, пока она занимается утренней пробежкой в парке. " +"Реклама роботов-полицейских компании \"ДаблТех\". На рисунке робоглазы, " +"летающие над девушкой, пока она занимается утренней пробежкой в парке. " "Сверху надпись: \"Собрано для защиты. Запрограммировано для служения.\"" #: lang/json/json_snippets.py @@ -47465,9 +48751,9 @@ msgid "" "\"Built to Protect. Programmed to Serve.\"" msgstr "" "Реклама роботов-полицейских компании \"ДаблТех\". На рисунке робот-" -"полицейский бьет струей перца преступника в наручниках. На фоне бой-скауты " -"салютуют роботу. Сверху надпись: \"Собрано для защиты. Запрограммировано для " -"служения.\"" +"полицейский бьёт струёй перца преступника в наручниках. На заднем плане " +"бойскауты салютуют роботу. Сверху надпись: \"Собрано для защиты. " +"Запрограммировано для служения.\"" #: lang/json/json_snippets.py msgid "" @@ -47524,6 +48810,10 @@ msgid "" "looters and stepping over charred and smoking corpses. The caption reads: " "\"R.U.R. Technology you can Trust.\"" msgstr "" +"Реклама патрульных полицейских роботов компании \"Универсальные Роботы " +"Роберта\". На рисунке трёхногий робот сжигает толпу мародёров, переступая " +"через груды дымящихся трупов. Сверху надпись: \"У.Р.Р. Техника, которой " +"доверяют\"" #: lang/json/json_snippets.py msgid "" @@ -47573,6 +48863,10 @@ msgid "" "foreground a blood-drenched doctor gives an exaggerated wink and two thumbs " "up. The caption reads: \"Holiday sales! Get the package deals!\"" msgstr "" +"Реклама кибер-бутика Сивиллы. На рисунке изображён парень-ботан в окружении " +"восхищённых женщин. На переднем плане выпачканный в крови доктор " +"многообещающе подмигивает и показывает два больших пальца вверх. Надпись " +"гласит: \"Праздничная распродажа! Несколько услуг в одном пакете!\"" #: lang/json/json_snippets.py msgid "" @@ -47581,7 +48875,7 @@ msgid "" "patient is strapped to a chair but cheerfully gives two thumbs up. The " "caption reads: \"Free Plastic Surgery While You Wait!\"" msgstr "" -"Реклама Кибер-бутика Сивиллы. На рисунке несколько одетых в бикини женщин-" +"Реклама кибер-бутика Сивиллы. На рисунке несколько одетых в бикини женщин-" "врачей удаляют кожу с лица мужчины. Хотя пациент привязан к стулу, он на " "удивление бодро держит оба больших пальца вверх. Сверху надпись: \"Доступная " "пластическая хирургия пока вы отдыхаете!\"" @@ -47648,9 +48942,9 @@ msgid "" "you've been missing.\"" msgstr "" "Реклама бионического импланта \"Алмазная роговица\" компании \"Двадцать8\". " -"На рисунке изображен сокол с кибернетическим модулем на клюве. Сверху " -"надписи: \"Установи новейшую Модель 28.xx Ястрибиный-Глаз!\" и \"Двадцать8. " -"Видит, когда вы сбились с пути.\"" +"На рисунке изображен сокол с кибермодулем в клюве. Сверху надписи: " +"\"Установи новейшую модель 28.xx Соколиный-Глаз!\" и \"Двадцать8. Заметите " +"всё, что упустили из виду.\"" #: lang/json/json_snippets.py msgid "" @@ -47660,9 +48954,9 @@ msgid "" "what you've been missing.\"" msgstr "" "Реклама бионического импланта \"Алмазная роговица\" компании \"Двадцать8\". " -"На рисунке к изображен грозный орел, к которому присоединен кибернетический " -"модуль. Сверху надписи: \"Установи новейшую Модель 28.bx Орлиный-Глаз!\" и " -"\"Двадцать8. Видит, когда вы сбились с пути.\"" +"На рисунке изображен грозный орел, к которому присоединен кибермодуль. " +"Сверху надписи: \"Установи новейшую Модель 28.bx Орлиный-Глаз!\" и " +"\"Двадцать8. Заметите всё, что упустили из виду.\"" #: lang/json/json_snippets.py msgid "" @@ -47672,9 +48966,9 @@ msgid "" "missing.\"" msgstr "" "Реклама бионического импланта \"Ночное зрение\" компании \"Двадцать8\". На " -"рисунке к изображена сова, атакующая кибернетический модуль. Сверху надписи: " -"\"Установи новейшую Модель 28.hx Ночная-Сова!\" и \"Двадцать8. Видит, когда " -"вы сбились с пути.\"" +"рисунке изображена сова, пикурующая на кибермодуль. Сверху надписи: " +"\"Установи новейшую модель 28.hx Ночная-Сова!\" и \"Двадцать8. Заметите всё, " +"что упустили из виду.\"" #: lang/json/json_snippets.py msgid "" @@ -47684,9 +48978,18 @@ msgid "" "what you've been missing.\"" msgstr "" "Реклама бионического импланта \"Арома-визоры\" компании \"Двадцать8\". На " -"рисунке изображен стервятник, сидящий на горе из черепов и кибернетических " -"модулей. Сверху надписи: \"Установи новейшую Модель 28.vx Стервятник сегодня!" -"\" и \"Двадцать8. Видит, когда вы сбились с пути.\"" +"рисунке изображен стервятник, сидящий на горе из черепов и кибермодулей. " +"Сверху надписи: \"Установи новейшую модель 28.vx Стервятник прямо сейчас!\" " +"и \"Двадцать8. Заметите всё, что упустили из виду.\"" + +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" #: lang/json/json_techniques.py #, python-format @@ -47708,6 +49011,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -47718,11 +49025,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -47733,6 +49065,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -47748,21 +49094,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -47778,6 +49154,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -47793,14 +49179,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -47809,10 +49240,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -47821,6 +49292,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -47851,6 +49327,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -47866,11 +49362,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -47881,21 +49392,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -47911,11 +49460,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -47926,6 +49489,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -48052,7 +49620,7 @@ msgstr "центрифуга" #: lang/json/json_terrain.py msgid "chain link fence" -msgstr "" +msgstr "ограда из сетки рабица" #: lang/json/json_terrain.py msgid "checkered switch" @@ -48152,7 +49720,7 @@ msgstr "" #: lang/json/json_terrain.py msgid "downward slope" -msgstr "" +msgstr "уклон вниз" #: lang/json/json_terrain.py msgid "elevator" @@ -48232,7 +49800,7 @@ msgstr "высокое витражное окно" #: lang/json/json_terrain.py msgid "ladder" -msgstr "лестница" +msgstr "стремянка" #: lang/json/json_terrain.py trapdef.cpp msgid "lava" @@ -48464,7 +50032,7 @@ msgstr "" #: lang/json/json_terrain.py msgid "slime" -msgstr "" +msgstr "слизь" #: lang/json/json_terrain.py msgid "slot machine" @@ -48500,7 +50068,7 @@ msgstr "земляничный куст" #: lang/json/json_terrain.py msgid "taped window" -msgstr "" +msgstr "заклеенное окно" #: lang/json/json_terrain.py msgid "tree" @@ -48520,7 +50088,7 @@ msgstr "заросли" #: lang/json/json_terrain.py msgid "upward slope" -msgstr "" +msgstr "уклон вверх" #: lang/json/json_terrain.py msgid "walkway" @@ -48582,6 +50150,12 @@ msgid "" "recoil by pausing ('.') for a turn or moving normally. High strength " "reduces recoil, so weak characters might want to stick to .22 or 9mm guns." msgstr "" +"При стрельбе из огнестрельного оружия, вы скорее всего получите " +"предупреждение об отдаче. Более мощные патроны вызывают более высокую " +"отдачу. Отдача снижает процент попадания, но вы можете избавиться от неё, " +"подождав немного (нажимая \".\" или \"5\") или просто двигаясь. Высокая сила " +"снижает отдачу, а слабым персонажам лучше использовать оружие калибра .22 " +"или 9мм." #: lang/json/json_tutorial.py msgid "" @@ -48589,6 +50163,9 @@ msgid "" "another attack. Your dexterity and melee skills are used to determine " "whether an attack hits, while strength affects damage." msgstr "" +"Удар по монстру ошеломит его ненадолго, позволяя вам убежать или провести " +"ещё одну атаку. Ваши ловкость и навык рукопашного боя влияют на шанс " +"попадания, а сила влияет на нанесённый урон." #: lang/json/json_tutorial.py msgid "" @@ -48599,12 +50176,20 @@ msgid "" "swing your melee weapon depends on both its size and weight; small, compact " "weapons are the fastest." msgstr "" +"Если нажать \"i\" и выбрать букву оружия, то можно увидеть его боевые " +"характеристики. Обычный удар игнорирует большинство видов брони, но может " +"сильно различаться и требует силу. Режущий урон имеет фиксированное " +"значение, но блокируется бронёй. Бонус меткости влияет на ваш шанс " +"попадания. Время на атаку рукопашным оружием зависит от его размера и веса; " +"маленькое оружие быстрее." #: lang/json/json_tutorial.py msgid "" "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " "then select your flashlight to turn it on." msgstr "" +"Здесь темно! К счастью, у вас есть фонарик. Нажмите \"a\" и выберите букву " +"фонарика, что бы включить его." #: lang/json/json_tutorial.py msgid "" @@ -48613,12 +50198,17 @@ msgid "" "underground or at night. Press '<' to go back upstairs, and look around for " "a flashlight." msgstr "" +"Здесь темно! Без источника света, ваша видимость будет ограничена одной " +"клеткой в любом направлении. Вы встретитесь с темнотой под землёй или ночью. " +"Нажмите \"<\", что бы подняться обратно и поискать фонарик." #: lang/json/json_tutorial.py msgid "" "Most monsters will have to smash their way through a closed door. If a door " "is locked or stuck, you can smash it by pressing 's' and then a movement key." msgstr "" +"Большинство монстров будут ломать проход через закрытую дверь. Если дверь " +"заперта или её заклинило, вы можете её сломать с помощью клавиши \"s\"." #: lang/json/json_tutorial.py msgid "" @@ -48629,6 +50219,12 @@ msgid "" "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " "hit the escape key." msgstr "" +"Если вас в руке есть заряженное оружие, вы можете открывать огонь. Нажмите " +"\"f\" что бы выстрелить одиночным. Большинство оружия можно перевести " +"клавише \"F\" в режим стрельбы очередями. Вы автоматически целитесь в " +"ближайшего монстра или последнего монстра, в которого вы стреляли. Можно " +"менять цели клавишами движения или переключать с помощью \"<\" или \">\". " +"Для выстрела нажмите \"f\" или отмените выстрел клавишей ESC." #: lang/json/json_tutorial.py msgid "" @@ -48636,12 +50232,19 @@ msgid "" "as it gets worse your stats will drop and you will move much slower. To " "reduce pain, take painkillers like codeine, or simply wait it out." msgstr "" +"Получение урона часто вызывает боль. Малая боль приемлема, но как только она " +"увеличивается у вас падают характеристики и вы начинаете двигаться гораздо " +"медленней. Для понижения боли можно принять болеутоляющие, вроде кодеина, " +"или подождать." #: lang/json/json_tutorial.py msgid "" "That brown '+' next to you is a closed door. To open it, either simply walk " "into it, or press 'o' and then a movement key." msgstr "" +"Коричневый символ \"+\" обозначает закрытую дверь. Чтобы открыть её просто " +"пройдите через неё или нажмите \"o\", а затем клавишу движения в этом " +"направлении." #: lang/json/json_tutorial.py msgid "" @@ -48650,6 +50253,9 @@ msgid "" "careful, as the stronger painkillers can make you woozy, and some are even " "addictive." msgstr "" +"Вещество, которое вы приняли – болеутоляющее. Болеутоляющее очень важно " +"иметь под рукой, так как боль уменьшает характеристики и скорость движения. " +"Осторожно! Сильное болеутоляющее может одурманить и даже вызвать зависимость." #: lang/json/json_tutorial.py msgid "" @@ -48657,6 +50263,9 @@ msgid "" "press '@'. Most only last a short while, while others, like chronic " "disease, last until cured by some other means." msgstr "" +"Вещество, которое вы приняли, наложило на вас эффект. Что бы проверить ваши " +"эффекты, нажмите \"@\". Большинство из них длятся недолго, но другие, такие " +"как хронические заболевания, длятся пока не будут вылечены." #: lang/json/json_tutorial.py msgid "" @@ -48664,6 +50273,10 @@ msgid "" "step onto the staircase and press the '>' key. Similarly, a yellow < is " "stairs leading up, and can be followed with the '<' key." msgstr "" +"Этот желтый символ \">\" рядом с вами обозначает лестницу вниз. Чтобы " +"спуститься, подойдите к лестнице и нажмите клавишу \">\". Аналогично желтый " +"символ \"<\" обозначает лестницу вверх, и подняться по ней можно с помощью " +"клавиши \"<\"." #: lang/json/json_tutorial.py msgid "" @@ -48671,6 +50284,9 @@ msgid "" "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have your " "character wait in place, press '.'" msgstr "" +"Символ \"@\" в центре экрана обозначает вас. Для передвижения используйте " +"стрелки клавиатуры или клавиши (hjklyubn). Для ожидания стоя на месте " +"используйте клавиши \".\" или \"5\"." #: lang/json/json_tutorial.py msgid "" @@ -48678,6 +50294,9 @@ msgid "" "corners, etc. It's also used for interacting with a few terrain types. " "Interactive terrain is usually designated with a '6' symbol." msgstr "" +"Команда изучения полезна для собирания предметов из оконных рам, за углом и " +"т.д. Она также используется для взаимодействия с особыми типами объектов на " +"карте. Они, как правило, обозначаются символом \"6\"." #: lang/json/json_tutorial.py msgid "" @@ -48685,6 +50304,9 @@ msgid "" "This happened because it is a good melee weapon, and you were empty-handed. " "This usually is faster than than picking it up, then wielding it." msgstr "" +"Подобранный предмет был автоматически взят в руки и расценивается как " +"оружие. Так происходит, потому что это хорошее оружие ближнего боя, а вы " +"безоружны. Это работает быстрее, чем сперва подобрать, а потом вооружиться." #: lang/json/json_tutorial.py msgid "" @@ -48694,6 +50316,11 @@ msgid "" "space, try wearing clothing with a lot of storage space, like a backpack, or " "cargo pants." msgstr "" +"Подобранный предмет был автоматически взят в руки и расценивается как " +"оружие. Так происходит, потому что у вас в инвентаре не было свободного " +"места и вам пришлось взять его в руки. Чтобы увеличить свободное место, " +"носите одежду с большим свободным местом, вроде рюкзака или штанов с " +"карманами." #: lang/json/json_tutorial.py msgid "" @@ -48702,6 +50329,10 @@ msgid "" "Most food expires eventually, so be careful. Some comestibles, especially " "drugs, can cause subtle, long-term effects." msgstr "" +"Подобранный предмет можно употребить! Чтобы съесть что-нибудь, нажмите \"E" +"\". Употребить можно: еду, напитки, таблетки и т.д. Будьте внимательны: еда " +"может испортиться. Некоторые предметы, особенно наркотики, могут вызывать " +"разные длительные эффекты." #: lang/json/json_tutorial.py msgid "" @@ -48712,6 +50343,12 @@ msgid "" "others can fire a burst. Some firearms (mainly bows and other muscle-powered " "weapons) have a range, which is added on top of the ammo's range when firing." msgstr "" +"Подобранный предмет является огнестрельным оружием. Это мощное оружие, но " +"ему нужны патроны. У огнестрельного оружия много особых свойств. Повреждение " +"меняется в зависимости от типа патронов. У него есть значение разброса, " +"которое влияет на шанс попадания. Некоторые из них полуавтомат, когда другие " +"могут стрелять очередью. Некоторое оружие (в основном луки и другие " +"основанные физ. силе) имеет предел дальности стрельбы." #: lang/json/json_tutorial.py msgid "" @@ -48720,6 +50357,10 @@ msgid "" "or press 'w-' to put it away. A zombie has spawned nearby. To attack it, " "simply move into it." msgstr "" +"Подобранный предмет является хорошим оружием! Чтобы вооружиться, нажмите \"w" +"\" и выберите предмет. Чтобы освободить руки и стать безоружным, можно " +"убрать оружие из рук клавишами \"w-\" или вовсе его выбросить нажав \"d\". " +"Зомби был вызван неподалёку. Атакуйте его, двигаясь в его направлении." #: lang/json/json_tutorial.py msgid "" @@ -48727,6 +50368,10 @@ msgid "" "tools have a set charge, which can be reloaded once depleted. Other are " "single-use items, and still others are reusable." msgstr "" +"Подобранный предмет является инструментом. Что бы использовать инструмент " +"нажмите \"a\". Некоторые из них имеют заряды, которые можно восполнить, " +"когда они израсходуются. Некоторые инструменты являются одноразовыми, " +"некоторые многоразовыми." #: lang/json/json_tutorial.py msgid "" @@ -48734,6 +50379,9 @@ msgid "" "W and then select an item. To take off clothing, press T, or simply take it " "off and drop it in one action by pressing d." msgstr "" +"Подобранный предмет является одеждой! Чтобы надеть одежду, нажмите \"W\" и " +"выберите предмет. Чтобы снять одежду, нажмите \"T\". Можно снять и выбросить " +"одежду одним нажатием с помощью клавиши \"d\"." #: lang/json/json_tutorial.py msgid "" @@ -48744,6 +50392,13 @@ msgid "" "value will reduce this effect. The Range is the maximum range the ammo can " "achieve, and the dispersion affects its chance to hit." msgstr "" +"Подобранный предмет является боеприпасом к огнестрелу. У него много особых " +"свойств. Значения повреждений – это максимальные возможные повреждения при " +"стандартном попадании. При критическом попадании или попадании в голову " +"наносится гораздо больше повреждений. Монстры или NPC могут носить броню, " +"уменьшающую повреждения. Высокое значение бронебойности уменьшает этот " +"эффект. Дальность – это максимальная дистанция поражения зарядом, а разброс " +"влияет на шанс попадания." #: lang/json/json_tutorial.py msgid "" @@ -48752,6 +50407,9 @@ msgid "" "'i'. You can then press the letter of any item to get more information about " "it." msgstr "" +"Подобранный предмет попал в ваш инвентарь, заняв часть свободного места во " +"всей вашей одежде. Нажмите 'i', чтобы просмотреть инвентарь. Затем нажмите " +"букву предмета, чтобы осмотреть его подробнее." #: lang/json/json_tutorial.py msgid "" @@ -48759,6 +50417,9 @@ msgid "" "are items there. If you examine the square by pressing 'e', you can pick up " "items without moving to the square." msgstr "" +"Ближайший символ \"{\" – это стеллаж, а синий фон означает, что в нём есть " +"предметы. Если вы нажмёте \"e\", можно изучить клетку с ним и забрать " +"предметы не заходя непосредственно на его клетку." #: lang/json/json_tutorial.py msgid "" @@ -48766,6 +50427,9 @@ msgid "" "scroll around and get information on the terrain, monsters, and items in the " "world around you." msgstr "" +"Нажмите \"x\" или \";\" чтобы разобраться, что означают символы вокруг вас. " +"Вы можете перемещать курсор в нужном направлении и получать информацию об " +"окружающих вас территории, монстрах и предметах." #: lang/json/json_tutorial.py msgid "" @@ -48773,6 +50437,9 @@ msgid "" "using the 'r' key, assuming you have the proper ammo. If you wish to unload " "your gun, possibly to change ammunition types, press 'U'." msgstr "" +"Для использования огнестрельного оружия, нужно сперва им вооружиться, нажав " +"\"w\". Далее его нужно зарядить, нажав \"r\", для этого у вас должны быть " +"подходящие патроны. Если вы хотите разрядить оружие, нажмите \"U\"." #: lang/json/json_tutorial.py msgid "" @@ -48780,6 +50447,9 @@ msgid "" "appear to guide you through the basic game actions. Pressing spacebar will " "close the pop-up." msgstr "" +"Добро пожаловать в обучающую часть игры Cataclysm! Во время игры будут " +"появляться всплывающие окна подобно этому, объясняющие основы игры. " +"Нажимайте пробел, чтобы закрыть это и другие окна." #: lang/json/json_tutorial.py msgid "" @@ -48790,12 +50460,20 @@ msgid "" "pieces of meat, or none at all. Note that many monsters, such as zombies, " "leave tainted meat, unsuitable for consumption." msgstr "" +"Когда вы убиваете монстра, чаще всего остаётся труп. Трупы могут быть " +"важнейшим источником пищи, но его сперва нужно разделать, встав прямо над " +"ним и нажав клавишу \"B\". Для этого вам понадобиться оружие с лезвием, " +"желательно маленькое и очень острое. При неумелой разделке вы получаете " +"меньше кусков мяса или вовсе ничего. Многие монстры, такие как зомби, " +"состоят из отравленного мяса, неподходящего для питания." #: lang/json/json_tutorial.py msgid "" "You can close an opened door by pressing 'c' and then a movement key. " "Closing doors behind you can often slow down throngs of monsters greatly." msgstr "" +"Вы можете закрыть открытую дверь нажав \"c\" и клавишу движения. Закрывая за " +"собой двери, вы замедлите толпы монстров, бегущих за вами." #: lang/json/json_tutorial.py msgid "" @@ -48805,6 +50483,11 @@ msgid "" "can smash through other things, too; use the ';' command and look for things " "that are \"Smashable.\"" msgstr "" +"Вы можете выбить окно с помощью кнопки \"s\" и клавиш движения. Через " +"выбитое окно долго перелезать, а о разбитое стекло можно порезаться, но это " +"отличный шанс для побега. Вы можете сломать и другие предметы, с помощью " +"клавиши \";\" или \"x\" просматривайте объекты и ищите которые имеют " +"свойство \"Можно разбить\"." #: lang/json/json_tutorial.py msgid "" @@ -48812,6 +50495,9 @@ msgid "" "pick up. You need to wear something with storage space, like a backpace or " "cargo pants, to gain more storage space." msgstr "" +"В вашем инвентаре нет места для хранения предмета, который вы сейчас " +"пытаетесь поднять. Вам нужно одеть что-нибудь, увеличивающее свободное " +"место, например, рюкзак или штаны с карманами." #: lang/json/json_tutorial.py msgid "" @@ -48820,6 +50506,11 @@ msgid "" "depends on your strength and the object's weight and size. Throwing isn't " "very good in most combat situations, but if you've got some fire power..." msgstr "" +"Вы активировали гранату! Вряд ли стоит тянуть с броском. Чтобы бросить что-" +"нибудь, нажмите \"t\" и выберите нужный предмет. Максимальная дистанция " +"броска зависит от веса и размера объекта, а также вашей силы. Броски не " +"лучший вариант большинстве боевых ситуаций, но если у вас есть что-то " +"мощное..." #: lang/json/json_tutorial.py msgid "" @@ -48827,6 +50518,10 @@ msgid "" "the water level in the bottle. You'll probably want to drop empty bottles, " "or you might want to save them to refill from a water source later." msgstr "" +"Вы только что выпили бутылку воды, понизив свой уровень жажды и уменьшив " +"уровень воды в бутылке. Вероятно вы будете выбрасывать пустые бутылки, но " +"имейте в виду, что их можно придержать, чтобы заполнить их снова из " +"источника воды." #: lang/json/json_tutorial.py msgid "" @@ -48834,6 +50529,10 @@ msgid "" "important defensive tactic, particularly when sleeping in unsafe territory. " "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." msgstr "" +"Вы установили ловушку. Ловушки действуют постоянно, пока не будут " +"обезврежены. Они являются важной частью оборонительной тактики, к примеру, " +"во время сна в небезопасном месте. Попробуйте зайти на символ '_'. Не " +"волнуйтесь, это безвредная пузырчатая плёнка." #: lang/json/json_tutorial.py msgid "" @@ -48860,12 +50559,18 @@ msgid "" "cutting. Most monsters deal bashing damage, but cutting is often the more " "deadly of the two. Bullets are considered cutting damage." msgstr "" +"Вы только что надели одежду, которая добавляет физическую защиту. Есть два " +"типа повреждений от которых может защитить одежда: удар или порез. Порезы " +"более опасны для здоровья, но к счастью, большинство монстров наносят удары. " +"Патроны наносят режущие повреждения." #: lang/json/json_tutorial.py msgid "" "You just stepped on a space with one or more items. If you wish to pick it " "up, press ',' or 'g'." msgstr "" +"Вы дошли до места с одним или более предметами. Если вы хотите подобрать их, " +"нажмите \",\" или \"g\"." #: lang/json/json_tutorial.py msgid "" @@ -48875,6 +50580,11 @@ msgid "" "penalties, making combat dangerous. Either drop an item, or possibly wield " "something-- the object you are wielding does not take up inventory space." msgstr "" +"Вы несёте объем вещей больше, чем у вас есть свободного места. Это означает, " +"что вы несёте какие-то вещи подмышкой или другим хитрым способом. Во время " +"подобной перегрузки, вы испытываете СИЛЬНОЕ сковывание всего тела, которое " +"может быть опасным при боевых действиях. Либо скиньте что-нибудь, либо " +"вооружитесь чем-нибудь – оружие в руках не занимает места в инвентаре." #: lang/json/json_tutorial.py msgid "" @@ -48883,6 +50593,9 @@ msgid "" "the pickup key (',' or 'g'), then select a watertight container to put the " "water into." msgstr "" +"Символ \"~\" на местности обозначает воду. Из подобных источников воды вы " +"можете наполнить любой подходящий контейнер. Зайдите на воду, нажмите " +"клавишу подбора(\";\" или \"g\"), а потом выберите контейнер для заполнения." #: lang/json/json_vehicle_parts.py msgid "Foot pedals" @@ -48930,7 +50643,7 @@ msgstr "" #: lang/json/json_vehicle_parts.py msgid "head light" -msgstr "" +msgstr "фары" #: lang/json/json_vehicle_parts.py msgid "hydrogen tank" @@ -48938,7 +50651,7 @@ msgstr "водородный бак" #: lang/json/json_vehicle_parts.py msgid "internal door" -msgstr "" +msgstr "внутренняя дверь" #: lang/json/json_vehicle_parts.py msgid "kitchen unit" @@ -48982,7 +50695,7 @@ msgstr "" #: lang/json/json_vehicle_parts.py msgid "reinforced windshield" -msgstr "" +msgstr "бронированное лобовое стекло" #: lang/json/json_vehicle_parts.py msgid "roof" @@ -48998,7 +50711,7 @@ msgstr "" #: lang/json/json_vehicle_parts.py msgid "sliding door" -msgstr "" +msgstr "раздвижная дверь" #: lang/json/json_vehicle_parts.py msgid "trunk" @@ -49006,7 +50719,7 @@ msgstr "багажник" #: lang/json/json_vehicle_parts.py msgid "trunk door" -msgstr "" +msgstr "дверь багажника" #: lang/json/json_vehicle_parts.py msgid "unicycle wheel" @@ -49014,7 +50727,7 @@ msgstr "" #: lang/json/json_vehicle_parts.py msgid "water tank" -msgstr "" +msgstr "водяной бак" #: lang/json/json_vehicle_parts.py msgid "welding rig" @@ -49030,7 +50743,7 @@ msgstr "лобовое стекло" #: lang/json/json_vehicles.py msgid "Ambulance" -msgstr "" +msgstr "Скорая" #: lang/json/json_vehicles.py msgid "Armored Car" @@ -49046,7 +50759,7 @@ msgstr "Велосипед" #: lang/json/json_vehicles.py msgid "Bubble Car" -msgstr "" +msgstr "Мотоколяска" #: lang/json/json_vehicles.py msgid "Car Chassis" @@ -49074,7 +50787,7 @@ msgstr "" #: lang/json/json_vehicles.py msgid "Golf Cart" -msgstr "" +msgstr "Гольфмобиль" #: lang/json/json_vehicles.py msgid "Hippie Van" @@ -49094,7 +50807,7 @@ msgstr "" #: lang/json/json_vehicles.py msgid "Motorcycle" -msgstr "мотоцикл" +msgstr "Мотоцикл" #: lang/json/json_vehicles.py msgid "Motorcycle Chassis" @@ -49102,7 +50815,7 @@ msgstr "шасси мотоцикла" #: lang/json/json_vehicles.py msgid "Police Car" -msgstr "" +msgstr "Полицейская машина" #: lang/json/json_vehicles.py msgid "Quad Bike" @@ -49118,11 +50831,11 @@ msgstr "" #: lang/json/json_vehicles.py msgid "Schoolbus" -msgstr "" +msgstr "Школьный автобус" #: lang/json/json_vehicles.py msgid "Scooter" -msgstr "" +msgstr "Мотороллер" #: lang/json/json_vehicles.py msgid "Semi Truck" @@ -49138,7 +50851,7 @@ msgstr "" #: lang/json/json_vehicles.py msgid "Unicycle" -msgstr "" +msgstr "Моноцикл" #: lang/json/json_vehicles.py msgid "Welding Cart" @@ -49225,7 +50938,7 @@ msgstr "Действительно выйти? Все несохраненные #: main_menu.cpp msgctxt "Main Menu|World" msgid "reate World" -msgstr "" +msgstr "Создать мир" #: main_menu.cpp msgctxt "Main Menu" @@ -49240,7 +50953,7 @@ msgstr "Новый персонаж" #: main_menu.cpp msgctxt "Main Menu|World" msgid "elete World" -msgstr "" +msgstr "Удалить мир" #: main_menu.cpp msgctxt "Main Menu" @@ -49275,7 +50988,7 @@ msgstr "Случайный персонаж" #: main_menu.cpp msgctxt "Main Menu|World" msgid "eset World" -msgstr "" +msgstr "Сброс мира" #: main_menu.cpp msgctxt "Main Menu" @@ -49285,25 +50998,25 @@ msgstr "Особое" #: main_menu.cpp msgctxt "Main Menu" msgid "orld" -msgstr "" +msgstr "Мир" #: main_menu.cpp msgid "Delete the world and all saves?" -msgstr "Удалить мир, и все сохранения?" +msgstr "Удалить мир и все сохранения?" #: main_menu.cpp msgctxt "Main Menu" msgid "Hlp" -msgstr "" +msgstr "Помощь" #: main_menu.cpp msgctxt "Main Menu" msgid "Lod" -msgstr "" +msgstr "Загрузка" #: main_menu.cpp msgid "No Worlds found!" -msgstr "" +msgstr "Миры не найдены!" #: main_menu.cpp msgid "No message today." @@ -49328,12 +51041,12 @@ msgstr "Об ошибках сообщайте по адресу kevin.granade@g #: main_menu.cpp msgid "Remove all saves and regenerate world?" -msgstr "" +msgstr "Удалить все сохранения и обновить мир?" #: main_menu.cpp #, c-format msgid "Version: %s" -msgstr "" +msgstr "Версия: %s" #: map.cpp #, c-format @@ -49377,7 +51090,7 @@ msgstr "Неровное. " #: map.cpp msgid "SMASH!!" -msgstr "ССМАШШ!!" +msgstr "ГРОХОТ!" #: map.cpp msgid "Sharp. " @@ -49459,15 +51172,15 @@ msgstr "" #: map.cpp msgid "slap!" -msgstr "" +msgstr "хлопок!" #: map.cpp msgid "smash!" -msgstr "" +msgstr "грохот!" #: map.cpp msgid "thump!" -msgstr "чумп!" +msgstr "стук!" #: mapbuffer.cpp #, c-format @@ -49760,13 +51473,13 @@ msgstr "" #: material.cpp msgid "damages" -msgstr "убытки" +msgstr "повреждает" #. ~ someone's bodypart, e.g. "Kate's leg" #: melee.cpp #, c-format msgid "%1$s's %2$s" -msgstr "" +msgstr "%1$s %2$s" #: melee.cpp #, c-format @@ -49811,13 +51524,13 @@ msgstr "" #: melee.cpp #, c-format msgid "%s for %d damage." -msgstr "" +msgstr "%s нанеся %d очков повреждений." #. ~ someone hits something for %d damage (critical) #: melee.cpp #, c-format msgid "%s for %d damage. Critical!" -msgstr "" +msgstr "%s нанеся %d очков повреждений. Критическое попадание!" #: melee.cpp #, c-format @@ -49904,6 +51617,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -49916,7 +51639,7 @@ msgstr " отразил атаку своим %s!" #: melee.cpp msgid " breaks the grab!" -msgstr "" +msgstr " разрывает захват!" #: melee.cpp #, c-format @@ -49935,7 +51658,7 @@ msgstr " обезоруживает %s!" #: melee.cpp msgid " disarms you!" -msgstr "" +msgstr " обезоруживает вас!" #: melee.cpp #, c-format @@ -49953,7 +51676,7 @@ msgstr " сбивает %s с ног!" #: melee.cpp msgid " forces you to the ground!" -msgstr "" +msgstr " сбивает вас с ног!" #: melee.cpp #, c-format @@ -49963,7 +51686,7 @@ msgstr "" #: melee.cpp #, c-format msgid " hits %s" -msgstr "" +msgstr " ударил %s" #: melee.cpp #, c-format @@ -50008,7 +51731,7 @@ msgstr "" #: melee.cpp #, c-format msgid " whacks %s" -msgstr "" +msgstr " стукнул %s" #: melee.cpp #, c-format @@ -50032,7 +51755,7 @@ msgstr "Вы отразили атаку своим %s!" #: melee.cpp monmove.cpp msgid "You break the grab!" -msgstr "Вы отбиваете захват!" +msgstr "Вы разрываете захват!" #: melee.cpp #, c-format @@ -50091,7 +51814,7 @@ msgstr "" #: melee.cpp #, c-format msgid "You hit %s" -msgstr "" +msgstr "Вы ударили %s" #: melee.cpp #, c-format @@ -50188,6 +51911,11 @@ msgstr "Вы сильно махнули мимо цели." #: melee.cpp #, c-format msgid "You whack %s" +msgstr "Вы стукнули %s" + +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" msgstr "" #: melee.cpp @@ -50203,13 +51931,13 @@ msgstr "%s застревает в %s и выскальзывает из ваш #: melee.cpp #, c-format msgid "the %s" -msgstr "" +msgstr "%s" #. ~ your bodypart, e.g. "your head" #: melee.cpp #, c-format msgid "your %s" -msgstr "" +msgstr "ваша %s" #: mission.cpp msgid " I'm hurting..." @@ -50580,7 +52308,7 @@ msgstr "" #: mission.cpp msgid "" "I wish you the best of luck, may whatever god you please guide your path." -msgstr "" +msgstr "Желаю удачи и пусть Бог укажет тебе верную дорогу." #: mission.cpp msgid "" @@ -50736,7 +52464,7 @@ msgstr "" #: mission.cpp msgid "Oh man, I can't believe I forgot to download it..." -msgstr "Я не могу поверить, что ты забыл всё скачать..." +msgstr "Вот чёрт, я забыл скачать..." #: mission.cpp msgid "Oh no! My poor puppy..." @@ -51208,7 +52936,7 @@ msgstr "%s вернул вам чёрный ящик." #: mission_start.cpp #, c-format msgid "%s gave you sarcophagus access code." -msgstr "" +msgstr "%s дал вам код доступа в саркофаг." #: mission_start.cpp #, c-format @@ -51418,12 +53146,12 @@ msgstr "Под кожу введены яйца дерматика." #: monattack.cpp #, c-format msgid "Pointed in your direction, the %s emits %d annoyed sounding beeps." -msgstr "" +msgstr "Указывая в вашу сторону, %s производит %d раздражающих писков." #: monattack.cpp #, c-format msgid "Pointed in your direction, the %s emits an IFF warning beep." -msgstr "" +msgstr "Указывая в вашу сторону, %s производит предупреждающий звук." #. ~ the sound of a fungus releasing spores #. ~ the sound of a fungus dying @@ -51482,7 +53210,7 @@ msgstr "%s дико трясет!" #: monattack.cpp #, c-format msgid "The %s hits a %s!" -msgstr "" +msgstr "%s ударил %s!" #: monattack.cpp #, c-format @@ -51542,7 +53270,7 @@ msgstr "" #: monattack.cpp #, c-format msgid "The %s probes your mind, but is rebuffed!" -msgstr "" +msgstr "%s вторгается в ваш разум, но не преодолевает сопротивление!" #: monattack.cpp ranged.cpp #, c-format @@ -51557,7 +53285,7 @@ msgstr "%s ударярил вас током!" #: monattack.cpp #, c-format msgid "The %s shoots a dart into you!" -msgstr "" +msgstr "%s выстрелил дротиком в вас!" #: monattack.cpp #, c-format @@ -51622,7 +53350,7 @@ msgstr "" #: monattack.cpp #, c-format msgid "The %s young triffid grows into an adult!" -msgstr "" +msgstr "%s молодой триффид подрос и стал взрослой особью!" #: monattack.cpp #, c-format @@ -51650,12 +53378,12 @@ msgstr "" #: monattack.cpp #, c-format msgid "The terrifying visage of the %s paralyzes you." -msgstr "" +msgstr "Ужастное видение %s парализует вас." #: monattack.cpp #, c-format msgid "The tongue of flame hits the %s!" -msgstr "" +msgstr "Язык пламени ударяет %s!" #: monattack.cpp #, c-format @@ -51682,7 +53410,7 @@ msgstr "Вы уклонились от луча!" #: monattack.cpp monmove.cpp msgid "You feel poison enter your body!" -msgstr "" +msgstr "Вы чувствуете, что яд попал в ваш организм!" #: monattack.cpp msgid "You get pins and needles all over." @@ -51696,7 +53424,7 @@ msgstr "Вы ударили %s!" #: monattack.cpp #, c-format msgid "You manage to avoid staring at the horrendous %s." -msgstr "" +msgstr "Вы смогли отвести взгляд от ужасного %s." #: monattack.cpp #, c-format @@ -51709,7 +53437,7 @@ msgstr "" #: monattack.cpp msgid "You're thrown by winds!" -msgstr "" +msgstr "Вас подбросило ветром!" #: monattack.cpp #, c-format @@ -51761,7 +53489,7 @@ msgstr "ужасающий крик!" #: monattack.cpp msgid "a terrifying roar that nearly deafens you!" -msgstr "" +msgstr "ужасающий рев почти оглушил вас!" #: monattack.cpp msgid "thu-THUMP." @@ -51775,11 +53503,11 @@ msgstr "" #: mondeath.cpp #, c-format msgid "Killing %s fills you with guilt." -msgstr "" +msgstr "Убийство %s наполняет вас чувством вины." #: mondeath.cpp msgid "Rats suddenly swarm into view." -msgstr "" +msgstr "Внезапно вокруг появилась куча крыс." #: mondeath.cpp #, c-format @@ -51789,7 +53517,7 @@ msgstr "%s умирает!" #: mondeath.cpp #, c-format msgid "The %s disappears." -msgstr "" +msgstr "%s исчезает." #: mondeath.cpp #, c-format @@ -51814,12 +53542,12 @@ msgstr "%s разделился надвое!" #: mondeath.cpp #, c-format msgid "The %s was destroyed! GAME OVER!" -msgstr "" +msgstr "%s уничтожен! ИГРА ОКОНЧЕНА!" #: mondeath.cpp #, c-format msgid "The %s's body dissolves into acid." -msgstr "" +msgstr "Труп %s растекается кислотной лужей." #: mondeath.cpp msgid "The surrounding roots begin to crack and crumble." @@ -51831,7 +53559,7 @@ msgstr "" #: mondeath.cpp msgid "a boomer explode!" -msgstr "" +msgstr "бумер взорвался!" #: mondeath.cpp msgid "a smoker explode!" @@ -51862,6 +53590,11 @@ msgstr "%s %s из %s!" msgid "A %s %s into the %s!" msgstr "%s %s в %s!" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "Что-то ударило вашу %s." + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -51875,22 +53608,22 @@ msgstr "%1$s бьёт ваш %2$s." #: monmove.cpp #, c-format msgid "The %s bounces off %s!" -msgstr "" +msgstr "%s отскакивает от %s!" #: monmove.cpp #, c-format msgid "The %s bounces off a %s!" -msgstr "" +msgstr "%s отскакивает от %s!" #: monmove.cpp #, c-format msgid "The %s bounces off a %s." -msgstr "" +msgstr "%s отскакивает от %s." #: monmove.cpp #, c-format msgid "The %s grabs you!" -msgstr "" +msgstr "%s схватил вас!" #: monmove.cpp #, c-format @@ -52018,7 +53751,7 @@ msgstr "Невредимый" #: monster.cpp msgid "On ground" -msgstr "" +msgstr "На земле" #: monster.cpp #, c-format @@ -52028,7 +53761,7 @@ msgstr "%s бьёт %s!" #: monster.cpp #, c-format msgid "The %s misses the %s!" -msgstr "" +msgstr "%s промахнулся по %s!" #: monster.cpp msgid "Tracking " @@ -52044,7 +53777,7 @@ msgstr "находится при смерти" #: mtypedef.cpp msgid "human" -msgstr "" +msgstr "человек" #: mutation.cpp #, c-format @@ -52224,9 +53957,9 @@ msgid "Points left:%3d" msgstr "Очков осталось:%3d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Points left:%3d " -msgstr "Очков осталось:%3d" +msgstr "Очков осталось:%3d " #: newcharacter.cpp #, c-format @@ -52243,9 +53976,9 @@ msgid "Ranged penalty: -%d" msgstr "Штраф дальнего боя: -%d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "Время на чтение: %d%%%%" +msgstr "" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" @@ -52264,9 +53997,9 @@ msgid "STATS" msgstr "ХАРАКТЕРИСТИКИ" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "Атрофия навыков: %d%%%%" +msgstr "" #: newcharacter.cpp #, c-format @@ -52309,19 +54042,18 @@ msgid "To go back and review your character, press <" msgstr "Чтобы вернуться и переделать персонажа, нажмите <" #: newcharacter.cpp -#, fuzzy msgid "To pick a random name for your character, press ?" -msgstr "" -"Чтобы выбрать случайное имя для вашего персонажа, нажмите кнопку \"?\"." +msgstr "Чтобы выбрать случайное имя для вашего персонажа, нажмите кнопку \"?\"" #: newcharacter.cpp -#, fuzzy msgid "To save this character as a template, press !" -msgstr "Чтобы сохранить этого персонажа в качестве шаблона, нажмите \"!\"." +msgstr "Чтобы сохранить этого персонажа в качестве шаблона, нажмите \"!\"" #: newcharacter.cpp msgid "Too many points allocated, change some features and try again." msgstr "" +"Слишком много баллов распределено, измените распределение и попробуйте " +"заново." #: newcharacter.cpp #, c-format @@ -52339,11 +54071,11 @@ msgstr "Когда ваш персонаж готов, и вы готовы на #: newcharacter.cpp msgid "You already picked a conflicting trait!" -msgstr "" +msgstr "Вы уже выбрали противоположную черту!" #: newcharacter.cpp msgid "You cannot save a template with nonzero unused points!" -msgstr "" +msgstr "Вы не можете сохранить шаблон с ненулевыми нераспределенными баллами!" #: newcharacter.cpp #, c-format @@ -52356,27 +54088,24 @@ msgid "Your profession of %s prevents you from taking this trait." msgstr "Ваша профессия %s препятствует взятию этой характеристики." #: newcharacter.cpp -#, fuzzy msgid "______NO NAME ENTERED!!!______" -msgstr "______ИМЯ НЕ ВВЕДЕНО!!!!_____" +msgstr "______ИМЯ НЕ ВВЕДЕНО!!!______" #: newcharacter.cpp -#, fuzzy msgid "h, 4, or left arrow to decrease the statistic." -msgstr " уменьшить характеристику" +msgstr "h, 4 или стрелка влево уменьшает характеристику" #: newcharacter.cpp msgid "j/k, 8/2, or up/down arrows to select a statistic." -msgstr "" +msgstr "j/k, 8/2 или стрелки вверх/вниз для выбора характеристики" #: newcharacter.cpp options.cpp player.cpp msgid "kg" msgstr "кг" #: newcharacter.cpp -#, fuzzy msgid "l, 6, or right arrow to increase the statistic." -msgstr " увеличить характеристику" +msgstr "l, 6 или стрелка вправо увеличивает характеристику" #: newcharacter.cpp options.cpp player.cpp msgid "lbs" @@ -52468,7 +54197,7 @@ msgstr "" #: npc.cpp msgid "Cowboy" -msgstr "" +msgstr "Ковбой" #: npc.cpp msgid "Defending you" @@ -52751,7 +54480,7 @@ msgstr "%s подбирает несколько предметов." #: npcmove.cpp #, c-format msgid "%s reloads their %s." -msgstr "" +msgstr "%s перезаряжает %s." #: npcmove.cpp #, c-format @@ -53040,7 +54769,7 @@ msgstr "%s становится враждебным." #: npctalk.cpp #, c-format msgid "%s gives you a %s" -msgstr "" +msgstr "%s даёт вам %s" #: npctalk.cpp #, c-format @@ -53130,11 +54859,11 @@ msgstr "< Назад" #: npctalk.cpp msgid ", " -msgstr "" +msgstr ", " #: npctalk.cpp msgid ", " -msgstr "" +msgstr ", " #: npctalk.cpp msgid " if I don't find a gun soon!" @@ -53158,7 +54887,7 @@ msgstr "" #: npctalk.cpp msgid "" -msgstr "" +msgstr "" #: npctalk.cpp msgid ", " @@ -53224,11 +54953,11 @@ msgstr "Она" #: npctalk.cpp msgid "her" -msgstr "" +msgstr "её" #: npctalk.cpp msgid "his" -msgstr "" +msgstr "его" #: npctalk.cpp msgid "!" @@ -53244,11 +54973,11 @@ msgstr "..." #: npctalk.cpp msgid " " -msgstr "" +msgstr " " #: npctalk.cpp msgid " " -msgstr "" +msgstr " " #: npctalk.cpp msgid " " @@ -53260,7 +54989,7 @@ msgstr "" #: npctalk.cpp msgid " " -msgstr "" +msgstr " " #: npctalk.cpp msgid "%1$c: %4$s" @@ -53281,11 +55010,11 @@ msgstr "" #: npctalk.cpp msgid " " -msgstr "" +msgstr " " #: npctalk.cpp msgid " " -msgstr "" +msgstr " " #: npctalk.cpp msgid "About one of those jobs..." @@ -54158,7 +55887,7 @@ msgstr "" #: npctalk.cpp msgid "Okay, here you go." -msgstr "" +msgstr "Ладно, держи." #: npctalk.cpp msgid "Okay, let's go!" @@ -54312,7 +56041,7 @@ msgstr "Сил " #: npctalk.cpp msgid "Sure, here you go!" -msgstr "" +msgstr "Конечно, бери!" #: npctalk.cpp msgid "Tell me about it." @@ -54638,7 +56367,7 @@ msgstr "" #: npctalk.cpp msgid "damn" -msgstr "" +msgstr "проклятое" #: npctalk.cpp msgid "damnit" @@ -54686,7 +56415,7 @@ msgstr "" #: npctalk.cpp msgid "fella" -msgstr "" +msgstr "дружище" #: npctalk.cpp player.cpp msgid "fists" @@ -54698,7 +56427,7 @@ msgstr "реально" #: npctalk.cpp msgid "freaking" -msgstr "" +msgstr "долбаное" #: npctalk.cpp msgid "friend" @@ -54726,7 +56455,7 @@ msgstr "" #: npctalk.cpp msgid "fuckin'" -msgstr "" +msgstr "долбаное" #: npctalk.cpp msgid "fucking" @@ -54754,11 +56483,11 @@ msgstr "отъебись" #: npctalk.cpp msgid "god damn" -msgstr "" +msgstr "проклятое" #: npctalk.cpp msgid "goddamn" -msgstr "" +msgstr "чёртово" #: npctalk.cpp msgid "got it" @@ -54782,11 +56511,11 @@ msgstr "" #: npctalk.cpp msgid "mafuckin'" -msgstr "" +msgstr "говёное" #: npctalk.cpp msgid "man" -msgstr "" +msgstr "мужик" #: npctalk.cpp msgid "mega" @@ -54886,7 +56615,7 @@ msgstr "" #: npctalk.cpp msgid "son of a bitch" -msgstr "" +msgstr "сукин сын" #: npctalk.cpp msgid "stoked" @@ -54894,7 +56623,7 @@ msgstr "" #: npctalk.cpp msgid "stranger" -msgstr "" +msgstr "незнакомец" #: npctalk.cpp msgid "sucker" @@ -54946,7 +56675,7 @@ msgstr "" #: npctalk.cpp msgid "you" -msgstr "" +msgstr "ты" #: npctalk.cpp msgid "you dig" @@ -54990,7 +56719,7 @@ msgid "" "12h: AM/PM, eg: 7:31 AM - Military: 24h Military, eg: 0731 - 24h: Normal " "24h, eg: 7:31" msgstr "" -"12h: AM/PM (7:31 AM); Military: армейские 24ч (0731); 24h: обычные 24ч " +"12ч: AM/PM (7:31 AM); Армейский: армейские 24ч (0731); 24ч: обычные 24ч " "(7:31)." #. ~ 24h time, e.g. 23:59 @@ -55060,7 +56789,7 @@ msgstr "Осень" #: options.cpp msgid "Black Road" -msgstr "" +msgstr "Чёрная полоса" #. ~ capped at a value #: options.cpp @@ -55088,6 +56817,8 @@ msgstr "" #: options.cpp msgid "Choose the tileset you want to use. Only applicable on SDL builds." msgstr "" +"Выберите тайлсет, который собираетесь использовать. Работает только на SDL-" +"версии." #: options.cpp msgid "Choose tileset" @@ -55182,7 +56913,7 @@ msgstr "Общие" #: options.cpp msgid "Graphics" -msgstr "" +msgstr "Графика" #. ~ hide mouse cursor #: options.cpp @@ -55220,7 +56951,7 @@ msgstr "" #: options.cpp msgid "If true, Y/N prompts are case-sensitive and y and n are not accepted." -msgstr "" +msgstr "Если да, то Y/N регистрозависимы (y/n не будет работать)." #: options.cpp msgid "If true, auto-safemode will be on after starting a new game or loading." @@ -55270,7 +57001,7 @@ msgstr "" #: options.cpp msgid "If true, spawn zombies at shelters." -msgstr "" +msgstr "Если да, то зомби будут появляться рядом с убежищами." #: options.cpp msgid "" @@ -55313,7 +57044,7 @@ msgstr "Очки доступные при создании персонажа." #: options.cpp msgid "Initial season" -msgstr "" +msgstr "Стартовое время года" #: options.cpp msgid "Initial starting season of day on character generation." @@ -55579,7 +57310,7 @@ msgstr "Шкала температуры" #: options.cpp msgid "Time format" -msgstr "" +msgstr "Формат времени" #: options.cpp msgid "To edge" @@ -55621,7 +57352,7 @@ msgstr "Зима" #: options.cpp msgid "World Defaults" -msgstr "" +msgstr "Настройки мира" #: options.cpp player.cpp msgid "km/h" @@ -55656,7 +57387,7 @@ msgstr " - Добавить/Изм. заметку " #: overmap.cpp msgid " - Center map on character" -msgstr "" +msgstr " - Курсор на персонажа" #: overmap.cpp msgid " - Delete a note " @@ -55723,7 +57454,7 @@ msgstr "Заметки:" #: overmap.cpp msgid "Press letter to center on note" -msgstr "" +msgstr "Выберите букву заметки для перемещения к ней" #: overmap.cpp msgid "Really delete note?" @@ -56100,7 +57831,7 @@ msgstr "канализация" #: overmap.cpp msgid "slime pit" -msgstr "" +msgstr "шламоотстойник" #: overmap.cpp msgid "spiral cavern" @@ -56213,7 +57944,7 @@ msgstr " когда случился апокалипсис." #: player.cpp #, c-format msgid "%6.2f per minute" -msgstr "" +msgstr "%6.2f в минуту" #: player.cpp #, c-format @@ -56260,7 +57991,7 @@ msgstr ", день " #: player.cpp msgid "" -msgstr "" +msgstr "<пусто>" #: player.cpp msgid "" @@ -56309,8 +58040,8 @@ msgid "Alcohol Craving" msgstr "Жажда алкоголя" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" -msgstr "Почти мгновенно вы ощущаете знакомую боль в своём желудке." +msgid "Almost instantly you feel a familiar pain in your stomach." +msgstr "" #: player.cpp msgid "Arm encumbrance affects your accuracy with ranged weapons." @@ -56347,7 +58078,7 @@ msgstr "Начальные характеристики:" #: player.cpp msgid "Bash prot: " -msgstr "" +msgstr "Защ от удара: " #: player.cpp #, c-format @@ -56363,7 +58094,7 @@ msgstr "Бионика:" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "Очередь" @@ -56402,9 +58133,9 @@ msgid "Cocaine Craving" msgstr "Кокаиновая ломка" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Cold-Blooded -%s%d%%" -msgstr "Хорошее настроение +%s%d%%%%" +msgstr "" #: player.cpp #, c-format @@ -56426,7 +58157,7 @@ msgstr "Текущая скорость:" #: player.cpp msgid "Cut prot: " -msgstr "" +msgstr "Защ от пореза: " #: player.cpp msgid "Damage Healed: " @@ -56449,18 +58180,18 @@ msgid "Depressants" msgstr "Успокоительное" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressants -%s%d%%" -msgstr "Подавленный -%s%d%%%%" +msgstr "" #: player.cpp msgid "Depressed" msgstr "Подавленный" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressed -%s%d%%" -msgstr "Подавленный -%s%d%%%%" +msgstr "" #: player.cpp msgid "Dex " @@ -56495,7 +58226,7 @@ msgstr "" #: player.cpp msgid "Do you have any last words?" -msgstr "" +msgstr "Хотите сказать последнее слово?" #: player.cpp msgid "Dried Off" @@ -56507,7 +58238,7 @@ msgstr "ЭФФЕКТЫ" #: player.cpp msgid "ENCUMBRANCE AND WARMTH" -msgstr "" +msgstr "СКОВАННОСТЬ И КОМФОРТ" #: player.cpp msgid "Elated" @@ -56515,15 +58246,15 @@ msgstr "Восторг" #: player.cpp msgid "Encumb" -msgstr "" +msgstr "Скован" #: player.cpp msgid "Encumbrance and Warmth" -msgstr "" +msgstr "Сковыванность и комфорт" #: player.cpp msgid "Encumbrance: " -msgstr "" +msgstr "Сковывание: " #: player.cpp #, c-format @@ -56605,9 +58336,9 @@ msgid "Good Feeling" msgstr "Хорошее самочувствие" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Good mood +%s%d%%" -msgstr "Хорошее настроение +%s%d%%%%" +msgstr "" #: player.cpp msgid "Guilty about Killing" @@ -56630,6 +58361,8 @@ msgstr "" msgid "" "Head encumbrance has no effect; it simply limits how much you can put on." msgstr "" +"Сковывание головы не имеет эффекта; оно лишь ограничивает количество надетых " +"на неё вещей." #: player.cpp msgid "Headshots: " @@ -56640,9 +58373,9 @@ msgid "Heard Disturbing Scream" msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Hunger -%s%d%%" -msgstr "Голод -%s%d%%%%" +msgstr "" #: player.cpp msgid "Hungry" @@ -56690,7 +58423,7 @@ msgstr "" #: player.cpp msgid "It fits you well.\n" -msgstr "" +msgstr "Подходит по размеру.\n" #: player.cpp msgid "It has a hood.\n" @@ -56714,7 +58447,7 @@ msgstr "Водонепроницаемое.\n" #: player.cpp msgid "It looks fancy.\n" -msgstr "" +msgstr "Чудно выглядит .\n" #: player.cpp msgid "It looks really fancy.\n" @@ -56850,10 +58583,6 @@ msgstr "Нет места в инвентаре для %s. Выбросить?" msgid "No space in inventory for your %s. Drop it?" msgstr "Нет места в инвентаре для %s. Выбросить?" -#: player.cpp -msgid "Normal" -msgstr "Одиночный" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -56881,9 +58610,9 @@ msgid "Out of Sunlight -%s%d%%" msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Overburdened -%s%d%%" -msgstr "Перегружен -%s%d%%%%" +msgstr "" #: player.cpp #, c-format @@ -56895,9 +58624,9 @@ msgid "Pain" msgstr "Боль" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Pain -%s%d%%" -msgstr "Боль -%s%d%%%%" +msgstr "Боль -%s%d%%" #: player.cpp #, c-format @@ -56905,9 +58634,9 @@ msgid "Pain %d" msgstr "Боль %d" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Painkillers -%s%d%%" -msgstr "Обезболивающие -%s%d%%%%" +msgstr "Обезболивающие -%s%d%%" #: player.cpp msgid "Parched" @@ -56961,9 +58690,9 @@ msgid "Putting on a %s would be tricky." msgstr "Надеть на себя %s было бы неплохим цирковым номером." #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Quick +%s%d%%" -msgstr "Быстрый +%s%d%%%%" +msgstr "Быстрый +%s%d%%" #: player.cpp msgid "R Arm: " @@ -56979,9 +58708,9 @@ msgid "Read %i" msgstr "Чтение %i" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%% " -msgstr "Время на чтение: %d%%%% " +msgstr "" #: player.cpp #, c-format @@ -57050,9 +58779,9 @@ msgid "Siphoned %d units of %s from the %s." msgstr "Откачано %d единиц %s из %s." #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%% " -msgstr "Атрофия навыков: %d%%%% " +msgstr "" #: player.cpp msgid "Skills:" @@ -57101,13 +58830,13 @@ msgid "Stimulant Overdose" msgstr "Передозировка стимулянтов" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Stimulants +%s%d%%" -msgstr "Стимулянты +%s%d%%%%" +msgstr "" #: player.cpp msgid "Storage" -msgstr "" +msgstr "Место" #: player.cpp #, c-format @@ -57198,9 +58927,9 @@ msgid "The thought of eating that makes you feel sick. Really do it?" msgstr "Вас тошнит от одной мысли о подобной еде. Точно хотите?" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Thirst -%s%d%%" -msgstr "Жажда -%s%d%%%%" +msgstr "" #: player.cpp msgid "Thirsty" @@ -57213,18 +58942,21 @@ msgstr "%s так противно воняет! Съесть?" #: player.cpp msgid "This book has more recipes for you to learn." -msgstr "" +msgstr "В этой книге есть ещё рецепты для изучения." #: player.cpp msgid "" "This book has more recipes, but you don't have the skill to learn them yet." msgstr "" +"В этой книге есть ещё рецепты, однако, вам не хватает навыка для их изучения." #: player.cpp msgid "" "This book is too complex for you to easily understand. It will take longer " "to read." msgstr "" +"Книга слишком сложна для вашего понимания. Её чтение займёт намного больше " +"времени." #: player.cpp msgid "This is a comfortable place to sleep." @@ -57318,6 +59050,11 @@ msgstr "Оружие:" msgid "Weapon: %s" msgstr "Оружие: %s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "Промок" @@ -57520,8 +59257,8 @@ msgid "You feel fatigued all of a sudden." msgstr "На вас неожиданно навалилась усталость." #: player.cpp -msgid "You feel horrible for eating a person.." -msgstr "Вам так отвратительно плохо от поедания человеческого мяса..." +msgid "You feel horrible for eating a person." +msgstr "" #: player.cpp #, c-format @@ -57563,7 +59300,7 @@ msgstr "У вас возникает непреодолимое желание #: player.cpp msgid "You know all the recipes this book has to offer." -msgstr "" +msgstr "Все рецепты, изложенные в данной книге, вам уже известны." #: player.cpp msgid "You let out a piercing howl!" @@ -57580,13 +59317,10 @@ msgid "You need a %s to consume that!" msgstr "Вам нужен %s, чтобы это съесть!" #: player.cpp -#, fuzzy msgid "" "You need to be at least level 1 in the marksmanship skill before you can " "modify guns." msgstr "" -"Вам нужно иметь, как минимум, 1 уровень в навыке обращения с огнестрельным " -"оружием для его модификации." #: player.cpp #, c-format @@ -57695,7 +59429,7 @@ msgstr "" #: player.cpp #, c-format msgid "Your %s already has a %s." -msgstr "" +msgstr "%s уже имеет %s." #: player.cpp #, c-format @@ -57785,7 +59519,7 @@ msgstr "Ваш %s очень скован! %s" #: player.cpp #, c-format msgid "Your %s skill won't be improved. Read anyway?" -msgstr "" +msgstr "Ваш навык %s не будет улучшен. Всё равно читать?" #: player.cpp #, c-format @@ -57795,7 +59529,7 @@ msgstr "" #: player.cpp #, c-format msgid "Your %s's caliber has already been modified." -msgstr "" +msgstr "Калибр %s уже модифицирован." #: player.cpp msgid "Your asthma wakes you up!" @@ -57806,9 +59540,8 @@ msgid "Your batteries discharge slightly." msgstr "" #: player.cpp -#, fuzzy msgid "Your body strains under the weight!" -msgstr "Вы неумело разделали тушу и всё мясо пропало!" +msgstr "" #: player.cpp msgid "Your eyes won't focus without reading glasses." @@ -57853,7 +59586,7 @@ msgstr "" #: player.cpp msgid "male" -msgstr "" +msgstr "мужчина" #: player.cpp msgid "| Press TAB to cycle, ESC or q to return." @@ -57872,7 +59605,7 @@ msgstr "%s %s стреляет в %s." #: ranged.cpp #, c-format msgid "%s hits the %s for %d damage." -msgstr "" +msgstr "%s нанёс %s %d очков повреждений." #: ranged.cpp #, c-format @@ -57930,6 +59663,11 @@ msgstr "Критическое попадание!" msgid "Firing %s (%d)" msgstr "Выстрелить из %s (%d)" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "Режим стрельбы: %s" + #: ranged.cpp msgid "Fwoosh!" msgstr "Ффффшш!" @@ -57964,7 +59702,7 @@ msgstr "" #: ranged.cpp msgid "Mouse - LMB: Target, Wheel: Cycle, RMB: Fire" -msgstr "" +msgstr "Мышь - ЛКМ: цель; Колёсико: переключение; ПКМ: стрельба" #: ranged.cpp msgid "Move cursor to target with directional keys" @@ -58071,7 +59809,7 @@ msgstr "заглублённая мина" #: trapdef.cpp msgid "caltrops" -msgstr "" +msgstr "триболы" #: trapdef.cpp msgid "dissector" @@ -58111,7 +59849,7 @@ msgstr "коврик туристический" #: trapdef.cpp msgid "shimmering portal" -msgstr "" +msgstr "мерцающий портал" #: trapdef.cpp msgid "sinkhole" @@ -58189,7 +59927,7 @@ msgstr "БЖЖЖИК!" #: trapfunc.cpp msgid "Caught by a beartrap." -msgstr "" +msgstr "Попал в медвежий капкан." #: trapfunc.cpp msgid "Electrical beams emit from the floor and slice your flesh!" @@ -58210,7 +59948,7 @@ msgstr "" #. ~ a loud humming sound #: trapfunc.cpp msgid "HRMMM" -msgstr "ВРМММ" +msgstr "УММММ" #: trapfunc.cpp vehicle.cpp msgid "Pop!" @@ -58246,11 +59984,11 @@ msgstr "" #: trapfunc.cpp msgid "Stepped on a caltrop." -msgstr "" +msgstr "Наступил на триболу." #: trapfunc.cpp msgid "Stepped on a land mine." -msgstr "" +msgstr "Наступил на мину." #: trapfunc.cpp msgid "Stepped on a spiked board." @@ -58258,7 +59996,7 @@ msgstr "" #: trapfunc.cpp msgid "Stepped on bubble wrap." -msgstr "" +msgstr "Наступил на пузырчатую плёнку." #: trapfunc.cpp #, c-format @@ -58293,7 +60031,7 @@ msgstr "" #: trapfunc.cpp #, c-format msgid "The %s steps on a caltrop!" -msgstr "" +msgstr "%s наступает на триболу!" #: trapfunc.cpp #, c-format @@ -58318,7 +60056,7 @@ msgstr "" #: trapfunc.cpp #, c-format msgid "The %s trips over a tripwire!" -msgstr "%s споткнулся об растяжку!" +msgstr "%s задел растяжку!" #: trapfunc.cpp msgid "The acidic goo eats away at your feet." @@ -58327,7 +60065,7 @@ msgstr "" #: trapfunc.cpp #, c-format msgid "The air shimmers around the %s..." -msgstr "" +msgstr "Воздух мерцает вокруг %s..." #: trapfunc.cpp msgid "The air shimmers around you..." @@ -58405,12 +60143,12 @@ msgstr "" #: trapfunc.cpp msgid "Tripped on a tripwire." -msgstr "" +msgstr "Задел растяжку." #. ~ a very loud humming sound #: trapfunc.cpp msgid "VRMMMMMM" -msgstr "ВРММММММ" +msgstr "ВУМММММММ" #: trapfunc.cpp msgid "You avoid the spikes within." @@ -58466,7 +60204,7 @@ msgstr "Вы наступили на незакреплённую плитку, #: trapfunc.cpp msgid "You step on a sharp metal caltrop!" -msgstr "" +msgstr "Вы наступили на заострённую металлическую триболу!" #: trapfunc.cpp msgid "You step on a spiked board!" @@ -58474,7 +60212,7 @@ msgstr "" #: trapfunc.cpp msgid "You step on some bubble wrap!" -msgstr "" +msgstr "Вы наступили на пузырчатую плёнку." #: trapfunc.cpp msgid "You trigger a booby trap!" @@ -58482,19 +60220,19 @@ msgstr "" #: trapfunc.cpp msgid "You trigger a crossbow trap!" -msgstr "" +msgstr "Вы вызвали срабатывание арбалетной ловушки!" #: trapfunc.cpp msgid "You trigger a land mine!" -msgstr "" +msgstr "Вы наступили на мину!" #: trapfunc.cpp msgid "You trigger a shotgun trap!" -msgstr "" +msgstr "Вы вызвали срабатывание ловушки с дробовиком!" #: trapfunc.cpp msgid "You trip over a tripwire!" -msgstr "Вы споткнулись об растяжку!" +msgstr "Вы задели растяжку!" #: trapfunc.cpp msgid "You're bathed in radiation!" @@ -58516,12 +60254,12 @@ msgstr "Вам не удаётся вырваться и вы погружает #. ~ a quiet humming sound #: trapfunc.cpp msgid "hrm" -msgstr "врм" +msgstr "уммм" #. ~ a humming sound #: trapfunc.cpp msgid "hrmmm" -msgstr "врммм" +msgstr "уммммм" #. ~ the sound a snake makes #: trapfunc.cpp @@ -58536,7 +60274,7 @@ msgstr "брррРРММ*ПУМП!*" #. ~ default name for the tutorial #: tutorial.cpp msgid "John Smith" -msgstr "" +msgstr "Джон Смит" #: veh_interact.cpp #, c-format @@ -58544,6 +60282,8 @@ msgid "" " You also need level %2$d skill in mechanics to install " "additional engines." msgstr "" +" Для установки дополнительных двигателей вам также потребуется уровень " +"%2$d навыка в механике." #: veh_interact.cpp msgid " (wielded)" @@ -58632,6 +60372,9 @@ msgid "" "%4$s>powered_welder, and level %6$d skill in " "mechanics.%7$s" msgstr "" +"Нужны %2$s, гаечный ключ, заряженный сварочный аппарат, и уровень %6$d навыка в механике.%7$s" #: veh_interact.cpp msgid "No parts here." @@ -58712,7 +60455,7 @@ msgstr "Вы смонтировали %s в %s" #: veh_interact.cpp #, c-format msgid "You need %s." -msgstr "" +msgstr "Вам нужен %s." #: veh_interact.cpp #, c-format @@ -58729,11 +60472,13 @@ msgid "" "You need a wrench and a powered welder to install parts." msgstr "" +"Вам нужен гаечный ключ и заряженный " +"сварочный аппарат для установки запчастей." #: veh_interact.cpp #, c-format msgid "You need a powered welder to repair." -msgstr "" +msgstr "Вам нужен заряженный сварочный аппарат для починки." #: veh_interact.cpp msgid "You need a hose to siphon fuel." @@ -58750,7 +60495,7 @@ msgstr "Вам нужен уровень 2 навыка механики для #: veh_interact.cpp #, c-format msgid "You need level %2$d skill in mechanics." -msgstr "" +msgstr "Вам нужен навык уровня %2$d в механике." #: veh_interact.cpp #, c-format @@ -58786,7 +60531,7 @@ msgstr "-заправка" #: veh_interact.cpp msgid "remve" -msgstr "демнтаж" +msgstr "дем<о>нтаж" #: vehicle.cpp msgid " and stuns it" @@ -58859,7 +60604,7 @@ msgstr "Фары включены" #: vehicle.cpp msgid "Honk horn" -msgstr "" +msgstr "Нажать на гудок" #. ~ indicates that a vehicle part is inside #: vehicle.cpp @@ -58877,11 +60622,11 @@ msgstr "Снаружи" #: vehicle.cpp msgid "Overhead lights turned off" -msgstr "" +msgstr "Выключена мигалка" #: vehicle.cpp msgid "Overhead lights turned on" -msgstr "" +msgstr "Включена мигалка" #: vehicle.cpp msgid "Swinnng!" @@ -58940,7 +60685,7 @@ msgstr "Выключить фары" #: vehicle.cpp msgid "Turn off overhead lights" -msgstr "" +msgstr "Выключить мигалку" #: vehicle.cpp msgid "Turn on headlights" @@ -58948,7 +60693,7 @@ msgstr "Включить фары" #: vehicle.cpp msgid "Turn on overhead lights" -msgstr "" +msgstr "Включить мигалку" #: vehicle.cpp msgid "Turrets: Burst mode" @@ -58964,7 +60709,7 @@ msgstr "Система управления" #: vehicle.cpp msgid "You honk the horn!" -msgstr "" +msgstr "Вы нажали на гудок!" #: vehicle.cpp msgid "You let go of the controls." @@ -58991,7 +60736,7 @@ msgstr "Ваш %s %s въезжает в %s." #: vehicle.cpp msgid "Your engine emits a high pitched whine." -msgstr "Ваш двигатель издаёт выокий стонущий звук." +msgstr "Двигатель издаёт высокий стонущий звук." #: vehicle.cpp msgid "Your engine emits a loud grinding sound." @@ -59057,11 +60802,11 @@ msgstr "%s защищает вас от кислотной измороси." #: weather.cpp msgid "Your clothing protects you from the acid rain." -msgstr "" +msgstr "Одежда защищает вас от кислотного дождя." #: weather.cpp msgid "Your clothing protects you from the acidic drizzle." -msgstr "" +msgstr "Одежда защищает вас от кислотной измороси." #: weather.cpp msgid "Your power armor protects you from the acidic drizzle." @@ -59089,7 +60834,7 @@ msgstr "Облачно" #: weather_data.cpp msgid "Drizzle" -msgstr "Изморозь" +msgstr "Изморось" #: weather_data.cpp msgid "Flurries" @@ -59161,66 +60906,67 @@ msgstr "Верный" #: worldfactory.cpp msgid " WORLD SELECTION " -msgstr "" +msgstr " ВЫБОР МИРА " #: worldfactory.cpp #, c-format msgid "%s is not a valid world name, already exists!" -msgstr "" +msgstr "%s не годится, уже есть такое название мира!" #: worldfactory.cpp #, c-format msgid "%s is not a valid world name, it is a reserved name" -msgstr "" +msgstr "%s не годится, это название для служебных целей" #: worldfactory.cpp msgid "" "Are you SURE you're finished? Your world's name will be randomly generated." msgstr "" +"Вы действительно хотите закончить? Название мира будет выбрано случайно." #: worldfactory.cpp msgid "CONFIRMATION" -msgstr "" +msgstr "ПОДТВЕРЖДЕНИЕ" #: worldfactory.cpp msgid "Do you want to abort World Generation?" -msgstr "" +msgstr "Хотите выйти из меню генерации мира?" #: worldfactory.cpp #, c-format msgid "Do you want to start the game in world [%s]?" -msgstr "" +msgstr "Хотите начать игру в мире [%s]?" #: worldfactory.cpp #, c-format msgid "Page %d" -msgstr "" +msgstr "Страница %d" #: worldfactory.cpp msgid "Pick a world to enter game" -msgstr "" +msgstr "Выберите мир, чтобы начать игру" #: worldfactory.cpp msgid "To go back and review your world, press <" -msgstr "" +msgstr "Чтобы вернуться назад и изменить параметры мира, нажмите <" #: worldfactory.cpp msgid "To pick a random name for your world, press ?." -msgstr "" +msgstr "Чтобы выбрать случайное имя для вашего мира, нажмите \"?\"" #: worldfactory.cpp msgid "" "When you are satisfied with the world as it is and are ready to continue, " "press >" -msgstr "" +msgstr "Если вы закончили с настройками, нажмите для продолжения >" #: worldfactory.cpp msgid "World Gen Options" -msgstr "" +msgstr "Опции генерации" #: worldfactory.cpp msgid "World Name:" -msgstr "" +msgstr "Название мира:" #: worldfactory.cpp msgid "______NO NAME ENTERED!!!!_____" @@ -67949,3 +69695,22 @@ msgstr "______ИМЯ НЕ ВВЕДЕНО!!!!_____" #~ msgid "You have a nicotine craving." #~ msgstr "У вас никотиновая зависимость." + +#~ msgid "You feel horrible for eating a person.." +#~ msgstr "Вам так отвратительно плохо от поедания человеческого мяса..." + +#~ msgid "Normal" +#~ msgstr "Одиночный" + +#~ msgid "Almost instantly you feel a familiar pain in your stomach" +#~ msgstr "Почти мгновенно вы ощущаете знакомую боль в своём желудке." + +#, fuzzy +#~ msgid "" +#~ "A sword bayonet is a large slashing weapon that can be attached to the " +#~ "front of a shotgun or rifle, allowing a melee attack to deal piercing " +#~ "damage. The added length increases recoil substantially." +#~ msgstr "" +#~ "Штык — это колющее оружие, которое можно установить на дробовики, " +#~ "пистолеты-пулеметы или винтовки. Способен наносить режущий урон в " +#~ "рукопашном бою, нарушает баланс оружия и незначительно увеличивает отдачу." diff --git a/lang/po/sr.po b/lang/po/sr.po index 54a5d7f1549a4..bab7e914f03cd 100644 --- a/lang/po/sr.po +++ b/lang/po/sr.po @@ -1,23 +1,23 @@ -# Serbian translations for Cataclysm-DDA package. -# Copyright (C) 2013 CleverRaven and Cataclysm-DDA Contributors -# This file is distributed under the same license as the Cataclysm-DDA package. -# vultures , 2013. +# Serbian translation for cdda +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the cdda package. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: 0.7-git\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-01 07:32+0000\n" -"Last-Translator: Kevin Granade \n" -"Language-Team: Serbian\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 05:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:29+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:35+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -7476,9 +7476,8 @@ msgid "Maybe you should find something new to read..." msgstr "" #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "Osećaš opasnu hladnoću po licu." +msgstr "" #: game.cpp msgid "Monster spotted!" @@ -11320,6 +11319,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11393,9 +11396,8 @@ msgid "shot" msgstr "" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "signalni prijemnik" +msgstr "" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -11844,6 +11846,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12724,6 +12730,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -12833,9 +12845,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "Ne možeš da ispustiš %s." +msgstr "" #: iuse.cpp msgid "You churn up the earth here." @@ -12876,6 +12888,10 @@ msgstr "" msgid "You damage your %s!" msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "" @@ -12989,6 +13005,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -13009,6 +13029,10 @@ msgstr "" msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "" @@ -13156,6 +13180,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -14626,6 +14654,10 @@ msgstr "" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14677,6 +14709,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14694,6 +14732,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14702,6 +14744,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14710,6 +14761,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14726,6 +14782,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14751,10 +14811,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14768,6 +14838,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14820,6 +14895,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14832,6 +14917,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14852,10 +14942,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -14904,6 +15002,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -14913,10 +15015,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -15894,6 +16004,14 @@ msgstr "10mm Automatska" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -17018,6 +17136,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "Krzneni kaput, sa malim džepovima. Izuzetno topao." +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17415,6 +17539,13 @@ msgstr "" "Puška ručne izrade, sa elektromagnetima koji ubrzavaju feromagnetski " "projektil do velikih brzina. Koristi sistem za neprekidno napajanje (UPS)." +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17457,6 +17588,12 @@ msgstr "" "Komplet za učvršćivanje samostrela i šine za ispaljivanje strela na puščanu " "cev većeg kalibra. Koristi municiju za samostrel." +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17694,13 +17831,10 @@ msgstr "" "kod žičanih ograda." #: lang/json/json_items.py -#, fuzzy msgid "" "A light and breezy cotton dress. Though cool and comfortable to wear, it " "lacks any storage space." msgstr "" -"Dugačka haljina od pamučne tkanine. Karakteriše je umanjena pokretljivost i " -"nedostatak bilo kakvih džepova." #: lang/json/json_items.py msgid "A light vest covered in pockets and straps for storage." @@ -17763,6 +17897,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "Dugačko, najlonsko uže. Priveže se za osobu kao prevencija od pada." +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18215,6 +18355,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "Štikle, odnosno visoke potpetice. Nezgodne za šetnju." +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "Deblje pantalone od impregniranog platna, toplije od džinsa." @@ -18227,6 +18381,12 @@ msgstr "Šorc od impregniranog pamuka." msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18306,11 +18466,10 @@ msgstr "" "Rukavi od penastih materijala, kakvi se koriste u kontaktnim sportovima." #: lang/json/json_items.py -#, fuzzy msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." -msgstr "Naočari za sunce, štite od odsjaja jakog sunca." +msgstr "" #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." @@ -18793,6 +18952,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "Vrlo kratko parče najlonskog užeta. Ograničene upotrebe zbog veličine." +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18978,6 +19151,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -19004,6 +19185,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "Pamučna majica bez rukava. Vrlo udobna." +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -19248,6 +19435,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "Supa od komada mesa neke osobe koja biva prijatnija kao obrok." @@ -19406,15 +19599,11 @@ msgid "A sweet red berry." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"Bajonet je hladno oružje koje se pričvrsti na vrh cevi puške, sačmarice ili " -"malokalibarskog automatskog oružja i služi za probadanje protivnika iz " -"blizine. Ovaj produžetak pomalo otežava ciljanje." #: lang/json/json_items.py msgid "" @@ -20050,20 +20239,16 @@ msgstr "" "preciznosti. Zahteva prostor u šaržeru čiji kapacitet smanjuje." #: lang/json/json_items.py -#, fuzzy msgid "" "An all-encompassing black helmet that covers your entire face and neck, " "providing excellent protection from all sorts of damage." -msgstr "Otporna i čvrsta kaciga, štiti od najrazličitijih tipova udaraca." +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "An aluminium baseball bat, lighter than a wooden bat and a little easier to " "swing as a result." msgstr "" -"Aluminijumska bejzbol palica, manja i lakša od obične što je čini manje " -"efikasnom u borbi." #: lang/json/json_items.py msgid "An aluminum can, like what soda comes in." @@ -20280,6 +20465,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21620,6 +21809,12 @@ msgstr "Tvrde, kožne cokule sa čeličnim vrhom. Izuzetno izdržljive." msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21653,6 +21848,13 @@ msgstr "Kao jabukovača, samo s dodatkom votke." msgid "Like cola, but without caffeine. Still not that healthy." msgstr "Kao kola, samo bez kofeina. I dalje ne baš zdravo piće." +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "Diskusije na temu automobilizma i tehnika vožnje." @@ -22038,6 +22240,18 @@ msgstr "PDA" msgid "PDA - Flashlight" msgstr "PDA - Baterijska Lampa" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -22229,6 +22443,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "Mobilna kuhinja" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -23231,6 +23451,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "Ako su plave, ne znači da su tužne." @@ -23348,6 +23574,12 @@ msgstr "" "većina pesama ti se dopada. Brzo će istrošiti baterije, a zauzvrat doprinosi " "moralu. (A)ktiviraj kako bi počeo/la da slušaš." +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23359,13 +23591,10 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "This burning magnesium flare is producing light. It will last for about a " "half hour before burning out." msgstr "" -"Prelomljeni fluorescentni štap koji sada isijava slabu svetlost. Proći će " -"nekoliko sati pre nego što reakcija prestane." #: lang/json/json_items.py msgid "" @@ -24368,6 +24597,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24457,9 +24692,8 @@ msgid "This is a spent glowstick. It is essentially trash." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is a spent magnesium flare. It is essentially trash." -msgstr "Ugašeni fluorescentni štap, bezvredan je." +msgstr "" #: lang/json/json_items.py msgid "" @@ -24735,9 +24969,8 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "Hrana za pse. Čudnog mirisa, kuce je obožavaju." +msgstr "" #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." @@ -24990,6 +25223,20 @@ msgstr "" "detonirati u talas elektromagnetne energije i rezultovati privremenim " "\"prijateljskim\" stavom robota u neposrednoj blizini." +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -25129,16 +25376,12 @@ msgstr "" "Rezultat je smanjena brzina metka, samim tim i preciznost i nanesena šteta." #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." msgstr "" -"(A)ktiviranjem ove sprave i odabirom neke od posuda sa zatvaračem u kojima " -"je voda prečistiće je tako da ona bude pogodna za piće. Voda iz reka kao i " -"sa drugih izvora može biti zatrovana." #: lang/json/json_items.py msgid "" @@ -25251,6 +25494,12 @@ msgstr "Čemu Služi Tranzistor?" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "Čim sir počne da se topi, Kraft čini da ga rezanac preklopi." +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -25317,9 +25566,8 @@ msgid "active Granade" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "aktivna šok bomba" +msgstr "" #: lang/json/json_items.py msgid "active flashbang" @@ -25373,6 +25621,10 @@ msgstr "noviji UPS (uklj)" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "aluminij. bejzbol palica" @@ -26077,6 +26329,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "oklop za ruke od hitina" @@ -26233,6 +26489,10 @@ msgstr "sklopljeni luk" msgid "compound bow" msgstr "obostrani luk" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "koncentrovana kiselina" @@ -26321,6 +26581,10 @@ msgstr "vojna prostirka za spavanje" msgid "cotton hat" msgstr "pamučna kapa" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "krek" @@ -26365,6 +26629,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "oštećen komplet skloništa" @@ -26378,9 +26646,8 @@ msgid "darts" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "Premorenost" +msgstr "" #: lang/json/json_items.py msgid "dead glowstick" @@ -26598,6 +26865,10 @@ msgstr "" msgid "feather" msgstr "perce" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26687,14 +26958,12 @@ msgid "flannel jacket" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "Odsjaj" +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "Odsjaj" +msgstr "" #: lang/json/json_items.py msgid "flashbang" @@ -26872,6 +27141,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "krznene pantalone" @@ -26972,6 +27245,10 @@ msgstr "tanka postava rukavice" msgid "glowstick" msgstr "fluorescentni štap" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -27036,6 +27313,10 @@ msgstr "čekić" msgid "hand press & die set" msgstr "ručna presa za municiju" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -27176,6 +27457,10 @@ msgstr "" msgid "holster" msgstr "futrola za oružje" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "med s pčelinjim voskom" @@ -27432,6 +27717,10 @@ msgstr "" msgid "leather jacket" msgstr "kožna jakna" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "kožne pantalone" @@ -27528,6 +27817,10 @@ msgstr "mutagen gmizavca" msgid "log" msgstr "deblo" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "Long Ajlend ledeni čaj" @@ -27588,6 +27881,10 @@ msgstr "" msgid "makeshift halberd" msgstr "ručno izrađeno halberd koplje" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "ručno izrađena mačeta" @@ -27660,6 +27957,10 @@ msgstr "medicinska gaza" msgid "medical gloves" msgstr "lekarske rukavice" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "hanzaplast traka" @@ -27836,6 +28137,10 @@ msgstr "daska sa ekserima" msgid "nail gun" msgstr "pištolj za eksere" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -28360,6 +28665,10 @@ msgstr "naočari za čitanje" msgid "rebar" msgstr "parče armature" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "dvostruko zakrivljeni luk" @@ -28656,6 +28965,10 @@ msgstr "komplet za šivenje" msgid "sharpened metal arrow" msgstr "naoštrena metalna strela" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "čaršav" @@ -28972,6 +29285,10 @@ msgstr "" msgid "steel plating" msgstr "limarija" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -29037,9 +29354,8 @@ msgid "string - 6 in" msgstr "konac - 6 in" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "naočari za sunce" +msgstr "" #: lang/json/json_items.py msgid "sugar" @@ -29050,9 +29366,8 @@ msgid "suit" msgstr "odelo" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "dugačka haljina" +msgstr "" #: lang/json/json_items.py msgid "sunglasses" @@ -29135,9 +29450,8 @@ msgid "switchblade" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "bajonet" +msgstr "" #: lang/json/json_items.py msgid "syringe" @@ -29156,9 +29470,8 @@ msgid "tactical dump pouch" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "bejzbol kaciga" +msgstr "" #: lang/json/json_items.py msgid "tactical gloves" @@ -29224,6 +29537,10 @@ msgstr "teleporter" msgid "television" msgstr "televizor" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "šator" @@ -29565,9 +29882,8 @@ msgid "wooden javelin" msgstr "koplje za bacanje" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "koplje za bacanje" +msgstr "" #: lang/json/json_items.py msgid "woods soup" @@ -29765,6 +30081,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29992,6 +30317,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -30000,6 +30333,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -30112,9 +30454,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "Bonus na brzinu napada" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -30183,9 +30524,8 @@ msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "Inteligencija" +msgstr "" #: lang/json/json_martialarts.py msgid "Dragon Kung Fu" @@ -30278,8 +30618,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -30433,9 +30774,8 @@ msgid "Tiger Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "Snaga" +msgstr "" #: lang/json/json_martialarts.py msgid "Toad Armor" @@ -33832,6 +34172,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -34020,6 +34368,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -34385,6 +34737,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34838,6 +35196,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34953,6 +35318,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -45759,6 +46130,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45779,6 +46159,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45789,11 +46173,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45804,6 +46213,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45819,21 +46242,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45849,6 +46302,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45864,14 +46327,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45880,10 +46388,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45892,6 +46440,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45922,6 +46475,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45937,11 +46510,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45952,21 +46540,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45982,11 +46608,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45997,6 +46637,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47975,6 +48620,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -48261,6 +48916,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49893,6 +50553,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -50270,9 +50935,9 @@ msgid "Ranged penalty: -%d" msgstr "" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "Premorenost" +msgstr "" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" @@ -54276,7 +54941,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -54330,7 +54995,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "Rafal" @@ -54808,10 +55473,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "Uobičajeno" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -55259,6 +55920,11 @@ msgstr "" msgid "Weapon: %s" msgstr "Oružje: %s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -55460,7 +56126,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55866,6 +56532,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" @@ -57156,832 +57827,743 @@ msgstr "" msgid "______NO NAME ENTERED!!!!_____" msgstr "" -#, fuzzy -#~ msgid "" -#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " -#~ "you from the floor, making it easier to sleep" -#~ msgstr "" -#~ "Dušek od penastog materijala koji se urola i tako spakuje. Koristan kada " -#~ "je potrebno izbeći spavanje na hladnoj i čvrstoj podlozi." - -#, fuzzy -#~ msgid "" -#~ "Small metal objects covered with many sharp points. If an unsuspecting " -#~ "victim steps on it, they'll get a spine through the foot." -#~ msgstr "" -#~ "Daščice spojene manjim ekserima, sa nekolicinom većih eksera koji vire " -#~ "iznad.Ukoliko se nagazi, probiće đon i (inače) povrediti stopalo." - -#~ msgid " - 3 IF not resistant, -1 otherwise\n" -#~ msgstr " - 3 AKO nema otpornost, -1 inače\n" - -#~ msgid "Fungus stalks burst through %s's hands!" -#~ msgstr "%s, gljivični stalci ti izbijaju po šakama!" +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "Nekakve bube počinju da puze pod tvojom kožom!" -#~ msgid "Loss of health - Entire Body" -#~ msgstr "Pogoršano Stanje Čitavog Tela" +#~ msgid "You start scratching yourself all over!" +#~ msgstr "Počinješ da se češeš po celom telu!" -#~ msgid "Loss of health - Torso" -#~ msgstr "Pogoršano Stanje Grudnog Koša" +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s počinje da se češe svuda po telu!" -#~ msgid "Occasional pain and/or damage." -#~ msgstr "Povremeni bol i/ili štetno dejstvo." +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s počinje da se češe svuda po telu!" -#~ msgid "Occasional vomiting" -#~ msgstr "Povremeno povraćanje" +#~ msgid "Your bite wound really hurts." +#~ msgstr "Rana od ujeda stvarno počinje da boli." -#~ msgid "POW: " -#~ msgstr "NAP: " +#~ msgid "Your bite wound feels swollen and painful." +#~ msgstr "Ujed koji osećaš počinje da natiče i boli te." -#~ msgid "Symptoms alleviated by medication (Dayquil or Nyquil)." -#~ msgstr "Simptomi se umiruju dejstvom Dejkila ili Najkila (lek)." +#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." +#~ msgstr "Padaš u groznicu, muka ti je, a rana poprima zelenu nijansu." -#~ msgid "You double over, spewing live spores from your mouth!" -#~ msgstr "Savio/la si se, iskašljavajući pritom žive spore!" +#~ msgid "Spores" +#~ msgstr "Spore" -#~ msgid "Quit" -#~ msgstr "Izlaz" +#~ msgid "Bleeding" +#~ msgstr "Krvarenje" -#~ msgid "Help" -#~ msgstr "Pomoć" +#~ msgid "Bugs Under Skin" +#~ msgstr "Bube pod kožom" -#~ msgid "Load" -#~ msgstr "Učitaj" +#~ msgid "Bite Wound" +#~ msgstr "Ugriz" -#~ msgid "MOTD" -#~ msgstr "Misao Dana" +#~ msgid "Painful Bite Wound" +#~ msgstr "Bolan Ujed" -#, fuzzy -#~ msgid "You are a little smarter. Intelligence + 1" -#~ msgstr "Osećaš se malo čudno." +#~ msgid "Infected Wound" +#~ msgstr "Inficirana Rana" -#, fuzzy -#~ msgid "Your muscles are a little stronger. Strength + 1" -#~ msgstr "Osećaš se malo čudno." +#~ msgid "Painful Infected Wound" +#~ msgstr "Inficiran i Bolan Ugriz" -#~ msgid "" -#~ "A funnel used to collect rainwater. (a)ctivate it and place it outside " -#~ "then collect water from it when it rains." -#~ msgstr "" -#~ "Poveći levak za skupljanje kišnice. (A)ktivirati napolju kako bi " -#~ "prikupljao vodu dok pada kiša." +#~ msgid "Pus Filled Wound" +#~ msgstr "Gnojna Rana" -#~ msgid "Refined cocaine, incredibly addictive." -#~ msgstr "Vrsta prerađenog kokaina koja izaziva neverovatnu zavisnost." +#~ msgid "MEDICINE/DRUGS" +#~ msgstr "LEKOVI/OPIJATI" -#~ msgid "Painkillers made by refining mutated poppy seeds.." -#~ msgstr "Sredstvo protiv bolova spravljeno od semenja mutirane biljke maka." +#~ msgid "MODS/BIONICS" +#~ msgstr "MODIFIKACIJE/BIONIKA" -#~ msgid "Sleeping pills made by refining mutated poppy seeds." -#~ msgstr "Domaće pilule za spavanje od semenja mutirane biljke maka." +#~ msgid "Error: Item Missing." +#~ msgstr "Greška: Nedostaje Predmet." #~ msgid "" -#~ "A gentleman's vice. Cigars are what separates a gentleman from a savage." +#~ "There is only the space where an object should be, but isn't. No item " +#~ "template of this type exists." #~ msgstr "" -#~ "Porok pravih džentlmena. Cigare čine tu razliku između čoveka i divljaka." +#~ "Samo prazan prostor; predmet je nepostojeći; ima nepostojeće " +#~ "karakteristike." -#~ msgid "" -#~ "A very strong illegal opiate. Unless you have an opiate tolerance, avoid " -#~ "heroin, as it will be too strong for you." -#~ msgstr "" -#~ "Ilegalan i snažan narkotik. Ukoliko ne poseduješ izuzetnu otpornost na " -#~ "opijate trebalo bi da izbegavaš heroin, zbog jačine dejstva." +#~ msgid "long underwear" +#~ msgstr "dugačke gaće" #~ msgid "" -#~ "A very strong illegal stimulant. Extremely addictive and bad for you, but " -#~ "also extremely effective in boosting your alertness." +#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " +#~ "will provide excellent protection against ambient radiation." #~ msgstr "" -#~ "Ilegalan i izuzetno snažan narkotik. Vrlo brzo izaziva zavisnost i jako " -#~ "je loš po zdravlje, a stimulativno dejstvo drži dugo na oprezu." +#~ "Zaštitno odelo. Iako je teško za nošenje i izgleda vrlo robusno, nošenje " +#~ "ovakvog odela pruža odličnu zaštitu od radijacije u okolini." -#~ msgid "A strong, illegal stimulant. Highly addictive." -#~ msgstr "Nelegalno sredstvo, stimulant koji brzo izaziva zavisnost." +#~ msgid "plate mail" +#~ msgstr "srednjevekovni metalni oklop" -#~ msgid "" -#~ "Really useful only for relaxing. Will reduce your attributes and reflexes." -#~ msgstr "Koristi uglavnom kod opuštanja. Refleksi i osobine biće umanjeni." +#~ msgid "A thin cotton jacket. Good for brisk weather." +#~ msgstr "Tanka pamučna jakna. Super za prohladno vreme." -#~ msgid "marijuana" -#~ msgstr "marihuana" +#~ msgid "A padded coat with deep pockets. Very warm." +#~ msgstr "Kaput sa postavom i dubokim džepovima. Vrlo topao." -#~ msgid "" -#~ "These will boost your dexterity, intelligence, and perception for a short " -#~ "time. They are quite addictive." +#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." #~ msgstr "" -#~ "Uvećavaju spretnost, inteligenciju i percepciju na kratak vremenski rok, " -#~ "dok značajno uvećavaju šansu da se navučeš." +#~ "Kaput od debljeg pamuka. Iako je težak za kretnju, topao je i ima džepove." -#~ msgid "A strong anti-depressant. Useful if your morale level is very low." -#~ msgstr "Snažan antidepresiv. Primenljiv kada je moral u padu." +#~ msgid "A thin pair of leather gloves. Good for doing manual labor." +#~ msgstr "Par tankih platnenih rukavica. Korisne za manuelne poslove." + +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "Pomalo nezgodno za nošenje, ali ima prostora za teret." #~ msgid "" -#~ "Anti-psychotic medication. Used to control the symptoms of schizophrenia " -#~ "and similar ailments. Also popular as a way to come down from a bad trip." +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." #~ msgstr "" -#~ "Vrlo snažno sredstvo za smirenje, na recept. Koristi se za otklanjanje " -#~ "simptoma šizofrenije i sl. Zloupotrebljava se kao sredstvo za \"spuštanje." -#~ "\"" +#~ "Mali indikator doze radijacije spakovan u materijal otporan na zračenje." +#~ "(A)ktiviraj da otpakuješ." #~ msgid "" -#~ "A strong stimulant prescribed for ADD. It will greatly increase your " -#~ "stimulant level, but is quite addictive." +#~ "A tool used to drive nails into wood or other material. It could also be " +#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." #~ msgstr "" -#~ "Sredstvo na recept koje se prepisuje kod akutnih poremećaja pažnje (ADD)." -#~ "Vrlo snažan kao stimulant, ali brzo izaziva zavisnost." +#~ "Uređaj kojim se zabijaju ekseri u drvo i druge materijale. U nuždi može " +#~ "poslužiti kao oružje, odnosno za vežbu dok se ne dostigne trening nivoa 1." +#~ "Izgleda kao pištolj." #~ msgid "" -#~ "Anti-anxiety medication. It will reduce your stimulant level steadily, " -#~ "and will temporarily cancel the effects of anxiety, like the Hoarder " -#~ "trait." +#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " +#~ "damage. It could be used to practice your rifle skill up to level 1." #~ msgstr "" -#~ "Sredstvo za smirenje. Redukuje nivo stimulativnih sredstava u organizmu " -#~ "vrlo postepeno i na taj način negira nuspojave nervoze, na primer kod " -#~ "osoba sa Poremećajem Gomilanja." +#~ "Deca je obožavaju. Relativno precizna, vazdušna puška koristi metkiće " +#~ "koji skoro da i ne nanose štetu meti. Korisna da bi se veština rukovanja " +#~ "puškama uvežbala do osnovnog nivoa (1)." -#~ msgid "A strong opiate, prescribed for moderate to intense pain." -#~ msgstr "Opijat jakog dejstva, za umerene i snažne bolove." +#~ msgid "" +#~ "A leather sling, it is easy to use and accurate, but pebbles do little " +#~ "damage. Pebbles are used as ammunition." +#~ msgstr "" +#~ "Praćka od kožnog materijala, lako se zamahuje njom i precizna je. " +#~ "Municija su uglavnom kamenčići koji prave malu štetu." -#~ msgid "A weak opiate, prescribed for light to moderate pain." +#~ msgid "A tough sinew cut from a corpse, useable as thread." #~ msgstr "" -#~ "Opijat slabijeg dejstva, za analgetsku primenu protiv bolova slabog i " -#~ "umerenog intenziteta." +#~ "Žilice sa lešine nekog čoveka ili životinje, služe kao zamena za konac." #~ msgid "" -#~ "Vital medicine for those with asthma. Those without asthma can use it for " -#~ "a minor stimulant boost." +#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " +#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " +#~ "round. It is nearly silent, but is so weak as to be nearly useless." #~ msgstr "" -#~ "Neophodna spravica onima sa astmom. Potpuno zdravima može poslužiti kao " -#~ "blag stimulans." +#~ "Kuglični projektil, kalibra .22 za oružje koje se ne oslanja na barutno " +#~ "punjenje metka je vrlo mali metak koji leti brzinama blizu zvučne. Gotovo " +#~ "nečujan ali toliko slab da je praktično neupotrebljiv." #~ msgid "" -#~ "Nighttime flu medication. Will halt all flu symptoms for a while, plus " -#~ "make you sleepy." +#~ "9 millimeter parabellum is generally regarded as the most popular handgun " +#~ "cartridge, used by the majority of US police forces. It is also a very " +#~ "popular round in sub-machine guns." #~ msgstr "" -#~ "Lek protiv simptoma gripa za noćnu upotrebu. Efekat traje umereno dugo,uz " -#~ "opuštajuće, uspavljujuće dejstvo." +#~ "9-milimetarski metak je jedan od najpopularnijih u upotrebi pri šaržerima " +#~ "za pištolje, standardan za policiju u SAD. Veoma je često upotrebljavan " +#~ "kao municija kod manjeg automatskog oružja (SMG)." -#~ msgid "Daytime flu medication. Will halt all flu symptoms for a while." +#~ msgid "" +#~ "This small caliber pistol round offers quite good armor penetration at " +#~ "the cost of slightly less damage. It is rarely used outside of the " +#~ "Chinese army." #~ msgstr "" -#~ "Lek protiv simptoma gripa za dnevnu upotrebu. Efekat traje umereno dugo." +#~ "Municija manjeg kalibra, sa dobrim karakteristikama pri probijanju oklopa " +#~ "mete, ali umanjenim potencijalom za nanošenje štete. Retko se javlja van " +#~ "sfere uticaja kineske vojske." #~ msgid "" -#~ "Iodine tablets are used for recovering from irradiation. They are not " -#~ "spectacularly effective, but are better than nothing." +#~ "Designed during World War II by the Soviet Union, the popularity of the " +#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " +#~ "rifle round. However, due to its lack of yaw, this round deals less " +#~ "damage than most." #~ msgstr "" -#~ "Tablete joda se koriste nakon izlaganja zračenju. Oporavak nije preterano " -#~ "brz ni efikasan, ali bolje išta nego ništa." - -#~ msgid "Prescription sleep aids. Will make you very tired." -#~ msgstr "Pilule za spavanje na recept. Izazivaju jak osećaj umora." - -#~ msgid "No-doz pills. Useful for staying up all night." -#~ msgstr "Pilule koje se uzimaju bez recepta i služe za održavanje budnosti." - -#~ msgid "Low-grade painkiller. Best taken in pairs." -#~ msgstr "Sredstvo protiv lakih bolova, konzumira se u parovima." - -#~ msgid "Provides long lasting protection against sickness." -#~ msgstr "Ima dugotrajno podsticajno dejstvo na imunitet od raznih bolesti." - -#~ msgid "Vaccine shot" -#~ msgstr "Vakcina" - -#~ msgid "Take frequently to improve your immune system." -#~ msgstr "Uzima se često kao dodatak ishrani jer koristi imunom sistemu." - -#~ msgid "Screwdriver" -#~ msgstr "Šrafciger" - -#, fuzzy -#~ msgid "12 Gauge Pistol" -#~ msgstr "V29 laserski pištolj" +#~ "Napravljena tokom Drugog svetskog rata u sovjetskoj Rusiji, popularnost " +#~ "automatske puške AK-47 i SKS-a doprinele su masovnom korišćenju kalibra " +#~ "7.62x39mm puščanog metka. Budući da se tane uopšte ne zarotira po izlasku " +#~ "iz cevi, to čini da nanosi manju štetu od municije sličnog kalibra." -#, fuzzy -#~ msgid "RM99 Revolver" -#~ msgstr "Revolver-Sačmarica" +#~ msgid "A 40mm grenade with a concussive explosion." +#~ msgstr "40mm granata sa eksplozivnim punjenjem" #~ msgid "" -#~ "A basic helmet, designed for use with the DOubleTech Power Armor, Mk. I. " -#~ "Offers excellent protection from both attacks and environmental hazards." +#~ "A 40mm grenade with a small explosion and a high number of damaging " +#~ "fragments." #~ msgstr "" -#~ "Osnovna varijanta kacige koja ide uz DoubleTech-ov Mk. I oklop sa " -#~ "jedinicom za napajanje. Odlična zaštita od napada i štetnih faktora u " -#~ "vazduhu i okolini." - -#~ msgid "house coat" -#~ msgstr "bademantil" - -#~ msgid "belt rig" -#~ msgstr "vojni opasač" - -#, fuzzy -#~ msgid "floataion vest" -#~ msgstr "kožni opasač" - -#, fuzzy -#~ msgid "on" -#~ msgstr "Ništa" - -#, fuzzy -#~ msgid "in" -#~ msgstr "džin" - -#, fuzzy -#~ msgid "fuel tank" -#~ msgstr "rezervoar" - -#, fuzzy -#~ msgid "recharge" -#~ msgstr "punjenje" - -#, fuzzy -#~ msgid "greatly " -#~ msgstr "srednjevekovna kaciga" - -#, fuzzy -#~ msgid "her" -#~ msgstr "grabulje" - -#~ msgid "Your hands are very exposed to the cold. Your hands are shivering." -#~ msgstr "Šake su ti duže vreme izložene hladnoći. Počinju da se tresu." +#~ "40mm granata sa vrlo malom eksplozijom i velikim brojem eksplozivnih " +#~ "delova." #~ msgid "" -#~ "Your head is dangerously cold. Getting undressed sounds like a good idea." +#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " +#~ "feet of concrete." #~ msgstr "" -#~ "Osećaš strašnu hladnoću po glavi. Najbolje bi bilo da svučeš sve sa sebe." - -#~ msgid "Of course... it's all fractals!" -#~ msgstr "Pa da... sve je u razlomcima!" - -#~ msgid "Oh god, what's happening?" -#~ msgstr "Gospode Bože, šta se ovo dešava?" - -#~ msgid "Huh? What was that?" -#~ msgstr "Molim? Šta to bi?" +#~ "60mm Anti-tenkovska granata sa snažnom eksplozijom. Može da probije " +#~ "betonski zid deblji od pola metra." -#~ msgid "Fully rested." -#~ msgstr "Potpuno odmoran/na." +#~ msgid "Primer from a small caliber round." +#~ msgstr "Kapisla za metak pištolja manjeg kalibra." -#~ msgid "Your feet feel numb." -#~ msgstr "Gubiš osećaj u stopalima." +#~ msgid "" +#~ "Will you be able to place the arrow right into bull's eye? It is not that " +#~ "easy, but once you know how it's done, you will have a lot of fun with " +#~ "archery." +#~ msgstr "" +#~ "Da li možeš da ispališ strelu u sam centar mete? To i nije tako lako kao " +#~ "što izgleda, ali uz dovoljno vežbe, i TI možeš da se zabavljaš koristeći " +#~ "luk i strelu." -#~ msgid "Your hands are shivering." -#~ msgstr "Tresu ti se šake." +#~ msgid "Basic Sword & Sorcery." +#~ msgstr "Osnove Mača i Magije." -#~ msgid "Your torso is burning up. You should remove some layers." -#~ msgstr "Osećaš vatru po grudima. Trebalo bi da skineš nešto od odeće." +#~ msgid "" +#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " +#~ "does less damage and is less accurate. Stands a good chance of remaining " +#~ "intact once fired." +#~ msgstr "" +#~ "Drvena municija za samostrel sa oštrim vrhom. Lakša je odnosu na čeličnu," +#~ "zbog čega nanosi manje štete i manje je precizna. Posle ispaljivanja ima " +#~ "solidnu šansu da ostane čitava." -#, fuzzy -#~ msgid " AM" -#~ msgstr "RAM Memorija" +#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." +#~ msgstr "Nije za piće. Mešanje sa amonijakom daje opasna isparenja." -#, fuzzy -#~ msgid "You screw up the installation" -#~ msgstr "Infekcija uzima danak; razboleo/la si se." +#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." +#~ msgstr "Nije za piće. Mešanje sa izbeljivačem daje opasna isparenja." -#, fuzzy -#~ msgid "You flub the installation" -#~ msgstr "Infekcija uzima danak; razboleo/la si se." +#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." +#~ msgstr "Sakupljena kiselina preostala od kisele kiše. Nije za piće." -#~ msgid ".223 caliber retool" -#~ msgstr "alat za prepravku na .223 kalibar." +#~ msgid "beef jerky" +#~ msgstr "usoljeno suvo meso" -#~ msgid ".308 caliber retool" -#~ msgstr "alat za prepravku na .308 kalibar." +#~ msgid "Bread and turkey, that's it." +#~ msgstr "Hleb i meso ćurke, ukratko." -#~ msgid "4.6mm caliber retool" -#~ msgstr "alat za prepravku na 4.6mm kalibar." +#~ msgid "cooked spaghetti" +#~ msgstr "kuvane špagete" -#~ msgid "5.7mm caliber retool" -#~ msgstr "alat za prepravku na 5.7mm kalibar" +#~ msgid "Canned beans. A staple for hobos." +#~ msgstr "Konzerva pasulja. Praznik za beskućnike." -#~ msgid ".22 caliber retool" -#~ msgstr "alat za prepravku na .22 kalibar." +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "Bljak, groznog je ukusa, ali te dosta zasiti." -#~ msgid "9mm caliber retool" -#~ msgstr "alat za prepravku na 9mm kalibar." +#~ msgid "sardines" +#~ msgstr "sardine" -#~ msgid ".45 caliber retool" -#~ msgstr "alat za prepravku na .45 kalibar." +#~ msgid "tuna fish" +#~ msgstr "tunjevina" -#~ msgid "A decent sized piece of cotton designed for medical purposes." -#~ msgstr "Obično parče pamuka standardne veličine za upotrebu u medicini." +#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." +#~ msgstr "" +#~ "Izbeljivač, odvratne arome. Ne pokušavaj konzumaciju ukoliko ne umireš od " +#~ "gladi." #~ msgid "" -#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " -#~ "enjoy." +#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " +#~ "emergency." #~ msgstr "" -#~ "Isečeni komadi jabuke, vakuumirani u plastičnom pakovanju. (A)ktiviraj da " -#~ "bi otvorio/la kesicu i prepustio/la se uživanju." - -#~ msgid "vacuum-packed apple slices" -#~ msgstr "vakumizirani komadi jabuke" +#~ "Veliki komad pčelinjeg voska. Ne tako ukusan niti hranljiv, ali može da " +#~ "koristi u nevolji." #~ msgid "" -#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " -#~ "enjoy." +#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " +#~ "all sorts of afflictions." #~ msgstr "" -#~ "Isečeni komadi povrća, vakuumirani u plastičnom pakovanju. (A)ktiviraj da " -#~ "bi otvorio/la kesicu i prepustio/la se uživanju." +#~ "Veliki komad pčelinjeg voska, ispunjen gustim, tamnim medom. Koristan kod " +#~ "uklanjanja ogromnog broja štetnih simptoma." #~ msgid "" -#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " -#~ "enjoy." +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." #~ msgstr "" -#~ "Isečeni komadi mesa životinje, vakuumirani u plastičnom pakovanju. (A)" -#~ "ktiviraj da bi otvorio/la kesicu i prepustio/la se uživanju." +#~ "Deformisan fetus ljudskog bića, konzumiranje bi bilo vrlo štetno, naravno " +#~ "u smislu mutacije DNK koda čoveka." #~ msgid "" -#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." +#~ "A misshapen human arm, eating this would be pretty disgusting and cause " +#~ "your DNA to mutate." #~ msgstr "" -#~ "Prenosivi sistem za pakovanje hrane vakuumom, radi na principu toplog i " -#~ "hladnog vazduha, odnosno izvlačenja istog." +#~ "Deformisana ljudska ruka, odvratna kao obrok, a izaziva i mutacije DNK " +#~ "koda." #~ msgid "" -#~ "A cordless drill with a selection of drill bits. The charger base " -#~ "contains a battery draining attachment so the drill can be charged in " -#~ "lieu of mains power." -#~ msgstr "" -#~ "Bežična bušilica i različiti umetci za nju. Punjač sadrži preklopnik uz " -#~ "koji naprava koristi strujno napajanje umesto baterije." +#~ "A malformed human leg, this would be gross to eat, and cause mutations." +#~ msgstr "Deformisana ljudska noga, odvratna kao obrok, a izaziva i mutacije." #~ msgid "" -#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." +#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." #~ msgstr "" -#~ "Hermetički zatvorena tegla sa komadima jabuke. (A)ktiviraj da otvoriš i " -#~ "uživaš." +#~ "Jaje džinovskog mrava veličine bejzbol lopte. Izuzetno hranjivo ali " +#~ "odvratno." -#~ msgid "sealed jar of canned apple" -#~ msgstr "zimnica - komadi jabuke" +#~ msgid "This white flour is useful for baking." +#~ msgstr "Pšenično brašno, pomeša se sa tečnošću i peče u rerni ili na vatri." -#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." -#~ msgstr "Hermetički zatvorena tegla povrća. (A)ktiviraj da otvoriš i uživaš." +#~ msgid "MRE - beef" +#~ msgstr "SDO - meso" + +#~ msgid "canned apple slices" +#~ msgstr "konzervirani komadi jabuke" #~ msgid "" -#~ "A sealed glass jar containing human meat. Activate to open and enjoy." +#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " +#~ "color." #~ msgstr "" -#~ "Hermetički zatvorena tegla ljudskog mesa. (A)ktiviraj da otvoriš i uživaš." +#~ "Tegla konzerviranih jabuka u soku. Slabog ukusa i polako gube sastav i " +#~ "boju." + +#~ msgid "apple slices" +#~ msgstr "komadići jabuke" #~ msgid "" -#~ "A sealed glass jar containing some meat. Activate to open and enjoy." +#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" #~ msgstr "" -#~ "Hermetički zatvorena tegla sa komadima mesa. (A)ktiviraj da otvoriš i " -#~ "uživaš." +#~ "Komadići jabuke u šećernom sirupu, koji čuva svežinu, sastav i oblik." #~ msgid "" -#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " -#~ "make it ready to fire. Once activated, it cannot be repacked." +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire." #~ msgstr "" -#~ "Raketni bacač M72 LAW, zapakovan za transport. (A)ktiviraj kako bi otpala " -#~ "zaštita da bude spreman za paljbu, posle čega se ne može zapakovati." +#~ "Upaljač je neophodan za korišćenje različitih opijata, cigareta, ili kako " +#~ "bi se zapalio molotovljev koktel. Takođe, upaljač je koristan kako bi se " +#~ "mnoge stvari u okolini zapalile." #~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. This one has " -#~ "been used already and is now useless." +#~ "Matches must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use matches to light " +#~ "nearby items on fire." #~ msgstr "" -#~ "Grejač za jednokratnu upotrebu, za korišćenje kod sportskih povreda ili " -#~ "za grejanje hrane. Ovaj je već iskorišćen i zbog toga je neupotrebljiv." +#~ "Šibice su korisne da bi se inhalirala različita isparenja, dim cigarete " +#~ "ili da bi se zapalio eksploziv kao što je Molotovljev koktel. Neophodne " +#~ "su i ako želiš da potpališ vatru." #~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. Usable only " -#~ "once." +#~ "A fire drill is a simple item for firestarting, made from two pieces of " +#~ "wood and some string. Although it is constructed out of simple materials, " +#~ "it's slow and rather difficult to get a fire started with this tool." #~ msgstr "" -#~ "Grejač za jednokratnu upotrebu, za korišćenje kod sportskih povreda ili " -#~ "za grejanje hrane." +#~ "Drvce za potpaljivanje vatre čine dva manja, čvrsta i suva komada drveta " +#~ "sa kratkom strunom kojom se materijal zagreva. Iako izgleda jednostavno," +#~ "potpaljivanje nije nimalo lako, a ni brzo." #~ msgid "" -#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " -#~ "shelter has been damaged, and needs repairs." +#~ "Use a sewing kit on an article of clothing to attempt to repair or " +#~ "reinforce that clothing. This uses your tailoring skill." #~ msgstr "" -#~ "Zaklon, skrpljen od štapova i nešto kože. (A)ktivirati kako bi se " -#~ "postavio.Ovom konkretnom su potrebne popravke usled cepanja i lomljenja." +#~ "(A)ktiviraj komplet za šivenje na odabranom odevnom predmetu radi " +#~ "potrebnih popravki usled cepanja, ili radi ojačavanja istih. Zavisi od " +#~ "veštine Šivenja." -#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgid "" +#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." #~ msgstr "" -#~ "Zaklon, skrpljen od štapova i nešto kože. (A)ktivirati kako bi se " -#~ "postavio." +#~ "Makazama možeš iseći pamučne odevne predmete pretvarajući ih u krpe." #~ msgid "" -#~ "A large stick, with the end carved into a blade for digging. Can be used " -#~ "to dig shallow pits, but not deep ones." +#~ "Use a hammer, with nails and two by fours in your inventory, to board up " +#~ "adjacent doors and windows." #~ msgstr "" -#~ "Poveći štap sa vrhom u obliku manje oštrice. Može se koristiti za kopanje " -#~ "plitkih rovova, ali ne i dubljih." +#~ "Čekić služi kako bi se vrata i prozori zabarikadirali, u slučaju da imaš " +#~ "2x4 daske i dovoljno eksera pri sebi." -#~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." +#~ msgid "Use a fire extinguisher to put out adjacent fires." #~ msgstr "" -#~ "Zaravnato parče kamena privezano kanapom na drveni štap. Može da posluži " -#~ "za kopanje, mada je pravo oruđe stvar koju tražiš." +#~ "(A)ktiviraj aparat za gašenje požara na okolini kako bi požar bio ugašen." #~ msgid "" -#~ "A rock affixed to a stick, functions adequately as a hammer, but really " -#~ "can't compare to a proper hammer." +#~ "With enough electronics skill, you could attach this to your devices to " +#~ "increase their battery capacity." #~ msgstr "" -#~ "Parče kamena pričvršćeno na drveni štap koje može da posluži kao čekić," -#~ "iako se zaista ne može porediti sa pravim." +#~ "Ako si dovoljno vešt(a) sa elektronikom možeš da uvećaš kapacitet nekog " +#~ "od uređaja tako da drži više baterija odjednom koristeći ovu spravicu." #~ msgid "" -#~ "A sharp needle made from a bone. It would be useful for making rough " -#~ "clothing and items" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. Use it to turn it on." #~ msgstr "" -#~ "Zaoštrena kost u obliku igle. Može koristiti kod šivenja grubih komada " -#~ "tkanine i odevnih predmeta" +#~ "Fenjer, odnosno svetiljka na tečno gorivo. Ne osvetljava baš mnogo, ali " +#~ "rezervoar traje dugo. (A)ktiviraj da bi počela da svetli." -#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. It is turned on. Use it to turn it off." #~ msgstr "" -#~ "Perorez, džepni nožić. Nema veliku primenu u borbi, ali bolje išta nego " -#~ "ništa." +#~ "Fenjer, odnosno svetiljka na tečno gorivo. Ne osvetljava baš mnogo, ali " +#~ "rezervoar traje dugo. Upaljena je. (A)ktiviraj da bi se ugasila." #~ msgid "" -#~ "A small multipurpose electronic device. This PDA has its flashlight app " -#~ "on, and is providing light." +#~ "Using this flashlight will turn it on, assuming it is charged with " +#~ "batteries. A turned-on flashlight will provide light during the night or " +#~ "while underground." #~ msgstr "" -#~ "Višenamenski digitalni uređaj. Program ove spravice (PDA) oponaša džepnu " -#~ "lampu putem svetlosti sa ekrana." +#~ "(A)ktiviranjem baterijske lampe osvetljavaš prostor oko sebe, ukoliko " +#~ "imaš dovoljno baterija. Korisna je noću kao i pod zemljom." #~ msgid "" -#~ "A small multipurpose electronic device. Can be loaded with a variety of " -#~ "apps, providing all kinds of functionality." +#~ "This flashlight is turned on, and continually draining its batteries. It " +#~ "provides light during the night or while underground. Use it to turn it " +#~ "off." #~ msgstr "" -#~ "Višenameski digitalni uređaj. U njega se mogu pohraniti različiti " -#~ "programi kako bi namena bila raznovrsnija." - -#~ msgid "A piece of kevlar. Can be used to repair kevlar items" -#~ msgstr "Komad kevlar materijala. Za popravku antibalističkih prsluka." - -#~ msgid "A piece of plastic. Not much use except to repair plastic items" -#~ msgstr "Parče plastike. Nema svrhu sem kod popravke stvari od plastike." +#~ "Uključena ručna lampa, ili baterlampa, obasjava svetlost i crpi punjenje." +#~ "Nezamenljiva tokom noći ili ispod zemlje. (A)ktiviraj da je isključiš." -#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgid "" +#~ "A burnt-out lightstrip. You could disassemble this to recover the " +#~ "amplifier circuit." #~ msgstr "" -#~ "Krpa, parče tkanine korisne u izradi svega i svačega, pa i kada treba " -#~ "zaustaviti krvarenje." +#~ "Pregorelo elektronsko kolo sa malim, ukrasnim svetlom. Rastavljanjem se " +#~ "dobija kolo pojačivača signala." #~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." +#~ "A light-emitting circuit wired directly to some batteries. Once " +#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " +#~ "batteries die, you'll need to scrap it to recover the components that are " +#~ "reusable." #~ msgstr "" -#~ "Džinovski (džambo) marker za industrijsku upotrebu, po snazi i veličini " -#~ "negde između klasičnog markera i boje sa raspršivačem." +#~ "Kolo koje emituje slabu svetlost i crpi snagu iz baterija. Od trenutka " +#~ "kada se aktivira, svake 3 jedinice punjenja baterije pružaju 25 sati " +#~ "osvetljenja.Istrošena baterija se ne menja, već je moguće rastaviti sklop." #~ msgid "" -#~ "A spray can, filled with paint. Use this tool to make graffiti on the " -#~ "floor." -#~ msgstr "Boja u spreju. S njom možeš da napišeš ili nacrtaš nešto na podu." - -#~ msgid "A large steel pickaxe, strike the earth!" -#~ msgstr "Veliki čelični pijuk, udri po kamenu!" +#~ "A light-emitting circuit wired directly to some batteries. Provides a " +#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " +#~ "die, you'll need to scrap it to recover the components that are reusable." +#~ msgstr "" +#~ "Kolo koje emituje slabu svetlost i crpi snagu iz baterija. Svake 3 " +#~ "jedinice punjenja baterije pružaju 25 sati osvetljenja. Istrošena " +#~ "baterija se ne menja, već je moguće rastaviti sklop." #~ msgid "" -#~ "A combination lock box, breaking inside would destroy anything of value." +#~ "A small blue light glowstick, bend it to break the glass cylinder inside " +#~ "and start the reaction to produce a very small amount of light." #~ msgstr "" -#~ "Kutija sa bravom koja se otključava kombinacijom. Grubo obijanje bi " -#~ "uništilo sadržaj kutije" +#~ "Štap fluorescentno plave boje, ukoliko se savije staklena zaštita puca te " +#~ "hemijska reakcija s vazduhom rezultuje ne baš jarkom svetlošću." #~ msgid "" -#~ "An improvised easy breaking picklock made from scrap metal, needs " -#~ "MacGyver like skills to open locks, it's light material lessens chances " -#~ "of alarms being set off." +#~ "A small heating element. Indispensable for cooking and chemistry. Try not " +#~ "to burn yourself." #~ msgstr "" -#~ "Improvizovan komplet za obijanje brava, napravljen od delova pri ruci. " -#~ "Vešte ruke neophodne za korišćenje. Lagani materijali garantuju da se " -#~ "alarm neće oglasiti." +#~ "Grejač na električnu energiju. Nezamenljiv za hemijske oglede, koristan " +#~ "za kuvanje i zagrevanje. Pažljivo, možeš se opeći." #~ msgid "" -#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " -#~ "quickly opening locks." +#~ "A piece of metal that can get very hot. Necessary for electronics " +#~ "crafting. You could also use it to cauterize wounds, if you had to." #~ msgstr "" -#~ "Bravarski alat za obijanje brava, vrlo koristan za brzo i tiho otvaranje " -#~ "mehanizama koji se otključavaju i zaključavaju." +#~ "Parče metala koje se zagreje do visokih temperatura. Neophodno u radu sa " +#~ "elektronikom, još je korisno i kod zaustavljanja krvarenja." -#~ msgid "An unwieldy mop. Good for cleaning up spills." +#~ msgid "" +#~ "Using this allows you to send out a signal; either a general SOS, or if " +#~ "you are in contact with a faction, to send a direct call to them." #~ msgstr "" -#~ "Krpa za brisanje sa dugačkom drškom. Nezgodna za rukovanje, služi za " -#~ "čišćenje." +#~ "(A)ktiviraj kako bi poslao signal na odabranoj radio frekvenciji. To može " +#~ "biti formalni SOS, ili poziv nekoj od organizacija u okolini." #~ msgid "" -#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " -#~ "gauge wire." +#~ "Using this radio turns it on. It will pick up any nearby signals being " +#~ "broadcast and play them audibly." #~ msgstr "" -#~ "Par velikih makaza za metal, koje možeš upotrebiti da ukloniš katanac ili " -#~ "deblju žicu." +#~ "(A)ktiviranjem uključuješ radio aparat. Možeš slušati šta se emituje na " +#~ "nekoj od frekvencija koje se emituju u blizini putem zvučnika." -#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." +#~ msgid "" +#~ "This radio is turned on, and continually draining its batteries. It is " +#~ "playing the broadcast being sent from any nearby radio towers." #~ msgstr "" -#~ "Štap pripremljen tako da predstavlja okidač mehanizma za klopke i zamke." +#~ "Uključeni radio uređaj koji radi na baterije. Namešten je na neku od " +#~ "okolnih stanica, čiji toranj se verovatno nalazi negde u blizini." #~ msgid "" -#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " -#~ "mechanics crafting recipes." -#~ msgstr "" -#~ "Podesivi francuski ključ. Koristan u borbi, a u mehanici koristan za " -#~ "prepravku i izradu svega i svačega." +#~ "An antenna designed to pick up signals better when pointed at the source." +#~ msgstr "Antena koja se usmeri ka izvoru i tada bolje prihvata signal." #~ msgid "" -#~ "A Philips-head screwdriver, important for almost all electronics crafting " -#~ "and most mechanics crafting." +#~ "If you can find a system to analyze this you may find something of " +#~ "interest." #~ msgstr "" -#~ "Klasični Filipsov šrafciger, neophodan za svaki rad sa elektronikom kao i " -#~ "za mehaničke popravke." - -#~ msgid "A tool used for disassembling firearm ammunition." -#~ msgstr "Alat koji se koristi u rastavljanju fabričke municije." +#~ "Ako pronađeš uređaj koji može da analizira ovo, moguće je da ćeš saznati " +#~ "nešto korisno." #~ msgid "" -#~ "A large stand with slots in the side. (a)ctivate it and place it " -#~ "somewhere then set fires in it with no risk of spreading." +#~ "A string of numbers to access the elevator in the hazardous waste " +#~ "sarcophagus." #~ msgstr "" -#~ "Uspravno postolje sa pregradama. (A)ktivirati ga i posle postaviti negde " -#~ "kako bi vatra gorela bez opasnosti po okolinu." +#~ "Niz brojeva potreban kako bi se pokrenuo lift u prostoriji za " +#~ "skladištenje radioaktivnog otpada." #~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time. This candle is lit." +#~ "This device was constructed by 'enhancing' a radio with some amplifier " +#~ "circuits. It's completely lost its ability to pick up a station, but it's " +#~ "nice and loud now. Could be useful to distract zombies." #~ msgstr "" -#~ "Deblja sveća koja iako ne osvetljava mnogo, može da potraje duboko u noć." -#~ "Upaljena je." +#~ "Uzevši radio i igrajući se sa dodatnim pojačivačima signala nastao je " +#~ "ovaj uređaj, vrlo koristan u pravljenju buke koja privlači zombije. U " +#~ "slučaju da želiš da uhvatiš neku stanicu, nećeš uspeti." #~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time." +#~ "A road map. Use it to read points of interest, including, but not limited " +#~ "to, location(s) of hospital(s) nearby." #~ msgstr "" -#~ "Deblja sveća koja iako ne osvetljava mnogo, može da potraje duboko u noć." +#~ "Karta lokalnih puteva. Kada je pročitaš, pokazaće ti lokalne drumove i " +#~ "bitne lokacije kao što su bolnice." #~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " -#~ "producing plenty of light" +#~ "A prying tool. Use it to open locked doors without destroying them, or to " +#~ "lift manhole covers." #~ msgstr "" -#~ "Veći štap obavijen krpom natopljenom benzinom. Trenutno gori i tako " -#~ "obasjava značajan prostor." +#~ "Alat za grubo otvaranje. Koristan kod otvaranja zaključanih vrata, takođe " +#~ "neophodan pri podizanju poklopaca šahtova." #~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " -#~ "amount of light" +#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " +#~ "pile of dirt." #~ msgstr "" -#~ "Veći štap obavijen krpom natopljenom benzinom. Ako se zapali, obasjaće " -#~ "okolinu." - -#~ msgid "A small tent, just big enough to fit a person comfortably." -#~ msgstr "Šator za jednu osobu, malih dimenzija." +#~ "Oruđe koje se koristi na farmi. Njime se rastresita, obradiva zemlja može " +#~ "nabacati da služi kao nasip." -#~ msgid "A sturdy saw, useful for cutting through metal objects." -#~ msgstr "Čvrsta čelična testera, bonsek kojim se može seći kroz metal." +#~ msgid "A digging tool. Use it to dig pits adjacent to your location." +#~ msgstr "Oruđe za kopanje. Korisno za iskopavanje rupa u bližoj okolini." #~ msgid "" -#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." +#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " +#~ "a vehicle." #~ msgstr "" -#~ "Velika dvoručna sekira. Dobra za blisku borbu, iako se njom sporije " -#~ "zamahuje." - -#~ msgid "A flimsy saw, useful for cutting through wood objects." -#~ msgstr "Elastična testera, služi za sečenje kroz drvene predmete." +#~ "Savitljivo gumeno crevo. Korisno kao komponenta pri izradi korisnih " +#~ "predmeta,odnosno za izvlačenje goriva iz rezervoara." #~ msgid "" -#~ "Designed for combat, and deadly in the right hands. Can be used to " -#~ "butcher corpses." +#~ "Using this item will, if loaded with gas, cause it to turn on, making a " +#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." #~ msgstr "" -#~ "Napravljen za borbu i apsolutno smrtonosan u pravim rukama. Može se " -#~ "koristiti i za sređivanje mesa." +#~ "(A)ktivacijom se dobija oružje koje radi na benzin, sporo i nezgodno, " +#~ "bučno ali vrlo opasno u bliskoj borbi." #~ msgid "" -#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " -#~ "butchering corpses." +#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " +#~ "adjacent solid terrain." #~ msgstr "" -#~ "Oštar nož sa teškim sečivom. Pristojno je oružje, i najbolja stvar kada " -#~ "je na redu sređivanje mesa." +#~ "Bušilica veće snage koja radi na benzin. (A)ktiviraj ukoliko ima goriva " +#~ "kako bi probila rupu kroz čvrste materijale u okolini." + +#~ msgid "bubblewrap" +#~ msgstr "plastični mehurići (folija)" #~ msgid "" -#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " -#~ "corpses." +#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " +#~ "the ground, creating a trap that will warn you with noise when something " +#~ "steps on it." #~ msgstr "" -#~ "Oštar nož. Ne mnogo koristan u borbi, ali može poslužiti pri sređivanju " -#~ "mesa neke lešine." +#~ "Plastična folija prekrivena vazdušnim mehurićima. Ako se (A)ktivira na " +#~ "podu postaje zamka koja će se oglasiti ukoliko neko pokuša da pređe preko " +#~ "nje." #~ msgid "" -#~ "A large blade attached to a long stick. Could do a considerable amount of " -#~ "damage." +#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " +#~ "creating a trap that will ensnare and damage anything that steps on it. " +#~ "If you are carrying a shovel, you will have the option of burying it." #~ msgstr "" -#~ "Ogromno sečivo pričvršćeno na dužu motku. Moglo bi da nanese pristojnu " -#~ "količinu štete." +#~ "Čelična zamka koja se sastoji od para oštrih čeljusti i opruge. (A)" +#~ "ktiviraj na zemlji, čime ćeš je postaviti kako bi zarobila sve što pokuša " +#~ "da pređe preko tog kvadrata. Uz pomoć lopate možeš i da je zakopaš." #~ msgid "" -#~ "A large blade that has had a portion of the handle wrapped in duct tape, " -#~ "making it easier to wield as a rough machete." +#~ "Several pieces of wood, nailed together, with nails sticking straight up. " +#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." #~ msgstr "" -#~ "Veliko sečivo kod koga je drška delom obmotana širokom izolir trakom, " -#~ "kako bi se koristila nalik grubo napravljenoj mačeti." +#~ "Daščice spojene manjim ekserima, sa nekolicinom većih eksera koji vire " +#~ "iznad.Ukoliko se nagazi, probiće đon i (inače) povrediti stopalo." #~ msgid "" -#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " -#~ "Called 'broad' to contrast with the slimmer rapiers." +#~ "A tripwire trap must be placed across a doorway or other thin passage. " +#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " +#~ "hurt themselves minorly." #~ msgstr "" -#~ "Mač modernog izgleda, upotrebljavan tokom 16-tog, 17-tog i 18-tog veka." -#~ "Atribut široki dobija kako bi se razlikovao od rapijera i njemu sličnih." +#~ "Žica kakva se postavlja u neki uski prolaz ili dovratak. Nema veću svrhu " +#~ "od toga da se nepažljivi prolaznik saplete i eventualno padne, uz manje " +#~ "povrede." #~ msgid "" -#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " -#~ "Though large and heavy compared to other spears, its accuracy and damage " -#~ "are unparalled." +#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " +#~ "pulled, the crossbow fires. Only a single round can be used, after which " +#~ "the trap is disabled." #~ msgstr "" -#~ "Srednjevekovno oružje sa drvenim štapom kao drškom i dužim zaoštrenim " -#~ "vrhom od gvožđa. Iako veće i teže u poređenju sa ostalim kopljima, " -#~ "preciznost i količina štete koju nanosi su neprevaziđeni." +#~ "Zamka u vidu parčeta žice koje se povuče, u kom slučaju nategnuti " +#~ "samostrel izbacuje strelu. Jedini nedostatak je to što posle ispaljivanja " +#~ "te strele zamka više ne funkcioniše dok se ponovo ne postavi." #~ msgid "" -#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " -#~ "makes any battle a stylish battle." +#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " +#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " +#~ "time the trigger is pulled, one or two may be used." #~ msgstr "" -#~ "Omiljeno oružje gospode, ali i gospode gusara. Brzo se i lagano zamahuje " -#~ "njime, što u svaku borbu unosi dozu stila." - -#~ msgid "A simple wood pole made deadlier by the blade tied to it." -#~ msgstr "Drvena motka sa učvršćenim sečivom na jednom kraju." +#~ "Zamka u vidu parčeta žice koje se povuče i time povlači i oroz sačmarice." +#~ "U tom slučaju oružje ispaljuje jednu ili dve patrone sačme od ukupno dve " +#~ "koliko ima kada se postavi." #~ msgid "" -#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " -#~ "effective against armor." +#~ "A machete is attached laterally to a motor, with a tripwire controlling " +#~ "its throttle. When the tripwire is pulled, the blade is swung around with " +#~ "great force. The trap forms a 3x3 area of effect." #~ msgstr "" -#~ "Japanski mač koji se teško pronalazi. Smrtonosan protiv neoklopljenih " -#~ "protivnika i takođe vrlo efikasan ukoliko jesu oklopljeni." - -#~ msgid "This huge iron knife makes an excellent melee weapon." -#~ msgstr "Teško metalno sečivo, praktično u bliskoj borbi." +#~ "Mačeta koja se postrance pričvrsti na motor, sa okidačem za zamku koji " +#~ "kontroliše paljenje. U slučaju da se aktivira, sečivo će se zavrteti " +#~ "velikom snagom. Radijus dejstva je reda veličine 3x3." #~ msgid "" -#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " -#~ "precision strike in the hands of the skilled." +#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " +#~ "Requires a young tree nearby. Effective at trapping and killing some " +#~ "small animals." #~ msgstr "" -#~ "Mali hirurški skalpel, vrlo oštar. Sićušni vrh je izuzetno opasan u " -#~ "rukama veštih sa nožem, kada može naneti povredu na pravom mestu." +#~ "Komplet za izradu jednostavne zamke, sa omčom od konopca i običnim " +#~ "okidačem. Pričvršćena na mlado drvo, zamka služi za hvatanje manjih " +#~ "životinja." #~ msgid "" -#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " -#~ "with. Its small tip allows for a precision strike in the hands of the " -#~ "skilled. It is too small to butcher corpses with." +#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " +#~ "Requires a tree nearby. Effective at trapping monsters." #~ msgstr "" -#~ "Vrlo oštar nožić. Može naneti nešto štete, ali nije lak za rukovanje." -#~ "Manja oštrica je izuzetno opasna u rukama veštih sa nožem, kada može " -#~ "naneti povredu na pravom mestu. Suviše mali za sređivanje mesa." +#~ "Komplet za izradu jednostavne zamke, sa omčom od konopca i običnim " +#~ "okidačem. Pričvršćena na drvo, zamka služi za hvatanje životinja." + +#~ msgid "An anti-personnel mine that is triggered when stepped upon." +#~ msgstr "Protivpešadijska nagazna mina sa okidačem." #~ msgid "" -#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " -#~ "from the floor, making it easier to sleep" +#~ "A tool for measuring radiation. Using it will prompt you to choose " +#~ "whether to scan yourself or the terrain, or to turn it on, which will " +#~ "provide continuous feedback on ambient radiation." #~ msgstr "" -#~ "Dušek od penastog materijala koji se urola i tako spakuje. Koristan kada " -#~ "je potrebno izbeći spavanje na hladnoj i čvrstoj podlozi." +#~ "Uređaj za merenje radijacije. Treba ga (A)ktivirati kako bi znao da li da " +#~ "skenira tebe odnosno okolni teren, u kom slučaju će ostati uključen tako " +#~ "da zvukom obaveštava o prisustvu radijacije." #~ msgid "" -#~ "A military style fold up cot, not quite as comfortable as a bed but much " -#~ "better than slumming it on the ground." +#~ "A tool for measuring radiation. It is in continuous scan mode, and will " +#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " +#~ "it allows you to turn it off, or scan yourself or the ground." #~ msgstr "" -#~ "Standarna vojna prostirka za spavanje, na presavijanje. Možda nije " -#~ "komforna kao krevet ali je daleko udobnija od toga da se samo sklupčaš na " -#~ "zemlji." - -#~ msgid "A tool for welding metal pieces together. Useful for construction." -#~ msgstr "Zavarivač kojim se spajaju metalni delovi. Zgodan za popravke." +#~ "Uređaj za merenje radijacije. Ukoliko se postavi tako da stalno radi," +#~ "neprekidnim kuckanjem će upozoravati ukoliko se radijacija pojavi. Treba " +#~ "ga (A)ktivirati kako bi se isključio, ili možeš nastaviti da skeniraš." #~ msgid "" -#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " -#~ "the sample. Use this tool to draw blood, either from yourself or from a " -#~ "corpse you are standing on." +#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " +#~ "you to teleport a short distance away." #~ msgstr "" -#~ "Komplet za vađenje krvi, uz njega ide i epruveta u kojoj se čuva izvađeni " -#~ "sadržaj. (A)ktiviraj kako bi sebi izvadio krv, ili ukoliko stojiš iznad " -#~ "lešine kojoj to možeš da uradiš." +#~ "Drevna, nepoznata naprava, koja radi na baterije sa plutonijumom. Ako se " +#~ "aktivira teleportovaće te na kratku razdaljinu." #~ msgid "" -#~ "A small whistle. When used, it produces a high tone that causes nearby " -#~ "friendly dogs to either follow you closely and stop attacking, or start " -#~ "attacking enemies if they are currently docile." +#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " +#~ "sentient. Open at your own risk.\"" #~ msgstr "" -#~ "Pištaljka, kada se koristi proizvodi zvuk visoke frekvencije što tera pse " -#~ "u blizini, ukoliko su prijateljski raspoloženi, da te prate i tako " -#~ "prestanu sa napadom, ili da krenu na protivnike ukoliko su u pratnji." +#~ "\"Upozorenje: sadrži vrlo toksične i opasne materije. Sadržaj može biti " +#~ "osetljiv. Koristiti na sopstvenu odgovornost.\"" #~ msgid "" -#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " -#~ "and ticking!" +#~ "A section of a pipe filled with explosive materials. Use this item to " +#~ "light the fuse, which gives you 3 turns before it detonates. You will " +#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." #~ msgstr "" -#~ "Snažan eksploziv, pažljivo rukovati! Dolazi sa brojačem, koji sada " -#~ "odbrojava sekunde ka eksploziji." - -#~ msgid "Highly explosive, use with caution! Armed with a small timer." -#~ msgstr "Snažan eksploziv, pažljivo rukovati! Dolazi sa brojačem." - -#~ msgid "A crude explosive device triggered by a piece of string." -#~ msgstr "Grubo spravljena eksplozivna naprava koja se aktivira parčem užeta." - -#~ msgid "A human skull with strange etchings covering it." -#~ msgstr "Ljudska lobanja sa neobičnim rezbarijama." +#~ "Parče limene cevi punjene eksplozivom. (A)ktivirati kako bi se fitilj " +#~ "zapalio, posle čega ostaju 3 runde pre nego što eksplodira. Potreban ti " +#~ "je upaljač. Naprava je nepouzdana i možda neće eksplodirati." #~ msgid "" -#~ "A stone with spirals all over it, and holes around its perimeter. Though " -#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " -#~ "it." +#~ "Use this item to pull the pin, turning it into an active grenade. You " +#~ "will then have five turns before it explodes; throwing it would be a good " +#~ "idea." #~ msgstr "" -#~ "Stena po kojoj se poznaju spirale, oko koje postoji nekoliko rupa. Iako " -#~ "je većih dimenzija od kamena gotovo da i nema težinu. Izgleda kao da " -#~ "prikuplja vazduh oko sebe." +#~ "(A)ktiviraj da izvučeš osigurač bombe, tada imaš 5 rundi do detonacije. " +#~ "Ne bi bila loša ideja da je pre toga baciš." #~ msgid "" -#~ "A high-powered stun gun. Use this item to attempt to electrocute an " -#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " -#~ "shock can actually jump through the air, it is difficult to miss." +#~ "This grenade is active, and will explode any second now. Better throw it!" #~ msgstr "" -#~ "Oružje koje radi na principu jakog strujnog šoka. Upotrebom se na " -#~ "protivnika u neposrednoj blizini usmerava strujni udar koji nanosi štetu " -#~ "i parališe ga. Kako udar ima svojstvo da upravlja kroz vazduh do mete, " -#~ "teško je promašiti." +#~ "Ovoj bombi je izvučena sigurnosna igla - eksplodiraće! Otarasi je se što " +#~ "pre!" #~ msgid "" -#~ "A unified power supply, or UPS, is a device developed jointly by military " -#~ "and scientific interests for use in combat and the field. The UPS is " -#~ "designed to power armor and some guns, but drains batteries quickly." +#~ "Use this item to pull the pin, turning it into an active flashbang. You " +#~ "will then have five turns before it detonates with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." #~ msgstr "" -#~ "Sistem za neprekidno napajanje (UPS) je plod saradnje vojnih snaga i " -#~ "civilnih naučnika kako bi se obezbedila el. energija na terenu i u borbi." -#~ "Napaja oružja i oklope, a baterije ne traju mnogo." +#~ "(A)ktiviraj da izvučeš osigurač šok bombe, tada imaš 5 rundi do " +#~ "detonacije kada će eksplodirati uz veoma jarku svetlost i vrlo snažan " +#~ "zvuk koji zaslepljuju i oglušuju sa dezorijentišućim efektom." #~ msgid "" -#~ "An inactive turret. Using this item involves turning it on and placing it " -#~ "on the ground, where it will attach itself. The turret will then identify " -#~ "you as a friendly, and attack all enemies with an SMG." +#~ "This flashbang is active, and will soon detonate with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." #~ msgstr "" -#~ "Malo postolje sa neaktivnim automatskim oružjem. (A)ktivirati kako bi se " -#~ "pričvrstilo na zemlju i uključilo. Postolje, odnosno kula pamti onoga ko " -#~ "je postavi kao prijateljski entitet, a ostale napada SMG-om." +#~ "Aktivna, ručna šok bomba. Uskoro će eksplodirati uz veoma jarku svetlost " +#~ "i vrlo snažan zvuk koji zaslepljuju i oglušuju sa dezorijentišućim " +#~ "efektom." #~ msgid "" -#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " -#~ "air. They are covered with whirring blades and attack by throwing " -#~ "themselves against their target. Use this item to activate the manhack." +#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " +#~ "will then have three turns before it detonates, creating an EMP field " +#~ "that damages robots and drains bionic energy." #~ msgstr "" -#~ "Isključeni Sekač. Sekači su leteći roboti veličine pesnice. Napadaju " -#~ "oštrim lopaticama koje se vrte velikim brzinama oko njih tako što naleću " -#~ "na protivnike. (A)ktiviraj kako bi uključio robota." +#~ "(A)ktiviranjem ćeš izvući osigurač i tako pokrenuti brojač EMP ručne " +#~ "bombe.Imaš tri runde do detonacije, koja ima polje dejstva " +#~ "elektromagnetnog impulsa čime oštećuje robote i crpi bioničku energiju " +#~ "implanata." -#~ msgid "A rare and arcane device, covered in alien markings." +#~ msgid "" +#~ "This EMP grenade is active, and will shortly detonate, creating a large " +#~ "EMP field that damages robots and drains bionic energy." #~ msgstr "" -#~ "Neobičan i redak uređaj sa magičnim svojstvima, prekriven nepoznatim " -#~ "znakovima." +#~ "Ova bomba sa EMP dejstvom je aktivna i ubrzo će eksplodirati, rezultujući " +#~ "poljem dejstva elektromagnetnog impulsa koje oštećuje robote i crpi " +#~ "bioničku energiju implanata." + +#~ msgid "active teargas" +#~ msgstr "aktivni suzavac" #~ msgid "" -#~ "This miniature nuclear bomb has a light blinking on the side, showing " -#~ "that it will soon explode. You should probably get far away from it." +#~ "This canister of teargas has had its pin removed, indicating that it is " +#~ "(or will shortly be) expelling highly toxic gas." #~ msgstr "" -#~ "Ova minijaturna atomska bomba ima diodu sa strane koja trepće čime " -#~ "pokazuje da će uskoro eksplodirati. Trebalo bi da se skloniš daleko, što " -#~ "pre." +#~ "Metalni kanister sa suzavcem, sada je aktivna bomba koja će uskoro, " +#~ "ukoliko već i nije počela da izbacuje vrlo otrovan gas." #~ msgid "" -#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " -#~ "it to activate the timer. Ten turns later it will explode, leaving behind " -#~ "a radioactive crater. The explosion is large enough to take out a house." -#~ msgstr "" -#~ "Zastrašujuće oružje - bez preterivanja ručna atomska bomba. (A)ktivirati " -#~ "da bi brojač počeo sa odbrojavanjem. Deset rundi kasnije desiće se " -#~ "eksplozija,ostavljajući krater i radioaktivno zračenje za sobom. Dovoljno " -#~ "je jaka da zbriše zgradu." - -#~ msgid "" -#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " -#~ "before it explodes." -#~ msgstr "" -#~ "Petarda sa zapaljenim fitiljem koji se i čuje. Baciti što pre, dok ne " -#~ "eksplodira." - -#~ msgid "" -#~ "A firecracker with a short fuse. Use this item to light the fuse; you " -#~ "will need a lighter of course. Shortly after you light the fuse it will " -#~ "explode, so throw it quickly!" +#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " +#~ "the rag; you will, of course, need a lighter in your inventory to do " +#~ "this. After lighting it, throw it to cause fires." #~ msgstr "" -#~ "Petarda sa kratkim fitiljem. (A)ktivirati kako bi se fitilj zapalio; u tu " -#~ "svrhu neophodno je imati upaljač. Ubrzo zatim će eksplodirati, pa se " -#~ "preporučuje brzo bacanje!" +#~ "Flaša sa zapaljivim alkoholnim sadržajem i krpom na vrhu. (A)ktiviraj " +#~ "kako bi se zapalila krpa; potrebno je imati upaljač. Čim se krpa zapali, " +#~ "baciti od sebe kako bi se izazvao požar." #~ msgid "" -#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " -#~ "them quickly before the start to explode." +#~ "A glass vial, split into two chambers. The divider is removable, which " +#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " +#~ "happens if you throw the vial) they will spill out as a pool of potent " +#~ "acid." #~ msgstr "" -#~ "Pakovanje sa 25 petardi, sve su zapaljene i čuje se jako šuštanje. " -#~ "Ukoliko ih ne baciš što pre, jedna po jedna će eksplodirati." +#~ "Staklena epruveta sa dve komore. Razdvajač se uklanja, čime se različite " +#~ "hemikalije pomešaju. Čim sadržaj bude izložen vazduhu (kao pri razbijanju " +#~ "staklene epruvete) pretvara se u vrlo poroznu kiselinu." #~ msgid "" -#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " -#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " -#~ "they will begin to explode, so throw them quickly!" +#~ "A glass vial, with two chemicals mixing inside. If this mixture is " +#~ "exposed to air (as happens if you throw the vial), they will spill out as " +#~ "a pool of potent acid." #~ msgstr "" -#~ "Pakovanje sa 25 petardi kratkog fitilja. (A)ktiviraj kako bi se fitilj " -#~ "zapalio; u tu svrhu neophodno je imati upaljač. Ubrzo zatim će jedna po " -#~ "jedna eksplodirati, pa se preporučuje brzo bacanje!" - -#~ msgid "" -#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " -#~ "now." -#~ msgstr "Fitilj dinamita gori i čuje se šišteći zvuk. Ubrzo će eksplodirati." +#~ "Staklena epruveta sa dve komore. Čim sadržaj bude izložen vazduhu (kao " +#~ "pri razbijanju staklene epruvete) pretvara se u vrlo poroznu kiselinu." #~ msgid "" #~ "Several sticks of explosives with a fuse attached. Use this item to light " @@ -57995,739 +58577,831 @@ msgstr "" #~ "eksplodira!" #~ msgid "" -#~ "A glass vial, with two chemicals mixing inside. If this mixture is " -#~ "exposed to air (as happens if you throw the vial), they will spill out as " -#~ "a pool of potent acid." -#~ msgstr "" -#~ "Staklena epruveta sa dve komore. Čim sadržaj bude izložen vazduhu (kao " -#~ "pri razbijanju staklene epruvete) pretvara se u vrlo poroznu kiselinu." +#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " +#~ "now." +#~ msgstr "Fitilj dinamita gori i čuje se šišteći zvuk. Ubrzo će eksplodirati." #~ msgid "" -#~ "A glass vial, split into two chambers. The divider is removable, which " -#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " -#~ "happens if you throw the vial) they will spill out as a pool of potent " -#~ "acid." +#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " +#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " +#~ "they will begin to explode, so throw them quickly!" #~ msgstr "" -#~ "Staklena epruveta sa dve komore. Razdvajač se uklanja, čime se različite " -#~ "hemikalije pomešaju. Čim sadržaj bude izložen vazduhu (kao pri razbijanju " -#~ "staklene epruvete) pretvara se u vrlo poroznu kiselinu." +#~ "Pakovanje sa 25 petardi kratkog fitilja. (A)ktiviraj kako bi se fitilj " +#~ "zapalio; u tu svrhu neophodno je imati upaljač. Ubrzo zatim će jedna po " +#~ "jedna eksplodirati, pa se preporučuje brzo bacanje!" #~ msgid "" -#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " -#~ "the rag; you will, of course, need a lighter in your inventory to do " -#~ "this. After lighting it, throw it to cause fires." +#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " +#~ "them quickly before the start to explode." #~ msgstr "" -#~ "Flaša sa zapaljivim alkoholnim sadržajem i krpom na vrhu. (A)ktiviraj " -#~ "kako bi se zapalila krpa; potrebno je imati upaljač. Čim se krpa zapali, " -#~ "baciti od sebe kako bi se izazvao požar." +#~ "Pakovanje sa 25 petardi, sve su zapaljene i čuje se jako šuštanje. " +#~ "Ukoliko ih ne baciš što pre, jedna po jedna će eksplodirati." #~ msgid "" -#~ "This canister of teargas has had its pin removed, indicating that it is " -#~ "(or will shortly be) expelling highly toxic gas." +#~ "A firecracker with a short fuse. Use this item to light the fuse; you " +#~ "will need a lighter of course. Shortly after you light the fuse it will " +#~ "explode, so throw it quickly!" #~ msgstr "" -#~ "Metalni kanister sa suzavcem, sada je aktivna bomba koja će uskoro, " -#~ "ukoliko već i nije počela da izbacuje vrlo otrovan gas." - -#~ msgid "active teargas" -#~ msgstr "aktivni suzavac" +#~ "Petarda sa kratkim fitiljem. (A)ktivirati kako bi se fitilj zapalio; u tu " +#~ "svrhu neophodno je imati upaljač. Ubrzo zatim će eksplodirati, pa se " +#~ "preporučuje brzo bacanje!" #~ msgid "" -#~ "This EMP grenade is active, and will shortly detonate, creating a large " -#~ "EMP field that damages robots and drains bionic energy." +#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " +#~ "before it explodes." #~ msgstr "" -#~ "Ova bomba sa EMP dejstvom je aktivna i ubrzo će eksplodirati, rezultujući " -#~ "poljem dejstva elektromagnetnog impulsa koje oštećuje robote i crpi " -#~ "bioničku energiju implanata." +#~ "Petarda sa zapaljenim fitiljem koji se i čuje. Baciti što pre, dok ne " +#~ "eksplodira." #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " -#~ "will then have three turns before it detonates, creating an EMP field " -#~ "that damages robots and drains bionic energy." +#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " +#~ "it to activate the timer. Ten turns later it will explode, leaving behind " +#~ "a radioactive crater. The explosion is large enough to take out a house." #~ msgstr "" -#~ "(A)ktiviranjem ćeš izvući osigurač i tako pokrenuti brojač EMP ručne " -#~ "bombe.Imaš tri runde do detonacije, koja ima polje dejstva " -#~ "elektromagnetnog impulsa čime oštećuje robote i crpi bioničku energiju " -#~ "implanata." +#~ "Zastrašujuće oružje - bez preterivanja ručna atomska bomba. (A)ktivirati " +#~ "da bi brojač počeo sa odbrojavanjem. Deset rundi kasnije desiće se " +#~ "eksplozija,ostavljajući krater i radioaktivno zračenje za sobom. Dovoljno " +#~ "je jaka da zbriše zgradu." #~ msgid "" -#~ "This flashbang is active, and will soon detonate with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ "This miniature nuclear bomb has a light blinking on the side, showing " +#~ "that it will soon explode. You should probably get far away from it." #~ msgstr "" -#~ "Aktivna, ručna šok bomba. Uskoro će eksplodirati uz veoma jarku svetlost " -#~ "i vrlo snažan zvuk koji zaslepljuju i oglušuju sa dezorijentišućim " -#~ "efektom." +#~ "Ova minijaturna atomska bomba ima diodu sa strane koja trepće čime " +#~ "pokazuje da će uskoro eksplodirati. Trebalo bi da se skloniš daleko, što " +#~ "pre." -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active flashbang. You " -#~ "will then have five turns before it detonates with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ msgid "A rare and arcane device, covered in alien markings." #~ msgstr "" -#~ "(A)ktiviraj da izvučeš osigurač šok bombe, tada imaš 5 rundi do " -#~ "detonacije kada će eksplodirati uz veoma jarku svetlost i vrlo snažan " -#~ "zvuk koji zaslepljuju i oglušuju sa dezorijentišućim efektom." +#~ "Neobičan i redak uređaj sa magičnim svojstvima, prekriven nepoznatim " +#~ "znakovima." #~ msgid "" -#~ "This grenade is active, and will explode any second now. Better throw it!" +#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " +#~ "air. They are covered with whirring blades and attack by throwing " +#~ "themselves against their target. Use this item to activate the manhack." #~ msgstr "" -#~ "Ovoj bombi je izvučena sigurnosna igla - eksplodiraće! Otarasi je se što " -#~ "pre!" +#~ "Isključeni Sekač. Sekači su leteći roboti veličine pesnice. Napadaju " +#~ "oštrim lopaticama koje se vrte velikim brzinama oko njih tako što naleću " +#~ "na protivnike. (A)ktiviraj kako bi uključio robota." #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active grenade. You " -#~ "will then have five turns before it explodes; throwing it would be a good " -#~ "idea." +#~ "An inactive turret. Using this item involves turning it on and placing it " +#~ "on the ground, where it will attach itself. The turret will then identify " +#~ "you as a friendly, and attack all enemies with an SMG." #~ msgstr "" -#~ "(A)ktiviraj da izvučeš osigurač bombe, tada imaš 5 rundi do detonacije. " -#~ "Ne bi bila loša ideja da je pre toga baciš." +#~ "Malo postolje sa neaktivnim automatskim oružjem. (A)ktivirati kako bi se " +#~ "pričvrstilo na zemlju i uključilo. Postolje, odnosno kula pamti onoga ko " +#~ "je postavi kao prijateljski entitet, a ostale napada SMG-om." #~ msgid "" -#~ "A section of a pipe filled with explosive materials. Use this item to " -#~ "light the fuse, which gives you 3 turns before it detonates. You will " -#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." +#~ "A unified power supply, or UPS, is a device developed jointly by military " +#~ "and scientific interests for use in combat and the field. The UPS is " +#~ "designed to power armor and some guns, but drains batteries quickly." #~ msgstr "" -#~ "Parče limene cevi punjene eksplozivom. (A)ktivirati kako bi se fitilj " -#~ "zapalio, posle čega ostaju 3 runde pre nego što eksplodira. Potreban ti " -#~ "je upaljač. Naprava je nepouzdana i možda neće eksplodirati." +#~ "Sistem za neprekidno napajanje (UPS) je plod saradnje vojnih snaga i " +#~ "civilnih naučnika kako bi se obezbedila el. energija na terenu i u borbi." +#~ "Napaja oružja i oklope, a baterije ne traju mnogo." #~ msgid "" -#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " -#~ "sentient. Open at your own risk.\"" +#~ "A high-powered stun gun. Use this item to attempt to electrocute an " +#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " +#~ "shock can actually jump through the air, it is difficult to miss." #~ msgstr "" -#~ "\"Upozorenje: sadrži vrlo toksične i opasne materije. Sadržaj može biti " -#~ "osetljiv. Koristiti na sopstvenu odgovornost.\"" +#~ "Oružje koje radi na principu jakog strujnog šoka. Upotrebom se na " +#~ "protivnika u neposrednoj blizini usmerava strujni udar koji nanosi štetu " +#~ "i parališe ga. Kako udar ima svojstvo da upravlja kroz vazduh do mete, " +#~ "teško je promašiti." #~ msgid "" -#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " -#~ "you to teleport a short distance away." +#~ "A stone with spirals all over it, and holes around its perimeter. Though " +#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " +#~ "it." #~ msgstr "" -#~ "Drevna, nepoznata naprava, koja radi na baterije sa plutonijumom. Ako se " -#~ "aktivira teleportovaće te na kratku razdaljinu." +#~ "Stena po kojoj se poznaju spirale, oko koje postoji nekoliko rupa. Iako " +#~ "je većih dimenzija od kamena gotovo da i nema težinu. Izgleda kao da " +#~ "prikuplja vazduh oko sebe." -#~ msgid "" -#~ "A tool for measuring radiation. It is in continuous scan mode, and will " -#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " -#~ "it allows you to turn it off, or scan yourself or the ground." -#~ msgstr "" -#~ "Uređaj za merenje radijacije. Ukoliko se postavi tako da stalno radi," -#~ "neprekidnim kuckanjem će upozoravati ukoliko se radijacija pojavi. Treba " -#~ "ga (A)ktivirati kako bi se isključio, ili možeš nastaviti da skeniraš." +#~ msgid "A human skull with strange etchings covering it." +#~ msgstr "Ljudska lobanja sa neobičnim rezbarijama." -#~ msgid "" -#~ "A tool for measuring radiation. Using it will prompt you to choose " -#~ "whether to scan yourself or the terrain, or to turn it on, which will " -#~ "provide continuous feedback on ambient radiation." -#~ msgstr "" -#~ "Uređaj za merenje radijacije. Treba ga (A)ktivirati kako bi znao da li da " -#~ "skenira tebe odnosno okolni teren, u kom slučaju će ostati uključen tako " -#~ "da zvukom obaveštava o prisustvu radijacije." +#~ msgid "A crude explosive device triggered by a piece of string." +#~ msgstr "Grubo spravljena eksplozivna naprava koja se aktivira parčem užeta." -#~ msgid "An anti-personnel mine that is triggered when stepped upon." -#~ msgstr "Protivpešadijska nagazna mina sa okidačem." +#~ msgid "Highly explosive, use with caution! Armed with a small timer." +#~ msgstr "Snažan eksploziv, pažljivo rukovati! Dolazi sa brojačem." #~ msgid "" -#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " -#~ "Requires a tree nearby. Effective at trapping monsters." +#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " +#~ "and ticking!" #~ msgstr "" -#~ "Komplet za izradu jednostavne zamke, sa omčom od konopca i običnim " -#~ "okidačem. Pričvršćena na drvo, zamka služi za hvatanje životinja." +#~ "Snažan eksploziv, pažljivo rukovati! Dolazi sa brojačem, koji sada " +#~ "odbrojava sekunde ka eksploziji." #~ msgid "" -#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " -#~ "Requires a young tree nearby. Effective at trapping and killing some " -#~ "small animals." +#~ "A small whistle. When used, it produces a high tone that causes nearby " +#~ "friendly dogs to either follow you closely and stop attacking, or start " +#~ "attacking enemies if they are currently docile." #~ msgstr "" -#~ "Komplet za izradu jednostavne zamke, sa omčom od konopca i običnim " -#~ "okidačem. Pričvršćena na mlado drvo, zamka služi za hvatanje manjih " -#~ "životinja." +#~ "Pištaljka, kada se koristi proizvodi zvuk visoke frekvencije što tera pse " +#~ "u blizini, ukoliko su prijateljski raspoloženi, da te prate i tako " +#~ "prestanu sa napadom, ili da krenu na protivnike ukoliko su u pratnji." #~ msgid "" -#~ "A machete is attached laterally to a motor, with a tripwire controlling " -#~ "its throttle. When the tripwire is pulled, the blade is swung around with " -#~ "great force. The trap forms a 3x3 area of effect." +#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " +#~ "the sample. Use this tool to draw blood, either from yourself or from a " +#~ "corpse you are standing on." #~ msgstr "" -#~ "Mačeta koja se postrance pričvrsti na motor, sa okidačem za zamku koji " -#~ "kontroliše paljenje. U slučaju da se aktivira, sečivo će se zavrteti " -#~ "velikom snagom. Radijus dejstva je reda veličine 3x3." +#~ "Komplet za vađenje krvi, uz njega ide i epruveta u kojoj se čuva izvađeni " +#~ "sadržaj. (A)ktiviraj kako bi sebi izvadio krv, ili ukoliko stojiš iznad " +#~ "lešine kojoj to možeš da uradiš." -#~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " -#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " -#~ "time the trigger is pulled, one or two may be used." -#~ msgstr "" -#~ "Zamka u vidu parčeta žice koje se povuče i time povlači i oroz sačmarice." -#~ "U tom slučaju oružje ispaljuje jednu ili dve patrone sačme od ukupno dve " -#~ "koliko ima kada se postavi." +#~ msgid "A tool for welding metal pieces together. Useful for construction." +#~ msgstr "Zavarivač kojim se spajaju metalni delovi. Zgodan za popravke." #~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " -#~ "pulled, the crossbow fires. Only a single round can be used, after which " -#~ "the trap is disabled." +#~ "A military style fold up cot, not quite as comfortable as a bed but much " +#~ "better than slumming it on the ground." #~ msgstr "" -#~ "Zamka u vidu parčeta žice koje se povuče, u kom slučaju nategnuti " -#~ "samostrel izbacuje strelu. Jedini nedostatak je to što posle ispaljivanja " -#~ "te strele zamka više ne funkcioniše dok se ponovo ne postavi." +#~ "Standarna vojna prostirka za spavanje, na presavijanje. Možda nije " +#~ "komforna kao krevet ali je daleko udobnija od toga da se samo sklupčaš na " +#~ "zemlji." #~ msgid "" -#~ "A tripwire trap must be placed across a doorway or other thin passage. " -#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " -#~ "hurt themselves minorly." +#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " +#~ "from the floor, making it easier to sleep" #~ msgstr "" -#~ "Žica kakva se postavlja u neki uski prolaz ili dovratak. Nema veću svrhu " -#~ "od toga da se nepažljivi prolaznik saplete i eventualno padne, uz manje " -#~ "povrede." +#~ "Dušek od penastog materijala koji se urola i tako spakuje. Koristan kada " +#~ "je potrebno izbeći spavanje na hladnoj i čvrstoj podlozi." #~ msgid "" -#~ "Several pieces of wood, nailed together, with nails sticking straight up. " -#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." +#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " +#~ "with. Its small tip allows for a precision strike in the hands of the " +#~ "skilled. It is too small to butcher corpses with." #~ msgstr "" -#~ "Daščice spojene manjim ekserima, sa nekolicinom većih eksera koji vire " -#~ "iznad.Ukoliko se nagazi, probiće đon i (inače) povrediti stopalo." +#~ "Vrlo oštar nožić. Može naneti nešto štete, ali nije lak za rukovanje." +#~ "Manja oštrica je izuzetno opasna u rukama veštih sa nožem, kada može " +#~ "naneti povredu na pravom mestu. Suviše mali za sređivanje mesa." #~ msgid "" -#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " -#~ "creating a trap that will ensnare and damage anything that steps on it. " -#~ "If you are carrying a shovel, you will have the option of burying it." +#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " +#~ "precision strike in the hands of the skilled." #~ msgstr "" -#~ "Čelična zamka koja se sastoji od para oštrih čeljusti i opruge. (A)" -#~ "ktiviraj na zemlji, čime ćeš je postaviti kako bi zarobila sve što pokuša " -#~ "da pređe preko tog kvadrata. Uz pomoć lopate možeš i da je zakopaš." +#~ "Mali hirurški skalpel, vrlo oštar. Sićušni vrh je izuzetno opasan u " +#~ "rukama veštih sa nožem, kada može naneti povredu na pravom mestu." + +#~ msgid "This huge iron knife makes an excellent melee weapon." +#~ msgstr "Teško metalno sečivo, praktično u bliskoj borbi." #~ msgid "" -#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " -#~ "the ground, creating a trap that will warn you with noise when something " -#~ "steps on it." +#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " +#~ "effective against armor." #~ msgstr "" -#~ "Plastična folija prekrivena vazdušnim mehurićima. Ako se (A)ktivira na " -#~ "podu postaje zamka koja će se oglasiti ukoliko neko pokuša da pređe preko " -#~ "nje." +#~ "Japanski mač koji se teško pronalazi. Smrtonosan protiv neoklopljenih " +#~ "protivnika i takođe vrlo efikasan ukoliko jesu oklopljeni." -#~ msgid "bubblewrap" -#~ msgstr "plastični mehurići (folija)" +#~ msgid "A simple wood pole made deadlier by the blade tied to it." +#~ msgstr "Drvena motka sa učvršćenim sečivom na jednom kraju." #~ msgid "" -#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " -#~ "adjacent solid terrain." +#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " +#~ "makes any battle a stylish battle." #~ msgstr "" -#~ "Bušilica veće snage koja radi na benzin. (A)ktiviraj ukoliko ima goriva " -#~ "kako bi probila rupu kroz čvrste materijale u okolini." +#~ "Omiljeno oružje gospode, ali i gospode gusara. Brzo se i lagano zamahuje " +#~ "njime, što u svaku borbu unosi dozu stila." #~ msgid "" -#~ "Using this item will, if loaded with gas, cause it to turn on, making a " -#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." +#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " +#~ "Though large and heavy compared to other spears, its accuracy and damage " +#~ "are unparalled." #~ msgstr "" -#~ "(A)ktivacijom se dobija oružje koje radi na benzin, sporo i nezgodno, " -#~ "bučno ali vrlo opasno u bliskoj borbi." +#~ "Srednjevekovno oružje sa drvenim štapom kao drškom i dužim zaoštrenim " +#~ "vrhom od gvožđa. Iako veće i teže u poređenju sa ostalim kopljima, " +#~ "preciznost i količina štete koju nanosi su neprevaziđeni." #~ msgid "" -#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " -#~ "a vehicle." +#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " +#~ "Called 'broad' to contrast with the slimmer rapiers." #~ msgstr "" -#~ "Savitljivo gumeno crevo. Korisno kao komponenta pri izradi korisnih " -#~ "predmeta,odnosno za izvlačenje goriva iz rezervoara." - -#~ msgid "A digging tool. Use it to dig pits adjacent to your location." -#~ msgstr "Oruđe za kopanje. Korisno za iskopavanje rupa u bližoj okolini." +#~ "Mač modernog izgleda, upotrebljavan tokom 16-tog, 17-tog i 18-tog veka." +#~ "Atribut široki dobija kako bi se razlikovao od rapijera i njemu sličnih." #~ msgid "" -#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " -#~ "pile of dirt." +#~ "A large blade that has had a portion of the handle wrapped in duct tape, " +#~ "making it easier to wield as a rough machete." #~ msgstr "" -#~ "Oruđe koje se koristi na farmi. Njime se rastresita, obradiva zemlja može " -#~ "nabacati da služi kao nasip." +#~ "Veliko sečivo kod koga je drška delom obmotana širokom izolir trakom, " +#~ "kako bi se koristila nalik grubo napravljenoj mačeti." #~ msgid "" -#~ "A prying tool. Use it to open locked doors without destroying them, or to " -#~ "lift manhole covers." +#~ "A large blade attached to a long stick. Could do a considerable amount of " +#~ "damage." #~ msgstr "" -#~ "Alat za grubo otvaranje. Koristan kod otvaranja zaključanih vrata, takođe " -#~ "neophodan pri podizanju poklopaca šahtova." +#~ "Ogromno sečivo pričvršćeno na dužu motku. Moglo bi da nanese pristojnu " +#~ "količinu štete." #~ msgid "" -#~ "A road map. Use it to read points of interest, including, but not limited " -#~ "to, location(s) of hospital(s) nearby." +#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " +#~ "corpses." #~ msgstr "" -#~ "Karta lokalnih puteva. Kada je pročitaš, pokazaće ti lokalne drumove i " -#~ "bitne lokacije kao što su bolnice." +#~ "Oštar nož. Ne mnogo koristan u borbi, ali može poslužiti pri sređivanju " +#~ "mesa neke lešine." #~ msgid "" -#~ "This device was constructed by 'enhancing' a radio with some amplifier " -#~ "circuits. It's completely lost its ability to pick up a station, but it's " -#~ "nice and loud now. Could be useful to distract zombies." +#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " +#~ "butchering corpses." #~ msgstr "" -#~ "Uzevši radio i igrajući se sa dodatnim pojačivačima signala nastao je " -#~ "ovaj uređaj, vrlo koristan u pravljenju buke koja privlači zombije. U " -#~ "slučaju da želiš da uhvatiš neku stanicu, nećeš uspeti." +#~ "Oštar nož sa teškim sečivom. Pristojno je oružje, i najbolja stvar kada " +#~ "je na redu sređivanje mesa." #~ msgid "" -#~ "A string of numbers to access the elevator in the hazardous waste " -#~ "sarcophagus." +#~ "Designed for combat, and deadly in the right hands. Can be used to " +#~ "butcher corpses." #~ msgstr "" -#~ "Niz brojeva potreban kako bi se pokrenuo lift u prostoriji za " -#~ "skladištenje radioaktivnog otpada." +#~ "Napravljen za borbu i apsolutno smrtonosan u pravim rukama. Može se " +#~ "koristiti i za sređivanje mesa." + +#~ msgid "A flimsy saw, useful for cutting through wood objects." +#~ msgstr "Elastična testera, služi za sečenje kroz drvene predmete." #~ msgid "" -#~ "If you can find a system to analyze this you may find something of " -#~ "interest." +#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." #~ msgstr "" -#~ "Ako pronađeš uređaj koji može da analizira ovo, moguće je da ćeš saznati " -#~ "nešto korisno." +#~ "Velika dvoručna sekira. Dobra za blisku borbu, iako se njom sporije " +#~ "zamahuje." -#~ msgid "" -#~ "An antenna designed to pick up signals better when pointed at the source." -#~ msgstr "Antena koja se usmeri ka izvoru i tada bolje prihvata signal." +#~ msgid "A sturdy saw, useful for cutting through metal objects." +#~ msgstr "Čvrsta čelična testera, bonsek kojim se može seći kroz metal." -#~ msgid "" -#~ "This radio is turned on, and continually draining its batteries. It is " -#~ "playing the broadcast being sent from any nearby radio towers." -#~ msgstr "" -#~ "Uključeni radio uređaj koji radi na baterije. Namešten je na neku od " -#~ "okolnih stanica, čiji toranj se verovatno nalazi negde u blizini." +#~ msgid "A small tent, just big enough to fit a person comfortably." +#~ msgstr "Šator za jednu osobu, malih dimenzija." #~ msgid "" -#~ "Using this radio turns it on. It will pick up any nearby signals being " -#~ "broadcast and play them audibly." +#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " +#~ "amount of light" #~ msgstr "" -#~ "(A)ktiviranjem uključuješ radio aparat. Možeš slušati šta se emituje na " -#~ "nekoj od frekvencija koje se emituju u blizini putem zvučnika." +#~ "Veći štap obavijen krpom natopljenom benzinom. Ako se zapali, obasjaće " +#~ "okolinu." #~ msgid "" -#~ "Using this allows you to send out a signal; either a general SOS, or if " -#~ "you are in contact with a faction, to send a direct call to them." +#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " +#~ "producing plenty of light" #~ msgstr "" -#~ "(A)ktiviraj kako bi poslao signal na odabranoj radio frekvenciji. To može " -#~ "biti formalni SOS, ili poziv nekoj od organizacija u okolini." +#~ "Veći štap obavijen krpom natopljenom benzinom. Trenutno gori i tako " +#~ "obasjava značajan prostor." #~ msgid "" -#~ "A piece of metal that can get very hot. Necessary for electronics " -#~ "crafting. You could also use it to cauterize wounds, if you had to." +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time." #~ msgstr "" -#~ "Parče metala koje se zagreje do visokih temperatura. Neophodno u radu sa " -#~ "elektronikom, još je korisno i kod zaustavljanja krvarenja." +#~ "Deblja sveća koja iako ne osvetljava mnogo, može da potraje duboko u noć." #~ msgid "" -#~ "A small heating element. Indispensable for cooking and chemistry. Try not " -#~ "to burn yourself." +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time. This candle is lit." #~ msgstr "" -#~ "Grejač na električnu energiju. Nezamenljiv za hemijske oglede, koristan " -#~ "za kuvanje i zagrevanje. Pažljivo, možeš se opeći." +#~ "Deblja sveća koja iako ne osvetljava mnogo, može da potraje duboko u noć." +#~ "Upaljena je." #~ msgid "" -#~ "A small blue light glowstick, bend it to break the glass cylinder inside " -#~ "and start the reaction to produce a very small amount of light." +#~ "A large stand with slots in the side. (a)ctivate it and place it " +#~ "somewhere then set fires in it with no risk of spreading." #~ msgstr "" -#~ "Štap fluorescentno plave boje, ukoliko se savije staklena zaštita puca te " -#~ "hemijska reakcija s vazduhom rezultuje ne baš jarkom svetlošću." +#~ "Uspravno postolje sa pregradama. (A)ktivirati ga i posle postaviti negde " +#~ "kako bi vatra gorela bez opasnosti po okolinu." + +#~ msgid "A tool used for disassembling firearm ammunition." +#~ msgstr "Alat koji se koristi u rastavljanju fabričke municije." #~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Provides a " -#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " -#~ "die, you'll need to scrap it to recover the components that are reusable." +#~ "A Philips-head screwdriver, important for almost all electronics crafting " +#~ "and most mechanics crafting." #~ msgstr "" -#~ "Kolo koje emituje slabu svetlost i crpi snagu iz baterija. Svake 3 " -#~ "jedinice punjenja baterije pružaju 25 sati osvetljenja. Istrošena " -#~ "baterija se ne menja, već je moguće rastaviti sklop." +#~ "Klasični Filipsov šrafciger, neophodan za svaki rad sa elektronikom kao i " +#~ "za mehaničke popravke." #~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Once " -#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " -#~ "batteries die, you'll need to scrap it to recover the components that are " -#~ "reusable." +#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " +#~ "mechanics crafting recipes." #~ msgstr "" -#~ "Kolo koje emituje slabu svetlost i crpi snagu iz baterija. Od trenutka " -#~ "kada se aktivira, svake 3 jedinice punjenja baterije pružaju 25 sati " -#~ "osvetljenja.Istrošena baterija se ne menja, već je moguće rastaviti sklop." +#~ "Podesivi francuski ključ. Koristan u borbi, a u mehanici koristan za " +#~ "prepravku i izradu svega i svačega." -#~ msgid "" -#~ "A burnt-out lightstrip. You could disassemble this to recover the " -#~ "amplifier circuit." +#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." #~ msgstr "" -#~ "Pregorelo elektronsko kolo sa malim, ukrasnim svetlom. Rastavljanjem se " -#~ "dobija kolo pojačivača signala." +#~ "Štap pripremljen tako da predstavlja okidač mehanizma za klopke i zamke." #~ msgid "" -#~ "This flashlight is turned on, and continually draining its batteries. It " -#~ "provides light during the night or while underground. Use it to turn it " -#~ "off." +#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " +#~ "gauge wire." #~ msgstr "" -#~ "Uključena ručna lampa, ili baterlampa, obasjava svetlost i crpi punjenje." -#~ "Nezamenljiva tokom noći ili ispod zemlje. (A)ktiviraj da je isključiš." +#~ "Par velikih makaza za metal, koje možeš upotrebiti da ukloniš katanac ili " +#~ "deblju žicu." -#~ msgid "" -#~ "Using this flashlight will turn it on, assuming it is charged with " -#~ "batteries. A turned-on flashlight will provide light during the night or " -#~ "while underground." +#~ msgid "An unwieldy mop. Good for cleaning up spills." #~ msgstr "" -#~ "(A)ktiviranjem baterijske lampe osvetljavaš prostor oko sebe, ukoliko " -#~ "imaš dovoljno baterija. Korisna je noću kao i pod zemljom." +#~ "Krpa za brisanje sa dugačkom drškom. Nezgodna za rukovanje, služi za " +#~ "čišćenje." #~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. It is turned on. Use it to turn it off." +#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " +#~ "quickly opening locks." #~ msgstr "" -#~ "Fenjer, odnosno svetiljka na tečno gorivo. Ne osvetljava baš mnogo, ali " -#~ "rezervoar traje dugo. Upaljena je. (A)ktiviraj da bi se ugasila." +#~ "Bravarski alat za obijanje brava, vrlo koristan za brzo i tiho otvaranje " +#~ "mehanizama koji se otključavaju i zaključavaju." #~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. Use it to turn it on." +#~ "An improvised easy breaking picklock made from scrap metal, needs " +#~ "MacGyver like skills to open locks, it's light material lessens chances " +#~ "of alarms being set off." #~ msgstr "" -#~ "Fenjer, odnosno svetiljka na tečno gorivo. Ne osvetljava baš mnogo, ali " -#~ "rezervoar traje dugo. (A)ktiviraj da bi počela da svetli." +#~ "Improvizovan komplet za obijanje brava, napravljen od delova pri ruci. " +#~ "Vešte ruke neophodne za korišćenje. Lagani materijali garantuju da se " +#~ "alarm neće oglasiti." #~ msgid "" -#~ "With enough electronics skill, you could attach this to your devices to " -#~ "increase their battery capacity." +#~ "A combination lock box, breaking inside would destroy anything of value." #~ msgstr "" -#~ "Ako si dovoljno vešt(a) sa elektronikom možeš da uvećaš kapacitet nekog " -#~ "od uređaja tako da drži više baterija odjednom koristeći ovu spravicu." +#~ "Kutija sa bravom koja se otključava kombinacijom. Grubo obijanje bi " +#~ "uništilo sadržaj kutije" -#~ msgid "Use a fire extinguisher to put out adjacent fires." -#~ msgstr "" -#~ "(A)ktiviraj aparat za gašenje požara na okolini kako bi požar bio ugašen." +#~ msgid "A large steel pickaxe, strike the earth!" +#~ msgstr "Veliki čelični pijuk, udri po kamenu!" #~ msgid "" -#~ "Use a hammer, with nails and two by fours in your inventory, to board up " -#~ "adjacent doors and windows." +#~ "A spray can, filled with paint. Use this tool to make graffiti on the " +#~ "floor." +#~ msgstr "Boja u spreju. S njom možeš da napišeš ili nacrtaš nešto na podu." + +#~ msgid "" +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." #~ msgstr "" -#~ "Čekić služi kako bi se vrata i prozori zabarikadirali, u slučaju da imaš " -#~ "2x4 daske i dovoljno eksera pri sebi." +#~ "Džinovski (džambo) marker za industrijsku upotrebu, po snazi i veličini " +#~ "negde između klasičnog markera i boje sa raspršivačem." + +#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgstr "" +#~ "Krpa, parče tkanine korisne u izradi svega i svačega, pa i kada treba " +#~ "zaustaviti krvarenje." + +#~ msgid "A piece of plastic. Not much use except to repair plastic items" +#~ msgstr "Parče plastike. Nema svrhu sem kod popravke stvari od plastike." + +#~ msgid "A piece of kevlar. Can be used to repair kevlar items" +#~ msgstr "Komad kevlar materijala. Za popravku antibalističkih prsluka." #~ msgid "" -#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." +#~ "A small multipurpose electronic device. Can be loaded with a variety of " +#~ "apps, providing all kinds of functionality." #~ msgstr "" -#~ "Makazama možeš iseći pamučne odevne predmete pretvarajući ih u krpe." +#~ "Višenameski digitalni uređaj. U njega se mogu pohraniti različiti " +#~ "programi kako bi namena bila raznovrsnija." #~ msgid "" -#~ "Use a sewing kit on an article of clothing to attempt to repair or " -#~ "reinforce that clothing. This uses your tailoring skill." +#~ "A small multipurpose electronic device. This PDA has its flashlight app " +#~ "on, and is providing light." #~ msgstr "" -#~ "(A)ktiviraj komplet za šivenje na odabranom odevnom predmetu radi " -#~ "potrebnih popravki usled cepanja, ili radi ojačavanja istih. Zavisi od " -#~ "veštine Šivenja." +#~ "Višenamenski digitalni uređaj. Program ove spravice (PDA) oponaša džepnu " +#~ "lampu putem svetlosti sa ekrana." + +#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgstr "" +#~ "Perorez, džepni nožić. Nema veliku primenu u borbi, ali bolje išta nego " +#~ "ništa." #~ msgid "" -#~ "A fire drill is a simple item for firestarting, made from two pieces of " -#~ "wood and some string. Although it is constructed out of simple materials, " -#~ "it's slow and rather difficult to get a fire started with this tool." +#~ "A sharp needle made from a bone. It would be useful for making rough " +#~ "clothing and items" #~ msgstr "" -#~ "Drvce za potpaljivanje vatre čine dva manja, čvrsta i suva komada drveta " -#~ "sa kratkom strunom kojom se materijal zagreva. Iako izgleda jednostavno," -#~ "potpaljivanje nije nimalo lako, a ni brzo." +#~ "Zaoštrena kost u obliku igle. Može koristiti kod šivenja grubih komada " +#~ "tkanine i odevnih predmeta" #~ msgid "" -#~ "Matches must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use matches to light " -#~ "nearby items on fire." +#~ "A rock affixed to a stick, functions adequately as a hammer, but really " +#~ "can't compare to a proper hammer." #~ msgstr "" -#~ "Šibice su korisne da bi se inhalirala različita isparenja, dim cigarete " -#~ "ili da bi se zapalio eksploziv kao što je Molotovljev koktel. Neophodne " -#~ "su i ako želiš da potpališ vatru." +#~ "Parče kamena pričvršćeno na drveni štap koje može da posluži kao čekić," +#~ "iako se zaista ne može porediti sa pravim." #~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire." +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." #~ msgstr "" -#~ "Upaljač je neophodan za korišćenje različitih opijata, cigareta, ili kako " -#~ "bi se zapalio molotovljev koktel. Takođe, upaljač je koristan kako bi se " -#~ "mnoge stvari u okolini zapalile." +#~ "Zaravnato parče kamena privezano kanapom na drveni štap. Može da posluži " +#~ "za kopanje, mada je pravo oruđe stvar koju tražiš." #~ msgid "" -#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" +#~ "A large stick, with the end carved into a blade for digging. Can be used " +#~ "to dig shallow pits, but not deep ones." #~ msgstr "" -#~ "Komadići jabuke u šećernom sirupu, koji čuva svežinu, sastav i oblik." +#~ "Poveći štap sa vrhom u obliku manje oštrice. Može se koristiti za kopanje " +#~ "plitkih rovova, ali ne i dubljih." -#~ msgid "apple slices" -#~ msgstr "komadići jabuke" +#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgstr "" +#~ "Zaklon, skrpljen od štapova i nešto kože. (A)ktivirati kako bi se " +#~ "postavio." #~ msgid "" -#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " -#~ "color." +#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " +#~ "shelter has been damaged, and needs repairs." #~ msgstr "" -#~ "Tegla konzerviranih jabuka u soku. Slabog ukusa i polako gube sastav i " -#~ "boju." +#~ "Zaklon, skrpljen od štapova i nešto kože. (A)ktivirati kako bi se " +#~ "postavio.Ovom konkretnom su potrebne popravke usled cepanja i lomljenja." -#~ msgid "canned apple slices" -#~ msgstr "konzervirani komadi jabuke" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. Usable only " +#~ "once." +#~ msgstr "" +#~ "Grejač za jednokratnu upotrebu, za korišćenje kod sportskih povreda ili " +#~ "za grejanje hrane." -#~ msgid "MRE - beef" -#~ msgstr "SDO - meso" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. This one has " +#~ "been used already and is now useless." +#~ msgstr "" +#~ "Grejač za jednokratnu upotrebu, za korišćenje kod sportskih povreda ili " +#~ "za grejanje hrane. Ovaj je već iskorišćen i zbog toga je neupotrebljiv." -#~ msgid "This white flour is useful for baking." -#~ msgstr "Pšenično brašno, pomeša se sa tečnošću i peče u rerni ili na vatri." +#~ msgid "" +#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " +#~ "make it ready to fire. Once activated, it cannot be repacked." +#~ msgstr "" +#~ "Raketni bacač M72 LAW, zapakovan za transport. (A)ktiviraj kako bi otpala " +#~ "zaštita da bude spreman za paljbu, posle čega se ne može zapakovati." #~ msgid "" -#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." +#~ "A sealed glass jar containing some meat. Activate to open and enjoy." #~ msgstr "" -#~ "Jaje džinovskog mrava veličine bejzbol lopte. Izuzetno hranjivo ali " -#~ "odvratno." +#~ "Hermetički zatvorena tegla sa komadima mesa. (A)ktiviraj da otvoriš i " +#~ "uživaš." #~ msgid "" -#~ "A malformed human leg, this would be gross to eat, and cause mutations." -#~ msgstr "Deformisana ljudska noga, odvratna kao obrok, a izaziva i mutacije." +#~ "A sealed glass jar containing human meat. Activate to open and enjoy." +#~ msgstr "" +#~ "Hermetički zatvorena tegla ljudskog mesa. (A)ktiviraj da otvoriš i uživaš." + +#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." +#~ msgstr "Hermetički zatvorena tegla povrća. (A)ktiviraj da otvoriš i uživaš." + +#~ msgid "sealed jar of canned apple" +#~ msgstr "zimnica - komadi jabuke" #~ msgid "" -#~ "A misshapen human arm, eating this would be pretty disgusting and cause " -#~ "your DNA to mutate." +#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." #~ msgstr "" -#~ "Deformisana ljudska ruka, odvratna kao obrok, a izaziva i mutacije DNK " -#~ "koda." +#~ "Hermetički zatvorena tegla sa komadima jabuke. (A)ktiviraj da otvoriš i " +#~ "uživaš." #~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." +#~ "A cordless drill with a selection of drill bits. The charger base " +#~ "contains a battery draining attachment so the drill can be charged in " +#~ "lieu of mains power." #~ msgstr "" -#~ "Deformisan fetus ljudskog bića, konzumiranje bi bilo vrlo štetno, naravno " -#~ "u smislu mutacije DNK koda čoveka." +#~ "Bežična bušilica i različiti umetci za nju. Punjač sadrži preklopnik uz " +#~ "koji naprava koristi strujno napajanje umesto baterije." #~ msgid "" -#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " -#~ "all sorts of afflictions." +#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." #~ msgstr "" -#~ "Veliki komad pčelinjeg voska, ispunjen gustim, tamnim medom. Koristan kod " -#~ "uklanjanja ogromnog broja štetnih simptoma." +#~ "Prenosivi sistem za pakovanje hrane vakuumom, radi na principu toplog i " +#~ "hladnog vazduha, odnosno izvlačenja istog." #~ msgid "" -#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " -#~ "emergency." +#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " +#~ "enjoy." #~ msgstr "" -#~ "Veliki komad pčelinjeg voska. Ne tako ukusan niti hranljiv, ali može da " -#~ "koristi u nevolji." +#~ "Isečeni komadi mesa životinje, vakuumirani u plastičnom pakovanju. (A)" +#~ "ktiviraj da bi otvorio/la kesicu i prepustio/la se uživanju." -#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." +#~ msgid "" +#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " +#~ "enjoy." #~ msgstr "" -#~ "Izbeljivač, odvratne arome. Ne pokušavaj konzumaciju ukoliko ne umireš od " -#~ "gladi." +#~ "Isečeni komadi povrća, vakuumirani u plastičnom pakovanju. (A)ktiviraj da " +#~ "bi otvorio/la kesicu i prepustio/la se uživanju." -#~ msgid "tuna fish" -#~ msgstr "tunjevina" +#~ msgid "vacuum-packed apple slices" +#~ msgstr "vakumizirani komadi jabuke" -#~ msgid "sardines" -#~ msgstr "sardine" +#~ msgid "" +#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "Isečeni komadi jabuke, vakuumirani u plastičnom pakovanju. (A)ktiviraj da " +#~ "bi otvorio/la kesicu i prepustio/la se uživanju." -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "Bljak, groznog je ukusa, ali te dosta zasiti." +#~ msgid "A decent sized piece of cotton designed for medical purposes." +#~ msgstr "Obično parče pamuka standardne veličine za upotrebu u medicini." -#~ msgid "Canned beans. A staple for hobos." -#~ msgstr "Konzerva pasulja. Praznik za beskućnike." +#~ msgid ".45 caliber retool" +#~ msgstr "alat za prepravku na .45 kalibar." -#~ msgid "cooked spaghetti" -#~ msgstr "kuvane špagete" +#~ msgid "9mm caliber retool" +#~ msgstr "alat za prepravku na 9mm kalibar." -#~ msgid "Bread and turkey, that's it." -#~ msgstr "Hleb i meso ćurke, ukratko." +#~ msgid ".22 caliber retool" +#~ msgstr "alat za prepravku na .22 kalibar." -#~ msgid "beef jerky" -#~ msgstr "usoljeno suvo meso" +#~ msgid "5.7mm caliber retool" +#~ msgstr "alat za prepravku na 5.7mm kalibar" -#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." -#~ msgstr "Sakupljena kiselina preostala od kisele kiše. Nije za piće." +#~ msgid "4.6mm caliber retool" +#~ msgstr "alat za prepravku na 4.6mm kalibar." -#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." -#~ msgstr "Nije za piće. Mešanje sa izbeljivačem daje opasna isparenja." +#~ msgid ".308 caliber retool" +#~ msgstr "alat za prepravku na .308 kalibar." -#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." -#~ msgstr "Nije za piće. Mešanje sa amonijakom daje opasna isparenja." +#~ msgid ".223 caliber retool" +#~ msgstr "alat za prepravku na .223 kalibar." -#~ msgid "" -#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " -#~ "does less damage and is less accurate. Stands a good chance of remaining " -#~ "intact once fired." -#~ msgstr "" -#~ "Drvena municija za samostrel sa oštrim vrhom. Lakša je odnosu na čeličnu," -#~ "zbog čega nanosi manje štete i manje je precizna. Posle ispaljivanja ima " -#~ "solidnu šansu da ostane čitava." +#, fuzzy +#~ msgid "You flub the installation" +#~ msgstr "Infekcija uzima danak; razboleo/la si se." -#~ msgid "Basic Sword & Sorcery." -#~ msgstr "Osnove Mača i Magije." +#, fuzzy +#~ msgid "You screw up the installation" +#~ msgstr "Infekcija uzima danak; razboleo/la si se." -#~ msgid "" -#~ "Will you be able to place the arrow right into bull's eye? It is not that " -#~ "easy, but once you know how it's done, you will have a lot of fun with " -#~ "archery." -#~ msgstr "" -#~ "Da li možeš da ispališ strelu u sam centar mete? To i nije tako lako kao " -#~ "što izgleda, ali uz dovoljno vežbe, i TI možeš da se zabavljaš koristeći " -#~ "luk i strelu." +#, fuzzy +#~ msgid " AM" +#~ msgstr "RAM Memorija" -#~ msgid "Primer from a small caliber round." -#~ msgstr "Kapisla za metak pištolja manjeg kalibra." +#~ msgid "Your torso is burning up. You should remove some layers." +#~ msgstr "Osećaš vatru po grudima. Trebalo bi da skineš nešto od odeće." + +#~ msgid "Your hands are shivering." +#~ msgstr "Tresu ti se šake." + +#~ msgid "Your feet feel numb." +#~ msgstr "Gubiš osećaj u stopalima." + +#~ msgid "Fully rested." +#~ msgstr "Potpuno odmoran/na." + +#~ msgid "Huh? What was that?" +#~ msgstr "Molim? Šta to bi?" + +#~ msgid "Oh god, what's happening?" +#~ msgstr "Gospode Bože, šta se ovo dešava?" + +#~ msgid "Of course... it's all fractals!" +#~ msgstr "Pa da... sve je u razlomcima!" #~ msgid "" -#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " -#~ "feet of concrete." +#~ "Your head is dangerously cold. Getting undressed sounds like a good idea." #~ msgstr "" -#~ "60mm Anti-tenkovska granata sa snažnom eksplozijom. Može da probije " -#~ "betonski zid deblji od pola metra." +#~ "Osećaš strašnu hladnoću po glavi. Najbolje bi bilo da svučeš sve sa sebe." + +#~ msgid "Your hands are very exposed to the cold. Your hands are shivering." +#~ msgstr "Šake su ti duže vreme izložene hladnoći. Počinju da se tresu." + +#, fuzzy +#~ msgid "her" +#~ msgstr "grabulje" + +#, fuzzy +#~ msgid "greatly " +#~ msgstr "srednjevekovna kaciga" + +#, fuzzy +#~ msgid "recharge" +#~ msgstr "punjenje" + +#, fuzzy +#~ msgid "fuel tank" +#~ msgstr "rezervoar" + +#, fuzzy +#~ msgid "in" +#~ msgstr "džin" + +#, fuzzy +#~ msgid "on" +#~ msgstr "Ništa" + +#, fuzzy +#~ msgid "floataion vest" +#~ msgstr "kožni opasač" + +#~ msgid "belt rig" +#~ msgstr "vojni opasač" + +#~ msgid "house coat" +#~ msgstr "bademantil" #~ msgid "" -#~ "A 40mm grenade with a small explosion and a high number of damaging " -#~ "fragments." +#~ "A basic helmet, designed for use with the DOubleTech Power Armor, Mk. I. " +#~ "Offers excellent protection from both attacks and environmental hazards." #~ msgstr "" -#~ "40mm granata sa vrlo malom eksplozijom i velikim brojem eksplozivnih " -#~ "delova." +#~ "Osnovna varijanta kacige koja ide uz DoubleTech-ov Mk. I oklop sa " +#~ "jedinicom za napajanje. Odlična zaštita od napada i štetnih faktora u " +#~ "vazduhu i okolini." -#~ msgid "A 40mm grenade with a concussive explosion." -#~ msgstr "40mm granata sa eksplozivnim punjenjem" +#, fuzzy +#~ msgid "RM99 Revolver" +#~ msgstr "Revolver-Sačmarica" + +#, fuzzy +#~ msgid "12 Gauge Pistol" +#~ msgstr "V29 laserski pištolj" + +#~ msgid "Screwdriver" +#~ msgstr "Šrafciger" + +#~ msgid "Take frequently to improve your immune system." +#~ msgstr "Uzima se često kao dodatak ishrani jer koristi imunom sistemu." + +#~ msgid "Vaccine shot" +#~ msgstr "Vakcina" + +#~ msgid "Provides long lasting protection against sickness." +#~ msgstr "Ima dugotrajno podsticajno dejstvo na imunitet od raznih bolesti." + +#~ msgid "Low-grade painkiller. Best taken in pairs." +#~ msgstr "Sredstvo protiv lakih bolova, konzumira se u parovima." + +#~ msgid "No-doz pills. Useful for staying up all night." +#~ msgstr "Pilule koje se uzimaju bez recepta i služe za održavanje budnosti." + +#~ msgid "Prescription sleep aids. Will make you very tired." +#~ msgstr "Pilule za spavanje na recept. Izazivaju jak osećaj umora." #~ msgid "" -#~ "Designed during World War II by the Soviet Union, the popularity of the " -#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " -#~ "rifle round. However, due to its lack of yaw, this round deals less " -#~ "damage than most." +#~ "Iodine tablets are used for recovering from irradiation. They are not " +#~ "spectacularly effective, but are better than nothing." #~ msgstr "" -#~ "Napravljena tokom Drugog svetskog rata u sovjetskoj Rusiji, popularnost " -#~ "automatske puške AK-47 i SKS-a doprinele su masovnom korišćenju kalibra " -#~ "7.62x39mm puščanog metka. Budući da se tane uopšte ne zarotira po izlasku " -#~ "iz cevi, to čini da nanosi manju štetu od municije sličnog kalibra." +#~ "Tablete joda se koriste nakon izlaganja zračenju. Oporavak nije preterano " +#~ "brz ni efikasan, ali bolje išta nego ništa." -#~ msgid "" -#~ "This small caliber pistol round offers quite good armor penetration at " -#~ "the cost of slightly less damage. It is rarely used outside of the " -#~ "Chinese army." +#~ msgid "Daytime flu medication. Will halt all flu symptoms for a while." #~ msgstr "" -#~ "Municija manjeg kalibra, sa dobrim karakteristikama pri probijanju oklopa " -#~ "mete, ali umanjenim potencijalom za nanošenje štete. Retko se javlja van " -#~ "sfere uticaja kineske vojske." +#~ "Lek protiv simptoma gripa za dnevnu upotrebu. Efekat traje umereno dugo." #~ msgid "" -#~ "9 millimeter parabellum is generally regarded as the most popular handgun " -#~ "cartridge, used by the majority of US police forces. It is also a very " -#~ "popular round in sub-machine guns." +#~ "Nighttime flu medication. Will halt all flu symptoms for a while, plus " +#~ "make you sleepy." #~ msgstr "" -#~ "9-milimetarski metak je jedan od najpopularnijih u upotrebi pri šaržerima " -#~ "za pištolje, standardan za policiju u SAD. Veoma je često upotrebljavan " -#~ "kao municija kod manjeg automatskog oružja (SMG)." +#~ "Lek protiv simptoma gripa za noćnu upotrebu. Efekat traje umereno dugo,uz " +#~ "opuštajuće, uspavljujuće dejstvo." #~ msgid "" -#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " -#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " -#~ "round. It is nearly silent, but is so weak as to be nearly useless." +#~ "Vital medicine for those with asthma. Those without asthma can use it for " +#~ "a minor stimulant boost." #~ msgstr "" -#~ "Kuglični projektil, kalibra .22 za oružje koje se ne oslanja na barutno " -#~ "punjenje metka je vrlo mali metak koji leti brzinama blizu zvučne. Gotovo " -#~ "nečujan ali toliko slab da je praktično neupotrebljiv." +#~ "Neophodna spravica onima sa astmom. Potpuno zdravima može poslužiti kao " +#~ "blag stimulans." -#~ msgid "A tough sinew cut from a corpse, useable as thread." +#~ msgid "A weak opiate, prescribed for light to moderate pain." #~ msgstr "" -#~ "Žilice sa lešine nekog čoveka ili životinje, služe kao zamena za konac." +#~ "Opijat slabijeg dejstva, za analgetsku primenu protiv bolova slabog i " +#~ "umerenog intenziteta." + +#~ msgid "A strong opiate, prescribed for moderate to intense pain." +#~ msgstr "Opijat jakog dejstva, za umerene i snažne bolove." #~ msgid "" -#~ "A leather sling, it is easy to use and accurate, but pebbles do little " -#~ "damage. Pebbles are used as ammunition." +#~ "Anti-anxiety medication. It will reduce your stimulant level steadily, " +#~ "and will temporarily cancel the effects of anxiety, like the Hoarder " +#~ "trait." #~ msgstr "" -#~ "Praćka od kožnog materijala, lako se zamahuje njom i precizna je. " -#~ "Municija su uglavnom kamenčići koji prave malu štetu." +#~ "Sredstvo za smirenje. Redukuje nivo stimulativnih sredstava u organizmu " +#~ "vrlo postepeno i na taj način negira nuspojave nervoze, na primer kod " +#~ "osoba sa Poremećajem Gomilanja." #~ msgid "" -#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " -#~ "damage. It could be used to practice your rifle skill up to level 1." +#~ "A strong stimulant prescribed for ADD. It will greatly increase your " +#~ "stimulant level, but is quite addictive." #~ msgstr "" -#~ "Deca je obožavaju. Relativno precizna, vazdušna puška koristi metkiće " -#~ "koji skoro da i ne nanose štetu meti. Korisna da bi se veština rukovanja " -#~ "puškama uvežbala do osnovnog nivoa (1)." +#~ "Sredstvo na recept koje se prepisuje kod akutnih poremećaja pažnje (ADD)." +#~ "Vrlo snažan kao stimulant, ali brzo izaziva zavisnost." #~ msgid "" -#~ "A tool used to drive nails into wood or other material. It could also be " -#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." +#~ "Anti-psychotic medication. Used to control the symptoms of schizophrenia " +#~ "and similar ailments. Also popular as a way to come down from a bad trip." #~ msgstr "" -#~ "Uređaj kojim se zabijaju ekseri u drvo i druge materijale. U nuždi može " -#~ "poslužiti kao oružje, odnosno za vežbu dok se ne dostigne trening nivoa 1." -#~ "Izgleda kao pištolj." +#~ "Vrlo snažno sredstvo za smirenje, na recept. Koristi se za otklanjanje " +#~ "simptoma šizofrenije i sl. Zloupotrebljava se kao sredstvo za \"spuštanje." +#~ "\"" + +#~ msgid "A strong anti-depressant. Useful if your morale level is very low." +#~ msgstr "Snažan antidepresiv. Primenljiv kada je moral u padu." #~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." +#~ "These will boost your dexterity, intelligence, and perception for a short " +#~ "time. They are quite addictive." #~ msgstr "" -#~ "Mali indikator doze radijacije spakovan u materijal otporan na zračenje." -#~ "(A)ktiviraj da otpakuješ." - -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "Pomalo nezgodno za nošenje, ali ima prostora za teret." +#~ "Uvećavaju spretnost, inteligenciju i percepciju na kratak vremenski rok, " +#~ "dok značajno uvećavaju šansu da se navučeš." -#~ msgid "A thin pair of leather gloves. Good for doing manual labor." -#~ msgstr "Par tankih platnenih rukavica. Korisne za manuelne poslove." +#~ msgid "marijuana" +#~ msgstr "marihuana" -#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." -#~ msgstr "" -#~ "Kaput od debljeg pamuka. Iako je težak za kretnju, topao je i ima džepove." +#~ msgid "" +#~ "Really useful only for relaxing. Will reduce your attributes and reflexes." +#~ msgstr "Koristi uglavnom kod opuštanja. Refleksi i osobine biće umanjeni." -#~ msgid "A padded coat with deep pockets. Very warm." -#~ msgstr "Kaput sa postavom i dubokim džepovima. Vrlo topao." +#~ msgid "A strong, illegal stimulant. Highly addictive." +#~ msgstr "Nelegalno sredstvo, stimulant koji brzo izaziva zavisnost." -#~ msgid "A thin cotton jacket. Good for brisk weather." -#~ msgstr "Tanka pamučna jakna. Super za prohladno vreme." +#~ msgid "" +#~ "A very strong illegal stimulant. Extremely addictive and bad for you, but " +#~ "also extremely effective in boosting your alertness." +#~ msgstr "" +#~ "Ilegalan i izuzetno snažan narkotik. Vrlo brzo izaziva zavisnost i jako " +#~ "je loš po zdravlje, a stimulativno dejstvo drži dugo na oprezu." -#~ msgid "plate mail" -#~ msgstr "srednjevekovni metalni oklop" +#~ msgid "" +#~ "A very strong illegal opiate. Unless you have an opiate tolerance, avoid " +#~ "heroin, as it will be too strong for you." +#~ msgstr "" +#~ "Ilegalan i snažan narkotik. Ukoliko ne poseduješ izuzetnu otpornost na " +#~ "opijate trebalo bi da izbegavaš heroin, zbog jačine dejstva." #~ msgid "" -#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " -#~ "will provide excellent protection against ambient radiation." +#~ "A gentleman's vice. Cigars are what separates a gentleman from a savage." #~ msgstr "" -#~ "Zaštitno odelo. Iako je teško za nošenje i izgleda vrlo robusno, nošenje " -#~ "ovakvog odela pruža odličnu zaštitu od radijacije u okolini." +#~ "Porok pravih džentlmena. Cigare čine tu razliku između čoveka i divljaka." -#~ msgid "long underwear" -#~ msgstr "dugačke gaće" +#~ msgid "Sleeping pills made by refining mutated poppy seeds." +#~ msgstr "Domaće pilule za spavanje od semenja mutirane biljke maka." + +#~ msgid "Painkillers made by refining mutated poppy seeds.." +#~ msgstr "Sredstvo protiv bolova spravljeno od semenja mutirane biljke maka." + +#~ msgid "Refined cocaine, incredibly addictive." +#~ msgstr "Vrsta prerađenog kokaina koja izaziva neverovatnu zavisnost." #~ msgid "" -#~ "There is only the space where an object should be, but isn't. No item " -#~ "template of this type exists." +#~ "A funnel used to collect rainwater. (a)ctivate it and place it outside " +#~ "then collect water from it when it rains." #~ msgstr "" -#~ "Samo prazan prostor; predmet je nepostojeći; ima nepostojeće " -#~ "karakteristike." +#~ "Poveći levak za skupljanje kišnice. (A)ktivirati napolju kako bi " +#~ "prikupljao vodu dok pada kiša." -#~ msgid "Error: Item Missing." -#~ msgstr "Greška: Nedostaje Predmet." +#, fuzzy +#~ msgid "Your muscles are a little stronger. Strength + 1" +#~ msgstr "Osećaš se malo čudno." -#~ msgid "MODS/BIONICS" -#~ msgstr "MODIFIKACIJE/BIONIKA" +#, fuzzy +#~ msgid "You are a little smarter. Intelligence + 1" +#~ msgstr "Osećaš se malo čudno." -#~ msgid "MEDICINE/DRUGS" -#~ msgstr "LEKOVI/OPIJATI" +#~ msgid "MOTD" +#~ msgstr "Misao Dana" -#~ msgid "Pus Filled Wound" -#~ msgstr "Gnojna Rana" +#~ msgid "Load" +#~ msgstr "Učitaj" -#~ msgid "Painful Infected Wound" -#~ msgstr "Inficiran i Bolan Ugriz" +#~ msgid "Help" +#~ msgstr "Pomoć" -#~ msgid "Infected Wound" -#~ msgstr "Inficirana Rana" +#~ msgid "Quit" +#~ msgstr "Izlaz" -#~ msgid "Painful Bite Wound" -#~ msgstr "Bolan Ujed" +#~ msgid "You double over, spewing live spores from your mouth!" +#~ msgstr "Savio/la si se, iskašljavajući pritom žive spore!" -#~ msgid "Bite Wound" -#~ msgstr "Ugriz" +#~ msgid "Symptoms alleviated by medication (Dayquil or Nyquil)." +#~ msgstr "Simptomi se umiruju dejstvom Dejkila ili Najkila (lek)." -#~ msgid "Bugs Under Skin" -#~ msgstr "Bube pod kožom" +#~ msgid "POW: " +#~ msgstr "NAP: " -#~ msgid "Bleeding" -#~ msgstr "Krvarenje" +#~ msgid "Occasional vomiting" +#~ msgstr "Povremeno povraćanje" -#~ msgid "Spores" -#~ msgstr "Spore" +#~ msgid "Occasional pain and/or damage." +#~ msgstr "Povremeni bol i/ili štetno dejstvo." -#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." -#~ msgstr "Padaš u groznicu, muka ti je, a rana poprima zelenu nijansu." +#~ msgid "Loss of health - Torso" +#~ msgstr "Pogoršano Stanje Grudnog Koša" -#~ msgid "Your bite wound feels swollen and painful." -#~ msgstr "Ujed koji osećaš počinje da natiče i boli te." +#~ msgid "Loss of health - Entire Body" +#~ msgstr "Pogoršano Stanje Čitavog Tela" -#~ msgid "Your bite wound really hurts." -#~ msgstr "Rana od ujeda stvarno počinje da boli." +#~ msgid "Fungus stalks burst through %s's hands!" +#~ msgstr "%s, gljivični stalci ti izbijaju po šakama!" -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s počinje da se češe svuda po telu!" +#~ msgid " - 3 IF not resistant, -1 otherwise\n" +#~ msgstr " - 3 AKO nema otpornost, -1 inače\n" -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s počinje da se češe svuda po telu!" +#, fuzzy +#~ msgid "" +#~ "Small metal objects covered with many sharp points. If an unsuspecting " +#~ "victim steps on it, they'll get a spine through the foot." +#~ msgstr "" +#~ "Daščice spojene manjim ekserima, sa nekolicinom većih eksera koji vire " +#~ "iznad.Ukoliko se nagazi, probiće đon i (inače) povrediti stopalo." -#~ msgid "You start scratching yourself all over!" -#~ msgstr "Počinješ da se češeš po celom telu!" +#, fuzzy +#~ msgid "" +#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " +#~ "you from the floor, making it easier to sleep" +#~ msgstr "" +#~ "Dušek od penastog materijala koji se urola i tako spakuje. Koristan kada " +#~ "je potrebno izbeći spavanje na hladnoj i čvrstoj podlozi." -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "Nekakve bube počinju da puze pod tvojom kožom!" +#~ msgid "Normal" +#~ msgstr "Uobičajeno" diff --git a/lang/po/vi.po b/lang/po/vi.po index ee3fa83d8985a..321458692c120 100644 --- a/lang/po/vi.po +++ b/lang/po/vi.po @@ -5,27 +5,27 @@ # msgid "" msgstr "" -"Project-Id-Version: cdda vietnamese\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-06 20:42+0000\n" -"Last-Translator: Huỳnh Yên Lộc \n" -"Language-Team: Vietnamese Translator(s) \n" -"Language: Vietnamese\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 05:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:32+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:34+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp msgid " ('_' (underscore)" -msgstr "" +msgstr " ('_' (gạch dưới)" #: action.cpp msgid " (underscore)" -msgstr "" +msgstr " (gạch dưới)" #: action.cpp help.cpp msgid " or " @@ -41,7 +41,7 @@ msgstr "' hoặc " #: action.cpp msgid "'_' (underscore)" -msgstr "" +msgstr "'_' (gạch dưới)" #: action.cpp msgid "Advanced Inventory management" @@ -73,7 +73,7 @@ msgstr "Tầm nhìn trung tâm" #: action.cpp msgid "Chat with NPC" -msgstr "" +msgstr "Nói chuyện với NPC" #: action.cpp msgid "Close Door" @@ -369,7 +369,7 @@ msgstr "Cầm" #: action.cpp msgid "or '_' (underscore)" -msgstr "" +msgstr "hoặc '_' (gạch dưới)" #: addiction.cpp msgid "Alcohol Withdrawal" @@ -1651,7 +1651,7 @@ msgstr "[]" #: bionics.cpp #, c-format msgid "%s - %d PU / %d trns" -msgstr "" +msgstr "%s - %d PU / %d lượt" #: bionics.cpp #, c-format @@ -1665,7 +1665,7 @@ msgstr "%s đã tắt." #: bionics.cpp msgid "Activate your bio lockpick where?" -msgstr "" +msgstr "Kích hoạt thiết bị mở khóa ở đâu?" #: bionics.cpp msgid "Activating. Press '!' to examine your implants." @@ -1701,7 +1701,7 @@ msgstr "CẤY GHÉP -" #: bionics.cpp msgid "Create an EMP where?" -msgstr "" +msgstr "Tạo EMP ở đâu?" #: bionics.cpp msgid "Drink directly from the condensor?" @@ -1824,7 +1824,7 @@ msgstr "Một số cấy ghép bạn đang có bị hủy hoại!" #: bionics.cpp msgid "Start a fire where?" -msgstr "" +msgstr "Đốt lửa ở đâu?" #: bionics.cpp #, c-format @@ -2443,6 +2443,9 @@ msgid "" " Robert Shane\n" " \n" msgstr "" +"Giám đốc EPA,\n" +" Robert Shane\n" +" \n" #: computer.cpp msgid "Disarm missile." @@ -2980,7 +2983,7 @@ msgstr "Dọn dẹp cửa sổ vỡ" #: construction.cpp msgid "Contruct where?" -msgstr "" +msgstr "Xây dựng ở đâu?" #: construction.cpp msgid "Deconstruct Furniture" @@ -3233,7 +3236,7 @@ msgstr "Bạn không thể làm vậy!" #: crafting.cpp #, c-format msgid "You cannot disassemble the %s into its components, too few items." -msgstr "" +msgstr "Bạn không thể tháo rời %s thành các thành phần riêng, quá ít chi tiết." #: crafting.cpp #, c-format @@ -4365,7 +4368,7 @@ msgstr "Có cái gì đô rất không hay." #: disease.cpp msgid "Sounds will not be reported. You cannot talk with NPCs." -msgstr "" +msgstr "Âm thanh sẽ không được truyền lại. Bạn không nói chuyện được với NPC." #: disease.cpp #, c-format @@ -4827,7 +4830,7 @@ msgstr "Bạn cố ngủ, nhưng không được..." #: disease.cpp msgid "You turn off your alarm-clock." -msgstr "" +msgstr "Bạn tắt đồng hồ báo thức." #: disease.cpp #, c-format @@ -5906,7 +5909,7 @@ msgstr "Tai họa" #: faction.cpp msgid "Bandits" -msgstr "" +msgstr "Thổ phỉ" #: faction.cpp msgid "Beloved" @@ -5922,11 +5925,11 @@ msgstr "Sáng chói" #: faction.cpp msgid "Brotherhood" -msgstr "" +msgstr "Hội huynh đệ" #: faction.cpp msgid "Church" -msgstr "" +msgstr "Nhà thờ" #: faction.cpp msgid "Clan" @@ -5954,11 +5957,11 @@ msgstr "" #: faction.cpp msgid "Creepers" -msgstr "" +msgstr "Giây leo" #: faction.cpp msgid "Crooks" -msgstr "" +msgstr "Bọn lừa đảo" #: faction.cpp msgid "Crucible" @@ -5970,7 +5973,7 @@ msgstr "Tinh thể" #: faction.cpp msgid "Cutthroats" -msgstr "" +msgstr "Bọn giết người" #: faction.cpp msgid "Deadly" @@ -6034,11 +6037,11 @@ msgstr "" #: faction.cpp msgid "Faction" -msgstr "" +msgstr "Phe" #: faction.cpp msgid "Family" -msgstr "" +msgstr "Gia đình" #: faction.cpp msgid "Famous" @@ -6066,7 +6069,7 @@ msgstr "Cơn thịnh nộ" #: faction.cpp msgid "Gang" -msgstr "" +msgstr "Băng nhóm" #: faction.cpp msgid "Gnostics" @@ -6086,7 +6089,7 @@ msgstr "Lính du kích" #: faction.cpp msgid "Guild" -msgstr "" +msgstr "Hội" #: faction.cpp msgid "Hero" @@ -6158,7 +6161,7 @@ msgstr "" #: faction.cpp msgid "Mafia" -msgstr "" +msgstr "Mafia" #: faction.cpp msgid "Men" @@ -6174,7 +6177,7 @@ msgstr "Hùng mạnh" #: faction.cpp msgid "Mob" -msgstr "" +msgstr "Du côn" #: faction.cpp msgid "Monks" @@ -6182,7 +6185,7 @@ msgstr "" #: faction.cpp msgid "Muggers" -msgstr "" +msgstr "Cướp giật" #: faction.cpp msgid "Nation" @@ -6262,11 +6265,11 @@ msgstr "" #: faction.cpp msgid "Punks" -msgstr "" +msgstr "Bọn rác rưởi" #: faction.cpp msgid "Racket" -msgstr "" +msgstr "Bọn tội phạm" #: faction.cpp msgid "Radiant" @@ -6306,7 +6309,7 @@ msgstr "" #: faction.cpp msgid "Shade" -msgstr "" +msgstr "Bóng đen" #: faction.cpp msgid "Shadows" @@ -6388,7 +6391,7 @@ msgstr "" #: faction.cpp msgid "Thugs" -msgstr "" +msgstr "Bọn côn đồ" #: faction.cpp msgid "Tigers" @@ -6416,7 +6419,7 @@ msgstr "" #: faction.cpp msgid "Vandals" -msgstr "" +msgstr "Bọn phá hoại" #: faction.cpp msgid "Venerable" @@ -7617,9 +7620,8 @@ msgid "Maybe you should find something new to read..." msgstr "" #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "Mặt bạn bị lạnh cóng." +msgstr "" #: game.cpp msgid "Monster spotted!" @@ -8690,9 +8692,8 @@ msgid "You fall on the ground for %d damage." msgstr "" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "Bạn cảm thấy mình cần một ít kích thích." +msgstr "" #: game.cpp #, c-format @@ -11462,6 +11463,10 @@ msgstr "" msgid "corpse" msgstr "" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "" @@ -11985,6 +11990,10 @@ msgstr "" msgid "Giant wasps appear!" msgstr "" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "" @@ -12865,6 +12874,12 @@ msgstr "" msgid "You can dig a pit via the construction menu--hit *" msgstr "" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "" @@ -12943,9 +12958,8 @@ msgid "You can't see to sew!" msgstr "" #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "Bạn không thể mở khóa %s." +msgstr "" #: iuse.cpp msgid "You can't turn off a glowstick." @@ -12975,9 +12989,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "Bạn không thể khởi động %s" +msgstr "" #: iuse.cpp msgid "You churn up the earth here." @@ -13018,6 +13032,10 @@ msgstr "" msgid "You damage your %s!" msgstr "" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "" + #: iuse.cpp msgid "You destroy it!" msgstr "" @@ -13131,6 +13149,10 @@ msgstr "" msgid "You feel very sleepy..." msgstr "" +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "" @@ -13151,6 +13173,10 @@ msgstr "" msgid "You honk the bicycle horn." msgstr "" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "" + #: iuse.cpp msgid "You inject the vaccine." msgstr "" @@ -13298,6 +13324,10 @@ msgid "" "disassemble ammunition." msgstr "" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "" @@ -14768,6 +14798,10 @@ msgstr "" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -14819,6 +14853,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "" @@ -14836,6 +14876,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "" @@ -14844,6 +14888,15 @@ msgstr "" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "" @@ -14852,6 +14905,11 @@ msgstr "" msgid "You dream of grazing in an open field." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "" @@ -14868,6 +14926,10 @@ msgstr "" msgid "You dream of swimming in the open ocean" msgstr "" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -14893,10 +14955,20 @@ msgstr "" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "" @@ -14910,6 +14982,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "" @@ -14962,6 +15039,16 @@ msgstr "" msgid "You have a strange dream of spinning webs" msgstr "" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "" @@ -14974,6 +15061,11 @@ msgstr "" msgid "You scream in fear while you dream of being chased by a cat" msgstr "" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -14994,10 +15086,18 @@ msgstr "" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "" @@ -15046,6 +15146,10 @@ msgstr "" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "" @@ -15055,10 +15159,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "" @@ -16036,6 +16148,14 @@ msgstr "" msgid "12 gauge pistol" msgstr "" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "" @@ -17077,6 +17197,12 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -17438,6 +17564,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -17476,6 +17609,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "" @@ -17756,6 +17895,12 @@ msgstr "" msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -18151,6 +18296,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "" @@ -18163,6 +18322,12 @@ msgstr "" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -18675,6 +18840,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -18832,6 +19011,14 @@ msgid "" "scrap." msgstr "" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -18855,6 +19042,12 @@ msgstr "" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -19076,6 +19269,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "" @@ -19219,7 +19418,7 @@ msgstr "" #: lang/json/json_items.py msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" @@ -20028,6 +20227,10 @@ msgstr "" msgid "An extremely heavy set of armor plated gloves." msgstr "" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21278,6 +21481,12 @@ msgstr "" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -21309,6 +21518,13 @@ msgstr "" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "" @@ -21660,6 +21876,18 @@ msgstr "" msgid "PDA - Flashlight" msgstr "" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "" @@ -21848,6 +22076,12 @@ msgstr "" msgid "RV kitchen unit" msgstr "" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -22745,6 +22979,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "" @@ -22841,6 +23081,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "" @@ -23840,6 +24086,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -24434,6 +24686,20 @@ msgid "" "control wave that temporarily converts robots to your side." msgstr "" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -24677,6 +24943,12 @@ msgstr "" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -24796,6 +25068,10 @@ msgstr "" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "" @@ -25500,6 +25776,10 @@ msgstr "" msgid "children's book" msgstr "" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "" @@ -25656,6 +25936,10 @@ msgstr "" msgid "compound bow" msgstr "" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "" @@ -25744,6 +26028,10 @@ msgstr "" msgid "cotton hat" msgstr "" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "" @@ -25788,6 +26076,10 @@ msgstr "" msgid "crude sword" msgstr "" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "" @@ -26020,6 +26312,10 @@ msgstr "" msgid "feather" msgstr "" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "" @@ -26109,14 +26405,12 @@ msgid "flannel jacket" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "Chói" +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "Chói" +msgstr "" #: lang/json/json_items.py msgid "flashbang" @@ -26294,6 +26588,10 @@ msgstr "" msgid "fur kitty collar" msgstr "" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "" @@ -26394,6 +26692,10 @@ msgstr "" msgid "glowstick" msgstr "" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "" @@ -26458,6 +26760,10 @@ msgstr "" msgid "hand press & die set" msgstr "" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "" @@ -26598,6 +26904,10 @@ msgstr "" msgid "holster" msgstr "" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "" @@ -26854,6 +27164,10 @@ msgstr "" msgid "leather jacket" msgstr "" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "" @@ -26950,6 +27264,10 @@ msgstr "" msgid "log" msgstr "" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "" @@ -27010,6 +27328,10 @@ msgstr "" msgid "makeshift halberd" msgstr "" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "" @@ -27082,6 +27404,10 @@ msgstr "" msgid "medical gloves" msgstr "" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "" @@ -27258,6 +27584,10 @@ msgstr "" msgid "nail gun" msgstr "" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "" + #: lang/json/json_items.py msgid "nail rifle" msgstr "" @@ -27782,6 +28112,10 @@ msgstr "" msgid "rebar" msgstr "" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "" @@ -28078,6 +28412,10 @@ msgstr "" msgid "sharpened metal arrow" msgstr "" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "" @@ -28394,6 +28732,10 @@ msgstr "" msgid "steel plating" msgstr "" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "" + #: lang/json/json_items.py msgid "steel spear" msgstr "" @@ -28627,9 +28969,8 @@ msgid "tea leaves" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "vũ khí" +msgstr "" #: lang/json/json_items.py msgid "teargas canister" @@ -28643,6 +28984,10 @@ msgstr "" msgid "television" msgstr "" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "" @@ -29183,6 +29528,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -29410,6 +29764,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -29418,6 +29780,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -29530,9 +29901,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "Tăng Tốc độ đánh" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -29601,9 +29971,8 @@ msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "Trí thông minh - %d; " +msgstr "" #: lang/json/json_martialarts.py msgid "Dragon Kung Fu" @@ -29696,8 +30065,9 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py @@ -29843,9 +30213,8 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "Hổ" +msgstr "" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" @@ -33250,6 +33619,14 @@ msgstr "" msgid "Regeneration" msgstr "" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "" @@ -33438,6 +33815,10 @@ msgstr "" msgid "Thick Scales" msgstr "" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -33803,6 +34184,12 @@ msgid "" "balance, making your ability to dodge higher." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -34256,6 +34643,13 @@ msgstr "" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -34371,6 +34765,12 @@ msgstr "" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -45177,6 +45577,15 @@ msgid "" "what you've been missing.\"" msgstr "" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -45197,6 +45606,10 @@ msgstr "" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -45207,11 +45620,36 @@ msgstr "" msgid " grabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -45222,6 +45660,20 @@ msgstr "" msgid " karate chops %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -45237,21 +45689,51 @@ msgstr "" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -45267,6 +45749,16 @@ msgstr "" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -45282,14 +45774,59 @@ msgstr "" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -45298,10 +45835,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -45310,6 +45887,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -45340,6 +45922,26 @@ msgstr "" msgid "You grab %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -45355,11 +45957,26 @@ msgstr "" msgid "You karate chop %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -45370,21 +45987,59 @@ msgstr "" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -45400,11 +46055,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -45415,6 +46084,11 @@ msgstr "" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "" @@ -47393,6 +48067,16 @@ msgstr "" msgid "%s stings %s with his tail!" msgstr "" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -47679,6 +48363,11 @@ msgstr "" msgid "You whack %s" msgstr "" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -49311,6 +50000,11 @@ msgstr "" msgid "A %s %s into the %s!" msgstr "" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -49709,9 +50403,9 @@ msgid "STATS" msgstr "" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "Kỹ năng sử dụng: %s" +msgstr "" #: newcharacter.cpp #, c-format @@ -53694,7 +54388,7 @@ msgid "Alcohol Craving" msgstr "" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" +msgid "Almost instantly you feel a familiar pain in your stomach." msgstr "" #: player.cpp @@ -53748,7 +54442,7 @@ msgstr "" msgid "Broken %s began to mend." msgstr "" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "" @@ -54226,10 +54920,6 @@ msgstr "" msgid "No space in inventory for your %s. Drop it?" msgstr "" -#: player.cpp -msgid "Normal" -msgstr "" - #: player.cpp msgid "Nothing to see here!" msgstr "" @@ -54677,6 +55367,11 @@ msgstr "" msgid "Weapon: %s" msgstr "" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "" @@ -54878,7 +55573,7 @@ msgid "You feel fatigued all of a sudden." msgstr "" #: player.cpp -msgid "You feel horrible for eating a person.." +msgid "You feel horrible for eating a person." msgstr "" #: player.cpp @@ -55284,6 +55979,11 @@ msgstr "" msgid "Firing %s (%d)" msgstr "" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "" @@ -56574,35 +57274,35 @@ msgstr "" msgid "______NO NAME ENTERED!!!!_____" msgstr "" -#~ msgid "Bugs Under Skin" -#~ msgstr "Bọ dưới da" +#~ msgid "Too many itens" +#~ msgstr "Quá nhiều đồ vật" -#~ msgid "Spores" -#~ msgstr "Bào tử" +#~ msgid "Start a fire" +#~ msgstr "Đốt một đám lửa" -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s bắt đầu gãi khắp mình mẩy!" +#~ msgid "Activate your bio lockpick" +#~ msgstr "Kích hoạt bộ cạy khóa sinh học" -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s bắt đầu gãi khắp mình mẩy!" +#~ msgid "Contruct" +#~ msgstr "Xây dựng" -#~ msgid "You start scratching yourself all over!" -#~ msgstr "Bạn bắt đầu gãi khắp mình mẩy!" +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "Có bọ đang bò dưới da bạn!" #~ msgid "You wake up to the ringing of an alarm-clock." #~ msgstr "Tiếng chuông báo thức kêu bạn dậy." -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "Có bọ đang bò dưới da bạn!" +#~ msgid "You start scratching yourself all over!" +#~ msgstr "Bạn bắt đầu gãi khắp mình mẩy!" -#~ msgid "Contruct" -#~ msgstr "Xây dựng" +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s bắt đầu gãi khắp mình mẩy!" -#~ msgid "Activate your bio lockpick" -#~ msgstr "Kích hoạt bộ cạy khóa sinh học" +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s bắt đầu gãi khắp mình mẩy!" -#~ msgid "Start a fire" -#~ msgstr "Đốt một đám lửa" +#~ msgid "Spores" +#~ msgstr "Bào tử" -#~ msgid "Too many itens" -#~ msgstr "Quá nhiều đồ vật" +#~ msgid "Bugs Under Skin" +#~ msgstr "Bọ dưới da" diff --git a/lang/po/zh_CN.po b/lang/po/zh_CN.po index e99ce395677b1..e20204ee641fe 100644 --- a/lang/po/zh_CN.po +++ b/lang/po/zh_CN.po @@ -1,22 +1,22 @@ -# Chinese (Simplified) translation for cataclysm +# Chinese (Simplified) translation for cdda # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the cataclysm package. +# This file is distributed under the same license as the cdda package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: cataclysm\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-06 12:34+0000\n" -"Last-Translator: qude \n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-09 13:15+0000\n" +"Last-Translator: emusilent \n" "Language-Team: Chinese (Simplified) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:33+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:34+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -2299,7 +2299,7 @@ msgid "" msgstr "" "\n" "错误:网络断开 \n" -"无法到达网络路由或网关.请和系统管理员联系。\n" +"无法连接至网络路由或网关。请和系统管理员联系。\n" " \n" #: computer.cpp @@ -2348,11 +2348,11 @@ msgid "" " \n" " \n" msgstr "" -" 警告, 无线电塔无法回应. \n" +" 警告,无线电塔无回应。\n" " \n" -" 后备电源不够无法满足广播的需要. \n" -" 在紧急状况下,当发电机组部署完后 \n" -" 请联系当地的国家保卫部门以取得优先权. \n" +" 后备电源无法满足广播的需要.。\n" +" 在紧急状况下,当发电机组完成部署后 \n" +" 请优先与当地国家保卫部门取得联系。 \n" " \n" " \n" @@ -2528,7 +2528,7 @@ msgstr "阿弥壳计划" #: computer.cpp msgid "Access code required!" -msgstr "需要访问代码!" +msgstr "需要访问密码!" #: computer.cpp game.cpp iuse.cpp map.cpp msgid "An alarm sounds!" @@ -2961,7 +2961,7 @@ msgstr "终止子空间样本." #: computer.cpp msgid "The console electrocutes you!" -msgstr "控制台电击了你" +msgstr "终端电击了你!" #: computer.cpp msgid "" @@ -7555,7 +7555,7 @@ msgstr "退出" #. ~ Fast-scroll indicator #: game.cpp msgid "F" -msgstr "" +msgstr "华氏度" #: game.cpp msgid "FACTIONS:" @@ -7726,9 +7726,8 @@ msgid "Maybe you should find something new to read..." msgstr "也许你应该找些新书来读……" #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "你的脸部非常寒冷。" +msgstr "危险的怪物在靠近!" #: game.cpp msgid "Monster spotted!" @@ -8802,9 +8801,8 @@ msgid "You fall on the ground for %d damage." msgstr "你摔倒在地上,造成%d伤害。" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "你已经连续两天没睡觉了!" +msgstr "你觉得你已经好几天没有睡过。" #: game.cpp #, c-format @@ -9960,8 +9958,7 @@ msgstr "" "行\n" "戒毒。\n" "\n" -" 当你药瘾发作的时候,你会痛苦不堪,虽然再次用药会立刻解除这种痛苦,但下" -"一\n" +"当你药瘾发作的时候,你会痛苦不堪,虽然再次用药会立刻解除这种痛苦,但下一\n" "次的药瘾会发作得更快......" #: help.cpp @@ -9995,11 +9992,12 @@ msgstr "" "本作中很多重要的物品都不是太容易找到,即使想通过交易来购买可能这个价格\n" "也不是轻易能够承担的,索性,只要有合适的工具和材料,你的角色可以自行制作。\n" "\n" -"有些物品的制作需要用到不止一件工具,拥有这些工具可以进行多次制作;而所\n" +" 有些物品的制作需要用到不止一件工具,拥有这些工具可以进行多次制作;而所\n" "有的物品都需要一种或更多的材料来进行制作,这些材料在制作之后都会被消耗掉。\n" "\n" -"%s一共有五大类,武器、食物、电器、护甲及其它,虽然有些物品的制作不需要\n" -"专业的技能,但大多数物品的制作都需要角色具有相对应的技能:\n" +"%s一共有五大类,武器、食物、电器、护甲及其\n" +"它,虽然有些物品的制作不需要专业的技能,但大多数物品的制作都需要角色具有相\n" +"对应的技能:\n" "\n" "->机械技能对于制作武器、陷阱和一些工具来说很重要;\n" "->烹调技能只需要较低的等级就能陆续做出可口的食物,而随着等级的提高你会对化\n" @@ -10039,7 +10037,7 @@ msgstr "" "从注意力中提取一定的经验值使得技能逐渐熟练和提升。如果注意力空了的话,除了\n" "读书你无法升级技能。\n" "\n" -" 如果你的情绪值低于0,注意力将不会自动回复;情绪值在0~100以内的时候,其\n" +"如果你的情绪值低于0,注意力将不会自动回复;情绪值在0~100以内的时候,其\n" "数值代表了每回合增加1点注意力的几率;大于100的情绪值,每100点情绪增加1点每\n" "回合增加的经验量。你的注意力有着一个自然的回复点,当你注意力过高或过低时,\n" "它都会趋向于恢复成回复点状态,越高或越低则回复到原点的速度越快。因此,当它\n" @@ -10409,20 +10407,17 @@ msgstr "" "多。\n" "除非你决定专攻近战武器,否则枪械店是你必去的地方。\n" "\n" -" 行走在大灾变后的城市中,请尽可能地收集各种药物,止痛剂是最重要的,香烟" -"等\n" +"行走在大灾变后的城市中,请尽可能地收集各种药物,止痛剂是最重要的,香烟等\n" "易上瘾的物品也请注意收集。当你武装到一定程度之后,请尽快离开城市,因为虽然" "这\n" "里物资较丰富,但同样也有着数之不尽的僵尸群。\n" "\n" -" 如果可能的话,请尽量一次只面对一个敌人,你可以选择转角或者门、窗等来调" -"整\n" +"如果可能的话,请尽量一次只面对一个敌人,你可以选择转角或者门、窗等来调整\n" "战术,毕竟丧尸的行动是相对迟缓的。如果你有机会逃走的话,请不要迟疑,毕竟你" "的\n" "速度还是蛮快的,同时一些特殊的地形比如森林等,也可以用来帮助你摆脱敌人。\n" "\n" -" 枪械是最适合用来杀敌的,但是其发出的噪音同样容易引来更多的敌人,所以请" -"尽\n" +"枪械是最适合用来杀敌的,但是其发出的噪音同样容易引来更多的敌人,所以请尽\n" "量使用近战武器,偶尔耍枪,耍完就逃。\n" "\n" "按任意键继续......" @@ -10515,7 +10510,7 @@ msgstr "" "辐射会逐渐在你的体内累积,逐渐削弱你的身体。而当你离开辐射区域以后,体内积\n" "累的辐射值会缓慢得代谢掉。服用碘片有助于加快代谢的速度。 \n" "\n" -" 如果体内积累的辐射量过高的话,你的角色甚至有可能发生突变,绝大多数情况\n" +"如果体内积累的辐射量过高的话,你的角色甚至有可能发生突变,绝大多数情况\n" "下,突变都是恶性的,然而有些突变却能给你的角色带来意料之外的好处。所有的突\n" "变都会很大程度上改变你今后的游戏方式,游戏中也能找到一些消除突变的方法,好\n" "吧...但愿你能找到。" @@ -10619,16 +10614,13 @@ msgstr "" "后,\n" "药效本身一样会让你的行动迟缓并削弱部分属性。 \n" "\n" -" 需要注意的是药物的生效需要时间,如果你服用了一些羟考酮但是没有立刻生" -"效,\n" +"需要注意的是药物的生效需要时间,如果你服用了一些羟考酮但是没有立刻生效,\n" "请务必稍等片刻而不是急着再次服用,药物使用过量也是会致命的... \n" "\n" -" 即使不服药,随着时间的推移疼痛感也会逐渐消退,所以当你没有药物且全身疼" -"痛\n" +"即使不服药,随着时间的推移疼痛感也会逐渐消退,所以当你没有药物且全身疼痛\n" "的时候,最好能够找处安全的地方进行休息。 \n" "\n" -" 游戏中除了止痛药,还有各类兴奋剂。兴奋剂能够在短时间内提升角色的行动能" -"力\n" +"游戏中除了止痛药,还有各类兴奋剂。兴奋剂能够在短时间内提升角色的行动能力\n" "及各项属性。然而服用兴奋剂有两大注意事项:服用兴奋剂之后角色将很难入睡,并" "且\n" "兴奋剂很容易成瘾。游戏中的兴奋剂从可乐饮料中的咖啡因到安非他命和麻黄碱等都" @@ -10712,14 +10704,14 @@ msgstr "" "满目苍夷的世界之中是一件非常令人绝望的事情,你的心情会随着时间的推移逐渐低\n" "落。 \n" "\n" -" 当然本作中也有不同的方式可以帮助你恢复情绪:读一本有趣的书、吃上一些美\n" +"当然本作中也有不同的方式可以帮助你恢复情绪:读一本有趣的书、吃上一些美\n" "味的食物或服用一些提神的药物等,只是这些手段也只能维持一段时间,而且重复使\n" "用之后的效率会越来越低。 \n" "\n" -" 与其相对的是你的身边有很多因素会降低你的情绪,除了自然衰退以外,吃下难\n" +"与其相对的是你的身边有很多因素会降低你的情绪,除了自然衰退以外,吃下难\n" "吃的食物、阅读一本枯燥的书以及承受药物的副作用等等。 \n" "\n" -" 低落的情绪会让你的角色逐渐变得懒散及忧郁,具体表现为各项属性的降低,尤\n" +"低落的情绪会让你的角色逐渐变得懒散及忧郁,具体表现为各项属性的降低,尤\n" "其是智力。如果你的情绪低落到一个非常低的程度时,甚至会导致角色的自杀。积极\n" "的情绪能让你的角色思维更敏捷、行动更迅速,而情绪特别高昂时也会增加一些特定\n" "的属性。 \n" @@ -12043,6 +12035,10 @@ msgstr "组件" msgid "corpse" msgstr "尸体" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "金属轨道弹" + #: itypedef.cpp msgid "flyer" msgstr "传单" @@ -12116,9 +12112,8 @@ msgid "shot" msgstr "霰弹" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "信号接收器" +msgstr "信号弹" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -12571,6 +12566,10 @@ msgstr "巨型苍蝇出现了!" msgid "Giant wasps appear!" msgstr "巨型黄蜂出现了!" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "嘟~~嘟~~嘟嘟" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "锤子只能从窗户、门和栅栏拆除木板。" @@ -12755,9 +12754,8 @@ msgid "Put a knife in the boot" msgstr "放一把小刀到靴子里" #: iuse.cpp -#, fuzzy msgid "Put the cat food where?" -msgstr "把狗粮放在哪?" +msgstr "把猫粮放在哪?" #: iuse.cpp msgid "Put the dog food where?" @@ -13037,7 +13035,7 @@ msgstr "蜡烛闪烁出" msgid "" "The cat seems to like you! Or maybe it just tolerates your presence better. " "It's hard to tell with cats." -msgstr "" +msgstr "猫好像很喜欢你!也许它只是可以容忍你的存在。但猫无法告诉你。" #: iuse.cpp msgid "The dog seems to like you!" @@ -13052,9 +13050,8 @@ msgid "The fabric of space seems to decay." msgstr "那个空间看起来似乎在衰变。" #: iuse.cpp -#, fuzzy msgid "The flare sputters out." -msgstr "%s 被击碎了。" +msgstr "灯光熄灭了." #: iuse.cpp msgid "The flashlight flicks off." @@ -13453,6 +13450,12 @@ msgstr "你埋下了地雷。" msgid "You can dig a pit via the construction menu--hit *" msgstr "你可以通过使用建设菜单——用*来挖一个坑," +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "你感到血液急速通过你的血管,一种奇怪的感觉好像药物洗涤你的感官。" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "你只能用这个电池模组改装工具。" @@ -13534,9 +13537,8 @@ msgid "You can't see to sew!" msgstr "太暗了,你无法缝纫!" #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "你不能关闭。" +msgstr "你不能关掉一个闪光弹." #: iuse.cpp msgid "You can't turn off a glowstick." @@ -13565,9 +13567,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "你灼烧你自己。这太疼了!" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "你吃下你的 %s 。" +msgstr "你咬%s." #: iuse.cpp msgid "You churn up the earth here." @@ -13607,6 +13609,10 @@ msgstr "你进一步破坏了 %s!" msgid "You damage your %s!" msgstr "你损坏了 %s!" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "你按下按钮但是没有声音。" + #: iuse.cpp msgid "You destroy it!" msgstr "你毁了它!" @@ -13720,6 +13726,10 @@ msgstr "你感到精神错乱。" msgid "You feel very sleepy..." msgstr "你感到非常困倦..." +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "不知怎么的,你感觉好了一点。" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "你有一个周边地区的视野…" @@ -13740,6 +13750,10 @@ msgstr "你加热了食品." msgid "You honk the bicycle horn." msgstr "你按了下自行车铃。" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "你按下空气喇叭!" + #: iuse.cpp msgid "You inject the vaccine." msgstr "你注射了疫苗。" @@ -13887,6 +13901,10 @@ msgid "" "disassemble ammunition." msgstr "你需要至少2级的火器技能才能拆卸弹药。" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "你需要歇斯底里的发泄!马上!" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "你打开了罐子,使它暴露在空气中." @@ -14118,9 +14136,8 @@ msgid "You snort some crystal meth." msgstr "你磕了点冰毒。" #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "你把狗粮倒在地上。" +msgstr "你打开猫粮,把它倒到地上." #: iuse.cpp msgid "You spill the dogfood all over the ground." @@ -14139,9 +14156,8 @@ msgid "You stop the bleeding." msgstr "你止住了血。" #: iuse.cpp -#, fuzzy msgid "You strike your flare and light it." -msgstr "你将尖牙扎入%s体内!" +msgstr "你打开闪光弹." #: iuse.cpp msgid "You string up the tripwire." @@ -15455,6 +15471,10 @@ msgstr "你的视觉被大幅强化了,感知+2。" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "一场真实而恐怖的梦境,你梦见自己正在用锋利的獠牙咬穿猎物的喉咙。" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "蹄子、尾巴、尖牙,战斗、捕食、前行..." + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -15510,6 +15530,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "梦里,你看见自己像蜥蜴一样的独特身影." +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "在梦里,你看到自己穿着病号服,被强行治疗。" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "在梦里,你看见了自己奇特的野兽般的第一视角." @@ -15528,6 +15554,10 @@ msgstr "" msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "从穴居生活的生动梦境中醒过来后,你发现自己很怕在户外活动了。" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "你是无数动物的集合体,然而你还是你。" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "你很惊恐的梦到自己变成了一个蜥蜴人。" @@ -15536,6 +15566,15 @@ msgstr "你很惊恐的梦到自己变成了一个蜥蜴人。" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "你很糟糕的梦到自己正在无意识的伺候着蜂后。" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "你无法表达出你的怪梦...它不停的在变幻。" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "你的梦和动物园有某些联系。。" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "你梦见自己变成了一个原始穴居人。" @@ -15544,6 +15583,11 @@ msgstr "你梦见自己变成了一个原始穴居人。" msgid "You dream of grazing in an open field." msgstr "你梦见自己在旷野中吃草." +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "你梦到自己回到了过去的世界,幸福地追求自己的梦想。" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "你梦见自己变成了一只很吓人的章鱼变异人。" @@ -15560,6 +15604,10 @@ msgstr "你梦见自己生活在海床上,游来游去好好玩哎~" msgid "You dream of swimming in the open ocean" msgstr "你梦见自己在海洋里遨游." +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "你感觉....不错" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -15587,10 +15635,21 @@ msgstr "你做了一个让人心烦的梦,梦里你在岩石上晒太阳." msgid "You have a disturbing dream of swimming with a school of fish." msgstr "你做了一个令人困扰的梦,梦见自己在和一群小鱼伙伴们一起畅游。" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "你梦到自己躺在手术台上,周围几个外星人在讨论如何治疗这只无毛猴。" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "你做了一个很令人困惑很逼真的梦,梦见自己俨然如一只蜥蜴一样活着。" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "" +"你做了一个怪梦。医生和护士对你的身体动了一个非常恐怖手术,但是你感觉很爽。" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "你做了一个梦,梦见自己在一个巢穴中行走。" @@ -15606,6 +15665,11 @@ msgstr "" msgid "You have a strange dream about animals." msgstr "你做了一个奇怪的梦,梦里出现了各种各样的动物。" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "你做了一个被禁闭在恐怖医院里的怪梦。" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "你做了一个奇怪的梦,梦到了飞鸟." @@ -15658,6 +15722,18 @@ msgstr "你做了一个奇怪的梦,梦见自己生活在一个烂泥潭中。 msgid "You have a strange dream of spinning webs" msgstr "你做了一个奇怪的梦,梦见自己在吐丝做网。(蜘蛛精是你的梦中情人么亲)" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "你做了一个奇怪的梦." + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "" +"你做了一个与医疗异常现象有关的生动的梦,在梦中你的心跳与平稳的静脉点滴同步化" +"了。" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "你做了一个在树林里打猎的生动的梦." @@ -15670,6 +15746,11 @@ msgstr "你做了一个奇怪的梦,梦里你飞翔在天空中." msgid "You scream in fear while you dream of being chased by a cat" msgstr "你梦见自己正在被一只猫追捕,太TMD吓人了!" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "你梦见了五年后的自己,一个成功的受人敬仰的城市首领。" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "" @@ -15693,10 +15774,18 @@ msgstr "你很生动的梦见自己正在和狼伙伴们合作追捕一只猎物 msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "你很困扰的梦见自己正在给花儿授粉。" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "你梦到了形形色色的生物,个个都长着你的脸。我去,太恶心了!" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "你梦见自己在黑暗中生活了很多很多年,这种感觉以假乱真。" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "你的梦表现的非常自律和冷静。" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "你的梦给你一种奇怪的与世隔绝的感觉." @@ -15745,6 +15834,10 @@ msgstr "你的梦让你感觉浑身湿湿的。" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "你的梦让你感受到奇异的潮湿和长出鳞片的感觉" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "你梦到你磕了不少摇头丸。" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "你梦见自己已经完全变成了一只蜘蛛!吓死爹了!" @@ -15754,10 +15847,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "你感觉梦里生活在海床上的感觉比现实更加真实。" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "你的梦复杂而多变。" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "你很生动的梦见自己正在和一群鼠伙伴分享食物。" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "你成功地重建了人类文明,但它暂时只是一个梦。" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "你很生动的梦见自己变成了一只史莱姆,吓死爹了!" @@ -16860,6 +16961,14 @@ msgstr "10mm Auto弹" msgid "12 gauge pistol" msgstr "自制 霰弹手枪" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "简易护臂" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "简易护胫" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "双刃剑" @@ -18033,6 +18142,13 @@ msgstr "" msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "有着一对小口袋的皮大衣,非常暖和。" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" +"用毛皮缝制的遮羞布,遮羞效果请自行脑补。总之穿起来你就是真正的原始人战士了!" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -18276,7 +18392,7 @@ msgstr "一副沉重的皮手套,消防员和金属加工者用它来热能防 msgid "" "A heavy plastic cartridge made for use in flare guns. It appears to be a " "modified 12 gauge shotgun shell." -msgstr "" +msgstr "一个沉重的塑料盒,放着闪光弹.似乎是通过修改猎枪弹药得来的." #: lang/json/json_items.py msgid "A heavy plastic helmet normally worn by football players." @@ -18433,6 +18549,15 @@ msgid "" msgstr "" "一把自制的枪,灵感来源于炮姐,利用电磁铁来加速铁磁弹丸从而射出。由UPS供电。" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" +"这是一个配有背带的超大行李袋,被绑得严严实实。从外形和材质上看,这应该是国民" +"警卫队的标配。/n 解开之后就能放进很多很多的东西" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "" @@ -18473,6 +18598,14 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "一套包括弩臂和导轨的组件,可安装在长枪的枪管下,发射弩矢。" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" +"一把小刀被组合在了一根长长的尖刺上,还用抹布裹成一个手柄,看起来是件不错的近" +"战武器。" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "大型12v铅酸电池,用来给卡车供电。" @@ -18651,14 +18784,13 @@ msgid "A large, spiky pineapple. A bit sour, though." msgstr "一只刺刺的大菠萝…虽然吃上去有点酸。" #: lang/json/json_items.py -#, fuzzy msgid "" "A leather album full of photos of somebody's family. You don't know any of " "the people in them, but seeing these pictures still makes you think of " "happier times." msgstr "" -"一个很温馨的别人的家庭相册,你并不知道他们是谁,但是在末世里能看到这个相册还" -"是让你感觉很幸福." +"一个别人家的全家福,皮质外壳,你不知道他们是谁,但是能看到这些温馨的照片还是" +"让你觉得幸福极了." #: lang/json/json_items.py msgid "" @@ -18702,11 +18834,10 @@ msgid "" msgstr "一条薄的、僵硬的钢丝,就像常见的铁丝网上的钢丝一样。" #: lang/json/json_items.py -#, fuzzy msgid "" "A light and breezy cotton dress. Though cool and comfortable to wear, it " "lacks any storage space." -msgstr "这是一件棉质礼服,虽然非常漂亮但穿着它活动会很困难。没有任何储物空间。" +msgstr "清凉的棉布裙。虽然穿起来凉爽舒适,但它没有任何的存储空间。" #: lang/json/json_items.py msgid "A light vest covered in pockets and straps for storage." @@ -18773,6 +18904,12 @@ msgstr "一根金属柄,一头是击球金属头,gogogog." msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "这是条长长的尼龙绳。从高处跳下可保证安全。" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "长棍子上绑上钢块,挥舞起来又笨重又缓慢,被打中了一定会很疼。" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -19217,6 +19354,21 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "一双高跟鞋,穿起来走路PIAPIA的。" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" +"把合适的木板绑在胳膊上就算是护臂了,可以提供良好的保护,不过真是不舒服啊。" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "在小腿上绑片木头就算是护胫了,防护效果不错,但是跑起来很不方便。" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "这是卡其裤,比牛仔裤要保暖些。" @@ -19229,6 +19381,12 @@ msgstr "一条卡其裤。" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "一对结实的塑料膝盖护垫。" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "用带钉子的木头做成的指虎,街头斗殴神器。" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -19308,11 +19466,10 @@ msgid "A pair of soft neoprene arm sleeves, often used in contact sports." msgstr "一对柔软的橡胶护臂,运动员经常穿戴它以防止运动损伤。" #: lang/json/json_items.py -#, fuzzy msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." -msgstr "一副太阳镜,避免你的眼睛被太阳闪瞎,耍酷装逼的必要饰品。" +msgstr "超级时髦的太阳镜,看起来酷毙了,同时可以防止狗眼被眩晕." #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." @@ -19423,7 +19580,7 @@ msgstr "" #: lang/json/json_items.py msgid "A plastic single shot pistol made to fire signal flares." -msgstr "" +msgstr "一个塑料单发手枪,用于发射信号弹." #: lang/json/json_items.py msgid "" @@ -19796,6 +19953,20 @@ msgstr "一条真菌战斗部的短刺,不错的肉搏武器对吧。" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "一小段尼龙绳。因为太短♂小所以派不上太多用场。" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "一小段已被拉直钢筋,并一端被削尖。可以用来作为电磁轨道武器的弹药。" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "一小段钢条,削尖一端。可以用来作为电磁轨道武器的弹药。" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -19974,6 +20145,16 @@ msgid "" "scrap." msgstr "单发手枪,使用12号霰弹,用废料手工制作。" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" +"一个单发的、电力驱动的、由废料制造的钢质轨道发射器。它发射的超高速金属桩被由" +"标准UPS供电的电磁感应现象产生的一股洛伦兹力加速到足够自燃的速度。" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -19999,6 +20180,12 @@ msgstr "涂上迷彩色的无袖棉背心。" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "无袖棉衬衫,走路更方便!" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "这就是一根长杆子,一般也就在训练的时候用用。不过在关键时刻也算凑合。" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -20076,7 +20263,7 @@ msgstr "这顶小巧的金属头盔能把你的头挡住一大半,提供少量 #: lang/json/json_items.py msgid "A small metal teapot. Teatime wouldn't be complete without one." -msgstr "" +msgstr "小金属茶壶,你的下午茶时间不完整." #: lang/json/json_items.py msgid "" @@ -20240,6 +20427,12 @@ msgstr "" "一个鞭炮,引信短而且可以被点燃,当然,你还是要用到打火机。引信燃烧时间很短," "所以动作快一点,不然就等着被炸伤吧!" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "好歹磨尖了的钢筋,不过还是用来敲胜过戳,好在灵活性还不错。" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "高手炮制的汤品" @@ -20309,14 +20502,13 @@ msgid "A stout pole with an improvised grip and a fire-hardened point." msgstr "一根结实的杆子,有一个简易的把,另一端被火烤过而硬化。" #: lang/json/json_items.py -#, fuzzy msgid "" "A stout wooden truncheon of the sort commonly employed by police. Originally " "an Okinawan weapon, it consists of a stick with a perpendicular handle " "attached a third of the way down its length." msgstr "" -"一根棍子在三分之一处垂直连接着手把的棍子。最初是来自冲绳的土著武器,现在作为" -"皿煮警察用于驱赶暴徒的硬塑料警棍。" +"一个结实的木头棍子,通常在警察身上可以捡到,最终是比较长的,现在敲掉了三分之" +"一,握着它使你信心倍增." #: lang/json/json_items.py msgid "" @@ -20392,14 +20584,13 @@ msgid "A sweet red berry." msgstr "甜甜的红色浆果" #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"刺刀可以装在霰弹枪、冲锋枪或步枪前面用来刺杀。可以让你的近战攻击造成穿刺伤" -"害,因为增加了枪支长度,后坐力会略微提升." +"这是一把可以安在喷子或者步枪上的刺刀,至于用处你肯定懂的。不过因为长度加长的" +"关系,会增加枪的后坐力。" #: lang/json/json_items.py msgid "" @@ -21045,18 +21236,18 @@ msgstr "" "减少弹容量。" #: lang/json/json_items.py -#, fuzzy msgid "" "An all-encompassing black helmet that covers your entire face and neck, " "providing excellent protection from all sorts of damage." -msgstr "一顶轻便的黑色头盔,能够提供很棒的全方位防护。" +msgstr "黑色的极简头盔,覆盖面部和颈部,保护你免受各种伤害的摧残." #: lang/json/json_items.py -#, fuzzy msgid "" "An aluminium baseball bat, lighter than a wooden bat and a little easier to " "swing as a result." -msgstr "一根铝制棒球棒,比木质的要小而且轻,因此用来打人伤害较少。" +msgstr "" +"铅制棒球棍,上边钉着一些钉子,比木质的重多了,挥舞起来非常费力·,但是攻击力同" +"样猛." #: lang/json/json_items.py msgid "An aluminum can, like what soda comes in." @@ -21282,6 +21473,10 @@ msgstr "一双重型金属靴。" msgid "An extremely heavy set of armor plated gloves." msgstr "一副重型金属手套。" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "一种极度罕见的混合诱变剂,喝了它你长成奇美拉那副德行也很正常。" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21722,7 +21917,7 @@ msgstr "" msgid "" "Chewing gum with added caffeine. Sugary and bad for your teeth, but it's a " "nice pick-me-up." -msgstr "" +msgstr "添加咖啡因的口香糖。含糖,并且对你的牙齿不好,但它可以很好的提神。" #: lang/json/json_items.py msgid "Chocolate isn't very healthy, but it does make a delicious treat." @@ -22659,6 +22854,12 @@ msgstr "这种皮鞋的前头包有钢片. 非常耐用。" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "用骨片加强的的皮质护手,轻巧而坚韧。" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "妥妥的就是皮质的遮羞布,简直比不穿还要……嗯……就是这样喵" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -22680,7 +22881,7 @@ msgstr "轻便,容易穿上,但装不了多少东西。" #: lang/json/json_items.py msgid "Lightweight shoes made of cloth and rubber." -msgstr "" +msgstr "轻量级的鞋,由布和橡胶制成." #: lang/json/json_items.py msgid "Like apple cider, only with vodka." @@ -22691,6 +22892,13 @@ msgstr "" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "去除了咖啡因的苏打水,依然不健康,小孩子们不要喝多了哦。" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "用长长的布条扎在手上,稍稍保护一下你的拳头。" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "这里面有许多文章,告诉你关于汽车和驾驶的事情。" @@ -22862,6 +23070,8 @@ msgid "" "health, it was once a favorite amongst baseball players, cowboys, and other " "macho types." msgstr "" +"薄荷味的咀嚼烟草。虽然它对你的健康很可怕,但它曾经是棒球选手、牛仔和其他各种" +"猛男们的最爱。" #: lang/json/json_items.py msgid "Mint flavored nicotine chewing gum. For smokers who desire to quit." @@ -23068,6 +23278,18 @@ msgstr "PDA" msgid "PDA - Flashlight" msgstr "PDA手电筒" +#: lang/json/json_items.py +msgid "PE023 \"Medical\": Application and Findings" +msgstr "PE023”医学“:应用及调查结果" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "PE050 \"Alpha\":初步报告" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" +msgstr "PE065”奇美拉“:最佳实践报告" + #: lang/json/json_items.py msgid "PG-7VL rocket" msgstr "PG-7VL 反坦克弹" @@ -23263,6 +23485,12 @@ msgstr "RPG-7" msgid "RV kitchen unit" msgstr "车载厨具" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "几片破布头缝合成的遮羞布,非常清凉,动一动就会走光。" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -23623,7 +23851,7 @@ msgstr "冲锋枪发烧友" #: lang/json/json_items.py msgid "Suitable for tropical retreats and Canadian artists alike." -msgstr "" +msgstr "很适合带着去热带地区疗养...以及跟加拿大的艺术家们很般配。" #: lang/json/json_items.py msgid "Survival Under Atomic Attack" @@ -24275,6 +24503,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "卷烟丝用的薄纸带。也可以用于制作火帽单动式左轮手枪的弹药。" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "虽然这里不是西部大平原,但是你戴着这顶帽子就妥妥是big boss啊!" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "他们是蓝色的,但这并不代表忧伤。" @@ -24380,6 +24614,14 @@ msgstr "" "这个耗电池的玩意里存着某人的音乐珍藏,里面恰好有不少你喜欢的歌。听听看吧,你" "的情绪会随着音乐而高涨。" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" +"这些尖端技术论文描述了一些全新的化学配方以及他们在人类实验者身上的效果。上面" +"盖着“通过”的印章。" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "这些骨粉是很好的植物肥料." @@ -24393,11 +24635,10 @@ msgstr "" "的成功击发。" #: lang/json/json_items.py -#, fuzzy msgid "" "This burning magnesium flare is producing light. It will last for about a " "half hour before burning out." -msgstr "被激活内在化学反应而正在发光的荧光棒,微弱的光,只能亮几个小时。" +msgstr "这种镁制闪光弹正在不停的然后,大约半小时后熄灭." #: lang/json/json_items.py msgid "" @@ -24493,7 +24734,7 @@ msgid "" "This farming tool has been modified into a weapon by reinforcing and " "rotating its blade 90 degrees, transforming it into a deadly giant blade on " "the end of a stick." -msgstr "" +msgstr "超高校级的强化镰刀,杀人用工具,极速旋转的90°叶片,非常致命." #: lang/json/json_items.py msgid "" @@ -25283,7 +25524,8 @@ msgid "" "allowing you to play in the dark. You can use it to play it for a little " "while, but this requires batteries." msgstr "" -"一个完好的便携式游戏机,它有一个背光屏幕可以在黑暗中使用,你需要电池才能玩一会." +"一个完好的便携式游戏机,它有一个背光屏幕让你可以在黑暗中玩,你需要电池才能玩" +"一会。" #: lang/json/json_items.py msgid "" @@ -25514,6 +25756,7 @@ msgid "" "This is a slow-burning magnesium flare. Use it to strike the striker and " "light it. It will produce a bright light for about a half hour." msgstr "" +"这是一个缓慢燃烧的镁制闪光弹,使用之后,他将会产生一个光源,大约能使用半小时." #: lang/json/json_items.py msgid "" @@ -25533,6 +25776,14 @@ msgstr "" "火柴是很有用的,不论你是想抽根烟,想点燃燃烧瓶,或是把周围的东西烧起来。小心" "不要烧伤哦。" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" +"这罐压缩空气被安上了一个塑料的号角,只要轻轻按下罐子上的按钮,就会发出一阵吵" +"闹的声响。" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -25634,9 +25885,8 @@ msgid "This is a spent glowstick. It is essentially trash." msgstr "用过的荧光棒,没什么用了,有兴趣可以留着。" #: lang/json/json_items.py -#, fuzzy msgid "This is a spent magnesium flare. It is essentially trash." -msgstr "用过的荧光棒,没什么用了,有兴趣可以留着。" +msgstr "一个已经燃烧完毕的闪光弹。本质上是垃圾,且不可回收." #: lang/json/json_items.py msgid "" @@ -25937,6 +26187,8 @@ msgid "" "be a giant blade on the end of a stick, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"老式农业工具,专门用来割杂草,构造十分简单,一片巨大的片叶和棍子,但是令人难" +"以置信的好用." #: lang/json/json_items.py msgid "" @@ -25944,6 +26196,8 @@ msgid "" "be a massive curved blade on a handle, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"老式农业工具,专门用来割杂草,构造十分简单,一片巨大的片叶和棍子,但是令人难" +"以置信的好用." #: lang/json/json_items.py msgid "" @@ -25958,9 +26212,8 @@ msgid "" msgstr "一团医用棉,大小正合适。" #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "狗粮,闻起来很奇怪,但是狗狗喜欢。" +msgstr "猫粮,闻起来很奇怪,吃起来....你真的会吃么,但是猫很喜欢吃." #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." @@ -26227,6 +26480,25 @@ msgstr "" "正如字面所述,这颗手雷已经被激活了然后呢,你剩下的时间也不多了,向着远方迈步" "吧,真男人从不回头看爆炸。" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" +"这些文件上的日期是你接到疏散指令的前一天,详细描述了一个新发现的化学配方的应" +"用和结果,并着重说明其在”群体意识控制催化“方面的显著效果......天哪,这是怎么" +"回事?" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" +"这叠文件上的日期是距大灾变发生两周前,详细分析了很多化学配方以及这些反应对于" +"人体的影响。上面盖了一个鲜红的图章”同意“......" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -26254,14 +26526,13 @@ msgid "" msgstr "这个烟雾弹的插销已被拔出,很快它就会开始施放黑黑的浓烟!" #: lang/json/json_items.py -#, fuzzy msgid "" "This stout combat knife features a steel guard to protect the user's " "knuckles. The guard can also be used for striking or blocking, and the knife " "can also be used to butcher corpses." msgstr "" -"这把结实的战术小刀拥有保护手指关节的钢制护手,攻守兼备。当然也可以用来肢解尸" -"体。" +"战斗用刀具,有一个刚护手用来保护使用者的指关节,还可以用来引人注目或者屠宰尸" +"体." #: lang/json/json_items.py msgid "This yellow cornmeal is useful for baking." @@ -26369,13 +26640,14 @@ msgstr "" "多么重要!与之相比,一点小小的精度与伤害的损失就显得微不足道了。" #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." -msgstr "利用炭层过滤污水的仪器。" +msgstr "" +"这个物品专门用来吸取纯净水源,使用三层滤网,和活性木炭过滤,一旦木炭吸取了足" +"够的杂质,将变得无法使用,无法拆卸和回收,水源来自不确认是否被污染的河流." #: lang/json/json_items.py msgid "" @@ -26489,6 +26761,14 @@ msgstr "什么是晶体管?" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "上面覆盖着奶酪的通心粉,好香啊!" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" +"不管是打击恶棍、修补牧场,还是做做自己拥有一匹高头大马的白日梦,总之戴着这顶" +"帽子那就是这个味儿。" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -26557,9 +26837,8 @@ msgid "active Granade" msgstr "拉开拉环的手雷" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "震撼弹(已激活)" +msgstr "使用中的闪光弹" #: lang/json/json_items.py msgid "active flashbang" @@ -26613,6 +26892,10 @@ msgstr "高级UPS电源(开)" msgid "adventure novel" msgstr "冒险小说" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "阿尔法诱变剂" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "铝质棒球棍" @@ -27106,9 +27389,8 @@ msgid "cabernet sauvignon" msgstr "赤霞珠波尔多葡萄酒" #: lang/json/json_items.py -#, fuzzy msgid "caffeinated chewing gum" -msgstr "口香糖" +msgstr "咖啡因口香糖" #: lang/json/json_items.py msgid "caffeine pills" @@ -27311,14 +27593,17 @@ msgid "chewing gum" msgstr "口香糖" #: lang/json/json_items.py -#, fuzzy msgid "chewing tobacco" -msgstr "口香糖" +msgstr "咀嚼烟草" #: lang/json/json_items.py msgid "children's book" msgstr "儿童读物" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "奇美拉诱变剂" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "甲壳护臂" @@ -27475,6 +27760,10 @@ msgstr "复合弓" msgid "compound bow" msgstr "现代复合弓" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "压缩空气喇叭" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "浓酸" @@ -27563,6 +27852,10 @@ msgstr "行军床" msgid "cotton hat" msgstr "棉帽" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "牛仔帽" + #: lang/json/json_items.py msgid "crack" msgstr "快克" @@ -27607,6 +27900,10 @@ msgstr "坩埚" msgid "crude sword" msgstr "粗制剑" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "长棍" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "受损的简易棚屋" @@ -27620,9 +27917,8 @@ msgid "darts" msgstr "飞镖" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "红色底板" +msgstr "已熄灭闪光弹" #: lang/json/json_items.py msgid "dead glowstick" @@ -27840,6 +28136,10 @@ msgstr "方便面" msgid "feather" msgstr "羽毛" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "土制强力磁轨枪" + #: lang/json/json_items.py msgid "fertilizer" msgstr "肥料" @@ -27929,14 +28229,12 @@ msgid "flannel jacket" msgstr "法兰绒夹克衫" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "炫光" +msgstr "闪光弹" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "炫光" +msgstr "信号枪" #: lang/json/json_items.py msgid "flashbang" @@ -28114,6 +28412,10 @@ msgstr "齐逼小裘裤" msgid "fur kitty collar" msgstr "毛绒项圈" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "毛皮遮羞布" + #: lang/json/json_items.py msgid "fur pants" msgstr "毛皮长裤" @@ -28214,6 +28516,10 @@ msgstr "衬里手套" msgid "glowstick" msgstr "荧光棒" +#: lang/json/json_items.py +msgid "go bag" +msgstr "空降背包" + #: lang/json/json_items.py msgid "gold" msgstr "金" @@ -28278,6 +28584,10 @@ msgstr "锤子" msgid "hand press & die set" msgstr "弹药组装架" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "绑手带" + #: lang/json/json_items.py msgid "handheld game system" msgstr "掌上游戏机" @@ -28418,6 +28728,10 @@ msgstr "全息瞄准镜" msgid "holster" msgstr "手枪皮套" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "家庭破坏者" + #: lang/json/json_items.py msgid "honey comb" msgstr "蜂巢" @@ -28674,6 +28988,10 @@ msgstr "齐逼小皮裤" msgid "leather jacket" msgstr "皮夹克" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "皮革遮羞布" + #: lang/json/json_items.py msgid "leather pants" msgstr "休闲皮裤" @@ -28770,6 +29088,10 @@ msgstr "蜥蜴诱变剂" msgid "log" msgstr "原木" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "遮羞布" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "长岛冰茶" @@ -28795,9 +29117,8 @@ msgid "loose caltrops" msgstr "铁蒺藜" #: lang/json/json_items.py -#, fuzzy msgid "lowtop tennis shoes" -msgstr "小丑鞋" +msgstr "网球鞋" #: lang/json/json_items.py msgid "lump of steel" @@ -28831,6 +29152,10 @@ msgstr "手工粗制集雨器" msgid "makeshift halberd" msgstr "土制长戟" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "简易小刀" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "土制砍刀" @@ -28903,6 +29228,10 @@ msgstr "医用纱布" msgid "medical gloves" msgstr "医用手套" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "化学诱变剂" + #: lang/json/json_items.py msgid "medical tape" msgstr "医学胶带" @@ -29079,6 +29408,10 @@ msgstr "狼牙棒" msgid "nail gun" msgstr "射钉枪" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "尖钉指虎" + #: lang/json/json_items.py msgid "nail rifle" msgstr "射钉步枪" @@ -29603,6 +29936,10 @@ msgstr "老花镜" msgid "rebar" msgstr "钢筋" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "钢筋磁轨弹" + #: lang/json/json_items.py msgid "recurve bow" msgstr "反曲弓" @@ -29729,7 +30066,7 @@ msgstr "朗姆酒" #: lang/json/json_items.py msgid "rum & cola" -msgstr "" +msgstr "可乐朗姆酒" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "saddle" @@ -29841,7 +30178,7 @@ msgstr "螺丝刀" #: lang/json/json_items.py msgid "scythe" -msgstr "" +msgstr "镰刀" #: lang/json/json_items.py msgid "sealed 3-litre jar of kompot" @@ -29899,6 +30236,10 @@ msgstr "缝纫工具箱" msgid "sharpened metal arrow" msgstr "锋利的金属箭杆" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "磨利的钢筋" + #: lang/json/json_items.py msgid "sheet" msgstr "布料" @@ -29972,9 +30313,8 @@ msgid "shovel" msgstr "铁锹" #: lang/json/json_items.py -#, fuzzy msgid "sickle" -msgstr "腌瓜" +msgstr "镰刀" #: lang/json/json_items.py msgid "signal receiver" @@ -30216,6 +30556,10 @@ msgstr "铁指虎" msgid "steel plating" msgstr "钢铁装甲板" +#: lang/json/json_items.py +msgid "steel rail" +msgstr "钢制弹轨" + #: lang/json/json_items.py msgid "steel spear" msgstr "钢矛" @@ -30281,9 +30625,8 @@ msgid "string - 6 in" msgstr "细绳(6英寸)" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "太阳镜" +msgstr "时髦太阳镜" #: lang/json/json_items.py msgid "sugar" @@ -30294,9 +30637,8 @@ msgid "suit" msgstr "时尚西装" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "连衣裙" +msgstr "吊带裙" #: lang/json/json_items.py msgid "sunglasses" @@ -30379,9 +30721,8 @@ msgid "switchblade" msgstr "弹簧刀" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "短枪刺刀组件" +msgstr "刺刀" #: lang/json/json_items.py msgid "syringe" @@ -30400,7 +30741,6 @@ msgid "tactical dump pouch" msgstr "战术杂物袋" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" msgstr "战术头盔" @@ -30453,9 +30793,8 @@ msgid "tea leaves" msgstr "茶叶" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "武器" +msgstr "茶壶" #: lang/json/json_items.py msgid "teargas canister" @@ -30469,6 +30808,10 @@ msgstr "单人传送器" msgid "television" msgstr "电视机" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "牛仔宽边帽" + #: lang/json/json_items.py msgid "tent" msgstr "帐篷" @@ -30679,7 +31022,7 @@ msgstr "战争小说" #: lang/json/json_items.py msgid "war scythe" -msgstr "" +msgstr "死神镰刀." #: lang/json/json_items.py msgid "wasp sting" @@ -30810,9 +31153,8 @@ msgid "wooden javelin" msgstr "木制标枪" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "木质门" +msgstr "木棍" #: lang/json/json_items.py msgid "woods soup" @@ -31032,6 +31374,18 @@ msgstr "" "尽管构想了种种方法,我们完全不能除去试验人体内的XE037。每一个被终结的样品都再" "次复苏。有趣的是,XE037在样品被终结前似乎总处于休眠状态。" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" +"Dionne博士的研究小组研发出了一款更强力的变种药剂,代号PE065。尽管这款新药剂的" +"效果是那么的狂暴和不稳定...这么说吧,只要有少数几个使用了PE065的变种体,就能" +"有效地全面激活XE037的感染者们。我们还是很期待这款新药剂的临床应用以及实践。" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -31323,6 +31677,17 @@ msgstr "" "对史前生物的测试显示已灭绝的生物和幸存的生物之间有着极其紧密的联系。这可能是" "传送门扰乱了时间,不幸的是,门装置被破坏了,在警卫急于干掉史前生物的混乱中。" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" +"生化部门声称研究出了一种非常稳定的突变药剂。PE050中展示了这种药剂能够带来全面" +"的基因层面上的促进和提升,以及可能造成的副作用最坏也不过是暂时的消化不良。由" +"于不会造成人体外观上的明显变化,所以很适合在军用和民用上广泛推广。" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -31334,6 +31699,19 @@ msgstr "" "如实验室的大鼠在休眠前体内不能到达XE037临界质量,然而大型犬类却可以吸收到临界" "质量。" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" +"Isha博士的研究小组提交了一款综合型的变种药剂,据称可以有效地解决绝大部分的人" +"类疾病。实验显示这款药剂能够在抑制人体的痛觉中枢的同时激发人体免疫系统的运作" +"和人体自愈能力,虽然报告中也提到实验过程中实验对象产生了一些比较异常的反应和" +"举动。" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -31473,12 +31851,11 @@ msgstr "+1 闪避 +1 格挡 每回合" #: lang/json/json_martialarts.py msgid "+3 Bash/atk" -msgstr "" +msgstr "+ 3 重击/攻击力" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "攻击速度加成" +msgstr "+4攻击速度" #: lang/json/json_martialarts.py msgid "" @@ -31492,30 +31869,26 @@ msgstr "" "和躲避;而攻击可以提高躲避,躲避也能提高攻击。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "AKA \"drunken boxing,\" Zui Quan imitates the movement of a drunk to confuse " "the enemy. The turn after you successfully attack, you may dodge any number " "of attacks with no penalty." msgstr "" -"醉拳模仿醉酒人的动作来迷惑敌人。\n" -"你攻击后的回合,可以无惩罚地躲避\n" -"任意数量的攻击。" +"又名,酒后拳,是模范一个醉汉般的运动来迷惑敌人。轮到你攻击完毕的时候,你可能" +"可以躲避任何次数的攻击且没有惩罚." #: lang/json/json_martialarts.py newcharacter.cpp msgid "Aikido" msgstr "合气道" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "Aikido is a Japanese martial art focused on self-defense, while minimizing " "injury to the attacker. It uses defensive throws and disarms. Damage done " "while using this technique is halved, but pain inflicted is doubled." msgstr "" -"合气道是一种日本武术,集中在自卫同时最小化\n" -"伤害攻击者。它使用防御抛投和缴械。使用这种\n" -"技术虽然伤害减半但造成疼痛加倍。" +"合气道是一种自卫用武术,并不会严重伤害被攻击者,使用防御性的抓取和抛投技能," +"这种武术伤害减半,但是疼痛值加倍." #: lang/json/json_martialarts.py msgid "" @@ -31533,9 +31906,8 @@ msgid "Attacks scale better with strength" msgstr "攻击力与力量成正比" #: lang/json/json_martialarts.py -#, fuzzy msgid "Bonus damage from intelligence." -msgstr "你的大脑组织更发达了。智力+2" +msgstr "给予额外的伤害奖励" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Capoeira" @@ -31546,42 +31918,36 @@ msgid "Capoeira Tempo" msgstr "卡泼卫勒节拍" #: lang/json/json_martialarts.py -#, fuzzy msgid "Centipede Kung Fu" msgstr "蜈蚣拳" #: lang/json/json_martialarts.py msgid "Crane Kung Fu" -msgstr "" +msgstr "鹤拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Crane Precision" -msgstr "克兰斯顿" +msgstr "鹤之极巧" #: lang/json/json_martialarts.py msgid "Damage bonus from dexterity at the cost of damage from strength." -msgstr "" +msgstr "以敏捷值来计算追加伤害和破坏程度." #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "智力" +msgstr "龙之极速" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Kung Fu" msgstr "龙拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Drunk Dodging" -msgstr "闪避" +msgstr "酒中迷踪" #: lang/json/json_martialarts.py -#, fuzzy msgid "Flat bonus to damage." -msgstr " 但是没有造成什么伤害。" +msgstr "追加伤害" #: lang/json/json_martialarts.py msgid "Half damage to enemies" @@ -31589,7 +31955,7 @@ msgstr "对敌人造成一半伤害" #: lang/json/json_martialarts.py msgid "Hundred-Hitter" -msgstr "" +msgstr "连续普通拳" #: lang/json/json_martialarts.py msgid "Immune to throws and knockdowns" @@ -31632,19 +31998,16 @@ msgid "Krav Maga" msgstr "以色列格斗术" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Kung Fu" -msgstr "豹拳" +msgstr "豹击" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Strategy" -msgstr "少林豹拳" +msgstr "豹之极智" #: lang/json/json_martialarts.py -#, fuzzy msgid "Lizard Kung Fu" -msgstr "蜥蜴拳" +msgstr "蜥蜴功" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Muay Thai" @@ -31675,108 +32038,90 @@ msgstr "没有攻击术,只有蛋疼的老式拳打脚踢。" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" +"象征着世间五种剧毒生物之一,当你贴着墙壁时,毒蛛式能够发挥出最大的威力。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Centipede Style uses an onslaught of rapid " "strikes. Each attack you land reduces the cost of attacking by 4." msgstr "" -"五毒拳法中的一种。蜈蚣拳会发出暴雨般的高频攻击。\n" -"每一击减少你攻击所消耗的移动点数4点;这一效果\n" -"可以累加,但一旦你受到攻击效果即重置。" +"少林武术分支,蜈蚣拳,蜈蚣的风格是快速的冲击型攻击,每个攻击减少你的行动力。" +"同时提高4/每次的攻击" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Scorpion Style is a mysterious art which " "uses pincer-like hands and a stinger kick. Critical hits should do massive " "damage and knock your target back, and we'll fix that as soon as we can." msgstr "" -"五毒拳法中的一种。蝎子拳是一种神秘的艺术,\n" -"使用蝎螯般的拳和蝎刺般的腿踢。暴击会造成\n" -"多重伤害,并将对手击飞。" +"少林武术分支,蝎子是一种神秘的艺术风格,使用钳子一样的手和侧踢,重击你的目标." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Toad Style will be immensely powerful " "through its immunity to nearly any weapon, once we get the connection " "rebuilt. Until then, best not meditate by pausing, though it used to give " "you armor proportional to your Intelligence and Perception." msgstr "" -"五毒拳中的一种。具有无比的威力,并且无视附近\n" -"任何武器。你可以暂停一轮进行冥想,由此获得临\n" -"时的额外护甲,护甲与你的智力和洞察力有关。" +"少林武术分支,蟾蜍的皮可以免疫几乎所有武器,并且具有致命的毒素,尽力是用他提" +"供的护甲和智力与感知." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Viper Style has a uniqe three-part combo, " "ehich is supposed to initiate on a critical strike, then chain into piercing " "damage and a two-handed Viper Strike." msgstr "" -"五毒拳法中的一种。毒蛇拳拥有独特的三连击,在\n" -"你发出暴击的时候激发。第二击手呈锥形,造成穿刺\n" -"伤害,第三击用双手造成毁灭性打击。" +"少林武术分支,蛇拳具有节肢动物的特性组合,可以发出强力一击,双手拥有毒性攻击" +"和穿刺损伤." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Crane uses intricate hand " "techniques and jumping dodges. Dexterity determines the majority of your " "damage, rather than Strength; you also receive a dodge bonus the turn after " "moving a tile." msgstr "" -"少林鹤拳少林五行拳之一,讲究错综的拳法与轻灵的步伐。\n" -"敏捷将代替力量决定伤害,且每次移动都会提升闪避。" +"少林武术分支,鹤拳是用复杂的技能的和躲闪,敏捷决定了你的大部分伤害,而不是力" +"量,你也能得到移动速度奖励." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Dragon uses fluid movements and " "hard strikes. Intelligence improves your accuracy and damage dealt, as does " "moving." -msgstr "" -"少林五禽戏中的一种。龙拳注重流水般的身法\n" -"和重击。智力会提高你的出手率和攻击伤害。\n" -"每走一步会进一步提升这一轮的伤害。" +msgstr "少林武术分支,龙的流体身形,准备的命中率和提高你的移动速度与伤害." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Leopard focuses on rapid, " "strategically planned strikes. Perception and Inteligence both boost " "accuracy, and moving further boosts your accuracy." msgstr "" -"少林五行拳的一种。豹拳侧重于快速进攻压制敌人。\n" -"你的感知和智力提升你的命中,且每次移动都能增加\n" -"攻击。" +"少林武术分枝,豹子拳,专注于快速策略性的武术,认知和智力都提高一定比列,短暂" +"提高你的攻击精度." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Snake focuses on sinuous " "movement and precision strikes. Your Perception iproves yur accuracy and " "your damage." msgstr "" -"少林五行拳之一,蛇拳使用刁钻的步伐和精确打击。\n" -"感知属性能增加你的命中和伤害。" +"少林武术分支,蛇拳,蛇专注于复杂的攻击和精确打击,你的感知会尽职工作,提高你" +"的准确性和伤害." #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Tiger focuses on relentless " "attacks above all else. Your Strength determines your accuracy, and your " "attacks do increasing damage as you continue attacking." msgstr "" -"少林虎拳是少林武术中的象形拳,拳式威猛,如猛虎下山,虎啸生威。\n" -"手、眼、身法、步法、协调一致、快速多变,防不胜防。少林虎拳要表\n" -"现出兽中之王的威猛气势。力量会代替敏捷决定命中率,保持不动伤害\n" -"会逐步增加。" +"少林武术分枝,虎拳,侧重于无情的高伤害结束一切(以力证道),你的高攻击决定了" +"你的命中率,命中之后会逐渐提高你的攻击力哦." #: lang/json/json_martialarts.py msgid "" @@ -31793,11 +32138,11 @@ msgstr "" #: lang/json/json_martialarts.py msgid "Perception and intelligence provide a bonus to block." -msgstr "" +msgstr "提供知觉和感知奖励来攻击." #: lang/json/json_martialarts.py msgid "Perception and intelligence provide a bonus to hit." -msgstr "" +msgstr "利用动态视力和预知来攻击." #: lang/json/json_martialarts.py msgid "Perception decreases damage when blocking" @@ -31805,17 +32150,15 @@ msgstr "感知属性使你格挡中有效减少伤害" #: lang/json/json_martialarts.py msgid "Perception provides a bonus to hit." -msgstr "" +msgstr "知觉提供奖励用于攻击" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Kung Fu" -msgstr "蝎子拳" +msgstr "蝎子功" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Venom" -msgstr "蝎子拳" +msgstr "蝎毒" #: lang/json/json_martialarts.py msgid "Silent melee attacks" @@ -31827,12 +32170,11 @@ msgstr "略微增加徒手伤害" #: lang/json/json_martialarts.py msgid "Snake Kung Fu" -msgstr "" +msgstr "蛇拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Snake Sight" -msgstr "激光瞄准器" +msgstr "蛇之极视" #: lang/json/json_martialarts.py msgid "Strength decreases damage when blocking" @@ -31840,7 +32182,7 @@ msgstr "格挡时依据力量减少伤害" #: lang/json/json_martialarts.py msgid "Strength provides additional damage bonus." -msgstr "" +msgstr "提供额外的伤害加成." #: lang/json/json_martialarts.py newcharacter.cpp msgid "Taekwondo" @@ -31873,35 +32215,32 @@ msgstr "" "受到的伤害就越低。" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "虎拳" +msgstr "虎之极怒" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" -msgstr "" +msgstr "虎拳" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "力量" +msgstr "虎之极力" #: lang/json/json_martialarts.py -#, fuzzy msgid "Toad Armor" -msgstr "整理装束" +msgstr "蟾蜍装甲" #: lang/json/json_martialarts.py msgid "Toad Kung Fu" -msgstr "" +msgstr "蟾蜍功" #: lang/json/json_martialarts.py msgid "Unlimited dodges after successful hit" -msgstr "" +msgstr "无限的躲避,在成功击中之后." #: lang/json/json_martialarts.py msgid "Viper Kung Fu" -msgstr "" +msgstr "五毒蛇拳" #: lang/json/json_martialarts.py msgid "Zui Quan" @@ -33690,15 +34029,14 @@ msgstr "" "它在空中不停地嗡嗡作响。" #: lang/json/json_monsters.py -#, fuzzy msgid "" "A twisted mockery of the human form, emaciated, with jet black skin and " "glowing red eyes. It is somehow painful to look at, awakening fears deep " "within your psyche, and even the air around it seems more sinister, somehow " "darker and more dangerous." msgstr "" -"扭曲的人形丧尸,瘦弱,浑身乌黑,只有一双令人惊惧的红色瞳孔,盯着看的话会唤醒" -"内心深处的恐惧,周围的空气似乎都变得更加危险了." +"一个扭曲的人形兽,瘦弱,乌黑的皮肤和发光的红色瞳孔,他带着痛苦看着你,唤醒了" +"你内心深处的恐惧,周围的气氛似乎更紧张了,连灯光都好像暗了下来" #: lang/json/json_monsters.py msgid "" @@ -33912,7 +34250,6 @@ msgid "" msgstr "真菌从他们的口中、眼睛、耳朵处发芽而出,蹒跚的移动着躯体." #: lang/json/json_monsters.py -#, fuzzy msgid "" "Once human, its features have tightened, its lips pulled back into an " "unnatural grin, revealing rows of blackened teeth beneath its large, " @@ -33920,8 +34257,8 @@ msgid "" "controlled. A feeling of danger permeates the air around it, and the light " "that falls on it somehow harsher and more glaring." msgstr "" -"已死去多时,他的嘴唇露出不自然的笑容,一排排的黑牙(黑人牙膏),眼睛有神,体" -"型庞大,危险的感觉弥漫在周围." +"曾经的同类,现在他的嘴唇露出不自然的括弧笑容,一排排的黑色犬齿非常锋利,眼睛" +"有神,身躯高大,他的体型严格遵守流体力学,危险的感觉弥漫在周围." #: lang/json/json_monsters.py msgid "" @@ -34166,7 +34503,7 @@ msgstr "" msgid "" "The masked shrew, a mouse-like creature with a pointed, whiskery snout. It " "digs tunnels into the ground in search of bugs to eat." -msgstr "" +msgstr "一个鼠标一样的生物,鼻子很尖,喜欢在地面上挖寻隧道来找虫子吃." #: lang/json/json_monsters.py msgid "" @@ -34194,12 +34531,12 @@ msgstr "" "这种眼镜蛇是新英格兰的毒蛇之王,气候变化帮助它的种群向北方边远地区扩张。" #: lang/json/json_monsters.py -#, fuzzy msgid "" "The white-footed mouse, a prolific rodent with a white underbelly and a long " "fuzzy tail. A common sight in fields, forests, and research centers." msgstr "" -"有着毛茸茸尾巴的实验室白老鼠,比普通老鼠长寿。常见于实验室、森林和田地。" +"小白鼠,多后代的啮齿动物,白色尾巴是软肋,经常可以在牧场,森林,以及研究中心" +"见到." #: lang/json/json_monsters.py msgid "" @@ -35150,9 +35487,8 @@ msgid "Forked Tongue" msgstr "蛇信" #: lang/json/json_mutations.py -#, fuzzy msgid "Frail" -msgstr "栏杆" +msgstr "虚弱" #: lang/json/json_mutations.py msgid "Full Night Vision" @@ -35535,6 +35871,14 @@ msgstr "辐射吸收" msgid "Regeneration" msgstr "再生" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "蜥眼" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "红外蜥眼" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "飞毛腿" @@ -35730,6 +36074,10 @@ msgstr "你的相貌变得连动物都会害怕,他们见到你便会开始逃 msgid "Thick Scales" msgstr "厚重鳞甲" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "粗尾巴" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -36120,6 +36468,14 @@ msgid "" "balance, making your ability to dodge higher." msgstr "你有一条像猫一样的尾巴,它可以提高你的平衡能力,使你的闪避能力提高。" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" +"你现在有了一根长长的、粗粗的...蜥蜴尾巴。它能够帮你在奔跑的时候增加一些平衡," +"同时还能当做一根很犀利的鞭子。" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -36639,6 +36995,15 @@ msgstr "你的眼睛从头颅突出来几英寸,但这并不影响你的视觉 msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "你的双眼突变为可以看见红外线光线。" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" +"你的眼睛产生了变异,有着闪亮的虹膜和喵星人样的竖瞳,看上去简直帅呆了,不过好" +"像并不影响你的视力。" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -36765,6 +37130,13 @@ msgstr "在末日的磨砺下,你的肌肉日渐发达。力量+2" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "你的肌肉非常不适合运动,你跑起来速度下降30%%。" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" +"你的视觉神经与大脑已经随着你眼睛的变异而变异,现在你能使用红外线视觉了。" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -47795,6 +48167,15 @@ msgstr "" "和仿生模块上。标题这样写道:“今天是入手28.vx秃鹫模块的好日子!“ “Twenty8.发现" "你错过的精彩。”" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "用蛇咬击中了 %s。" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -47815,6 +48196,10 @@ msgstr "肘击%s" msgid " feints at %s" msgstr "佯攻%s" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -47825,11 +48210,36 @@ msgstr "飞膝攻击%s" msgid " grabs %s" msgstr "擒住%s" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr " 对着 %s发出嘶嘶的威胁声。" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "戳击 %s" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr " 用巨钳般的前臂狠狠打向 %s。" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -47840,6 +48250,20 @@ msgstr "精准戳击%s" msgid " karate chops %s" msgstr "掌劈%s" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr " 用毒蛇般蜿蜒曲折的招式击向了%s。" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -47855,21 +48279,51 @@ msgstr "迅速拳击%s" msgid " quickly strikes %s" msgstr "快速攻击了%s" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "造成%s眩晕" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr "侧踢%s" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr " 抓住了 %s并给与痛击。" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "打击了%s" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "摔到了%s上。" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -47885,6 +48339,16 @@ msgstr "扫踢%s" msgid " sweeps %s" msgstr "横扫了%s" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "迅速击打%s" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "迅速戳%s" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -47900,14 +48364,59 @@ msgstr "投摔%s" msgid " wraps up %s" msgstr "缠住了%s" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr " 用毒针般的踢技把 %s 踢飞到了空中。" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "暴击" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "鹤咀" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "鹤爪" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "鹤翼" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "龙爪手" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "醉拳佯攻" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "反擒拿" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "巨螯击" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "精确打击" @@ -47916,10 +48425,50 @@ msgstr "精确打击" msgid "Rapid Strike" msgstr "快速打击" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "蛇形滑步" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "快蛇出笼" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "猩红毒针" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "扫荡攻击" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "蛤蟆舌头" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "毒蛇疯咬" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "白蛇吐信" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "毒蛇翻腾" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "广幅攻击" @@ -47928,6 +48477,11 @@ msgstr "广幅攻击" msgid "Wrap attack" msgstr "缠绕攻击" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "你用蛇咬击中了 %s。" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -47958,6 +48512,26 @@ msgstr "你飞膝猛击%s" msgid "You grab %s" msgstr "你擒住了%s" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "你向着 %s发出嘶嘶的威胁声。" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -47973,11 +48547,26 @@ msgstr "你精准戳击%s" msgid "You karate chop %s" msgstr "你掌劈%s" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "你用毒蛇般蜿蜒曲折的招式击向了%s。" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "你强劲踢击%s" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "你用巨钳般的前臂狠狠打向 %s。" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -47988,21 +48577,59 @@ msgstr "你快拳打击%s" msgid "You quickly strike %s" msgstr "你迅雷不及掩耳攻击%s" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "你造成%s眩晕" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "你侧踢%s" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "你抓住了 %s并给与痛击。" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "你打击了%s" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "你摔到了%s上。" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -48018,11 +48645,25 @@ msgstr "你横扫了%s" msgid "You sweep-kick %s" msgstr "你扫踢%s" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "你迅速击打%s" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "你迅速戳%s" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "你大幅挥击%s" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -48033,6 +48674,11 @@ msgstr "你投摔了%s" msgid "You wrap up %s" msgstr "你缠住了%s" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "你用毒针般的踢技把 %s 踢飞到了空中。" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "斧踢" @@ -48135,7 +48781,7 @@ msgstr "损坏的读卡器" #: lang/json/json_terrain.py msgid "broken console" -msgstr "损坏的电脑" +msgstr "损坏的终端" #: lang/json/json_terrain.py msgid "broken generator" @@ -48211,7 +48857,7 @@ msgstr "桩柱" #: lang/json/json_terrain.py msgid "computer console" -msgstr "电脑主机" +msgstr "计算机终端控制台" #: lang/json/json_terrain.py msgid "concrete" @@ -49543,12 +50189,12 @@ msgstr "删除地图和所有存档?" #: main_menu.cpp msgctxt "Main Menu" msgid "Hlp" -msgstr "" +msgstr "帮助&设置" #: main_menu.cpp msgctxt "Main Menu" msgid "Lod" -msgstr "" +msgstr "加载" #: main_menu.cpp msgid "No Worlds found!" @@ -50152,6 +50798,16 @@ msgstr "%s用她的尾巴蛰刺%s!" msgid "%s stings %s with his tail!" msgstr "%s用他的尾巴蛰刺%s!" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "%s用她的尾巴锤击%s!" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "%s用他的尾巴锤击%s!" + #: melee.cpp #, c-format msgid " batters %s" @@ -50438,6 +51094,11 @@ msgstr "你狂暴地挥舞,但是没打中。" msgid "You whack %s" msgstr "你重击%s" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "你用尾巴锤击%s!" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -51143,7 +51804,7 @@ msgstr "带我的狗哨子;如果狗开始乱跑,吹响它,他会回到你 #: mission.cpp msgid "Take this USB drive. Use the console, and download the software." -msgstr "使用这个USB驱动器。使用控制台,下载软件。" +msgstr "使用这个USB驱动器。使用终端控制台,下载软件。" #: mission.cpp msgid "Thank you so much for finding him!" @@ -52181,6 +52842,11 @@ msgstr "一个 %s %s 来自于 %s!" msgid "A %s %s into the %s!" msgstr "一个 %s %s 在 %s 里!" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "某物击中了你的 %s。" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -52539,9 +53205,9 @@ msgid "Points left:%3d" msgstr "剩余点数:%3d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Points left:%3d " -msgstr "剩余点数:%3d" +msgstr "向左:%3d " #: newcharacter.cpp #, c-format @@ -52558,9 +53224,9 @@ msgid "Ranged penalty: -%d" msgstr "远程惩罚:-%d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "阅读时间:%d%%%%" +msgstr "阅读时报:%d%%" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" @@ -52579,9 +53245,9 @@ msgid "STATS" msgstr "属性" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "技能遗忘: %d%%%%" +msgstr "技能: %d%%" #: newcharacter.cpp #, c-format @@ -52624,14 +53290,12 @@ msgid "To go back and review your character, press <" msgstr "要返回并确认你的人物,请按<" #: newcharacter.cpp -#, fuzzy msgid "To pick a random name for your character, press ?" -msgstr "要为你的人物随机命名,请按?" +msgstr "为您的角色选择一个随机额名字吗?" #: newcharacter.cpp -#, fuzzy msgid "To save this character as a template, press !" -msgstr "要将该人物保存为预设角色模板,请按!" +msgstr "保存这个角色为模板,按!" #: newcharacter.cpp msgid "Too many points allocated, change some features and try again." @@ -52670,27 +53334,24 @@ msgid "Your profession of %s prevents you from taking this trait." msgstr "你的 %s 职业不允许你得到该特性。" #: newcharacter.cpp -#, fuzzy msgid "______NO NAME ENTERED!!!______" -msgstr "_________未输入名字!!!!________" +msgstr "______没有名字!!!______" #: newcharacter.cpp -#, fuzzy msgid "h, 4, or left arrow to decrease the statistic." -msgstr " 调低属性点" +msgstr "h,4或者左箭头选择." #: newcharacter.cpp msgid "j/k, 8/2, or up/down arrows to select a statistic." -msgstr "" +msgstr "j/k,8/2护着上/下箭头,增加或者减少数值" #: newcharacter.cpp options.cpp player.cpp msgid "kg" msgstr "公斤" #: newcharacter.cpp -#, fuzzy msgid "l, 6, or right arrow to increase the statistic." -msgstr " 调高属性点" +msgstr "l,6或者右箭头选择." #: newcharacter.cpp options.cpp player.cpp msgid "lbs" @@ -56594,8 +57255,8 @@ msgid "Alcohol Craving" msgstr "酒精上瘾" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" -msgstr "你的肚子中瞬间产生一种熟悉的疼痛" +msgid "Almost instantly you feel a familiar pain in your stomach." +msgstr "你的胃瞬间感到了一种熟悉的疼痛" #: player.cpp msgid "Arm encumbrance affects your accuracy with ranged weapons." @@ -56648,7 +57309,7 @@ msgstr "仿生模块:" msgid "Broken %s began to mend." msgstr "开始修补破碎的 %s。" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "连发" @@ -56687,9 +57348,9 @@ msgid "Cocaine Craving" msgstr "可卡因瘾上瘾" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Cold-Blooded -%s%d%%" -msgstr "无法御寒 -%s%d%%%%" +msgstr "冷血 -%s%d%%" #: player.cpp #, c-format @@ -56734,18 +57395,18 @@ msgid "Depressants" msgstr "镇静剂" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressants -%s%d%%" -msgstr "镇静剂-%s%d%%%%" +msgstr "镇静剂 +%s%d%%" #: player.cpp msgid "Depressed" msgstr "沮丧" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressed -%s%d%%" -msgstr "沮丧-%s%d%%%%" +msgstr "士气减少-%s%d%%" #: player.cpp msgid "Dex " @@ -56889,9 +57550,9 @@ msgid "Good Feeling" msgstr "感觉不错" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Good mood +%s%d%%" -msgstr "好心情 +%s%d%%%%" +msgstr "士气+%s%d%%" #: player.cpp msgid "Guilty about Killing" @@ -56924,9 +57585,9 @@ msgid "Heard Disturbing Scream" msgstr "听到令人不安的尖叫" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Hunger -%s%d%%" -msgstr "饥饿-%s%d%%%%" +msgstr "饥饿值 -%s%d%%" #: player.cpp msgid "Hungry" @@ -57134,10 +57795,6 @@ msgstr "你的包里装不下%s了,把它扔掉?" msgid "No space in inventory for your %s. Drop it?" msgstr "你的 %s没有空间去放。要扔掉它吗?" -#: player.cpp -msgid "Normal" -msgstr "正常" - #: player.cpp msgid "Nothing to see here!" msgstr "这里什么都没有!" @@ -57160,14 +57817,14 @@ msgid "Opiate Craving" msgstr "镇痛剂上瘾" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Out of Sunlight -%s%d%%" -msgstr "日光暴晒 -%s%d%%%%" +msgstr "目前的天气 -%s%d%%" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Overburdened -%s%d%%" -msgstr "负担过重-%s%d%%%%" +msgstr "不堪重负-%s%d%%" #: player.cpp #, c-format @@ -57179,9 +57836,9 @@ msgid "Pain" msgstr "疼痛" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Pain -%s%d%%" -msgstr "疼痛 -%s%d%%%%" +msgstr "疼痛-%s%d%%" #: player.cpp #, c-format @@ -57189,9 +57846,9 @@ msgid "Pain %d" msgstr "疼痛 %d" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Painkillers -%s%d%%" -msgstr "止痛 -%s%d%%%%" +msgstr "止痛药-%s%d%%" #: player.cpp msgid "Parched" @@ -57245,9 +57902,9 @@ msgid "Putting on a %s would be tricky." msgstr "想要穿%s是不可能的。" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Quick +%s%d%%" -msgstr "迅捷 +%s%d%%%%" +msgstr "快速 +%s%d%%" #: player.cpp msgid "R Arm: " @@ -57263,9 +57920,9 @@ msgid "Read %i" msgstr "阅读 %i" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%% " -msgstr "阅读时间:%d%%%% " +msgstr "阅读时报: %d%% " #: player.cpp #, c-format @@ -57334,9 +57991,9 @@ msgid "Siphoned %d units of %s from the %s." msgstr "抽取 %d 单位的 %s 从 %s 里。" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%% " -msgstr "技能遗忘: %d%%%% " +msgstr "技能: %d%% " #: player.cpp msgid "Skills:" @@ -57385,9 +58042,9 @@ msgid "Stimulant Overdose" msgstr "兴奋剂过量" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Stimulants +%s%d%%" -msgstr "兴奋剂 +%s%d%%%%" +msgstr "兴奋剂 +%s%d%%" #: player.cpp msgid "Storage" @@ -57482,9 +58139,9 @@ msgid "The thought of eating that makes you feel sick. Really do it?" msgstr "如果吃了会让你的胃很不舒服的。真的要吃吗?" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Thirst -%s%d%%" -msgstr "口渴-%s%d%%%%" +msgstr "口渴度 -%s%d%%" #: player.cpp msgid "Thirsty" @@ -57610,6 +58267,11 @@ msgstr "武器:" msgid "Weapon: %s" msgstr "武器: %s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "武器: %s (%s)" + #: player.cpp msgid "Wet" msgstr "湿" @@ -57811,8 +58473,8 @@ msgid "You feel fatigued all of a sudden." msgstr "你突然感到精疲力竭。" #: player.cpp -msgid "You feel horrible for eating a person.." -msgstr "你觉得吃人实在是恐怖极了!" +msgid "You feel horrible for eating a person." +msgstr "你觉得食人实在是恐怖极了!" #: player.cpp #, c-format @@ -57871,11 +58533,10 @@ msgid "You need a %s to consume that!" msgstr "你需要一个 %s来食用它!" #: player.cpp -#, fuzzy msgid "" "You need to be at least level 1 in the marksmanship skill before you can " "modify guns." -msgstr "你至少要有1级火器技能才能尝试改造枪支。" +msgstr "在你拥有至少一级的枪支技能之前,你无法改装枪支." #: player.cpp #, c-format @@ -58096,9 +58757,8 @@ msgid "Your batteries discharge slightly." msgstr "你的电池稍微有些漏电。" #: player.cpp -#, fuzzy msgid "Your body strains under the weight!" -msgstr "肉被你破坏了!" +msgstr "你的身体处于重荷中!" #: player.cpp msgid "Your eyes won't focus without reading glasses." @@ -58220,6 +58880,11 @@ msgstr "暴击!" msgid "Firing %s (%d)" msgstr "射击 %s(%d)" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "射击模式: %s" + #: ranged.cpp msgid "Fwoosh!" msgstr "嗖!" @@ -59148,9 +59813,8 @@ msgid "Headlights turned on" msgstr "车头灯已打开" #: vehicle.cpp -#, fuzzy msgid "Honk horn" -msgstr "卡车喇叭" +msgstr "喇叭" #. ~ indicates that a vehicle part is inside #: vehicle.cpp @@ -59515,9720 +60179,9693 @@ msgstr "世界名称:" msgid "______NO NAME ENTERED!!!!_____" msgstr "_________未输入名字!!!!________" -#~ msgid "Monster Spotted!" -#~ msgstr "发现怪物!!" - -#~ msgid "" -#~ "There's no room in your inventory for the %s, and you can't unwield your " -#~ "%s." -#~ msgstr "你的包裹没有给 %s 的空间了,并且你不能卸下你的 %s 。" - #~ msgid "" -#~ "The Northern short-tailed shrew, an insectvorous mammal that resembles a " -#~ "cross between a mouse and a mole. Notably for a mammal, it has a " -#~ "venomous bite, which can prove painful for humans." -#~ msgstr "" -#~ "北美短尾鼩,哺乳动物,形象介于老虎和鼹鼠之剑,他的咬力非常惊人,可以证明他" -#~ "足以给你造成伤害." - -#~ msgid "" -#~ "The shuffling corpse of a once-proud bear, its eyes ooze with black " -#~ "fluid, and its flesh is torn and scarred." -#~ msgstr "" -#~ "丧尸熊,现在他的眼睛流出黑色的血液,躯体伤痕累累,不过战斗力却更加可怕了." - -#~ msgid "Hardcore" -#~ msgstr "脆皮" - -#~ msgid "" -#~ "Before the Apocalypse, you turned to Heroin to soothe your many problems. " -#~ "Now, your habit is your only comfort and your only drive." -#~ msgstr "" -#~ "天启之前,你靠海洛因来安抚你的所有问题。现在,你的爱好是你的唯一的安慰和唯" -#~ "一的动力。" - -#~ msgid "" -#~ "You were on your way to collect your check, when your pimp tried to kill " -#~ "you. You wish that it wasn't a common occurence. You start with the last " -#~ "of your stash and a strong crack addiction." -#~ msgstr "" -#~ "一直潜规则你的皮条客在你准备开工的时候试图杀了你,然后你发现这不是个别案" -#~ "例。于是你一身性感的打扮开始逃命!对了,你还是个不可救药的瘾君子。" - -#~ msgid "" -#~ "Your body has bionics worth millions payed by public taxes. The " -#~ "government employed you as a spy: you have night vision, an alarm and a " -#~ "hacking module powered by your own metabolism." +#~ "The mere thought of eating this stuff is enough to make your hair stand " +#~ "on end. Save it for when you're about to die of starvation." #~ msgstr "" -#~ "你的身体装有仿生学部件,是政府花了数百万美元税收来培养的间谍,你拥有夜视能" -#~ "力,报警和黑客攻击模块,这些经由你自身的新陈代谢。" - -#~ msgctxt "Main Menu" -#~ msgid "elp" -#~ msgstr "帮助" +#~ "看起来很恶心的样子,虽然知道是可以吃的东西,不过还是留到饿死前再试吧。" -#~ msgctxt "Main Menu" -#~ msgid "oad" -#~ msgstr "载入" +#~ msgid "You have an alcohol craving." +#~ msgstr "你酒(精)瘾发作." -#~ msgid " select a statistic." -#~ msgstr " 选择属性" +#~ msgid "You have a craving." +#~ msgstr "你开始犯瘾了。" -#~ msgid "(Press spacebar to toggle)" -#~ msgstr "(按空格键进行切换)" +#~ msgid "You have a speed craving." +#~ msgstr "你对兴奋剂上瘾了。" -#~ msgid "h, 4, or left arrow" -#~ msgstr "按h、4或左方向键" +#~ msgid "Too many itens" +#~ msgstr "太多东西" -#~ msgid "j/k, 8/2, or arrows" -#~ msgstr "按j/k、8/2或方向键" +#~ msgid "Start a fire" +#~ msgstr "生一堆火" -#~ msgid "l, 6, or right arrow" -#~ msgstr "按l、6或右方向键" +#~ msgid "create an EMP" +#~ msgstr "制作一个EMP炸弹" -#~ msgid " barely misses!" -#~ msgstr "差点失手了!" +#~ msgid "Contruct" +#~ msgstr "建立" -#~ msgid " misses!" -#~ msgstr "失手了!" +#~ msgid "You're not strong enough!" +#~ msgstr "你不够强壮!" -#~ msgid "A bacon, lettuce and tomato sandwich on toasted bread." -#~ msgstr "培根生菜西红柿三明治" +#~ msgid "Press a direction for the furniture to move (. to cancel):" +#~ msgstr "按方向键将家具向那个方向移动(.键取消)" -#, fuzzy -#~ msgid "" -#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " -#~ "you from the floor, making it easier to sleep" -#~ msgstr "" -#~ "一大张卷起来的泡沫塑料,很方便存放的样子,如果铺开也能当做一个床铺来使用。" +#~ msgid "Can't move furniture there! Choose a direction with open floor." +#~ msgstr "不能移向那个地方!选择一个有空地板的方向." -#~ msgid "" -#~ "A brass-jacketed variant of the .44 Magnum round. This increases " -#~ "penetration slightly at the cost of reduced expansion." -#~ msgstr "" -#~ "一种带铜质外壳的改装版马格南左轮手枪。在牺牲了弹夹量的同时,这把枪获得了更" -#~ "好的穿透力。" +#~ msgid "You disassemble the item into its components." +#~ msgstr "你把它拆解成它的组件." -#~ msgid "A car horn meant to be attached to a car's electrical system." -#~ msgstr "汽车喇叭要连接到汽车的电气系统." +#~ msgid "Contracted the infection." +#~ msgstr "感染" -#~ msgid "" -#~ "A dry and tasteless bread product capable of remaining edible without " -#~ "spoilage for vast lengths of time." -#~ msgstr "干燥无味的面包,没有打开的话可以保存很长时间。" +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s 开始疯狂抓挠自己的全身!" -#~ msgid "A handful of large, purple plums. It is good for your digestion." -#~ msgstr "一把紫色的大李子。它是对你对消化道有好处。" +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s 开始疯狂抓挠自己的全身!" -#~ msgid "" -#~ "A huge, curved, two-handed sword from Japan. Surprisingly light for its " -#~ "size." -#~ msgstr "双手日本刀,外表闪亮着寒光。" +#~ msgid "Spores" +#~ msgstr "孢子" -#~ msgid "" -#~ "A pipe whose ends have been bent and hammered flat to resemble a crowbar." -#~ msgstr "一根钢管,其中一端弯曲后被锤子砸扁,可以当撬棍使。" +#~ msgid "Bleeding" +#~ msgstr "流血" -#~ msgid "" -#~ "A portable charcoal smoker. Good for weekend barbecuing and preserving " -#~ "meat with smoke." -#~ msgstr "一个便携式木炭烤架,适合周末烧烤和保存鲜肉." +#~ msgid "Bugs Under Skin" +#~ msgstr "皮肤下有虫子在蠕动" -#~ msgid "A portable electric food dehydrator, powered by standard batteries." -#~ msgstr "便携式食品脱水机,电池供能" +#~ msgid "Bite Wound" +#~ msgstr "咬伤" -#~ msgid "" -#~ "A sealed glass jar containing a sliced fruit. Activate to open and enjoy." -#~ msgstr "装在玻璃瓶里的水果片,打开它尽情享受吧" +#~ msgid "Painful Bite Wound" +#~ msgstr "剧痛的咬伤" -#~ msgid "" -#~ "A shell filled with tiny steel darts. Extremely damaging, plus the spread " -#~ "makes it very accurate at short range. Slices through most forms of armor " -#~ "with ease." -#~ msgstr "小钢镖,威力不错,可以及其精准的命中怪物." +#~ msgid "Infected Wound" +#~ msgstr "受感染的伤口" -#~ msgid "A simple bulb horn, found on many bicycles. Honk honk." -#~ msgstr "一个简单的小灯泡,许多自行车上都可以看到." +#~ msgid "Painful Infected Wound" +#~ msgstr "剧痛的感染伤口" -#~ msgid "" -#~ "A stout collapsible spade commonly used by military forces and favored by " -#~ "hikers." -#~ msgstr "这种结实的折叠铲常用于军队,不过也备受徒步旅行者的追捧。" +#~ msgid "Pus Filled Wound" +#~ msgstr "充满脓液的伤口" #~ msgid "" -#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " -#~ "brightly, and makes it much easier to see the baselines at night games " -#~ "(It also makes the umpire FAR more likely to call a ball instead of a " -#~ "strike)." +#~ "Speed -40%\n" +#~ "You can feel the tiny spores sinking directly into your flesh." #~ msgstr "" -#~ "一杆结实的棒球棒裹上浸润易燃液体的布条。燃烧的如此灿烂!让你能在夜间“游" -#~ "戏”中更容易找到“基线”。(当然这也让裁判 【更】容易判罚一次坏“球”而不是一次" -#~ "好”球”)" +#~ "速度-40%\n" +#~ "你可以感觉到小孢子直接侵入你的肉体中。" #~ msgid "" -#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " -#~ "ball game will REALLY heat up." +#~ "Strength - 1; Intelligence - 2\n" +#~ "You stop to scratch yourself frequently; high intelligence helps you " +#~ "resist\n" +#~ "this urge." #~ msgstr "" -#~ "一杆结实的棒球棒裹上浸润易燃液体的布条。只要点燃它,“棒”-“球”运动会变得超" -#~ "级火热!超级棒!" - -#~ msgid "" -#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " -#~ "stimulant when you inject yourself with it. Asthmatics can use it in an " -#~ "emergency to clear their asthma." -#~ msgstr "一支包含一次计量强心剂的针筒。注射这玩意会让你嗨到翻。" - -#~ msgid "A very loud horn, usually found on large trucks like semis." -#~ msgstr "一个非常响亮的喇叭,通常用在拖车这样的大卡车上" - -#~ msgid "Ammunition for the RPG-7." -#~ msgstr "已装填弹药的RPG-7" - -#~ msgid "An empty hull from a 5x50mm flechette round." -#~ msgstr "一个5x50mm箭弹的空壳" - -#~ msgid "Lumpy white soup made of clams and potatoes." -#~ msgstr "像湖泊一样起伏的白色蛤蜊汤混杂着土豆." +#~ "力量- 1;智力- 2\n" +#~ "你停下来扯住自己头发; 高智力可抵抗这种\n" +#~ "强烈欲望。" -#~ msgid "RPG-7 Ammo" -#~ msgstr "RPG-7专用弹药" +#~ msgid "Your bite wound really hurts." +#~ msgstr "咬伤的伤口十分疼痛" -#~ msgid "Really cheap fortified red wine." -#~ msgstr "廉价的红酒" +#~ msgid "Your bite wound feels swollen and painful." +#~ msgstr "咬伤的地方有些肿胀和疼痛。" -#, fuzzy -#~ msgid "" -#~ "Small metal objects covered with many sharp points. If an unsuspecting " -#~ "victim steps on it, they'll get a spine through the foot." -#~ msgstr "" -#~ "这是一块厚实的木板,其中一端上有几枚长长的钉子。极简主义的杀人利器。" +#~ msgid "You haven't eaten in over a week!" +#~ msgstr "你一星期没吃东西了!" -#~ msgid "" -#~ "This chemistry set stored in a bag contains glass containers, hoses, " -#~ "metal wire, a hotplate, and safety glasses. It might be used to craft " -#~ "some chemistry projects if you're so inclined." -#~ msgstr "" -#~ "这个包里存放的一套化学用品包括一些玻璃器皿,一些金属线以及护目镜.如果你想制" -#~ "作一些化学品,它可为你提供一定的便利。绝命毒师最喜欢的道具!" +#~ msgid "4 days... no water.." +#~ msgstr "水…4天没喝了…" -#~ msgid "" -#~ "Vacuum packed fruit slices in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "用塑料袋真空包装的水果片,打开它尽情享用吧" +#~ msgid "You haven't had anything to drink in 2 days!" +#~ msgstr "你两天没喝东西了!" -#~ msgid "clams" -#~ msgstr "蛤蜊" +#~ msgid "Study %s?" +#~ msgstr "研究 %s ?" -#~ msgid "" -#~ "A large and colorful game bird native to the forests of North America." -#~ msgstr "一种原产于北美森林的大型鸟类" +#~ msgid "You learn %s." +#~ msgstr "你学会了 %s 。" -#~ msgid "" -#~ "A massive, mutated freshwater shellfish,\n" -#~ "resembling a humongous lobster." -#~ msgstr "巨大的淡水变异贝。" +#~ msgid "whatever" +#~ msgstr "不管怎么样" -#, fuzzy -#~ msgid "" -#~ "A plant that grows as high as your head,\n" -#~ "with one thick, bark-coated stalk\n" -#~ "supporting a flower-like head with a paralyzing\n" -#~ "sting within." -#~ msgstr "" -#~ "一种植物长得和你的头一样高,\n" -#~ "有着一个厚的,树皮覆盖的茎\n" -#~ "支撑着有个像头一样里面有着\n" -#~ "锋利刺毛的花。" +#~ msgid "crafting" +#~ msgstr "手工艺" -#~ msgid "" -#~ "A small blob of viscous goo that oozes\n" -#~ "across the ground like a mass of living\n" -#~ "oil." -#~ msgstr "" -#~ "一个黑色的粘液小球,渗出的\n" -#~ "粘液滴在地上像一团生活用\n" -#~ "的大众石油。" +#~ msgid "playing" +#~ msgstr "播放中" -#~ msgid "" -#~ "A small mammal native to North America, distinctive for its dexterous " -#~ "paws and facial markings." -#~ msgstr "北美本地的小型哺乳动物,具有灵巧的爪子和显著的面部特征。" +#~ msgid "reading" +#~ msgstr "阅读" -#~ msgid "A small, omnivorous marsupial native to North America." -#~ msgstr "一种原产于北美的小型杂食性有袋类动物。" +#~ msgid "reloading" +#~ msgstr "装填" -#~ msgid "" -#~ "An eastern timber rattlesnake, one of New England's most poisonous snakes." -#~ msgstr "东部响尾蛇,新英格兰最毒的蛇。" +#~ msgid "waiting" +#~ msgstr "等待中" -#~ msgid "mole" -#~ msgstr "鼹鼠" +#~ msgid "butchering" +#~ msgstr "屠宰" -#~ msgctxt "Main Menu" -#~ msgid "eset" -#~ msgstr "重置" +#~ msgid "disassembly" +#~ msgstr "拆卸" -#~ msgid "" -#~ "Choose the tileset you want to use. Only applicable on SDL builds. " -#~ "Requires restart." -#~ msgstr "选择你想要的贴图版本。目前只支持SDL版本。需要重新启动。" +#~ msgid "foraging" +#~ msgstr "觅食" -#~ msgid "" -#~ "You just put on an article of clothing that protects against the " -#~ "environment.\n" -#~ "The most common and imporant are respiratory devices, which will protect " -#~ "you\n" -#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" -#~ "However, they also make it a little harder to breath when running, so " -#~ "you'll\n" -#~ "move more slowly. To check encumbrance, press @." -#~ msgstr "" -#~ "你刚刚穿上那套衣服可以形成环境防护。最\n" -#~ "常见也是重要的是呼吸设备,它们能从烟雾、\n" -#~ "空气毒素、微生物和其他常见的危害中保护\n" -#~ "你。然而,它们也使你不能顺畅地呼吸,你会\n" -#~ "移动得更慢。按“@”,检查\"累赘度\"。" +#~ msgid "pumping gas" +#~ msgstr "抽气" -#~ msgid "" -#~ "You just put on an article of clothing that provides ample storage " -#~ "space.\n" -#~ "This will allow you to carry much more stuff, but be aware that there is " -#~ "also\n" -#~ "a limit on the weight you can carry which depends on strength. The item " -#~ "you\n" -#~ "put on also encumbered your torso. This will make combat a little more\n" -#~ "difficult. To check encumbrance, press @." -#~ msgstr "" -#~ "你刚穿上了一件提供携带空间的衣服,这将允许你携带更多\n" -#~ "的东西,但要知道,还有你的体重可以决定行动强度极限。 \n" -#~ "你穿上的衣物也会拖累你的身体各部分。这将使战斗更困难 \n" -#~ "的,阻碍行动,按@可查看人物状态。" +#~ msgid "training" +#~ msgstr "训练" -#, fuzzy -#~ msgid "Start cart construction" -#~ msgstr "开始车辆建造" +#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." +#~ msgstr "%s 停止 %s ?(Y)是,(N)否,(I)忽略干扰并直到结束。" -#, fuzzy -#~ msgid "Enter new cart name:" -#~ msgstr "输入新的车辆名字" +#~ msgid "%s Stop %s?" +#~ msgstr "%s 停止 %s" -#, fuzzy -#~ msgid "Cart" -#~ msgstr "高尔夫球车" +#~ msgid "Open" +#~ msgstr "打开" -#, fuzzy -#~ msgid "Very Heavily Bleeding " -#~ msgstr "重度热依赖" +#~ msgid "Close" +#~ msgstr "关闭" -#, fuzzy -#~ msgid "%1$s quickly strike with %2$s %3$s at %4$s" -#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" +#~ msgid "Smash" +#~ msgstr "粉碎" -#, fuzzy -#~ msgid "%1$s quickly strikes with %2$s %3$s at %4$s" -#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" +#~ msgid "You swing at the corpse." +#~ msgid_plural "You swing at the corpses." +#~ msgstr[0] "你猛击尸体。" -#, fuzzy -#~ msgid "%1$s use %2$s %3$s to wrap up %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" +#~ msgid "You greatly damage the %s!" +#~ msgstr "你巨大的损坏了 %s !" -#, fuzzy -#~ msgid "%1$s uses %2$s %3$s to wrap up %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" +#~ msgid "You damage the %s!" +#~ msgstr "你损坏了 %s !" -#, fuzzy -#~ msgid "%1$s use %2$s %3$s to sweep %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" +#~ msgid "The corpse is now thoroughly pulped." +#~ msgstr "尸体彻底变成肉酱了。" -#, fuzzy -#~ msgid "%1$s uses %2$s %3$s to sweep %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" +#~ msgid " where? (Direction button)" +#~ msgstr " 哪个方向?(方向按钮)" -#, fuzzy -#~ msgid "%1$s elbow %4$s" -#~ msgstr "%1$s 抛投 %4$s" +#~ msgid "Control vehicle" +#~ msgstr "控制交通工具" -#, fuzzy -#~ msgid "%1$s elbows %4$s" -#~ msgstr "%1$s 抛投 %4$s" +#~ msgid "Examine" +#~ msgstr "E查看" -#, fuzzy -#~ msgid "%1$s flying knees %4$s" -#~ msgstr "%1$s 劈 %4$s" +#~ msgid "Peek" +#~ msgstr "偷窥" -#, fuzzy -#~ msgid "%1$s surprise attack %4$s" -#~ msgstr "%1$s 反击 %4$s" +#~ msgid "You dont see any items around you!" +#~ msgstr "周围你没有看见任何物品!" -#, fuzzy -#~ msgid "%1$s side-kicks %4$s" -#~ msgstr "%1$s 旋风踢 %4$s" +#~ msgid "Fill a container?" +#~ msgstr "填充一个容器?" -#, fuzzy -#~ msgid "%1$s sweep-kicks %4$s" -#~ msgstr "%1$s 旋风踢 %4$s" +#~ msgid "Have a drink?" +#~ msgstr "喝一杯?" -#, fuzzy -#~ msgid "24 hour time" -#~ msgstr "24小时制" +#~ msgid "There's no vehicle to grab there!" +#~ msgstr "这附近没有可挂扣的车辆." -#~ msgid "This should never happen... I think." -#~ msgstr "这绝不该发生...我认为。" +#~ msgid "Refill vehicle" +#~ msgstr "给车灌油" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Drop" +#~ msgstr "丢弃" -#~ msgid "Fusion blast" -#~ msgstr "核爆" +#~ msgid "You need a charged UPS." +#~ msgstr "你需要一个充过电的UPS。" -#~ msgid "Lightning" -#~ msgstr "闪电" +#~ msgid "Butcher the %s corpse?" +#~ msgstr "屠宰 %s 的尸体?" -#~ msgid "smash" -#~ msgstr "哗啦~" +#~ msgid "Wield item: Press - to choose a style" +#~ msgstr "装备物品:按下'-'键选择一个类型" #~ msgid "" -#~ "A human body, stumbling slowly forward on\n" -#~ "uncertain legs, possessed with an\n" -#~ "unstoppable rage." +#~ "Whoa. Whoa. Hey. This game requires a minimum terminal size of %dx%d. " +#~ "I'm\n" +#~ "sorry if your graphical terminal emulator went with the woefully-" +#~ "diminutive\n" +#~ "%dx%d as its default size, but that just won't work here. Now stretch " +#~ "the\n" +#~ "window until you've got it at the right size (or bigger).\n" #~ msgstr "" -#~ "一个人类身躯,缓慢的蹒跚前行\n" -#~ "颤巍巍的双腿,充满了\n" -#~ "无法抑制的愤怒。" +#~ "嗨!这个游戏要求你的游戏窗口尺寸最小不能低于%d*%d。\n" +#~ "但是你的终端尺寸默认为%d*%d,这样不能游戏。\n" +#~ "现在请你手动调整窗口大小直至合适尺寸(或者更大一些)。\n" #~ msgid "" -#~ "A red ant the size of a crocodile. It is\n" -#~ "covered in chitinous armor, and has a\n" -#~ "pair of vicious mandibles." +#~ "Many important items can be very hard to find, or will cost a great deal " +#~ "of\n" +#~ "money to trade for. Fortunately, it is possible to craft a wide variety " +#~ "of\n" +#~ "goods with the proper tools, materials, and training.\n" +#~ "\n" +#~ "Some recipes require a set of tools. These are not used up when " +#~ "crafting,\n" +#~ "so you can keep your tool set. All recipes require one or more " +#~ "ingredients.\n" +#~ "These ARE used up in crafting.\n" +#~ "\n" +#~ "%sThere are five categories; Weapons, Food, \n" +#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" +#~ "no skill to create, the majority require you to have some knowledge:\n" +#~ "\n" +#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" +#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" +#~ "at higher levels, you have an understanding of chemistry and can make\n" +#~ "chemical weapons and beneficial elixirs.\n" +#~ "->Electronics skill lets you make a wide variety of tools with intricate " +#~ "uses.\n" +#~ "->Tailoring skill is used to create basic clothing, and later tough " +#~ "armor.\n" +#~ "\n" +#~ "In addition to the primary crafting skills, other skills may be " +#~ "necessary\n" +#~ "to create certain items. Traps skill, Firearms skill, and First Aid " +#~ "skill\n" +#~ "are all required for certain items." #~ msgstr "" -#~ "鳄鱼大小的红蚂蚁。在\n" -#~ "坚硬的甲壳盔甲下,有\n" -#~ "一对凶恶的大颌。" - -#~ msgid "It is too dark to plant anything now." -#~ msgstr "光线不足,无法种植。" - -#~ msgid "---------------" -#~ msgstr "---------------" - -#~ msgid "weigth_factor: %f" -#~ msgstr "权重因子:%f" +#~ "本作中很多重要的物品都不是太容易找到,即使想通过交易来购买可能这个价格\n" +#~ "也不是轻易能够承担的,索性,只要有合适的工具和材料,你的角色可以自行制" +#~ "作。\n" +#~ "\n" +#~ " 有些物品的制作需要用到不止一件工具,拥有这些工具可以进行多次制作;而" +#~ "所\n" +#~ "有的物品都需要一种或更多的材料来进行制作,这些材料在制作之后都会被消耗" +#~ "掉。\n" +#~ "\n" +#~ "%s一共有五大类,武器、食物、电器、护甲及其\n" +#~ "它,虽然有些物品的制作不需要专业的技能,但大多数物品的制作都需要角色具有" +#~ "相\n" +#~ "对应的技能:\n" +#~ "\n" +#~ "->机械技能对于制作武器、陷阱和一些工具来说很重要;\n" +#~ "->烹调技能只需要较低的等级就能陆续做出可口的食物,而随着等级的提高你会对" +#~ "化\n" +#~ " 学有更深的认识,甚至能够制造化学武器和强化药剂;\n" +#~ "->电子技能会影响许多复杂工具的使用,在游戏的整个过程中都有用到;\n" +#~ "->裁缝技能可以让你制作各类服装以及一些护甲\n" +#~ "\n" +#~ "除了上述主要技能以外,其他一些比如陷阱技能、火器技能、急救技能等也会影响" +#~ "到\n" +#~ "特定物品的制作。" -#~ msgid "Material_factor: %f" -#~ msgstr "材料系数:%f" +#~ msgid "" +#~ "While sleeping in dangerous territory, it may be wise to set traps to " +#~ "ward\n" +#~ "off unwanted intrusions. There are a few traps to be found in the world,\n" +#~ "most notably bubblewrap (which will make a loud noise if stepped on, " +#~ "helping\n" +#~ "to wake you up) and bear traps (which make noise AND damage and trap " +#~ "anything\n" +#~ "that steps on them). Others need to be crafted; this requires the Traps " +#~ "skill\n" +#~ "and possibly Mechanics.\n" +#~ "\n" +#~ "To set a trap, simply use the item%s and choose a direction; the trap\n" +#~ "will be placed on an adjacent tile. Some traps may require additional " +#~ "tools,\n" +#~ "like a shovel, to be set. Once set, a trap will remain in place until\n" +#~ "stepped on or disarmed.\n" +#~ "\n" +#~ "To disarm a trap, examine%s the space it is on. Your success depends\n" +#~ "upon your Traps skill and Dexterity. If you succeed, the trap is removed\n" +#~ "and replaced by some or all of its constituent parts; however, if you " +#~ "fail,\n" +#~ "there is a chance that you will set off the trap, suffering the " +#~ "consequences.\n" +#~ "\n" +#~ "Many traps are fully or partially hidden. Your ability to detect traps " +#~ "is\n" +#~ "entirely dependent upon your Perception. Should you stumble into a trap, " +#~ "you\n" +#~ "may have a chance to avoid it, depending on your Dodge skill." +#~ msgstr "" +#~ "如果你万不得已需要睡在荒郊野外,最好能够在周围设置一些陷阱以防止不速之\n" +#~ "客的到来。有些陷阱在游戏中比较容易找到,比如气泡陷阱(会产生噪音来唤醒玩" +#~ "家)\n" +#~ "和捕兽夹(产生噪音的同时也能造成伤害),其他更复杂的陷阱就需要玩家自行制" +#~ "作,\n" +#~ "这会需要用到陷阱技能和一些机械技能。\n" +#~ "\n" +#~ " 像普通物品一样使用陷阱(%s)并选择一个方向就能把陷阱设置在与玩家\n" +#~ "相邻的位置,有些陷阱在设置时需要用到一些工具,比如铲子等,一旦设置成功," +#~ "这\n" +#~ "个陷阱就会留在那个位置,只要被人触发或者解除。\n" +#~ "\n" +#~ " 想要解除一个陷阱,需要对着陷阱所在的位置按%s键,成功与否取决于玩家的" +#~ "陷\n" +#~ "阱技能和灵巧度,如果你成功了,陷阱就会被解除被被分解成部分或全部的材料;" +#~ "如\n" +#~ "果解除失败,你就会尝到陷阱给你带来的愉♂悦。\n" +#~ "\n" +#~ " 很多陷阱都会被隐藏得很好,所以你的感知度将影响你探测陷阱的能力;一旦" +#~ "你\n" +#~ "踩上了一个陷阱,如果你的回避能力够高的话,依旧有机会能够躲开。" -#~ msgid "---DebugINFO---" -#~ msgstr "---调试信息---" +#~ msgid "Error: Item Missing." +#~ msgstr "错误: 道具丢失。" #~ msgid "" -#~ "If true, the crafting menus will display recipes that you can craft " -#~ "before other recipes" -#~ msgstr "如果设置为是,制作菜单将会把你能制作的项目给排在其他项目之前。" - -#~ msgid "Sort Crafting menu" -#~ msgstr "制作菜单的排序" +#~ "There is only the space where an object should be, but isn't. No item " +#~ "template of this type exists." +#~ msgstr "" +#~ "这里有个可以存放物体的空间,但是它并不是,它的模版不支持任何种类的模型。" -#~ msgid "Allow zombies to revive after a certain amount of time." -#~ msgstr "允许丧尸一定时间后复活。" +#~ msgid "" +#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" +#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " +#~ "allows\n" +#~ "you an extra dodge and two extra blocks on the following round." +#~ msgstr "" +#~ "空手道是一个流行的武术,源自日本。它以\n" +#~ "快速且准确的攻击和移动著称。每次击中都\n" +#~ "能增加下回合的闪避与格挡。" -#~ msgid "Revive zombies" -#~ msgstr "丧尸复活" +#~ msgid "karate" +#~ msgstr "空手道" -#~ msgid "custom vehicle template/placeholder" -#~ msgstr "自定义车辆模板/占位" +#~ msgid "%1$s quickly punch %4$s" +#~ msgstr "%1$s 敏捷地猛击 %4$s" -#~ msgid "null" -#~ msgstr "空" +#~ msgid "%1$s block %4$s" +#~ msgstr "%1$s 格挡 %4$s" -#~ msgid "Using knife on worn equipment:" -#~ msgstr "在磨损的设备上使用小刀:" +#~ msgid "%1$s blocks %4$s" +#~ msgstr "%1$s 格挡 %4$s" -#~ msgid "Destination can only hold " -#~ msgstr "目标仅能承受 " +#~ msgid "%1$s karate chop %4$s" +#~ msgstr "%1$s 手斩 %4$s" #~ msgid "" -#~ "The massive frame of this weapon belies its monstrous power and a draw " -#~ "weight at the edge of human capability. The immense strain that this bow " -#~ "puts on the user comes at a drastic cost of accuracy and rate of fire, " -#~ "but the power and range rewarded is unparalleled." +#~ "Aikido is a Japanese martial art focused on self-defense, while " +#~ "minimizing\n" +#~ "injury to the attacker. It uses defense throws and disarms. Damage done\n" +#~ "while using this technique is halved, but pain inflicted is doubled." #~ msgstr "" -#~ "人类的弱小使这种巨型武器的荒谬威力(以及开弓磅数)变得微不足道。这种弓的使" -#~ "用者需要调动身力量拉弓以至于大幅牺牲了准确性和射度,但也换来了无与伦比的威" -#~ "力和射程。" +#~ "合气道是一种日本武术,集中在自卫同时最小化\n" +#~ "伤害攻击者。它使用防御抛投和缴械。使用这种\n" +#~ "技术虽然伤害减半但造成疼痛加倍。" -#~ msgid "65kg bow" -#~ msgstr "65kg巨型弓" +#~ msgid "aikido" +#~ msgstr "合气道" -#~ msgid "" -#~ "Among the most distinctive things about this bow are the curled arms that " -#~ "turn away from the archer at the ends. Due to high workmanship, the high " -#~ "draw weight is much more efficiently transferred into throwing the arrow. " -#~ "The strain does however put a great deal of strain onto the user, " -#~ "lowering both accuracy and rate of fire." -#~ msgstr "" -#~ "这把弓最具特色的部分就是远离弓手的末端曲臂。由于制作工艺高超,其高开弓磅数" -#~ "可以有效转化为箭头的动能。但使用者大力拉弓无疑会牺牲其准确性和发射速率。" +#~ msgid "%1$s feint at %4$s" +#~ msgstr "%1$s 佯攻 %4$s" -#~ msgid "50kg bow" -#~ msgstr "50公斤弓" +#~ msgid "%1$s throws %4$s" +#~ msgstr "%1$s 抛投 %4$s" #~ msgid "" -#~ "A bow with a draw strength rarely seen in modern day. The bow's power is " -#~ "akin to those of big game hunters in the safari. However, due to its draw " -#~ "weight, the draw time is slower, and the strain of the draw hinders " -#~ "accuracy." +#~ "Judo is a martial art that focuses on grabs and throws, both defensive " +#~ "and\n" +#~ "offensive. It also focuses on recovering from throws; while using judo, " +#~ "you\n" +#~ "will not lose any turns to being thrown or knocked down." #~ msgstr "" -#~ "这种弓有着当代少有的开弓磅数。其威力足以应付远征狩猎中的大型猎物。然而,由" -#~ "于开弓磅数较大,此弓的张弓速度慢,完全张弓也缺乏射击精准度。" +#~ "柔道是一种侧重于抓取并抛出武术,兼具防守\n" +#~ "与进攻。它还集中在防御抛投,使用柔道,你\n" +#~ "任何时候都不会被击倒在地。" -#~ msgid "40kg bow" -#~ msgstr "40公斤弓" +#~ msgid "judo" +#~ msgstr "柔道" #~ msgid "" -#~ "A bow that uses a set of pulleys to take the strain off the user when a " -#~ "bow is fully drawn to provide better accuracy. This does not mean however " -#~ "that the draw weight on these must be less than a bow with similar draw " -#~ "weight." +#~ "Though tai chi is often seen as a form of mental and physical exercise, " +#~ "it is\n" +#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " +#~ "the\n" +#~ "force of an attack makes your Perception decrease damage further on a " +#~ "block." #~ msgstr "" -#~ "一把带滑轮组的弓,能让使用者在完全开弓时保持稳定以保证射击精度。但这并不意" -#~ "味着这种弓的开弓磅数一定比其他有类似开弓磅数的弓小。" +#~ "虽然太极是通常被视为一种心理和身体的运动,它是\n" +#~ "一个正当的武术,他化攻击于无形,感知能力越强,\n" +#~ "受到的伤害就越低。" -#~ msgid "30kg bow compound" -#~ msgstr "30kg弓.复合型" +#~ msgid "tai chi" +#~ msgstr "太极" #~ msgid "" -#~ "With a draw weight slightly above what professional users use, this bow " -#~ "can take down medium game, and even large game with enough skill." +#~ "A dance-like style with its roots in Brazilian slavery, capoeira is " +#~ "focused\n" +#~ "on fluid movement and sweeping kicks. Moving a tile will boost attack " +#~ "and\n" +#~ "dodge; attacking boosts dodge, and dodging boosts attack." #~ msgstr "" -#~ "开弓磅数比专业用户用的弓更大。这把弓拿下中型猎物绰绰有余,而且只要有足够的" -#~ "技巧你还能用它狩猎大型猎物。" +#~ "源自巴西奴隶的一种类似跳舞的身法,巴西战舞的核心\n" +#~ "是流水般的移动和扫荡踢脚。每走一步都能提高攻击\n" +#~ "和躲避;而攻击可以提高躲避,躲避也能提高攻击。" -#~ msgid "30kg bow" -#~ msgstr "30kg弓" +#~ msgid "capoeira" +#~ msgstr "巴西战舞" -#~ msgid "" -#~ "A bow with a semi-powerful draw. Its relatively low draw weight gives a " -#~ "good draw speed, as well as precision for lack of strain on the user when " -#~ "the bow is fully drawn." -#~ msgstr "" -#~ "能用适中力量拉开的弓。其相对较低的拉弓磅数也使你的拉弓速度更快,但由于即使" -#~ "完全张弓也缺乏张力,这种弓不怎么精准。" +#~ msgid "%1$s bluff %4$s" +#~ msgstr "%1$s 吓唬 %4$s" -#~ msgid "20kg_bow" -#~ msgstr "20公斤弓" +#~ msgid "%1$s bluffs %4$s" +#~ msgstr "%1$s 吓唬 %4$s" -#~ msgid "" -#~ "Made using the most rudimentary knowledge of bows, this short and weak " -#~ "bow is just enough to take down small game in a shot or two." -#~ msgstr "" -#~ "依靠最基本的弓箭知识造出的弓。不过这种既短又弱的弓足以在一两场狩猎中拿下一" -#~ "个小目标。" +#~ msgid "%1$s low kick %4$s" +#~ msgstr "%1$s 下段踢击 %4$s" -#~ msgid "10kg bow" -#~ msgstr "10kg弓" +#~ msgid "%1$s low kicks %4$s" +#~ msgstr "%1$s 下段踢击 %4$s" -#~ msgid "" -#~ "An object that looks like a bow from afar, but closer inspection will " -#~ "reveal its simple nature. This is a bow someone with absolutely no " -#~ "knowledge of bows would make. Solely based on popular depictions from " -#~ "movies and video games, this object merely tries to look and act like a " -#~ "bow, nothing more." -#~ msgstr "" -#~ "从远处看上去像把弓,但仔细检查就会发现它如此的“浑然天成”…这就是完全没有弓箭" -#~ "知识的人所造的弓!它的蓝图是基于电影和电子游戏中所流行的外观!这个物品只是" -#~ "试图从外观和力学上模仿一张弓,仅此而已。" +#~ msgid "%1$s spin and hit %4$s" +#~ msgstr "%1$s 旋转冲击 %4$s" -#~ msgid "bow-like_object" -#~ msgstr "像弓一样的东西" +#~ msgid "%1$s spins and hits %4$s" +#~ msgstr "%1$s 旋转冲击 %4$s" -#~ msgid "" -#~ "A six-foot wooden bow that fires feathered arrows. This takes a fair " -#~ "amount of strength to draw. Arrows fired from this weapon have a good " -#~ "chance of remaining intact for re-use. It requires 10 strength to fire" -#~ msgstr "" -#~ "总长6英尺的木制长弓。需要有把子力气才能拉开。长弓射出的箭不易损坏,有很大" -#~ "的几率回收。需要10点力量来拉开它。" +#~ msgid "%1$s spin-kick %4$s" +#~ msgstr "%1$s 旋风踢 %4$s" + +#~ msgid "%1$s spin-kicks %4$s" +#~ msgstr "%1$s 旋风踢 %4$s" #~ msgid "" -#~ "A bow with wheels that fires high velocity arrows. Weaker people can use " -#~ "compound bows more easily. Arrows fired from this weapon have a good " -#~ "chance of remaining intact for re-use. It requires 8 strength to fire" +#~ "Originating in Israel, Krav Maga is based on taking down an enemy quickly " +#~ "and\n" +#~ "effectively. It focuses on applicable attacks rather than showy or " +#~ "complex\n" +#~ "moves. Popular among police and armed forces everywhere." #~ msgstr "" -#~ "一把带滑轮的弓,能让你高效地射箭。较弱的家伙也可以轻易使用复合弓。这种弓射" -#~ "出的箭能再利用的可能性更高。你需要8点力量来拉动它。" +#~ "KRAV MAGA(以色列防身术),以色列语的语意为“近身格斗”,被公认为世界上最纯正" +#~ "的防卫术。KRAV MAGA\n" +#~ "是一个完整的内容广泛的武打系统,内容包括运用自己身体各部去攻击敌人、自我防" +#~ "卫技术、反击打和\n" +#~ "脚踢技术、被动解脱术、摔投法、地面格斗术、徒手对刀术、徒手对棍术、徒手对枪" +#~ "术、反多人攻击术等。" -#~ msgid "Disinfectant" -#~ msgstr "消毒剂" +#~ msgid "krav maga" +#~ msgstr "以色列防身术" -#~ msgid "Bandage" -#~ msgstr "绷带" +#~ msgid "%1$s counter-attack %4$s" +#~ msgstr "%1$s 反击 %4$s" -#~ msgid "" -#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " -#~ "Though large and heavy compared to other spears, its accuracy and damage " -#~ "are unparalled." -#~ msgstr "" -#~ "一款中世纪武器,长长的木棍末端装有尖尖的铁锥。虽然又长又重,但是命中率和伤" -#~ "害性都是无与伦比的。" +#~ msgid "%1$s counter-attacks %4$s" +#~ msgstr "%1$s 反击 %4$s" #~ msgid "" -#~ "This fearsome robot is essentially an\n" -#~ "autonomous tank. It moves surprisingly fast\n" -#~ "on its treads, and is armed with a variety of\n" -#~ "deadly weapons." +#~ "Also referred to as the \"Art of 8 Limbs,\" Muay Thai is a popular " +#~ "fighting\n" +#~ "technique from Thailand that uses powerful strikes. It does extra damage\n" +#~ "against large or strong opponents." #~ msgstr "" -#~ "这可怕的机器人实质上就是\n" -#~ "一台可自主行动的坦克,能依靠它的履带\n" -#~ "进行出人意料的迅速机动,并且还装备有\n" -#~ "各式各样的致命武器。" +#~ "也被称为《八门的艺术》泰拳是一个受欢迎的\n" +#~ "战斗武术,当使用泰拳对大型或强劲的对手是\n" +#~ "能发挥额外的伤害。" -#~ msgid "" -#~ "A snake-shaped robot that tunnels through the\n" -#~ "ground slowly. When it emerges from the\n" -#~ "ground it can attack with its large, spike-\n" -#~ "covered head." -#~ msgstr "" -#~ "一个蛇形机器人,缓慢的在地下\n" -#~ "隧道移动。当它冒出地面的时候\n" -#~ "会用它覆盖长钉的头部攻击。" +#~ msgid "muay thai" +#~ msgstr "泰拳" -#~ msgid "" -#~ "A roughly spherical robot that hovers about\n" -#~ "five feet of the ground. Its front side is\n" -#~ "dominated by a huge eye and a flash bulb.\n" -#~ "Frequently used for reconaissance." -#~ msgstr "" -#~ "球形机器人大致盘旋约五英尺的\n" -#~ "地表。它的正面是由一个巨大的\n" -#~ "眼睛和一个闪光灯泡组成,通常\n" -#~ "执行侦查任务。" +#~ msgid "%1$s slap %4$s" +#~ msgstr "%1$s 掌掴 %4$s" -#~ msgid "" -#~ "Slender and terrifying, this gigantic man lacks\n" -#~ "any skin yet moves swiftly and gracefully without\n" -#~ "it. Wings of flesh protrude uselessly from his\n" -#~ "back and a third eye dominates his forehead." -#~ msgstr "" -#~ "细长而又可怕!这巨大的人体在完全没有皮\n" -#~ "肤的情况下动作迅速而优雅。无用的肉翅生\n" -#~ "在了它的背上,第三只眼睛占据了他的前额。" +#~ msgid "%1$s slaps %4$s" +#~ msgstr "%1$s 掌掴 %4$s" #~ msgid "" -#~ "A robot with an insectoid design, about\n" -#~ "the size of a small dog. It skitters\n" -#~ "quickly across the ground, two electric\n" -#~ "prods at the ready." +#~ "Ninjutsu is a martial art and set of tactics used by ninja in feudal " +#~ "Japan.\n" +#~ "It focuses on rapid, precise, silent strikes. Ninjutsu is entirely " +#~ "silent.\n" +#~ "It also provides small combat bonuses the turn after moving a tile." #~ msgstr "" -#~ "一台以昆虫为原型设计的机器人,\n" -#~ "约有一条狗的大小。它飞掠而过,\n" -#~ "两个电击触角随时准备攻击。" +#~ "忍术是在封建日本的忍者运用的武术。\n" +#~ "它着重于快速、精确、无声。忍术是完\n" +#~ "全无声。而且在每次移动后都有少量的\n" +#~ "攻击加成。" + +#~ msgid "ninjutsu" +#~ msgstr "忍术" #~ msgid "" -#~ "A pale white man with a physically flawless athletic\n" -#~ "body and shaved head. His eyes are completely black\n" -#~ "as bloody tears pour forth from them." +#~ "Taekwondo is the national sport of Korea, and was used by the South " +#~ "Korean\n" +#~ "army in the 20th century. Focused on kicks and punches, it also includes\n" +#~ "strength training; your blocks absorb extra damage the stronger you are." #~ msgstr "" -#~ "这个剃过头的苍白的男性躯体完美地保持者运动\n" -#~ "功能。原本眼睛的部位已经变成了一对流出血泪\n" -#~ "的黑洞。" +#~ "跆拳道是韩国国民运动,被韩国军队\n" +#~ "在20世纪。以其以其腾空、旋踢脚法\n" +#~ "而闻名。当你使用时你的力量越高,\n" +#~ "每次格挡受到的伤害越小。" -#~ msgid "A large snake, translucent black." -#~ msgstr "一条大蛇,黑色半透明。" +#~ msgid "taekwondo" +#~ msgstr "跆拳道" -#~ msgid "" -#~ "An insane individual with many bloody holes\n" -#~ "on the sides of their shaved head. Some form\n" -#~ "of lobotomy has left it with a partially re-\n" -#~ "animated brain." -#~ msgstr "" -#~ "顶着一个两侧开满血洞头颅的疯狂\n" -#~ "人形,拜某种额叶切除术所赐,他\n" -#~ "带着部分功能的大脑复活了。" +#~ msgid "%1$s brutally kick %4$s" +#~ msgstr "%1$s 抡踢 %4$s" -#~ msgid "" -#~ "A strange, immobile pink goo. It seems to\n" -#~ "be breathing slowly." -#~ msgstr "" -#~ "一个古怪的粉色粘状物固定在哪里,仔细观察\n" -#~ "就会发现它竟然正缓慢地呼吸着。" +#~ msgid "%1$s brutally kicks %4$s" +#~ msgstr "%1$s 抡踢 %4$s" -#~ msgid "" -#~ "This poor victim was sliced open and bled to\n" -#~ "death long ago. Yet, chained down it thrashes\n" -#~ "in eternal misery from its tortures." -#~ msgstr "" -#~ "这可怜的受害者在很久以前因为胸腔被刨开\n" -#~ "而流血至死。然而,因为这场灾变,它在束缚\n" -#~ "中痛苦挣扎,遭受着永恒的折磨。" +#~ msgid "tiger style" +#~ msgstr "少林虎拳" -#~ msgid "" -#~ "A strange dark area in the area. It whispers\n" -#~ "softly as it moves." -#~ msgstr "" -#~ "一篇奇怪的暗区。随着它的移动,这片\n" -#~ "区域不断发出轻声细语。" +#~ msgid "crane style" +#~ msgstr "少林鹤拳" -#~ msgid "" -#~ "A ropy, worm-like creature that flies on\n" -#~ "bat-like wings. Its form continually\n" -#~ "shifts and changes, twitching and\n" -#~ "writhing." -#~ msgstr "" -#~ "一个粘稠的,蠕虫状生物,用\n" -#~ "蝙蝠一样的翅膀飞行。它的\n" -#~ "形状不断变化转换,抽搐\n" -#~ "扭动。" +#~ msgid "%1$s hand-peck %4$s" +#~ msgstr "%1$s 手啄 %4$s" -#~ msgid "Mi-go" -#~ msgstr "米-戈" +#~ msgid "%1$s hand-pecks %4$s" +#~ msgstr "%1$s 手啄 %4$s" -#~ msgid "" -#~ "An enormous white flatworm writhing\n" -#~ "beneath the earth. Poking from the\n" -#~ "ground is a bulbous head dominated by a\n" -#~ "pink mouth, lined with rows of fangs." -#~ msgstr "" -#~ "一个巨大的白色扁形虫在地\n" -#~ "底下翻滚。从地上戳出来的\n" -#~ "是是一个有着粉红色嘴的球\n" -#~ "状头,里面排满了獠牙。" +#~ msgid "%1$s swiftly jabs %4$s" +#~ msgstr "%1$s 迅疾戳刺 %4$s" -#~ msgid "gelatinous blob" -#~ msgstr "胶质粘液团" +#~ msgid "%1$s strike %4$s with leopard fist" +#~ msgstr "%1$s 用豹拳殴击 %4$s" -#~ msgid "" -#~ "A pinkish, fungoid crustacean-like\n" -#~ "creature with numerous pairs of clawed\n" -#~ "appendages and a head covered with waving\n" -#~ "antennae." -#~ msgstr "" -#~ "一种浅桃色,龙虾状菌类\n" -#~ "生物,附着着无数双爪子\n" -#~ ",头部覆盖着满满一层的\n" -#~ "浓密触角正激烈挥舞着。" +#~ msgid "snake style" +#~ msgstr "少林蛇拳" -#~ msgid "" -#~ "A shapeless blob the size of a cow. It\n" -#~ "oozes slowly across the ground, small\n" -#~ "chunks falling off of its sides." -#~ msgstr "" -#~ "一坨牛大小的不定西团缓慢地在地\n" -#~ "面蠕动,并在自身周围不断地剥落\n" -#~ "分裂。" - -#~ msgid "" -#~ "A twisting spot in the air, with some kind\n" -#~ "of morphing mass at its center." -#~ msgstr "" -#~ "半空中出现的扭曲点,里面有\n" -#~ "某种已经蜷曲变形的东西。" - -#~ msgid "" -#~ "An amorphous mass of twisting black flesh\n" -#~ "that flies through the air swiftly." -#~ msgstr "" -#~ "一坨形状怪异扭曲的黑色肉团\n" -#~ "从空中迅速飞过。" - -#~ msgid "" -#~ "A human body, but with its limbs, neck, and\n" -#~ "hair impossibly twisted." -#~ msgstr "" -#~ "一个人的躯体, 四肢、颈部,和\n" -#~ "毛发都都难以名状地扭曲着。" - -#~ msgid "A large snail, with an oddly human face." -#~ msgstr "一只恶臭的有奇怪人脸的巨型蜗牛。" +#~ msgid "%1$s snakebite %4$s" +#~ msgstr "%1$s 蛇咬 %4$s" -#~ msgid "" -#~ "An amorphous black creature which seems to\n" -#~ "sprout tentacles rapidly." -#~ msgstr "" -#~ "不定形的黑色生物似乎\n" -#~ "正迅速萌发着触手。" +#~ msgid "%1$s snakebites %4$s" +#~ msgstr "%1$s 蛇咬 %4$s" -#~ msgid "" -#~ "A spindly body, standing at least 15 feet\n" -#~ "tall. It looks vaguely human, but its face is\n" -#~ "grotesquely stretched out, and its limbs are\n" -#~ "distorted to the point of being tentacles." -#~ msgstr "" -#~ "一具细长的躯体,至少15英尺高。\n" -#~ "它看起来像是抽象的不成人形的\n" -#~ "人体,它的面部怪异的伸展着,\n" -#~ "它的四肢如触手般怪异地扭曲。" +#~ msgid "%1$s writhe free from %4$s" +#~ msgstr "%1$s从%4$s里挣扎出来" -#~ msgid "Amigara horror" -#~ msgstr "阿弥壳之怪" +#~ msgid "%1$s writhes free from %4$s" +#~ msgstr "%1$s从%4$s里挣扎出来" -#~ msgid "" -#~ "A huge, black worm, its flesh glistening\n" -#~ "with an acidic, blue slime. It has a gaping\n" -#~ "round mouth lined with dagger-like teeth." -#~ msgstr "" -#~ "一个巨大的黑色虫子, 他荧光的血肉\n" -#~ "中满是酸性的蓝色粘液。它的大圆口满\n" -#~ "是匕首般尖牙。" +#~ msgid "dragon style" +#~ msgstr "龙形" -#~ msgid "" -#~ "A spider with a characteristic red\n" -#~ "hourglass on its black carapace. It is\n" -#~ "known for its highly toxic venom." -#~ msgstr "" -#~ "这种蜘蛛的甲壳上有着红色\n" -#~ "漏斗形纹路。它因剧毒毒液\n" -#~ "而闻名。" +#~ msgid "%1$s use dragon strike on %4$s" +#~ msgstr "%1$s 施展出龙拳猛烈攻击 %4$s" -#~ msgid "" -#~ "A large spider with a bulbous thorax. It\n" -#~ "creates a subterranean nest and lies in\n" -#~ "wait for prey to fall in and become trapped\n" -#~ "in its webs." -#~ msgstr "" -#~ "一只有着球形胸部的大蜘蛛。它\n" -#~ "精心的构造地下巢穴正等待猎物\n" -#~ ",他们将在死前将被困于地下的\n" -#~ "蛛网中。" +#~ msgid "%1$s uses dragon strike on %4$s" +#~ msgstr "%1$s 施展出龙拳猛烈攻击 %4$s" -#~ msgid "Thing" -#~ msgstr "怪形" +#~ msgid "centipede style" +#~ msgstr "蜈蚣拳" -#~ msgid "" -#~ "A dog's body with a mass of ropy, black\n" -#~ "tentacles extending from its head." -#~ msgstr "" -#~ "狗躯体覆盖着大量粘液, 黑色的\n" -#~ "触手纷纷从原本的头部冒了出来。" +#~ msgid "%1$s swiftly hits %4$s" +#~ msgstr "%1$s 迅速打击 %4$s" -#~ msgid "" -#~ "A small, almost cute-looking spider. It\n" -#~ "leaps so quickly that it almost appears to\n" -#~ "instantaneously move from one place to\n" -#~ "another." -#~ msgstr "" -#~ "一只小的,长相可爱的蜘蛛。它\n" -#~ "跳跃的速度如此之快,在视觉上\n" -#~ "几乎瞬移般从一个地方移动到\n" -#~ "另一个地方。" +#~ msgid "scorpion style" +#~ msgstr "毒蝎拳" -#~ msgid "" -#~ "A yellow spider the size of a dog. It lives\n" -#~ "in webs, waiting for prey to become\n" -#~ "entangled before pouncing and biting." -#~ msgstr "" -#~ "一只狗大小的黄色的蜘蛛。它生活\n" -#~ "在它们的蛛网里,在猛扑并撕咬\n" -#~ "前会静待猎物成为瓮中之鳖。" +#~ msgid "%1$s strike %4$s with spincer fist" +#~ msgstr "%1$s 用蝎拳猛烈地殴打 %4$s" -#~ msgid "" -#~ "A wasp-like flying insect, smaller than most\n" -#~ "mutated wasps. It does not looke very\n" -#~ "threatening, but has a large ovipositor in\n" -#~ "place of a sting." -#~ msgstr "" -#~ "一只形似黄蜂的飞行昆虫,小\n" -#~ "于大多数突变黄蜂。虽然看上\n" -#~ "去并不凶悍,但它的尾刺中藏\n" -#~ "有异常发达的产卵器。" +#~ msgid "%1$s strikes %4$s with spincer fist" +#~ msgstr "%1$s 用蝎拳猛烈地殴打 %4$s" #~ msgid "" -#~ "A large, brown spider, which moves quickly\n" -#~ "and aggresively." +#~ "One of the Five Deadly Venoms. Lizard Style focuses on using walls to " +#~ "one's\n" +#~ "advantage. Moving alongside a wall will make you run up along it, giving " +#~ "you\n" +#~ "a large to-hit bonus. Standing by a wall allows you to use it to boost " +#~ "dodge." #~ msgstr "" -#~ "一只棕色的大蜘蛛。迅速,\n" -#~ "侵略性强。" +#~ "五毒拳法中的一种。蜥蜴拳着重利用墙壁提升威力。\n" +#~ "靠着墙壁移动会使你爬到墙上,并给你极大的攻击\n" +#~ "加成。站在墙边则让你能够利用墙增强躲避。" -#~ msgid "" -#~ "A fat, white grub the size of your foot, with\n" -#~ "a set of mandibles that look more suited for\n" -#~ "digging than fighting." -#~ msgstr "" -#~ "一条和你脚般长的肥胖白蛆\n" -#~ "。比起用于战斗,它的上下\n" -#~ "颚貌似更适于挖洞。" +#~ msgid "lizard style" +#~ msgstr "毒蜥拳" -#~ msgid "queen triffid" -#~ msgstr "三尖女王" +#~ msgid "toad style" +#~ msgstr "毒蟾拳" -#~ msgid "young triffid" -#~ msgstr "三尖树苗" +#~ msgid "zui quan" +#~ msgstr "醉拳" -#~ msgid "" -#~ "A small triffid, only a few feet tall. It\n" -#~ "has not yet developed bark, but its sting\n" -#~ "is still sharp and deadly." -#~ msgstr "" -#~ "一丛小三尖树,只有几英尺高。\n" -#~ "尚未长出树皮,但是它的刺\n" -#~ "仍然锋利和致命。" +#~ msgid "7: %s" +#~ msgstr "7:%s" -#~ msgid "" -#~ "A very large triffid, with a particularly\n" -#~ "vicious sting and thick bark. As it\n" -#~ "moves, plant matter drops off its body\n" -#~ "and immediately takes root." -#~ msgstr "" -#~ "一颗庞大的巨行三尖树,覆盖着特别\n" -#~ "恶毒的钩刺和厚厚的树皮。\n" -#~ "当它移动的时候,植物物质从它身上剥落\n" -#~ "并立即生根发芽。" +#~ msgid "8: Exit" +#~ msgstr "8:退出" -#~ msgid "young fungaloid" -#~ msgstr "真菌幼体" +#~ msgid "Stop Bleeding" +#~ msgstr "止血" -#~ msgid "" -#~ "A fine glass tube with a bulb on the end, used in partaking of certain " -#~ "illicit substances." -#~ msgstr "" -#~ "像极了一只精巧的玻璃烧瓶,其球状底部可以用火灼烧。用来享用某些非法的违禁物" -#~ "质,你懂的。" +#~ msgid "You stopped the bleeding." +#~ msgstr "你止住了血" -#~ msgid "You wake up to the ringing of an alarm-clock." -#~ msgstr "闹钟的铃声把你从睡梦中唤醒。" +#~ msgid "Clean Wound" +#~ msgstr "清洗伤口" -#~ msgid "%1$s clobber %4$s" -#~ msgstr "%1$s 痛打 %4$s" +#~ msgid "You clean the bite wound." +#~ msgstr "你清理了伤口" -#~ msgid "%1$s clobbers %4$s" -#~ msgstr "%1$s 痛击 %4$s" +#~ msgid "You disinfect the bite wound." +#~ msgstr "你将咬伤消毒。" -#~ msgid "%1$s pokes %4$s" -#~ msgstr "%1$s 捅刺 %4$s" +#~ msgid "Put the dog food" +#~ msgstr "把狗粮" -#~ msgid "%1$s hack %4$s" -#~ msgstr "%1$s 劈砍 %4$s" +#~ msgid "Light" +#~ msgstr "亮" -#~ msgid "%1$s poke %4$s" -#~ msgstr "%1$s 捅杀 %4$s" +#~ msgid "Pry" +#~ msgstr "撬" -#~ msgid "%1$s hacks %4$s" -#~ msgstr "%1$s 劈杀 %4$s" +#~ msgid "You don't have enough batteries!" +#~ msgstr "你没有足够的电池!" -#~ msgid "%1$s slice %4$s" -#~ msgstr "%1$s 切割 %4$s" +#~ msgid "You don't have enough battery power to purify all the water." +#~ msgstr "你没有足够的电池净化所有的水。" -#~ msgid "%1$s cut %4$s" -#~ msgstr "%1$s 切削 %4$s" +#~ msgid "You add a %s location to your map." +#~ msgstr "你在地图上标出了 %s 的位置。" -#~ msgid "%1$s slices %4$s" -#~ msgstr "%1$s 切击 %4$s" +#~ msgid "It's %d squares to the %s" +#~ msgstr "有%d格的距离到%s" -#~ msgid "%1$s nick %4$s" -#~ msgstr "%1$s 砸刻 %4$s" +#~ msgid "You can't find a hospital near your location." +#~ msgstr "你无法在附近找到医院。" -#~ msgid "%1$s cuts %4$s" -#~ msgstr "%1$s 削砍 %4$s" +#~ msgid "Use your pick lock" +#~ msgstr "使用你选择的锁" -#~ msgid "%1$s nicks %4$s" -#~ msgstr "%1$s 凿刻 %4$s" +#~ msgid "The door swings open..." +#~ msgstr "门开了……" -#~ msgid "%1$s stabs %4$s" -#~ msgstr "%1$s 刺击 %4$s" +#~ msgid "Siphon from" +#~ msgstr "抽取" -#~ msgid "%1$s hits %4$s" -#~ msgstr "%1$s 挥打 %4$s" +#~ msgid "Drill" +#~ msgstr "钻头" -#~ msgid "%1$s jabs %4$s" -#~ msgstr "%1$s 猛戳 %4$s" +#~ msgid "Place trap" +#~ msgstr "放置陷阱" -#~ msgid "%1$s jab %4$s" -#~ msgstr "%1$s 戳击 %4$s" +#~ msgid "You set the bubblewrap on the ground, ready to be popped." +#~ msgstr "你在地上安置了警戒陷阱。" -#~ msgid "the %s" -#~ msgstr "<目标> %s" +#~ msgid "Bury the landmine?" +#~ msgstr "埋设地雷?" -#~ msgid "%1$s strikes %4$s" -#~ msgstr "%1$s 精准的打击对 %4$s" +#~ msgid "You bury the landmine." +#~ msgstr "你埋设了地雷." -#~ msgid "%1$s grabs %4$s" -#~ msgstr "%1$s 抓住了 %4$s" +#~ msgid "You set the landmine." +#~ msgstr "你设置了地雷." -#~ msgid "%1$s grab %4$s" -#~ msgstr "%1$s 擒住了 %4$s" +#~ msgid "Place the turret" +#~ msgstr "设置炮塔" -#~ msgid "%1$s disarms %4$s" -#~ msgstr "%1$s 缴械了 %4$s" +#~ msgid "Your tazer crackles in the air." +#~ msgstr "你的tazer在空中发出爆裂声。" -#~ msgid "%1$s feints at %4$s" -#~ msgstr "%1$s 虚晃向 %4$s" +#~ msgid "Cut up metal" +#~ msgstr "切割金属" -#~ msgid "%1$s jabs %2$s %3$s at %4$s" -#~ msgstr "%1$s 精准地刺出 %2$s %3$s 对 %4$s" +#~ msgid "Pitch the tent" +#~ msgstr "安置帐篷" -#~ msgid "%1$s throw %4$s" -#~ msgstr "%1$s 投摔 %4$s" +#~ msgid "Put up the shelter" +#~ msgstr "建造避难所" #~ msgid "" -#~ "This is an advertisement for Robert's Universal Robotics brand law " -#~ "enforcement robots. It shows a picture of tripod robot incinerating a mob " -#~ "of looters and stepping over charred and smoking corpses. The caption " -#~ "reads: \"Built to Protect. Programmed to Serve.\"" +#~ "You neatly sever all of the veins\n" +#~ "and arteries in your body. Oh wait,\n" +#~ "Never mind." #~ msgstr "" -#~ "这是一张 罗伯特通用机器人技术公司 执法机器人的广告传单。它展示了这样一副画" -#~ "面,三脚机器人丧心病狂地踩着一堆烧焦冒烟的尸体将一群劫掠暴徒烧成渣。标题写" -#~ "着:“专业护卫制造,专业服务保障。”" - -#~ msgid "%1$s power-kick %4$s" -#~ msgstr "%1$s 用力踢向 %4$s" - -#~ msgid "%1$s power-kicks %4$s" -#~ msgstr "%1$s 奋力踢击 %4$s" - -#~ msgid "%1$s strike %4$s" -#~ msgstr "%1$s 精确打击了 %4$s" - -#~ msgid "%1$s disarm %4$s" -#~ msgstr "%1$s 缴械了 %4$s" - -#~ msgid "%1$s quickly punches %4$s" -#~ msgstr "%1$s 迅速打向 %4$s" +#~ "你熟练地割断了你的身体\n" +#~ "所有的静脉和动脉。哦,\n" +#~ "等一下,不要介意。" -#~ msgid "%1$s karate chops %4$s" -#~ msgstr "%1$s 掌劈 %4$s" +#~ msgid "You managed to stop the bleeding." +#~ msgstr "你设法去止血。" -#~ msgid "%1$s jab %2$s %3$s at %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 精准地刺杀 %4$s" +#~ msgid "You couldn't stop the bleeding." +#~ msgstr "你无法止血。" -#~ msgid "%1$s slams %2$s %3$s against %4$s" -#~ msgstr "%1$s 结实地把 %2$s %3$s 砸在 %4$s 上" +#~ msgid "That isn't knife!" +#~ msgstr "那个不是刀!" #~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire." +#~ "Your memory has been enhanced with small quantum storage drives. Any " +#~ "time you start to forget a skill, you have a chance at retaining all " +#~ "knowledge, at the cost of a small amount of poweron." #~ msgstr "" -#~ "经典的ZIPPO打火机,可以用来点燃香烟、燃烧瓶之类的东西。还可以用来生火,从" -#~ "而点燃附近的可燃物。同时还是NPC的应急食物。" - -#~ msgid "You feel terrible for killing %s!" -#~ msgstr "杀掉%s让你备受煎熬!" +#~ "你使用了微型量子储存元件强化了你的记忆。任何时候当你即将遗忘某个技能时,你" +#~ "将有几率保留所有已获得的知识,仅需消耗一些能量。" #~ msgid "" -#~ "You just drank a bottle of water, reducing your thirst level and reducing " -#~ "the\n" -#~ "water level in the bottle. You'll probably want to drop empty bottles,\n" -#~ "or you might want to save them to refill from a water source later." +#~ "Inside your body is a fleet of tiny dormant robots. Once charged from " +#~ "your energy banks, they will flit about your body, repairing any damage." #~ msgstr "" -#~ "你喝了一瓶水,这减轻了你的口渴和瓶装\n" -#~ "水的水位。你可能会想要丢弃空瓶,或者\n" -#~ "你可能想留着以后装水。" - -#~ msgid "Activate your bio lockpick" -#~ msgstr "激活你的生化开锁器" - -#~ msgid "OTD" -#~ msgstr "新讯息" - -#~ msgid "You cannot remove mount point while something is attached to it." -#~ msgstr "你不能拆除连接其他部分的部件。" +#~ "你的体内植入了一队纳米机器人。一旦你对它们进行充能,它们就会飞出体外,对你" +#~ "的身体进行修复。" -#~ msgid " to remove parts." -#~ msgstr "来拆除部件。" +#~ msgid "" +#~ "Powerful heatsinks supermaterials are woven into your flesh. While " +#~ "powered, this system will prevent heat damage up to 2000 degrees " +#~ "fahrenheit. Note that this does not affect your internal temperature." +#~ msgstr "" +#~ "你的肉体被植入了强大的热能防护材料。当系统激活时,它可以阻挡高达2000华氏度" +#~ "的高温伤害。注意,该系统不会影响你的身体温度。" -#~ msgid "You also need a wrench and %s to replace broken one." -#~ msgstr "你需要扳手和%s来替换这个损坏的部件。" +#~ msgid "long underwear" +#~ msgstr "秋裤" -#~ msgid "You need level %d skill in mechanics." -#~ msgstr "你需要机械:%d级。" +#~ msgid "" +#~ "A long cotton dress. Difficult to move in and lacks any storage space." +#~ msgstr "这是一件棉质礼服,虽然非常漂亮但穿着它活动会很困难。" -#~ msgid "You need a powered welder to repair." -#~ msgstr "你需要一个 有电的焊枪 才能维修。" +#~ msgid "" +#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " +#~ "will provide excellent protection against ambient radiation." +#~ msgstr "危险物品防护装。虽然看上去十分庞大和沉重,但可以防辐射。" -#~ msgid " skill in mechanics to install additional engine." -#~ msgstr "的机械技能来安装额外的发动机。" +#~ msgid "plate mail" +#~ msgstr "板甲" -#~ msgid " You also need level " -#~ msgstr "你还需要 " +#~ msgid "A thin cotton jacket. Good for brisk weather." +#~ msgstr "一件薄棉夹克。清新凉爽的天气里穿上它很适宜。" -#~ msgid " skill in mechanics." -#~ msgstr " 的机械" +#~ msgid "A padded coat with deep pockets. Very warm." +#~ msgstr "有着大口袋的棉衣,相当保暖。" -#~ msgid ", and level " -#~ msgstr ",和级别 " +#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." +#~ msgstr "一件厚重的棉大衣,很笨重,也很暖和,还有几个很深的口袋。" -#~ msgid ", a " -#~ msgstr ", " +#~ msgid "A thin pair of leather gloves. Good for doing manual labor." +#~ msgstr "一对薄薄的皮手套,干体力活时戴上很不错。" -#~ msgid "Choose new part to install here: " -#~ msgstr "选择一个新的部件安装在这里: " +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "穿起来有点笨重,但可以提供一些储物空间." -#~ msgid " to install parts." -#~ msgstr " 来安装部件。" +#~ msgid "" +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." +#~ msgstr "密闭在包装袋里用来检测辐射量的徽章,从袋子中取出便会被激活。" -#~ msgid "powered welder" -#~ msgstr "有电的焊枪" +#~ msgid "plate armor boots" +#~ msgstr "板甲靴" -#~ msgid " and a " -#~ msgstr " 和 " +#~ msgid "plate armor gauntlets" +#~ msgstr "板甲护手" -#~ msgid "You need a " -#~ msgstr "你需要: " +#~ msgid "light plate mail" +#~ msgstr "轻板甲" #~ msgid "" -#~ "A sluglike creature, eight feet long and the width of a refrigerator, " -#~ "it's black body glistens as it oozes it's way along the ground. Eye " -#~ "stalks occassionally push their way out of the oily mass and look around." -#~ msgstr "" -#~ "一种鼻涕虫状的生物,八英尺长和冰箱一样的宽度。\r\n" -#~ "身体闪耀着黑色的油污沿着他行走的路径四下扩散。" - -#~ msgid "a smoker explodes!" -#~ msgstr "一只烟雾丧尸爆炸了!" +#~ "A medieval helmet that provides excellent protection to head, with a Y " +#~ "shaped opening for the face." +#~ msgstr "一个面部Y形开口的,全面保护头部的中世纪头盔。" #~ msgid "" -#~ "You've always loved tinkering with stuff. You start with a tool belt, and " -#~ "know a little bit about mechanics, tailoring, electronics, and carpentry." +#~ "A tool used to drive nails into wood or other material. It could also be " +#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." #~ msgstr "" -#~ "你一直喜欢摆弄小玩意试图靠这个发家致富,\r\n" -#~ "所以你总是穿着工具腰带,并且还有一点点\r\n" -#~ "关于机械,裁缝,电子和木工方面的知识。" +#~ "射钉枪,顾名思义,就是能用来发射钉子的枪,想射哪里就射哪里。拿在手里,既能" +#~ "做建设,又能当武器,钉子没了还能用来砸人。有了它,你就能轻易练习你的火器技" +#~ "能了!\n" +#~ "警告:本武器过于危险,被大批敌人包围时慎重使用,以免伤害自身。" #~ msgid "" -#~ "You used to be a ballroom dancer before the cataclysm, and now you use " -#~ "your skills to save your life. You start with a tuxedo and a level in " -#~ "dodging." +#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " +#~ "damage. It could be used to practice your rifle skill up to level 1." #~ msgstr "" -#~ "大灾变发生前你是个舞厅群众演员,在明星后面跳跳蹦蹦混碗饭吃。\r\n" -#~ "你现在需要利用你的这些技能延长自己的生命,因为你比普通人更会\r\n" -#~ "闪避。你穿着一身燕尾服开始了人生冒险。" +#~ "BB枪是儿童们的专利,而你手中这把特制的BB枪也有着不同凡响的精准度,只是就BB" +#~ "弹这种弹药来说...实在很难对敌人造成任何杀伤力。不过至少你可以用这把枪来将" +#~ "步枪技能提升到1级。" + +#~ msgid "A tough sinew cut from a corpse, useable as thread." +#~ msgstr "从尸体上截下来的一小段肌腱,很有弹性,能用于缝制衣物。" #~ msgid "" -#~ "You are cold-blooded and rely on heat to keep moving. Your lose 1%% of " -#~ "your speed for every 2 degrees below 65 F." +#~ "This small caliber pistol round offers quite good armor penetration at " +#~ "the cost of slightly less damage. It is rarely used outside of the " +#~ "Chinese army." #~ msgstr "" -#~ "你是冷血动物,依靠热量来移动。你在气温为18℃以下(65F)时气温每下降1℃(2F)" -#~ "速\r\n" -#~ "度降低1%%。" +#~ "这种7.62mm的小型手枪子弹通过牺牲少量的威力增强了其穿甲性。除了中国军队外很" +#~ "其他地区很少使用。" + +#~ msgid "A 40mm grenade with a concussive explosion." +#~ msgstr "一个40mm震荡爆炸榴弹" #~ msgid "" -#~ "Your muscle response is highly dependent on ambient temperatures. You " -#~ "lose 1%% of your speed for every 3 degrees below 65 F." -#~ msgstr "" -#~ "你的肌肉反应速度受环境温度影响。在18℃(65F)以下,温度每降低1℃(3F),你的" -#~ "速\r\n" -#~ "度将下降1%%。" +#~ "A 40mm grenade with a small explosion and a high number of damaging " +#~ "fragments." +#~ msgstr "一颗40mm榴弹,能产生小型爆炸和大量冲击碎片。" + +#~ msgid "Primer from a small caliber round." +#~ msgstr "小口径手枪子弹底火" #~ msgid "" -#~ "Your muscle response is dependent on ambient temperatures. You lose 1%% " -#~ "of your speed for every 5 degrees below 65 F." +#~ "Will you be able to place the arrow right into bull's eye? It is not that " +#~ "easy, but once you know how it's done, you will have a lot of fun with " +#~ "archery." #~ msgstr "" -#~ "你的肌肉反应速度受环境温度影响。在18℃(65F)以下,温度每降低2℃(5F),你的" -#~ "速\r\n" -#~ "度将下降1%%。" +#~ "你知道如何把箭射中靶心吗?这并不简单,但你一旦学会它,射箭将会是一件很有趣" +#~ "的事情。" + +#~ msgid "Basic Sword & Sorcery." +#~ msgstr "剑术和巫术入门指南。" #~ msgid "" -#~ "You feel very sluggish when not in direct sunlight. You suffer a 5%% drop " -#~ "in speed when in shade, and a 10%% drop in speed when in the dark." +#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " +#~ "does less damage and is less accurate. Stands a good chance of remaining " +#~ "intact once fired." #~ msgstr "" -#~ "如果你不能在阳光照射下将变得非常缓慢。你在阴暗中速度下降5%%,在黑暗中下降" -#~ "10%\r\n" -#~ "%" +#~ "由木材削尖制得的弩矢。重量较钢制弩矢更轻,相对地,精准性和破坏力较低。发射" +#~ "后不易损坏,回收率高。" -#~ msgid "" -#~ "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is " -#~ "very light as a result, enabling you to run and attack 20%% faster, but " -#~ "also frail; you can carry 40%% less, and bashing attacks injure you more." +#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." +#~ msgstr "请勿饮用,它与氨水混合会产生有毒气体。" + +#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." +#~ msgstr "请勿饮用,它与漂白剂混合会产生有毒气体。" + +#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." +#~ msgstr "从酸雨中收集的经浓缩后的酸液,禁止饮用。" + +#~ msgid "beef jerky" +#~ msgstr "肉干" + +#~ msgid "Bread and turkey, that's it." +#~ msgstr "面包和火鸡,就是你了!" + +#~ msgid "carrot" +#~ msgstr "胡萝卜" + +#~ msgid "cooked spaghetti" +#~ msgstr "美味的意大利面条" + +#~ msgid "Canned beans. A staple for hobos." +#~ msgstr "罐装豆子。流浪汉的主要食物。" + +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "很饱肚子没错啦,但是味道就不敢恭维了。" + +#~ msgid "sardines" +#~ msgstr "沙丁鱼" + +#~ msgid "tuna fish" +#~ msgstr "金枪鱼" + +#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." #~ msgstr "" -#~ "你有兽骨综合症 - 你的骨头几乎是空心的。由于你的身体很轻,你的步行移动速度" -#~ "和攻\r\n" -#~ "击速度增加20%%,但你的体质也弱,你携带的东西减少40%%,且更容易受伤。" +#~ "看起来很恶心的样子,虽然知道是可以吃的东西,不过还是留到饿死前再试吧。" #~ msgid "" -#~ "Your bones are very light. This enables you to run and attack 10%% " -#~ "faster, but also reduces your carrying weight by 20%% and makes bashing " -#~ "attacks hurt a little more." -#~ msgstr "" -#~ "你的骨质非常松脆,你的行动速度增加了10%%,但你所携带的物品最大重量下降20%" -#~ "%,\r\n" -#~ "冲击对你造成的伤害将更多。" +#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " +#~ "emergency." +#~ msgstr "一大块蜂蜡,既不好吃又不滋补,除非实在没东西吃了。" #~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. This one has " -#~ "been lit, and its fuse is rapidly burning down." -#~ msgstr "" -#~ "一个装满了的火柴头的瓶子,并配备了一个导火索。它已被点燃,其导火索迅速烧" -#~ "毁。" +#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " +#~ "all sorts of afflictions." +#~ msgstr "一大块涂满了密密的、深色的蜂蜜的蜡,或许可以用来解除各种疾病症状。" #~ msgid "" -#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " -#~ "metal, and complete disregard for personal safety. Not as efficient as a " -#~ "factory welder, but it will serve in a pinch." +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." #~ msgstr "" -#~ "这个由铜线和废铁组装的焊枪粗制滥造,完全无视人身安全。虽然效率不如工厂出" -#~ "品,但在必要时还是能用的。" +#~ "一个原本可以成为人类但畸形了的胚胎,看上去恶心极了。有勇气吃掉它的人,很可" +#~ "能发生某种变化。" #~ msgid "" -#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " -#~ "make it ready to fire. Once activated, it cannot be repacked." -#~ msgstr "" -#~ "M72式单兵火箭筒,封装以便于贮存。激活它之后,你就能发射,一旦激活就不能重" -#~ "新封装了。" +#~ "A misshapen human arm, eating this would be pretty disgusting and cause " +#~ "your DNA to mutate." +#~ msgstr "变异人的手臂,丧心病狂的人才去吃,吃了后会恶心,并且导致DNA突变。" #~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " -#~ "eat it's heart out." +#~ "A malformed human leg, this would be gross to eat, and cause mutations." #~ msgstr "" -#~ "一个将中世纪用来解决麻烦的典范(大刀和火炬)组合起来的武器,刀刃已经发烫,让" -#~ "圣剑也妒忌吧." +#~ "变异人的腿,吃下去也会让你变异,至于是变成蝙蝠侠还是史莱姆亦或死翘翘,谁知" +#~ "道呢,除非你用S&L大法。" #~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. Light it up and show those heathen zombies " -#~ "who's Lord around here." +#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." #~ msgstr "" -#~ "在黑暗时代用来解决冲突的两个经典象征的组合---大刀和火炬. 将它点燃,告诉那" -#~ "些毫无信仰的丧尸,谁才是这里的主人." +#~ "一枚巨大的蚂蚁的卵,有垒球般大,超级有营养,它的蛋白质是牛肉的6倍。如果你" +#~ "是贝爷的话。" + +#~ msgid "This white flour is useful for baking." +#~ msgstr "这白色的面粉可以用来做成面包。" + +#~ msgid "MRE - beef" +#~ msgstr "即食牛肉" + +#~ msgid "canned apple slices" +#~ msgstr "罐装苹果" #~ msgid "" -#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " -#~ "Called 'broad' to contrast with the slimmer rapiers." +#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " +#~ "color." #~ msgstr "" -#~ "一种早期的现代剑,在16到18世纪的西方被广泛使用。之所以命名为阔剑,是为了与" -#~ "细长的刺剑对比。" +#~ "惨白、浮肿、软趴趴的苹果尸体被切片之后丢在了葡萄糖溶液中。。。看着它你的心" +#~ "情也是一样的惨淡。" + +#~ msgid "apple slices" +#~ msgstr "苹果片" #~ msgid "" -#~ "People love fire, and people love katanas, so why not put them together? " -#~ "The gas burners attached to this blade can really turn up the heat on " -#~ "your foes." -#~ msgstr "" -#~ "大家喜欢火, 人们喜欢武士刀, 所以为什么不把它们结合在一起? 汽油燃烧器附加" -#~ "在刀刃上可以烧伤敌人。" +#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" +#~ msgstr "浸泡在糖水中的苹果片,看起来还算新鲜。" #~ msgid "" -#~ "This huge iron knife has been modified with a fuel tank, insulated " -#~ "handguard and ignition system. When filled with gasoline, a system of " -#~ "torches heats the blade, burning your target." +#~ "Strawberries left to ferment with a few other choice ingredients offer up " +#~ "a surprisingly platable mixture; you barely even have to force yourself " +#~ "to drink it after the first few gulps." #~ msgstr "" -#~ "这把大铁刀已经被改装成具备燃料储存、隔热以及点火系统.当加入汽油,刀刃能被" -#~ "点燃,并可灼烧你的目标." +#~ "草莓发酵后与其他一些配料组合成的惊人混合物,在喝下前几口后你几乎不用再强迫" +#~ "自己才能喝下去。" + +#~ msgid "Bright pink chewing gum. Sugary, sweet and bad for your teeth." +#~ msgstr "亮粉色的口香糖。含糖,甜,对你的牙齿不好。" #~ msgid "" -#~ "This flashbang is active, and will soon detonate with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ "Matches must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use matches to light " +#~ "nearby items on fire." #~ msgstr "" -#~ "正如字面所述,这颗震撼弹已经被激活了,请背过身去,捂上耳朵,然后在心里默" -#~ "数“1、2、3,木头人!" +#~ "火柴是很有用的,不论你是想抽根烟,想点燃燃烧瓶,或是把周围的东西烧起来。小" +#~ "心不要烧伤哦。" #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active flashbang. You " -#~ "will then have five turns before it detonates with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ "A fire drill is a simple item for firestarting, made from two pieces of " +#~ "wood and some string. Although it is constructed out of simple materials, " +#~ "it's slow and rather difficult to get a fire started with this tool." #~ msgstr "" -#~ "拔下安全销来使用震撼弹,你有五回合时间去扔掉它,它会让任何人,哦不,人脑爱" -#~ "好者在一段时间感到眩晕,失去方向感。你还不快撤?对,就说你呢!" +#~ "钻木取火器是用来生火的简单道具,用两片木片以及一些绳子就可以做出来。很简" +#~ "陋,用来生火很慢而且也很难。" + +#~ msgid "A simple hand-powered stone quern." +#~ msgstr "一个简单的手推石磨." #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active grenade. You " -#~ "will then have five turns before it explodes; throwing it would be a good " -#~ "idea." -#~ msgstr "" -#~ "拔下安全销来使用手雷,你有五回合时间去扔掉它,话虽如此,除了能把周围的东西" -#~ "炸成渣,它也没什么其他特效了。" +#~ "Use a sewing kit on an article of clothing to attempt to repair or " +#~ "reinforce that clothing. This uses your tailoring skill." +#~ msgstr "使用缝纫工具可以修复或者加固各类服饰,这需要用到你的缝纫技能。" #~ msgid "" -#~ "A machete is attached laterally to a motor, with a tripwire controlling " -#~ "its throttle. When the tripwire is pulled, the blade is swung around with " -#~ "great force. The trap forms a 3x3 area of effect." +#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." #~ msgstr "" -#~ "弯刀横向的连接着电动机,连接着一个开关。当按下开关,刀片就会像电风扇一样转" -#~ "起来,形成一个3x3面积的陷阱。" +#~ "剪刀,你有了一把剪刀了,快掏出来大发神威吧!但是在CDDA,剪刀剪不动塑料什么" +#~ "的,只能剪衣服玩了。" #~ msgid "" -#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " -#~ "feet of concrete." -#~ msgstr "" -#~ "一颗66mm高爆反坦克火箭弹。它能击穿厚达两英尺的混凝土,让你真正的体会到什么" -#~ "叫日穿钢板。" +#~ "Use a hammer, with nails and two by fours in your inventory, to board up " +#~ "adjacent doors and windows." +#~ msgstr "使用锤子、钉子和2x4制式木材把门窗封上" + +#~ msgid "Use a fire extinguisher to put out adjacent fires." +#~ msgstr "使用灭火器来扑灭附近的火焰" #~ msgid "" -#~ "Designed during World War II by the Soviet Union, the popularity of the " -#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " -#~ "rifle round. However, due to its lack of yaw, this round deals less " -#~ "damage than most." +#~ "With enough electronics skill, you could attach this to your devices to " +#~ "increase their battery capacity." +#~ msgstr "对自己的电子学有信心的话,把它装在电子设备上,能提高电池容量。" + +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. Use it to turn it on." #~ msgstr "" -#~ "苏联于二战时设计的步枪弹药。Ak-47和SKS的普及很大程度上是由于这种高泛用性弹" -#~ "药的各种不同版本。然而由于弹头滚转较小,威力不如大部分的弹药。" +#~ "小型汽油燃料灯笼。它的光线较弱,但它的持续时间较长。用的时候请打开它。" #~ msgid "" -#~ "The .500 S&W Magnum round the World's most powerful handgun round " -#~ "recently developed by Smith and Wesson together with the revolutionary " -#~ "S&W 500 Revolver, it has enough power to kill anything with ease." +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. It is turned on. Use it to turn it off." #~ msgstr "" -#~ ".500 S&W Magnum子弹应该是世界上威力最大的手枪子弹了。由Smith&Wesson公司开" -#~ "发,使用在S&W 500左轮手枪上。它几乎可以消灭你看见的任何东西。" +#~ "小型汽油燃料灯笼。它的光线较弱,但它的持续时间较长。它正亮着呢,不用时请关" +#~ "掉它。" #~ msgid "" -#~ "The .454 Casull round a very powerful revolver round capable of killing " -#~ "Huge game like Elephants with ease, it's designed to be used with the " -#~ "Taurus Raging Bull." +#~ "Using this flashlight will turn it on, assuming it is charged with " +#~ "batteries. A turned-on flashlight will provide light during the night or " +#~ "while underground." #~ msgstr "" -#~ ".454 Casull子弹是一种大威力转轮手枪子弹,其威力可以击毙成年大象。它被设计" -#~ "使用在Taurus公司的Raging Bull左轮手枪上。" +#~ "手电筒,打开就能放光的神奇存在,无论是夜晚还是地底,光明总是让人安心。记得" +#~ "随时换电池!" #~ msgid "" -#~ "A brass-jacketed variant of the .40 Smith & Wesson round. This increases " -#~ "penetration slightly at the cost of reduced expansion." -#~ msgstr ".40 Smith&Wesson黄铜被甲高穿透力子弹。牺牲少许伤害用来增加穿透力。" +#~ "This flashlight is turned on, and continually draining its batteries. It " +#~ "provides light during the night or while underground. Use it to turn it " +#~ "off." +#~ msgstr "这个手电筒已经被打开,它耗电很快,所以不用的时候请记得关上。" #~ msgid "" -#~ "9 millimeter parabellum is generally regarded as the most popular handgun " -#~ "cartridge, used by the majority of US police forces. It is also a very " -#~ "popular round in sub-machine guns." -#~ msgstr "" -#~ "九毫米帕拉贝伦子弹是大多数美国警察机关所主要使用的手枪子弹。它一般被认为是" -#~ "最普遍的手枪子弹,并被大量使用在冲锋枪中。无论是灾变前还是灾变后,都是烂大" -#~ "街的存在。" +#~ "A burnt-out lightstrip. You could disassemble this to recover the " +#~ "amplifier circuit." +#~ msgstr "一条烧坏的小彩灯,你可以拆开它拿到电路放大器。" #~ msgid "" -#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " -#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " -#~ "round. It is nearly silent, but is so weak as to be nearly useless." +#~ "A light-emitting circuit wired directly to some batteries. Once " +#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " +#~ "batteries die, you'll need to scrap it to recover the components that are " +#~ "reusable." #~ msgstr "" -#~ ".22 CB具有圆锥形的弹头,只使用少量底火且一般不使用推进药,因此速度低于音" -#~ "速。它射击时非常安静,但它几可忽略的威力使其在战斗时基本没有什么用处。" +#~ "一个能发光的简单电路,连接着电池。一旦被激活,3单位电池可以使它持续发光25" +#~ "小时。当电量耗尽,你还能拆掉它来重复利用某些部件。" #~ msgid "" -#~ "A leather sling, it is easy to use and accurate, but pebbles do little " -#~ "damage. Pebbles are used as ammunition." +#~ "A light-emitting circuit wired directly to some batteries. Provides a " +#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " +#~ "die, you'll need to scrap it to recover the components that are reusable." #~ msgstr "" -#~ "皮革弹弓,小孩子的玩具,操作简单,但小石子那伤害惨不忍睹,也就只能用来欺负" -#~ "小朋友了。弹药:小石子。" +#~ "一个能发光的简单电路,连接着电池。散发微弱的光芒,3单位电池可以使它持续发" +#~ "光25小时。当电量耗尽,你还能拆掉它来重复利用某些部件。" -#~ msgid "You set the boobytrap up and activate the grenade." -#~ msgstr "你设置引信,激活了榴弹。" +#~ msgid "" +#~ "A small blue light glowstick, bend it to break the glass cylinder inside " +#~ "and start the reaction to produce a very small amount of light." +#~ msgstr "小小的蓝色荧光棒,弯曲一下就能产生光,当然,不怎么亮就是了。" -#~ msgid "A common hydraulic jack, used when changing tires." -#~ msgstr "一个普通的液压千斤顶,用来换轮胎." +#~ msgid "" +#~ "This glowstick is active and producing light. It will last for a few " +#~ "hours before burning out." +#~ msgstr "被激活内在化学反应而正在发光的荧光棒,微弱的光,只能亮几个小时。" -#~ msgid ". Requires Unarmed Skill of " -#~ msgstr "需要徒手技能级" +#~ msgid "A spent glowstick, essentially trash." +#~ msgstr "用过的荧光棒,没什么用了,有兴趣可以留着。" -#~ msgid "MODS/BIONICS" -#~ msgstr "额外插件/仿生插件:" +#~ msgid "" +#~ "A small heating element. Indispensable for cooking and chemistry. Try not " +#~ "to burn yourself." +#~ msgstr "" +#~ "一个小小的加热装置,无论是烹饪还是做化学药剂都必不可少。用的时候可得小心," +#~ "可别把自己给煮了。" -#~ msgid "MEDICINE/DRUGS" -#~ msgstr "药物/毒品:" +#~ msgid "" +#~ "A piece of metal that can get very hot. Necessary for electronics " +#~ "crafting. You could also use it to cauterize wounds, if you had to." +#~ msgstr "" +#~ "一块可以被烧得很烫的金属板,可以用来制作电子产品,当然也可以用来灼烧伤口" -#~ msgid "Martial arts gained." -#~ msgstr "学会了武术。" +#~ msgid "" +#~ "Using this item on a container full of water will purify the water. Water " +#~ "taken from uncertain sources like a river may be dirty." +#~ msgstr "" +#~ "从河里、水箱里、集雨器里以及马桶里弄来的水都不怎么干净,有了它,你就能喝上" +#~ "比山泉更可口的CDDA牌矿物质纯净水了!" -#~ msgid "The sludge is thick and sticky." -#~ msgstr "污泥又粘又稠。" +#~ msgid "" +#~ "Using this allows you to send out a signal; either a general SOS, or if " +#~ "you are in contact with a faction, to send a direct call to them." +#~ msgstr "" +#~ "在你生命受到威胁之时,别犹豫,就是它了。它能发出SOS信号,如果你加入了某个" +#~ "阵营,更是能直接向阵营求救!" -#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." -#~ msgstr "你觉得发烧、恶心,并且你的伤口已经开始变绿。" +#~ msgid "" +#~ "Using this radio turns it on. It will pick up any nearby signals being " +#~ "broadcast and play them audibly." +#~ msgstr "" +#~ "无线电,能够接受信号,并转化为声波。据说要是对准了信号塔,声音会格外响亮。" -#~ msgid "You start scratching yourself all over!" -#~ msgstr "你开始疯狂抓挠自己全身!" +#~ msgid "" +#~ "This radio is turned on, and continually draining its batteries. It is " +#~ "playing the broadcast being sent from any nearby radio towers." +#~ msgstr "" +#~ "这台无线电设备已经被启动,不停消耗着电池的同时不断向你播送着附近电台传出的" +#~ "资讯。" -#~ msgid "Sterilized the infection... this time." -#~ msgstr "感染已消除...这次。" +#~ msgid "" +#~ "An antenna designed to pick up signals better when pointed at the source." +#~ msgstr "" +#~ "天线,可以用来收集信号。当然,你要是把天线对准了信号源,信号强度会更高。" -#~ msgid "Cleaned the bite wound." -#~ msgstr "清洗了被咬的伤口。" +#~ msgid "" +#~ "If you can find a system to analyze this you may find something of " +#~ "interest." +#~ msgstr "" +#~ "如果你能找到什么系统来分析一下这里面的东西,或许能找到什么有用的东西吧。" +#~ "(谁知道呢?)" -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "你的皮肤下有虫子在爬!" +#~ msgid "" +#~ "A string of numbers to access the elevator in the hazardous waste " +#~ "sarcophagus." +#~ msgstr "一串密码,用来启动通往危险废品储存间的电梯。" -#~ msgid "You have a craving for crack." -#~ msgstr "你对快克可卡因上瘾了。" +#~ msgid "" +#~ "This device was constructed by 'enhancing' a radio with some amplifier " +#~ "circuits. It's completely lost its ability to pick up a station, but it's " +#~ "nice and loud now. Could be useful to distract zombies." +#~ msgstr "" +#~ "这是台有着功率放大集成电路的收音机,但现在它已经没法再收听任何的电台新闻," +#~ "可是它依然能放出嗞嗞嗞的噪音,用来和吸引丧尸,和丧尸来个约会。" -#~ msgid "You have a craving for cocaine." -#~ msgstr "你开始对可卡因上瘾了。" +#~ msgid "" +#~ "A road map. Use it to read points of interest, including, but not limited " +#~ "to, location(s) of hospital(s) nearby." +#~ msgstr "一张附近的地图,标出了不少有用的地点,诸如医院、商店等。" -#~ msgid "You have an opiate craving." -#~ msgstr "你的阿片瘾发作了。" +#~ msgid "" +#~ "A prying tool. Use it to open locked doors without destroying them, or to " +#~ "lift manhole covers." +#~ msgstr "" +#~ "一整套开锁工具,可以轻易进出别人的家里而不破坏门或者用来开启下水沟井盖。" -#~ msgid "You have a caffeine craving." -#~ msgstr "你的咖啡(因)瘾发作了." +#~ msgid "" +#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " +#~ "pile of dirt." +#~ msgstr "一把农具,你可以用它来把平土地锄成难以通过的一团泥。" -#~ msgid "You have a nicotine craving." -#~ msgstr "你的烟(尼古丁)瘾发作了." +#~ msgid "A digging tool. Use it to dig pits adjacent to your location." +#~ msgstr "" +#~ "一个挖坑工具,你可以用它在你周围挖坑。做人莫学杨江南,挖坑从来不带填。" -#~ msgid "Gendo" -#~ msgstr "げんど" +#~ msgid "A listening tool. Use it to listen to things. Closely." +#~ msgstr "一个听觉工具.只能用来听比较接近的东西." #~ msgid "" -#~ "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " -#~ "then\n" -#~ "select your flashlight to turn it on." -#~ msgstr "" -#~ "现在一片黑暗!幸运的是,你有一个手电筒。按' a '然后\n" -#~ "选择你的手电筒来打开它。" +#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " +#~ "a vehicle." +#~ msgstr "一个灵活的橡胶软管。可以用于制造,或者从别人的汽车里偷油出来。" #~ msgid "" -#~ "~ is a terrain symbol that indicates water. From a water source like " -#~ "this,\n" -#~ "you can fill any containers you might have. Step onto the water, then " -#~ "press\n" -#~ "the pickup key (',' or 'g'), then select a watertight container to put " -#~ "the\n" -#~ "water into." +#~ "Using this item will, if loaded with gas, cause it to turn on, making a " +#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." +#~ msgstr "加满油,然后打开开关。听着运行时的噪音,你挥舞着它开始大杀特杀!" + +#~ msgid "" +#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " +#~ "adjacent solid terrain." #~ msgstr "" -#~ "“~”是一个表示水的地形符号。通过这样的水源,你能\n" -#~ "填充任何容器。站在水中,然后按拾取键(','或' g '),之\n" -#~ "后选择一个水密容器把水灌进去。" +#~ "这把冲击钻靠汽油来驱动,使用之后,可以把附近的地面或者敌人钻出一个大洞来。" -#~ msgid "Nakiya" -#~ msgstr "诺基亚" +#~ msgid "bubblewrap" +#~ msgstr "警戒陷阱" -#~ msgid "Kaiko" -#~ msgstr "かいこ" +#~ msgid "" +#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " +#~ "the ground, creating a trap that will warn you with noise when something " +#~ "steps on it." +#~ msgstr "" +#~ "这是一层又一层的泡沫塑料,如果有东西踩过它的话,会发出足够的响声以提醒在附" +#~ "近活动的你。" #~ msgid "" -#~ "That drug you just took placed an effect on you. To check your effects,\n" -#~ "press '@'. Most only last a short while, while others, like chronic " -#~ "disease,\n" -#~ "last until cured by some other means." +#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " +#~ "creating a trap that will ensnare and damage anything that steps on it. " +#~ "If you are carrying a shovel, you will have the option of burying it." #~ msgstr "" -#~ "刚才嗑的药在你身上起效了。按“@”检查它的效果。\n" -#~ "大多数效果只持续很短一段时间。但是另一些,如\n" -#~ "慢性病,将持续直到通过一些方式治愈。" +#~ "一副装有弹簧的铁爪。布置在地面上做成陷阱,可以保证每个失足踩上来的家伙喝上" +#~ "一壶。如果你随身带着铁铲,你将可以选择埋设它。" #~ msgid "" -#~ "That yellow > next to you is a staircase leading down. To go downtairs, " -#~ "step\n" -#~ "onto the staircase and press the '>' key. Similarly, a yellow < is " -#~ "stairs\n" -#~ "leading up, and can be followed with the '<' key." +#~ "Several pieces of wood, nailed together, with nails sticking straight up. " +#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." #~ msgstr "" -#~ "那在你旁边黄>是下行楼梯。要通往下一层,踩在上面\n" -#~ "按'“>”键。同样,一个黄色的<是上行楼梯,可以按“<”键\n" -#~ "上楼。" +#~ "这是一块厚实的木板,其中一端上有几枚长长的钉子。极简主义的杀人利器。" #~ msgid "" -#~ "You just placed a trap. Traps are permanent until set off, and can be " -#~ "an\n" -#~ "important defensive tactic, particularly when sleeping in unsafe " -#~ "territory.\n" -#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." +#~ "A tripwire trap must be placed across a doorway or other thin passage. " +#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " +#~ "hurt themselves minorly." #~ msgstr "" -#~ "你捡起了一个陷阱。陷阱是永久的直到你设置它。设置陷\n" -#~ "阱是一个重要的防守策略,特别是当你睡在不安全地区的时\n" -#~ "候。试着踩“_”——别担心,这是一个无害的气泡陷阱。" +#~ "绊索陷阱,只能设置在门口或是狭窄的走廊。它可以用来困住经过的对象,将对方绊" +#~ "倒的同时也可能造成轻微伤。" #~ msgid "" -#~ "You're carrying more volume than you have storage for, which means you " -#~ "are\n" -#~ "carrying some stuff in the crook of your arm or in some other awkward " -#~ "manner.\n" -#~ "While overloaded like this, you will suffer SEVERE encumberment " -#~ "penalties,\n" -#~ "making combat dangerous. Either drop an item, or possibly wield " -#~ "something--\n" -#~ "the object you are wielding does not take up inventory space." +#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " +#~ "pulled, the crossbow fires. Only a single round can be used, after which " +#~ "the trap is disabled." #~ msgstr "" -#~ "你能携带比你物品栏限制体积更多的(一个或一组)东西,\n" -#~ "这意味着你将用你的手臂或在其他一些尴尬的方式携带这个\n" -#~ "臃肿的东西。但是在超载章台,你将遭受严重的累赘度惩罚,\n" -#~ "这让接下来的战斗变得危险起来。要么扔掉这个道具,你握\n" -#~ "住这个道具——你握住的道具不占用物品储存空间。" +#~ "一根轻巧的棉线轻柔地连在了弩的扳机之上,只要轻轻一拨,一支致命的短矢就会直" +#~ "奔目标而去,把它扎成巫毒娃娃。" #~ msgid "" -#~ "You just activated a grenade! You probably want to throw it. To throw " -#~ "an\n" -#~ "item, press 't' and then select the item to throw. The maximum range " -#~ "depends\n" -#~ "on your strength and the object's weight and size. Throwing isn't very " -#~ "good\n" -#~ "in most combat situations, but if you've got some fire power..." +#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " +#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " +#~ "time the trigger is pulled, one or two may be used." #~ msgstr "" -#~ "你刚刚激活一个手雷!你可能想把它扔了。要投掷一个\n" -#~ "道具,按“t”,然后选择要扔的道具。最大投掷范围取决于\n" -#~ "在你的力量和头植物的重量和尺寸。在大多数战斗中\n" -#~ "投掷不是很好的选择,但是如果你有一些NB的火力…" +#~ "一根轻巧的棉线轻柔地连在了短管霰弹枪的扳机之上,只要轻轻一拨,霰弹枪就会双" +#~ "管齐发,给那位不幸的家伙一个痛快。" #~ msgid "" -#~ "After firing your gun, you will probably notice a Recoil alert in the " -#~ "lower\n" -#~ "right. Generally speaking, the more damaging the ammo, the worse the " -#~ "recoil.\n" -#~ "Recoil severely reduces your chance to hit, but you can eliminate recoil " -#~ "by\n" -#~ "pausing ('.') for a turn or moving normally. High strength reduces " -#~ "recoil,\n" -#~ "so weak characters might want to stick to .22 or 9mm guns." +#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " +#~ "Requires a young tree nearby. Effective at trapping and killing some " +#~ "small animals." #~ msgstr "" -#~ "你射击后,你可能会注意到一个后坐力指示器在右下\n" -#~ "角。一般来说,更具威力的弹药,后坐力越强。后坐力\n" -#~ "严重影响了你的命中率,但是你可以消除反坐力通过\n" -#~ "暂停(“.”)一回合或正常移动。高力量减少后坐力,\n" -#~ "所以一个弱子可能只能撸.22或9mm了。" +#~ "这是由细绳与有活结的套索组成的一个简单的陷阱。需要附近有颗小树,用来诱捕可" +#~ "怜且美味的小动物。" #~ msgid "" -#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " -#~ "using\n" -#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " -#~ "your\n" -#~ "gun, possibly to change ammunition types, press 'U'." +#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " +#~ "Requires a tree nearby. Effective at trapping monsters." #~ msgstr "" -#~ "要使用枪支,有三个步骤,首先 按”w“键握住它;然后只要你有合\n" -#~ "适的弹药,你需要使用“r”键来装填弹药;最后,如果你想卸载你\n" -#~ "的弹药,可能只是为了改变弹药类型,按“U”键。" +#~ "这是由粗绳与有活结的套索组成的一个简单的陷阱,需要附近有一棵树,猎物掉到其" +#~ "中就会被网住。" + +#~ msgid "An anti-personnel mine that is triggered when stepped upon." +#~ msgstr "这是一个已经埋设好的地雷,一旦踩上就会爆炸。" #~ msgid "" -#~ "Once you have a loaded gun wielded, you can fire it. Press the 'f' key " -#~ "to\n" -#~ "fire a single shot. With many guns, you can fire a burst by pressing " -#~ "'F'.\n" -#~ "You'll automatically target the last monster you shot at, or the closest\n" -#~ "monster to you. You can change your target with the movement keys, or " -#~ "cycle\n" -#~ "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " -#~ "hit\n" -#~ "the escape key." +#~ "A tool for measuring radiation. Using it will prompt you to choose " +#~ "whether to scan yourself or the terrain, or to turn it on, which will " +#~ "provide continuous feedback on ambient radiation." #~ msgstr "" -#~ "当你持有一把上膛的枪时,你可以射击。按'f'键\n" -#~ "进行点射。许多枪械可以用”F“键进行连射。\n" -#~ "你会自动瞄准你最后一次射击的敌人,或者是\n" -#~ "距你最近的敌人。你可以用方向键更改目标,\n" -#~ "或用“<\"键和”>“键切换目标。按”f“或”.“射击,\n" -#~ "按esc取消射击。" +#~ "本产品适用于监测辐射,可以用于持续监测周围环境的辐射,也可以扫描一次你的身" +#~ "体或是周围的地形,检测辐射是否超标。" #~ msgid "" -#~ "It's dark down here! Without a source of light, you'll be limited to " -#~ "seeing\n" -#~ "only one space in any direction. You'll encounter darkness while " -#~ "underground\n" -#~ "or at night. Press '<' to go back upstairs, and look around for a " -#~ "flashlight." +#~ "A tool for measuring radiation. It is in continuous scan mode, and will " +#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " +#~ "it allows you to turn it off, or scan yourself or the ground." #~ msgstr "" -#~ "现在一片黑暗!没有光源,您只能看到你周围的一格。\n" -#~ "每到夜晚降临或你身在地下你都会被黑暗包围。\n" -#~ "按“<”回到楼上,去寻找一个手电筒。" +#~ "本产品适用于监测辐射。提示:本产品正处于持续扫描模式下,一旦检测到强辐射会" +#~ "发出无声警报。再次使用可以切换模式,转为一次性扫描,或是终止运行。" #~ msgid "" -#~ "Hitting a monster will stun it briefly, allowing you to escape or get in\n" -#~ "another attack. Your dexterity and melee skills are used to determine\n" -#~ "whether an attack hits, while strength affects damage." +#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " +#~ "you to teleport a short distance away." #~ msgstr "" -#~ "命中一个怪物将令它短暂硬直,允许你逃跑或进行\n" -#~ "另一次攻击。你的敏捷和近战技能影响你的攻击\n" -#~ "是否命中,而力量影响所造成的伤害。" +#~ "这是一个神秘的装置,需要钚电池供能,能让你传送一小段距离。至于会不会传到怪" +#~ "物堆里,那就听天由命了。" #~ msgid "" -#~ "If you press 'i' and then the letter of your weapon, you'll see its " -#~ "combat\n" -#~ "stats. Bashing damage ignores most armor, but varies greatly and " -#~ "requires\n" -#~ "strength. Cutting damage is a fixed amount, but is blocked by armor. " -#~ "The\n" -#~ "To-hit bonus affects your chances of hitting. The amount of time it takes " -#~ "to\n" -#~ "swing your melee weapon depends on both its size and weight; small, " -#~ "compact\n" -#~ "weapons are the fastest." -#~ msgstr "" -#~ "如果你按“i”然后选择你的武器所对应的字母,你将会\n" -#~ "看到它的战斗属性,“冲击”伤害将会穿透多数护甲。\n" -#~ "“切割”伤害是一个较大的固定量,但会被护甲阻挡。\n" -#~ "“命中加成”影响你的命中率。“延迟时间”影响你武器\n" -#~ "的挥舞频率,这个属性取决于该武器的大小和重量;\n" -#~ "轻巧而紧凑的武器是最快的。" +#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " +#~ "sentient. Open at your own risk.\"" +#~ msgstr "警告:内含剧毒及极强腐蚀性物质,该物质活性极强,开启后果自负。" #~ msgid "" -#~ "When you kill a monster it will often leave behind a corpse. Corpses can " -#~ "be\n" -#~ "important sources of food, but you must Butcher them by standing on the\n" -#~ "corpse and pressing 'B'. You'll need a bladed weapon in your inventory,\n" -#~ "preferably a small, very sharp one. An unskilled butcher may only get a " -#~ "few\n" -#~ "pieces of meat, or none at all. Note that many monsters, such as " -#~ "zombies,\n" -#~ "leave tainted meat, unsuitable for consumption." +#~ "A section of a pipe filled with explosive materials. Use this item to " +#~ "light the fuse, which gives you 3 turns before it detonates. You will " +#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." #~ msgstr "" -#~ "你杀死一个怪物时,往往会留下尸体。尸体是你食物的\n" -#~ "重要来源,但必须去掉头再吃。所以你必须通过站在尸\n" -#~ "体上按“B”来屠宰他们。你的物品栏中必须有带刃的武\n" -#~ "器,最好是小型,锋利的那种。一个如果你不熟练的话只\n" -#~ "能取得几块肉,或根本没有肉。注意!许多怪物,如僵尸,\n" -#~ "只能爆出受污染的肉类,不适合食用。" +#~ "看起来普普通通的小铁筒,里面却塞满了炸药。用打火机点燃引信,仅仅3回合就会" +#~ "爆炸了。话虽如此,这个简陋的炸弹说不准就成了哑弹了。" #~ msgid "" -#~ "Taking damage often causes pain. Small amounts of pain are tolerable, " -#~ "but as\n" -#~ "it gets worse your stats will drop and you will move much slower. To " -#~ "reduce\n" -#~ "pain, take painkillers like codeine, or simply wait it out." +#~ "This grenade is active, and will explode any second now. Better throw it!" #~ msgstr "" -#~ "受到伤害通常会引起“疼痛”。少量的疼痛可以忍受,但是痛\n" -#~ "苦加剧会引起你属性下降,同时你将更慢的行动。要消除“\n" -#~ "疼痛”,请服用可待因等止痛药,或让时间抚平你的伤痛。" +#~ "正如字面所述,这颗手雷已经被激活了然后呢,你剩下的时间也不多了,向着远方迈" +#~ "步吧,真男人从不回头看爆炸。" #~ msgid "" -#~ "You just put on an article of clothing that provides physical " -#~ "protection.\n" -#~ "There are two types of damage that clothing defends against, bashing, " -#~ "and\n" -#~ "cutting. Most monsters deal bashing damage, but cutting is often the " -#~ "more\n" -#~ "deadly of the two. Bullets are considered cutting damage." +#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " +#~ "will then have three turns before it detonates, creating an EMP field " +#~ "that damages robots and drains bionic energy." #~ msgstr "" -#~ "你刚穿上一件衣服,它能提供物理防护。服装的防御有两种类\\n\n" -#~ "型,钝击和劈砍。大多数的怪物攻击为钝击伤害,但劈砍往往\\n\n" -#~ "是更致命的。枪击视为劈砍损伤。" +#~ "拔下安全销来使用EMP手雷,你有三回合时间去扔掉它,它会产生一个电磁场来使其" +#~ "周围的电子设备瘫痪,他是机械人的最(ke)爱(xing)。" #~ msgid "" -#~ "The item you just picked up is ammunition, used with a gun. It has many\n" -#~ "special attributes. The damage value is the maximum done on a standard " -#~ "hit;\n" -#~ "a critical hit or headshot will do much more damage. Some monsters or " -#~ "NPCs\n" -#~ "will wear armor which reduces the damage from gunfire; a high Armor-" -#~ "pierce\n" -#~ "value will reduce this effect. The Range is the maximum range the ammo " -#~ "can\n" -#~ "achieve, and the dispersion affects its chance to hit." +#~ "This EMP grenade is active, and will shortly detonate, creating a large " +#~ "EMP field that damages robots and drains bionic energy." #~ msgstr "" -#~ "你刚刚捡起的东西是弹药,要发射它你需要把枪。\n" -#~ "它有很多特殊属性。“伤害”一个标准命中造成的最\n" -#~ "大伤害;致命一击或爆头将造成更大伤害。\n" -#~ "有些怪物或npc的护甲降低的射击伤害;高“穿甲”值\n" -#~ "会降低这种影响。“射程”是弹药可以发挥作用的最\n" -#~ "大距离,“散射”影响命中几率。" +#~ "很好,这个EMP手雷已经被激活了,你需要做的就是把它用力丢出去,然后...就等着" +#~ "瞧吧。" + +#~ msgid "active teargas" +#~ msgstr "催泪弹(已激活)" #~ msgid "" -#~ "You just put on an article of clothing that protects against the " -#~ "environment.\n" -#~ "The most common and imporant are respiratory devices, which will protect " -#~ "you\n" -#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" -#~ "However, they also make it a little harder to breath when running, so " -#~ "you'll\n" -#~ "move more slowly. To check encumberance, press @." -#~ msgstr "" -#~ "你刚刚穿上那套衣服可以形成环境防护。最\n" -#~ "常见也是重要的是呼吸设备,它们能从烟雾、\n" -#~ "空气毒素、微生物和其他常见的危害中保护\n" -#~ "你。然而,它们也使你不能顺畅地呼吸,你会\n" -#~ "移动得更慢。按“@”,检查\"累赘度\"。" +#~ "This canister of teargas has had its pin removed, indicating that it is " +#~ "(or will shortly be) expelling highly toxic gas." +#~ msgstr "这种催泪瓦斯罐的封口被去掉了,这说明它正在(或将要)释放剧毒气体。" #~ msgid "" -#~ "You just put on an article of clothing that provides ample storage " -#~ "space.\n" -#~ "This will allow you to carry much more stuff, but be aware that there is " -#~ "also\n" -#~ "a limit on the weight you can carry which depends on strength. The item " -#~ "you\n" -#~ "put on also encumbered your torso. This will make combat a little more\n" -#~ "difficult. To check encumberance, press @." +#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " +#~ "the rag; you will, of course, need a lighter in your inventory to do " +#~ "this. After lighting it, throw it to cause fires." #~ msgstr "" -#~ "你刚穿上了一件提供携带空间的衣服,这将允许你携带更多\\n\n" -#~ "的东西,但要知道,还有你的体重可以决定行动强度极限。\\n\n" -#~ "你穿上的衣物也会拖累你的身体各部分。这将使战斗更困难\\n\n" -#~ "的,阻碍行动,按@可查看人物状态。" +#~ "一瓶塞着一块破布的易燃液体。(a)使用,你就能用打火机点燃它。如果渴了也可以" +#~ "喝掉它,难道我骗过你吗?" #~ msgid "" -#~ "That drug you just took is a painkiller. Painkillers are very important " -#~ "to\n" -#~ "keep on hand, as pain both penalizes your stats and makes you slower. " -#~ "Be\n" -#~ "careful, as the stronger painkillers can make you woozy, and some are " -#~ "even\n" -#~ "addictive." +#~ "A glass vial, split into two chambers. The divider is removable, which " +#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " +#~ "happens if you throw the vial) they will spill out as a pool of potent " +#~ "acid." #~ msgstr "" -#~ "你捡起的药物是一盒止痛药。止痛药是非常重要的,应该\n" -#~ "保留在手边,因为“疼痛”降低你的属性并让你变慢。要小心\n" -#~ "使用,因为强效止痛药会使你头昏眼花的,有时甚至会让你\n" -#~ "上瘾。" +#~ "这是一个被分割成两个空间的玻璃小瓶,两个空间中有东西格挡着,如果取下挡板," +#~ "并把两种液体的混合物暴露在空气中(比如说丢出去),所投掷的地区将形成一片持" +#~ "续的强酸液。" #~ msgid "" -#~ "The item you just picked up is a firearm! Guns are very powerful weapons " -#~ "but\n" -#~ "they require ammunition. Firearms have many special attributes. Most\n" -#~ "modify the damage done by their ammunition. They also have dispersion, " -#~ "which\n" -#~ "affects their chance to hit. Some guns are semi-automatic, while others " -#~ "can\n" -#~ "fire a burst. Some firearms (mainly bows and other muscle-powered " -#~ "weapons)\n" -#~ "have a range, which is added on top of the ammo's range when firing." +#~ "A glass vial, with two chemicals mixing inside. If this mixture is " +#~ "exposed to air (as happens if you throw the vial), they will spill out as " +#~ "a pool of potent acid." #~ msgstr "" -#~ "刚刚你捡起的物品是枪支!枪支是非常NB的武器,但\n" -#~ "是他们需要弹药。枪支有许多特殊属性。你所选\n" -#~ "择的子弹最影响它们的“威力”。而“散布”影响它们\n" -#~ "的命中率。一些枪支是半自动的,另一些可以点射。\n" -#~ "一些远程武器(主要是弓和其他使用肌肉动力的武器)\n" -#~ "有“射程”加成,这个属性增加了了弹药的发射时的射程。" +#~ "这是一个两种化学物质混合着的玻璃瓶,如果你把这两种液体的混合物暴露在空气中" +#~ "(比如说丢出去),所投掷的地区将形成一片持续的强酸液。" #~ msgid "" -#~ "The nearby { is a display rack, and the blue background indicates that " -#~ "there\n" -#~ "are items there. If you examine the square by pressing 'e', you can pick " -#~ "up\n" -#~ "items without moving to the square." +#~ "Several sticks of explosives with a fuse attached. Use this item to light " +#~ "the fuse; you will, of course, need a lighter in your inventory to do " +#~ "this. Shortly after lighting the fuse, this item will explode, so get " +#~ "away!" #~ msgstr "" -#~ "附近的 { 是一个展示架,蓝色的背景说明上面有东西。\\n\n" -#~ "如果你按‘e’检查方块(例:展示架),你能捡起物品而\\n\n" -#~ "不移动方块(例:展示架)" +#~ "几个棍棒形的炸药,外面露出了导火线,很容易被点燃。当然,你还是要用到打火" +#~ "机。引信燃烧时间很短,在爆炸前,快点跑吧!" #~ msgid "" -#~ "The item you just picked up is a comestible! To eat a comestible, press " -#~ "'E'.\n" -#~ "Comestibles are items you can use up, like food, drink, pills, etc. " -#~ "Most\n" -#~ "food expires eventually, so be careful. Some comestibles, especially " -#~ "drugs,\n" -#~ "can cause subtle, long-term effects." -#~ msgstr "" -#~ "你刚才捡了个“可食物”!要吃它按“E”。“可食物”\n" -#~ "是消耗品,如食品、饮料、药丸等能吃的都是。\n" -#~ "要当心,多数食品最终会过期的。一些“可食物”\n" -#~ ",特别是药物,可能会导致长期而微妙的影响。" +#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " +#~ "now." +#~ msgstr "引信嘶嘶地燃烧着。炸药随时都要爆了!" #~ msgid "" -#~ "The item you just picked up is a good weapon! To wield a weapon, press " -#~ "w,\n" -#~ "then pick what to wield. To wield nothing, either drop your weapon with " -#~ "d,\n" -#~ "or press 'w-' to put it away. A zombie has spawned nearby. To attack " -#~ "it,\n" -#~ "simply move into it." +#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " +#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " +#~ "they will begin to explode, so throw them quickly!" #~ msgstr "" -#~ "你刚捡起的物品是件好武器!按“w”,选择这个武器再\n" -#~ "装备它。要玩徒手?那么按“d”把你的武器扔在地上,\n" -#~ "或按“w -”收起它。一个僵尸在附近溜达。要攻击它\n" -#~ "就向它所在的方向移动,干掉它!" +#~ "这是一捆摆放的很整齐的鞭炮,数了数,共有25支。如果你身上有打火机,使用这捆" +#~ "鞭炮就能将它们点燃。请记得,它们的引信很短,所以点燃之后立刻丢掉它!吸引丧" +#~ "尸的绝佳物品。" #~ msgid "" -#~ "The item you just picked up is a type of clothing! To wear clothing, " -#~ "press\n" -#~ "W and then select an item. To take off clothing, press T, or simply take " -#~ "it\n" -#~ "off and drop it in one action by pressing d." +#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " +#~ "them quickly before the start to explode." #~ msgstr "" -#~ "你刚刚捡起的物品是衣物类型!你得把衣服穿上\n" -#~ "——按“w”,然后选择物品。要脱衣服,按“T”,\n" -#~ "或按“d”——简单地把它脱掉并扔在地上。" +#~ "25个鞭炮捆在了一起,引信燃烧的同时还在嘶嘶作响。动作快一点,不然就等着被炸" +#~ "伤吧!" #~ msgid "" -#~ "The item you just picked up went into your inventory, the shared storage\n" -#~ "space of all the clothing you're wearing. To view your inventory, press " -#~ "'i'.\n" -#~ "You can then press the letter of any item to get more information about " -#~ "it." +#~ "A firecracker with a short fuse. Use this item to light the fuse; you " +#~ "will need a lighter of course. Shortly after you light the fuse it will " +#~ "explode, so throw it quickly!" #~ msgstr "" -#~ "你刚才捡的物品放进了物品栏,并共享所有已装备衣服的\n" -#~ "存储空间。按“i”键查看你的道具栏。之后您可以按任何物\n" -#~ "品对应的字母来获得更多它的信息。" +#~ "一个鞭炮,引信短而且可以被点燃,当然,你还是要用到打火机。引信燃烧时间很" +#~ "短,所以动作快一点,不然就等着被炸伤吧!" #~ msgid "" -#~ "The item you just picked up has been wielded as a weapon automatically. " -#~ "This\n" -#~ "happened because it is a good melee weapon, and you were empty-handed. " -#~ "This\n" -#~ "usually is faster than than picking it up, then wielding it." +#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " +#~ "before it explodes." #~ msgstr "" -#~ "你刚才拾取的物品将自动视为武器使用。这是因为该物品是一个很好\\n\n" -#~ "的近战武器,同时你两手空空没拿东西。这种判定通常比先捡起来再\\n\n" -#~ "装备使用要快。" +#~ "一个被点火的鞭炮,引信燃烧的同时还在嘶嘶作响。动作快一点,不然就等着被炸伤" +#~ "吧!" #~ msgid "" -#~ "The item you just picked up has been wielded as a weapon automatically. " -#~ "This\n" -#~ "happened because you do not have space in your inventory to stash the " -#~ "item,\n" -#~ "and so you must carry it in your hand. To expand your inventory space, " -#~ "try\n" -#~ "wearing clothing with a lot of storage space, like a backpack, or cargo " -#~ "pants." +#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " +#~ "it to activate the timer. Ten turns later it will explode, leaving behind " +#~ "a radioactive crater. The explosion is large enough to take out a house." #~ msgstr "" -#~ "当你拿起该物品这自动视为武器使用。这是因为你的身上\\n\n" -#~ "不够空间装下该物品,所以你只能把它拿在手里。扩大你\\n\n" -#~ "的携带空间,尝试穿有大量的携带空间的衣物,像一个背\\n\n" -#~ "包或一条裤子。" +#~ "威力极强的武器——手持核弹。你可以激活它的计时器,10回合就会爆炸,威力足以摧" +#~ "毁房屋,产生一个放射性弹坑。" #~ msgid "" -#~ "You don't have space in your inventory to store the item you just tried " -#~ "to\n" -#~ "pick up. You need to wear something with storage space, like a backpace " -#~ "or\n" -#~ "cargo pants, to gain more storage space." -#~ msgstr "" -#~ "你的身上装不下该物品你只能拿在手上,你需要穿一些\\n\n" -#~ "可以装东西的衣物,比如一个背包或一条裤子,以获得\\n\n" -#~ "更多的存储空间。" +#~ "This miniature nuclear bomb has a light blinking on the side, showing " +#~ "that it will soon explode. You should probably get far away from it." +#~ msgstr "这种微型核弹的指示灯正在闪烁,它很快就要爆炸,你不跑开就会挂。" + +#~ msgid "A rare and arcane device, covered in alien markings." +#~ msgstr "这是一件很神秘的设备,上面刻满了奇怪的符号。" #~ msgid "" -#~ "The Examine command is useful for grabbing items off window frames, " -#~ "around\n" -#~ "corners, etc. It's also used for interacting with a few terrain types.\n" -#~ "Interactive terrain is usually designated with a '6' symbol." +#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " +#~ "air. They are covered with whirring blades and attack by throwing " +#~ "themselves against their target. Use this item to activate the manhack." #~ msgstr "" -#~ "“检查”命令(e)可让你从周围的窗框,拐角等处\n" -#~ "拿取物品。它也用于与几种地形互动。\n" -#~ "可互动的地形通常以符号“6”表示。" +#~ "一个未激活的飞锯,只有拳头大,能在空中旋转飞行。表面全是呼呼作响的刀刃,通" +#~ "过把自己扔到目标处来攻击。使用可以激活之。" #~ msgid "" -#~ "The item you just picked up is a tool! To activate a tool, press 'a'. " -#~ "Some\n" -#~ "tools have a set charge, which can be reloaded once depleted. Other are\n" -#~ "single-use items, and still others are reusable." +#~ "An inactive turret. Using this item involves turning it on and placing it " +#~ "on the ground, where it will attach itself. The turret will then identify " +#~ "you as a friendly, and attack all enemies with an SMG." #~ msgstr "" -#~ "你刚刚捡起的物品是件工具!按“a”可以激活工具。一些工具\n" -#~ "有使用次数,当用光时是能重新加载的。在工具中虽然部分\n" -#~ "是一次性物品,但还有些是可重复利用的。" +#~ "一座未激活的炮塔。使用它时需打开它然后放在地上。炮塔和你默认是友方,并用机" +#~ "枪攻击你的敌人。" #~ msgid "" -#~ "You can smash through windows by pressing 's' and then a movement key. " -#~ "A\n" -#~ "smashed window takes a long time to climb through, and it's possible to " -#~ "hurt\n" -#~ "yourself on the broken glass, but it's a good last-ditch escape route. " -#~ "You\n" -#~ "can smash through other things, too; use the ';' command and look for " -#~ "things\n" -#~ "that are \"Smashable.\"" +#~ "A unified power supply, or UPS, is a device developed jointly by military " +#~ "and scientific interests for use in combat and the field. The UPS is " +#~ "designed to power armor and some guns, but drains batteries quickly." #~ msgstr "" -#~ "你可以按然‘s’然后按移动键打破窗户。一个破碎的\\n\n" -#~ "窗户需要很长时间才能爬上通过,并且破碎的玻璃\\n\n" -#~ "有可能划伤你自己,但它是一个很好的最后逃生路\\n\n" -#~ "线。你也可以凭此做其他的事情;使用“;”命令可以\\n\n" -#~ "查看物品能否摧毁。" +#~ "UPS电源,即不间断电源供应,军事设施及研究设施里很常见。用于给某些装甲和枪" +#~ "械供能。" #~ msgid "" -#~ "You just stepped on a space with one or more items. If you wish to pick " -#~ "it\n" -#~ "up, press ',' or 'g'." -#~ msgstr "若你刚好踩在一个或多个物品上,如果想捡起物品,按',' 或 'g'。" - -#~ msgid "Stepped on bubblewrap." -#~ msgstr "踩上气泡袋。" - -#~ msgid "Yuki" -#~ msgstr "由纪" - -#~ msgid "West" -#~ msgstr "韦斯特" - -#~ msgid "Takeuchi" -#~ msgstr "竹内" - -#~ msgid "Van Wilde" -#~ msgstr "范·维尔德" - -#~ msgid "Heather" -#~ msgstr "希瑟" +#~ "A high-powered stun gun. Use this item to attempt to electrocute an " +#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " +#~ "shock can actually jump through the air, it is difficult to miss." +#~ msgstr "" +#~ "这是一把高功率的电击枪。使用它可以使指定地点及临近的敌人受伤且暂时瘫痪。因" +#~ "为该攻击是像电磁炮一样穿梭于空气中的,所以很难Miss。" -#~ msgid "Kyosuki" -#~ msgstr "京介" +#~ msgid "" +#~ "A portable games console in working condition, with a backlit screen " +#~ "allowing you to play in the dark. You can use it to play it for a little " +#~ "while, but this requires batteries." +#~ msgstr "" +#~ "一个完好的便携式游戏机,它有一个背光屏幕可以在黑暗中使用,你需要电池才能玩一" +#~ "会." -#~ msgid "Natsuki" -#~ msgstr "夏纪" +#~ msgid "" +#~ "A stone with spirals all over it, and holes around its perimeter. Though " +#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " +#~ "it." +#~ msgstr "" +#~ "一块遍布漩涡刻痕的石头,四周遍布着孔洞。虽然看上去不小,但几乎没有重量,似" +#~ "乎有气流聚集在这块石头的周围。" -#~ msgid "Nuku" -#~ msgstr "努库" +#~ msgid "A human skull with strange etchings covering it." +#~ msgstr "这是一个雕刻着奇怪刻印的人的头骨。" -#~ msgid "Hikari" -#~ msgstr "光" +#~ msgid "Food for dogs. It smells strange, but dogs love it." +#~ msgstr "狗粮,闻起来很奇怪,但是狗狗喜欢。" -#~ msgid "Keita" -#~ msgstr "庆太" +#~ msgid "A crude explosive device triggered by a piece of string." +#~ msgstr "" +#~ "由引线启动的简陋炸药。再也不用担心炸弹捻被人不小心踩灭的尴尬事情发生了。" -#~ msgid "Kira" -#~ msgstr "基拉" +#~ msgid "Highly explosive, use with caution! Armed with a small timer." +#~ msgstr "" +#~ "一不留神就会爆炸的东西,使用时千万要小心啊!外面露出来一个小巧的计时器,好" +#~ "像可以激活吧。" #~ msgid "" -#~ "A powdered antihemorrhagic compound which reacts with blood to " -#~ "immediately form a gel-like substance which stops bleeding." -#~ msgstr "止血粉,用于止血和抗复合反应" - -#~ msgid "Aizawa" -#~ msgstr "相沢" - -#~ msgid "Daisuki" -#~ msgstr "だいすき" - -#~ msgid "Akiko" -#~ msgstr "亜希子" +#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " +#~ "and ticking!" +#~ msgstr "" +#~ "一不留神就会爆炸的东西,使用时千万要小心啊!外面露出来一个小巧的计时器,正" +#~ "在滴滴答答地响呢。" #~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. Use this item " -#~ "to light the fuse; you will, of course, need a lighter in your inventory " -#~ "to do this. After lighting it, throw it to cause fires." -#~ msgstr "一个塞满火柴头的瓶子并装备了导火索。用打火机点燃它,然后纵火吧!!" +#~ "A small whistle. When used, it produces a high tone that causes nearby " +#~ "friendly dogs to either follow you closely and stop attacking, or start " +#~ "attacking enemies if they are currently docile." +#~ msgstr "" +#~ "一只小型的哨子,吹它的时候会产生一种高频的声波,让附近所有非敌对状态的狗狗" +#~ "都会向你靠拢并为你而战。" #~ msgid "" -#~ "A brass-jacketed .22 calibre round with superior penetration capacity." -#~ msgstr ".22黄铜被甲高穿透力子弹。" +#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " +#~ "the sample. Use this tool to draw blood, either from yourself or from a " +#~ "corpse you are standing on." +#~ msgstr "" +#~ "一个用于抽血的工具,真空密封的针筒可以存放血样。你可以用它抽血,至于是抽你" +#~ "自己的,还是其他什么奇怪生物的,随你的兴趣了。" -#~ msgid "You %4$s the %1$s into %2$i %3$s." -#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." -#~ msgstr[0] "你 %4$s 这 %1$s 变成 %2$i %3$s。" +#~ msgid "A tool for welding metal pieces together. Useful for construction." +#~ msgstr "用来焊接金属的工具,非常有用。" #~ msgid "" -#~ "Most monsters will have to smash their way through a closed door. If a " -#~ "door\n" -#~ "is locked or stuck, you can smash it by pressing 's' and then a movement " -#~ "key." -#~ msgstr "" -#~ "大多数怪物不得不破坏掉关闭的房门才能进入。而对于你这个普通人,\n" -#~ "可以按 's' 配合方向键来破坏锁住或者堵住的房门。当然这和你手里拿的\n" -#~ "家伙也有直接关系。" +#~ "A military style fold up cot, not quite as comfortable as a bed but much " +#~ "better than slumming it on the ground." +#~ msgstr "一张折叠起来的行军床,虽然没家里的床舒服,但至少比睡在地上好多了。" #~ msgid "" -#~ "You can close an opened door by pressing 'c' and then a movement key. " -#~ "Closing\n" -#~ "doors behind you can often slow down throngs of monsters greatly." +#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " +#~ "from the floor, making it easier to sleep" #~ msgstr "" -#~ "你可以用 'c'配合方向键来关闭已经打开的门。养成随手关门的好习惯\n" -#~ "可以有效的延缓怪物野兽接近你的速度。关键时可是能救下你的小命哦。" +#~ "一大张卷起来的泡沫塑料,很方便存放的样子,如果铺开也能当做一个床铺来使用。" #~ msgid "" -#~ "That brown '+' next to you is a closed door. To open it, either simply " -#~ "walk\n" -#~ "into it, or press 'o' and then a movement key." +#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " +#~ "with. Its small tip allows for a precision strike in the hands of the " +#~ "skilled. It is too small to butcher corpses with." #~ msgstr "" -#~ "你身旁的棕色 '+'是一扇关闭的房门。要打开它,简单点你可以\n" -#~ "直接移动过去,或者按小写字母 'o' 再配合方向键。" +#~ "一把小型的,非常锋利的刀具,伤害不错但很难打中敌人。锋利的它可以用来屠宰尸" +#~ "体。" #~ msgid "" -#~ "To see what the symbols around you mean, press ';'. You'll be able to " -#~ "scroll\n" -#~ "around and get information on the terrain, monsters, and items in the " -#~ "world\n" -#~ "around you." +#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " +#~ "precision strike in the hands of the skilled." #~ msgstr "" -#~ "观察周围的环境,你可以按 ';' 。这时候你可以四处移动\n" -#~ "光标来得到关于在你周围的地形、怪物、物品的讯息。" +#~ "一把小型的,非常锋利的刀具,被广泛应用于各项外科手术中。如果你很擅长近战武" +#~ "器的话,它也会是一件大杀器。" + +#~ msgid "This huge iron knife makes an excellent melee weapon." +#~ msgstr "这是把巨大的铁刀,可以作为青龙偃月刀使。" #~ msgid "" -#~ "The '@' character in the center of the screen represents you. To move, " -#~ "you\n" -#~ "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have " -#~ "your\n" -#~ "character wait in place, press '.'" +#~ "This huge iron knife has been modified with a fuel tank, insulated " +#~ "handguard and ignition system. The blade is glowing with heat, making it " +#~ "a great plant scorcher and nightlight." #~ msgstr "" -#~ "这个屏幕中间的 '@' 字符就是你啦!长的不够帅?没关系,活下去就行\n" -#~ "你可以使用数字小键盘、vi键 (hjklyubn)、或者方向键来进行移动。你也\n" -#~ "可以按 '.' 让你的小@呆在那里任凭时间流逝。" +#~ "这把大铁刀已经被改装成具备燃料储存,隔热以及点火系统.刀刃因热而发光,让周围" +#~ "变得更亮,同时也变得非常热." #~ msgid "" -#~ "Welcome to the Cataclysm tutorial! As you play, pop-ups like this one " -#~ "will\n" -#~ "appear to guide you through the basic game actions. Pressing spacebar " -#~ "will\n" -#~ "close the pop-up." +#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " +#~ "effective against armor." #~ msgstr "" -#~ "欢迎来到大灾变CDDA教程之旅,你很幸运的成为了一名大灾变幸存者。\n" -#~ "就像你现在看到的,这样的弹出提示窗口将会贯穿整个基础训练。你可\n" -#~ "以按 '空格' 键关闭这个弹窗。" - -#~ msgid "Default: %f - Min: %f, Max %f" -#~ msgstr "默认: %f - 最小: %f, 最大: %f" - -#~ msgid "Default: %d - Min: %d, Max %d" -#~ msgstr "默认: %d - 最小: %d, 最大: %d" - -#~ msgid "Westmanland" -#~ msgstr "维斯特曼兰德" - -#~ msgid "Westerly" -#~ msgstr "韦斯特里" - -#~ msgid "West Tisbury" -#~ msgstr "西蒂斯伯里" - -#~ msgid "West Fairlee" -#~ msgstr "西费尔利" - -#~ msgid "West Boylston" -#~ msgstr "西博尔斯顿" - -#~ msgid "Weld" -#~ msgstr "韦尔德" +#~ "一把日本刀,锋利的刀刃可以轻易划开没有护甲的肉体,甚至对于护甲也有很好的穿" +#~ "透力。德艺双馨的苍井空老师曾经拿着它上演过切瓜砍菜的丧尸无双。" -#~ msgid "Ware" -#~ msgstr "威尔" +#~ msgid "" +#~ "A katana that glows with the fury and heat of the SUN! Well, okay it's " +#~ "not THAT hot, but getting hit with it still stings like the dickens." +#~ msgstr "" +#~ "武士刀可以发出愤怒灼热的光,当然这不是因为热,但它仍然像魔鬼一样刺痛。" -#~ msgid "Wardsboro" -#~ msgstr "沃兹伯勒" +#~ msgid "A simple wood pole made deadlier by the blade tied to it." +#~ msgstr "顶端绑着一把刀刃的长长的木棍,吓唬人很不错。" -#~ msgid "Wallagrass" -#~ msgstr "沃格拉斯" +#~ msgid "" +#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " +#~ "makes any battle a stylish battle." +#~ msgstr "很适合绅士与剑士使用的武器,轻盈而迅捷,可以适用于各种战斗。" -#~ msgid "Waldoboro" -#~ msgstr "沃尔多伯勒" +#~ msgid "A huge two-handed sword from Germany. Packs a real whallop." +#~ msgstr "一把德制巨型双手剑,极具视觉冲击力。" -#~ msgid "Voluntown" -#~ msgstr "沃伦镇" +#~ msgid "" +#~ "A large blade that has had a portion of the handle wrapped in duct tape, " +#~ "making it easier to wield as a rough machete." +#~ msgstr "一把由胶带包裹着手柄的刀片,可以凑合着当砍刀用。" -#~ msgid "Victory" -#~ msgstr "胜利之城" +#~ msgid "" +#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " +#~ "built into the insulated hilt. When filled with gasoline, the blade can " +#~ "be made scorching hot to singe enemies and light your way." +#~ msgstr "" +#~ "大刀片的一侧有燃料管,和一个小槽和内置在绝缘柄的点火器。当装满汽油,刀片可" +#~ "灼热烧焦敌人,照亮你的道路。" -#~ msgid "Vershire" -#~ msgstr "维夏利" +#~ msgid "" +#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " +#~ "built into the insulated hilt. The blade is glowing brightly." +#~ msgstr "" +#~ "大刀片的一侧有燃料管,和一个小槽和内置在绝缘柄的点火器。刀片会发出明亮的" +#~ "光。" -#~ msgid "Veazie" -#~ msgstr "维尼兹" +#~ msgid "" +#~ "A large blade attached to a long stick. Could do a considerable amount of " +#~ "damage." +#~ msgstr "长长的棍子上有个大大的刀片,能造成严重的伤害。" -#~ msgid "Unity" -#~ msgstr "尤尼媞" +#~ msgid "" +#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " +#~ "corpses." +#~ msgstr "一把尖锐的刀,不是做武器的料,但很适合用来屠宰尸体。" -#~ msgid "Tyngsborough" -#~ msgstr "提幅墩钵罗夫" +#~ msgid "" +#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " +#~ "butchering corpses." +#~ msgstr "一把锋利、厚重的刀子,是个做武器的好材料,也可以用来屠宰尸体。" -#~ msgid "Tuftonboro" -#~ msgstr "提夫顿波罗" +#~ msgid "" +#~ "Designed for combat, and deadly in the right hands. Can be used to " +#~ "butcher corpses." +#~ msgstr "专为战斗设计,右手使用可进行致命攻击。可用于屠宰。" -#~ msgid "Trescott" -#~ msgstr "提斯科特" +#~ msgid "A flimsy saw, useful for cutting through wood objects." +#~ msgstr "一个易损坏的锯子,可以用来锯木头。" -#~ msgid "Tisbury" -#~ msgstr "媞斯百瑞" +#~ msgid "" +#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." +#~ msgstr "" +#~ "巨大的双手斧。是个优秀的近战武器,至于速度比较慢,请不要在意这些细节。" -#~ msgid "Tinmouth" -#~ msgstr "媞莫斯" +#~ msgid "A sturdy saw, useful for cutting through metal objects." +#~ msgstr "一把坚固的锯子,能切割金属。" -#~ msgid "Swanzey" -#~ msgstr "斯万泽" +#~ msgid "A small tent, just big enough to fit a person comfortably." +#~ msgstr "一顶小帐篷,足够一个人舒舒服服地钻进去睡大觉。" #~ msgid "" -#~ "A portable charcoal fired metalworking forge. Combined with the right " -#~ "tools, you can use this for metalworking." -#~ msgstr "" -#~ "一种便携式烧炭金工锻造工具。搭配合适当的工具,您可以用来加工金属物品。" +#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " +#~ "amount of light" +#~ msgstr "汽油浸过的布胡乱地缠在棍子上,点燃了似乎就能照亮四周。" #~ msgid "" -#~ "A sharpened stone affixed to a stick, works passably well as an axe but " -#~ "really can't compare to a proper axe." -#~ msgstr "" -#~ "一片锋利的石头被绑在一根棍子上,也能当斧子来用啦,可惜和铁斧相比,就差得远" -#~ "了。" +#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " +#~ "producing plenty of light" +#~ msgstr "汽油浸过的布胡乱地缠在棍子上,正在燃烧,看,你有光了。" #~ msgid "" -#~ "A small hand press for hand loading firearm ammunition. Comes with " -#~ "everything you need to start hand loading." +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time." #~ msgstr "" -#~ "需要手动去压缩弹药填充的枪支,手工装载完弹药便可以拥有你想要的一切。" +#~ "一只粗蜡烛,除了提供足够时间的可怜照明亮度之外,也可能有过些奇奇怪怪的用" +#~ "途。" #~ msgid "" -#~ "An advanced version of the unified power supply, or UPS. This device has " -#~ "been significantly redesigned to provide better efficiency as well as to " -#~ "consume plutonium fuel cells rather than batteries." +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time. This candle is lit." #~ msgstr "" -#~ "UPS(unified power supply)电源的高级改良版,经过重新设计,不再消耗普通电" -#~ "池而是消耗钚电池。" +#~ "一只粗蜡烛,除了提供足够时间的可怜照明亮度之外,也可能有过些奇奇怪怪的用" +#~ "途。这支蜡烛已经点着了。" #~ msgid "" -#~ "Use this item to pull the pin. Five turns after you do that, it will " -#~ "begin to expel a thick black smoke. This smoke will slow those who enter " -#~ "it, as well as obscuring vision and scent." +#~ "A large stand with slots in the side. (a)ctivate it and place it " +#~ "somewhere then set fires in it with no risk of spreading." #~ msgstr "" -#~ "拔下安全销来使用烟雾弹,你将有五回合时间来扔掉它,之后它会释放浓厚的烟雾," -#~ "让所有进入其中的倒霉蛋速度下降,顺便浓烟还能阻碍视线,掩盖气味,真乃杀人放" -#~ "火、逃命飞奔之必备良器。" +#~ "侧面有孔的盆子。(a)键把它放在某处,然后在里面点火,火势就不会四处蔓延了。" #~ msgid "" -#~ "Use this item to pull the pin. Five turns after you do that, it will " -#~ "begin to expel a highly toxic gas for several turns. This gas damages and " -#~ "slows those who enter it, as well as obscuring vision and scent." +#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " +#~ "container beneath it to collect water when it rains." #~ msgstr "" -#~ "拔下安全销来使用毒气弹,你将有五回合时间来扔掉它,接下来的几个回合它会在周" -#~ "围释放毒气,让所有进入毒雾的倒霉蛋受到毒害速度下降,顺便毒雾还能阻碍视线," -#~ "掩盖气味,真乃杀人放火、逃命飞奔之必备良器。" +#~ "一个用来收集雨水的漏斗状装置。户外a键激活放置好,然后在它下面放一个容器就" +#~ "可以收集雨水了。" #~ msgid "" -#~ "This is a highly modified EMP grenade, designed to scramble robots' " -#~ "control chips, rather than destroy them. This converts the robot to your " -#~ "side for a short time, before the backup systems kick in." +#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " +#~ "outside and place a container beneath it to collect water when it rains." #~ msgstr "" -#~ "这是一个高度修改的EMP手雷,用来获取机器人芯片的控制权,从而让它们站在你这" -#~ "边。可惜,效果只能维持一会,然后就会被机器人的备用系统取代。" +#~ "一个用来收集雨水的小型手工粗制漏斗状装置。户外a键激活放置好,然后在它下面" +#~ "放一个容器就可以收集雨水了。" + +#~ msgid "A tool used for disassembling firearm ammunition." +#~ msgstr "这是一个用来拆卸子弹的装置。" #~ msgid "" -#~ "Your entire body may resonate at very high power, creating a short-range " -#~ "shockwave. While it will not too much damage to flexible creatures, " -#~ "stiff items such as walls, doors, and even robots will be severely " -#~ "damaged." -#~ msgstr "" -#~ "整个身体产生高强度共振并引发一个短距离音波。虽然它不会对柔软的生物造成较高" -#~ "伤害,但是却对硬物如墙体门窗甚至是机器人效果拔群。" +#~ "A Philips-head screwdriver, important for almost all electronics crafting " +#~ "and most mechanics crafting." +#~ msgstr "一把十字螺丝刀,对于几乎所有电子制作和机械制作都十分重要。" #~ msgid "" -#~ "Compact Bionics Module developed at DoubleTech Industries as a " -#~ "replacement for the highly successful CBM: Power Storage. Increases you " -#~ "power capacity by 10 units." -#~ msgstr "" -#~ "杜布勒科技公司研发的旨在取代第一代储能模块的新一代生化插件,能够为你增加10" -#~ "点能量储备上限。" +#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " +#~ "mechanics crafting recipes." +#~ msgstr "一把扳手,能当做武器握在手里,也是许多机械制造必备之物。" -#~ msgid "Triggered a boobytrap." -#~ msgstr "触发了一个诱杀陷阱。" +#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." +#~ msgstr "一只木棍被切割成木质的机关,用于制作圈套陷阱。" -#~ msgid "Stepped on a lane mine." -#~ msgstr "踩到了地雷" +#~ msgid "" +#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " +#~ "gauge wire." +#~ msgstr "一个用于剪断电线的老虎钳,你还可以用它来剪断铁丝网和锁链。" + +#~ msgid "An unwieldy mop. Good for cleaning up spills." +#~ msgstr "笨重的拖把,清理泄露的液体很不错。" #~ msgid "" -#~ "If true, shift the view toward the selected item if it is outside of your " -#~ "current viewport." -#~ msgstr "设定为 是,若检视的物品超出画面范围,将会移动画面到该物品位置。" +#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " +#~ "quickly opening locks." +#~ msgstr "锁匠用的开锁工具,想安静而迅速地开门就把它带上吧。" #~ msgid "" -#~ "Your overall skill in using firearms. With higher levels, this general " -#~ "experience increases accuracy with any gun, but is secondary to practice " -#~ "with the type of gun in question." +#~ "An improvised easy breaking picklock made from scrap metal, needs " +#~ "MacGyver like skills to open locks, it's light material lessens chances " +#~ "of alarms being set off." #~ msgstr "" -#~ "你使用枪支的整体技能,等级越高,说明你枪支的命中率越高,前提是枪是好的。" +#~ "简易的撬锁工具,用一块金属碎片做成,用它来撬锁对一般人来说有些强人所难,不" +#~ "过,它确实能降低触发警报的几率。" #~ msgid "" -#~ "Your legs have transformed into six tentacles. This decreases your speed " -#~ "on land by 20%%, but makes your movement silent. However, they also " -#~ "increase your swimming speed. Somewhat decreases wet penalties." -#~ msgstr "" -#~ "你的腿变成了六条触须。这会降低你20%左右的陆地移动速度,但让你走路没有声" -#~ "音。然而,也增加你的游泳速度,减少湿身的不爽感。" +#~ "A combination lock box, breaking inside would destroy anything of value." +#~ msgstr "一个组合式锁箱,强行打开的话会破坏里头值钱的东西。" + +#~ msgid "A large steel pickaxe, strike the earth!" +#~ msgstr "一把大型钢制丁字镐,用来凿穿地面吧!" #~ msgid "" -#~ "The bottoms of your feet are strongly padded. You receive no movement " -#~ "penalty for not wearing shoes, and even receive a 10%% bonus when running " -#~ "barefoot. Slightly decreases wet penalties." -#~ msgstr "" -#~ "你的脚底有个肉垫,不穿鞋子可以增加10%速度,穿鞋就没效果。稍微降低了湿的处" -#~ "罚" +#~ "A spray can, filled with paint. Use this tool to make graffiti on the " +#~ "floor." +#~ msgstr "装满油漆的喷雾罐。可以用来在地面上涂鸦。" #~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire. This one features a flip top cover and can be " -#~ "refueled when empty." +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." +#~ msgstr "特大号™工业的商标,介于常见商标和喷漆罐大小的一半。" + +#~ msgid "Rag, useful in crafting and possibly stopping bleeding" #~ msgstr "" -#~ "一个打火机可以用来吸食毒品,如香烟,或者其他轻型毒品。你也可以用打火机点燃" -#~ "火附近的东西。如果用完了还以重新添加燃料。" +#~ "布条,制作时很有用,也可以绑在流血处,或许能止血,一次不成再绑一次。" + +#~ msgid "A piece of plastic. Not much use except to repair plastic items" +#~ msgstr "一块塑料。除了修复塑料制品外没啥用处。" + +#~ msgid "A piece of kevlar. Can be used to repair kevlar items" +#~ msgstr "一片凯夫拉材料,用于修理由凯夫拉做成的东西。" #~ msgid "" -#~ "A huge curved two-handed sword from Japan. Surprisingly light for its " -#~ "size." -#~ msgstr "双手日本刀,外表闪亮着寒光。" +#~ "A small multipurpose electronic device. Can be loaded with a variety of " +#~ "apps, providing all kinds of functionality." +#~ msgstr "小型多用途电子设备。可加载各种各样的应用程序以提供各种功能。" #~ msgid "" -#~ "A set of swages and dies for metalsmithing. Used in some metalworking " -#~ "fabrication recipes." -#~ msgstr "一组用于加工模具的型砧。用于某些金属加工制造的模具。" +#~ "A small multipurpose electronic device. This PDA has its flashlight app " +#~ "on, and is providing light." +#~ msgstr "小型多功能电子设备,这个PDA上有装手电筒程序,还可以用来照明。" + +#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgstr "一把折叠刀,作为武器那是相当糟糕,但总比没有好。" #~ msgid "" -#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "短,粗壮的金工凿。用于某些金属加工制造的道具。" +#~ "A sharp needle made from a bone. It would be useful for making rough " +#~ "clothing and items" +#~ msgstr "一根用骨头制成的针,可以用来制作简单的衣物及道具等。" #~ msgid "" -#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " -#~ "cooking or in metalworking fabrication recipes." -#~ msgstr "长的钢钳。可以是一个顺手的近战武器,也是常用的烹调或加工制作道具。" +#~ "A rock affixed to a stick, functions adequately as a hammer, but really " +#~ "can't compare to a proper hammer." +#~ msgstr "一个插着棒子的岩石,勉强可以做锤子,但山寨的毕竟比不过真的。" #~ msgid "" -#~ "An enormously heavy block of oddly shaped steel with a chisel-like " -#~ "projection set into the corner. Used in most metalworking fabrication " -#~ "recipes." -#~ msgstr "一个非常沉重形状奇特带有边边角角的钢凿子。大多用来金属加工。" +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." +#~ msgstr "扁平的石头绑在了木棍上,就当做铁锹用吧,虽然显然比不上啊。" #~ msgid "" -#~ "A small metalworking crucible. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "一个小的金属坩埚。用于某些金属加工制造的模具。" +#~ "A large stick, with the end carved into a blade for digging. Can be used " +#~ "to dig shallow pits, but not deep ones." +#~ msgstr "棍子的底端削成了薄片,似乎能用来锄地,虽然一看就挖不了多深。" + +#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgstr "用毛皮和木棍组合成的小帐篷,可以把它架设在地面上。" #~ msgid "" -#~ "A portable electric metalworking forge, powered by standard batteries. " -#~ "Combined with the right tools, you can use this for metalworking." +#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " +#~ "shelter has been damaged, and needs repairs." #~ msgstr "" -#~ "一种便携式电动金工锻造工具,由标准电池供电。搭配合适当的工具,您可以用来加" -#~ "工金属物品。" +#~ "用毛皮和木棍组合成的小帐篷,可以把它架设在地面上。顺便提醒一下,它似乎受损" +#~ "了,最好修一修。" #~ msgid "" -#~ "A hand-carved wooden smoking pipe designed to facilitate consumption of " -#~ "fire cured tobacco leaves." -#~ msgstr "手工制作的烟斗,可以用来吸食烟叶。" +#~ "A heatpack, used to treat sports injuries and heat food. Usable only " +#~ "once." +#~ msgstr "一次性加热贴,可以被用来处理伤口或者加热食物。" #~ msgid "" -#~ "A hand-blown glass pipe of the type most commonly used to smoke " -#~ "hallucinatory plants." -#~ msgstr "一种手工制作的玻璃管,经常被用来吸食迷幻类植物制品。" +#~ "A heatpack, used to treat sports injuries and heat food. This one has " +#~ "been used already and is now useless." +#~ msgstr "" +#~ "一次性加热贴,可以被用来处理伤口或者加热食物,但这个加热贴已经被用过了,现" +#~ "在没用了。" #~ msgid "" -#~ "A sealed glass jar containing pickled human flesh. Activate to open. You " -#~ "might even enjoy it." -#~ msgstr "一罐即食腌制人肉。也许你并不讨厌它,笑。" +#~ "A sealed glass jar containing some meat. Activate to open and enjoy." +#~ msgstr "一个密封了的肉罐头,打开之后尽情享用吧。" + +#~ msgid "A sealed glass jar containing kompot. Activate to open and enjoy." +#~ msgstr "一个密封了的kompot罐头,打开之后尽情享用吧。" #~ msgid "" -#~ "A sealed glass jar containing pickled meat. Activate to open and enjoy." -#~ msgstr "一个罐头腌肉,打开即食。" +#~ "A sealed glass jar containing human meat. Activate to open and enjoy." +#~ msgstr "一个密封了的人肉罐头,打开之后尽情享用吧。" + +#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." +#~ msgstr "一个密封了的蔬菜罐头,打开之后尽情享用吧。" + +#~ msgid "sealed jar of canned apple" +#~ msgstr "密封的苹果罐头" #~ msgid "" -#~ "A sealed glass jar containing a pickled vegetable. Activate to open and " -#~ "enjoy." -#~ msgstr "一罐密封的即食泡菜。打开即食。" +#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." +#~ msgstr "切成片的苹果被整齐地摆放在密闭的玻璃瓶中,任君品尝。" #~ msgid "" -#~ "Thin paper strips intended for the rolling of cigarettes. Could also be " -#~ "used to make cartridges for a cap and ball revolver." -#~ msgstr "卷烟丝用的薄纸带。也可以制作火药左轮枪的弹药。" +#~ "A cordless drill with a selection of drill bits. The charger base " +#~ "contains a battery draining attachment so the drill can be charged in " +#~ "lieu of mains power." +#~ msgstr "" +#~ "无绳电钻,有许多备用钻头,充电底座上还有一个小装置,能从电池中获取能量。" #~ msgid "" -#~ "Antibacterial medication designed to prevent or stop the spread of " -#~ "infection, in exchange for making future infections harder to stop or " -#~ "prevent." -#~ msgstr "抗菌药物的设计来防止或阻止感染的传播,但是对严重的感染效果有限。" +#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." +#~ msgstr "便携式真空热封口机,用于包装真空食品以延长食物保质期。" -#~ msgid "An ornamental suit of armor." -#~ msgstr "一件装饰金属外套。" +#~ msgid "" +#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "鲜美的肉被削成了片状,被真空封装安静地躺在塑料袋里。撕开这拘束它的牢笼,把" +#~ "它解放吧!" -#~ msgid "Your raincoat protects you from the acid rain." -#~ msgstr "你的雨衣可以保护你免受酸雨伤害." +#~ msgid "" +#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "" +#~ "多汁的蔬菜被削成了片状,被真空封装安静地躺在塑料袋里。撕开这拘束它的牢笼," +#~ "把它解放吧!" -#~ msgid "Your raincoat protects you from the acidic drizzle." -#~ msgstr "你的雨衣保护你免受酸性细雨的伤害。" +#~ msgid "vacuum-packed apple slices" +#~ msgstr "真空封装的苹果片" -#~ msgid " and stunning it" -#~ msgstr " 并且把它撞晕了" +#~ msgid "" +#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " +#~ "enjoy." +#~ msgstr "真空包装密封的苹果片,打开好好享受吧。" -#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" -#~ msgstr "%s的%s撞上了%s,造成%d伤害(%s)!" +#~ msgid "A decent sized piece of cotton designed for medical purposes." +#~ msgstr "一团医用棉,大小正合适。" -#~ msgid "Fuel usage (safe): " -#~ msgstr "油耗(安全): " +#~ msgid "A talking doll for children, luckily it still works." +#~ msgstr "" +#~ "一个熊孩子喜欢的会说话的玩偶,叫杰克狗。你按了下开关,咦,这货还没坏!" -#~ msgid " lack" -#~ msgstr "不够" +#~ msgid "A fluffy towel, can be used to dry yourself." +#~ msgstr "一条全棉毛巾,你可以用它擦干自己。" -#~ msgid "enough" -#~ msgstr "足够" +#~ msgid "A bicycle folded into a relatively portable package." +#~ msgstr "一辆可以打包带走的自行车。" -#~ msgid "Wheels: " -#~ msgstr "车轮: " +#~ msgid "" +#~ "A still, useful for the distillation of alcohol and other, more curious " +#~ "substances." +#~ msgstr "一个蒸馏器,用来提存酒精或更多其他更奇妙的物质." -#~ msgid "K mass: " -#~ msgstr "K 质量: " +#~ msgid "A plastic mold which can be used to craft items made of plastic." +#~ msgstr "一个塑料模具,可以用于塑料制成的工艺品。" -#~ msgid "K dynamics: " -#~ msgstr "K 动力: " +#~ msgid "" +#~ "This chemistry set stored in a bag contains some glass containers, some " +#~ "metal wire and safety glasses. It might be used to craft some chems if " +#~ "you're so inclined." +#~ msgstr "" +#~ "这个包里存放的一套化学用品包括一些玻璃器皿,一些金属线以及护目镜.如果你想制" +#~ "作一些化学品,它可为你提供一定的便利." -#~ msgid "Mass: lbs" -#~ msgstr "质量: lbs" +#~ msgid "" +#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " +#~ "stimulant when you inject yourself with it." +#~ msgstr "一支包含一次计量强心剂的针筒。注射这玩意会让你嗨到翻。" -#~ msgid "Mass: kg" -#~ msgstr "质量: kg" +#~ msgid ".45 caliber retool" +#~ msgstr ".45口径转换器" -#~ msgid "Accel.: mph/t" -#~ msgstr "加速度: mph/t" +#~ msgid "9mm caliber retool" +#~ msgstr "9mm口径转换器" -#~ msgid "Top speed: mph" -#~ msgstr "最高车速: mph" +#~ msgid ".22 caliber retool" +#~ msgstr ".22口径转换器" -#~ msgid "Safe speed: mph" -#~ msgstr "安全车速: mph" +#~ msgid "5.7mm caliber retool" +#~ msgstr "5.7mm口径转换器" -#~ msgid "Accel.: Kmh/t" -#~ msgstr "加速度: Kmh/t" +#~ msgid "4.6mm caliber retool" +#~ msgstr "4.6mm口径转换器" -#~ msgid "Top speed: Km/h" -#~ msgstr "最高车速: Km/h" +#~ msgid ".308 caliber retool" +#~ msgstr ".308口径转换器" -#~ msgid "Safe speed: Km/h" -#~ msgstr "安全车速: Km/h" +#~ msgid ".223 caliber retool" +#~ msgstr ".223口径转换器" -#~ msgid "You need a hose to siphon water." -#~ msgstr "你需要一个软管来抽水。" +#~ msgid "" +#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " +#~ "sure footing." +#~ msgstr "你可以比别人跑得更快,你步行的速度增加15%" -#~ msgid "Choose wheel to use as replacement: " -#~ msgstr "选择用来更换的轮胎: " +#~ msgid "You're just generally quick! You get a 10%% bonus to action points." +#~ msgstr "你比一般人要迅速!你比一般人行动快10%." -#~ msgid "hose" -#~ msgstr "软管" +#~ msgid "" +#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." +#~ msgstr "打倒你要付出高昂的代价!你的生命值上限增加20%%。" -#~ msgid "You need a hose to siphon fuel." -#~ msgstr "你需要一个软管来抽油。" - -#~ msgid "To change a wheel you need a " -#~ msgstr "要更换轮胎你需要一个 " +#~ msgid "" +#~ "You can manage to find space for anything! You can carry 40%% more volume." +#~ msgstr "你全身都是存储空间!口里还可以叼物品!你的携带空间增加40%%。" -#~ msgid "You need %s." -#~ msgstr "你需要%s。" +#~ msgid "Cross-Dresser" +#~ msgstr "异装癖" -#~ msgid "Needs " -#~ msgstr "需要 " +#~ msgid "" +#~ "Covering your body in clothing typical for the opposite gender makes you " +#~ "feel better." +#~ msgstr "绅士的你穿上异性的服装会让你感到很嗨。" -#~ msgid "The %s triggers a boobytrap!" -#~ msgstr "%s 触发了一个诡雷!" +#~ msgid "Android" +#~ msgstr "仿生人" -#~ msgid "You trigger a boobytrap!" -#~ msgstr "你触发了一个诡雷!" +#~ msgid "" +#~ "At some point in the past you had a bionic upgrade installed in your " +#~ "body. You start the game with a power system, and one random bionic " +#~ "enhancement." +#~ msgstr "" +#~ "过去的某个时候你身体里被安装了一些仿生插件。开始游戏时你将拥有一个基础能量" +#~ "系\n" +#~ "统和随机的仿生学插件。" -#~ msgid "The %s steps on a landmine!" -#~ msgstr "%s踩到地雷了!" +#~ msgid "Shaolin Adept" +#~ msgstr "少林功夫" -#~ msgid "You trigger a landmine!" -#~ msgstr "你引爆了一个地雷!" +#~ msgid "" +#~ "You have studied the arts of the Shaolin monks. You start with one of the " +#~ "five animal fighting styles: Tiger, Crane, Leopard, Snake, or Dragon." +#~ msgstr "" +#~ "你是少林寺的俗家弟子。你在开始的时候可以选择少林虎形拳、少林豹形拳、少林鹤" +#~ "形\n" +#~ "拳、少林蛇形拳或者少林龙形拳之一。" -#~ msgid "You step on some bubblewrap!" -#~ msgstr "你踩到了一些气泡袋!" +#~ msgid "Venom Mob Protege" +#~ msgstr "五毒教叛徒" -#~ msgid "boobytrap" -#~ msgstr "诡雷" +#~ msgid "" +#~ "You are a pupil of the Venom Clan. You start with one of the five deadly " +#~ "venoms: Centipede, Viper, Scorpion, Lizard, or Toad." +#~ msgstr "" +#~ "你是五毒教的徒众。你在游戏开始时可以使用蜈蚣拳,毒蛇拳,蝎子拳,蜥蜴拳或蛤" +#~ "蟆\n" +#~ "功之一。" -#~ msgid " +Damage" -#~ msgstr " +伤害" +#~ msgid "" +#~ "You simply can not carry as much as people with a similar strength could. " +#~ "Your maximum weight carried is reduced by 35%%." +#~ msgstr "你比一般人携带的东西更少。你的最大载重量减少35%%。" -#~ msgid " +Attack" -#~ msgstr " +攻击" +#~ msgid "" +#~ "Your head can't take much abuse. Its maximum HP is 20%% lower than usual." +#~ msgstr "你的头骨很脆,经不起太大打击。头部HP上限减少五分之一。" -#~ msgid " +Dodge" -#~ msgstr " +闪避" +#~ msgid "" +#~ "Your whole body can't take much abuse. Its maximum HP is 75%% points " +#~ "lower than usual. Stacks with Glass Jaw. Not for casuals." +#~ msgstr "你的体质孱弱,最大生命值降低75%。可与 玻璃头 叠加。慎选!" #~ msgid "" -#~ "Your %s already has 4 mods installed! To remove the mods,press 'U' while " -#~ "wielding the unloaded gun." -#~ msgstr "" -#~ "你的%s已经装了4个模块了!要卸模块的话,把卸掉模块的枪拿在手里,按U。" +#~ "Your legs are extremely limber and fast-moving. You run 30%% faster on " +#~ "flat surfaces." +#~ msgstr "跑步运动员" -#~ msgid "It looks manly.\n" -#~ msgstr "它看上去很man。\n" +#~ msgid "Your muscles are generally slow to move. You run 10%% slower." +#~ msgstr "你的肌肉总体来说不适合运动,你跑起来速度下降10%%。" -#~ msgid "It looks girly.\n" -#~ msgstr "它看上去很娘炮。\n" +#~ msgid "Your muscles are quite slow to move. You run 20%% slower." +#~ msgstr "你的肌肉十分不适合运动,你跑起来速度下降20%%。" -#~ msgid "You are already wielding nothing." -#~ msgstr "你已经赤手空拳了。" +#~ msgid "Your muscles are very slow to move. You run 30%% slower." +#~ msgstr "你的肌肉非常不适合运动,你跑起来速度下降30%%。" -#~ msgid "" -#~ "Head encumberance has no effect; it simply limits how much you can put on." -#~ msgstr "头部负重没有任何影响;它仅限于你能穿多少。" +#~ msgid "Aaliyah" +#~ msgstr "阿莉娅" -#~ msgid "ENCUMBERANCE AND WARMTH" -#~ msgstr "累赘度和保暖值" +#~ msgid "Aaron" +#~ msgstr "亚伦" -#~ msgid "Esc or q - Return to game " -#~ msgstr " - 返回游戏 " +#~ msgid "Abigail" +#~ msgstr "阿比盖尔" -#~ msgid "L - List notes " -#~ msgstr "L - 注释列表 " +#~ msgid "Adam" +#~ msgstr "亚当" -#~ msgid "D - Delete a note " -#~ msgstr "D - 删除一条记录 " +#~ msgid "Adams" +#~ msgstr "亚当斯" -#~ msgid "N - Add/Edit a note " -#~ msgstr "N - 加入/编辑一条注释 " +#~ msgid "Addison" +#~ msgstr "艾迪生" -#~ msgid "/ - Search " -#~ msgstr "/ - 搜索(只支持英文字符) " +#~ msgid "Adrian" +#~ msgstr "艾德里安" -#~ msgid "0 - Center map on character" -#~ msgstr "0 - 以角色为中心定位地图" +#~ msgid "Aidan" +#~ msgstr "艾丹" -#~ msgid "" -#~ "If true, replaces some TTF rendered text with Tiles. Only applicable on " -#~ "SDL builds. Requires restart." -#~ msgstr "如果true,TTF文本将会被贴图替换,目前只支持SDL版本。需要重新启动。" +#~ msgid "Aiden" +#~ msgstr "艾登" -#~ msgid "Use Tiles" -#~ msgstr "使用贴图" +#~ msgid "Alex" +#~ msgstr "亚历克斯" -#~ msgid "Auto Pickup Safemode" -#~ msgstr "自动拾取安全模式" +#~ msgid "Alexa" +#~ msgstr "亚莉克莎" -#~ msgid "Auto Pickup 0 Vol light items" -#~ msgstr "自动拾取 0 体积的轻小型物品" +#~ msgid "Alexander" +#~ msgstr "亚历山大" -#~ msgid "Enable item Auto Pickup" -#~ msgstr "允许自动拾取物品" +#~ msgid "Alexandra" +#~ msgstr "亚历山德拉" -#~ msgid "Hide Mouse Cursor" -#~ msgstr "隐藏光标" +#~ msgid "Alexis" +#~ msgstr "亚历克西斯" -#~ msgid "Delete world upon player death." -#~ msgstr "在角色死亡后删除世界" +#~ msgid "Allen" +#~ msgstr "艾伦" -#~ msgid "Delete World" -#~ msgstr "死亡后删除世界" +#~ msgid "Allison" +#~ msgstr "艾利森" -#~ msgid "Skill Rust" -#~ msgstr "技能遗忘" +#~ msgid "Alyssa" +#~ msgstr "阿莉莎" -#~ msgid "Periodically Autosave" -#~ msgstr "自动保存" +#~ msgid "Amelia" +#~ msgstr "艾米莉亚" -#~ msgid "Auto-Safemode on by default" -#~ msgstr "默认开启自动安全模式" +#~ msgid "Anderson" +#~ msgstr "安德森" -#~ msgid "Snap to Target" -#~ msgstr "自动锁定目标" +#~ msgid "Andrea" +#~ msgstr "安德里亚" -#~ msgid "24 Hour Time" -#~ msgstr "24小时制" +#~ msgid "Andrew" +#~ msgstr "安德鲁" -#~ msgid "" -#~ "If true, bright backgrounds are not used--some consoles are not " -#~ "compatible." -#~ msgstr "如果设置为是,关闭高亮背景(一些主机不兼容)" +#~ msgid "Angel" +#~ msgstr "安吉尔" -#~ msgid "No Bright Backgrounds" -#~ msgstr "关闭高亮背景" +#~ msgid "Angelina" +#~ msgstr "安吉莉娜" -#~ msgid "" -#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." -#~ msgstr "如果设置为是,Y/N大小写提示敏感和y/n是不会被接受的。" +#~ msgid "Anna" +#~ msgstr "安娜" -#~ msgid "Use Metric Weights" -#~ msgstr "公制质量单位" +#~ msgid "Anthony" +#~ msgstr "安东尼" -#~ msgid "Switch between Km/h and mph." -#~ msgstr "Km/h与mph之间切换。" +#~ msgid "Ariana" +#~ msgstr "艾丽安娜" -#~ msgid "Use Metric Speeds" -#~ msgstr "公制速度单位" +#~ msgid "Arianna" +#~ msgstr "阿里安娜" -#~ msgid "Use Celsius" -#~ msgstr "使用摄氏温度" +#~ msgid "Ashley" +#~ msgstr "艾希莉" -#~ msgid "I am looking for a master to train my fighting techniques." -#~ msgstr "我在寻找一个大师来训练我的战斗技巧。" +#~ msgid "Aubrey" +#~ msgstr "奥布里" -#~ msgid "I am a wandering master of " -#~ msgstr "我是一个为了 流浪的大师 " +#~ msgid "Audrey" +#~ msgstr "奥德丽" -#~ msgid "%1$s assumes a %2$s stance." -#~ msgstr "%1$s假定一个 %2$s 的立场。" +#~ msgid "Austin" +#~ msgstr "奥斯丁" -#~ msgid "You cannot save a template with unused points!" -#~ msgstr "你还有多余点数未分配,故不能保存为人物存档。" +#~ msgid "Autumn" +#~ msgstr "秋" -#~ msgid "Toad" -#~ msgstr "蛤蟆功" +#~ msgid "Ava" +#~ msgstr "阿瓦" -#~ msgid "Viper" -#~ msgstr "毒蛇拳" +#~ msgid "Avery" +#~ msgstr "艾弗里" -#~ msgid "Snake" -#~ msgstr "蛇拳" +#~ msgid "Ayden" +#~ msgstr "艾登" -#~ msgid "Crane" -#~ msgstr "鹤拳" +#~ msgid "Bailey" +#~ msgstr "贝利" -#~ msgid "%s %s" -#~ msgstr "%s %s" +#~ msgid "Baker" +#~ msgstr "贝克" -#~ msgid "" -#~ "Your precious generator, noisily humming\n" -#~ "away. Defend it at all costs!" -#~ msgstr "" -#~ "你宝贵的发电机,喧闹地嗡嗡作响。\n" -#~ "不惜一切代价捍卫它!" +#~ msgid "Barnes" +#~ msgstr "巴尔内斯" -#~ msgid "tankbot" -#~ msgstr "坦克机器人" +#~ msgid "Bell" +#~ msgstr "贝尔" -#~ msgid "" -#~ "A 10-foot-tall, heavily-armored robot that\n" -#~ "walks on a pair of legs with the knees\n" -#~ "facing backwards. It's armed with a\n" -#~ "nasty-looking machine gun." -#~ msgstr "" -#~ "一个十英尺高的重装机器人\n" -#~ "装备了反关节液压式机械步行足\n" -#~ "并有霸道的重机枪作为主要武装。" +#~ msgid "Benjamin" +#~ msgstr "本杰明" -#~ msgid "" -#~ "A 8-foot-tall robot that walks on three long\n" -#~ "legs. It has a pair of spiked tentacles, as\n" -#~ "well as a flamethrower mounted on its head." -#~ msgstr "" -#~ "一个八英尺高的三足立式机器人\n" -#~ "它有一对尖刺触手和安装在头部\n" -#~ "的火焰喷射器。" +#~ msgid "Bennett" +#~ msgstr "班尼特" -#~ msgid "tripod robot" -#~ msgstr "三脚机器人" +#~ msgid "Blake" +#~ msgstr "布莱克" -#~ msgid "molebot" -#~ msgstr "间谍机器人" +#~ msgid "Brady" +#~ msgstr "布雷迪" -#~ msgid "" -#~ "A blue-painted robot that moves quickly on a\n" -#~ "set of three omniwheels. It has a nightstick\n" -#~ "readied, and appears to be well-armored." -#~ msgstr "" -#~ "一个浑身蓝色的机器人靠它的三个全向轮\n" -#~ "迅速的移动着。它手握警棍\n" -#~ "并身披重甲" +#~ msgid "Brandon" +#~ msgstr "布兰登" -#~ msgid "copbot" -#~ msgstr "警用机器人" +#~ msgid "Brayden" +#~ msgstr "布雷登" -#~ msgid "" -#~ "A utility robot designed for hazardous\n" -#~ "conditions. Its only means to stop intruders\n" -#~ "appears to involve thrashing around one of its\n" -#~ "multiple legs." -#~ msgstr "" -#~ "一个被设计在危险环境下工作的机器人\n" -#~ "看起来它只能靠挥舞它\n" -#~ "的其中一条机械腿\n" -#~ "来阻挡入侵者" +#~ msgid "Brian" +#~ msgstr "布莱恩" -#~ msgid "hazmatbot" -#~ msgstr "危险品处理机器人" +#~ msgid "Brianna" +#~ msgstr "布丽安娜" -#~ msgid "" -#~ "A boxy robot about four feet high. It moves\n" -#~ "slowly on a set of treads, and is armed with\n" -#~ "a large machine gun type weapon. It is\n" -#~ "heavily armored." -#~ msgstr "" -#~ "一个四四方方的四英尺高的机器人。它\n" -#~ "通过一套踏板慢慢地移动,并装备有\n" -#~ "一个大的机枪类型的武器。它已经\n" -#~ "全副武装。" +#~ msgid "Brody" +#~ msgstr "布洛迪" -#~ msgid "secubot" -#~ msgstr "护卫机器人" +#~ msgid "Brooke" +#~ msgstr "布鲁克" -#~ msgid "" -#~ "A fist-sized robot that flies swiftly through\n" -#~ "the air. It's covered with whirring blades\n" -#~ "and has one small, glowing red eye." -#~ msgstr "" -#~ "一个拳头大小的机器人,在空中迅速地飞行。\n" -#~ "它是覆盖着呼呼旋转的叶片和一个小而发光的\n" -#~ "红眼睛。" +#~ msgid "Brooklyn" +#~ msgstr "布鲁克林" -#~ msgid "" -#~ "A beast with the body of a slightly-overweight\n" -#~ "man and the head of a cow. It walks slowly,\n" -#~ "milky white drool dripping from its mouth,\n" -#~ "wearing only a pair of white underwear." -#~ msgstr "" -#~ "一个重型的野兽般的身体。牛头与\n" -#~ "人的身体结合,它慢慢地走着,从\n" -#~ "它的嘴中滴出白色的口水,,只穿着\n" -#~ "一件白色的内衣。" +#~ msgid "Brooks" +#~ msgstr "布鲁克斯" -#~ msgid "Gozu" -#~ msgstr "牛头" +#~ msgid "Brown" +#~ msgstr "布朗" -#~ msgid "" -#~ "This looks like a human body, but its\n" -#~ "flesh is snow-white and its face has no\n" -#~ "features save for a perfectly round\n" -#~ "mouth." -#~ msgstr "" -#~ "这看起来像一个人的身体,但它的\n" -#~ "肉是雪白的并且它的脸上没有\n" -#~ "任何特征除了一个正常的圆\n" -#~ "口。" +#~ msgid "Bryan" +#~ msgstr "布赖恩" -#~ msgid "" -#~ "An eldritch creature, shuffling\n" -#~ "along, its hands twitching so\n" -#~ "fast they appear as nothing but\n" -#~ "blurs." -#~ msgstr "" -#~ "一个怪异的生物,缓慢移动\n" -#~ ",它的双手抽搐如此之\n" -#~ "快,几乎看不见\n" -#~ "模糊了。" +#~ msgid "Bryant" +#~ msgstr "布赖恩特" -#~ msgid "" -#~ "A small humanoid, the size of a dog, with\n" -#~ "twisted red flesh and a distended neck. It\n" -#~ "scampers across the ground, panting and\n" -#~ "grunting." -#~ msgstr "" -#~ "一个有狗大小的类人生物,\n" -#~ "有着扭曲的红色的肉和膨胀的脖子。\n" -#~ "在地上疾奔,气喘吁吁地\n" -#~ "发低沉的咕噜声。" +#~ msgid "Butler" +#~ msgstr "巴特勒" -#~ msgid "" -#~ "An eyeball the size of an easy chair and\n" -#~ "covered in rolling blue flames. It floats\n" -#~ "through the air." -#~ msgstr "" -#~ "一个轻便椅大小的眼球和\n" -#~ "覆盖着旋转的蓝色火焰。它\n" -#~ "在空气中漂浮。" +#~ msgid "Caden" +#~ msgstr "卡登" -#~ msgid "black widow" -#~ msgstr "黑寡妇" +#~ msgid "Caleb" +#~ msgstr "迦勒" -#~ msgid "trap door spider" -#~ msgstr "陷阱蜘蛛" +#~ msgid "Cameron" +#~ msgstr "卡梅隆" -#~ msgid "web spider" -#~ msgstr "网蛛" +#~ msgid "Camilla" +#~ msgstr "卡蜜拉" -#~ msgid "" -#~ "A gigantic slug, the size of a small car.\n" -#~ "It moves slowly, dribbling acidic goo from\n" -#~ "its fang-lined mouth." -#~ msgstr "" -#~ "一个巨大的蛞蝓,一个小型车的大小。\n" -#~ "缓慢移动,从它的满是尖牙的口中\n" -#~ "吐出酸液粘性物。" +#~ msgid "Campbell" +#~ msgstr "坎贝尔" -#~ msgid "" -#~ "A thick-skinned green frog. It eyes you\n" -#~ "much as you imagine it might eye an insect." -#~ msgstr "" -#~ "一只厚皮绿青蛙。它看你的眼神\n" -#~ "让你感觉它就像在看一只昆虫。" +#~ msgid "Carlos" +#~ msgstr "卡洛斯" -#~ msgid "" -#~ "A meter-long centipede, moving swiftly on\n" -#~ "dozens of thin legs, a pair of venomous\n" -#~ "pincers attached to its head." -#~ msgstr "" -#~ "一米长的蜈蚣,移动迅速\n" -#~ "有几十瘦小腿,一对有毒的\n" -#~ "钳长在它的头。" +#~ msgid "Caroline" +#~ msgstr "卡洛琳" -#~ msgid "" -#~ "A ferocious airborne predator, flying swiftly\n" -#~ "through the air, its mouth a cluster of fangs." -#~ msgstr "" -#~ "空中凶猛的捕食者,\n" -#~ "通过空中快速飞行,它的牙很锋利。" +#~ msgid "Carson" +#~ msgstr "卡尔森" -#~ msgid "" -#~ "An enormous mosquito, fluttering erratically,\n" -#~ "its face dominated by a long, spear-tipped\n" -#~ "proboscis." -#~ msgstr "" -#~ "一个巨大的蚊子,飞的飘忽不定,\n" -#~ "它的脸长这一个\n" -#~ "非常长的鼻子。" +#~ msgid "Carter" +#~ msgstr "卡特" -#~ msgid "" -#~ "A group of several rats, their tails\n" -#~ "knotted together in a filthy mass. A wave\n" -#~ "of nausea washes over you in its presence." -#~ msgstr "" -#~ "一群老鼠,它们的尾巴\n" -#~ "揉结在一起形成一个肮脏的肉团出现在你面前\n" -#~ "阵阵恶心反胃感,瞬间将你淹没。" +#~ msgid "Charles" +#~ msgstr " 查尔斯" -#~ msgid "" -#~ "A large, mangey rat with red eyes. It\n" -#~ "scampers quickly across the ground, squeaking\n" -#~ "hungrily." -#~ msgstr "" -#~ "一个大型的,mangey鼠有着红色的眼睛。\n" -#~ "它在地面上奔跑很快,\n" -#~ "如饥似渴地发出吱吱声。" +#~ msgid "Charlotte" +#~ msgstr "夏洛特" -#~ msgid "" -#~ "A large snake, turned pale yellow from its\n" -#~ "underground life." -#~ msgstr "" -#~ "一条粗大的蛇。从它在地底生活开始\n" -#~ "逐渐变得淡黄色。" +#~ msgid "Chase" +#~ msgstr "蔡斯" -#~ msgid "" -#~ "A large green fish, it's mouth lined with\n" -#~ "three rows of razor-sharp teeth." -#~ msgstr "" -#~ "一条大的绿色的鱼,它的嘴内有\n" -#~ "三排锋利的牙齿。" +#~ msgid "Chloe" +#~ msgstr "克洛伊" -#~ msgid "sewer fish" -#~ msgstr "变异鱼" +#~ msgid "Christian" +#~ msgstr "克里斯蒂安" -#~ msgid "" -#~ "Two or three humans fused together somehow,\n" -#~ "slowly dragging their thick-hided, hideous\n" -#~ "body across the ground." -#~ msgstr "" -#~ "两到三个人类以某种奇怪的方式融合在一起,\n" -#~ "他们那丑恶可怕的身躯\n" -#~ "则在地上慢慢拖行" +#~ msgid "Christopher" +#~ msgstr "克里斯多夫" -#~ msgid "crawler mutant" -#~ msgstr "爬行者突变体" +#~ msgid "Claire" +#~ msgstr "克莱儿" -#~ msgid "" -#~ "A relatively humanoid mutant with purple\n" -#~ "hair and a grapefruit-sized bloodshot eye." -#~ msgstr "" -#~ "一个相对人形的突变有着紫色\n" -#~ "的头发和一个柚子大小的布满血丝的眼睛。" - -#~ msgid "one-eyed mutant" -#~ msgstr "眼魔" - -#~ msgid "" -#~ "Cannibalistic Humanoid Underground Dweller.\n" -#~ "A human, turned pale and mad from years in\n" -#~ "the subways." -#~ msgstr "" -#~ "食人族地下居住者\n" -#~ "一个人,多年在地铁里\n" -#~ "脸色发白" - -#~ msgid "C.H.U.D." -#~ msgstr "地下食人族" - -#~ msgid "" -#~ "A black blob of viscous goo that oozes\n" -#~ "across the ground like a mass of living\n" -#~ "oil." -#~ msgstr "" -#~ "一个黑色的粘液球,渗出的\n" -#~ "粘液滴在地上像一团生活用\n" -#~ "的大众石油。" +#~ msgid "Clark" +#~ msgstr "克拉克" -#~ msgid "" -#~ "A veritable wall of fungus, grown as a\n" -#~ "natural defense by the fungal spire. It\n" -#~ "looks very tough, and spews spores at an\n" -#~ "alarming rate." -#~ msgstr "" -#~ "一个名副其实的真菌墙,成长为了一个\n" -#~ "天然防御的真菌尖塔。它看起来很硬,\n" -#~ "以惊人的速度喷出孢子。" +#~ msgid "Cole" +#~ msgstr "科尔" -#~ msgid "" -#~ "An enormous fungal spire, towering 30 feet\n" -#~ "above the ground. It pulsates slowly,\n" -#~ "continuously growing new defenses." -#~ msgstr "" -#~ "高达30英尺的庞大真菌尖塔\n" -#~ "拔地而起,它缓慢而又规律的\n" -#~ "不断悸动着,并扩大它的防御范围" +#~ msgid "Coleman" +#~ msgstr "科尔曼" -#~ msgid "" -#~ "A wispy spore, about the size of a fist,\n" -#~ "wafting on the breeze." -#~ msgstr "" -#~ "一个纤细的孢子,约有拳头大小。\n" -#~ "在微风中飘荡。" +#~ msgid "Collins" +#~ msgstr "柯林斯" -#~ msgid "spore" -#~ msgstr "孢子" +#~ msgid "Colton" +#~ msgstr "科尔顿" -#~ msgid "" -#~ "A fungal tendril just a couple feet tall. Its\n" -#~ "exterior is hardened into a leathery bark and\n" -#~ "covered in thorns; it also moves faster than\n" -#~ "full-grown fungaloids." -#~ msgstr "" -#~ "真菌藤仅有几英尺高。它的\n" -#~ "外皮硬化成像皮革一样的树皮,\n" -#~ "布满荆棘;它可以移动比\n" -#~ "完全成熟真菌体 更快。" +#~ msgid "Connor" +#~ msgstr " 康纳" -#~ msgid "" -#~ "A pale white fungus, one meaty gray stalk\n" -#~ "supporting a bloom at the top. A few\n" -#~ "tendrils extend from the base, allowing\n" -#~ "mobility and a weak attack." -#~ msgstr "" -#~ "一个淡白色的真菌,有一个多肉的灰色茎\n" -#~ "在其顶上有花绽放。一些\n" -#~ "藤从底部延伸,可以\n" -#~ "移动和弱攻击。" +#~ msgid "Cook" +#~ msgstr "库克" -#~ msgid "" -#~ "A knot of roots that looks bizarrely like a\n" -#~ "heart. It beats slowly with sap, powering\n" -#~ "the root walls around it." -#~ msgstr "" -#~ "一个打结的根部,看起来奇怪的是像一个心。\n" -#~ "它节奏缓慢挖掘坑道,驱动根系环绕在他周围\n" -#~ "形成墙壁。" +#~ msgid "Cooper" +#~ msgstr "库珀" -#~ msgid "" -#~ "This appears to be a mass of vines, moving\n" -#~ "with surprising speed. It is so thick and\n" -#~ "tangled that you cannot see what lies in\n" -#~ "the middle." -#~ msgstr "" -#~ "这似乎是一个大规模的藤蔓,以惊人的速度移动。\n" -#~ "它是如此的厚和复杂的使你不能看到在于中间有什\n" -#~ "么。" +#~ msgid "Cox" +#~ msgstr "考克斯" -#~ msgid "vinebeast" -#~ msgstr "蔓藤怪" +#~ msgid "Daniel" +#~ msgstr "丹尼尔" -#~ msgid "" -#~ "A thick stalk topped with a purple\n" -#~ "flower. The flower's petals are closed,\n" -#~ "and pulsate ominously." -#~ msgstr "" -#~ "一个粗茎顶部有一个紫色的\n" -#~ "花。花的花瓣是封闭的伴随\n" -#~ "着不祥的跳动。" +#~ msgid "David" +#~ msgstr "大卫" -#~ msgid "" -#~ "A thorny vine. It twists wildly as\n" -#~ "it grows, spreading rapidly." -#~ msgstr "" -#~ "一个棘手的藤蔓。它像发疯一样扭曲\n" -#~ "增长,迅速 ​​蔓延。" +#~ msgid "Davis" +#~ msgstr "戴维斯" -#~ msgid "creeping vine" -#~ msgstr "匍匐藤" +#~ msgid "Destiny" +#~ msgstr "天命" -#~ msgid "" -#~ "A thick stalk, rooted to the ground.\n" -#~ "It rapidly sprouts thorny vines in all\n" -#~ "directions." -#~ msgstr "" -#~ "一个粗茎,扎根在地上。\n" -#~ "它迅速地向所有的方向\n" -#~ "催生荆棘。" +#~ msgid "Diaz" +#~ msgstr "迪亚兹" -#~ msgid "" -#~ "A plant that grows as high as your head,\n" -#~ "with one thick, bark-coated stalk\n" -#~ "supporting a flower-like head with a sharp\n" -#~ "sting within." -#~ msgstr "" -#~ "一种植物长得和你的头一样高,\n" -#~ "有着一个厚的,树皮覆盖的茎\n" -#~ "支撑着有个像头一样里面有着\n" -#~ "锋利刺毛的花。" +#~ msgid "Diego" +#~ msgstr "迭戈" -#~ msgid "" -#~ "An amalgamation of putrid human and animal\n" -#~ "parts that have become fused in this golem\n" -#~ "of flesh. The eyes of all the heads dart\n" -#~ "rapidly and the mouths scream or groan." -#~ msgstr "" -#~ "这个肉傀儡由腐烂的人类和\n" -#~ "动物躯体融合在一起组成,\n" -#~ "它飞快的移动着所有头上的眼睛.\n" -#~ "口中发出尖叫和呻吟." +#~ msgid "Dominic" +#~ msgstr "多米尼克" -#~ msgid "" -#~ "A horrifying child zombie, you feel\n" -#~ "a twinge of remorse looking at it." -#~ msgstr "" -#~ "一个恐怖的儿童僵尸,你\n" -#~ "很内疚的看着他。" +#~ msgid "Dylan" +#~ msgstr "狄伦" -#~ msgid "child zombie" -#~ msgstr "儿童丧尸" +#~ msgid "Eben" +#~ msgstr "埃本" -#~ msgid "" -#~ "Hundreds of bee stings have given this zombie\n" -#~ "a thick covering of scar tissue, it will be\n" -#~ "much harder to damage than an ordinary zombie\n" -#~ "but moves a bit slower" -#~ msgstr "" -#~ "被数百的蜜蜂蛰过的僵尸\n" -#~ "有一个隐藏起来的疤痕,\n" -#~ "他会比普通僵尸更难的受\n" -#~ "到伤害,但是移动速度较\n" -#~ "慢。" +#~ msgid "Edwards" +#~ msgstr "爱德华兹" -#~ msgid "" -#~ "This zombie seems to have a cloud of black\n" -#~ "dust surrounding it. It also seems to have\n" -#~ "a better grasp of movement than most..." -#~ msgstr "" -#~ "这个僵尸附近好像有一个黑\n" -#~ "色的云缠绕着它,而且看起\n" -#~ "来它有更好的抓取能力。" +#~ msgid "Eli" +#~ msgstr "伊莱" -#~ msgid "master zombie" -#~ msgstr "丧尸领主" +#~ msgid "Elijah" +#~ msgstr "以利亚" -#~ msgid "" -#~ "This zombie seems to have slightly longer\n" -#~ "than ordinary arms, and constantly gropes\n" -#~ "at its surroundings as it moves." -#~ msgstr "" -#~ "这个僵尸看起来胳膊比其他\n" -#~ "僵尸略长并且不断地摸索着\n" -#~ "移动。" +#~ msgid "Elizabeth" +#~ msgstr "伊丽莎白" -#~ msgid "" -#~ "This zombie was clearly a soldier before.\n" -#~ "Its tattered armor gives it strong defense,\n" -#~ "and it is much more physically fit than\n" -#~ "most zombies." -#~ msgstr "" -#~ "这个僵尸原来很显然是个士兵。\n" -#~ "他损坏的盔甲给它了一些强大的\n" -#~ "防御,并且盔甲比比大多数僵尸\n" -#~ "都合身。" +#~ msgid "Ella" +#~ msgstr "艾拉" -#~ msgid "" -#~ "A zombie wearing a tattered lab coat and\n" -#~ "some sort of utility belt. It looks weaker\n" -#~ "than most zombies, but more resourceful too." -#~ msgstr "" -#~ "一个穿着破烂的白大褂和一些工具带\n" -#~ "的僵尸。它看起来很弱,但比大多数\n" -#~ "僵尸更足智多谋。" +#~ msgid "Emily" +#~ msgstr "埃米莉" -#~ msgid "" -#~ "A zombie with jet black skin and glowing red\n" -#~ "eyes. As you look at it, you're gripped by a\n" -#~ "feeling of dread and terror." -#~ msgstr "" -#~ "一只有黑色皮肤和闪耀\n" -#~ "红眼的僵尸。当你看他\n" -#~ "的时候,你发自内心的\n" -#~ "恐怖和畏惧。" +#~ msgid "Emma" +#~ msgstr "艾玛" -#~ msgid "" -#~ "A skeleton picked clean of all but a few\n" -#~ "rotten scraps of flesh, somehow still in\n" -#~ "motion." -#~ msgstr "" -#~ "骨架上除了一些腐烂的\n" -#~ "肉挂在上面以外什么都\n" -#~ "没有,但是它还在运动" +#~ msgid "Eric" +#~ msgstr "埃里克" -#~ msgid "" -#~ "A bloated zombie that is coated with slimy\n" -#~ "gray mold. Its flesh is translucent and gray,\n" -#~ "and it dribbles a gray sludge from its mouth." -#~ msgstr "" -#~ "一个臃肿的僵尸,涂有粘糊糊的\n" -#~ "霉菌。它的肉是半透明的和灰色的,\n" -#~ "它还会从嘴里吐灰色的污泥。" +#~ msgid "Ethan" +#~ msgstr "伊桑" -#~ msgid "" -#~ "A bloated zombie sagging with fat. It emits a\n" -#~ "horrible odor, and putrid, pink sludge drips\n" -#~ "from its mouth." -#~ msgstr "" -#~ "一个臃肿的呕吐僵尸,他\n" -#~ "发出一种恶心的气味,并\n" -#~ "且腐烂的粉红色呕吐物从\n" -#~ "它的嘴中一滴一滴的流下\n" -#~ "来。" +#~ msgid "Evan" +#~ msgstr "埃文" -#~ msgid "" -#~ "A diseased zombie. Fungus sprouts from its\n" -#~ "mouth and eyes, and thick gray mold grows all\n" -#~ "over its translucent flesh." -#~ msgstr "" -#~ "一个真菌僵尸,真菌从\n" -#~ "他的口中和眼中冒出来并\n" -#~ "且灰色的真菌覆盖在它半\n" -#~ "透明的肉上" +#~ msgid "Evans" +#~ msgstr "埃文斯" -#~ msgid "" -#~ "A zombie that has somehow grown to the size of\n" -#~ "6 men, with arms as wide as a trash can." -#~ msgstr "" -#~ "一个僵尸,身体变异的有6个大人的大小,\n" -#~ "像垃圾桶一般粗细的胳膊。哇!太恐怖了!" +#~ msgid "Evelyn" +#~ msgstr "伊夫林" -#~ msgid "" -#~ "A hideous beast of a zombie, bulging with\n" -#~ "distended muscles on both arms and legs." -#~ msgstr "" -#~ "一头丑陋的野兽的僵尸,在两个胳膊和腿上\n" -#~ "有着鼓鼓囊囊的膨胀的肌肉。" +#~ msgid "Faith" +#~ msgstr " 信" -#~ msgid "" -#~ "This deformed, sinewy canine stays close to\n" -#~ "the ground, loping forward faster than most\n" -#~ "humans ever could." -#~ msgstr "" -#~ "这种畸形的肌肉发达的狗紧贴着\n" -#~ "地面,以一种比大多数人都快的\n" -#~ "速度狂奔。" +#~ msgid "Flores" +#~ msgstr "弗洛雷斯" -#~ msgid "" -#~ "This zombie's hands and feet are\n" -#~ "webbed, and it is clad in swimwear." -#~ msgstr "这僵尸手脚有蹼,穿着泳装。" +#~ msgid "Foster" +#~ msgstr "佛斯特" -#~ msgid "" -#~ "This zombie emits a constant haze of\n" -#~ "thick, obfuscating smoke." -#~ msgstr "" -#~ "这只丧尸不断发出阵阵如阴霾般厚重的\n" -#~ "让人迷乱的浓烟" +#~ msgid "Gabriel" +#~ msgstr "加百列" -#~ msgid "" -#~ "This zombie's flesh is pale blue, and it\n" -#~ "occasionally crackles with small bolts of\n" -#~ "lightning." -#~ msgstr "" -#~ "这只丧尸肌肉已变成了淡蓝色,\n" -#~ "并随着全身跳跃的小闪电发出\n" -#~ "阵阵噼啪声" +#~ msgid "Gabriella" +#~ msgstr "加布里埃尔" -#~ msgid "" -#~ "This zombie's mouth is deformed into a round\n" -#~ "spitter, and its body throbs with a dense\n" -#~ "yellow fluid." -#~ msgstr "" -#~ "这只丧尸的嘴巴已经畸变成一个\n" -#~ "唾液横流的圆洞,身躯则被浓黄色液体覆盖\n" -#~ "并不断抽动" +#~ msgid "Gabrielle" +#~ msgstr "嘉比里拉" -#~ msgid "" -#~ "This zombie's jaw has been torn off, leaving\n" -#~ "a gaping hole from mid-neck up." -#~ msgstr "" -#~ "这只丧尸下巴已经被扯掉\n" -#~ "从脖子中部往上能看见一个大洞" +#~ msgid "Garcia" +#~ msgstr "加西亚" -#~ msgid "" -#~ "A human body, encapsulated in tough riot\n" -#~ "armour, this zombie was clearly a cop gearing\n" -#~ "up to fight the infection." -#~ msgstr "" -#~ "一个人类的身体封闭在坚固的防爆盔甲,\n" -#~ "这丧尸显然是一个警察在对抗丧尸中遭到\n" -#~ "感染死亡的。" +#~ msgid "Gavin" +#~ msgstr "加文" -#~ msgid "" -#~ "A human body, stumbling slowly forward on\n" -#~ "uncertain legs, possessed with an unstoppable\n" -#~ "rage." -#~ msgstr "" -#~ "一个人类身躯,缓慢踉跄的前行\n" -#~ "蹒跚的脚步,充满了难以抑制的\n" -#~ "愤怒" +#~ msgid "Genesis" +#~ msgstr "劳恩斯" -#~ msgid "A portion of a giant worm that is still alive." -#~ msgstr "一只巨大的虫子的一个部分,还活着。" +#~ msgid "Gianna" +#~ msgstr "吉安娜" -#~ msgid "" -#~ "Half of this monster is emerging from a\n" -#~ "hole in the ground. It looks like a huge\n" -#~ "earthworm, but the end has split into a\n" -#~ "large, fanged mouth." -#~ msgstr "" -#~ "怪物的一半正在从地面的巨坑中脱离。\n" -#~ "它看起来像一只巨大的蚯蚓,但已经结束\n" -#~ "了分裂,有着一个巨大,有尖牙的嘴。" +#~ msgid "Gonzales" +#~ msgstr "冈萨雷斯" -#~ msgid "" -#~ "A hideous slithering beast with a tri-\n" -#~ "sectional mouth that opens to reveal\n" -#~ "hundreds of writhing tongues. Most of its\n" -#~ "enormous body is hidden underground." -#~ msgstr "" -#~ "一种可怕的野兽,和一个三瓣装巨口,打开露出\n" -#~ "数以百计的翻滚的舌头。它的大部分巨大的身体\n" -#~ "隐藏的地下。" +#~ msgid "Gonzalez" +#~ msgstr "冈萨雷兹" -#~ msgid "" -#~ "An evil-looking, slender-bodied wasp with\n" -#~ "a vicious sting on its abdomen." -#~ msgstr "" -#~ "一个外观丑陋,身形细长的黄蜂\n" -#~ "腹部可见一只充满恶意的毒刺" +#~ msgid "Grace" +#~ msgstr "格瑞丝" -#~ msgid "" -#~ "A honey bee the size of a small dog. It\n" -#~ "buzzes angrily through the air, dagger-\n" -#~ "sized sting pointed forward." -#~ msgstr "" -#~ "一只大小像一只小狗的蜜蜂。它\n" -#~ "在空中愤怒地嗡嗡作响,匕首大\n" -#~ "小的刺尖在尾部闪耀。" +#~ msgid "Gracie" +#~ msgstr "格雷西" -#~ msgid "" -#~ "A large housefly the size of a small dog.\n" -#~ "It buzzes around incessantly." -#~ msgstr "" -#~ "一只大小像一只小狗的大苍蝇。\n" -#~ "它在空中不停地嗡嗡作响。" +#~ msgid "Gray" +#~ msgstr "戈瑞" -#~ msgid "" -#~ "This insect is pale gray in color, its\n" -#~ "chitin weakened by the fungus sprouting\n" -#~ "from every joint on its body." -#~ msgstr "" -#~ "这种昆虫被浅灰色毛茸茸的东西覆盖,\n" -#~ "仔细一看它的甲壳已经被从其身体的\n" -#~ "每一个关节出冒出产生的真菌布满了。" +#~ msgid "Green" +#~ msgstr "格林" -#~ msgid "fungal insect" -#~ msgstr "真菌昆虫" +#~ msgid "Griffin" +#~ msgstr "格里芬" -#~ msgid "" -#~ "This ant has a long, bloated thorax, bulging\n" -#~ "with hundreds of small ant eggs. It moves\n" -#~ "slowly, tending to nearby eggs and laying\n" -#~ "still more." -#~ msgstr "" -#~ "这种蚂蚁有一个长而且臃肿的胸腔,鼓鼓囊囊的\n" -#~ "全是数以百计的小蚂蚁卵。它移动缓慢,倾向于\n" -#~ "在附近下更多的蚂蚁卵。" +#~ msgid "Hailey" +#~ msgstr "海莉" -#~ msgid "" -#~ "Darker in color than the other ants, this\n" -#~ "more aggresive variety has even larger\n" -#~ "mandibles." -#~ msgstr "" -#~ "比其他蚂蚁的颜色深,这是\n" -#~ "一种拥有比其他蚂蚁更大的\n" -#~ "下颚攻击性更积极的品种。" +#~ msgid "Hall" +#~ msgstr "霍尔" -#~ msgid "" -#~ "A red ant the size of a crocodile. It is\n" -#~ "covered in chitinous armor, and has a pair of\n" -#~ "vicious mandibles." -#~ msgstr "" -#~ "鳄鱼大小的红蚂蚁。在\n" -#~ "坚硬的甲壳盔甲下,有\n" -#~ "一对凶恶的大颌。" +#~ msgid "Hannah" +#~ msgstr "汉娜" -#~ msgid "" -#~ "The size of a large cat, this pulsating mass\n" -#~ "of glistening white flesh turns your stomach." -#~ msgstr "" -#~ "有一只大猫的大小,拥有一种白色的在四周散发着\n" -#~ "光芒的肉刺激着你的胃。" +#~ msgid "Harris" +#~ msgstr "哈里斯" -#~ msgid "A small domesticated cat, gone feral." -#~ msgstr "一只小型驯养猫,已经野生。" +#~ msgid "Hayden" +#~ msgstr "海登" -#~ msgid "A medium-sized domesticated dog, gone feral." -#~ msgstr "一只中型驯养的狗,已经野生。" +#~ msgid "Hayes" +#~ msgstr "海耶斯" -#~ msgid "A vicious and fast hunter." -#~ msgstr "凶恶和快速的猎人。" +#~ msgid "Henderson" +#~ msgstr "亨德森" -#~ msgid "An american black bear. Remember, only YOU can prevent forest fires." -#~ msgstr "美国黑熊。记住,只有你能阻止森林火灾。" +#~ msgid "Henry" +#~ msgstr "亨利" -#~ msgid "" -#~ "An eastern coyote, also called tweed wolf. It is an hybrid of grey wolves " -#~ "and the smaller western coyotes." -#~ msgstr "一个东部郊狼,也叫做东北郊狼。这是一种灰狼和红狼杂交的较小西方郊狼。" +#~ msgid "Hernandez" +#~ msgstr "赫尔南德斯" -#~ msgid "A grey wolf. A vicious and fast pack hunter." -#~ msgstr "一只灰狼. 危险又迅速的团队猎手." +#~ msgid "Hill" +#~ msgstr "希尔" -#~ msgid "A buck of the largest deer species." -#~ msgstr "一只雄鹿, 属于最大型的鹿科动物." +#~ msgid "Howard" +#~ msgstr "霍华德" -#~ msgid "A large buck, fast-moving and strong." -#~ msgstr "一只大雄鹿, 跑得快而且强壮." +#~ msgid "Hughes" +#~ msgstr "休斯" -#~ msgid "" -#~ "A cute wiggling nose, cotton tail, and\n" -#~ "delicious flesh." -#~ msgstr "" -#~ "一只可爱的动物有着棉尾巴和\n" -#~ "美味的肉。" +#~ msgid "Hunter" +#~ msgstr "亨特" -#~ msgid "A small woodland animal." -#~ msgstr "一个小型树林动物。" +#~ msgid "Ian" +#~ msgstr "伊恩" -#~ msgid "Your %s is destroyed! GAME OVER!" -#~ msgstr "你的%s被摧毁了!GAME OVER!" +#~ msgid "Isaac" +#~ msgstr "艾萨克" -#~ msgid "Rats swarm from nowhere to avenge the %s." -#~ msgstr "鼠群从四面八方蜂拥而至,誓向 %s 复仇到底!" +#~ msgid "Isabel" +#~ msgstr "伊莎贝尔" -#~ msgid "The %s melts away!" -#~ msgstr "%s融化了!" +#~ msgid "Isabella" +#~ msgstr "伊莎贝拉" -#~ msgid "The %s splits!" -#~ msgstr "%s分裂了!" +#~ msgid "Isabelle" +#~ msgstr "伊莎贝儿" -#~ msgid "The %s splatters into tiny, dead pieces." -#~ msgstr "%s被打成了碎片。" +#~ msgid "Isaiah" +#~ msgstr "以赛亚" -#~ msgid "The %s disappears! Was it in your head?" -#~ msgstr "%s消失了!它是不是躲进你的脑壳里?" +#~ msgid "Jack" +#~ msgstr "杰克" -#~ msgid "It disintegrates!" -#~ msgstr "它解体了!" +#~ msgid "Jackson" +#~ msgstr "杰克逊" -#~ msgid "The root walls begin to crumble around you." -#~ msgstr "根蔓在你周围粉碎瓦解了" +#~ msgid "Jacob" +#~ msgstr "雅各布" -#~ msgid "a boomer explodes!" -#~ msgstr "一个呕吐者爆炸了!" +#~ msgid "Jaden" +#~ msgstr "杰登" -#~ msgid "The %s's corpse melts into a pool of acid." -#~ msgstr "%s的尸体融化成一滩酸液。" +#~ msgid "James" +#~ msgstr "詹姆斯" -#~ msgid "The %s sinks its ovipositor into you!" -#~ msgstr "%s把它的产卵器斜插入你体内!" +#~ msgid "Jasmine" +#~ msgstr "茉莉" -#~ msgid "Critical! " -#~ msgstr "暴击! " +#~ msgid "Jason" +#~ msgstr "詹森" -#~ msgid " for %d damage." -#~ msgstr " 造成 %d 伤害。" +#~ msgid "Jayden" +#~ msgstr "杰登" -#~ msgid " but do no damage." -#~ msgstr " 但是没有造成什么伤害。" +#~ msgid "Jen" +#~ msgstr "珍" -#~ msgid "%1$s whacks %4$s" -#~ msgstr "%1$s 重击 %4$s" +#~ msgid "Jenkins" +#~ msgstr "詹金斯" -#~ msgid "%1$s whack %4$s" -#~ msgstr "%1$s 重击 %4$s" +#~ msgid "Jennifer" +#~ msgstr "詹尼弗" -#~ msgid "%1$s batters %4$s" -#~ msgstr "%1$s 猛击 %4$s" +#~ msgid "Jeremiah" +#~ msgstr "耶利米" -#~ msgid "%1$s batter %4$s" -#~ msgstr "%1$s 猛击 %4$s" +#~ msgid "Jessica" +#~ msgstr "杰西卡" -#~ msgid "%1$s stab %4$s" -#~ msgstr "%1$s 刺伤 %4$s" +#~ msgid "Jessie" +#~ msgstr "杰西" -#~ msgid "%1$s pierces %4$s" -#~ msgstr "%1$s 刺穿 %4$s" +#~ msgid "Jesus" +#~ msgstr "杰西" -#~ msgid "%1$s pierce %4$s" -#~ msgstr "%1$s 刺穿 %4$s" +#~ msgid "Jocelyn" +#~ msgstr "乔斯林" -#~ msgid "%1$s impales %4$s" -#~ msgstr "%1$s 钉住 %4$s" +#~ msgid "John" +#~ msgstr "约翰" -#~ msgid "%1$s impale %4$s" -#~ msgstr "%1$s 钉住 %4$s" +#~ msgid "Johnson" +#~ msgstr "约翰逊" -#~ msgid "%1$s uses %2$s %3$s to toss %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" +#~ msgid "Jonathan" +#~ msgstr "乔纳森" -#~ msgid "%1$s use %2$s %3$s to toss %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" +#~ msgid "Jones" +#~ msgstr "琼斯" -#~ msgid "%1$s swings %2$s %3$s wide at %4$s" -#~ msgstr "%1$s 摇晃了 %2$s %3$s 没有命中 %4$s" +#~ msgid "Jordan" +#~ msgstr "约旦" -#~ msgid "%1$s swing %2$s %3$s wide at %4$s" -#~ msgstr "%1$s 摇晃了 %2$s %3$s 没有命中 %4$s" +#~ msgid "Jose" +#~ msgstr "约瑟" -#~ msgid "%1$s wraps %2$s %3$s around %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 缠绕住了 %4$s" +#~ msgid "Joseph" +#~ msgstr "约瑟夫" -#~ msgid "%1$s wrap %2$s %3$s around %4$s" -#~ msgstr "%1$s 用 %2$s %3$s 缠绕住了 %4$s" +#~ msgid "Joshua" +#~ msgstr "约书亚" -#~ msgid "%1$s slam %2$s %3$s against %4$s" -#~ msgstr "%1$s 把 %2$s %3$s 猛地摔在 %4$s 上" +#~ msgid "Josiah" +#~ msgstr "约西亚" -#~ msgid "%1$s sweeps %2$s %3$s at %4$s" -#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" +#~ msgid "Juan" +#~ msgstr "胡安" -#~ msgid "%1$s sweep %2$s %3$s at %4$s" -#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" +#~ msgid "Julia" +#~ msgstr "茱莉亚" -#~ msgid "%s slaps %s with %s tentacle!" -#~ msgstr "%s拍击了%s 用 %s 的触手!" +#~ msgid "Julian" +#~ msgstr "朱利安" -#~ msgid "%s slap %s with %s tentacle!" -#~ msgstr "%s拍击了%s 用 %s 的触手!" +#~ msgid "Justin" +#~ msgstr "贾斯汀" -#~ msgid "%s hits %s with %s tail!" -#~ msgstr "%s 敲击了%s 一下用 %s 的尾巴!" +#~ msgid "Kaden" +#~ msgstr "卡登" -#~ msgid "%s hit %s with %s tail!" -#~ msgstr "%s 敲击了%s 一下用 %s 的尾巴!" +#~ msgid "Kaitlin" +#~ msgstr "凯特林" -#~ msgid "%s stings %s with %s tail!" -#~ msgstr "%s 刺了 %s 一下用 %s 的尾巴!" +#~ msgid "Katelyn" +#~ msgstr "凯特琳" -#~ msgid "%s sting %s with %s tail!" -#~ msgstr "%s 刺了 %s 一下用 %s 的尾巴!" +#~ msgid "Katie" +#~ msgstr "凯蒂" -#~ msgid "%s butts %s with %s antlers!" -#~ msgstr "%s 撞击了 %s 用 %s 的鹿角!" +#~ msgid "Kayla" +#~ msgstr "凯拉" -#~ msgid "%s butt %s with %s antlers!" -#~ msgstr "%s 撞击了 %s 用 %s 的鹿角!" +#~ msgid "Kaylee" +#~ msgstr "卡尔莉" -#~ msgid "%s stabs %s with %s pointed horns!" -#~ msgstr "%s 戳击了 %s 用 %s 的尖角!" +#~ msgid "Kelly" +#~ msgstr "凯莉" -#~ msgid "%s stab %s with %s pointed horns!" -#~ msgstr "%s 戳击了 %s 用 %s 的尖角!" +#~ msgid "Kevin" +#~ msgstr "凯文" -#~ msgid "%s headbutts %s with %s curled horns!" -#~ msgstr "%s用头撞击了%s用%s的卷角!" +#~ msgid "Kim" +#~ msgstr "金" -#~ msgid "%s headbutt %s with %s curled horns!" -#~ msgstr "%s用头撞击了%s用%s的卷角!" +#~ msgid "Kimberly" +#~ msgstr "金伯利" -#~ msgid "%s headbutts %s with %s horns!" -#~ msgstr "%s用头撞击了%s用%s的角!" +#~ msgid "King" +#~ msgstr "金" -#~ msgid "%s headbutt %s with %s horns!" -#~ msgstr "%s用头撞击了%s用%s的角!" +#~ msgid "Kyle" +#~ msgstr "凯尔" -#~ msgid "%s kicks %s with %s hooves!" -#~ msgstr "%s 踢了%s用%s的蹄足!" +#~ msgid "Kylie" +#~ msgstr "凯丽" -#~ msgid "%s kick %s with %s hooves!" -#~ msgstr "%s 踢了%s用%s的蹄足!" +#~ msgid "Landon" +#~ msgstr "兰登" -#~ msgid "%s peck %s!" -#~ msgstr "%s 啄咬了%s!" +#~ msgid "Lauren" +#~ msgstr "劳伦" -#~ msgid "%s slices %s with %s mandibles!" -#~ msgstr "%s 切割了%s 用 %s的上颚!" +#~ msgid "Layla" +#~ msgstr "莱拉" -#~ msgid "%s slice %s with %s mandibles!" -#~ msgstr "%s 切割了%s 用 %s的上颚!" +#~ msgid "Leah" +#~ msgstr "莉亚" -#~ msgid "%s sinks %s fangs into %s!" -#~ msgstr "%s 拉扯住%s用尖牙撕咬了%s!" +#~ msgid "Lee" +#~ msgstr "李" -#~ msgid "%s sink %s fangs into %s!" -#~ msgstr "%s 拉扯住%s用尖牙撕咬了%s!" +#~ msgid "Lewis" +#~ msgstr "李维斯" -#~ msgid "Stinger Strike!" -#~ msgstr "毒刺冲击!" +#~ msgid "Liam" +#~ msgstr "连恩" -#~ msgid "Tail whip! Viper Combo Intiated!" -#~ msgstr "尾鞭重击!毒蛇组合击!" +#~ msgid "Lillian" +#~ msgstr "莉莲" -#~ msgid "Your injured arms prevent a viper strike!" -#~ msgstr "你的胳膊受伤了,不能使用毒蛇打击!" +#~ msgid "Lily" +#~ msgstr "莉丽" -#~ msgid "You drain %s body heat!" -#~ msgstr "你吸收了%s的体温!" +#~ msgid "Logan" +#~ msgstr "洛根" -#~ msgid " drains %s body heat!" -#~ msgstr " 吸收了%s的体温!" +#~ msgid "Long" +#~ msgstr "兰" -#~ msgid "%s's" -#~ msgstr "<目标>指向 %s 的" +#~ msgid "Lopez" +#~ msgstr "洛佩兹" -#~ msgid "the %s's" -#~ msgstr "<目标>指向 %s 的" +#~ msgid "Lucas" +#~ msgstr "卢卡斯" -#~ msgid "you" -#~ msgstr "你" +#~ msgid "Luis" +#~ msgstr "路易斯" -#~ msgid "%s's" -#~ msgstr "%s 的" +#~ msgid "Luke" +#~ msgstr "卢克" -#~ msgid "You disarm %s." -#~ msgstr "你解除了%s的武装。" +#~ msgid "Madeline" +#~ msgstr "玛德琳" -#~ msgid " disarms %s." -#~ msgstr "解除了%s的武装。" +#~ msgid "Madelyn" +#~ msgstr "麦德莲" -#~ msgid "You throw %s." -#~ msgstr "你投掷了%s。" +#~ msgid "Madison" +#~ msgstr "麦迪逊" -#~ msgid " throws %s." -#~ msgstr "投掷了%s。" +#~ msgid "Makayla" +#~ msgstr "马凯拉" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Maria" +#~ msgstr "玛利亚" -#~ msgid "Counter-attack!" -#~ msgstr "回击!" +#~ msgid "Mariah" +#~ msgstr "玛丽亚" -#~ msgid "%s breaks the grab!" -#~ msgstr "%s打破抓取!" +#~ msgid "Martin" +#~ msgstr "马丁" -#~ msgid "%s break the grab!" -#~ msgstr "%s打破抓取!" +#~ msgid "Martinez" +#~ msgstr "马丁内斯" -#~ msgid "your %s" -#~ msgstr "你的%s" +#~ msgid "Mary" +#~ msgstr "麦瑞" -#~ msgid "%s's %s" -#~ msgstr "%s 的 %s" +#~ msgid "Mason" +#~ msgstr "马森" -#~ msgid "%1$s hit %4$s" -#~ msgstr "%1$s 击打 %4$s" +#~ msgid "Matthew" +#~ msgstr "马修" -#~ msgid "your" -#~ msgstr "你们的" +#~ msgid "Maya" +#~ msgstr "迈亚" -#~ msgid "his" -#~ msgstr "他的" +#~ msgid "Megan" +#~ msgstr "梅根" -#~ msgid "her" -#~ msgstr "她的" +#~ msgid "Melanie" +#~ msgstr "梅兰妮" -#~ msgid "Your" -#~ msgstr "你的" +#~ msgid "Mia" +#~ msgstr "米娅" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Michael" +#~ msgstr "迈克尔" -#~ msgid "You" -#~ msgstr "你" +#~ msgid "Miller" +#~ msgstr "米勒" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Mitchell" +#~ msgstr "米切尔" -#~ msgid "plunk." -#~ msgstr "砰砰声." +#~ msgid "Moore" +#~ msgstr "摩尔" -#~ msgid "ker-rash!" -#~ msgstr "“咔吱!”" +#~ msgid "Morgan" +#~ msgstr "摩根" -#~ msgid "brush." -#~ msgstr "“噗嗤~”" +#~ msgid "Morris" +#~ msgstr "莫里斯" -#~ msgid "crunch." -#~ msgstr "“嘎吱!”" +#~ msgid "Murphy" +#~ msgstr "墨菲" -#~ msgid "crak" -#~ msgstr "咔擦" +#~ msgid "Natalie" +#~ msgstr "娜塔莉" -#~ msgid "whack!" -#~ msgstr "咔咔!" +#~ msgid "Nathan" +#~ msgstr "内森" -#~ msgid "whump!" -#~ msgstr "哐嘡!" +#~ msgid "Nathaniel" +#~ msgstr "纳撒尼尔" -#~ msgid "wham!" -#~ msgstr "砰!" +#~ msgid "Nelson" +#~ msgstr "纳尔逊" -#~ msgid "whump." -#~ msgstr "哐嘡~" +#~ msgid "Nevaeh" +#~ msgstr "内维娅" -#~ msgid "whunk!" -#~ msgstr "唰唰!" +#~ msgid "Nicholas" +#~ msgstr "尼古拉斯" -#~ msgid "porcelain breaking!" -#~ msgstr "瓷器碎了!" +#~ msgid "Noah" +#~ msgstr "诺亚" -#~ msgid "clang!" -#~ msgstr "哐!" +#~ msgid "Olivia" +#~ msgstr "奥丽维娅" -#~ msgid "metal screeching!" -#~ msgstr "一声尖锐的金属断裂的声音!" +#~ msgid "Owen" +#~ msgstr "欧文" -#~ msgid "Play ow!" -#~ msgstr "直接游戏!" +#~ msgid "Paige" +#~ msgstr "佩奇" -#~ msgid "andom Character" -#~ msgstr "随机生成角色" +#~ msgid "Parker" +#~ msgstr "帕克" -#~ msgid "

reset Character" -#~ msgstr "

使用预设角色" +#~ msgid "Patterson" +#~ msgstr "帕特森" -#~ msgid "ustom Character" -#~ msgstr "创建新角色" +#~ msgid "Payton" +#~ msgstr "佩顿" -#~ msgid "uit" -#~ msgstr "退出" +#~ msgid "Perez" +#~ msgstr "佩雷斯" -#~ msgid "redits" -#~ msgstr "制作组" +#~ msgid "Perry" +#~ msgstr "佩瑞" -#~ msgid "elp" -#~ msgstr "帮助" +#~ msgid "Peterson" +#~ msgstr "佩特森" -#~ msgid "ptions" -#~ msgstr "选项" +#~ msgid "Phillips" +#~ msgstr "菲利普斯" -#~ msgid "pecial" -#~ msgstr "特殊" +#~ msgid "Powell" +#~ msgstr "鲍威尔" -#~ msgid "oad" -#~ msgstr "载入" +#~ msgid "Price" +#~ msgstr "皮尔斯" -#~ msgid "ew Game" -#~ msgstr "新游戏" +#~ msgid "Rachel" +#~ msgstr "瑞秋" -#~ msgid "Wagon" -#~ msgstr "四轮马车" +#~ msgid "Ramirez" +#~ msgstr "拉米雷斯" -#~ msgid "firearms" -#~ msgstr "火器" +#~ msgid "Reed" +#~ msgstr "雷德" -#~ msgid "" -#~ "Being a paramedic put you in a bad spot when it all ended. You had to " -#~ "fight your way out of a hospital full of infected to get to the shelter. " -#~ "You start with a few related tools and some skill in first aid." -#~ msgstr "" -#~ "作为一个医护人员工,末日来临时你的环境对你极其不利。你不得不在医院里杀开一" -#~ "条血路逃往隔离点。好在你那点工具和急救技能帮了你的大忙。" +#~ msgid "Richardson" +#~ msgstr "理查德森" -#~ msgid "" -#~ "You haven't seen this much blood since the war. The whole world's gone " -#~ "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay " -#~ "for what they've done. You start with a cane and your pocketwatch." -#~ msgstr "" -#~ "自从战争结束以来,你还没见过这么多的血。全世界都疯了!他们吃光了你的家人!" -#~ "你发誓你会让他们付出代价,用你的手杖和怀表。" +#~ msgid "Riley" +#~ msgstr "莱利" -#~ msgid "" -#~ "You were on your way to collect your check, when your pimp tried to kill " -#~ "you. You wish that it wasn't a common occurence. You start with a skirt, " -#~ "tank top, a pair of high heels, your stash, and a strong crack addiction." -#~ msgstr "" -#~ "一直潜规则你的皮条客在你准备开工的时候试图杀了你,然后你发现这不是个别案" -#~ "例。于是你一身性感的打扮开始逃命!对了,你还是个不可救药的瘾君子。" +#~ msgid "Rivera" +#~ msgstr "里维拉" -#~ msgid "" -#~ "Before the Apocalypse, you turned to Heroin to soothe your many " -#~ "problems.\n" -#~ "Now, your habit is your only comfort and your only drive." -#~ msgstr "" -#~ "天启之前,你靠海洛因来安抚你的所有问题。\n" -#~ "现在,你的爱好是你的唯一的安慰和唯一的动力。" +#~ msgid "Robert" +#~ msgstr "罗伯特" -#~ msgid "" -#~ "You were about to marry your bride before the cataclysm, now you spend " -#~ "you days searching for her." -#~ msgstr "大灾变之前你刚好准备去迎娶你的真爱,现在你的目标就是找到她。" +#~ msgid "Roberts" +#~ msgstr "罗伯特斯" -#~ msgid "" -#~ "You've worked the streets since you were a kid, and now you use your " -#~ "street skills to survive. You start with a Glock 19 and some of your " -#~ "\"goods\", but no bullets." -#~ msgstr "" -#~ "小时候你就在道上混了,现在你可以利用这些经验生存下去。好消息是,你有把格洛" -#~ "克19手枪,坏消息是,你没子弹..." +#~ msgid "Robinson" +#~ msgstr "罗宾森" -#~ msgid "" -#~ "You worked for a small-time security company guarding local businesses. " -#~ "You start with a security outfit and a flashlight." -#~ msgstr "" -#~ "你曾经在小型安保公司打过工,嗯,没错你做过黑猫,所以保安服和手电你还留着。" +#~ msgid "Rodriguez" +#~ msgstr "罗德里格斯" -#~ msgid "" -#~ "You spent most of your life on a Harley, and it's only natural you spend " -#~ "the rest of it riding one. You start with some biker clothes." -#~ msgstr "" -#~ "你把大部分时间都耗费在了你心爱的哈姆雷特机车上。你穿着一身专业服装开始了恐" -#~ "怖之旅。" +#~ msgid "Rogers" +#~ msgstr "罗杰斯" -#~ msgid "" -#~ "You were in the middle of a nice shower when the cataclysm struck! You " -#~ "start buck naked." -#~ msgstr "" -#~ "大灾变发生时你正在舒舒服服的享受沐浴,然后你光着身子走进了这个恐怖世界。" +#~ msgid "Ross" +#~ msgstr "罗斯" -#~ msgid "" -#~ "You were a high school student until the teachers literally tried to pick " -#~ "your brains. You start with a backpack and a zombie survival guide." -#~ msgstr "" -#~ "你本是个大学里的学生,直到你的恩师想要挖出你的脑子来时,你清楚你的大学生活" -#~ "结束了。现在你背上行囊,拿着丧尸生存手册,开始了你的毕业之旅。" +#~ msgid "Russell" +#~ msgstr "拉塞尔" -#~ msgid "" -#~ "You used to work for some small-time business owner doing minor " -#~ "electrical work, and you just so happened to be working on an evac " -#~ "shelter when the cataclysm struck. You start with a level in electronics, " -#~ "and a tool belt." -#~ msgstr "" -#~ "苦逼的是,你是个经常被老板们呼来喝去初级电工;幸运的是,大灾变降临时你真好" -#~ "在避难所修电表。" +#~ msgid "Ryan" +#~ msgstr "瑞安" -#~ msgid "" -#~ "You were one of those guys who watched one too many survivalist shows. " -#~ "You start with a backpack, a blazer, and some survival skills." -#~ msgstr "" -#~ "你曾是贝爷荒野求生的忠实观众,所以貌似你在如何活命这一点上经验颇丰。初始状" -#~ "态:背包、鲜活的运动上衣和一些生存技能。" +#~ msgid "Sabastian" +#~ msgstr "塞巴斯蒂安" -#~ msgid "" -#~ "You've traveled for a living, sightseeing here and there, and living off " -#~ "your parents' trust fund. But now they're gone, and the only thing " -#~ "between you and death is the open road and your backpack." -#~ msgstr "" -#~ "你靠着双亲信托基金四处游荡,遗憾的是如今你父母都不在了,幸好现在再也不需要" -#~ "钱了。问题是,你和死亡之间的距离只有眼前的大路和身后的背包。" +#~ msgid "Samantha" +#~ msgstr "萨曼莎" -#~ msgid "" -#~ "You used to work at the home depot, and you did a lot of home renovations " -#~ "yourself. You start with steel toe boots, a tool belt, a hammer, and a " -#~ "level in construction." -#~ msgstr "" -#~ "你曾在装修公司卖苦力而且乐在其中,以至于你家装修是你一个人搞定的!由于对坑" -#~ "爹老板的薪水不满,你带着他的几件工具离开了他。" +#~ msgid "Samuel" +#~ msgstr "萨穆埃尔" -#~ msgid "" -#~ "You lived on the streets your whole life because you would rather have a " -#~ "bottle of whiskey than a roof over your head. You start with a strong " -#~ "alcohol addiction and a pair of pants." -#~ msgstr "" -#~ "你的一生都在露宿街头,因为对你来说一瓶威士忌胜过头顶上的屋檐。在游戏开始你" -#~ "将具有强烈的酒精成瘾症和一条裤子。" +#~ msgid "Sanchez" +#~ msgstr "桑切斯" -#~ msgid "" -#~ "Everyone at work knew you as the person who always had a cigarette or two " -#~ "in hand. Now, you're down to a single pack, and you hope you find more " -#~ "soon. You start out with a strong nicotine addiction, and 10 cigarettes." -#~ msgstr "" -#~ "所有人都知道你是个烟不离手的家伙。现在再也没人给你递烟了,趁兜里的半包没抽" -#~ "完之前,你最好自己开始寻找补给。" +#~ msgid "Sanders" +#~ msgstr "桑德斯" -#~ msgid "" -#~ "You're a high school drop-out with one goal in mind: to join the " -#~ "military. You finally got in, and now it's hell on Earth in cataclysmic " -#~ "proportions. You start out with some military gear, and a level in " -#~ "survival and firearms." -#~ msgstr "" -#~ "你从高中辍学,目标只有一个:参军。现在你终于实现了你的目标,并且成为这个灾" -#~ "变世界中的梦魇。你开局时带着一些军事装备,并且掌握生存和火器技能。" +#~ msgid "Sara" +#~ msgstr "萨拉" -#~ msgid "" -#~ "Your flexible outlook on law has ensured your survival, but now what? You " -#~ "start with cargo pants, a hoodie, \"sundries\", and one additional level " -#~ "of melee." -#~ msgstr "" -#~ "你从来都不是一个遵纪守法的好公民,但你靠这些年刀光剑影锻炼出来的身手这个幸" -#~ "存了下来。" +#~ msgid "Sarah" +#~ msgstr "莎拉" -#~ msgid "" -#~ "Although you never got your driver's license, you've always loved cars. " -#~ "You start with a wrench, a toolbelt, and some car-related reading " -#~ "material." -#~ msgstr "" -#~ "虽然你从没有获得过正式驾照,但你清楚你血液中流淌的是97号的汽油。汽车就是你" -#~ "的爱人,你的全部。游戏开始时你将拥有一个扳手、一个工具腰带和一些与汽车相关" -#~ "的读物。" +#~ msgid "Savannah" +#~ msgstr "萨凡娜" -#~ msgid "York" -#~ msgstr "纽约" +#~ msgid "Scott" +#~ msgstr "斯科特" -#~ msgid "Yarmouth" -#~ msgstr "维沙卡帕特" +#~ msgid "Sean" +#~ msgstr "西恩" + +#~ msgid "Simmons" +#~ msgstr "西蒙斯" -#~ msgid "Wrentham" -#~ msgstr "伦瑟姆" +#~ msgid "Smith" +#~ msgstr "史密斯" -#~ msgid "Worthington" -#~ msgstr "沃辛顿" +#~ msgid "Sofia" +#~ msgstr "索菲亚" -#~ msgid "Worcester" -#~ msgstr "伍斯特" +#~ msgid "Sophie" +#~ msgstr "苏菲" -#~ msgid "Woonsocket" -#~ msgstr "索基特" +#~ msgid "Stewart" +#~ msgstr "斯图尔特" -#~ msgid "Woolwich" -#~ msgstr "伍尔维奇" +#~ msgid "Sydney" +#~ msgstr "西德尼" -#~ msgid "Woodville" -#~ msgstr "伍德维尔" +#~ msgid "Taylor" +#~ msgstr "泰勒" -#~ msgid "Woodstock" -#~ msgstr "伍德斯托克" +#~ msgid "Thomas" +#~ msgstr "托马斯" -#~ msgid "Woodland" -#~ msgstr "伍德兰" +#~ msgid "Thompson" +#~ msgstr "汤普森" -#~ msgid "Woodford" -#~ msgstr "伍德福德" +#~ msgid "Torres" +#~ msgstr "托雷斯" -#~ msgid "Woodbury" -#~ msgstr "伍德伯里" +#~ msgid "Trinity" +#~ msgstr "芮妮蒂" -#~ msgid "Woodbridge" -#~ msgstr "伍德布里奇" +#~ msgid "Tristan" +#~ msgstr "特里斯坦" -#~ msgid "Wolfeboro" -#~ msgstr "沃夫波洛" +#~ msgid "Turner" +#~ msgstr "特纳" -#~ msgid "Wolcott" -#~ msgstr "沃尔科特" +#~ msgid "Tyler" +#~ msgstr "泰勒" -#~ msgid "Woburn" -#~ msgstr "沃" +#~ msgid "Valeria" +#~ msgstr "瓦伦西亚" -#~ msgid "Wiscasset" -#~ msgstr "威斯卡西特" +#~ msgid "Vanessa" +#~ msgstr "瓦妮莎" -#~ msgid "Winthrop" -#~ msgstr "温斯洛普" +#~ msgid "Victoria" +#~ msgstr "维多利亚" -#~ msgid "Winterville Plantation" -#~ msgstr "温特维尔种植园" +#~ msgid "Walker" +#~ msgstr "沃克" -#~ msgid "Winterport" -#~ msgstr "温特波特" +#~ msgid "Ward" +#~ msgstr "沃德" -#~ msgid "Winter Harbor" -#~ msgstr "冬季港" +#~ msgid "Washington" +#~ msgstr "华盛顿" -#~ msgid "Winslow" -#~ msgstr "温斯洛" +#~ msgid "Watson" +#~ msgstr "沃特森" -#~ msgid "Winooski" -#~ msgstr "威努斯基" +#~ msgid "White" +#~ msgstr "怀特" -#~ msgid "Winn" -#~ msgstr "温" +#~ msgid "William" +#~ msgstr "威廉姆" -#~ msgid "Winhall" -#~ msgstr "温霍尔" +#~ msgid "Williams" +#~ msgstr "威廉姆斯" -#~ msgid "Windsor Locks" -#~ msgstr "温莎洛克斯" +#~ msgid "Wilson" +#~ msgstr "威尔森" -#~ msgid "Windsor" -#~ msgstr "温莎" +#~ msgid "Wood" +#~ msgstr "伍德" -#~ msgid "Windham" -#~ msgstr "温德姆" +#~ msgid "Wright" +#~ msgstr "莱特" -#~ msgid "Winchester" -#~ msgstr "温彻斯特" +#~ msgid "Wyatt" +#~ msgstr "怀亚特" -#~ msgid "Winchendon" -#~ msgstr "温琴登" +#~ msgid "Xavier" +#~ msgstr "塞维尔" -#~ msgid "Wilton" -#~ msgstr "威尔顿" +#~ msgid "Young" +#~ msgstr "扬" -#~ msgid "Wilmot" -#~ msgstr "威尔莫特" +#~ msgid "Zachary" +#~ msgstr "扎卡里" -#~ msgid "Wilmington" -#~ msgstr "威尔明顿" +#~ msgid "Zoe" +#~ msgstr "祖伊" -#~ msgid "Williston" -#~ msgstr "威利斯顿" +#~ msgid "Zoey" +#~ msgstr "佐伊" -#~ msgid "Willington" -#~ msgstr "威灵顿" +#~ msgid "Abbot" +#~ msgstr "阿伯特" -#~ msgid "Willimantic" -#~ msgstr "威利曼蒂克" +#~ msgid "Abington" +#~ msgstr "阿宾顿" -#~ msgid "Williamstown" -#~ msgstr "威廉斯镇" +#~ msgid "Acton" +#~ msgstr "阿克顿" -#~ msgid "Williamsburg" -#~ msgstr "威廉斯堡(美国弗吉尼亚州东南部城市)" +#~ msgid "Acushnet" +#~ msgstr "Acushnet" -#~ msgid "Wilbraham" -#~ msgstr "威尔布拉汉(美国地名)" +#~ msgid "Acworth" +#~ msgstr "Acworth" -#~ msgid "Whitneyville" -#~ msgstr "惠特尼维尔" +#~ msgid "Agawam" +#~ msgstr "Agawam" -#~ msgid "Whitman" -#~ msgstr "惠特曼" +#~ msgid "Albany" +#~ msgstr "Albany" -#~ msgid "Whitingham" -#~ msgstr "怀廷汉姆" +#~ msgid "Albion" +#~ msgstr "Albion" -#~ msgid "Whiting" -#~ msgstr "怀廷" +#~ msgid "Alburg" +#~ msgstr "Alburg" -#~ msgid "Whitefield" -#~ msgstr "怀特菲尔德" +#~ msgid "Alexandria" +#~ msgstr "Alexandria" -#~ msgid "Wheelock" -#~ msgstr "韦洛克" +#~ msgid "Alford" +#~ msgstr "Alford" -#~ msgid "Whately" -#~ msgstr "怀特利" +#~ msgid "Alfred" +#~ msgstr "Alfred" -#~ msgid "Weymouth" -#~ msgstr "韦茅斯(英国港口名)" +#~ msgid "Allagash" +#~ msgstr "Allagash" -#~ msgid "Weybridge" -#~ msgstr "韦布里奇" +#~ msgid "Allenstown" +#~ msgstr "Allenstown" -#~ msgid "Wethersfield" -#~ msgstr "韦琴斯菲尔德" +#~ msgid "Alna" +#~ msgstr "Alna" -#~ msgid "Westwood" -#~ msgstr "维斯特伍德" +#~ msgid "Alstead" +#~ msgstr "Alstead" -#~ msgid "Westport" -#~ msgstr "韦斯特波特" +#~ msgid "Alton" +#~ msgstr "Alton" -#~ msgid "Weston" -#~ msgstr "韦斯顿" +#~ msgid "Amesbury" +#~ msgstr "Amesbury" -#~ msgid "Westmoreland" -#~ msgstr "威斯特摩兰" +#~ msgid "Amherst" +#~ msgstr "Amherst" -#~ msgid "Westmore" -#~ msgstr "维斯特莫尔" +#~ msgid "Amity" +#~ msgstr "Amity" -#~ msgid "Westminster" -#~ msgstr "威斯敏斯特" +#~ msgid "Andover" +#~ msgstr "Andover" -#~ msgid "Westhampton" -#~ msgstr "维斯特汉普敦" +#~ msgid "Anson" +#~ msgstr "Anson" -#~ msgid "Westford" -#~ msgstr "威斯特福德" +#~ msgid "Ansonia" +#~ msgstr "Ansonia" -#~ msgid "Westfield" -#~ msgstr "西田" +#~ msgid "Antrim" +#~ msgstr "Antrim" -#~ msgid "Westbrook" -#~ msgstr "威斯布鲁克" +#~ msgid "Appleton" +#~ msgstr "Appleton" -#~ msgid "Westborough" -#~ msgstr "韦斯特伯勒" +#~ msgid "Aquinnah" +#~ msgstr "Aquinnah" -#~ msgid "West Windsor" -#~ msgstr "西温莎" +#~ msgid "Argyle" +#~ msgstr "Argyle" -#~ msgid "West Warwick" -#~ msgstr "西沃里克" +#~ msgid "Arlington" +#~ msgstr "Arlington" -#~ msgid "West Stockbridge" -#~ msgstr "西斯托克布里奇" +#~ msgid "Arrowsic" +#~ msgstr "Arrowsic" -#~ msgid "West Springfield" -#~ msgstr "西斯普林菲尔德" +#~ msgid "Arundel" +#~ msgstr "Arundel" -#~ msgid "West Rutland" -#~ msgstr "西拉特兰" +#~ msgid "Ashburnham" +#~ msgstr "Ashburnham" -#~ msgid "West Paris" -#~ msgstr "西巴黎" +#~ msgid "Ashby" +#~ msgstr "Ashby" -#~ msgid "West Newbury" -#~ msgstr "西纽伯里" +#~ msgid "Ashfield" +#~ msgstr "菲尔德" -#~ msgid "West Haven" -#~ msgstr "西汉文(美国康涅狄格州南部城市)" +#~ msgid "Ashford" +#~ msgstr "Ashford" -#~ msgid "West Hartford" -#~ msgstr "西哈特福市" +#~ msgid "Ashland" +#~ msgstr "Ashland" -#~ msgid "West Greenwich" -#~ msgstr "西格林威治" +#~ msgid "Athens" +#~ msgstr "Athens" -#~ msgid "West Gardiner" -#~ msgstr "西加德纳" +#~ msgid "Athol" +#~ msgstr "Athol" -#~ msgid "West Forks" -#~ msgstr "西叉" +#~ msgid "Atkinson" +#~ msgstr "Atkinson" -#~ msgid "West Brookfield" -#~ msgstr "West Brookfield" +#~ msgid "Attleboro" +#~ msgstr "Attleboro" -#~ msgid "West Bridgewater" -#~ msgstr "诸塞州西布里奇沃特" +#~ msgid "Auburn" +#~ msgstr "Auburn" -#~ msgid "West Bath" -#~ msgstr "西浴" +#~ msgid "Augusta" +#~ msgstr "Augusta" -#~ msgid "Wesley" -#~ msgstr "韦斯利" +#~ msgid "Aurora" +#~ msgstr "Aurora" -#~ msgid "Wentworth" -#~ msgstr "温特沃斯(英国一地名)" +#~ msgid "Avon" +#~ msgstr "Avon" -#~ msgid "Wenham" -#~ msgstr "温汉姆" +#~ msgid "Ayer" +#~ msgstr "Ayer" -#~ msgid "Wendell" -#~ msgstr "温德尔" +#~ msgid "Baileyville" +#~ msgstr "Baileyville" -#~ msgid "Wells" -#~ msgstr "威尔斯" +#~ msgid "Bakersfield" +#~ msgstr "贝克尔斯菲市" -#~ msgid "Wellington" -#~ msgstr "惠灵顿(新西兰首都)" +#~ msgid "Baldwin" +#~ msgstr "Baldwin" -#~ msgid "Wellfleet" -#~ msgstr "韦尔弗利特" +#~ msgid "Baltimore" +#~ msgstr "Baltimore" -#~ msgid "Wellesley" -#~ msgstr "韦尔斯利" +#~ msgid "Bancroft" +#~ msgstr "Bancroft" -#~ msgid "Webster Plantation" -#~ msgstr "韦伯斯特种植园" +#~ msgid "Bangor" +#~ msgstr "Bangor" -#~ msgid "Webster" -#~ msgstr "韦伯斯特" +#~ msgid "Bar Harbor" +#~ msgstr "Bar Harbor" -#~ msgid "Weathersfield" -#~ msgstr "Weathersfield" +#~ msgid "Baring Plantation" +#~ msgstr "Baring Plantation" -#~ msgid "Weare" -#~ msgstr "韦尔" +#~ msgid "Barkhamsted" +#~ msgstr "Barkhamsted" -#~ msgid "Wayne" -#~ msgstr "韦恩" +#~ msgid "Barnard" +#~ msgstr "Barnard" -#~ msgid "Wayland" -#~ msgstr "韦兰" +#~ msgid "Barnet" +#~ msgstr "Barnet" -#~ msgid "Waterville Valley" -#~ msgstr "沃特维尔谷" +#~ msgid "Barnstable" +#~ msgstr "Barnstable" -#~ msgid "Waterville" -#~ msgstr "沃特维尔" +#~ msgid "Barnstead" +#~ msgstr "Barnstead" -#~ msgid "Watertown" -#~ msgstr "沃特敦(美国马萨诸塞州东部城镇)" +#~ msgid "Barre" +#~ msgstr "Barre" -#~ msgid "Waterford" -#~ msgstr "沃特福德(爱尔兰东南部港市)" +#~ msgid "Barrington" +#~ msgstr "Barrington" -#~ msgid "Waterbury" -#~ msgstr "沃特伯里(美国康涅狄格州中西部城市)" +#~ msgid "Bartlett" +#~ msgstr "Bartlett" -#~ msgid "Waterboro" -#~ msgstr "窝特波罗" +#~ msgid "Barton" +#~ msgstr "Barton" -#~ msgid "Washburn" -#~ msgstr "沃什伯恩" +#~ msgid "Bath" +#~ msgstr "Bath" -#~ msgid "Warwick" -#~ msgstr "沃里克(美国罗德岛州东部城市,为纺织业中心)" +#~ msgid "Beacon Falls" +#~ msgstr "Beacon Falls" -#~ msgid "Warren" -#~ msgstr "华伦" +#~ msgid "Beals" +#~ msgstr "Beals" -#~ msgid "Warner" -#~ msgstr "华纳" +#~ msgid "Beaver Cove" +#~ msgstr "Beaver Cove" -#~ msgid "Wareham" -#~ msgstr "威尔汉姆" +#~ msgid "Becket" +#~ msgstr "Becket" -#~ msgid "Waltham" -#~ msgstr "沃尔瑟姆(英国一城市)" +#~ msgid "Beddington" +#~ msgstr "Beddington" -#~ msgid "Walpole" -#~ msgstr "华尔普" +#~ msgid "Bedford" +#~ msgstr "Bedford" -#~ msgid "Wallingford" -#~ msgstr "瓦林福德(美国一城镇)" +#~ msgid "Belchertown" +#~ msgstr "Belchertown" -#~ msgid "Wales" -#~ msgstr "威尔士(英国大不列颠岛西南部地区)" +#~ msgid "Belfast" +#~ msgstr "Belfast" -#~ msgid "Waldo" -#~ msgstr "沃尔多" +#~ msgid "Belgrade" +#~ msgstr "Belgrade" -#~ msgid "Walden" -#~ msgstr "瓦尔登湖" +#~ msgid "Bellingham" +#~ msgstr "Bellingham" -#~ msgid "Wakefield" -#~ msgstr "韦克菲尔德" +#~ msgid "Belmont" +#~ msgstr "Belmont" -#~ msgid "Waitsfield" -#~ msgstr "菲尔德" +#~ msgid "Belvidere" +#~ msgstr "Belvidere" -#~ msgid "Waite" -#~ msgstr "韦特" +#~ msgid "Benedicta" +#~ msgstr "Benedicta" -#~ msgid "Wade" -#~ msgstr "韦德" +#~ msgid "Bennington" +#~ msgstr "Bennington" -#~ msgid "Vinalhaven" -#~ msgstr "维纳哈芬" +#~ msgid "Benson" +#~ msgstr "Benson" -#~ msgid "Vienna" -#~ msgstr "维也纳(奥地利首都)" +#~ msgid "Benton" +#~ msgstr "Benton" -#~ msgid "Verona Island" -#~ msgstr "维罗纳岛" +#~ msgid "Berkley" +#~ msgstr "Berkley" -#~ msgid "Vernon" -#~ msgstr "弗农" +#~ msgid "Berkshire" +#~ msgstr "Berkshire" -#~ msgid "Vergennes" -#~ msgstr "弗金斯" +#~ msgid "Berlin" +#~ msgstr "Berlin" -#~ msgid "Vassalboro" -#~ msgstr "瓦萨波罗" +#~ msgid "Bernardston" +#~ msgstr "Bernardston" -#~ msgid "Vanceboro" -#~ msgstr "凡斯波罗" +#~ msgid "Berwick" +#~ msgstr "Berwick" -#~ msgid "Van Buren" -#~ msgstr "范布伦(美国城市)" +#~ msgid "Bethany" +#~ msgstr "Bethany" -#~ msgid "Uxbridge" -#~ msgstr "乌克斯桥镇" +#~ msgid "Bethel" +#~ msgstr "Bethel" -#~ msgid "Upton" -#~ msgstr "厄普顿" +#~ msgid "Bethlehem" +#~ msgstr "Bethlehem" -#~ msgid "Union" -#~ msgstr "联盟" +#~ msgid "Beverly" +#~ msgstr "Beverly" -#~ msgid "Underhill" -#~ msgstr "昂德希尔" +#~ msgid "Biddeford" +#~ msgstr "Biddeford" -#~ msgid "Tyringham" -#~ msgstr "蒂林厄姆" +#~ msgid "Billerica" +#~ msgstr "Billerica" -#~ msgid "Tunbridge" -#~ msgstr "滕布里奇" +#~ msgid "Bingham" +#~ msgstr "Bingham" -#~ msgid "Truro" -#~ msgstr "特鲁罗市" +#~ msgid "Blackstone" +#~ msgstr "Blackstone" -#~ msgid "Trumbull" -#~ msgstr "特兰伯尔" +#~ msgid "Blaine" +#~ msgstr "Blaine" -#~ msgid "Troy" -#~ msgstr "特洛伊(美国纽约州一城市)" +#~ msgid "Blanchard" +#~ msgstr "Blanchard" -#~ msgid "Trenton" -#~ msgstr "特伦顿(美国新泽西州首府)" +#~ msgid "Blandford" +#~ msgstr "Blandford" -#~ msgid "Tremont" -#~ msgstr "里蒙特饭店" +#~ msgid "Bloomfield" +#~ msgstr "布洛姆菲尔德" -#~ msgid "Townshend" -#~ msgstr "汤恩森德" +#~ msgid "Blue Hill" +#~ msgstr "Blue Hill" -#~ msgid "Townsend" -#~ msgstr "汤森" +#~ msgid "Bolton" +#~ msgstr "Bolton" -#~ msgid "Torrington" -#~ msgstr "托灵顿" +#~ msgid "Boothbay" +#~ msgstr "Boothbay" -#~ msgid "Topsham" -#~ msgstr "托普瑟姆" +#~ msgid "Boothbay Harbor" +#~ msgstr "Boothbay Harbor" -#~ msgid "Topsfield" -#~ msgstr "Topsfield" +#~ msgid "Boscawen" +#~ msgstr "Boscawen" -#~ msgid "Tolland" -#~ msgstr "托兰德" +#~ msgid "Boston" +#~ msgstr "Boston" -#~ msgid "Tiverton" -#~ msgstr "泰沃顿" +#~ msgid "Bourne" +#~ msgstr "Bourne" -#~ msgid "Tilton" -#~ msgstr "蒂尔顿" +#~ msgid "Bow" +#~ msgstr "Bow" -#~ msgid "Thornton" -#~ msgstr "梅特勒" +#~ msgid "Bowdoin" +#~ msgstr "Bowdoin" -#~ msgid "Thorndike" -#~ msgstr "桑代克" +#~ msgid "Bowdoinham" +#~ msgstr "Bowdoinham" -#~ msgid "Thomaston" -#~ msgstr "托马斯顿(美国地名)" +#~ msgid "Bowerbank" +#~ msgstr "Bowerbank" -#~ msgid "Thetford" -#~ msgstr "塞特福特" +#~ msgid "Boxborough" +#~ msgstr "Boxborough" -#~ msgid "The Forks" -#~ msgstr "福克斯区" +#~ msgid "Boxford" +#~ msgstr "Boxford" -#~ msgid "Tewksbury" -#~ msgstr "图克斯伯里" +#~ msgid "Boylston" +#~ msgstr "Boylston" -#~ msgid "Templeton" -#~ msgstr "坦普利顿学院" +#~ msgid "Bozrah" +#~ msgstr "Bozrah" -#~ msgid "Temple" -#~ msgstr "神殿" +#~ msgid "Bradford" +#~ msgstr "Bradford" -#~ msgid "Taunton" -#~ msgstr "陶顿(美国马萨诸塞州东南部城市)" +#~ msgid "Bradley" +#~ msgstr "Bradley" -#~ msgid "Tamworth" -#~ msgstr "塔姆沃思(英国一城市名)" +#~ msgid "Braintree" +#~ msgstr "Braintree" -#~ msgid "Talmadge" -#~ msgstr "塔尔梅奇" +#~ msgid "Branford" +#~ msgstr "Branford" -#~ msgid "Sweden" -#~ msgstr "瑞典(欧洲国家)" +#~ msgid "Brattleboro" +#~ msgstr "Brattleboro" -#~ msgid "Swanville" -#~ msgstr "斯万维尔" +#~ msgid "Bremen" +#~ msgstr "Bremen" -#~ msgid "Swanton" -#~ msgstr "斯万顿" +#~ msgid "Brentwood" +#~ msgstr "Brentwood" -#~ msgid "Swansea" -#~ msgstr "斯温西(英国威尔斯南部一海港)" +#~ msgid "Brewer" +#~ msgstr "Brewer" -#~ msgid "Swans Island" -#~ msgstr "天鹅岛" +#~ msgid "Brewster" +#~ msgstr "Brewster" -#~ msgid "Swampscott" -#~ msgstr "斯瓦姆斯科特(美国马萨诸塞州东北部城市)" +#~ msgid "Bridgeport" +#~ msgstr "Bridgeport" -#~ msgid "Sutton" -#~ msgstr "萨顿(英国英格兰东南部城市)" +#~ msgid "Bridgewater" +#~ msgstr "Bridgewater" -#~ msgid "Surry" -#~ msgstr "萨里郡(英格兰东南部的郡)" +#~ msgid "Bridgton" +#~ msgstr "Bridgton" -#~ msgid "Surrey" -#~ msgstr "萨里大学" +#~ msgid "Bridport" +#~ msgstr "Bridport" -#~ msgid "Sunderland" -#~ msgstr "桑德兰(英国英格兰东北部港市)" +#~ msgid "Brighton" +#~ msgstr "Brighton" -#~ msgid "Sunapee" -#~ msgstr "纳皮" +#~ msgid "Brighton Plantation" +#~ msgstr "Brighton Plantation" -#~ msgid "Sumner" -#~ msgstr "萨姆纳" +#~ msgid "Brimfield" +#~ msgstr "布里姆菲尔德" -#~ msgid "Sullivan" -#~ msgstr "沙利文" +#~ msgid "Bristol" +#~ msgstr "Bristol" -#~ msgid "Sugar Hill" -#~ msgstr "黑人妓院" +#~ msgid "Brockton" +#~ msgstr "Brockton" -#~ msgid "Suffield" -#~ msgstr "萨菲尔德" +#~ msgid "Brookfield" +#~ msgstr "布鲁克菲尔德" -#~ msgid "Sudbury" -#~ msgstr "萨德伯里(加拿大安大略省南部城市)" +#~ msgid "Brooklin" +#~ msgstr "Brooklin" -#~ msgid "Sturbridge" -#~ msgstr "斯特布里奇" +#~ msgid "Brookline" +#~ msgstr "Brookline" -#~ msgid "Strong" -#~ msgstr "强壮" +#~ msgid "Brooksville" +#~ msgstr "Brooksville" -#~ msgid "Stratton" -#~ msgstr "斯特拉顿" +#~ msgid "Brookton" +#~ msgstr "Brookton" -#~ msgid "Stratham" -#~ msgstr "斯特拉汉姆" +#~ msgid "Brownfield" +#~ msgstr "布朗菲尔德" -#~ msgid "Stratford" -#~ msgstr "斯特拉特福" +#~ msgid "Brownington" +#~ msgstr "Brownington" -#~ msgid "Strafford" -#~ msgstr "斯特拉福德" +#~ msgid "Brownville" +#~ msgstr "Brownville" -#~ msgid "Stowe" -#~ msgstr "斯托弗" +#~ msgid "Brunswick" +#~ msgstr "Brunswick" -#~ msgid "Stow" -#~ msgstr "斯托" +#~ msgid "Buckfield" +#~ msgstr "巴克菲尔德" -#~ msgid "Stoughton" -#~ msgstr "斯托顿" +#~ msgid "Buckland" +#~ msgstr "Buckland" -#~ msgid "Stonington" -#~ msgstr "斯托宁顿" +#~ msgid "Bucksport" +#~ msgstr "Bucksport" -#~ msgid "Stoneham" -#~ msgstr "斯托纳姆" +#~ msgid "Burke" +#~ msgstr "Burke" -#~ msgid "Stoddard" -#~ msgstr "斯托达德" +#~ msgid "Burlington" +#~ msgstr "Burlington" -#~ msgid "Stockton Springs" -#~ msgstr "斯托克顿斯普林斯" +#~ msgid "Burnham" +#~ msgstr "Burnham" -#~ msgid "Stockholm" -#~ msgstr "斯德哥尔摩" +#~ msgid "Burrillville" +#~ msgstr "Burrillville" -#~ msgid "Stockbridge" -#~ msgstr "斯托克布里奇" +#~ msgid "Buxton" +#~ msgstr "Buxton" -#~ msgid "Stewartstown" -#~ msgstr "斯图尔特斯敦" +#~ msgid "Byron" +#~ msgstr "Byron" -#~ msgid "Steuben" -#~ msgstr "施托伊本" +#~ msgid "Cabot" +#~ msgstr "Cabot" -#~ msgid "Stetson" -#~ msgstr "斯泰森" +#~ msgid "Calais" +#~ msgstr "加莱" -#~ msgid "Sterling" -#~ msgstr "斯特林" +#~ msgid "Cambridge" +#~ msgstr "剑桥" -#~ msgid "Starksboro" -#~ msgstr "斯塔克斯伯勒" +#~ msgid "Camden" +#~ msgstr "卡姆登" -#~ msgid "Starks" -#~ msgstr "斯塔克斯" +#~ msgid "Campton" +#~ msgstr "康普顿" -#~ msgid "Stark" -#~ msgstr "斯塔克" +#~ msgid "Canaan" +#~ msgstr "迦南" -#~ msgid "Stannard" -#~ msgstr "斯坦纳德" +#~ msgid "Candia" +#~ msgstr "甘迪亚" -#~ msgid "Standish" -#~ msgstr "斯坦迪什" +#~ msgid "Canterbury" +#~ msgstr "坎特伯雷" -#~ msgid "Stamford" -#~ msgstr "斯坦福德" +#~ msgid "Canton" +#~ msgstr "坎顿" -#~ msgid "Stafford" -#~ msgstr "斯塔福德" +#~ msgid "Cape Elizabeth" +#~ msgstr "伊丽莎白" -#~ msgid "Stacyville" -#~ msgstr "斯特西维尔" +#~ msgid "Caratunk" +#~ msgstr "Caratunk" -#~ msgid "St. Johnsbury" -#~ msgstr "斯堡街" +#~ msgid "Caribou" +#~ msgstr "卡里布" -#~ msgid "St. George" -#~ msgstr "乔治街" +#~ msgid "Carlisle" +#~ msgstr "卡莱尔" -#~ msgid "St. Francis" -#~ msgstr "弗朗西斯街" +#~ msgid "Carmel" +#~ msgstr "卡梅尔" -#~ msgid "St. Albans" -#~ msgstr "圣奥尔本斯街" +#~ msgid "Carrabassett Valley" +#~ msgstr "Carrabassett Valley" -#~ msgid "St. Agatha" -#~ msgstr "阿加莎街" +#~ msgid "Carroll" +#~ msgstr "卡罗尔" -#~ msgid "Springfield" -#~ msgstr "斯普林菲尔德" +#~ msgid "Carroll Plantation" +#~ msgstr "卡罗尔种植园" -#~ msgid "Sprague" -#~ msgstr "斯普雷格" +#~ msgid "Carthage" +#~ msgstr "迦太基" -#~ msgid "Spencer" -#~ msgstr "斯宾塞" +#~ msgid "Carver" +#~ msgstr "卡弗" -#~ msgid "Southwick" -#~ msgstr "索斯威克" +#~ msgid "Cary Plantation" +#~ msgstr "卡里种植园" -#~ msgid "Southwest Harbor" -#~ msgstr "西南港口" +#~ msgid "Casco" +#~ msgstr "卡斯柯" -#~ msgid "Southport" -#~ msgstr "绍斯波特" +#~ msgid "Castine" +#~ msgstr "卡斯汀" -#~ msgid "Southington" -#~ msgstr "绍辛顿" +#~ msgid "Castle Hill" +#~ msgstr "堡垒山" -#~ msgid "Southbury" -#~ msgstr "绍斯伯里" +#~ msgid "Castleton" +#~ msgstr "卡斯尔顿" -#~ msgid "Southbridge" -#~ msgstr "绍斯布里奇" +#~ msgid "Caswell" +#~ msgstr "卡斯韦尔" -#~ msgid "Southborough" -#~ msgstr "索思伯勒" +#~ msgid "Cavendish" +#~ msgstr "卡文迪什" -#~ msgid "Southampton" -#~ msgstr "南安普敦" +#~ msgid "Center Harbor" +#~ msgstr "中心港" -#~ msgid "South Windsor" -#~ msgstr "南温莎" +#~ msgid "Centerville" +#~ msgstr "森特维尔" -#~ msgid "South Thomaston" -#~ msgstr "南托马斯顿" +#~ msgid "Central Falls" +#~ msgstr "森特勒尔福尔斯" -#~ msgid "South Portland" -#~ msgstr "南波特兰" +#~ msgid "Chaplin" +#~ msgstr "卓别林" -#~ msgid "South Kingstown" -#~ msgstr "南金斯敦" +#~ msgid "Chapman" +#~ msgstr "查普曼" -#~ msgid "South Hero" -#~ msgstr "南希罗" +#~ msgid "Charlemont" +#~ msgstr "查尔蒙特" -#~ msgid "South Hampton" -#~ msgstr "南汉普顿" +#~ msgid "Charleston" +#~ msgstr "查尔斯顿" -#~ msgid "South Hadley" -#~ msgstr "南哈德利" +#~ msgid "Charlestown" +#~ msgstr "查尔斯" -#~ msgid "South Burlington" -#~ msgstr "南伯林顿" +#~ msgid "Charlton" +#~ msgstr "查尔顿" -#~ msgid "South Bristol" -#~ msgstr "布里斯托尔南部" +#~ msgid "Chatham" +#~ msgstr "查塔姆" -#~ msgid "South Berwick" -#~ msgstr "南贝威克" +#~ msgid "Chebeague Island" +#~ msgstr "肯纳贝克" -#~ msgid "Sorrento" -#~ msgstr "索伦托(意大利南部城镇)" +#~ msgid "Chelmsford" +#~ msgstr "切姆斯福德" -#~ msgid "Somerville" -#~ msgstr " 萨默维尔市(美国马萨诸塞州东部城市)" +#~ msgid "Chelsea" +#~ msgstr "切尔西" -#~ msgid "Somersworth" -#~ msgstr "萨默斯沃思" +#~ msgid "Cherryfield" +#~ msgstr "切里菲尔德" -#~ msgid "Somerset" -#~ msgstr "萨默塞特郡" +#~ msgid "Cheshire" +#~ msgstr "柴郡" -#~ msgid "Somers" -#~ msgstr " 萨默斯" +#~ msgid "Chester" +#~ msgstr "切斯特" -#~ msgid "Solon" -#~ msgstr "梭伦" +#~ msgid "Chesterfield" +#~ msgstr "切斯特菲尔德" -#~ msgid "Smyrna" -#~ msgstr "士麦那(今称伊兹密尔,土耳其西部一港口城市)" +#~ msgid "Chesterville" +#~ msgstr "切斯特维尔" -#~ msgid "Smithfield" -#~ msgstr "史密斯菲尔德" +#~ msgid "Chichester" +#~ msgstr "奇切斯特" -#~ msgid "Skowhegan" -#~ msgstr "史勾西根" +#~ msgid "Chicopee" +#~ msgstr "奇科皮" -#~ msgid "Simsbury" -#~ msgstr "辛斯伯利市" +#~ msgid "Chilmark" +#~ msgstr "奇尔马克" -#~ msgid "Sidney" -#~ msgstr "西德尼" +#~ msgid "China" +#~ msgstr "中国" -#~ msgid "Shutesbury" -#~ msgstr "舒茨伯里" +#~ msgid "Chittenden" +#~ msgstr "Chittenden" -#~ msgid "Shrewsbury" -#~ msgstr "什鲁斯伯里(英格兰西部一城市)" +#~ msgid "Claremont" +#~ msgstr "克莱尔蒙特" -#~ msgid "Shoreham" -#~ msgstr "肖勒姆" +#~ msgid "Clarendon" +#~ msgstr "克拉伦登" -#~ msgid "Shirley" -#~ msgstr "雪莉" +#~ msgid "Clarksburg" +#~ msgstr "克拉克斯堡" -#~ msgid "Sherman" -#~ msgstr "谢尔曼" +#~ msgid "Clarksville" +#~ msgstr "克拉克斯维尔" -#~ msgid "Sherborn" -#~ msgstr "舍伯恩" +#~ msgid "Clifton" +#~ msgstr "克利夫顿" -#~ msgid "Shelton" -#~ msgstr "谢尔顿(美国康涅狄格州西南部城市)" +#~ msgid "Clinton" +#~ msgstr "克林顿" -#~ msgid "Sheldon" -#~ msgstr "谢尔顿" +#~ msgid "Codyville Plantation" +#~ msgstr "Codyville种植园" -#~ msgid "Shelburne" -#~ msgstr "谢尔本" +#~ msgid "Cohasset" +#~ msgstr "科哈塞特" -#~ msgid "Sheffield" -#~ msgstr "谢菲尔德" +#~ msgid "Colchester" +#~ msgstr "科尔切斯特" -#~ msgid "Sharon" -#~ msgstr "沙仑" +#~ msgid "Colebrook" +#~ msgstr "柯尔布鲁克" -#~ msgid "Shapleigh" -#~ msgstr "沙普利" +#~ msgid "Colrain" +#~ msgstr "Colrain" -#~ msgid "Shaftsbury" -#~ msgstr "沙夫茨伯里" +#~ msgid "Columbia" +#~ msgstr "哥伦比亚" -#~ msgid "Seymour" -#~ msgstr "西摩" +#~ msgid "Columbia Falls" +#~ msgstr "哥伦比亚佛斯" -#~ msgid "Seekonk" -#~ msgstr "锡康克" +#~ msgid "Concord" +#~ msgstr "康科德" -#~ msgid "Sedgwick" -#~ msgstr "塞奇威克" +#~ msgid "Conway" +#~ msgstr "康韦" -#~ msgid "Seboeis Plantation" -#~ msgstr "塞布伊斯种植园" +#~ msgid "Coplin Plantation" +#~ msgstr "Coplin Plantation" -#~ msgid "Sebec" -#~ msgstr "赛贝克" +#~ msgid "Corinna" +#~ msgstr "科琳娜" -#~ msgid "Sebago" -#~ msgstr "仕品高" +#~ msgid "Corinth" +#~ msgstr "科林斯" -#~ msgid "Searsport" -#~ msgstr "锡斯波特" +#~ msgid "Cornish" +#~ msgstr "考尼什" -#~ msgid "Searsmont" -#~ msgstr "西尔斯蒙特" +#~ msgid "Cornville" +#~ msgstr "Cornville" -#~ msgid "Searsburg" -#~ msgstr "西尔斯村" +#~ msgid "Cornwall" +#~ msgstr "康沃尔" -#~ msgid "Seabrook" -#~ msgstr "溪镇" +#~ msgid "Coventry" +#~ msgstr "考文垂" -#~ msgid "Scotland" -#~ msgstr "苏格兰" +#~ msgid "Craftsbury" +#~ msgstr "Craftsbury" -#~ msgid "Scituate" -#~ msgstr "斯基尤特" +#~ msgid "Cranberry Isles" +#~ msgstr "蔓越莓群岛" -#~ msgid "Scarborough" -#~ msgstr "士嘉堡" +#~ msgid "Cranston" +#~ msgstr "克兰斯顿" -#~ msgid "Savoy" -#~ msgstr "萨伏依" +#~ msgid "Crawford" +#~ msgstr "克劳福德" -#~ msgid "Saugus" -#~ msgstr "索格斯" +#~ msgid "Cromwell" +#~ msgstr "克伦威尔" -#~ msgid "Sangerville" -#~ msgstr "Sangerville" +#~ msgid "Croydon" +#~ msgstr "克里登" -#~ msgid "Sanford" -#~ msgstr "桑福德" +#~ msgid "Crystal" +#~ msgstr "水晶" -#~ msgid "Sandy River Plantation" -#~ msgstr "桑迪河种植园" +#~ msgid "Cumberland" +#~ msgstr "坎伯兰郡" -#~ msgid "Sandwich" -#~ msgstr "三文治" +#~ msgid "Cummington" +#~ msgstr "Cummington" -#~ msgid "Sandown" -#~ msgstr "桑当" +#~ msgid "Cushing" +#~ msgstr "库欣" -#~ msgid "Sandisfield" -#~ msgstr "Sandisfield" +#~ msgid "Cutler" +#~ msgstr "卡特勒" -#~ msgid "Sandgate" -#~ msgstr "桑盖特" +#~ msgid "Cyr Plantation" +#~ msgstr "Cyr Plantation" -#~ msgid "Sanbornton" -#~ msgstr "Sanbornton" +#~ msgid "Dallas Plantation" +#~ msgstr "达拉斯种植园" -#~ msgid "Salisbury" -#~ msgstr "索尔兹伯里市" +#~ msgid "Dalton" +#~ msgstr "道尔顿" -#~ msgid "Salem" -#~ msgstr "塞伦" +#~ msgid "Damariscotta" +#~ msgstr "Damariscotta" -#~ msgid "Saint John Plantation" -#~ msgstr "圣约翰种植园" +#~ msgid "Danbury" +#~ msgstr "丹伯里" -#~ msgid "Saco" -#~ msgstr "萨柯" +#~ msgid "Danby" +#~ msgstr "丹比" -#~ msgid "Sabattus" -#~ msgstr "Sabattus" +#~ msgid "Danforth" +#~ msgstr "丹佛斯" -#~ msgid "Ryegate" -#~ msgstr "拉伊盖特" +#~ msgid "Danvers" +#~ msgstr "丹弗斯" -#~ msgid "Rye" -#~ msgstr "麦威" +#~ msgid "Danville" +#~ msgstr "丹维尔" -#~ msgid "Rutland" -#~ msgstr "拉特兰郡" +#~ msgid "Darien" +#~ msgstr "达连湾" -#~ msgid "Rupert" -#~ msgstr "鲁珀特" +#~ msgid "Dartmouth" +#~ msgstr "达特茅斯" -#~ msgid "Rumney" -#~ msgstr "鲁珀特" +#~ msgid "Dayton" +#~ msgstr "代顿" -#~ msgid "Rumford" -#~ msgstr "拉姆福德" +#~ msgid "Deblois" +#~ msgstr "Deblois" -#~ msgid "Royalton" -#~ msgstr "拉姆福德" +#~ msgid "Dedham" +#~ msgstr "戴德姆" -#~ msgid "Royalston" -#~ msgstr "豪峰" +#~ msgid "Deep River" +#~ msgstr "神秘之河" -#~ msgid "Roxbury" -#~ msgstr "克斯伯力" +#~ msgid "Deer Isle" +#~ msgstr "鹿岛" -#~ msgid "Rowley" -#~ msgstr "罗利" +#~ msgid "Deerfield" +#~ msgstr "迪尔菲尔德" -#~ msgid "Rowe" -#~ msgstr "罗威廉" +#~ msgid "Deering" +#~ msgstr "迪灵" -#~ msgid "Roque Bluffs" -#~ msgstr "罗克悬崖" +#~ msgid "Denmark" +#~ msgstr "丹麦" -#~ msgid "Rome" -#~ msgstr "罗马" +#~ msgid "Dennis" +#~ msgstr "丹尼斯" -#~ msgid "Rollinsford" -#~ msgstr "罗克" +#~ msgid "Dennistown" +#~ msgstr "丹尼斯" -#~ msgid "Rocky Hill" -#~ msgstr "洛基山" +#~ msgid "Dennysville" +#~ msgstr "Dennysville" -#~ msgid "Rockport" -#~ msgstr "罗克波特" +#~ msgid "Derby" +#~ msgstr "德比" -#~ msgid "Rockland" -#~ msgstr "罗克兰" +#~ msgid "Derry" +#~ msgstr "德里" -#~ msgid "Rockingham" -#~ msgstr "罗金厄姆" +#~ msgid "Detroit" +#~ msgstr "底特律" -#~ msgid "Rochester" -#~ msgstr "罗契斯特" +#~ msgid "Dexter" +#~ msgstr "Dexter" -#~ msgid "Robbinston" -#~ msgstr "罗契斯" +#~ msgid "Dighton" +#~ msgstr "Dighton" -#~ msgid "Ripton" -#~ msgstr "立顿" +#~ msgid "Dixfield" +#~ msgstr "迪克斯菲" -#~ msgid "Ripley" -#~ msgstr "雷普利" +#~ msgid "Dixmont" +#~ msgstr "迪士蒙" -#~ msgid "Rindge" -#~ msgstr "普利" +#~ msgid "Dorchester" +#~ msgstr "多尔切斯特" -#~ msgid "Ridgefield" -#~ msgstr "瑞吉菲尔德" +#~ msgid "Dorset" +#~ msgstr "多塞特" -#~ msgid "Richmond" -#~ msgstr "里士满" +#~ msgid "Douglas" +#~ msgstr "道格拉斯" -#~ msgid "Richford" -#~ msgstr "奇福德" +#~ msgid "Dover" +#~ msgstr "多佛" -#~ msgid "Revere" -#~ msgstr "里维尔" +#~ msgid "Dover-Foxcroft" +#~ msgstr "多佛法斯克罗" -#~ msgid "Rehoboth" -#~ msgstr "雷霍博特" +#~ msgid "Dracut" +#~ msgstr "德拉刻特" -#~ msgid "Reed Plantation" -#~ msgstr "里德种植园" +#~ msgid "Dresden" +#~ msgstr "德累斯顿" -#~ msgid "Readsboro" -#~ msgstr "里德" +#~ msgid "Drew Plantation" +#~ msgstr "Drew Plantation" -#~ msgid "Reading" -#~ msgstr "雷丁" +#~ msgid "Dublin" +#~ msgstr "都柏林" -#~ msgid "Readfield" -#~ msgstr "Readfield" +#~ msgid "Dudley" +#~ msgstr "达德利" -#~ msgid "Raynham" -#~ msgstr "雷纳姆" +#~ msgid "Dummer" +#~ msgstr "达默" -#~ msgid "Raymond" -#~ msgstr "雷蒙德" +#~ msgid "Dummerston" +#~ msgstr "Dummerston" -#~ msgid "Rangeley Plantation" -#~ msgstr "朗吉利种植园" +#~ msgid "Dunbarton" +#~ msgstr "丹巴顿" -#~ msgid "Rangeley" -#~ msgstr "朗吉利湖" +#~ msgid "Dunstable" +#~ msgstr "邓斯泰布尔" -#~ msgid "Randolph" -#~ msgstr "伦道夫" +#~ msgid "Durham" +#~ msgstr "达拉谟" -#~ msgid "Quincy" -#~ msgstr "昆西" +#~ msgid "Duxbury" +#~ msgstr "达克斯伯里" -#~ msgid "Putney" -#~ msgstr "帕特尼" +#~ msgid "Dyer Brook" +#~ msgstr "Dyer Brook" -#~ msgid "Putnam" -#~ msgstr "普特南" +#~ msgid "Eagle Lake" +#~ msgstr "鹰湖" -#~ msgid "Provincetown" -#~ msgstr "普罗温斯敦" +#~ msgid "East Bridgewater" +#~ msgstr "东布里治沃特" -#~ msgid "Providence" -#~ msgstr "普罗维登斯" +#~ msgid "East Brookfield" +#~ msgstr "East Brookfield" -#~ msgid "Prospect" -#~ msgstr "普罗维" +#~ msgid "East Granby" +#~ msgstr "东格兰比" -#~ msgid "Proctor" -#~ msgstr "普林斯" +#~ msgid "East Greenwich" +#~ msgstr "东格林威治" -#~ msgid "Princeton" -#~ msgstr "普林斯顿" +#~ msgid "East Haddam" +#~ msgstr "东海丹" -#~ msgid "Preston" -#~ msgstr "普勒斯顿" +#~ msgid "East Hampton" +#~ msgstr "东汉普顿" -#~ msgid "Presque Isle" -#~ msgstr "普雷斯克岛" +#~ msgid "East Hartford" +#~ msgstr "东哈特福德" -#~ msgid "Prescott" -#~ msgstr "普雷斯科特" +#~ msgid "East Haven" +#~ msgstr "东港" -#~ msgid "Prentiss" -#~ msgstr "培伦提斯" +#~ msgid "East Kingston" +#~ msgstr "东金士顿" -#~ msgid "Pownal" -#~ msgstr "培伦提" +#~ msgid "East Longmeadow" +#~ msgstr "东隆美多" -#~ msgid "Poultney" -#~ msgstr "尔特尼" +#~ msgid "East Lyme" +#~ msgstr "东兰姆" -#~ msgid "Portsmouth" -#~ msgstr "朴茨茅斯" +#~ msgid "East Machias" +#~ msgstr "East Machias" -#~ msgid "Portland" -#~ msgstr "波特兰" +#~ msgid "East Millinocket" +#~ msgstr "东密里诺基特" -#~ msgid "Porter" -#~ msgstr "波特" +#~ msgid "East Montpelier" +#~ msgstr "东蒙彼利埃" -#~ msgid "Portage Lake" -#~ msgstr "波特治湖" +#~ msgid "East Providence" +#~ msgstr "东普罗维登斯" -#~ msgid "Pomfret" -#~ msgstr "波特治" +#~ msgid "East Windsor" +#~ msgstr "东温莎" -#~ msgid "Poland" -#~ msgstr "波兰" +#~ msgid "Eastbrook" +#~ msgstr "Eastbrook" -#~ msgid "Plympton" -#~ msgstr "普林普顿" +#~ msgid "Eastford" +#~ msgstr "伊斯特福德" -#~ msgid "Plymouth" -#~ msgstr "普利茅斯" +#~ msgid "Eastham" +#~ msgstr "Eastham" -#~ msgid "Pleasant Ridge Plantation" -#~ msgstr "普利茅斯" +#~ msgid "Easthampton" +#~ msgstr "伊斯特汉普顿" -#~ msgid "Plaistow" -#~ msgstr "柏斯多" +#~ msgid "Easton" +#~ msgstr "伊斯顿" -#~ msgid "Plainville" -#~ msgstr "普莱恩维尔" +#~ msgid "Eastport" +#~ msgstr "缅因州东港" -#~ msgid "Plainfield" -#~ msgstr "平原镇" +#~ msgid "Eaton" +#~ msgstr "伊顿" -#~ msgid "Pittston" -#~ msgstr "皮茨顿" +#~ msgid "Eddington" +#~ msgstr "爱丁顿" -#~ msgid "Pittsford" -#~ msgstr "匹兹福德" +#~ msgid "Eden" +#~ msgstr "伊甸" -#~ msgid "Pittsfield" -#~ msgstr "皮茨菲尔德" +#~ msgid "Edgartown" +#~ msgstr "埃德加敦" -#~ msgid "Pittsburg" -#~ msgstr "匹兹堡" +#~ msgid "Edgecomb" +#~ msgstr "Edgecomb" -#~ msgid "Piermont" -#~ msgstr "皮尔蒙特" +#~ msgid "Edinburg" +#~ msgstr "爱丁堡" -#~ msgid "Phippsburg" -#~ msgstr "皮尔蒙特" +#~ msgid "Edmunds" +#~ msgstr "埃德蒙" -#~ msgid "Phillipston" -#~ msgstr "彼得伯勒" +#~ msgid "Effingham" +#~ msgstr "埃芬加姆" -#~ msgid "Petersham" -#~ msgstr "彼得伯勒" +#~ msgid "Egremont" +#~ msgstr "艾格蒙特" -#~ msgid "Peterborough" -#~ msgstr "彼得伯勒" +#~ msgid "Eliot" +#~ msgstr "艾略特" -#~ msgid "Peru" -#~ msgstr "秘鲁" +#~ msgid "Ellington" +#~ msgstr "埃林顿" -#~ msgid "Perkins" -#~ msgstr "珀金斯" +#~ msgid "Ellsworth" +#~ msgstr "埃尔斯沃斯" -#~ msgid "Perham" -#~ msgstr "Perham" +#~ msgid "Elmore" +#~ msgstr "埃尔莫尔" -#~ msgid "Pepperell" -#~ msgstr "佩珀勒尔" +#~ msgid "Embden" +#~ msgstr "埃姆登" -#~ msgid "Penobscot" -#~ msgstr "佩诺斯卡" +#~ msgid "Enfield" +#~ msgstr "恩菲尔德" -#~ msgid "Pembroke" -#~ msgstr "彭布罗克" +#~ msgid "Enosburg" +#~ msgstr "Enosburg" -#~ msgid "Pelham" -#~ msgstr "佩勒姆" +#~ msgid "Epping" +#~ msgstr "埃平" -#~ msgid "Peacham" -#~ msgstr "皮查姆" +#~ msgid "Epsom" +#~ msgstr "埃普索姆" -#~ msgid "Peabody" -#~ msgstr "皮博迪" +#~ msgid "Errol" +#~ msgstr "埃罗尔" -#~ msgid "Paxton" -#~ msgstr "帕克斯顿" +#~ msgid "Erving" +#~ msgstr "欧文" -#~ msgid "Pawtucket" -#~ msgstr "波塔基特" +#~ msgid "Essex" +#~ msgstr "艾塞克斯" -#~ msgid "Pawlet" -#~ msgstr "利特" +#~ msgid "Etna" +#~ msgstr "埃特纳" -#~ msgid "Patten" -#~ msgstr "Patten" +#~ msgid "Eustis" +#~ msgstr "尤斯提斯" -#~ msgid "Passadumkeag" -#~ msgstr "Passadumkeag" +#~ msgid "Everett" +#~ msgstr "埃弗雷特" -#~ msgid "Parsonsfield" -#~ msgstr "Parsonsfield" +#~ msgid "Exeter" +#~ msgstr "埃克塞特" -#~ msgid "Parkman" -#~ msgstr "帕克曼" +#~ msgid "Fair Haven" +#~ msgstr "避风港" -#~ msgid "Paris" -#~ msgstr "巴黎" +#~ msgid "Fairfax" +#~ msgstr "费尔法克斯" -#~ msgid "Panton" -#~ msgstr "潘顿" +#~ msgid "Fairfield" +#~ msgstr "费尔菲尔德" -#~ msgid "Palmyra" -#~ msgstr "帕米拉" +#~ msgid "Fairhaven" +#~ msgstr "费尔黑文" -#~ msgid "Palmer" -#~ msgstr "帕默" +#~ msgid "Fairlee" +#~ msgstr "Fairlee" -#~ msgid "Palermo" -#~ msgstr "巴勒莫" +#~ msgid "Fall River" +#~ msgstr "福尔里弗" -#~ msgid "Oxford" -#~ msgstr "牛津" +#~ msgid "Falmouth" +#~ msgstr "法尔茅斯" -#~ msgid "Oxbow" -#~ msgstr "爱宝" +#~ msgid "Farmingdale" +#~ msgstr "法明戴尔" -#~ msgid "Owls Head" -#~ msgstr "Owls Head" +#~ msgid "Farmington" +#~ msgstr "法明顿" -#~ msgid "Otisfield" -#~ msgstr "欧提斯斐" +#~ msgid "Fayette" +#~ msgstr "菲也特" -#~ msgid "Otis" -#~ msgstr "奥狄斯" +#~ msgid "Fayston" +#~ msgstr "Fayston" -#~ msgid "Ossipee" -#~ msgstr "奥西皮" +#~ msgid "Ferrisburg" +#~ msgstr "Ferrisburg" -#~ msgid "Osborn" -#~ msgstr "奥斯本" +#~ msgid "Fitchburg" +#~ msgstr "菲奇堡" -#~ msgid "Orwell" -#~ msgstr "奥威尔" +#~ msgid "Fitzwilliam" +#~ msgstr "菲茨威廉" -#~ msgid "Orrington" -#~ msgstr "奥罗诺" +#~ msgid "Fletcher" +#~ msgstr "弗莱彻" -#~ msgid "Orono" -#~ msgstr "" +#~ msgid "Florida" +#~ msgstr "佛罗里达" -#~ msgid "Orneville" -#~ msgstr "Orneville" +#~ msgid "Fomer towns:" +#~ msgstr "城镇乡村叙事:" -#~ msgid "Orleans" -#~ msgstr "奥尔良" +#~ msgid "Forest City" +#~ msgstr "森林城" -#~ msgid "Orland" -#~ msgstr "奥兰" +#~ msgid "Fort Fairfield" +#~ msgstr "费尔菲堡" -#~ msgid "Orient" -#~ msgstr "东方" +#~ msgid "Fort Kent" +#~ msgstr "肯特堡" -#~ msgid "Orford" -#~ msgstr "奥弗德" +#~ msgid "Foxborough" +#~ msgstr "福克斯巴勒" -#~ msgid "Orange" -#~ msgstr "橙" +#~ msgid "Framingham" +#~ msgstr "弗雷明汉" -#~ msgid "Old Town" -#~ msgstr "旧城" +#~ msgid "Francestown" +#~ msgstr "Francestown" -#~ msgid "Old Saybrook" -#~ msgstr "塞布鲁克" +#~ msgid "Franconia" +#~ msgstr "法兰克尼亚" -#~ msgid "Old Orchard Beach" -#~ msgstr "旧奥查德滩" +#~ msgid "Frankfort" +#~ msgstr "法兰克福" -#~ msgid "Old Lyme" -#~ msgstr "老莱姆" +#~ msgid "Franklin" +#~ msgstr "富兰克林" -#~ msgid "Ogunquit" -#~ msgstr "Ogunquit" +#~ msgid "Freedom" +#~ msgstr "自由" -#~ msgid "Oakland" -#~ msgstr "奥克兰" +#~ msgid "Freeman" +#~ msgstr "弗里曼" -#~ msgid "Oakham" -#~ msgstr "奥克姆" +#~ msgid "Freeport" +#~ msgstr "弗里波特" -#~ msgid "Oakfield" -#~ msgstr "奥克菲尔德" +#~ msgid "Freetown" +#~ msgstr "弗里敦" -#~ msgid "Oak Bluffs" -#~ msgstr "克布拉夫斯" +#~ msgid "Fremont" +#~ msgstr "弗里蒙特" -#~ msgid "Nottingham" -#~ msgstr "诺丁汉" +#~ msgid "Frenchboro" +#~ msgstr "Frenchboro" -#~ msgid "Norwood" -#~ msgstr "诺伍德" +#~ msgid "Frenchville" +#~ msgstr "Frenchville" -#~ msgid "Norwich" -#~ msgstr "诺威奇" +#~ msgid "Friendship" +#~ msgstr "友谊" -#~ msgid "Norwell" -#~ msgstr "Norwell" +#~ msgid "Frye Island" +#~ msgstr "弗莱岛" -#~ msgid "Norway" -#~ msgstr "挪威" +#~ msgid "Fryeburg" +#~ msgstr "Fryeburg" -#~ msgid "Norwalk" -#~ msgstr "诺沃克" +#~ msgid "Gardiner" +#~ msgstr "加德纳" -#~ msgid "Norton" -#~ msgstr "诺顿" +#~ msgid "Gardner" +#~ msgstr "加德纳" -#~ msgid "Northwood" -#~ msgstr "诺斯伍德" +#~ msgid "Garfield Plantation" +#~ msgstr "加菲猫种植园" -#~ msgid "Northumberland" -#~ msgstr "诺森伯兰郡" +#~ msgid "Garland" +#~ msgstr "加兰" -#~ msgid "Northport" -#~ msgstr "北港" +#~ msgid "Georgetown" +#~ msgstr "乔治敦" -#~ msgid "Northfield" -#~ msgstr "诺思菲尔德" +#~ msgid "Georgia" +#~ msgstr "乔治亚州" -#~ msgid "Northbridge" -#~ msgstr "北桥" +#~ msgid "Gilead" +#~ msgstr "吉利德" -#~ msgid "Northborough" -#~ msgstr "诺斯伯勒" +#~ msgid "Gilford" +#~ msgstr "吉尔福特" -#~ msgid "Northampton" -#~ msgstr "北安普敦" +#~ msgid "Gill" +#~ msgstr "吉尔" -#~ msgid "North Yarmouth" -#~ msgstr "北雅茅斯" +#~ msgid "Gilmanton" +#~ msgstr "吉尔曼顿" -#~ msgid "North Stonington" -#~ msgstr "北斯通宁顿" +#~ msgid "Gilsum" +#~ msgstr "Gilsum" -#~ msgid "North Smithfield" -#~ msgstr "北史密斯菲尔德" +#~ msgid "Glastenbury" +#~ msgstr "Glastenbury" -#~ msgid "North Reading" -#~ msgstr "北瑞汀" +#~ msgid "Glastonbury" +#~ msgstr "格拉斯顿堡" -#~ msgid "North Providence" -#~ msgstr "北普罗维登斯" +#~ msgid "Glenburn" +#~ msgstr "Glenburn" -#~ msgid "North Kingstown" -#~ msgstr "北金斯敦" +#~ msgid "Glenwood Plantation" +#~ msgstr "格伦伍德种植园" -#~ msgid "North Hero" -#~ msgstr "北赫罗" +#~ msgid "Glocester" +#~ msgstr "Glocester" -#~ msgid "North Haven" -#~ msgstr "北海文" +#~ msgid "Gloucester" +#~ msgstr "格洛斯特" -#~ msgid "North Hampton" -#~ msgstr "北汉普顿" +#~ msgid "Glover" +#~ msgstr "格洛弗" -#~ msgid "North Canaan" -#~ msgstr "北迦南" +#~ msgid "Goffstown" +#~ msgstr "哥夫斯" -#~ msgid "North Brookfield" -#~ msgstr "北溪田" +#~ msgid "Gorham" +#~ msgstr "戈勒姆" -#~ msgid "North Branford" -#~ msgstr "北布兰福德" +#~ msgid "Goshen" +#~ msgstr "歌珊地" -#~ msgid "North Berwick" -#~ msgstr "北柏威克" +#~ msgid "Gosnold" +#~ msgstr "Gosnold" -#~ msgid "North Attleborough" -#~ msgstr "北阿托巴罗夫" +#~ msgid "Gouldsboro" +#~ msgstr "古尔兹伯勒" -#~ msgid "North Andover" -#~ msgstr "北安多福" +#~ msgid "Grafton" +#~ msgstr "格拉夫顿" -#~ msgid "North Adams" -#~ msgstr "北亚当斯" +#~ msgid "Granby" +#~ msgstr "格兰比" -#~ msgid "Norridgewock" -#~ msgstr "诺里奇沃克" +#~ msgid "Grand Isle" +#~ msgstr "格兰德岛" -#~ msgid "Norfolk" -#~ msgstr "诺福克" +#~ msgid "Grand Lake Stream" +#~ msgstr "大湖流" -#~ msgid "Nobleboro" -#~ msgstr "Nobleboro" +#~ msgid "Grantham" +#~ msgstr "格兰瑟姆" -#~ msgid "Newtown" -#~ msgstr "纽镇" +#~ msgid "Granville" +#~ msgstr "格兰维尔" -#~ msgid "Newton" -#~ msgstr "纽顿" +#~ msgid "Great Barrington" +#~ msgstr "大巴灵顿" -#~ msgid "Newry" -#~ msgstr "纽里" +#~ msgid "Great Pond" +#~ msgstr "大池塘" -#~ msgid "Newport" -#~ msgstr "纽波特" +#~ msgid "Greenbush" +#~ msgstr "格林布什" -#~ msgid "Newmarket" -#~ msgstr "纽马克特" +#~ msgid "Greene" +#~ msgstr "格林" -#~ msgid "Newington" -#~ msgstr "纽因顿" +#~ msgid "Greenfield" +#~ msgstr "格林菲尔德" -#~ msgid "Newfields" -#~ msgstr "Newfields" +#~ msgid "Greenland" +#~ msgstr "格陵兰" -#~ msgid "Newfield" -#~ msgstr "云水遥" +#~ msgid "Greensboro" +#~ msgstr "格林斯博罗" -#~ msgid "Newfane" -#~ msgstr "Newfane" +#~ msgid "Greenville" +#~ msgstr "格林维尔" -#~ msgid "Newcastle" -#~ msgstr "纽卡斯尔" +#~ msgid "Greenwich" +#~ msgstr "格林威治" -#~ msgid "Newburyport" -#~ msgstr "纽柏立波特" +#~ msgid "Greenwood" +#~ msgstr "格林伍德" -#~ msgid "Newbury" -#~ msgstr "纽伯里" +#~ msgid "Griswold" +#~ msgstr "格里斯瓦得" -#~ msgid "Newburgh" -#~ msgstr "纽堡" +#~ msgid "Groton" +#~ msgstr "格罗顿" -#~ msgid "Newark" -#~ msgstr "纽瓦克" +#~ msgid "Groveland" +#~ msgstr "格罗夫兰" -#~ msgid "New Vineyard" -#~ msgstr "新葡萄园" +#~ msgid "Guildhall" +#~ msgstr "伦敦" -#~ msgid "New Sweden" -#~ msgstr "新瑞典" +#~ msgid "Guilford" +#~ msgstr "吉尔福特" -#~ msgid "New Shoreham" -#~ msgstr "新肖勒姆" +#~ msgid "Haddam" +#~ msgstr "Haddam" -#~ msgid "New Sharon" -#~ msgstr "新沙伦" +#~ msgid "Hadley" +#~ msgstr "哈德利" -#~ msgid "New Salem" -#~ msgstr "新塞勒姆" +#~ msgid "Halifax" +#~ msgstr "哈利法克斯" -#~ msgid "New Portland" -#~ msgstr "新波特兰" +#~ msgid "Hallowell" +#~ msgstr "哈洛韦尔" -#~ msgid "New Milford" -#~ msgstr "新米尔福" +#~ msgid "Hamden" +#~ msgstr "哈姆登" -#~ msgid "New Marlborough" -#~ msgstr "新马尔伯勒" +#~ msgid "Hamilton" +#~ msgstr "汉密尔顿" -#~ msgid "New London" -#~ msgstr "新伦敦" +#~ msgid "Hamlin" +#~ msgstr "哈姆林" -#~ msgid "New Limerick" -#~ msgstr "利默里克新" +#~ msgid "Hammond" +#~ msgstr "哈蒙德" -#~ msgid "New Ipswich" -#~ msgstr "新伊普斯维奇" +#~ msgid "Hampden" +#~ msgstr "汉普登" -#~ msgid "New Haven" -#~ msgstr "纽黑文市" +#~ msgid "Hampstead" +#~ msgstr "汉普斯特德" -#~ msgid "New Hartford" -#~ msgstr "新哈特福德" +#~ msgid "Hampton" +#~ msgstr " 汉普顿" -#~ msgid "New Hampton" -#~ msgstr "新汉普顿" +#~ msgid "Hampton Falls" +#~ msgstr "汉普顿瀑布" -#~ msgid "New Gloucester" -#~ msgstr "新格洛斯特" +#~ msgid "Hancock" +#~ msgstr "汉考克" -#~ msgid "New Fairfield" -#~ msgstr "新费尔菲尔德" +#~ msgid "Hanover" +#~ msgstr "汉诺威" -#~ msgid "New Durham" -#~ msgstr "New Durham" +#~ msgid "Hanson" +#~ msgstr "汉森" -#~ msgid "New Castle" -#~ msgstr "纽卡斯尔" +#~ msgid "Hardwick" +#~ msgstr "哈德威克" -#~ msgid "New Canada" -#~ msgstr "新加拿大" +#~ msgid "Harmony" +#~ msgstr "Harmony" -#~ msgid "New Canaan" -#~ msgstr "新迦南" +#~ msgid "Harpswell" +#~ msgstr "Harpswell" -#~ msgid "New Britain" -#~ msgstr "新不列颠" +#~ msgid "Harrington" +#~ msgstr "哈林顿" -#~ msgid "New Braintree" -#~ msgstr "新布伦特里" +#~ msgid "Harrison" +#~ msgstr "哈里森" -#~ msgid "New Boston" -#~ msgstr "新波士顿" +#~ msgid "Harrisville" +#~ msgstr "哈里斯维尔" -#~ msgid "New Bedford" -#~ msgstr "新贝德福德" +#~ msgid "Hart's Location" +#~ msgstr "哈特镇" -#~ msgid "New Ashford" -#~ msgstr "新阿什福德" +#~ msgid "Hartford" +#~ msgstr "哈特福德" -#~ msgid "Needham" -#~ msgstr "尼达姆" +#~ msgid "Hartland" +#~ msgstr "哈特兰" -#~ msgid "Naugatuck" -#~ msgstr "Naugatuck" +#~ msgid "Harvard" +#~ msgstr "哈佛" -#~ msgid "Natick" -#~ msgstr "纳蒂克" +#~ msgid "Harwich" +#~ msgstr "哈里奇" -#~ msgid "Nashville Plantation" -#~ msgstr "纳什维尔种植园" +#~ msgid "Harwinton" +#~ msgstr "哈文顿" -#~ msgid "Nashua" -#~ msgstr "纳舒厄" +#~ msgid "Hatfield" +#~ msgstr "哈特菲尔德" -#~ msgid "Narragansett" -#~ msgstr "纳拉干西特" +#~ msgid "Haverhill" +#~ msgstr "哈福希尔" -#~ msgid "Naples" -#~ msgstr "那不勒斯" +#~ msgid "Hawley" +#~ msgstr "斯姆特" -#~ msgid "Nantucket" -#~ msgstr "楠塔基特岛" +#~ msgid "Haynesville" +#~ msgstr "斯维尔" -#~ msgid "Nahant" -#~ msgstr "直到娜罕" +#~ msgid "Heath" +#~ msgstr "石南" -#~ msgid "Mount Washington" -#~ msgstr "华盛顿山" +#~ msgid "Hebron" +#~ msgstr "希伯伦" -#~ msgid "Mount Vernon" -#~ msgstr "芒特弗农(美国地名)" +#~ msgid "Henniker" +#~ msgstr "汉尼克" -#~ msgid "Mount Tabor" -#~ msgstr "他泊山" +#~ msgid "Hermon" +#~ msgstr "赫蒙" -#~ msgid "Mount Holly" -#~ msgstr "芒特霍利" +#~ msgid "Hersey" +#~ msgstr "赫西" -#~ msgid "Mount Desert" -#~ msgstr "荒山岛" +#~ msgid "Highgate" +#~ msgstr "高门" -#~ msgid "Mount Chase" -#~ msgstr "蒙特柴思" +#~ msgid "Highland Plantation" +#~ msgstr "高地种植园" -#~ msgid "Moultonborough" -#~ msgstr "莫尔顿伯勒" +#~ msgid "Hillsborough" +#~ msgstr "希尔斯伯勒" -#~ msgid "Moscow" -#~ msgstr "莫斯科" +#~ msgid "Hinesburg" +#~ msgstr "斯堡" -#~ msgid "Morristown" -#~ msgstr "莫里斯敦" +#~ msgid "Hingham" +#~ msgstr "欣厄姆" -#~ msgid "Morrill" -#~ msgstr "莫勒尔" +#~ msgid "Hinsdale" +#~ msgstr "欣斯代尔" -#~ msgid "Moro Plantation" -#~ msgstr "摩洛种植园" +#~ msgid "Hiram" +#~ msgstr "海勒姆" -#~ msgid "Moretown" -#~ msgstr "Moretown" +#~ msgid "Hodgdon" +#~ msgstr "霍奇登" -#~ msgid "Moose River" -#~ msgstr "麋鹿河" +#~ msgid "Holbrook" +#~ msgstr "霍尔布鲁克" -#~ msgid "Montville" -#~ msgstr "蒙特维尔" +#~ msgid "Holden" +#~ msgstr "霍顿" -#~ msgid "Montpelier" -#~ msgstr "蒙彼利埃" +#~ msgid "Holderness" +#~ msgstr "霍尔德内斯" -#~ msgid "Monticello" -#~ msgstr "蒙蒂塞洛" +#~ msgid "Holland" +#~ msgstr "霍兰德" -#~ msgid "Montgomery" -#~ msgstr "蒙哥马利" +#~ msgid "Hollis" +#~ msgstr "霍利斯" -#~ msgid "Monterey" -#~ msgstr "蒙特利" +#~ msgid "Holliston" +#~ msgstr "霍利斯顿" -#~ msgid "Montague" -#~ msgstr "蒙塔古" +#~ msgid "Holyoke" +#~ msgstr "霍利约克" -#~ msgid "Mont Vernon" -#~ msgstr "蒙特弗农" +#~ msgid "Hooksett" +#~ msgstr "Hooksett" -#~ msgid "Monson" -#~ msgstr "蒙森" +#~ msgid "Hope" +#~ msgstr "希望" -#~ msgid "Monroe" -#~ msgstr "门罗" +#~ msgid "Hopedale" +#~ msgstr "霍普代尔" -#~ msgid "Monmouth" -#~ msgstr "蒙默思郡" +#~ msgid "Hopkinton" +#~ msgstr "霍普金顿" -#~ msgid "Monkton" -#~ msgstr "芒克顿" +#~ msgid "Houlton" +#~ msgstr "霍尔顿" -#~ msgid "Monhegan" -#~ msgstr "Monhegan" +#~ msgid "Howland" +#~ msgstr "兰德" -#~ msgid "Minot" -#~ msgstr "迈诺特" +#~ msgid "Hubbardston" +#~ msgstr "哈伯兹" -#~ msgid "Milton" -#~ msgstr "米尔顿" +#~ msgid "Hubbardton" +#~ msgstr "Hubbardton" -#~ msgid "Milo" -#~ msgstr "米路" +#~ msgid "Hudson" +#~ msgstr "哈得孙" -#~ msgid "Millville" -#~ msgstr "米尔维尔" +#~ msgid "Hull" +#~ msgstr "赫尔" -#~ msgid "Millis" -#~ msgstr "米利斯" +#~ msgid "Huntington" +#~ msgstr "亨廷顿" -#~ msgid "Millinocket" -#~ msgstr "密利诺克" +#~ msgid "Hurricane Isle" +#~ msgstr "龙卷风之岛" -#~ msgid "Millbury" -#~ msgstr "米尔伯里" +#~ msgid "Hyde Park" +#~ msgstr "海德公园" -#~ msgid "Milford" -#~ msgstr "米尔福德" +#~ msgid "Industry" +#~ msgstr "工业" -#~ msgid "Milbridge" -#~ msgstr "Milbridge" +#~ msgid "Ipswich" +#~ msgstr "伊普斯威奇" -#~ msgid "Milan" -#~ msgstr "米兰" +#~ msgid "Ira" +#~ msgstr "艾勒" -#~ msgid "Middletown Springs" -#~ msgstr "米泉" +#~ msgid "Irasburg" +#~ msgstr "Irasburg" -#~ msgid "Middletown" -#~ msgstr "米德尔顿" +#~ msgid "Island Falls" +#~ msgstr "艾兰福尔斯" -#~ msgid "Middleton" -#~ msgstr "米德尔顿" +#~ msgid "Isle La Motte" +#~ msgstr "Isle La Motte" -#~ msgid "Middlesex" -#~ msgstr "米德尔塞克斯" +#~ msgid "Isle au Haut" +#~ msgstr "Isle au Haut" -#~ msgid "Middlefield" -#~ msgstr "米德尔" +#~ msgid "Islesboro" +#~ msgstr "Islesboro" -#~ msgid "Middlebury" -#~ msgstr "米德尔伯里" +#~ msgid "Jackman" +#~ msgstr "杰克曼" -#~ msgid "Middleborough" -#~ msgstr "Middleborough" +#~ msgid "Jaffrey" +#~ msgstr "贾弗里" -#~ msgid "Mexico" -#~ msgstr "墨西哥" +#~ msgid "Jamaica" +#~ msgstr "牙买加" -#~ msgid "Methuen" -#~ msgstr "修恩" +#~ msgid "Jamestown" +#~ msgstr "詹姆斯敦" -#~ msgid "Merrimack" -#~ msgstr "梅里马克" +#~ msgid "Jay" +#~ msgstr "杰斯" -#~ msgid "Merrimac" -#~ msgstr "梅里马克" +#~ msgid "Jefferson" +#~ msgstr "杰弗逊" -#~ msgid "Merrill" -#~ msgstr "美林" +#~ msgid "Jericho" +#~ msgstr "杰利科" -#~ msgid "Meriden" -#~ msgstr "梅里登" +#~ msgid "Johnston" +#~ msgstr "约翰斯顿" -#~ msgid "Meredith" -#~ msgstr "梅雷迪思" +#~ msgid "Jonesboro" +#~ msgstr "琼斯波罗" -#~ msgid "Mercer" -#~ msgstr "美智" +#~ msgid "Jonesport" +#~ msgstr "琼斯波特" -#~ msgid "Mendon" -#~ msgstr "Mendon" +#~ msgid "Keene" +#~ msgstr "基恩" -#~ msgid "Melrose" -#~ msgstr "梅尔罗斯" +#~ msgid "Kenduskeag" +#~ msgstr "Kenduskeag" -#~ msgid "Medway" -#~ msgstr "梅德韦" +#~ msgid "Kennebunk" +#~ msgstr "肯尼邦克" -#~ msgid "Medford" -#~ msgstr "德福德" +#~ msgid "Kennebunkport" +#~ msgstr "肯尼邦克港" -#~ msgid "Medfield" -#~ msgstr "麦德菲尔德" +#~ msgid "Kensington" +#~ msgstr "肯辛通" -#~ msgid "Meddybemps" -#~ msgstr "Meddybemps" +#~ msgid "Kent" +#~ msgstr "肯特" -#~ msgid "Mechanic Falls" -#~ msgstr "Mechanic Falls" +#~ msgid "Killingly" +#~ msgstr "灵利" -#~ msgid "Maynard" -#~ msgstr "梅纳德" +#~ msgid "Killington" +#~ msgstr "基林顿" -#~ msgid "Maxfield" -#~ msgstr "克斯菲尔德" +#~ msgid "Killingworth" +#~ msgstr "基林沃思" -#~ msgid "Mattawamkeag" -#~ msgstr "Mattawamkeag" +#~ msgid "Kingfield" +#~ msgstr "金菲尔德" -#~ msgid "Mattapoisett" -#~ msgstr "Mattapoisett" +#~ msgid "Kingman" +#~ msgstr "金曼" -#~ msgid "Mattamiscontis" -#~ msgstr "Mattamiscontis" +#~ msgid "Kingsbury Plantation" +#~ msgstr "金斯伯里种植" -#~ msgid "Matinicus Isle" -#~ msgstr "Matinicus Isle" +#~ msgid "Kingston" +#~ msgstr "金斯敦" -#~ msgid "Mashpee" -#~ msgstr "Mashpee" +#~ msgid "Kirby" +#~ msgstr "卡比" -#~ msgid "Masardis" -#~ msgstr "Masardis" +#~ msgid "Kittery" +#~ msgstr "基特里" -#~ msgid "Marshfield" -#~ msgstr "马什菲尔德" +#~ msgid "Knox" +#~ msgstr "诺克斯" -#~ msgid "Mars Hill" -#~ msgstr "火星山" +#~ msgid "Laconia" +#~ msgstr "拉科尼亚" -#~ msgid "Marlow" -#~ msgstr "马洛" +#~ msgid "Lagrange" +#~ msgstr "拉格朗" -#~ msgid "Marlborough" -#~ msgstr "马尔堡" +#~ msgid "Lake View Plantation" +#~ msgstr "湖景种植园" -#~ msgid "Marlboro" -#~ msgstr "万宝路" +#~ msgid "Lakeville" +#~ msgstr "雷克维尔" -#~ msgid "Marion" -#~ msgstr "马里恩" +#~ msgid "Lamoine" +#~ msgstr "Lamoine" -#~ msgid "Mariaville" -#~ msgstr "Mariaville" +#~ msgid "Lancaster" +#~ msgstr "兰开斯特" -#~ msgid "Marblehead" -#~ msgstr "马布尔黑德" +#~ msgid "Landaff" +#~ msgstr "Landaff" -#~ msgid "Mapleton" -#~ msgstr "梅普尔顿" +#~ msgid "Landgrove" +#~ msgstr "Landgrove" -#~ msgid "Mansfield" -#~ msgstr "曼斯菲尔德" +#~ msgid "Lanesborough" +#~ msgstr "兰斯伯瑞" -#~ msgid "Manchester-by-the-Sea" -#~ msgstr "Manchester-by-the-Sea" +#~ msgid "Langdon" +#~ msgstr "兰登" -#~ msgid "Manchester" -#~ msgstr "曼彻斯特" +#~ msgid "Lawrence" +#~ msgstr "劳伦斯" -#~ msgid "Malden" -#~ msgstr "莫尔登" +#~ msgid "Lebanon" +#~ msgstr "黎巴嫩" -#~ msgid "Maidstone" -#~ msgstr "梅德斯通" +#~ msgid "Ledyard" +#~ msgstr "亚德" -#~ msgid "Magalloway Plantation" -#~ msgstr "Magalloway种植园" +#~ msgid "Leeds" +#~ msgstr "利兹" -#~ msgid "Madrid" -#~ msgstr "马德里" +#~ msgid "Leicester" +#~ msgstr "莱斯特" -#~ msgid "Madbury" -#~ msgstr "Madbury" +#~ msgid "Lemington" +#~ msgstr "Lemington" -#~ msgid "Madawaska" -#~ msgstr "马达瓦斯加" +#~ msgid "Lempster" +#~ msgstr "Lempster" -#~ msgid "Macwahoc Plantation" -#~ msgstr "Macwahoc种植园" +#~ msgid "Lenox" +#~ msgstr "雷诺克斯" -#~ msgid "Machiasport" -#~ msgstr "马恰斯波特" +#~ msgid "Leominster" +#~ msgstr "莱姆斯特" -#~ msgid "Machias" -#~ msgstr "马恰斯" +#~ msgid "Levant" +#~ msgstr "黎凡特" -#~ msgid "Lynnfield" -#~ msgstr "林菲尔德" +#~ msgid "Leverett" +#~ msgstr "里特" -#~ msgid "Lynn" -#~ msgstr "林恩" +#~ msgid "Lewiston" +#~ msgstr "刘易斯顿" -#~ msgid "Lyndon" -#~ msgstr "林登" +#~ msgid "Lexington" +#~ msgstr "列克星敦" -#~ msgid "Lyndeborough" -#~ msgstr "Lyndeborough" +#~ msgid "Leyden" +#~ msgstr "莱顿" -#~ msgid "Lyme" -#~ msgstr "莱姆" +#~ msgid "Liberty" +#~ msgstr "自由" -#~ msgid "Lyman" -#~ msgstr "莱曼" +#~ msgid "Limerick" +#~ msgstr "利默里克" -#~ msgid "Lunenburg" -#~ msgstr "卢嫩堡" +#~ msgid "Limestone" +#~ msgstr "石灰岩" -#~ msgid "Ludlow" -#~ msgstr "拉德洛" +#~ msgid "Limington" +#~ msgstr "Limington" -#~ msgid "Lubec" -#~ msgstr "吕巴克" +#~ msgid "Lincoln" +#~ msgstr "林肯" -#~ msgid "Lowell" -#~ msgstr "洛厄尔" +#~ msgid "Lincoln Plantation" +#~ msgstr "林肯种植园" -#~ msgid "Lovell" -#~ msgstr "洛弗尔" +#~ msgid "Lincolnville" +#~ msgstr "林肯维尔" -#~ msgid "Loudon" -#~ msgstr "劳登" +#~ msgid "Linneus" +#~ msgstr "林尼亚斯" -#~ msgid "Longmeadow" -#~ msgstr "帕斯湾" +#~ msgid "Lisbon" +#~ msgstr "里斯本" -#~ msgid "Long Island" -#~ msgstr "长岛" +#~ msgid "Litchfield" +#~ msgstr "李治菲特德" -#~ msgid "Londonderry" -#~ msgstr "伦敦德里" +#~ msgid "Little Compton" +#~ msgstr "小康普顿" -#~ msgid "Livermore Falls" -#~ msgstr "Livermore Falls" +#~ msgid "Littleton" +#~ msgstr "利特尔顿" #~ msgid "Livermore" #~ msgstr "利弗莫尔" -#~ msgid "Littleton" -#~ msgstr "利特尔顿" +#~ msgid "Livermore Falls" +#~ msgstr "Livermore Falls" -#~ msgid "Little Compton" -#~ msgstr "小康普顿" +#~ msgid "Londonderry" +#~ msgstr "伦敦德里" -#~ msgid "Litchfield" -#~ msgstr "李治菲特德" +#~ msgid "Long Island" +#~ msgstr "长岛" -#~ msgid "Lisbon" -#~ msgstr "里斯本" +#~ msgid "Longmeadow" +#~ msgstr "帕斯湾" -#~ msgid "Linneus" -#~ msgstr "林尼亚斯" +#~ msgid "Loudon" +#~ msgstr "劳登" -#~ msgid "Lincolnville" -#~ msgstr "林肯维尔" +#~ msgid "Lovell" +#~ msgstr "洛弗尔" -#~ msgid "Lincoln Plantation" -#~ msgstr "林肯种植园" +#~ msgid "Lowell" +#~ msgstr "洛厄尔" -#~ msgid "Lincoln" -#~ msgstr "林肯" +#~ msgid "Lubec" +#~ msgstr "吕巴克" -#~ msgid "Limington" -#~ msgstr "Limington" +#~ msgid "Ludlow" +#~ msgstr "拉德洛" -#~ msgid "Limestone" -#~ msgstr "石灰岩" +#~ msgid "Lunenburg" +#~ msgstr "卢嫩堡" -#~ msgid "Limerick" -#~ msgstr "利默里克" +#~ msgid "Lyman" +#~ msgstr "莱曼" -#~ msgid "Liberty" -#~ msgstr "自由" +#~ msgid "Lyme" +#~ msgstr "莱姆" -#~ msgid "Leyden" -#~ msgstr "莱顿" +#~ msgid "Lyndeborough" +#~ msgstr "Lyndeborough" -#~ msgid "Lexington" -#~ msgstr "列克星敦" +#~ msgid "Lyndon" +#~ msgstr "林登" -#~ msgid "Lewiston" -#~ msgstr "刘易斯顿" +#~ msgid "Lynn" +#~ msgstr "林恩" -#~ msgid "Leverett" -#~ msgstr "里特" +#~ msgid "Lynnfield" +#~ msgstr "林菲尔德" -#~ msgid "Levant" -#~ msgstr "黎凡特" +#~ msgid "Machias" +#~ msgstr "马恰斯" -#~ msgid "Leominster" -#~ msgstr "莱姆斯特" +#~ msgid "Machiasport" +#~ msgstr "马恰斯波特" -#~ msgid "Lenox" -#~ msgstr "雷诺克斯" +#~ msgid "Macwahoc Plantation" +#~ msgstr "Macwahoc种植园" -#~ msgid "Lempster" -#~ msgstr "Lempster" +#~ msgid "Madawaska" +#~ msgstr "马达瓦斯加" -#~ msgid "Lemington" -#~ msgstr "Lemington" +#~ msgid "Madbury" +#~ msgstr "Madbury" -#~ msgid "Leicester" -#~ msgstr "莱斯特" +#~ msgid "Madrid" +#~ msgstr "马德里" -#~ msgid "Leeds" -#~ msgstr "利兹" +#~ msgid "Magalloway Plantation" +#~ msgstr "Magalloway种植园" -#~ msgid "Ledyard" -#~ msgstr "亚德" +#~ msgid "Maidstone" +#~ msgstr "梅德斯通" -#~ msgid "Lebanon" -#~ msgstr "黎巴嫩" +#~ msgid "Malden" +#~ msgstr "莫尔登" -#~ msgid "Lawrence" -#~ msgstr "劳伦斯" +#~ msgid "Manchester" +#~ msgstr "曼彻斯特" -#~ msgid "Langdon" -#~ msgstr "兰登" +#~ msgid "Manchester-by-the-Sea" +#~ msgstr "Manchester-by-the-Sea" -#~ msgid "Lanesborough" -#~ msgstr "兰斯伯瑞" +#~ msgid "Mansfield" +#~ msgstr "曼斯菲尔德" -#~ msgid "Landgrove" -#~ msgstr "Landgrove" +#~ msgid "Mapleton" +#~ msgstr "梅普尔顿" -#~ msgid "Landaff" -#~ msgstr "Landaff" +#~ msgid "Marblehead" +#~ msgstr "马布尔黑德" -#~ msgid "Lancaster" -#~ msgstr "兰开斯特" +#~ msgid "Mariaville" +#~ msgstr "Mariaville" -#~ msgid "Lamoine" -#~ msgstr "Lamoine" +#~ msgid "Marion" +#~ msgstr "马里恩" -#~ msgid "Lakeville" -#~ msgstr "雷克维尔" +#~ msgid "Marlboro" +#~ msgstr "万宝路" -#~ msgid "Lake View Plantation" -#~ msgstr "湖景种植园" +#~ msgid "Marlborough" +#~ msgstr "马尔堡" -#~ msgid "Lagrange" -#~ msgstr "拉格朗" +#~ msgid "Marlow" +#~ msgstr "马洛" -#~ msgid "Laconia" -#~ msgstr "拉科尼亚" +#~ msgid "Mars Hill" +#~ msgstr "火星山" -#~ msgid "Knox" -#~ msgstr "诺克斯" +#~ msgid "Marshfield" +#~ msgstr "马什菲尔德" -#~ msgid "Kittery" -#~ msgstr "基特里" +#~ msgid "Masardis" +#~ msgstr "Masardis" -#~ msgid "Kirby" -#~ msgstr "卡比" +#~ msgid "Mashpee" +#~ msgstr "Mashpee" -#~ msgid "Kingston" -#~ msgstr "金斯敦" +#~ msgid "Matinicus Isle" +#~ msgstr "Matinicus Isle" -#~ msgid "Kingsbury Plantation" -#~ msgstr "金斯伯里种植" +#~ msgid "Mattamiscontis" +#~ msgstr "Mattamiscontis" -#~ msgid "Kingman" -#~ msgstr "金曼" +#~ msgid "Mattapoisett" +#~ msgstr "Mattapoisett" -#~ msgid "Kingfield" -#~ msgstr "金菲尔德" +#~ msgid "Mattawamkeag" +#~ msgstr "Mattawamkeag" -#~ msgid "Killingworth" -#~ msgstr "基林沃思" +#~ msgid "Maxfield" +#~ msgstr "克斯菲尔德" -#~ msgid "Killington" -#~ msgstr "基林顿" +#~ msgid "Maynard" +#~ msgstr "梅纳德" -#~ msgid "Killingly" -#~ msgstr "灵利" +#~ msgid "Mechanic Falls" +#~ msgstr "Mechanic Falls" -#~ msgid "Kent" -#~ msgstr "肯特" +#~ msgid "Meddybemps" +#~ msgstr "Meddybemps" -#~ msgid "Kensington" -#~ msgstr "肯辛通" +#~ msgid "Medfield" +#~ msgstr "麦德菲尔德" -#~ msgid "Kennebunkport" -#~ msgstr "肯尼邦克港" +#~ msgid "Medford" +#~ msgstr "德福德" -#~ msgid "Kennebunk" -#~ msgstr "肯尼邦克" +#~ msgid "Medway" +#~ msgstr "梅德韦" -#~ msgid "Kenduskeag" -#~ msgstr "Kenduskeag" +#~ msgid "Melrose" +#~ msgstr "梅尔罗斯" -#~ msgid "Keene" -#~ msgstr "基恩" +#~ msgid "Mendon" +#~ msgstr "Mendon" -#~ msgid "Jonesport" -#~ msgstr "琼斯波特" +#~ msgid "Mercer" +#~ msgstr "美智" -#~ msgid "Jonesboro" -#~ msgstr "琼斯波罗" +#~ msgid "Meredith" +#~ msgstr "梅雷迪思" -#~ msgid "Johnston" -#~ msgstr "约翰斯顿" +#~ msgid "Meriden" +#~ msgstr "梅里登" -#~ msgid "Jericho" -#~ msgstr "杰利科" +#~ msgid "Merrill" +#~ msgstr "美林" -#~ msgid "Jefferson" -#~ msgstr "杰弗逊" +#~ msgid "Merrimac" +#~ msgstr "梅里马克" -#~ msgid "Jay" -#~ msgstr "杰斯" +#~ msgid "Merrimack" +#~ msgstr "梅里马克" -#~ msgid "Jamestown" -#~ msgstr "詹姆斯敦" +#~ msgid "Methuen" +#~ msgstr "修恩" -#~ msgid "Jamaica" -#~ msgstr "牙买加" +#~ msgid "Mexico" +#~ msgstr "墨西哥" -#~ msgid "Jaffrey" -#~ msgstr "贾弗里" +#~ msgid "Middleborough" +#~ msgstr "Middleborough" -#~ msgid "Jackman" -#~ msgstr "杰克曼" +#~ msgid "Middlebury" +#~ msgstr "米德尔伯里" -#~ msgid "Islesboro" -#~ msgstr "Islesboro" +#~ msgid "Middlefield" +#~ msgstr "米德尔" -#~ msgid "Isle au Haut" -#~ msgstr "Isle au Haut" +#~ msgid "Middlesex" +#~ msgstr "米德尔塞克斯" -#~ msgid "Isle La Motte" -#~ msgstr "Isle La Motte" +#~ msgid "Middleton" +#~ msgstr "米德尔顿" -#~ msgid "Island Falls" -#~ msgstr "艾兰福尔斯" +#~ msgid "Middletown" +#~ msgstr "米德尔顿" -#~ msgid "Irasburg" -#~ msgstr "Irasburg" +#~ msgid "Middletown Springs" +#~ msgstr "米泉" -#~ msgid "Ira" -#~ msgstr "艾勒" +#~ msgid "Milan" +#~ msgstr "米兰" -#~ msgid "Ipswich" -#~ msgstr "伊普斯威奇" +#~ msgid "Milbridge" +#~ msgstr "Milbridge" -#~ msgid "Industry" -#~ msgstr "工业" +#~ msgid "Milford" +#~ msgstr "米尔福德" -#~ msgid "Hyde Park" -#~ msgstr "海德公园" +#~ msgid "Millbury" +#~ msgstr "米尔伯里" + +#~ msgid "Millinocket" +#~ msgstr "密利诺克" -#~ msgid "Hurricane Isle" -#~ msgstr "龙卷风之岛" +#~ msgid "Millis" +#~ msgstr "米利斯" -#~ msgid "Huntington" -#~ msgstr "亨廷顿" +#~ msgid "Millville" +#~ msgstr "米尔维尔" -#~ msgid "Hull" -#~ msgstr "赫尔" +#~ msgid "Milo" +#~ msgstr "米路" -#~ msgid "Hudson" -#~ msgstr "哈得孙" +#~ msgid "Milton" +#~ msgstr "米尔顿" -#~ msgid "Hubbardton" -#~ msgstr "Hubbardton" +#~ msgid "Minot" +#~ msgstr "迈诺特" -#~ msgid "Hubbardston" -#~ msgstr "哈伯兹" +#~ msgid "Monhegan" +#~ msgstr "Monhegan" -#~ msgid "Howland" -#~ msgstr "兰德" +#~ msgid "Monkton" +#~ msgstr "芒克顿" -#~ msgid "Houlton" -#~ msgstr "霍尔顿" +#~ msgid "Monmouth" +#~ msgstr "蒙默思郡" -#~ msgid "Hopkinton" -#~ msgstr "霍普金顿" +#~ msgid "Monroe" +#~ msgstr "门罗" -#~ msgid "Hopedale" -#~ msgstr "霍普代尔" +#~ msgid "Monson" +#~ msgstr "蒙森" -#~ msgid "Hope" -#~ msgstr "希望" +#~ msgid "Mont Vernon" +#~ msgstr "蒙特弗农" -#~ msgid "Hooksett" -#~ msgstr "Hooksett" +#~ msgid "Montague" +#~ msgstr "蒙塔古" -#~ msgid "Holyoke" -#~ msgstr "霍利约克" +#~ msgid "Monterey" +#~ msgstr "蒙特利" -#~ msgid "Holliston" -#~ msgstr "霍利斯顿" +#~ msgid "Montgomery" +#~ msgstr "蒙哥马利" -#~ msgid "Hollis" -#~ msgstr "霍利斯" +#~ msgid "Monticello" +#~ msgstr "蒙蒂塞洛" -#~ msgid "Holland" -#~ msgstr "霍兰德" +#~ msgid "Montpelier" +#~ msgstr "蒙彼利埃" -#~ msgid "Holderness" -#~ msgstr "霍尔德内斯" +#~ msgid "Montville" +#~ msgstr "蒙特维尔" -#~ msgid "Holden" -#~ msgstr "霍顿" +#~ msgid "Moose River" +#~ msgstr "麋鹿河" -#~ msgid "Holbrook" -#~ msgstr "霍尔布鲁克" +#~ msgid "Moretown" +#~ msgstr "Moretown" -#~ msgid "Hodgdon" -#~ msgstr "霍奇登" +#~ msgid "Moro Plantation" +#~ msgstr "摩洛种植园" -#~ msgid "Hiram" -#~ msgstr "海勒姆" +#~ msgid "Morrill" +#~ msgstr "莫勒尔" -#~ msgid "Hinsdale" -#~ msgstr "欣斯代尔" +#~ msgid "Morristown" +#~ msgstr "莫里斯敦" -#~ msgid "Hingham" -#~ msgstr "欣厄姆" +#~ msgid "Moscow" +#~ msgstr "莫斯科" -#~ msgid "Hinesburg" -#~ msgstr "斯堡" +#~ msgid "Moultonborough" +#~ msgstr "莫尔顿伯勒" -#~ msgid "Hillsborough" -#~ msgstr "希尔斯伯勒" +#~ msgid "Mount Chase" +#~ msgstr "蒙特柴思" -#~ msgid "Highland Plantation" -#~ msgstr "高地种植园" +#~ msgid "Mount Desert" +#~ msgstr "荒山岛" -#~ msgid "Highgate" -#~ msgstr "高门" +#~ msgid "Mount Holly" +#~ msgstr "芒特霍利" -#~ msgid "Hersey" -#~ msgstr "赫西" +#~ msgid "Mount Tabor" +#~ msgstr "他泊山" -#~ msgid "Hermon" -#~ msgstr "赫蒙" +#~ msgid "Mount Vernon" +#~ msgstr "芒特弗农(美国地名)" -#~ msgid "Henniker" -#~ msgstr "汉尼克" +#~ msgid "Mount Washington" +#~ msgstr "华盛顿山" -#~ msgid "Hebron" -#~ msgstr "希伯伦" +#~ msgid "Nahant" +#~ msgstr "直到娜罕" -#~ msgid "Heath" -#~ msgstr "石南" +#~ msgid "Nantucket" +#~ msgstr "楠塔基特岛" -#~ msgid "Haynesville" -#~ msgstr "斯维尔" +#~ msgid "Naples" +#~ msgstr "那不勒斯" -#~ msgid "Hawley" -#~ msgstr "斯姆特" +#~ msgid "Narragansett" +#~ msgstr "纳拉干西特" -#~ msgid "Haverhill" -#~ msgstr "哈福希尔" +#~ msgid "Nashua" +#~ msgstr "纳舒厄" -#~ msgid "Hatfield" -#~ msgstr "哈特菲尔德" +#~ msgid "Nashville Plantation" +#~ msgstr "纳什维尔种植园" -#~ msgid "Harwinton" -#~ msgstr "哈文顿" +#~ msgid "Natick" +#~ msgstr "纳蒂克" -#~ msgid "Harwich" -#~ msgstr "哈里奇" +#~ msgid "Naugatuck" +#~ msgstr "Naugatuck" -#~ msgid "Harvard" -#~ msgstr "哈佛" +#~ msgid "Needham" +#~ msgstr "尼达姆" -#~ msgid "Hartland" -#~ msgstr "哈特兰" +#~ msgid "New Ashford" +#~ msgstr "新阿什福德" -#~ msgid "Hartford" -#~ msgstr "哈特福德" +#~ msgid "New Bedford" +#~ msgstr "新贝德福德" -#~ msgid "Hart's Location" -#~ msgstr "哈特镇" +#~ msgid "New Boston" +#~ msgstr "新波士顿" -#~ msgid "Harrisville" -#~ msgstr "哈里斯维尔" +#~ msgid "New Braintree" +#~ msgstr "新布伦特里" -#~ msgid "Harrison" -#~ msgstr "哈里森" +#~ msgid "New Britain" +#~ msgstr "新不列颠" -#~ msgid "Harrington" -#~ msgstr "哈林顿" +#~ msgid "New Canaan" +#~ msgstr "新迦南" -#~ msgid "Harpswell" -#~ msgstr "Harpswell" +#~ msgid "New Canada" +#~ msgstr "新加拿大" -#~ msgid "Harmony" -#~ msgstr "Harmony" +#~ msgid "New Castle" +#~ msgstr "纽卡斯尔" -#~ msgid "Hardwick" -#~ msgstr "哈德威克" +#~ msgid "New Durham" +#~ msgstr "New Durham" -#~ msgid "Hanson" -#~ msgstr "汉森" +#~ msgid "New Fairfield" +#~ msgstr "新费尔菲尔德" -#~ msgid "Hanover" -#~ msgstr "汉诺威" +#~ msgid "New Gloucester" +#~ msgstr "新格洛斯特" -#~ msgid "Hancock" -#~ msgstr "汉考克" +#~ msgid "New Hampton" +#~ msgstr "新汉普顿" -#~ msgid "Hampton Falls" -#~ msgstr "汉普顿瀑布" +#~ msgid "New Hartford" +#~ msgstr "新哈特福德" -#~ msgid "Hampton" -#~ msgstr " 汉普顿" +#~ msgid "New Haven" +#~ msgstr "纽黑文市" -#~ msgid "Hampstead" -#~ msgstr "汉普斯特德" +#~ msgid "New Ipswich" +#~ msgstr "新伊普斯维奇" -#~ msgid "Hampden" -#~ msgstr "汉普登" +#~ msgid "New Limerick" +#~ msgstr "利默里克新" -#~ msgid "Hammond" -#~ msgstr "哈蒙德" +#~ msgid "New London" +#~ msgstr "新伦敦" -#~ msgid "Hamlin" -#~ msgstr "哈姆林" +#~ msgid "New Marlborough" +#~ msgstr "新马尔伯勒" -#~ msgid "Hamilton" -#~ msgstr "汉密尔顿" +#~ msgid "New Milford" +#~ msgstr "新米尔福" -#~ msgid "Hamden" -#~ msgstr "哈姆登" +#~ msgid "New Portland" +#~ msgstr "新波特兰" -#~ msgid "Hallowell" -#~ msgstr "哈洛韦尔" +#~ msgid "New Salem" +#~ msgstr "新塞勒姆" -#~ msgid "Halifax" -#~ msgstr "哈利法克斯" +#~ msgid "New Sharon" +#~ msgstr "新沙伦" -#~ msgid "Hadley" -#~ msgstr "哈德利" +#~ msgid "New Shoreham" +#~ msgstr "新肖勒姆" -#~ msgid "Haddam" -#~ msgstr "Haddam" +#~ msgid "New Sweden" +#~ msgstr "新瑞典" -#~ msgid "Guilford" -#~ msgstr "吉尔福特" +#~ msgid "New Vineyard" +#~ msgstr "新葡萄园" -#~ msgid "Guildhall" -#~ msgstr "伦敦" +#~ msgid "Newark" +#~ msgstr "纽瓦克" -#~ msgid "Groveland" -#~ msgstr "格罗夫兰" +#~ msgid "Newburgh" +#~ msgstr "纽堡" -#~ msgid "Groton" -#~ msgstr "格罗顿" +#~ msgid "Newbury" +#~ msgstr "纽伯里" -#~ msgid "Griswold" -#~ msgstr "格里斯瓦得" +#~ msgid "Newburyport" +#~ msgstr "纽柏立波特" -#~ msgid "Greenwood" -#~ msgstr "格林伍德" +#~ msgid "Newcastle" +#~ msgstr "纽卡斯尔" -#~ msgid "Greenwich" -#~ msgstr "格林威治" +#~ msgid "Newfane" +#~ msgstr "Newfane" -#~ msgid "Greenville" -#~ msgstr "格林维尔" +#~ msgid "Newfield" +#~ msgstr "云水遥" -#~ msgid "Greensboro" -#~ msgstr "格林斯博罗" +#~ msgid "Newfields" +#~ msgstr "Newfields" -#~ msgid "Greenland" -#~ msgstr "格陵兰" +#~ msgid "Newington" +#~ msgstr "纽因顿" -#~ msgid "Greenfield" -#~ msgstr "格林菲尔德" +#~ msgid "Newmarket" +#~ msgstr "纽马克特" -#~ msgid "Greene" -#~ msgstr "格林" +#~ msgid "Newport" +#~ msgstr "纽波特" -#~ msgid "Greenbush" -#~ msgstr "格林布什" +#~ msgid "Newry" +#~ msgstr "纽里" -#~ msgid "Great Pond" -#~ msgstr "大池塘" +#~ msgid "Newton" +#~ msgstr "纽顿" -#~ msgid "Great Barrington" -#~ msgstr "大巴灵顿" +#~ msgid "Newtown" +#~ msgstr "纽镇" -#~ msgid "Granville" -#~ msgstr "格兰维尔" +#~ msgid "Nobleboro" +#~ msgstr "Nobleboro" -#~ msgid "Grantham" -#~ msgstr "格兰瑟姆" +#~ msgid "Norfolk" +#~ msgstr "诺福克" -#~ msgid "Grand Lake Stream" -#~ msgstr "大湖流" +#~ msgid "Norridgewock" +#~ msgstr "诺里奇沃克" -#~ msgid "Grand Isle" -#~ msgstr "格兰德岛" +#~ msgid "North Adams" +#~ msgstr "北亚当斯" -#~ msgid "Granby" -#~ msgstr "格兰比" +#~ msgid "North Andover" +#~ msgstr "北安多福" -#~ msgid "Grafton" -#~ msgstr "格拉夫顿" +#~ msgid "North Attleborough" +#~ msgstr "北阿托巴罗夫" -#~ msgid "Gouldsboro" -#~ msgstr "古尔兹伯勒" +#~ msgid "North Berwick" +#~ msgstr "北柏威克" -#~ msgid "Gosnold" -#~ msgstr "Gosnold" +#~ msgid "North Branford" +#~ msgstr "北布兰福德" -#~ msgid "Goshen" -#~ msgstr "歌珊地" +#~ msgid "North Brookfield" +#~ msgstr "北溪田" -#~ msgid "Gorham" -#~ msgstr "戈勒姆" +#~ msgid "North Canaan" +#~ msgstr "北迦南" -#~ msgid "Goffstown" -#~ msgstr "哥夫斯" +#~ msgid "North Hampton" +#~ msgstr "北汉普顿" -#~ msgid "Glover" -#~ msgstr "格洛弗" +#~ msgid "North Haven" +#~ msgstr "北海文" -#~ msgid "Gloucester" -#~ msgstr "格洛斯特" +#~ msgid "North Hero" +#~ msgstr "北赫罗" -#~ msgid "Glocester" -#~ msgstr "Glocester" +#~ msgid "North Kingstown" +#~ msgstr "北金斯敦" -#~ msgid "Glenwood Plantation" -#~ msgstr "格伦伍德种植园" +#~ msgid "North Providence" +#~ msgstr "北普罗维登斯" -#~ msgid "Glenburn" -#~ msgstr "Glenburn" +#~ msgid "North Reading" +#~ msgstr "北瑞汀" -#~ msgid "Glastonbury" -#~ msgstr "格拉斯顿堡" +#~ msgid "North Smithfield" +#~ msgstr "北史密斯菲尔德" -#~ msgid "Glastenbury" -#~ msgstr "Glastenbury" +#~ msgid "North Stonington" +#~ msgstr "北斯通宁顿" -#~ msgid "Gilsum" -#~ msgstr "Gilsum" +#~ msgid "North Yarmouth" +#~ msgstr "北雅茅斯" -#~ msgid "Gilmanton" -#~ msgstr "吉尔曼顿" +#~ msgid "Northampton" +#~ msgstr "北安普敦" -#~ msgid "Gill" -#~ msgstr "吉尔" +#~ msgid "Northborough" +#~ msgstr "诺斯伯勒" -#~ msgid "Gilford" -#~ msgstr "吉尔福特" +#~ msgid "Northbridge" +#~ msgstr "北桥" -#~ msgid "Gilead" -#~ msgstr "吉利德" +#~ msgid "Northfield" +#~ msgstr "诺思菲尔德" -#~ msgid "Georgia" -#~ msgstr "乔治亚州" +#~ msgid "Northport" +#~ msgstr "北港" -#~ msgid "Georgetown" -#~ msgstr "乔治敦" +#~ msgid "Northumberland" +#~ msgstr "诺森伯兰郡" -#~ msgid "Garland" -#~ msgstr "加兰" +#~ msgid "Northwood" +#~ msgstr "诺斯伍德" -#~ msgid "Garfield Plantation" -#~ msgstr "加菲猫种植园" +#~ msgid "Norton" +#~ msgstr "诺顿" -#~ msgid "Gardner" -#~ msgstr "加德纳" +#~ msgid "Norwalk" +#~ msgstr "诺沃克" -#~ msgid "Gardiner" -#~ msgstr "加德纳" +#~ msgid "Norway" +#~ msgstr "挪威" -#~ msgid "Fryeburg" -#~ msgstr "Fryeburg" +#~ msgid "Norwell" +#~ msgstr "Norwell" -#~ msgid "Frye Island" -#~ msgstr "弗莱岛" +#~ msgid "Norwich" +#~ msgstr "诺威奇" -#~ msgid "Friendship" -#~ msgstr "友谊" +#~ msgid "Norwood" +#~ msgstr "诺伍德" -#~ msgid "Frenchville" -#~ msgstr "Frenchville" +#~ msgid "Nottingham" +#~ msgstr "诺丁汉" -#~ msgid "Frenchboro" -#~ msgstr "Frenchboro" +#~ msgid "Oak Bluffs" +#~ msgstr "克布拉夫斯" -#~ msgid "Fremont" -#~ msgstr "弗里蒙特" +#~ msgid "Oakfield" +#~ msgstr "奥克菲尔德" -#~ msgid "Freetown" -#~ msgstr "弗里敦" +#~ msgid "Oakham" +#~ msgstr "奥克姆" -#~ msgid "Freeport" -#~ msgstr "弗里波特" +#~ msgid "Oakland" +#~ msgstr "奥克兰" -#~ msgid "Freeman" -#~ msgstr "弗里曼" +#~ msgid "Ogunquit" +#~ msgstr "Ogunquit" -#~ msgid "Freedom" -#~ msgstr "自由" +#~ msgid "Old Lyme" +#~ msgstr "老莱姆" -#~ msgid "Franklin" -#~ msgstr "富兰克林" +#~ msgid "Old Orchard Beach" +#~ msgstr "旧奥查德滩" -#~ msgid "Frankfort" -#~ msgstr "法兰克福" +#~ msgid "Old Saybrook" +#~ msgstr "塞布鲁克" -#~ msgid "Franconia" -#~ msgstr "法兰克尼亚" +#~ msgid "Old Town" +#~ msgstr "旧城" -#~ msgid "Francestown" -#~ msgstr "Francestown" +#~ msgid "Orange" +#~ msgstr "橙" -#~ msgid "Framingham" -#~ msgstr "弗雷明汉" +#~ msgid "Orford" +#~ msgstr "奥弗德" -#~ msgid "Foxborough" -#~ msgstr "福克斯巴勒" +#~ msgid "Orient" +#~ msgstr "东方" -#~ msgid "Fort Kent" -#~ msgstr "肯特堡" +#~ msgid "Orland" +#~ msgstr "奥兰" -#~ msgid "Fort Fairfield" -#~ msgstr "费尔菲堡" +#~ msgid "Orleans" +#~ msgstr "奥尔良" -#~ msgid "Forest City" -#~ msgstr "森林城" +#~ msgid "Orneville" +#~ msgstr "Orneville" -#~ msgid "Fomer towns:" -#~ msgstr "城镇乡村叙事:" +#~ msgid "Orono" +#~ msgstr "" -#~ msgid "Florida" -#~ msgstr "佛罗里达" +#~ msgid "Orrington" +#~ msgstr "奥罗诺" -#~ msgid "Fletcher" -#~ msgstr "弗莱彻" +#~ msgid "Orwell" +#~ msgstr "奥威尔" -#~ msgid "Fitzwilliam" -#~ msgstr "菲茨威廉" +#~ msgid "Osborn" +#~ msgstr "奥斯本" -#~ msgid "Fitchburg" -#~ msgstr "菲奇堡" +#~ msgid "Ossipee" +#~ msgstr "奥西皮" -#~ msgid "Ferrisburg" -#~ msgstr "Ferrisburg" +#~ msgid "Otis" +#~ msgstr "奥狄斯" -#~ msgid "Fayston" -#~ msgstr "Fayston" +#~ msgid "Otisfield" +#~ msgstr "欧提斯斐" -#~ msgid "Fayette" -#~ msgstr "菲也特" +#~ msgid "Owls Head" +#~ msgstr "Owls Head" -#~ msgid "Farmington" -#~ msgstr "法明顿" +#~ msgid "Oxbow" +#~ msgstr "爱宝" -#~ msgid "Farmingdale" -#~ msgstr "法明戴尔" +#~ msgid "Oxford" +#~ msgstr "牛津" -#~ msgid "Falmouth" -#~ msgstr "法尔茅斯" +#~ msgid "Palermo" +#~ msgstr "巴勒莫" -#~ msgid "Fall River" -#~ msgstr "福尔里弗" +#~ msgid "Palmer" +#~ msgstr "帕默" -#~ msgid "Fairlee" -#~ msgstr "Fairlee" +#~ msgid "Palmyra" +#~ msgstr "帕米拉" -#~ msgid "Fairhaven" -#~ msgstr "费尔黑文" +#~ msgid "Panton" +#~ msgstr "潘顿" -#~ msgid "Fairfield" -#~ msgstr "费尔菲尔德" +#~ msgid "Paris" +#~ msgstr "巴黎" -#~ msgid "Fairfax" -#~ msgstr "费尔法克斯" +#~ msgid "Parkman" +#~ msgstr "帕克曼" -#~ msgid "Fair Haven" -#~ msgstr "避风港" +#~ msgid "Parsonsfield" +#~ msgstr "Parsonsfield" -#~ msgid "Exeter" -#~ msgstr "埃克塞特" +#~ msgid "Passadumkeag" +#~ msgstr "Passadumkeag" -#~ msgid "Everett" -#~ msgstr "埃弗雷特" +#~ msgid "Patten" +#~ msgstr "Patten" -#~ msgid "Eustis" -#~ msgstr "尤斯提斯" +#~ msgid "Pawlet" +#~ msgstr "利特" -#~ msgid "Etna" -#~ msgstr "埃特纳" +#~ msgid "Pawtucket" +#~ msgstr "波塔基特" -#~ msgid "Essex" -#~ msgstr "艾塞克斯" +#~ msgid "Paxton" +#~ msgstr "帕克斯顿" -#~ msgid "Erving" -#~ msgstr "欧文" +#~ msgid "Peabody" +#~ msgstr "皮博迪" -#~ msgid "Errol" -#~ msgstr "埃罗尔" +#~ msgid "Peacham" +#~ msgstr "皮查姆" -#~ msgid "Epsom" -#~ msgstr "埃普索姆" +#~ msgid "Pelham" +#~ msgstr "佩勒姆" -#~ msgid "Epping" -#~ msgstr "埃平" +#~ msgid "Pembroke" +#~ msgstr "彭布罗克" -#~ msgid "Enosburg" -#~ msgstr "Enosburg" +#~ msgid "Penobscot" +#~ msgstr "佩诺斯卡" -#~ msgid "Enfield" -#~ msgstr "恩菲尔德" +#~ msgid "Pepperell" +#~ msgstr "佩珀勒尔" -#~ msgid "Embden" -#~ msgstr "埃姆登" +#~ msgid "Perham" +#~ msgstr "Perham" -#~ msgid "Elmore" -#~ msgstr "埃尔莫尔" +#~ msgid "Perkins" +#~ msgstr "珀金斯" -#~ msgid "Ellsworth" -#~ msgstr "埃尔斯沃斯" +#~ msgid "Peru" +#~ msgstr "秘鲁" -#~ msgid "Ellington" -#~ msgstr "埃林顿" +#~ msgid "Peterborough" +#~ msgstr "彼得伯勒" -#~ msgid "Eliot" -#~ msgstr "艾略特" +#~ msgid "Petersham" +#~ msgstr "彼得伯勒" -#~ msgid "Egremont" -#~ msgstr "艾格蒙特" +#~ msgid "Phillipston" +#~ msgstr "彼得伯勒" -#~ msgid "Effingham" -#~ msgstr "埃芬加姆" +#~ msgid "Phippsburg" +#~ msgstr "皮尔蒙特" -#~ msgid "Edmunds" -#~ msgstr "埃德蒙" +#~ msgid "Piermont" +#~ msgstr "皮尔蒙特" -#~ msgid "Edinburg" -#~ msgstr "爱丁堡" +#~ msgid "Pittsburg" +#~ msgstr "匹兹堡" -#~ msgid "Edgecomb" -#~ msgstr "Edgecomb" +#~ msgid "Pittsfield" +#~ msgstr "皮茨菲尔德" -#~ msgid "Edgartown" -#~ msgstr "埃德加敦" +#~ msgid "Pittsford" +#~ msgstr "匹兹福德" -#~ msgid "Eden" -#~ msgstr "伊甸" +#~ msgid "Pittston" +#~ msgstr "皮茨顿" -#~ msgid "Eddington" -#~ msgstr "爱丁顿" +#~ msgid "Plainfield" +#~ msgstr "平原镇" -#~ msgid "Eaton" -#~ msgstr "伊顿" +#~ msgid "Plainville" +#~ msgstr "普莱恩维尔" -#~ msgid "Eastport" -#~ msgstr "缅因州东港" +#~ msgid "Plaistow" +#~ msgstr "柏斯多" -#~ msgid "Easton" -#~ msgstr "伊斯顿" +#~ msgid "Pleasant Ridge Plantation" +#~ msgstr "普利茅斯" -#~ msgid "Easthampton" -#~ msgstr "伊斯特汉普顿" +#~ msgid "Plymouth" +#~ msgstr "普利茅斯" -#~ msgid "Eastham" -#~ msgstr "Eastham" +#~ msgid "Plympton" +#~ msgstr "普林普顿" -#~ msgid "Eastford" -#~ msgstr "伊斯特福德" +#~ msgid "Poland" +#~ msgstr "波兰" -#~ msgid "Eastbrook" -#~ msgstr "Eastbrook" +#~ msgid "Pomfret" +#~ msgstr "波特治" -#~ msgid "East Windsor" -#~ msgstr "东温莎" +#~ msgid "Portage Lake" +#~ msgstr "波特治湖" -#~ msgid "East Providence" -#~ msgstr "东普罗维登斯" +#~ msgid "Porter" +#~ msgstr "波特" -#~ msgid "East Montpelier" -#~ msgstr "东蒙彼利埃" +#~ msgid "Portland" +#~ msgstr "波特兰" -#~ msgid "East Millinocket" -#~ msgstr "东密里诺基特" +#~ msgid "Portsmouth" +#~ msgstr "朴茨茅斯" -#~ msgid "East Machias" -#~ msgstr "East Machias" +#~ msgid "Poultney" +#~ msgstr "尔特尼" -#~ msgid "East Lyme" -#~ msgstr "东兰姆" +#~ msgid "Pownal" +#~ msgstr "培伦提" -#~ msgid "East Longmeadow" -#~ msgstr "东隆美多" +#~ msgid "Prentiss" +#~ msgstr "培伦提斯" -#~ msgid "East Kingston" -#~ msgstr "东金士顿" +#~ msgid "Prescott" +#~ msgstr "普雷斯科特" -#~ msgid "East Haven" -#~ msgstr "东港" +#~ msgid "Presque Isle" +#~ msgstr "普雷斯克岛" -#~ msgid "East Hartford" -#~ msgstr "东哈特福德" +#~ msgid "Preston" +#~ msgstr "普勒斯顿" -#~ msgid "East Hampton" -#~ msgstr "东汉普顿" +#~ msgid "Princeton" +#~ msgstr "普林斯顿" -#~ msgid "East Haddam" -#~ msgstr "东海丹" +#~ msgid "Proctor" +#~ msgstr "普林斯" -#~ msgid "East Greenwich" -#~ msgstr "东格林威治" +#~ msgid "Prospect" +#~ msgstr "普罗维" -#~ msgid "East Granby" -#~ msgstr "东格兰比" +#~ msgid "Providence" +#~ msgstr "普罗维登斯" -#~ msgid "East Brookfield" -#~ msgstr "East Brookfield" +#~ msgid "Provincetown" +#~ msgstr "普罗温斯敦" -#~ msgid "East Bridgewater" -#~ msgstr "东布里治沃特" +#~ msgid "Putnam" +#~ msgstr "普特南" -#~ msgid "Eagle Lake" -#~ msgstr "鹰湖" +#~ msgid "Putney" +#~ msgstr "帕特尼" -#~ msgid "Dyer Brook" -#~ msgstr "Dyer Brook" +#~ msgid "Quincy" +#~ msgstr "昆西" -#~ msgid "Duxbury" -#~ msgstr "达克斯伯里" +#~ msgid "Randolph" +#~ msgstr "伦道夫" -#~ msgid "Durham" -#~ msgstr "达拉谟" +#~ msgid "Rangeley" +#~ msgstr "朗吉利湖" -#~ msgid "Dunstable" -#~ msgstr "邓斯泰布尔" +#~ msgid "Rangeley Plantation" +#~ msgstr "朗吉利种植园" -#~ msgid "Dunbarton" -#~ msgstr "丹巴顿" +#~ msgid "Raymond" +#~ msgstr "雷蒙德" -#~ msgid "Dummerston" -#~ msgstr "Dummerston" +#~ msgid "Raynham" +#~ msgstr "雷纳姆" -#~ msgid "Dummer" -#~ msgstr "达默" +#~ msgid "Readfield" +#~ msgstr "Readfield" -#~ msgid "Dudley" -#~ msgstr "达德利" +#~ msgid "Reading" +#~ msgstr "雷丁" -#~ msgid "Dublin" -#~ msgstr "都柏林" +#~ msgid "Readsboro" +#~ msgstr "里德" -#~ msgid "Drew Plantation" -#~ msgstr "Drew Plantation" +#~ msgid "Reed Plantation" +#~ msgstr "里德种植园" -#~ msgid "Dresden" -#~ msgstr "德累斯顿" +#~ msgid "Rehoboth" +#~ msgstr "雷霍博特" -#~ msgid "Dracut" -#~ msgstr "德拉刻特" +#~ msgid "Revere" +#~ msgstr "里维尔" -#~ msgid "Dover-Foxcroft" -#~ msgstr "多佛法斯克罗" +#~ msgid "Richford" +#~ msgstr "奇福德" -#~ msgid "Dover" -#~ msgstr "多佛" +#~ msgid "Richmond" +#~ msgstr "里士满" -#~ msgid "Douglas" -#~ msgstr "道格拉斯" +#~ msgid "Ridgefield" +#~ msgstr "瑞吉菲尔德" -#~ msgid "Dorset" -#~ msgstr "多塞特" +#~ msgid "Rindge" +#~ msgstr "普利" -#~ msgid "Dorchester" -#~ msgstr "多尔切斯特" +#~ msgid "Ripley" +#~ msgstr "雷普利" -#~ msgid "Dixmont" -#~ msgstr "迪士蒙" +#~ msgid "Ripton" +#~ msgstr "立顿" -#~ msgid "Dixfield" -#~ msgstr "迪克斯菲" +#~ msgid "Robbinston" +#~ msgstr "罗契斯" -#~ msgid "Dighton" -#~ msgstr "Dighton" +#~ msgid "Rochester" +#~ msgstr "罗契斯特" -#~ msgid "Dexter" -#~ msgstr "Dexter" +#~ msgid "Rockingham" +#~ msgstr "罗金厄姆" -#~ msgid "Detroit" -#~ msgstr "底特律" +#~ msgid "Rockland" +#~ msgstr "罗克兰" -#~ msgid "Derry" -#~ msgstr "德里" +#~ msgid "Rockport" +#~ msgstr "罗克波特" -#~ msgid "Derby" -#~ msgstr "德比" +#~ msgid "Rocky Hill" +#~ msgstr "洛基山" -#~ msgid "Dennysville" -#~ msgstr "Dennysville" +#~ msgid "Rollinsford" +#~ msgstr "罗克" -#~ msgid "Dennistown" -#~ msgstr "丹尼斯" +#~ msgid "Rome" +#~ msgstr "罗马" -#~ msgid "Dennis" -#~ msgstr "丹尼斯" +#~ msgid "Roque Bluffs" +#~ msgstr "罗克悬崖" -#~ msgid "Denmark" -#~ msgstr "丹麦" +#~ msgid "Rowe" +#~ msgstr "罗威廉" -#~ msgid "Deering" -#~ msgstr "迪灵" +#~ msgid "Rowley" +#~ msgstr "罗利" -#~ msgid "Deerfield" -#~ msgstr "迪尔菲尔德" +#~ msgid "Roxbury" +#~ msgstr "克斯伯力" -#~ msgid "Deer Isle" -#~ msgstr "鹿岛" +#~ msgid "Royalston" +#~ msgstr "豪峰" -#~ msgid "Deep River" -#~ msgstr "神秘之河" +#~ msgid "Royalton" +#~ msgstr "拉姆福德" -#~ msgid "Dedham" -#~ msgstr "戴德姆" +#~ msgid "Rumford" +#~ msgstr "拉姆福德" -#~ msgid "Deblois" -#~ msgstr "Deblois" +#~ msgid "Rumney" +#~ msgstr "鲁珀特" -#~ msgid "Dayton" -#~ msgstr "代顿" +#~ msgid "Rupert" +#~ msgstr "鲁珀特" -#~ msgid "Dartmouth" -#~ msgstr "达特茅斯" +#~ msgid "Rutland" +#~ msgstr "拉特兰郡" -#~ msgid "Darien" -#~ msgstr "达连湾" +#~ msgid "Rye" +#~ msgstr "麦威" -#~ msgid "Danville" -#~ msgstr "丹维尔" +#~ msgid "Ryegate" +#~ msgstr "拉伊盖特" -#~ msgid "Danvers" -#~ msgstr "丹弗斯" +#~ msgid "Sabattus" +#~ msgstr "Sabattus" -#~ msgid "Danforth" -#~ msgstr "丹佛斯" +#~ msgid "Saco" +#~ msgstr "萨柯" -#~ msgid "Danby" -#~ msgstr "丹比" +#~ msgid "Saint John Plantation" +#~ msgstr "圣约翰种植园" -#~ msgid "Danbury" -#~ msgstr "丹伯里" +#~ msgid "Salem" +#~ msgstr "塞伦" -#~ msgid "Damariscotta" -#~ msgstr "Damariscotta" +#~ msgid "Salisbury" +#~ msgstr "索尔兹伯里市" -#~ msgid "Dalton" -#~ msgstr "道尔顿" +#~ msgid "Sanbornton" +#~ msgstr "Sanbornton" -#~ msgid "Dallas Plantation" -#~ msgstr "达拉斯种植园" +#~ msgid "Sandgate" +#~ msgstr "桑盖特" -#~ msgid "Cyr Plantation" -#~ msgstr "Cyr Plantation" +#~ msgid "Sandisfield" +#~ msgstr "Sandisfield" -#~ msgid "Cutler" -#~ msgstr "卡特勒" +#~ msgid "Sandown" +#~ msgstr "桑当" -#~ msgid "Cushing" -#~ msgstr "库欣" +#~ msgid "Sandwich" +#~ msgstr "三文治" -#~ msgid "Cummington" -#~ msgstr "Cummington" +#~ msgid "Sandy River Plantation" +#~ msgstr "桑迪河种植园" -#~ msgid "Cumberland" -#~ msgstr "坎伯兰郡" +#~ msgid "Sanford" +#~ msgstr "桑福德" -#~ msgid "Crystal" -#~ msgstr "水晶" +#~ msgid "Sangerville" +#~ msgstr "Sangerville" -#~ msgid "Croydon" -#~ msgstr "克里登" +#~ msgid "Saugus" +#~ msgstr "索格斯" -#~ msgid "Cromwell" -#~ msgstr "克伦威尔" +#~ msgid "Savoy" +#~ msgstr "萨伏依" -#~ msgid "Crawford" -#~ msgstr "克劳福德" +#~ msgid "Scarborough" +#~ msgstr "士嘉堡" -#~ msgid "Cranston" -#~ msgstr "克兰斯顿" +#~ msgid "Scituate" +#~ msgstr "斯基尤特" -#~ msgid "Cranberry Isles" -#~ msgstr "蔓越莓群岛" +#~ msgid "Scotland" +#~ msgstr "苏格兰" -#~ msgid "Craftsbury" -#~ msgstr "Craftsbury" +#~ msgid "Seabrook" +#~ msgstr "溪镇" -#~ msgid "Coventry" -#~ msgstr "考文垂" +#~ msgid "Searsburg" +#~ msgstr "西尔斯村" -#~ msgid "Cornwall" -#~ msgstr "康沃尔" +#~ msgid "Searsmont" +#~ msgstr "西尔斯蒙特" -#~ msgid "Cornville" -#~ msgstr "Cornville" +#~ msgid "Searsport" +#~ msgstr "锡斯波特" -#~ msgid "Cornish" -#~ msgstr "考尼什" +#~ msgid "Sebago" +#~ msgstr "仕品高" -#~ msgid "Corinth" -#~ msgstr "科林斯" +#~ msgid "Sebec" +#~ msgstr "赛贝克" -#~ msgid "Corinna" -#~ msgstr "科琳娜" +#~ msgid "Seboeis Plantation" +#~ msgstr "塞布伊斯种植园" -#~ msgid "Coplin Plantation" -#~ msgstr "Coplin Plantation" +#~ msgid "Sedgwick" +#~ msgstr "塞奇威克" -#~ msgid "Conway" -#~ msgstr "康韦" +#~ msgid "Seekonk" +#~ msgstr "锡康克" -#~ msgid "Concord" -#~ msgstr "康科德" +#~ msgid "Seymour" +#~ msgstr "西摩" -#~ msgid "Columbia Falls" -#~ msgstr "哥伦比亚佛斯" +#~ msgid "Shaftsbury" +#~ msgstr "沙夫茨伯里" -#~ msgid "Columbia" -#~ msgstr "哥伦比亚" +#~ msgid "Shapleigh" +#~ msgstr "沙普利" -#~ msgid "Colrain" -#~ msgstr "Colrain" +#~ msgid "Sharon" +#~ msgstr "沙仑" -#~ msgid "Colebrook" -#~ msgstr "柯尔布鲁克" +#~ msgid "Sheffield" +#~ msgstr "谢菲尔德" -#~ msgid "Colchester" -#~ msgstr "科尔切斯特" +#~ msgid "Shelburne" +#~ msgstr "谢尔本" -#~ msgid "Cohasset" -#~ msgstr "科哈塞特" +#~ msgid "Sheldon" +#~ msgstr "谢尔顿" -#~ msgid "Codyville Plantation" -#~ msgstr "Codyville种植园" +#~ msgid "Shelton" +#~ msgstr "谢尔顿(美国康涅狄格州西南部城市)" -#~ msgid "Clinton" -#~ msgstr "克林顿" +#~ msgid "Sherborn" +#~ msgstr "舍伯恩" -#~ msgid "Clifton" -#~ msgstr "克利夫顿" +#~ msgid "Sherman" +#~ msgstr "谢尔曼" -#~ msgid "Clarksville" -#~ msgstr "克拉克斯维尔" +#~ msgid "Shirley" +#~ msgstr "雪莉" -#~ msgid "Clarksburg" -#~ msgstr "克拉克斯堡" +#~ msgid "Shoreham" +#~ msgstr "肖勒姆" -#~ msgid "Clarendon" -#~ msgstr "克拉伦登" +#~ msgid "Shrewsbury" +#~ msgstr "什鲁斯伯里(英格兰西部一城市)" -#~ msgid "Claremont" -#~ msgstr "克莱尔蒙特" +#~ msgid "Shutesbury" +#~ msgstr "舒茨伯里" -#~ msgid "Chittenden" -#~ msgstr "Chittenden" +#~ msgid "Sidney" +#~ msgstr "西德尼" -#~ msgid "China" -#~ msgstr "中国" +#~ msgid "Simsbury" +#~ msgstr "辛斯伯利市" -#~ msgid "Chilmark" -#~ msgstr "奇尔马克" +#~ msgid "Skowhegan" +#~ msgstr "史勾西根" -#~ msgid "Chicopee" -#~ msgstr "奇科皮" +#~ msgid "Smithfield" +#~ msgstr "史密斯菲尔德" -#~ msgid "Chichester" -#~ msgstr "奇切斯特" +#~ msgid "Smyrna" +#~ msgstr "士麦那(今称伊兹密尔,土耳其西部一港口城市)" -#~ msgid "Chesterville" -#~ msgstr "切斯特维尔" +#~ msgid "Solon" +#~ msgstr "梭伦" -#~ msgid "Chesterfield" -#~ msgstr "切斯特菲尔德" +#~ msgid "Somers" +#~ msgstr " 萨默斯" -#~ msgid "Chester" -#~ msgstr "切斯特" +#~ msgid "Somerset" +#~ msgstr "萨默塞特郡" -#~ msgid "Cheshire" -#~ msgstr "柴郡" +#~ msgid "Somersworth" +#~ msgstr "萨默斯沃思" -#~ msgid "Cherryfield" -#~ msgstr "切里菲尔德" +#~ msgid "Somerville" +#~ msgstr " 萨默维尔市(美国马萨诸塞州东部城市)" -#~ msgid "Chelsea" -#~ msgstr "切尔西" +#~ msgid "Sorrento" +#~ msgstr "索伦托(意大利南部城镇)" -#~ msgid "Chelmsford" -#~ msgstr "切姆斯福德" +#~ msgid "South Berwick" +#~ msgstr "南贝威克" -#~ msgid "Chebeague Island" -#~ msgstr "肯纳贝克" +#~ msgid "South Bristol" +#~ msgstr "布里斯托尔南部" -#~ msgid "Chatham" -#~ msgstr "查塔姆" +#~ msgid "South Burlington" +#~ msgstr "南伯林顿" -#~ msgid "Charlton" -#~ msgstr "查尔顿" +#~ msgid "South Hadley" +#~ msgstr "南哈德利" -#~ msgid "Charlestown" -#~ msgstr "查尔斯" +#~ msgid "South Hampton" +#~ msgstr "南汉普顿" -#~ msgid "Charleston" -#~ msgstr "查尔斯顿" +#~ msgid "South Hero" +#~ msgstr "南希罗" -#~ msgid "Charlemont" -#~ msgstr "查尔蒙特" +#~ msgid "South Kingstown" +#~ msgstr "南金斯敦" -#~ msgid "Chapman" -#~ msgstr "查普曼" +#~ msgid "South Portland" +#~ msgstr "南波特兰" -#~ msgid "Chaplin" -#~ msgstr "卓别林" +#~ msgid "South Thomaston" +#~ msgstr "南托马斯顿" -#~ msgid "Central Falls" -#~ msgstr "森特勒尔福尔斯" +#~ msgid "South Windsor" +#~ msgstr "南温莎" -#~ msgid "Centerville" -#~ msgstr "森特维尔" +#~ msgid "Southampton" +#~ msgstr "南安普敦" -#~ msgid "Center Harbor" -#~ msgstr "中心港" +#~ msgid "Southborough" +#~ msgstr "索思伯勒" -#~ msgid "Cavendish" -#~ msgstr "卡文迪什" +#~ msgid "Southbridge" +#~ msgstr "绍斯布里奇" -#~ msgid "Caswell" -#~ msgstr "卡斯韦尔" +#~ msgid "Southbury" +#~ msgstr "绍斯伯里" -#~ msgid "Castleton" -#~ msgstr "卡斯尔顿" +#~ msgid "Southington" +#~ msgstr "绍辛顿" -#~ msgid "Castle Hill" -#~ msgstr "堡垒山" +#~ msgid "Southport" +#~ msgstr "绍斯波特" -#~ msgid "Castine" -#~ msgstr "卡斯汀" +#~ msgid "Southwest Harbor" +#~ msgstr "西南港口" -#~ msgid "Casco" -#~ msgstr "卡斯柯" +#~ msgid "Southwick" +#~ msgstr "索斯威克" -#~ msgid "Cary Plantation" -#~ msgstr "卡里种植园" +#~ msgid "Spencer" +#~ msgstr "斯宾塞" -#~ msgid "Carver" -#~ msgstr "卡弗" +#~ msgid "Sprague" +#~ msgstr "斯普雷格" -#~ msgid "Carthage" -#~ msgstr "迦太基" +#~ msgid "Springfield" +#~ msgstr "斯普林菲尔德" -#~ msgid "Carroll Plantation" -#~ msgstr "卡罗尔种植园" +#~ msgid "St. Agatha" +#~ msgstr "阿加莎街" -#~ msgid "Carroll" -#~ msgstr "卡罗尔" +#~ msgid "St. Albans" +#~ msgstr "圣奥尔本斯街" -#~ msgid "Carrabassett Valley" -#~ msgstr "Carrabassett Valley" +#~ msgid "St. Francis" +#~ msgstr "弗朗西斯街" -#~ msgid "Carmel" -#~ msgstr "卡梅尔" +#~ msgid "St. George" +#~ msgstr "乔治街" -#~ msgid "Carlisle" -#~ msgstr "卡莱尔" +#~ msgid "St. Johnsbury" +#~ msgstr "斯堡街" -#~ msgid "Caribou" -#~ msgstr "卡里布" +#~ msgid "Stacyville" +#~ msgstr "斯特西维尔" -#~ msgid "Caratunk" -#~ msgstr "Caratunk" +#~ msgid "Stafford" +#~ msgstr "斯塔福德" -#~ msgid "Cape Elizabeth" -#~ msgstr "伊丽莎白" +#~ msgid "Stamford" +#~ msgstr "斯坦福德" -#~ msgid "Canton" -#~ msgstr "坎顿" +#~ msgid "Standish" +#~ msgstr "斯坦迪什" -#~ msgid "Canterbury" -#~ msgstr "坎特伯雷" +#~ msgid "Stannard" +#~ msgstr "斯坦纳德" -#~ msgid "Candia" -#~ msgstr "甘迪亚" +#~ msgid "Stark" +#~ msgstr "斯塔克" -#~ msgid "Canaan" -#~ msgstr "迦南" +#~ msgid "Starks" +#~ msgstr "斯塔克斯" -#~ msgid "Campton" -#~ msgstr "康普顿" +#~ msgid "Starksboro" +#~ msgstr "斯塔克斯伯勒" -#~ msgid "Camden" -#~ msgstr "卡姆登" +#~ msgid "Sterling" +#~ msgstr "斯特林" -#~ msgid "Cambridge" -#~ msgstr "剑桥" +#~ msgid "Stetson" +#~ msgstr "斯泰森" -#~ msgid "Calais" -#~ msgstr "加莱" +#~ msgid "Steuben" +#~ msgstr "施托伊本" -#~ msgid "Cabot" -#~ msgstr "Cabot" +#~ msgid "Stewartstown" +#~ msgstr "斯图尔特斯敦" -#~ msgid "Byron" -#~ msgstr "Byron" +#~ msgid "Stockbridge" +#~ msgstr "斯托克布里奇" -#~ msgid "Buxton" -#~ msgstr "Buxton" +#~ msgid "Stockholm" +#~ msgstr "斯德哥尔摩" -#~ msgid "Burrillville" -#~ msgstr "Burrillville" +#~ msgid "Stockton Springs" +#~ msgstr "斯托克顿斯普林斯" -#~ msgid "Burnham" -#~ msgstr "Burnham" +#~ msgid "Stoddard" +#~ msgstr "斯托达德" -#~ msgid "Burlington" -#~ msgstr "Burlington" +#~ msgid "Stoneham" +#~ msgstr "斯托纳姆" -#~ msgid "Burke" -#~ msgstr "Burke" +#~ msgid "Stonington" +#~ msgstr "斯托宁顿" -#~ msgid "Bucksport" -#~ msgstr "Bucksport" +#~ msgid "Stoughton" +#~ msgstr "斯托顿" -#~ msgid "Buckland" -#~ msgstr "Buckland" +#~ msgid "Stow" +#~ msgstr "斯托" -#~ msgid "Buckfield" -#~ msgstr "巴克菲尔德" +#~ msgid "Stowe" +#~ msgstr "斯托弗" -#~ msgid "Brunswick" -#~ msgstr "Brunswick" +#~ msgid "Strafford" +#~ msgstr "斯特拉福德" -#~ msgid "Brownville" -#~ msgstr "Brownville" +#~ msgid "Stratford" +#~ msgstr "斯特拉特福" -#~ msgid "Brownington" -#~ msgstr "Brownington" +#~ msgid "Stratham" +#~ msgstr "斯特拉汉姆" -#~ msgid "Brownfield" -#~ msgstr "布朗菲尔德" +#~ msgid "Stratton" +#~ msgstr "斯特拉顿" -#~ msgid "Brookton" -#~ msgstr "Brookton" +#~ msgid "Strong" +#~ msgstr "强壮" -#~ msgid "Brooksville" -#~ msgstr "Brooksville" +#~ msgid "Sturbridge" +#~ msgstr "斯特布里奇" -#~ msgid "Brookline" -#~ msgstr "Brookline" +#~ msgid "Sudbury" +#~ msgstr "萨德伯里(加拿大安大略省南部城市)" -#~ msgid "Brooklin" -#~ msgstr "Brooklin" +#~ msgid "Suffield" +#~ msgstr "萨菲尔德" -#~ msgid "Brookfield" -#~ msgstr "布鲁克菲尔德" +#~ msgid "Sugar Hill" +#~ msgstr "黑人妓院" -#~ msgid "Brockton" -#~ msgstr "Brockton" +#~ msgid "Sullivan" +#~ msgstr "沙利文" -#~ msgid "Bristol" -#~ msgstr "Bristol" +#~ msgid "Sumner" +#~ msgstr "萨姆纳" -#~ msgid "Brimfield" -#~ msgstr "布里姆菲尔德" +#~ msgid "Sunapee" +#~ msgstr "纳皮" -#~ msgid "Brighton Plantation" -#~ msgstr "Brighton Plantation" +#~ msgid "Sunderland" +#~ msgstr "桑德兰(英国英格兰东北部港市)" -#~ msgid "Brighton" -#~ msgstr "Brighton" +#~ msgid "Surrey" +#~ msgstr "萨里大学" -#~ msgid "Bridport" -#~ msgstr "Bridport" +#~ msgid "Surry" +#~ msgstr "萨里郡(英格兰东南部的郡)" -#~ msgid "Bridgton" -#~ msgstr "Bridgton" +#~ msgid "Sutton" +#~ msgstr "萨顿(英国英格兰东南部城市)" -#~ msgid "Bridgewater" -#~ msgstr "Bridgewater" +#~ msgid "Swampscott" +#~ msgstr "斯瓦姆斯科特(美国马萨诸塞州东北部城市)" -#~ msgid "Bridgeport" -#~ msgstr "Bridgeport" +#~ msgid "Swans Island" +#~ msgstr "天鹅岛" -#~ msgid "Brewster" -#~ msgstr "Brewster" +#~ msgid "Swansea" +#~ msgstr "斯温西(英国威尔斯南部一海港)" -#~ msgid "Brewer" -#~ msgstr "Brewer" +#~ msgid "Swanton" +#~ msgstr "斯万顿" -#~ msgid "Brentwood" -#~ msgstr "Brentwood" +#~ msgid "Swanville" +#~ msgstr "斯万维尔" -#~ msgid "Bremen" -#~ msgstr "Bremen" +#~ msgid "Sweden" +#~ msgstr "瑞典(欧洲国家)" -#~ msgid "Brattleboro" -#~ msgstr "Brattleboro" +#~ msgid "Talmadge" +#~ msgstr "塔尔梅奇" -#~ msgid "Branford" -#~ msgstr "Branford" +#~ msgid "Tamworth" +#~ msgstr "塔姆沃思(英国一城市名)" -#~ msgid "Braintree" -#~ msgstr "Braintree" +#~ msgid "Taunton" +#~ msgstr "陶顿(美国马萨诸塞州东南部城市)" -#~ msgid "Bradley" -#~ msgstr "Bradley" +#~ msgid "Temple" +#~ msgstr "神殿" -#~ msgid "Bradford" -#~ msgstr "Bradford" +#~ msgid "Templeton" +#~ msgstr "坦普利顿学院" -#~ msgid "Bozrah" -#~ msgstr "Bozrah" +#~ msgid "Tewksbury" +#~ msgstr "图克斯伯里" -#~ msgid "Boylston" -#~ msgstr "Boylston" +#~ msgid "The Forks" +#~ msgstr "福克斯区" -#~ msgid "Boxford" -#~ msgstr "Boxford" +#~ msgid "Thetford" +#~ msgstr "塞特福特" -#~ msgid "Boxborough" -#~ msgstr "Boxborough" +#~ msgid "Thomaston" +#~ msgstr "托马斯顿(美国地名)" -#~ msgid "Bowerbank" -#~ msgstr "Bowerbank" +#~ msgid "Thorndike" +#~ msgstr "桑代克" -#~ msgid "Bowdoinham" -#~ msgstr "Bowdoinham" +#~ msgid "Thornton" +#~ msgstr "梅特勒" -#~ msgid "Bowdoin" -#~ msgstr "Bowdoin" +#~ msgid "Tilton" +#~ msgstr "蒂尔顿" -#~ msgid "Bow" -#~ msgstr "Bow" +#~ msgid "Tiverton" +#~ msgstr "泰沃顿" -#~ msgid "Bourne" -#~ msgstr "Bourne" +#~ msgid "Tolland" +#~ msgstr "托兰德" -#~ msgid "Boston" -#~ msgstr "Boston" +#~ msgid "Topsfield" +#~ msgstr "Topsfield" -#~ msgid "Boscawen" -#~ msgstr "Boscawen" +#~ msgid "Topsham" +#~ msgstr "托普瑟姆" -#~ msgid "Boothbay Harbor" -#~ msgstr "Boothbay Harbor" +#~ msgid "Torrington" +#~ msgstr "托灵顿" -#~ msgid "Boothbay" -#~ msgstr "Boothbay" +#~ msgid "Townsend" +#~ msgstr "汤森" -#~ msgid "Bolton" -#~ msgstr "Bolton" +#~ msgid "Townshend" +#~ msgstr "汤恩森德" -#~ msgid "Blue Hill" -#~ msgstr "Blue Hill" +#~ msgid "Tremont" +#~ msgstr "里蒙特饭店" -#~ msgid "Bloomfield" -#~ msgstr "布洛姆菲尔德" +#~ msgid "Trenton" +#~ msgstr "特伦顿(美国新泽西州首府)" -#~ msgid "Blandford" -#~ msgstr "Blandford" +#~ msgid "Troy" +#~ msgstr "特洛伊(美国纽约州一城市)" -#~ msgid "Blanchard" -#~ msgstr "Blanchard" +#~ msgid "Trumbull" +#~ msgstr "特兰伯尔" -#~ msgid "Blaine" -#~ msgstr "Blaine" +#~ msgid "Truro" +#~ msgstr "特鲁罗市" -#~ msgid "Blackstone" -#~ msgstr "Blackstone" +#~ msgid "Tunbridge" +#~ msgstr "滕布里奇" -#~ msgid "Bingham" -#~ msgstr "Bingham" +#~ msgid "Tyringham" +#~ msgstr "蒂林厄姆" -#~ msgid "Billerica" -#~ msgstr "Billerica" +#~ msgid "Underhill" +#~ msgstr "昂德希尔" -#~ msgid "Biddeford" -#~ msgstr "Biddeford" +#~ msgid "Union" +#~ msgstr "联盟" -#~ msgid "Beverly" -#~ msgstr "Beverly" +#~ msgid "Upton" +#~ msgstr "厄普顿" -#~ msgid "Bethlehem" -#~ msgstr "Bethlehem" +#~ msgid "Uxbridge" +#~ msgstr "乌克斯桥镇" -#~ msgid "Bethel" -#~ msgstr "Bethel" +#~ msgid "Van Buren" +#~ msgstr "范布伦(美国城市)" -#~ msgid "Bethany" -#~ msgstr "Bethany" +#~ msgid "Vanceboro" +#~ msgstr "凡斯波罗" -#~ msgid "Berwick" -#~ msgstr "Berwick" +#~ msgid "Vassalboro" +#~ msgstr "瓦萨波罗" -#~ msgid "Bernardston" -#~ msgstr "Bernardston" +#~ msgid "Vergennes" +#~ msgstr "弗金斯" -#~ msgid "Berlin" -#~ msgstr "Berlin" +#~ msgid "Vernon" +#~ msgstr "弗农" -#~ msgid "Berkshire" -#~ msgstr "Berkshire" +#~ msgid "Verona Island" +#~ msgstr "维罗纳岛" -#~ msgid "Berkley" -#~ msgstr "Berkley" +#~ msgid "Vienna" +#~ msgstr "维也纳(奥地利首都)" -#~ msgid "Benton" -#~ msgstr "Benton" +#~ msgid "Vinalhaven" +#~ msgstr "维纳哈芬" -#~ msgid "Benson" -#~ msgstr "Benson" +#~ msgid "Wade" +#~ msgstr "韦德" -#~ msgid "Bennington" -#~ msgstr "Bennington" +#~ msgid "Waite" +#~ msgstr "韦特" -#~ msgid "Benedicta" -#~ msgstr "Benedicta" +#~ msgid "Waitsfield" +#~ msgstr "菲尔德" -#~ msgid "Belvidere" -#~ msgstr "Belvidere" +#~ msgid "Wakefield" +#~ msgstr "韦克菲尔德" -#~ msgid "Belmont" -#~ msgstr "Belmont" +#~ msgid "Walden" +#~ msgstr "瓦尔登湖" -#~ msgid "Bellingham" -#~ msgstr "Bellingham" +#~ msgid "Waldo" +#~ msgstr "沃尔多" -#~ msgid "Belgrade" -#~ msgstr "Belgrade" +#~ msgid "Wales" +#~ msgstr "威尔士(英国大不列颠岛西南部地区)" -#~ msgid "Belfast" -#~ msgstr "Belfast" +#~ msgid "Wallingford" +#~ msgstr "瓦林福德(美国一城镇)" -#~ msgid "Belchertown" -#~ msgstr "Belchertown" +#~ msgid "Walpole" +#~ msgstr "华尔普" -#~ msgid "Bedford" -#~ msgstr "Bedford" +#~ msgid "Waltham" +#~ msgstr "沃尔瑟姆(英国一城市)" -#~ msgid "Beddington" -#~ msgstr "Beddington" +#~ msgid "Wareham" +#~ msgstr "威尔汉姆" -#~ msgid "Becket" -#~ msgstr "Becket" +#~ msgid "Warner" +#~ msgstr "华纳" -#~ msgid "Beaver Cove" -#~ msgstr "Beaver Cove" +#~ msgid "Warren" +#~ msgstr "华伦" -#~ msgid "Beals" -#~ msgstr "Beals" +#~ msgid "Warwick" +#~ msgstr "沃里克(美国罗德岛州东部城市,为纺织业中心)" -#~ msgid "Beacon Falls" -#~ msgstr "Beacon Falls" +#~ msgid "Washburn" +#~ msgstr "沃什伯恩" -#~ msgid "Bath" -#~ msgstr "Bath" +#~ msgid "Waterboro" +#~ msgstr "窝特波罗" -#~ msgid "Barton" -#~ msgstr "Barton" +#~ msgid "Waterbury" +#~ msgstr "沃特伯里(美国康涅狄格州中西部城市)" -#~ msgid "Bartlett" -#~ msgstr "Bartlett" +#~ msgid "Waterford" +#~ msgstr "沃特福德(爱尔兰东南部港市)" -#~ msgid "Barrington" -#~ msgstr "Barrington" +#~ msgid "Watertown" +#~ msgstr "沃特敦(美国马萨诸塞州东部城镇)" -#~ msgid "Barre" -#~ msgstr "Barre" +#~ msgid "Waterville" +#~ msgstr "沃特维尔" -#~ msgid "Barnstead" -#~ msgstr "Barnstead" +#~ msgid "Waterville Valley" +#~ msgstr "沃特维尔谷" -#~ msgid "Barnstable" -#~ msgstr "Barnstable" +#~ msgid "Wayland" +#~ msgstr "韦兰" -#~ msgid "Barnet" -#~ msgstr "Barnet" +#~ msgid "Wayne" +#~ msgstr "韦恩" -#~ msgid "Barnard" -#~ msgstr "Barnard" +#~ msgid "Weare" +#~ msgstr "韦尔" -#~ msgid "Barkhamsted" -#~ msgstr "Barkhamsted" +#~ msgid "Weathersfield" +#~ msgstr "Weathersfield" -#~ msgid "Baring Plantation" -#~ msgstr "Baring Plantation" +#~ msgid "Webster" +#~ msgstr "韦伯斯特" -#~ msgid "Bar Harbor" -#~ msgstr "Bar Harbor" +#~ msgid "Webster Plantation" +#~ msgstr "韦伯斯特种植园" -#~ msgid "Bangor" -#~ msgstr "Bangor" +#~ msgid "Wellesley" +#~ msgstr "韦尔斯利" -#~ msgid "Bancroft" -#~ msgstr "Bancroft" +#~ msgid "Wellfleet" +#~ msgstr "韦尔弗利特" -#~ msgid "Baltimore" -#~ msgstr "Baltimore" +#~ msgid "Wellington" +#~ msgstr "惠灵顿(新西兰首都)" -#~ msgid "Baldwin" -#~ msgstr "Baldwin" +#~ msgid "Wells" +#~ msgstr "威尔斯" -#~ msgid "Bakersfield" -#~ msgstr "贝克尔斯菲市" +#~ msgid "Wendell" +#~ msgstr "温德尔" -#~ msgid "Baileyville" -#~ msgstr "Baileyville" +#~ msgid "Wenham" +#~ msgstr "温汉姆" -#~ msgid "Ayer" -#~ msgstr "Ayer" +#~ msgid "Wentworth" +#~ msgstr "温特沃斯(英国一地名)" -#~ msgid "Avon" -#~ msgstr "Avon" +#~ msgid "Wesley" +#~ msgstr "韦斯利" -#~ msgid "Aurora" -#~ msgstr "Aurora" +#~ msgid "West Bath" +#~ msgstr "西浴" -#~ msgid "Augusta" -#~ msgstr "Augusta" +#~ msgid "West Bridgewater" +#~ msgstr "诸塞州西布里奇沃特" -#~ msgid "Auburn" -#~ msgstr "Auburn" +#~ msgid "West Brookfield" +#~ msgstr "West Brookfield" -#~ msgid "Attleboro" -#~ msgstr "Attleboro" +#~ msgid "West Forks" +#~ msgstr "西叉" -#~ msgid "Atkinson" -#~ msgstr "Atkinson" +#~ msgid "West Gardiner" +#~ msgstr "西加德纳" -#~ msgid "Athol" -#~ msgstr "Athol" +#~ msgid "West Greenwich" +#~ msgstr "西格林威治" -#~ msgid "Athens" -#~ msgstr "Athens" +#~ msgid "West Hartford" +#~ msgstr "西哈特福市" -#~ msgid "Ashland" -#~ msgstr "Ashland" +#~ msgid "West Haven" +#~ msgstr "西汉文(美国康涅狄格州南部城市)" -#~ msgid "Ashford" -#~ msgstr "Ashford" +#~ msgid "West Newbury" +#~ msgstr "西纽伯里" -#~ msgid "Ashfield" -#~ msgstr "菲尔德" +#~ msgid "West Paris" +#~ msgstr "西巴黎" -#~ msgid "Ashby" -#~ msgstr "Ashby" +#~ msgid "West Rutland" +#~ msgstr "西拉特兰" -#~ msgid "Ashburnham" -#~ msgstr "Ashburnham" +#~ msgid "West Springfield" +#~ msgstr "西斯普林菲尔德" -#~ msgid "Arundel" -#~ msgstr "Arundel" +#~ msgid "West Stockbridge" +#~ msgstr "西斯托克布里奇" -#~ msgid "Arrowsic" -#~ msgstr "Arrowsic" +#~ msgid "West Warwick" +#~ msgstr "西沃里克" -#~ msgid "Arlington" -#~ msgstr "Arlington" +#~ msgid "West Windsor" +#~ msgstr "西温莎" -#~ msgid "Argyle" -#~ msgstr "Argyle" +#~ msgid "Westborough" +#~ msgstr "韦斯特伯勒" -#~ msgid "Aquinnah" -#~ msgstr "Aquinnah" +#~ msgid "Westbrook" +#~ msgstr "威斯布鲁克" -#~ msgid "Appleton" -#~ msgstr "Appleton" +#~ msgid "Westfield" +#~ msgstr "西田" -#~ msgid "Antrim" -#~ msgstr "Antrim" +#~ msgid "Westford" +#~ msgstr "威斯特福德" -#~ msgid "Ansonia" -#~ msgstr "Ansonia" +#~ msgid "Westhampton" +#~ msgstr "维斯特汉普敦" -#~ msgid "Anson" -#~ msgstr "Anson" +#~ msgid "Westminster" +#~ msgstr "威斯敏斯特" -#~ msgid "Andover" -#~ msgstr "Andover" +#~ msgid "Westmore" +#~ msgstr "维斯特莫尔" -#~ msgid "Amity" -#~ msgstr "Amity" +#~ msgid "Westmoreland" +#~ msgstr "威斯特摩兰" -#~ msgid "Amherst" -#~ msgstr "Amherst" +#~ msgid "Weston" +#~ msgstr "韦斯顿" -#~ msgid "Amesbury" -#~ msgstr "Amesbury" +#~ msgid "Westport" +#~ msgstr "韦斯特波特" -#~ msgid "Alton" -#~ msgstr "Alton" +#~ msgid "Westwood" +#~ msgstr "维斯特伍德" -#~ msgid "Alstead" -#~ msgstr "Alstead" +#~ msgid "Wethersfield" +#~ msgstr "韦琴斯菲尔德" -#~ msgid "Alna" -#~ msgstr "Alna" +#~ msgid "Weybridge" +#~ msgstr "韦布里奇" -#~ msgid "Allenstown" -#~ msgstr "Allenstown" +#~ msgid "Weymouth" +#~ msgstr "韦茅斯(英国港口名)" -#~ msgid "Allagash" -#~ msgstr "Allagash" +#~ msgid "Whately" +#~ msgstr "怀特利" -#~ msgid "Alfred" -#~ msgstr "Alfred" +#~ msgid "Wheelock" +#~ msgstr "韦洛克" -#~ msgid "Alford" -#~ msgstr "Alford" +#~ msgid "Whitefield" +#~ msgstr "怀特菲尔德" -#~ msgid "Alexandria" -#~ msgstr "Alexandria" +#~ msgid "Whiting" +#~ msgstr "怀廷" -#~ msgid "Alburg" -#~ msgstr "Alburg" +#~ msgid "Whitingham" +#~ msgstr "怀廷汉姆" -#~ msgid "Albion" -#~ msgstr "Albion" +#~ msgid "Whitman" +#~ msgstr "惠特曼" -#~ msgid "Albany" -#~ msgstr "Albany" +#~ msgid "Whitneyville" +#~ msgstr "惠特尼维尔" -#~ msgid "Agawam" -#~ msgstr "Agawam" +#~ msgid "Wilbraham" +#~ msgstr "威尔布拉汉(美国地名)" -#~ msgid "Acworth" -#~ msgstr "Acworth" +#~ msgid "Williamsburg" +#~ msgstr "威廉斯堡(美国弗吉尼亚州东南部城市)" -#~ msgid "Acushnet" -#~ msgstr "Acushnet" +#~ msgid "Williamstown" +#~ msgstr "威廉斯镇" -#~ msgid "Acton" -#~ msgstr "阿克顿" +#~ msgid "Willimantic" +#~ msgstr "威利曼蒂克" -#~ msgid "Abington" -#~ msgstr "阿宾顿" +#~ msgid "Willington" +#~ msgstr "威灵顿" -#~ msgid "Abbot" -#~ msgstr "阿伯特" +#~ msgid "Williston" +#~ msgstr "威利斯顿" -#~ msgid "Zoey" -#~ msgstr "佐伊" +#~ msgid "Wilmington" +#~ msgstr "威尔明顿" -#~ msgid "Zoe" -#~ msgstr "祖伊" +#~ msgid "Wilmot" +#~ msgstr "威尔莫特" -#~ msgid "Zachary" -#~ msgstr "扎卡里" +#~ msgid "Wilton" +#~ msgstr "威尔顿" -#~ msgid "Young" -#~ msgstr "扬" +#~ msgid "Winchendon" +#~ msgstr "温琴登" -#~ msgid "Xavier" -#~ msgstr "塞维尔" +#~ msgid "Winchester" +#~ msgstr "温彻斯特" -#~ msgid "Wyatt" -#~ msgstr "怀亚特" +#~ msgid "Windham" +#~ msgstr "温德姆" -#~ msgid "Wright" -#~ msgstr "莱特" +#~ msgid "Windsor" +#~ msgstr "温莎" -#~ msgid "Wood" -#~ msgstr "伍德" +#~ msgid "Windsor Locks" +#~ msgstr "温莎洛克斯" -#~ msgid "Wilson" -#~ msgstr "威尔森" +#~ msgid "Winhall" +#~ msgstr "温霍尔" -#~ msgid "Williams" -#~ msgstr "威廉姆斯" +#~ msgid "Winn" +#~ msgstr "温" -#~ msgid "William" -#~ msgstr "威廉姆" +#~ msgid "Winooski" +#~ msgstr "威努斯基" -#~ msgid "White" -#~ msgstr "怀特" +#~ msgid "Winslow" +#~ msgstr "温斯洛" -#~ msgid "Watson" -#~ msgstr "沃特森" +#~ msgid "Winter Harbor" +#~ msgstr "冬季港" -#~ msgid "Washington" -#~ msgstr "华盛顿" +#~ msgid "Winterport" +#~ msgstr "温特波特" -#~ msgid "Ward" -#~ msgstr "沃德" +#~ msgid "Winterville Plantation" +#~ msgstr "温特维尔种植园" -#~ msgid "Walker" -#~ msgstr "沃克" +#~ msgid "Winthrop" +#~ msgstr "温斯洛普" -#~ msgid "Victoria" -#~ msgstr "维多利亚" +#~ msgid "Wiscasset" +#~ msgstr "威斯卡西特" -#~ msgid "Vanessa" -#~ msgstr "瓦妮莎" +#~ msgid "Woburn" +#~ msgstr "沃" -#~ msgid "Valeria" -#~ msgstr "瓦伦西亚" +#~ msgid "Wolcott" +#~ msgstr "沃尔科特" -#~ msgid "Tyler" -#~ msgstr "泰勒" +#~ msgid "Wolfeboro" +#~ msgstr "沃夫波洛" -#~ msgid "Turner" -#~ msgstr "特纳" +#~ msgid "Woodbridge" +#~ msgstr "伍德布里奇" -#~ msgid "Tristan" -#~ msgstr "特里斯坦" +#~ msgid "Woodbury" +#~ msgstr "伍德伯里" -#~ msgid "Trinity" -#~ msgstr "芮妮蒂" +#~ msgid "Woodford" +#~ msgstr "伍德福德" -#~ msgid "Torres" -#~ msgstr "托雷斯" +#~ msgid "Woodland" +#~ msgstr "伍德兰" -#~ msgid "Thompson" -#~ msgstr "汤普森" +#~ msgid "Woodstock" +#~ msgstr "伍德斯托克" -#~ msgid "Thomas" -#~ msgstr "托马斯" +#~ msgid "Woodville" +#~ msgstr "伍德维尔" -#~ msgid "Taylor" -#~ msgstr "泰勒" +#~ msgid "Woolwich" +#~ msgstr "伍尔维奇" -#~ msgid "Sydney" -#~ msgstr "西德尼" +#~ msgid "Woonsocket" +#~ msgstr "索基特" -#~ msgid "Stewart" -#~ msgstr "斯图尔特" +#~ msgid "Worcester" +#~ msgstr "伍斯特" -#~ msgid "Sophie" -#~ msgstr "苏菲" +#~ msgid "Worthington" +#~ msgstr "沃辛顿" -#~ msgid "Sofia" -#~ msgstr "索菲亚" +#~ msgid "Wrentham" +#~ msgstr "伦瑟姆" -#~ msgid "Smith" -#~ msgstr "史密斯" +#~ msgid "Yarmouth" +#~ msgstr "维沙卡帕特" -#~ msgid "Simmons" -#~ msgstr "西蒙斯" +#~ msgid "York" +#~ msgstr "纽约" -#~ msgid "Sean" -#~ msgstr "西恩" +#~ msgid "" +#~ "Although you never got your driver's license, you've always loved cars. " +#~ "You start with a wrench, a toolbelt, and some car-related reading " +#~ "material." +#~ msgstr "" +#~ "虽然你从没有获得过正式驾照,但你清楚你血液中流淌的是97号的汽油。汽车就是你" +#~ "的爱人,你的全部。游戏开始时你将拥有一个扳手、一个工具腰带和一些与汽车相关" +#~ "的读物。" -#~ msgid "Scott" -#~ msgstr "斯科特" +#~ msgid "" +#~ "Your flexible outlook on law has ensured your survival, but now what? You " +#~ "start with cargo pants, a hoodie, \"sundries\", and one additional level " +#~ "of melee." +#~ msgstr "" +#~ "你从来都不是一个遵纪守法的好公民,但你靠这些年刀光剑影锻炼出来的身手这个幸" +#~ "存了下来。" -#~ msgid "Savannah" -#~ msgstr "萨凡娜" +#~ msgid "" +#~ "You're a high school drop-out with one goal in mind: to join the " +#~ "military. You finally got in, and now it's hell on Earth in cataclysmic " +#~ "proportions. You start out with some military gear, and a level in " +#~ "survival and firearms." +#~ msgstr "" +#~ "你从高中辍学,目标只有一个:参军。现在你终于实现了你的目标,并且成为这个灾" +#~ "变世界中的梦魇。你开局时带着一些军事装备,并且掌握生存和火器技能。" -#~ msgid "Sarah" -#~ msgstr "莎拉" +#~ msgid "" +#~ "Everyone at work knew you as the person who always had a cigarette or two " +#~ "in hand. Now, you're down to a single pack, and you hope you find more " +#~ "soon. You start out with a strong nicotine addiction, and 10 cigarettes." +#~ msgstr "" +#~ "所有人都知道你是个烟不离手的家伙。现在再也没人给你递烟了,趁兜里的半包没抽" +#~ "完之前,你最好自己开始寻找补给。" -#~ msgid "Sara" -#~ msgstr "萨拉" +#~ msgid "" +#~ "You lived on the streets your whole life because you would rather have a " +#~ "bottle of whiskey than a roof over your head. You start with a strong " +#~ "alcohol addiction and a pair of pants." +#~ msgstr "" +#~ "你的一生都在露宿街头,因为对你来说一瓶威士忌胜过头顶上的屋檐。在游戏开始你" +#~ "将具有强烈的酒精成瘾症和一条裤子。" -#~ msgid "Sanders" -#~ msgstr "桑德斯" +#~ msgid "" +#~ "You used to work at the home depot, and you did a lot of home renovations " +#~ "yourself. You start with steel toe boots, a tool belt, a hammer, and a " +#~ "level in construction." +#~ msgstr "" +#~ "你曾在装修公司卖苦力而且乐在其中,以至于你家装修是你一个人搞定的!由于对坑" +#~ "爹老板的薪水不满,你带着他的几件工具离开了他。" -#~ msgid "Sanchez" -#~ msgstr "桑切斯" +#~ msgid "" +#~ "You've traveled for a living, sightseeing here and there, and living off " +#~ "your parents' trust fund. But now they're gone, and the only thing " +#~ "between you and death is the open road and your backpack." +#~ msgstr "" +#~ "你靠着双亲信托基金四处游荡,遗憾的是如今你父母都不在了,幸好现在再也不需要" +#~ "钱了。问题是,你和死亡之间的距离只有眼前的大路和身后的背包。" -#~ msgid "Samuel" -#~ msgstr "萨穆埃尔" +#~ msgid "" +#~ "You were one of those guys who watched one too many survivalist shows. " +#~ "You start with a backpack, a blazer, and some survival skills." +#~ msgstr "" +#~ "你曾是贝爷荒野求生的忠实观众,所以貌似你在如何活命这一点上经验颇丰。初始状" +#~ "态:背包、鲜活的运动上衣和一些生存技能。" -#~ msgid "Samantha" -#~ msgstr "萨曼莎" +#~ msgid "" +#~ "You used to work for some small-time business owner doing minor " +#~ "electrical work, and you just so happened to be working on an evac " +#~ "shelter when the cataclysm struck. You start with a level in electronics, " +#~ "and a tool belt." +#~ msgstr "" +#~ "苦逼的是,你是个经常被老板们呼来喝去初级电工;幸运的是,大灾变降临时你真好" +#~ "在避难所修电表。" -#~ msgid "Sabastian" -#~ msgstr "塞巴斯蒂安" +#~ msgid "" +#~ "You were a high school student until the teachers literally tried to pick " +#~ "your brains. You start with a backpack and a zombie survival guide." +#~ msgstr "" +#~ "你本是个大学里的学生,直到你的恩师想要挖出你的脑子来时,你清楚你的大学生活" +#~ "结束了。现在你背上行囊,拿着丧尸生存手册,开始了你的毕业之旅。" -#~ msgid "Ryan" -#~ msgstr "瑞安" +#~ msgid "" +#~ "You were in the middle of a nice shower when the cataclysm struck! You " +#~ "start buck naked." +#~ msgstr "" +#~ "大灾变发生时你正在舒舒服服的享受沐浴,然后你光着身子走进了这个恐怖世界。" -#~ msgid "Russell" -#~ msgstr "拉塞尔" +#~ msgid "" +#~ "You spent most of your life on a Harley, and it's only natural you spend " +#~ "the rest of it riding one. You start with some biker clothes." +#~ msgstr "" +#~ "你把大部分时间都耗费在了你心爱的哈姆雷特机车上。你穿着一身专业服装开始了恐" +#~ "怖之旅。" -#~ msgid "Ross" -#~ msgstr "罗斯" +#~ msgid "" +#~ "You worked for a small-time security company guarding local businesses. " +#~ "You start with a security outfit and a flashlight." +#~ msgstr "" +#~ "你曾经在小型安保公司打过工,嗯,没错你做过黑猫,所以保安服和手电你还留着。" -#~ msgid "Rogers" -#~ msgstr "罗杰斯" +#~ msgid "" +#~ "You've worked the streets since you were a kid, and now you use your " +#~ "street skills to survive. You start with a Glock 19 and some of your " +#~ "\"goods\", but no bullets." +#~ msgstr "" +#~ "小时候你就在道上混了,现在你可以利用这些经验生存下去。好消息是,你有把格洛" +#~ "克19手枪,坏消息是,你没子弹..." -#~ msgid "Rodriguez" -#~ msgstr "罗德里格斯" +#~ msgid "" +#~ "You were about to marry your bride before the cataclysm, now you spend " +#~ "you days searching for her." +#~ msgstr "大灾变之前你刚好准备去迎娶你的真爱,现在你的目标就是找到她。" -#~ msgid "Robinson" -#~ msgstr "罗宾森" +#~ msgid "" +#~ "Before the Apocalypse, you turned to Heroin to soothe your many " +#~ "problems.\n" +#~ "Now, your habit is your only comfort and your only drive." +#~ msgstr "" +#~ "天启之前,你靠海洛因来安抚你的所有问题。\n" +#~ "现在,你的爱好是你的唯一的安慰和唯一的动力。" -#~ msgid "Roberts" -#~ msgstr "罗伯特斯" +#~ msgid "" +#~ "You were on your way to collect your check, when your pimp tried to kill " +#~ "you. You wish that it wasn't a common occurence. You start with a skirt, " +#~ "tank top, a pair of high heels, your stash, and a strong crack addiction." +#~ msgstr "" +#~ "一直潜规则你的皮条客在你准备开工的时候试图杀了你,然后你发现这不是个别案" +#~ "例。于是你一身性感的打扮开始逃命!对了,你还是个不可救药的瘾君子。" -#~ msgid "Robert" -#~ msgstr "罗伯特" +#~ msgid "" +#~ "You haven't seen this much blood since the war. The whole world's gone " +#~ "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay " +#~ "for what they've done. You start with a cane and your pocketwatch." +#~ msgstr "" +#~ "自从战争结束以来,你还没见过这么多的血。全世界都疯了!他们吃光了你的家人!" +#~ "你发誓你会让他们付出代价,用你的手杖和怀表。" -#~ msgid "Rivera" -#~ msgstr "里维拉" +#~ msgid "" +#~ "Being a paramedic put you in a bad spot when it all ended. You had to " +#~ "fight your way out of a hospital full of infected to get to the shelter. " +#~ "You start with a few related tools and some skill in first aid." +#~ msgstr "" +#~ "作为一个医护人员工,末日来临时你的环境对你极其不利。你不得不在医院里杀开一" +#~ "条血路逃往隔离点。好在你那点工具和急救技能帮了你的大忙。" -#~ msgid "Riley" -#~ msgstr "莱利" +#~ msgid "firearms" +#~ msgstr "火器" -#~ msgid "Richardson" -#~ msgstr "理查德森" +#~ msgid "Wagon" +#~ msgstr "四轮马车" -#~ msgid "Reed" -#~ msgstr "雷德" +#~ msgid "ew Game" +#~ msgstr "新游戏" -#~ msgid "Ramirez" -#~ msgstr "拉米雷斯" +#~ msgid "oad" +#~ msgstr "载入" -#~ msgid "Rachel" -#~ msgstr "瑞秋" +#~ msgid "pecial" +#~ msgstr "特殊" -#~ msgid "Price" -#~ msgstr "皮尔斯" +#~ msgid "ptions" +#~ msgstr "选项" -#~ msgid "Powell" -#~ msgstr "鲍威尔" +#~ msgid "elp" +#~ msgstr "帮助" -#~ msgid "Phillips" -#~ msgstr "菲利普斯" +#~ msgid "redits" +#~ msgstr "制作组" -#~ msgid "Peterson" -#~ msgstr "佩特森" +#~ msgid "uit" +#~ msgstr "退出" -#~ msgid "Perry" -#~ msgstr "佩瑞" +#~ msgid "ustom Character" +#~ msgstr "创建新角色" -#~ msgid "Perez" -#~ msgstr "佩雷斯" +#~ msgid "

reset Character" +#~ msgstr "

使用预设角色" -#~ msgid "Payton" -#~ msgstr "佩顿" +#~ msgid "andom Character" +#~ msgstr "随机生成角色" -#~ msgid "Patterson" -#~ msgstr "帕特森" +#~ msgid "Play ow!" +#~ msgstr "直接游戏!" -#~ msgid "Parker" -#~ msgstr "帕克" +#~ msgid "metal screeching!" +#~ msgstr "一声尖锐的金属断裂的声音!" -#~ msgid "Paige" -#~ msgstr "佩奇" +#~ msgid "clang!" +#~ msgstr "哐!" -#~ msgid "Owen" -#~ msgstr "欧文" +#~ msgid "porcelain breaking!" +#~ msgstr "瓷器碎了!" -#~ msgid "Olivia" -#~ msgstr "奥丽维娅" +#~ msgid "whunk!" +#~ msgstr "唰唰!" -#~ msgid "Noah" -#~ msgstr "诺亚" +#~ msgid "whump." +#~ msgstr "哐嘡~" -#~ msgid "Nicholas" -#~ msgstr "尼古拉斯" +#~ msgid "wham!" +#~ msgstr "砰!" -#~ msgid "Nevaeh" -#~ msgstr "内维娅" +#~ msgid "whump!" +#~ msgstr "哐嘡!" -#~ msgid "Nelson" -#~ msgstr "纳尔逊" +#~ msgid "whack!" +#~ msgstr "咔咔!" -#~ msgid "Nathaniel" -#~ msgstr "纳撒尼尔" +#~ msgid "crak" +#~ msgstr "咔擦" -#~ msgid "Nathan" -#~ msgstr "内森" +#~ msgid "crunch." +#~ msgstr "“嘎吱!”" -#~ msgid "Natalie" -#~ msgstr "娜塔莉" +#~ msgid "brush." +#~ msgstr "“噗嗤~”" -#~ msgid "Murphy" -#~ msgstr "墨菲" +#~ msgid "ker-rash!" +#~ msgstr "“咔吱!”" -#~ msgid "Morris" -#~ msgstr "莫里斯" +#~ msgid "plunk." +#~ msgstr "砰砰声." -#~ msgid "Morgan" -#~ msgstr "摩根" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Moore" -#~ msgstr "摩尔" +#~ msgid "You" +#~ msgstr "你" -#~ msgid "Mitchell" -#~ msgstr "米切尔" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Miller" -#~ msgstr "米勒" +#~ msgid "Your" +#~ msgstr "你的" -#~ msgid "Michael" -#~ msgstr "迈克尔" +#~ msgid "her" +#~ msgstr "她的" -#~ msgid "Mia" -#~ msgstr "米娅" +#~ msgid "his" +#~ msgstr "他的" -#~ msgid "Melanie" -#~ msgstr "梅兰妮" +#~ msgid "your" +#~ msgstr "你们的" -#~ msgid "Megan" -#~ msgstr "梅根" +#~ msgid "%1$s hit %4$s" +#~ msgstr "%1$s 击打 %4$s" -#~ msgid "Maya" -#~ msgstr "迈亚" +#~ msgid "%s's %s" +#~ msgstr "%s 的 %s" -#~ msgid "Matthew" -#~ msgstr "马修" +#~ msgid "your %s" +#~ msgstr "你的%s" -#~ msgid "Mason" -#~ msgstr "马森" +#~ msgid "%s break the grab!" +#~ msgstr "%s打破抓取!" -#~ msgid "Mary" -#~ msgstr "麦瑞" +#~ msgid "%s breaks the grab!" +#~ msgstr "%s打破抓取!" -#~ msgid "Martinez" -#~ msgstr "马丁内斯" +#~ msgid "Counter-attack!" +#~ msgstr "回击!" -#~ msgid "Martin" -#~ msgstr "马丁" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Mariah" -#~ msgstr "玛丽亚" +#~ msgid " throws %s." +#~ msgstr "投掷了%s。" -#~ msgid "Maria" -#~ msgstr "玛利亚" +#~ msgid "You throw %s." +#~ msgstr "你投掷了%s。" -#~ msgid "Makayla" -#~ msgstr "马凯拉" +#~ msgid " disarms %s." +#~ msgstr "解除了%s的武装。" -#~ msgid "Madison" -#~ msgstr "麦迪逊" +#~ msgid "You disarm %s." +#~ msgstr "你解除了%s的武装。" -#~ msgid "Madelyn" -#~ msgstr "麦德莲" +#~ msgid "%s's" +#~ msgstr "%s 的" -#~ msgid "Madeline" -#~ msgstr "玛德琳" +#~ msgid "you" +#~ msgstr "你" -#~ msgid "Luke" -#~ msgstr "卢克" +#~ msgid "the %s's" +#~ msgstr "<目标>指向 %s 的" -#~ msgid "Luis" -#~ msgstr "路易斯" +#~ msgid "%s's" +#~ msgstr "<目标>指向 %s 的" -#~ msgid "Lucas" -#~ msgstr "卢卡斯" +#~ msgid " drains %s body heat!" +#~ msgstr " 吸收了%s的体温!" -#~ msgid "Lopez" -#~ msgstr "洛佩兹" +#~ msgid "You drain %s body heat!" +#~ msgstr "你吸收了%s的体温!" -#~ msgid "Long" -#~ msgstr "兰" +#~ msgid "Your injured arms prevent a viper strike!" +#~ msgstr "你的胳膊受伤了,不能使用毒蛇打击!" -#~ msgid "Logan" -#~ msgstr "洛根" +#~ msgid "Tail whip! Viper Combo Intiated!" +#~ msgstr "尾鞭重击!毒蛇组合击!" -#~ msgid "Lily" -#~ msgstr "莉丽" +#~ msgid "%s sink %s fangs into %s!" +#~ msgstr "%s 拉扯住%s用尖牙撕咬了%s!" -#~ msgid "Lillian" -#~ msgstr "莉莲" +#~ msgid "%s sinks %s fangs into %s!" +#~ msgstr "%s 拉扯住%s用尖牙撕咬了%s!" -#~ msgid "Liam" -#~ msgstr "连恩" +#~ msgid "%s slice %s with %s mandibles!" +#~ msgstr "%s 切割了%s 用 %s的上颚!" -#~ msgid "Lewis" -#~ msgstr "李维斯" +#~ msgid "%s slices %s with %s mandibles!" +#~ msgstr "%s 切割了%s 用 %s的上颚!" -#~ msgid "Lee" -#~ msgstr "李" +#~ msgid "%s peck %s!" +#~ msgstr "%s 啄咬了%s!" -#~ msgid "Leah" -#~ msgstr "莉亚" +#~ msgid "%s kick %s with %s hooves!" +#~ msgstr "%s 踢了%s用%s的蹄足!" -#~ msgid "Layla" -#~ msgstr "莱拉" +#~ msgid "%s kicks %s with %s hooves!" +#~ msgstr "%s 踢了%s用%s的蹄足!" -#~ msgid "Lauren" -#~ msgstr "劳伦" +#~ msgid "%s headbutt %s with %s horns!" +#~ msgstr "%s用头撞击了%s用%s的角!" -#~ msgid "Landon" -#~ msgstr "兰登" +#~ msgid "%s headbutts %s with %s horns!" +#~ msgstr "%s用头撞击了%s用%s的角!" -#~ msgid "Kylie" -#~ msgstr "凯丽" +#~ msgid "%s headbutt %s with %s curled horns!" +#~ msgstr "%s用头撞击了%s用%s的卷角!" -#~ msgid "Kyle" -#~ msgstr "凯尔" +#~ msgid "%s headbutts %s with %s curled horns!" +#~ msgstr "%s用头撞击了%s用%s的卷角!" -#~ msgid "King" -#~ msgstr "金" +#~ msgid "%s stab %s with %s pointed horns!" +#~ msgstr "%s 戳击了 %s 用 %s 的尖角!" -#~ msgid "Kimberly" -#~ msgstr "金伯利" +#~ msgid "%s stabs %s with %s pointed horns!" +#~ msgstr "%s 戳击了 %s 用 %s 的尖角!" -#~ msgid "Kim" -#~ msgstr "金" +#~ msgid "%s butt %s with %s antlers!" +#~ msgstr "%s 撞击了 %s 用 %s 的鹿角!" -#~ msgid "Kevin" -#~ msgstr "凯文" +#~ msgid "%s butts %s with %s antlers!" +#~ msgstr "%s 撞击了 %s 用 %s 的鹿角!" -#~ msgid "Kelly" -#~ msgstr "凯莉" +#~ msgid "%s sting %s with %s tail!" +#~ msgstr "%s 刺了 %s 一下用 %s 的尾巴!" -#~ msgid "Kaylee" -#~ msgstr "卡尔莉" +#~ msgid "%s stings %s with %s tail!" +#~ msgstr "%s 刺了 %s 一下用 %s 的尾巴!" -#~ msgid "Kayla" -#~ msgstr "凯拉" +#~ msgid "%s hit %s with %s tail!" +#~ msgstr "%s 敲击了%s 一下用 %s 的尾巴!" -#~ msgid "Katie" -#~ msgstr "凯蒂" +#~ msgid "%s hits %s with %s tail!" +#~ msgstr "%s 敲击了%s 一下用 %s 的尾巴!" -#~ msgid "Katelyn" -#~ msgstr "凯特琳" +#~ msgid "%s slap %s with %s tentacle!" +#~ msgstr "%s拍击了%s 用 %s 的触手!" -#~ msgid "Kaitlin" -#~ msgstr "凯特林" +#~ msgid "%s slaps %s with %s tentacle!" +#~ msgstr "%s拍击了%s 用 %s 的触手!" -#~ msgid "Kaden" -#~ msgstr "卡登" +#~ msgid "%1$s sweep %2$s %3$s at %4$s" +#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" -#~ msgid "Justin" -#~ msgstr "贾斯汀" +#~ msgid "%1$s sweeps %2$s %3$s at %4$s" +#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" -#~ msgid "Julian" -#~ msgstr "朱利安" +#~ msgid "%1$s slam %2$s %3$s against %4$s" +#~ msgstr "%1$s 把 %2$s %3$s 猛地摔在 %4$s 上" -#~ msgid "Julia" -#~ msgstr "茱莉亚" +#~ msgid "%1$s wrap %2$s %3$s around %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 缠绕住了 %4$s" -#~ msgid "Juan" -#~ msgstr "胡安" +#~ msgid "%1$s wraps %2$s %3$s around %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 缠绕住了 %4$s" -#~ msgid "Josiah" -#~ msgstr "约西亚" +#~ msgid "%1$s swing %2$s %3$s wide at %4$s" +#~ msgstr "%1$s 摇晃了 %2$s %3$s 没有命中 %4$s" -#~ msgid "Joshua" -#~ msgstr "约书亚" +#~ msgid "%1$s swings %2$s %3$s wide at %4$s" +#~ msgstr "%1$s 摇晃了 %2$s %3$s 没有命中 %4$s" -#~ msgid "Joseph" -#~ msgstr "约瑟夫" +#~ msgid "%1$s use %2$s %3$s to toss %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" -#~ msgid "Jose" -#~ msgstr "约瑟" +#~ msgid "%1$s uses %2$s %3$s to toss %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" -#~ msgid "Jordan" -#~ msgstr "约旦" +#~ msgid "%1$s impale %4$s" +#~ msgstr "%1$s 钉住 %4$s" -#~ msgid "Jones" -#~ msgstr "琼斯" +#~ msgid "%1$s impales %4$s" +#~ msgstr "%1$s 钉住 %4$s" -#~ msgid "Jonathan" -#~ msgstr "乔纳森" +#~ msgid "%1$s pierce %4$s" +#~ msgstr "%1$s 刺穿 %4$s" -#~ msgid "Johnson" -#~ msgstr "约翰逊" +#~ msgid "%1$s pierces %4$s" +#~ msgstr "%1$s 刺穿 %4$s" -#~ msgid "John" -#~ msgstr "约翰" +#~ msgid "%1$s stab %4$s" +#~ msgstr "%1$s 刺伤 %4$s" -#~ msgid "Jocelyn" -#~ msgstr "乔斯林" +#~ msgid "%1$s batter %4$s" +#~ msgstr "%1$s 猛击 %4$s" -#~ msgid "Jesus" -#~ msgstr "杰西" +#~ msgid "%1$s batters %4$s" +#~ msgstr "%1$s 猛击 %4$s" -#~ msgid "Jessie" -#~ msgstr "杰西" +#~ msgid "%1$s whack %4$s" +#~ msgstr "%1$s 重击 %4$s" -#~ msgid "Jessica" -#~ msgstr "杰西卡" +#~ msgid "%1$s whacks %4$s" +#~ msgstr "%1$s 重击 %4$s" -#~ msgid "Jeremiah" -#~ msgstr "耶利米" +#~ msgid " but do no damage." +#~ msgstr " 但是没有造成什么伤害。" -#~ msgid "Jennifer" -#~ msgstr "詹尼弗" +#~ msgid " for %d damage." +#~ msgstr " 造成 %d 伤害。" -#~ msgid "Jenkins" -#~ msgstr "詹金斯" +#~ msgid "Critical! " +#~ msgstr "暴击! " -#~ msgid "Jen" -#~ msgstr "珍" +#~ msgid "The %s sinks its ovipositor into you!" +#~ msgstr "%s把它的产卵器斜插入你体内!" -#~ msgid "Jayden" -#~ msgstr "杰登" +#~ msgid "The %s's corpse melts into a pool of acid." +#~ msgstr "%s的尸体融化成一滩酸液。" -#~ msgid "Jason" -#~ msgstr "詹森" +#~ msgid "a boomer explodes!" +#~ msgstr "一个呕吐者爆炸了!" -#~ msgid "Jasmine" -#~ msgstr "茉莉" +#~ msgid "The root walls begin to crumble around you." +#~ msgstr "根蔓在你周围粉碎瓦解了" -#~ msgid "James" -#~ msgstr "詹姆斯" +#~ msgid "It disintegrates!" +#~ msgstr "它解体了!" -#~ msgid "Jaden" -#~ msgstr "杰登" +#~ msgid "The %s disappears! Was it in your head?" +#~ msgstr "%s消失了!它是不是躲进你的脑壳里?" -#~ msgid "Jacob" -#~ msgstr "雅各布" +#~ msgid "The %s splatters into tiny, dead pieces." +#~ msgstr "%s被打成了碎片。" -#~ msgid "Jackson" -#~ msgstr "杰克逊" +#~ msgid "The %s splits!" +#~ msgstr "%s分裂了!" -#~ msgid "Jack" -#~ msgstr "杰克" +#~ msgid "The %s melts away!" +#~ msgstr "%s融化了!" -#~ msgid "Isaiah" -#~ msgstr "以赛亚" +#~ msgid "Rats swarm from nowhere to avenge the %s." +#~ msgstr "鼠群从四面八方蜂拥而至,誓向 %s 复仇到底!" -#~ msgid "Isabelle" -#~ msgstr "伊莎贝儿" +#~ msgid "Your %s is destroyed! GAME OVER!" +#~ msgstr "你的%s被摧毁了!GAME OVER!" -#~ msgid "Isabella" -#~ msgstr "伊莎贝拉" +#~ msgid "A small woodland animal." +#~ msgstr "一个小型树林动物。" -#~ msgid "Isabel" -#~ msgstr "伊莎贝尔" +#~ msgid "" +#~ "A cute wiggling nose, cotton tail, and\n" +#~ "delicious flesh." +#~ msgstr "" +#~ "一只可爱的动物有着棉尾巴和\n" +#~ "美味的肉。" -#~ msgid "Isaac" -#~ msgstr "艾萨克" +#~ msgid "A large buck, fast-moving and strong." +#~ msgstr "一只大雄鹿, 跑得快而且强壮." -#~ msgid "Ian" -#~ msgstr "伊恩" +#~ msgid "A buck of the largest deer species." +#~ msgstr "一只雄鹿, 属于最大型的鹿科动物." -#~ msgid "Hunter" -#~ msgstr "亨特" +#~ msgid "A grey wolf. A vicious and fast pack hunter." +#~ msgstr "一只灰狼. 危险又迅速的团队猎手." -#~ msgid "Hughes" -#~ msgstr "休斯" +#~ msgid "" +#~ "An eastern coyote, also called tweed wolf. It is an hybrid of grey wolves " +#~ "and the smaller western coyotes." +#~ msgstr "一个东部郊狼,也叫做东北郊狼。这是一种灰狼和红狼杂交的较小西方郊狼。" -#~ msgid "Howard" -#~ msgstr "霍华德" +#~ msgid "An american black bear. Remember, only YOU can prevent forest fires." +#~ msgstr "美国黑熊。记住,只有你能阻止森林火灾。" -#~ msgid "Hill" -#~ msgstr "希尔" +#~ msgid "A vicious and fast hunter." +#~ msgstr "凶恶和快速的猎人。" -#~ msgid "Hernandez" -#~ msgstr "赫尔南德斯" +#~ msgid "A medium-sized domesticated dog, gone feral." +#~ msgstr "一只中型驯养的狗,已经野生。" -#~ msgid "Henry" -#~ msgstr "亨利" +#~ msgid "A small domesticated cat, gone feral." +#~ msgstr "一只小型驯养猫,已经野生。" -#~ msgid "Henderson" -#~ msgstr "亨德森" +#~ msgid "" +#~ "The size of a large cat, this pulsating mass\n" +#~ "of glistening white flesh turns your stomach." +#~ msgstr "" +#~ "有一只大猫的大小,拥有一种白色的在四周散发着\n" +#~ "光芒的肉刺激着你的胃。" -#~ msgid "Hayes" -#~ msgstr "海耶斯" +#~ msgid "" +#~ "A red ant the size of a crocodile. It is\n" +#~ "covered in chitinous armor, and has a pair of\n" +#~ "vicious mandibles." +#~ msgstr "" +#~ "鳄鱼大小的红蚂蚁。在\n" +#~ "坚硬的甲壳盔甲下,有\n" +#~ "一对凶恶的大颌。" -#~ msgid "Hayden" -#~ msgstr "海登" +#~ msgid "" +#~ "Darker in color than the other ants, this\n" +#~ "more aggresive variety has even larger\n" +#~ "mandibles." +#~ msgstr "" +#~ "比其他蚂蚁的颜色深,这是\n" +#~ "一种拥有比其他蚂蚁更大的\n" +#~ "下颚攻击性更积极的品种。" -#~ msgid "Harris" -#~ msgstr "哈里斯" +#~ msgid "" +#~ "This ant has a long, bloated thorax, bulging\n" +#~ "with hundreds of small ant eggs. It moves\n" +#~ "slowly, tending to nearby eggs and laying\n" +#~ "still more." +#~ msgstr "" +#~ "这种蚂蚁有一个长而且臃肿的胸腔,鼓鼓囊囊的\n" +#~ "全是数以百计的小蚂蚁卵。它移动缓慢,倾向于\n" +#~ "在附近下更多的蚂蚁卵。" -#~ msgid "Hannah" -#~ msgstr "汉娜" +#~ msgid "fungal insect" +#~ msgstr "真菌昆虫" -#~ msgid "Hall" -#~ msgstr "霍尔" +#~ msgid "" +#~ "This insect is pale gray in color, its\n" +#~ "chitin weakened by the fungus sprouting\n" +#~ "from every joint on its body." +#~ msgstr "" +#~ "这种昆虫被浅灰色毛茸茸的东西覆盖,\n" +#~ "仔细一看它的甲壳已经被从其身体的\n" +#~ "每一个关节出冒出产生的真菌布满了。" -#~ msgid "Hailey" -#~ msgstr "海莉" +#~ msgid "" +#~ "A large housefly the size of a small dog.\n" +#~ "It buzzes around incessantly." +#~ msgstr "" +#~ "一只大小像一只小狗的大苍蝇。\n" +#~ "它在空中不停地嗡嗡作响。" -#~ msgid "Griffin" -#~ msgstr "格里芬" +#~ msgid "" +#~ "A honey bee the size of a small dog. It\n" +#~ "buzzes angrily through the air, dagger-\n" +#~ "sized sting pointed forward." +#~ msgstr "" +#~ "一只大小像一只小狗的蜜蜂。它\n" +#~ "在空中愤怒地嗡嗡作响,匕首大\n" +#~ "小的刺尖在尾部闪耀。" -#~ msgid "Green" -#~ msgstr "格林" +#~ msgid "" +#~ "An evil-looking, slender-bodied wasp with\n" +#~ "a vicious sting on its abdomen." +#~ msgstr "" +#~ "一个外观丑陋,身形细长的黄蜂\n" +#~ "腹部可见一只充满恶意的毒刺" -#~ msgid "Gray" -#~ msgstr "戈瑞" +#~ msgid "" +#~ "A hideous slithering beast with a tri-\n" +#~ "sectional mouth that opens to reveal\n" +#~ "hundreds of writhing tongues. Most of its\n" +#~ "enormous body is hidden underground." +#~ msgstr "" +#~ "一种可怕的野兽,和一个三瓣装巨口,打开露出\n" +#~ "数以百计的翻滚的舌头。它的大部分巨大的身体\n" +#~ "隐藏的地下。" -#~ msgid "Gracie" -#~ msgstr "格雷西" +#~ msgid "" +#~ "Half of this monster is emerging from a\n" +#~ "hole in the ground. It looks like a huge\n" +#~ "earthworm, but the end has split into a\n" +#~ "large, fanged mouth." +#~ msgstr "" +#~ "怪物的一半正在从地面的巨坑中脱离。\n" +#~ "它看起来像一只巨大的蚯蚓,但已经结束\n" +#~ "了分裂,有着一个巨大,有尖牙的嘴。" -#~ msgid "Grace" -#~ msgstr "格瑞丝" +#~ msgid "A portion of a giant worm that is still alive." +#~ msgstr "一只巨大的虫子的一个部分,还活着。" -#~ msgid "Gonzalez" -#~ msgstr "冈萨雷兹" +#~ msgid "" +#~ "A human body, stumbling slowly forward on\n" +#~ "uncertain legs, possessed with an unstoppable\n" +#~ "rage." +#~ msgstr "" +#~ "一个人类身躯,缓慢踉跄的前行\n" +#~ "蹒跚的脚步,充满了难以抑制的\n" +#~ "愤怒" -#~ msgid "Gonzales" -#~ msgstr "冈萨雷斯" +#~ msgid "" +#~ "A human body, encapsulated in tough riot\n" +#~ "armour, this zombie was clearly a cop gearing\n" +#~ "up to fight the infection." +#~ msgstr "" +#~ "一个人类的身体封闭在坚固的防爆盔甲,\n" +#~ "这丧尸显然是一个警察在对抗丧尸中遭到\n" +#~ "感染死亡的。" -#~ msgid "Gianna" -#~ msgstr "吉安娜" +#~ msgid "" +#~ "This zombie's jaw has been torn off, leaving\n" +#~ "a gaping hole from mid-neck up." +#~ msgstr "" +#~ "这只丧尸下巴已经被扯掉\n" +#~ "从脖子中部往上能看见一个大洞" -#~ msgid "Genesis" -#~ msgstr "劳恩斯" +#~ msgid "" +#~ "This zombie's mouth is deformed into a round\n" +#~ "spitter, and its body throbs with a dense\n" +#~ "yellow fluid." +#~ msgstr "" +#~ "这只丧尸的嘴巴已经畸变成一个\n" +#~ "唾液横流的圆洞,身躯则被浓黄色液体覆盖\n" +#~ "并不断抽动" -#~ msgid "Gavin" -#~ msgstr "加文" +#~ msgid "" +#~ "This zombie's flesh is pale blue, and it\n" +#~ "occasionally crackles with small bolts of\n" +#~ "lightning." +#~ msgstr "" +#~ "这只丧尸肌肉已变成了淡蓝色,\n" +#~ "并随着全身跳跃的小闪电发出\n" +#~ "阵阵噼啪声" -#~ msgid "Garcia" -#~ msgstr "加西亚" +#~ msgid "" +#~ "This zombie emits a constant haze of\n" +#~ "thick, obfuscating smoke." +#~ msgstr "" +#~ "这只丧尸不断发出阵阵如阴霾般厚重的\n" +#~ "让人迷乱的浓烟" -#~ msgid "Gabrielle" -#~ msgstr "嘉比里拉" +#~ msgid "" +#~ "This zombie's hands and feet are\n" +#~ "webbed, and it is clad in swimwear." +#~ msgstr "这僵尸手脚有蹼,穿着泳装。" -#~ msgid "Gabriella" -#~ msgstr "加布里埃尔" +#~ msgid "" +#~ "This deformed, sinewy canine stays close to\n" +#~ "the ground, loping forward faster than most\n" +#~ "humans ever could." +#~ msgstr "" +#~ "这种畸形的肌肉发达的狗紧贴着\n" +#~ "地面,以一种比大多数人都快的\n" +#~ "速度狂奔。" -#~ msgid "Gabriel" -#~ msgstr "加百列" +#~ msgid "" +#~ "A hideous beast of a zombie, bulging with\n" +#~ "distended muscles on both arms and legs." +#~ msgstr "" +#~ "一头丑陋的野兽的僵尸,在两个胳膊和腿上\n" +#~ "有着鼓鼓囊囊的膨胀的肌肉。" -#~ msgid "Foster" -#~ msgstr "佛斯特" +#~ msgid "" +#~ "A zombie that has somehow grown to the size of\n" +#~ "6 men, with arms as wide as a trash can." +#~ msgstr "" +#~ "一个僵尸,身体变异的有6个大人的大小,\n" +#~ "像垃圾桶一般粗细的胳膊。哇!太恐怖了!" -#~ msgid "Flores" -#~ msgstr "弗洛雷斯" +#~ msgid "" +#~ "A diseased zombie. Fungus sprouts from its\n" +#~ "mouth and eyes, and thick gray mold grows all\n" +#~ "over its translucent flesh." +#~ msgstr "" +#~ "一个真菌僵尸,真菌从\n" +#~ "他的口中和眼中冒出来并\n" +#~ "且灰色的真菌覆盖在它半\n" +#~ "透明的肉上" -#~ msgid "Faith" -#~ msgstr " 信" +#~ msgid "" +#~ "A bloated zombie sagging with fat. It emits a\n" +#~ "horrible odor, and putrid, pink sludge drips\n" +#~ "from its mouth." +#~ msgstr "" +#~ "一个臃肿的呕吐僵尸,他\n" +#~ "发出一种恶心的气味,并\n" +#~ "且腐烂的粉红色呕吐物从\n" +#~ "它的嘴中一滴一滴的流下\n" +#~ "来。" -#~ msgid "Evelyn" -#~ msgstr "伊夫林" +#~ msgid "" +#~ "A bloated zombie that is coated with slimy\n" +#~ "gray mold. Its flesh is translucent and gray,\n" +#~ "and it dribbles a gray sludge from its mouth." +#~ msgstr "" +#~ "一个臃肿的僵尸,涂有粘糊糊的\n" +#~ "霉菌。它的肉是半透明的和灰色的,\n" +#~ "它还会从嘴里吐灰色的污泥。" -#~ msgid "Evans" -#~ msgstr "埃文斯" +#~ msgid "" +#~ "A skeleton picked clean of all but a few\n" +#~ "rotten scraps of flesh, somehow still in\n" +#~ "motion." +#~ msgstr "" +#~ "骨架上除了一些腐烂的\n" +#~ "肉挂在上面以外什么都\n" +#~ "没有,但是它还在运动" -#~ msgid "Evan" -#~ msgstr "埃文" +#~ msgid "" +#~ "A zombie with jet black skin and glowing red\n" +#~ "eyes. As you look at it, you're gripped by a\n" +#~ "feeling of dread and terror." +#~ msgstr "" +#~ "一只有黑色皮肤和闪耀\n" +#~ "红眼的僵尸。当你看他\n" +#~ "的时候,你发自内心的\n" +#~ "恐怖和畏惧。" -#~ msgid "Ethan" -#~ msgstr "伊桑" +#~ msgid "" +#~ "A zombie wearing a tattered lab coat and\n" +#~ "some sort of utility belt. It looks weaker\n" +#~ "than most zombies, but more resourceful too." +#~ msgstr "" +#~ "一个穿着破烂的白大褂和一些工具带\n" +#~ "的僵尸。它看起来很弱,但比大多数\n" +#~ "僵尸更足智多谋。" -#~ msgid "Eric" -#~ msgstr "埃里克" +#~ msgid "" +#~ "This zombie was clearly a soldier before.\n" +#~ "Its tattered armor gives it strong defense,\n" +#~ "and it is much more physically fit than\n" +#~ "most zombies." +#~ msgstr "" +#~ "这个僵尸原来很显然是个士兵。\n" +#~ "他损坏的盔甲给它了一些强大的\n" +#~ "防御,并且盔甲比比大多数僵尸\n" +#~ "都合身。" -#~ msgid "Emma" -#~ msgstr "艾玛" +#~ msgid "" +#~ "This zombie seems to have slightly longer\n" +#~ "than ordinary arms, and constantly gropes\n" +#~ "at its surroundings as it moves." +#~ msgstr "" +#~ "这个僵尸看起来胳膊比其他\n" +#~ "僵尸略长并且不断地摸索着\n" +#~ "移动。" -#~ msgid "Emily" -#~ msgstr "埃米莉" +#~ msgid "master zombie" +#~ msgstr "丧尸领主" -#~ msgid "Ella" -#~ msgstr "艾拉" +#~ msgid "" +#~ "This zombie seems to have a cloud of black\n" +#~ "dust surrounding it. It also seems to have\n" +#~ "a better grasp of movement than most..." +#~ msgstr "" +#~ "这个僵尸附近好像有一个黑\n" +#~ "色的云缠绕着它,而且看起\n" +#~ "来它有更好的抓取能力。" -#~ msgid "Elizabeth" -#~ msgstr "伊丽莎白" +#~ msgid "" +#~ "Hundreds of bee stings have given this zombie\n" +#~ "a thick covering of scar tissue, it will be\n" +#~ "much harder to damage than an ordinary zombie\n" +#~ "but moves a bit slower" +#~ msgstr "" +#~ "被数百的蜜蜂蛰过的僵尸\n" +#~ "有一个隐藏起来的疤痕,\n" +#~ "他会比普通僵尸更难的受\n" +#~ "到伤害,但是移动速度较\n" +#~ "慢。" -#~ msgid "Elijah" -#~ msgstr "以利亚" +#~ msgid "child zombie" +#~ msgstr "儿童丧尸" -#~ msgid "Eli" -#~ msgstr "伊莱" +#~ msgid "" +#~ "A horrifying child zombie, you feel\n" +#~ "a twinge of remorse looking at it." +#~ msgstr "" +#~ "一个恐怖的儿童僵尸,你\n" +#~ "很内疚的看着他。" -#~ msgid "Edwards" -#~ msgstr "爱德华兹" +#~ msgid "" +#~ "An amalgamation of putrid human and animal\n" +#~ "parts that have become fused in this golem\n" +#~ "of flesh. The eyes of all the heads dart\n" +#~ "rapidly and the mouths scream or groan." +#~ msgstr "" +#~ "这个肉傀儡由腐烂的人类和\n" +#~ "动物躯体融合在一起组成,\n" +#~ "它飞快的移动着所有头上的眼睛.\n" +#~ "口中发出尖叫和呻吟." -#~ msgid "Eben" -#~ msgstr "埃本" +#~ msgid "" +#~ "A plant that grows as high as your head,\n" +#~ "with one thick, bark-coated stalk\n" +#~ "supporting a flower-like head with a sharp\n" +#~ "sting within." +#~ msgstr "" +#~ "一种植物长得和你的头一样高,\n" +#~ "有着一个厚的,树皮覆盖的茎\n" +#~ "支撑着有个像头一样里面有着\n" +#~ "锋利刺毛的花。" -#~ msgid "Dylan" -#~ msgstr "狄伦" +#~ msgid "" +#~ "A thick stalk, rooted to the ground.\n" +#~ "It rapidly sprouts thorny vines in all\n" +#~ "directions." +#~ msgstr "" +#~ "一个粗茎,扎根在地上。\n" +#~ "它迅速地向所有的方向\n" +#~ "催生荆棘。" -#~ msgid "Dominic" -#~ msgstr "多米尼克" +#~ msgid "creeping vine" +#~ msgstr "匍匐藤" -#~ msgid "Diego" -#~ msgstr "迭戈" +#~ msgid "" +#~ "A thorny vine. It twists wildly as\n" +#~ "it grows, spreading rapidly." +#~ msgstr "" +#~ "一个棘手的藤蔓。它像发疯一样扭曲\n" +#~ "增长,迅速 ​​蔓延。" -#~ msgid "Diaz" -#~ msgstr "迪亚兹" +#~ msgid "" +#~ "A thick stalk topped with a purple\n" +#~ "flower. The flower's petals are closed,\n" +#~ "and pulsate ominously." +#~ msgstr "" +#~ "一个粗茎顶部有一个紫色的\n" +#~ "花。花的花瓣是封闭的伴随\n" +#~ "着不祥的跳动。" -#~ msgid "Destiny" -#~ msgstr "天命" +#~ msgid "vinebeast" +#~ msgstr "蔓藤怪" -#~ msgid "Davis" -#~ msgstr "戴维斯" +#~ msgid "" +#~ "This appears to be a mass of vines, moving\n" +#~ "with surprising speed. It is so thick and\n" +#~ "tangled that you cannot see what lies in\n" +#~ "the middle." +#~ msgstr "" +#~ "这似乎是一个大规模的藤蔓,以惊人的速度移动。\n" +#~ "它是如此的厚和复杂的使你不能看到在于中间有什\n" +#~ "么。" -#~ msgid "David" -#~ msgstr "大卫" +#~ msgid "" +#~ "A knot of roots that looks bizarrely like a\n" +#~ "heart. It beats slowly with sap, powering\n" +#~ "the root walls around it." +#~ msgstr "" +#~ "一个打结的根部,看起来奇怪的是像一个心。\n" +#~ "它节奏缓慢挖掘坑道,驱动根系环绕在他周围\n" +#~ "形成墙壁。" -#~ msgid "Daniel" -#~ msgstr "丹尼尔" +#~ msgid "" +#~ "A pale white fungus, one meaty gray stalk\n" +#~ "supporting a bloom at the top. A few\n" +#~ "tendrils extend from the base, allowing\n" +#~ "mobility and a weak attack." +#~ msgstr "" +#~ "一个淡白色的真菌,有一个多肉的灰色茎\n" +#~ "在其顶上有花绽放。一些\n" +#~ "藤从底部延伸,可以\n" +#~ "移动和弱攻击。" -#~ msgid "Cox" -#~ msgstr "考克斯" +#~ msgid "" +#~ "A fungal tendril just a couple feet tall. Its\n" +#~ "exterior is hardened into a leathery bark and\n" +#~ "covered in thorns; it also moves faster than\n" +#~ "full-grown fungaloids." +#~ msgstr "" +#~ "真菌藤仅有几英尺高。它的\n" +#~ "外皮硬化成像皮革一样的树皮,\n" +#~ "布满荆棘;它可以移动比\n" +#~ "完全成熟真菌体 更快。" -#~ msgid "Cooper" -#~ msgstr "库珀" +#~ msgid "spore" +#~ msgstr "孢子" -#~ msgid "Cook" -#~ msgstr "库克" +#~ msgid "" +#~ "A wispy spore, about the size of a fist,\n" +#~ "wafting on the breeze." +#~ msgstr "" +#~ "一个纤细的孢子,约有拳头大小。\n" +#~ "在微风中飘荡。" -#~ msgid "Connor" -#~ msgstr " 康纳" +#~ msgid "" +#~ "An enormous fungal spire, towering 30 feet\n" +#~ "above the ground. It pulsates slowly,\n" +#~ "continuously growing new defenses." +#~ msgstr "" +#~ "高达30英尺的庞大真菌尖塔\n" +#~ "拔地而起,它缓慢而又规律的\n" +#~ "不断悸动着,并扩大它的防御范围" + +#~ msgid "" +#~ "A veritable wall of fungus, grown as a\n" +#~ "natural defense by the fungal spire. It\n" +#~ "looks very tough, and spews spores at an\n" +#~ "alarming rate." +#~ msgstr "" +#~ "一个名副其实的真菌墙,成长为了一个\n" +#~ "天然防御的真菌尖塔。它看起来很硬,\n" +#~ "以惊人的速度喷出孢子。" -#~ msgid "Colton" -#~ msgstr "科尔顿" +#~ msgid "" +#~ "A black blob of viscous goo that oozes\n" +#~ "across the ground like a mass of living\n" +#~ "oil." +#~ msgstr "" +#~ "一个黑色的粘液球,渗出的\n" +#~ "粘液滴在地上像一团生活用\n" +#~ "的大众石油。" -#~ msgid "Collins" -#~ msgstr "柯林斯" +#~ msgid "C.H.U.D." +#~ msgstr "地下食人族" -#~ msgid "Coleman" -#~ msgstr "科尔曼" +#~ msgid "" +#~ "Cannibalistic Humanoid Underground Dweller.\n" +#~ "A human, turned pale and mad from years in\n" +#~ "the subways." +#~ msgstr "" +#~ "食人族地下居住者\n" +#~ "一个人,多年在地铁里\n" +#~ "脸色发白" -#~ msgid "Cole" -#~ msgstr "科尔" +#~ msgid "one-eyed mutant" +#~ msgstr "眼魔" -#~ msgid "Clark" -#~ msgstr "克拉克" +#~ msgid "" +#~ "A relatively humanoid mutant with purple\n" +#~ "hair and a grapefruit-sized bloodshot eye." +#~ msgstr "" +#~ "一个相对人形的突变有着紫色\n" +#~ "的头发和一个柚子大小的布满血丝的眼睛。" -#~ msgid "Claire" -#~ msgstr "克莱儿" +#~ msgid "crawler mutant" +#~ msgstr "爬行者突变体" -#~ msgid "Christopher" -#~ msgstr "克里斯多夫" +#~ msgid "" +#~ "Two or three humans fused together somehow,\n" +#~ "slowly dragging their thick-hided, hideous\n" +#~ "body across the ground." +#~ msgstr "" +#~ "两到三个人类以某种奇怪的方式融合在一起,\n" +#~ "他们那丑恶可怕的身躯\n" +#~ "则在地上慢慢拖行" -#~ msgid "Christian" -#~ msgstr "克里斯蒂安" +#~ msgid "sewer fish" +#~ msgstr "变异鱼" -#~ msgid "Chloe" -#~ msgstr "克洛伊" +#~ msgid "" +#~ "A large green fish, it's mouth lined with\n" +#~ "three rows of razor-sharp teeth." +#~ msgstr "" +#~ "一条大的绿色的鱼,它的嘴内有\n" +#~ "三排锋利的牙齿。" -#~ msgid "Chase" -#~ msgstr "蔡斯" +#~ msgid "" +#~ "A large snake, turned pale yellow from its\n" +#~ "underground life." +#~ msgstr "" +#~ "一条粗大的蛇。从它在地底生活开始\n" +#~ "逐渐变得淡黄色。" -#~ msgid "Charlotte" -#~ msgstr "夏洛特" +#~ msgid "" +#~ "A large, mangey rat with red eyes. It\n" +#~ "scampers quickly across the ground, squeaking\n" +#~ "hungrily." +#~ msgstr "" +#~ "一个大型的,mangey鼠有着红色的眼睛。\n" +#~ "它在地面上奔跑很快,\n" +#~ "如饥似渴地发出吱吱声。" -#~ msgid "Charles" -#~ msgstr " 查尔斯" +#~ msgid "" +#~ "A group of several rats, their tails\n" +#~ "knotted together in a filthy mass. A wave\n" +#~ "of nausea washes over you in its presence." +#~ msgstr "" +#~ "一群老鼠,它们的尾巴\n" +#~ "揉结在一起形成一个肮脏的肉团出现在你面前\n" +#~ "阵阵恶心反胃感,瞬间将你淹没。" -#~ msgid "Carter" -#~ msgstr "卡特" +#~ msgid "" +#~ "An enormous mosquito, fluttering erratically,\n" +#~ "its face dominated by a long, spear-tipped\n" +#~ "proboscis." +#~ msgstr "" +#~ "一个巨大的蚊子,飞的飘忽不定,\n" +#~ "它的脸长这一个\n" +#~ "非常长的鼻子。" -#~ msgid "Carson" -#~ msgstr "卡尔森" +#~ msgid "" +#~ "A ferocious airborne predator, flying swiftly\n" +#~ "through the air, its mouth a cluster of fangs." +#~ msgstr "" +#~ "空中凶猛的捕食者,\n" +#~ "通过空中快速飞行,它的牙很锋利。" -#~ msgid "Caroline" -#~ msgstr "卡洛琳" +#~ msgid "" +#~ "A meter-long centipede, moving swiftly on\n" +#~ "dozens of thin legs, a pair of venomous\n" +#~ "pincers attached to its head." +#~ msgstr "" +#~ "一米长的蜈蚣,移动迅速\n" +#~ "有几十瘦小腿,一对有毒的\n" +#~ "钳长在它的头。" -#~ msgid "Carlos" -#~ msgstr "卡洛斯" +#~ msgid "" +#~ "A thick-skinned green frog. It eyes you\n" +#~ "much as you imagine it might eye an insect." +#~ msgstr "" +#~ "一只厚皮绿青蛙。它看你的眼神\n" +#~ "让你感觉它就像在看一只昆虫。" -#~ msgid "Campbell" -#~ msgstr "坎贝尔" +#~ msgid "" +#~ "A gigantic slug, the size of a small car.\n" +#~ "It moves slowly, dribbling acidic goo from\n" +#~ "its fang-lined mouth." +#~ msgstr "" +#~ "一个巨大的蛞蝓,一个小型车的大小。\n" +#~ "缓慢移动,从它的满是尖牙的口中\n" +#~ "吐出酸液粘性物。" -#~ msgid "Camilla" -#~ msgstr "卡蜜拉" +#~ msgid "web spider" +#~ msgstr "网蛛" -#~ msgid "Cameron" -#~ msgstr "卡梅隆" +#~ msgid "trap door spider" +#~ msgstr "陷阱蜘蛛" -#~ msgid "Caleb" -#~ msgstr "迦勒" +#~ msgid "black widow" +#~ msgstr "黑寡妇" -#~ msgid "Caden" -#~ msgstr "卡登" +#~ msgid "" +#~ "An eyeball the size of an easy chair and\n" +#~ "covered in rolling blue flames. It floats\n" +#~ "through the air." +#~ msgstr "" +#~ "一个轻便椅大小的眼球和\n" +#~ "覆盖着旋转的蓝色火焰。它\n" +#~ "在空气中漂浮。" -#~ msgid "Butler" -#~ msgstr "巴特勒" +#~ msgid "" +#~ "A small humanoid, the size of a dog, with\n" +#~ "twisted red flesh and a distended neck. It\n" +#~ "scampers across the ground, panting and\n" +#~ "grunting." +#~ msgstr "" +#~ "一个有狗大小的类人生物,\n" +#~ "有着扭曲的红色的肉和膨胀的脖子。\n" +#~ "在地上疾奔,气喘吁吁地\n" +#~ "发低沉的咕噜声。" -#~ msgid "Bryant" -#~ msgstr "布赖恩特" +#~ msgid "" +#~ "An eldritch creature, shuffling\n" +#~ "along, its hands twitching so\n" +#~ "fast they appear as nothing but\n" +#~ "blurs." +#~ msgstr "" +#~ "一个怪异的生物,缓慢移动\n" +#~ ",它的双手抽搐如此之\n" +#~ "快,几乎看不见\n" +#~ "模糊了。" -#~ msgid "Bryan" -#~ msgstr "布赖恩" +#~ msgid "" +#~ "This looks like a human body, but its\n" +#~ "flesh is snow-white and its face has no\n" +#~ "features save for a perfectly round\n" +#~ "mouth." +#~ msgstr "" +#~ "这看起来像一个人的身体,但它的\n" +#~ "肉是雪白的并且它的脸上没有\n" +#~ "任何特征除了一个正常的圆\n" +#~ "口。" -#~ msgid "Brown" -#~ msgstr "布朗" +#~ msgid "Gozu" +#~ msgstr "牛头" -#~ msgid "Brooks" -#~ msgstr "布鲁克斯" +#~ msgid "" +#~ "A beast with the body of a slightly-overweight\n" +#~ "man and the head of a cow. It walks slowly,\n" +#~ "milky white drool dripping from its mouth,\n" +#~ "wearing only a pair of white underwear." +#~ msgstr "" +#~ "一个重型的野兽般的身体。牛头与\n" +#~ "人的身体结合,它慢慢地走着,从\n" +#~ "它的嘴中滴出白色的口水,,只穿着\n" +#~ "一件白色的内衣。" -#~ msgid "Brooklyn" -#~ msgstr "布鲁克林" +#~ msgid "" +#~ "A fist-sized robot that flies swiftly through\n" +#~ "the air. It's covered with whirring blades\n" +#~ "and has one small, glowing red eye." +#~ msgstr "" +#~ "一个拳头大小的机器人,在空中迅速地飞行。\n" +#~ "它是覆盖着呼呼旋转的叶片和一个小而发光的\n" +#~ "红眼睛。" -#~ msgid "Brooke" -#~ msgstr "布鲁克" +#~ msgid "secubot" +#~ msgstr "护卫机器人" -#~ msgid "Brody" -#~ msgstr "布洛迪" +#~ msgid "" +#~ "A boxy robot about four feet high. It moves\n" +#~ "slowly on a set of treads, and is armed with\n" +#~ "a large machine gun type weapon. It is\n" +#~ "heavily armored." +#~ msgstr "" +#~ "一个四四方方的四英尺高的机器人。它\n" +#~ "通过一套踏板慢慢地移动,并装备有\n" +#~ "一个大的机枪类型的武器。它已经\n" +#~ "全副武装。" -#~ msgid "Brianna" -#~ msgstr "布丽安娜" +#~ msgid "hazmatbot" +#~ msgstr "危险品处理机器人" -#~ msgid "Brian" -#~ msgstr "布莱恩" +#~ msgid "" +#~ "A utility robot designed for hazardous\n" +#~ "conditions. Its only means to stop intruders\n" +#~ "appears to involve thrashing around one of its\n" +#~ "multiple legs." +#~ msgstr "" +#~ "一个被设计在危险环境下工作的机器人\n" +#~ "看起来它只能靠挥舞它\n" +#~ "的其中一条机械腿\n" +#~ "来阻挡入侵者" -#~ msgid "Brayden" -#~ msgstr "布雷登" +#~ msgid "copbot" +#~ msgstr "警用机器人" -#~ msgid "Brandon" -#~ msgstr "布兰登" +#~ msgid "" +#~ "A blue-painted robot that moves quickly on a\n" +#~ "set of three omniwheels. It has a nightstick\n" +#~ "readied, and appears to be well-armored." +#~ msgstr "" +#~ "一个浑身蓝色的机器人靠它的三个全向轮\n" +#~ "迅速的移动着。它手握警棍\n" +#~ "并身披重甲" -#~ msgid "Brady" -#~ msgstr "布雷迪" +#~ msgid "molebot" +#~ msgstr "间谍机器人" -#~ msgid "Blake" -#~ msgstr "布莱克" +#~ msgid "tripod robot" +#~ msgstr "三脚机器人" -#~ msgid "Bennett" -#~ msgstr "班尼特" +#~ msgid "" +#~ "A 8-foot-tall robot that walks on three long\n" +#~ "legs. It has a pair of spiked tentacles, as\n" +#~ "well as a flamethrower mounted on its head." +#~ msgstr "" +#~ "一个八英尺高的三足立式机器人\n" +#~ "它有一对尖刺触手和安装在头部\n" +#~ "的火焰喷射器。" -#~ msgid "Benjamin" -#~ msgstr "本杰明" +#~ msgid "" +#~ "A 10-foot-tall, heavily-armored robot that\n" +#~ "walks on a pair of legs with the knees\n" +#~ "facing backwards. It's armed with a\n" +#~ "nasty-looking machine gun." +#~ msgstr "" +#~ "一个十英尺高的重装机器人\n" +#~ "装备了反关节液压式机械步行足\n" +#~ "并有霸道的重机枪作为主要武装。" -#~ msgid "Bell" -#~ msgstr "贝尔" +#~ msgid "tankbot" +#~ msgstr "坦克机器人" -#~ msgid "Barnes" -#~ msgstr "巴尔内斯" +#~ msgid "" +#~ "Your precious generator, noisily humming\n" +#~ "away. Defend it at all costs!" +#~ msgstr "" +#~ "你宝贵的发电机,喧闹地嗡嗡作响。\n" +#~ "不惜一切代价捍卫它!" -#~ msgid "Baker" -#~ msgstr "贝克" +#~ msgid "%s %s" +#~ msgstr "%s %s" -#~ msgid "Bailey" -#~ msgstr "贝利" +#~ msgid "Snake" +#~ msgstr "蛇拳" -#~ msgid "Ayden" -#~ msgstr "艾登" +#~ msgid "Toad" +#~ msgstr "蛤蟆功" -#~ msgid "Avery" -#~ msgstr "艾弗里" +#~ msgid "You cannot save a template with unused points!" +#~ msgstr "你还有多余点数未分配,故不能保存为人物存档。" -#~ msgid "Ava" -#~ msgstr "阿瓦" +#~ msgid "%1$s assumes a %2$s stance." +#~ msgstr "%1$s假定一个 %2$s 的立场。" -#~ msgid "Autumn" -#~ msgstr "秋" +#~ msgid "I am a wandering master of " +#~ msgstr "我是一个为了 流浪的大师 " -#~ msgid "Austin" -#~ msgstr "奥斯丁" +#~ msgid "I am looking for a master to train my fighting techniques." +#~ msgstr "我在寻找一个大师来训练我的战斗技巧。" -#~ msgid "Audrey" -#~ msgstr "奥德丽" +#~ msgid "Use Celsius" +#~ msgstr "使用摄氏温度" -#~ msgid "Aubrey" -#~ msgstr "奥布里" +#~ msgid "Use Metric Speeds" +#~ msgstr "公制速度单位" -#~ msgid "Ashley" -#~ msgstr "艾希莉" +#~ msgid "Switch between Km/h and mph." +#~ msgstr "Km/h与mph之间切换。" -#~ msgid "Arianna" -#~ msgstr "阿里安娜" +#~ msgid "Use Metric Weights" +#~ msgstr "公制质量单位" -#~ msgid "Ariana" -#~ msgstr "艾丽安娜" +#~ msgid "" +#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." +#~ msgstr "如果设置为是,Y/N大小写提示敏感和y/n是不会被接受的。" -#~ msgid "Anthony" -#~ msgstr "安东尼" +#~ msgid "No Bright Backgrounds" +#~ msgstr "关闭高亮背景" -#~ msgid "Anna" -#~ msgstr "安娜" +#~ msgid "" +#~ "If true, bright backgrounds are not used--some consoles are not " +#~ "compatible." +#~ msgstr "如果设置为是,关闭高亮背景(一些主机不兼容)" -#~ msgid "Angelina" -#~ msgstr "安吉莉娜" +#~ msgid "24 Hour Time" +#~ msgstr "24小时制" -#~ msgid "Angel" -#~ msgstr "安吉尔" +#~ msgid "Snap to Target" +#~ msgstr "自动锁定目标" -#~ msgid "Andrew" -#~ msgstr "安德鲁" +#~ msgid "Auto-Safemode on by default" +#~ msgstr "默认开启自动安全模式" -#~ msgid "Andrea" -#~ msgstr "安德里亚" +#~ msgid "Periodically Autosave" +#~ msgstr "自动保存" -#~ msgid "Anderson" -#~ msgstr "安德森" +#~ msgid "Skill Rust" +#~ msgstr "技能遗忘" -#~ msgid "Amelia" -#~ msgstr "艾米莉亚" +#~ msgid "Delete World" +#~ msgstr "死亡后删除世界" -#~ msgid "Alyssa" -#~ msgstr "阿莉莎" +#~ msgid "Delete world upon player death." +#~ msgstr "在角色死亡后删除世界" -#~ msgid "Allison" -#~ msgstr "艾利森" +#~ msgid "Hide Mouse Cursor" +#~ msgstr "隐藏光标" -#~ msgid "Allen" -#~ msgstr "艾伦" +#~ msgid "Enable item Auto Pickup" +#~ msgstr "允许自动拾取物品" -#~ msgid "Alexis" -#~ msgstr "亚历克西斯" +#~ msgid "Auto Pickup 0 Vol light items" +#~ msgstr "自动拾取 0 体积的轻小型物品" -#~ msgid "Alexandra" -#~ msgstr "亚历山德拉" +#~ msgid "Auto Pickup Safemode" +#~ msgstr "自动拾取安全模式" -#~ msgid "Alexander" -#~ msgstr "亚历山大" +#~ msgid "Use Tiles" +#~ msgstr "使用贴图" -#~ msgid "Alexa" -#~ msgstr "亚莉克莎" +#~ msgid "" +#~ "If true, replaces some TTF rendered text with Tiles. Only applicable on " +#~ "SDL builds. Requires restart." +#~ msgstr "如果true,TTF文本将会被贴图替换,目前只支持SDL版本。需要重新启动。" -#~ msgid "Alex" -#~ msgstr "亚历克斯" +#~ msgid "0 - Center map on character" +#~ msgstr "0 - 以角色为中心定位地图" -#~ msgid "Aiden" -#~ msgstr "艾登" +#~ msgid "/ - Search " +#~ msgstr "/ - 搜索(只支持英文字符) " -#~ msgid "Aidan" -#~ msgstr "艾丹" +#~ msgid "N - Add/Edit a note " +#~ msgstr "N - 加入/编辑一条注释 " -#~ msgid "Adrian" -#~ msgstr "艾德里安" +#~ msgid "D - Delete a note " +#~ msgstr "D - 删除一条记录 " -#~ msgid "Addison" -#~ msgstr "艾迪生" +#~ msgid "L - List notes " +#~ msgstr "L - 注释列表 " -#~ msgid "Adams" -#~ msgstr "亚当斯" +#~ msgid "Esc or q - Return to game " +#~ msgstr " - 返回游戏 " -#~ msgid "Adam" -#~ msgstr "亚当" +#~ msgid "ENCUMBERANCE AND WARMTH" +#~ msgstr "累赘度和保暖值" -#~ msgid "Abigail" -#~ msgstr "阿比盖尔" +#~ msgid "" +#~ "Head encumberance has no effect; it simply limits how much you can put on." +#~ msgstr "头部负重没有任何影响;它仅限于你能穿多少。" -#~ msgid "Aaron" -#~ msgstr "亚伦" +#~ msgid "You are already wielding nothing." +#~ msgstr "你已经赤手空拳了。" -#~ msgid "Aaliyah" -#~ msgstr "阿莉娅" +#~ msgid "It looks girly.\n" +#~ msgstr "它看上去很娘炮。\n" -#~ msgid "Your muscles are very slow to move. You run 30%% slower." -#~ msgstr "你的肌肉非常不适合运动,你跑起来速度下降30%%。" +#~ msgid "It looks manly.\n" +#~ msgstr "它看上去很man。\n" -#~ msgid "Your muscles are quite slow to move. You run 20%% slower." -#~ msgstr "你的肌肉十分不适合运动,你跑起来速度下降20%%。" +#~ msgid "" +#~ "Your %s already has 4 mods installed! To remove the mods,press 'U' while " +#~ "wielding the unloaded gun." +#~ msgstr "" +#~ "你的%s已经装了4个模块了!要卸模块的话,把卸掉模块的枪拿在手里,按U。" -#~ msgid "Your muscles are generally slow to move. You run 10%% slower." -#~ msgstr "你的肌肉总体来说不适合运动,你跑起来速度下降10%%。" +#~ msgid " +Dodge" +#~ msgstr " +闪避" -#~ msgid "" -#~ "Your legs are extremely limber and fast-moving. You run 30%% faster on " -#~ "flat surfaces." -#~ msgstr "跑步运动员" +#~ msgid " +Attack" +#~ msgstr " +攻击" -#~ msgid "" -#~ "Your whole body can't take much abuse. Its maximum HP is 75%% points " -#~ "lower than usual. Stacks with Glass Jaw. Not for casuals." -#~ msgstr "你的体质孱弱,最大生命值降低75%。可与 玻璃头 叠加。慎选!" +#~ msgid " +Damage" +#~ msgstr " +伤害" -#~ msgid "" -#~ "Your head can't take much abuse. Its maximum HP is 20%% lower than usual." -#~ msgstr "你的头骨很脆,经不起太大打击。头部HP上限减少五分之一。" +#~ msgid "boobytrap" +#~ msgstr "诡雷" -#~ msgid "" -#~ "You simply can not carry as much as people with a similar strength could. " -#~ "Your maximum weight carried is reduced by 35%%." -#~ msgstr "你比一般人携带的东西更少。你的最大载重量减少35%%。" +#~ msgid "You step on some bubblewrap!" +#~ msgstr "你踩到了一些气泡袋!" -#~ msgid "" -#~ "You are a pupil of the Venom Clan. You start with one of the five deadly " -#~ "venoms: Centipede, Viper, Scorpion, Lizard, or Toad." -#~ msgstr "" -#~ "你是五毒教的徒众。你在游戏开始时可以使用蜈蚣拳,毒蛇拳,蝎子拳,蜥蜴拳或蛤" -#~ "蟆\n" -#~ "功之一。" +#~ msgid "You trigger a landmine!" +#~ msgstr "你引爆了一个地雷!" -#~ msgid "Venom Mob Protege" -#~ msgstr "五毒教叛徒" +#~ msgid "The %s steps on a landmine!" +#~ msgstr "%s踩到地雷了!" -#~ msgid "" -#~ "You have studied the arts of the Shaolin monks. You start with one of the " -#~ "five animal fighting styles: Tiger, Crane, Leopard, Snake, or Dragon." -#~ msgstr "" -#~ "你是少林寺的俗家弟子。你在开始的时候可以选择少林虎形拳、少林豹形拳、少林鹤" -#~ "形\n" -#~ "拳、少林蛇形拳或者少林龙形拳之一。" +#~ msgid "You trigger a boobytrap!" +#~ msgstr "你触发了一个诡雷!" -#~ msgid "Shaolin Adept" -#~ msgstr "少林功夫" +#~ msgid "The %s triggers a boobytrap!" +#~ msgstr "%s 触发了一个诡雷!" -#~ msgid "" -#~ "At some point in the past you had a bionic upgrade installed in your " -#~ "body. You start the game with a power system, and one random bionic " -#~ "enhancement." -#~ msgstr "" -#~ "过去的某个时候你身体里被安装了一些仿生插件。开始游戏时你将拥有一个基础能量" -#~ "系\n" -#~ "统和随机的仿生学插件。" +#~ msgid "Needs " +#~ msgstr "需要 " -#~ msgid "Android" -#~ msgstr "仿生人" +#~ msgid "To change a wheel you need a " +#~ msgstr "要更换轮胎你需要一个 " -#~ msgid "" -#~ "Covering your body in clothing typical for the opposite gender makes you " -#~ "feel better." -#~ msgstr "绅士的你穿上异性的服装会让你感到很嗨。" +#~ msgid "You need a hose to siphon fuel." +#~ msgstr "你需要一个软管来抽油。" -#~ msgid "Cross-Dresser" -#~ msgstr "异装癖" +#~ msgid "hose" +#~ msgstr "软管" -#~ msgid "" -#~ "You can manage to find space for anything! You can carry 40%% more volume." -#~ msgstr "你全身都是存储空间!口里还可以叼物品!你的携带空间增加40%%。" +#~ msgid "Choose wheel to use as replacement: " +#~ msgstr "选择用来更换的轮胎: " -#~ msgid "" -#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." -#~ msgstr "打倒你要付出高昂的代价!你的生命值上限增加20%%。" +#~ msgid "You need a hose to siphon water." +#~ msgstr "你需要一个软管来抽水。" -#~ msgid "You're just generally quick! You get a 10%% bonus to action points." -#~ msgstr "你比一般人要迅速!你比一般人行动快10%." +#~ msgid "Safe speed: Km/h" +#~ msgstr "安全车速: Km/h" -#~ msgid "" -#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " -#~ "sure footing." -#~ msgstr "你可以比别人跑得更快,你步行的速度增加15%" +#~ msgid "Top speed: Km/h" +#~ msgstr "最高车速: Km/h" -#~ msgid ".223 caliber retool" -#~ msgstr ".223口径转换器" +#~ msgid "Accel.: Kmh/t" +#~ msgstr "加速度: Kmh/t" -#~ msgid ".308 caliber retool" -#~ msgstr ".308口径转换器" +#~ msgid "Safe speed: mph" +#~ msgstr "安全车速: mph" -#~ msgid "4.6mm caliber retool" -#~ msgstr "4.6mm口径转换器" +#~ msgid "Top speed: mph" +#~ msgstr "最高车速: mph" -#~ msgid "5.7mm caliber retool" -#~ msgstr "5.7mm口径转换器" +#~ msgid "Accel.: mph/t" +#~ msgstr "加速度: mph/t" -#~ msgid ".22 caliber retool" -#~ msgstr ".22口径转换器" +#~ msgid "Mass: kg" +#~ msgstr "质量: kg" -#~ msgid "9mm caliber retool" -#~ msgstr "9mm口径转换器" +#~ msgid "Mass: lbs" +#~ msgstr "质量: lbs" -#~ msgid ".45 caliber retool" -#~ msgstr ".45口径转换器" +#~ msgid "K dynamics: " +#~ msgstr "K 动力: " -#~ msgid "" -#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " -#~ "stimulant when you inject yourself with it." -#~ msgstr "一支包含一次计量强心剂的针筒。注射这玩意会让你嗨到翻。" +#~ msgid "K mass: " +#~ msgstr "K 质量: " -#~ msgid "" -#~ "This chemistry set stored in a bag contains some glass containers, some " -#~ "metal wire and safety glasses. It might be used to craft some chems if " -#~ "you're so inclined." -#~ msgstr "" -#~ "这个包里存放的一套化学用品包括一些玻璃器皿,一些金属线以及护目镜.如果你想制" -#~ "作一些化学品,它可为你提供一定的便利." +#~ msgid "Wheels: " +#~ msgstr "车轮: " -#~ msgid "A plastic mold which can be used to craft items made of plastic." -#~ msgstr "一个塑料模具,可以用于塑料制成的工艺品。" +#~ msgid "enough" +#~ msgstr "足够" -#~ msgid "" -#~ "A still, useful for the distillation of alcohol and other, more curious " -#~ "substances." -#~ msgstr "一个蒸馏器,用来提存酒精或更多其他更奇妙的物质." +#~ msgid " lack" +#~ msgstr "不够" -#~ msgid "A bicycle folded into a relatively portable package." -#~ msgstr "一辆可以打包带走的自行车。" +#~ msgid "Fuel usage (safe): " +#~ msgstr "油耗(安全): " -#~ msgid "A fluffy towel, can be used to dry yourself." -#~ msgstr "一条全棉毛巾,你可以用它擦干自己。" +#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" +#~ msgstr "%s的%s撞上了%s,造成%d伤害(%s)!" -#~ msgid "A talking doll for children, luckily it still works." -#~ msgstr "" -#~ "一个熊孩子喜欢的会说话的玩偶,叫杰克狗。你按了下开关,咦,这货还没坏!" +#~ msgid " and stunning it" +#~ msgstr " 并且把它撞晕了" -#~ msgid "A decent sized piece of cotton designed for medical purposes." -#~ msgstr "一团医用棉,大小正合适。" +#~ msgid "Your raincoat protects you from the acidic drizzle." +#~ msgstr "你的雨衣保护你免受酸性细雨的伤害。" -#~ msgid "" -#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " -#~ "enjoy." -#~ msgstr "真空包装密封的苹果片,打开好好享受吧。" +#~ msgid "Your raincoat protects you from the acid rain." +#~ msgstr "你的雨衣可以保护你免受酸雨伤害." -#~ msgid "vacuum-packed apple slices" -#~ msgstr "真空封装的苹果片" +#~ msgid "An ornamental suit of armor." +#~ msgstr "一件装饰金属外套。" #~ msgid "" -#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "" -#~ "多汁的蔬菜被削成了片状,被真空封装安静地躺在塑料袋里。撕开这拘束它的牢笼," -#~ "把它解放吧!" +#~ "Antibacterial medication designed to prevent or stop the spread of " +#~ "infection, in exchange for making future infections harder to stop or " +#~ "prevent." +#~ msgstr "抗菌药物的设计来防止或阻止感染的传播,但是对严重的感染效果有限。" #~ msgid "" -#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "" -#~ "鲜美的肉被削成了片状,被真空封装安静地躺在塑料袋里。撕开这拘束它的牢笼,把" -#~ "它解放吧!" +#~ "Thin paper strips intended for the rolling of cigarettes. Could also be " +#~ "used to make cartridges for a cap and ball revolver." +#~ msgstr "卷烟丝用的薄纸带。也可以制作火药左轮枪的弹药。" #~ msgid "" -#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." -#~ msgstr "便携式真空热封口机,用于包装真空食品以延长食物保质期。" +#~ "A sealed glass jar containing a pickled vegetable. Activate to open and " +#~ "enjoy." +#~ msgstr "一罐密封的即食泡菜。打开即食。" #~ msgid "" -#~ "A cordless drill with a selection of drill bits. The charger base " -#~ "contains a battery draining attachment so the drill can be charged in " -#~ "lieu of mains power." -#~ msgstr "" -#~ "无绳电钻,有许多备用钻头,充电底座上还有一个小装置,能从电池中获取能量。" +#~ "A sealed glass jar containing pickled meat. Activate to open and enjoy." +#~ msgstr "一个罐头腌肉,打开即食。" #~ msgid "" -#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." -#~ msgstr "切成片的苹果被整齐地摆放在密闭的玻璃瓶中,任君品尝。" - -#~ msgid "sealed jar of canned apple" -#~ msgstr "密封的苹果罐头" - -#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." -#~ msgstr "一个密封了的蔬菜罐头,打开之后尽情享用吧。" +#~ "A sealed glass jar containing pickled human flesh. Activate to open. You " +#~ "might even enjoy it." +#~ msgstr "一罐即食腌制人肉。也许你并不讨厌它,笑。" #~ msgid "" -#~ "A sealed glass jar containing human meat. Activate to open and enjoy." -#~ msgstr "一个密封了的人肉罐头,打开之后尽情享用吧。" - -#~ msgid "A sealed glass jar containing kompot. Activate to open and enjoy." -#~ msgstr "一个密封了的kompot罐头,打开之后尽情享用吧。" +#~ "A hand-blown glass pipe of the type most commonly used to smoke " +#~ "hallucinatory plants." +#~ msgstr "一种手工制作的玻璃管,经常被用来吸食迷幻类植物制品。" #~ msgid "" -#~ "A sealed glass jar containing some meat. Activate to open and enjoy." -#~ msgstr "一个密封了的肉罐头,打开之后尽情享用吧。" +#~ "A hand-carved wooden smoking pipe designed to facilitate consumption of " +#~ "fire cured tobacco leaves." +#~ msgstr "手工制作的烟斗,可以用来吸食烟叶。" #~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. This one has " -#~ "been used already and is now useless." +#~ "A portable electric metalworking forge, powered by standard batteries. " +#~ "Combined with the right tools, you can use this for metalworking." #~ msgstr "" -#~ "一次性加热贴,可以被用来处理伤口或者加热食物,但这个加热贴已经被用过了,现" -#~ "在没用了。" +#~ "一种便携式电动金工锻造工具,由标准电池供电。搭配合适当的工具,您可以用来加" +#~ "工金属物品。" #~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. Usable only " -#~ "once." -#~ msgstr "一次性加热贴,可以被用来处理伤口或者加热食物。" +#~ "A small metalworking crucible. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "一个小的金属坩埚。用于某些金属加工制造的模具。" #~ msgid "" -#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " -#~ "shelter has been damaged, and needs repairs." -#~ msgstr "" -#~ "用毛皮和木棍组合成的小帐篷,可以把它架设在地面上。顺便提醒一下,它似乎受损" -#~ "了,最好修一修。" - -#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." -#~ msgstr "用毛皮和木棍组合成的小帐篷,可以把它架设在地面上。" +#~ "An enormously heavy block of oddly shaped steel with a chisel-like " +#~ "projection set into the corner. Used in most metalworking fabrication " +#~ "recipes." +#~ msgstr "一个非常沉重形状奇特带有边边角角的钢凿子。大多用来金属加工。" #~ msgid "" -#~ "A large stick, with the end carved into a blade for digging. Can be used " -#~ "to dig shallow pits, but not deep ones." -#~ msgstr "棍子的底端削成了薄片,似乎能用来锄地,虽然一看就挖不了多深。" +#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " +#~ "cooking or in metalworking fabrication recipes." +#~ msgstr "长的钢钳。可以是一个顺手的近战武器,也是常用的烹调或加工制作道具。" #~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." -#~ msgstr "扁平的石头绑在了木棍上,就当做铁锹用吧,虽然显然比不上啊。" +#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "短,粗壮的金工凿。用于某些金属加工制造的道具。" #~ msgid "" -#~ "A rock affixed to a stick, functions adequately as a hammer, but really " -#~ "can't compare to a proper hammer." -#~ msgstr "一个插着棒子的岩石,勉强可以做锤子,但山寨的毕竟比不过真的。" +#~ "A set of swages and dies for metalsmithing. Used in some metalworking " +#~ "fabrication recipes." +#~ msgstr "一组用于加工模具的型砧。用于某些金属加工制造的模具。" #~ msgid "" -#~ "A sharp needle made from a bone. It would be useful for making rough " -#~ "clothing and items" -#~ msgstr "一根用骨头制成的针,可以用来制作简单的衣物及道具等。" - -#~ msgid "A small pocket knife, not great for combat, but better than nothing." -#~ msgstr "一把折叠刀,作为武器那是相当糟糕,但总比没有好。" +#~ "A huge curved two-handed sword from Japan. Surprisingly light for its " +#~ "size." +#~ msgstr "双手日本刀,外表闪亮着寒光。" #~ msgid "" -#~ "A small multipurpose electronic device. This PDA has its flashlight app " -#~ "on, and is providing light." -#~ msgstr "小型多功能电子设备,这个PDA上有装手电筒程序,还可以用来照明。" +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire. This one features a flip top cover and can be " +#~ "refueled when empty." +#~ msgstr "" +#~ "一个打火机可以用来吸食毒品,如香烟,或者其他轻型毒品。你也可以用打火机点燃" +#~ "火附近的东西。如果用完了还以重新添加燃料。" #~ msgid "" -#~ "A small multipurpose electronic device. Can be loaded with a variety of " -#~ "apps, providing all kinds of functionality." -#~ msgstr "小型多用途电子设备。可加载各种各样的应用程序以提供各种功能。" - -#~ msgid "A piece of kevlar. Can be used to repair kevlar items" -#~ msgstr "一片凯夫拉材料,用于修理由凯夫拉做成的东西。" - -#~ msgid "A piece of plastic. Not much use except to repair plastic items" -#~ msgstr "一块塑料。除了修复塑料制品外没啥用处。" +#~ "The bottoms of your feet are strongly padded. You receive no movement " +#~ "penalty for not wearing shoes, and even receive a 10%% bonus when running " +#~ "barefoot. Slightly decreases wet penalties." +#~ msgstr "" +#~ "你的脚底有个肉垫,不穿鞋子可以增加10%速度,穿鞋就没效果。稍微降低了湿的处" +#~ "罚" -#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgid "" +#~ "Your legs have transformed into six tentacles. This decreases your speed " +#~ "on land by 20%%, but makes your movement silent. However, they also " +#~ "increase your swimming speed. Somewhat decreases wet penalties." #~ msgstr "" -#~ "布条,制作时很有用,也可以绑在流血处,或许能止血,一次不成再绑一次。" +#~ "你的腿变成了六条触须。这会降低你20%左右的陆地移动速度,但让你走路没有声" +#~ "音。然而,也增加你的游泳速度,减少湿身的不爽感。" #~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." -#~ msgstr "特大号™工业的商标,介于常见商标和喷漆罐大小的一半。" +#~ "Your overall skill in using firearms. With higher levels, this general " +#~ "experience increases accuracy with any gun, but is secondary to practice " +#~ "with the type of gun in question." +#~ msgstr "" +#~ "你使用枪支的整体技能,等级越高,说明你枪支的命中率越高,前提是枪是好的。" #~ msgid "" -#~ "A spray can, filled with paint. Use this tool to make graffiti on the " -#~ "floor." -#~ msgstr "装满油漆的喷雾罐。可以用来在地面上涂鸦。" +#~ "If true, shift the view toward the selected item if it is outside of your " +#~ "current viewport." +#~ msgstr "设定为 是,若检视的物品超出画面范围,将会移动画面到该物品位置。" -#~ msgid "A large steel pickaxe, strike the earth!" -#~ msgstr "一把大型钢制丁字镐,用来凿穿地面吧!" +#~ msgid "Stepped on a lane mine." +#~ msgstr "踩到了地雷" -#~ msgid "" -#~ "A combination lock box, breaking inside would destroy anything of value." -#~ msgstr "一个组合式锁箱,强行打开的话会破坏里头值钱的东西。" +#~ msgid "Triggered a boobytrap." +#~ msgstr "触发了一个诱杀陷阱。" #~ msgid "" -#~ "An improvised easy breaking picklock made from scrap metal, needs " -#~ "MacGyver like skills to open locks, it's light material lessens chances " -#~ "of alarms being set off." +#~ "Compact Bionics Module developed at DoubleTech Industries as a " +#~ "replacement for the highly successful CBM: Power Storage. Increases you " +#~ "power capacity by 10 units." #~ msgstr "" -#~ "简易的撬锁工具,用一块金属碎片做成,用它来撬锁对一般人来说有些强人所难,不" -#~ "过,它确实能降低触发警报的几率。" - -#~ msgid "" -#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " -#~ "quickly opening locks." -#~ msgstr "锁匠用的开锁工具,想安静而迅速地开门就把它带上吧。" - -#~ msgid "An unwieldy mop. Good for cleaning up spills." -#~ msgstr "笨重的拖把,清理泄露的液体很不错。" +#~ "杜布勒科技公司研发的旨在取代第一代储能模块的新一代生化插件,能够为你增加10" +#~ "点能量储备上限。" #~ msgid "" -#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " -#~ "gauge wire." -#~ msgstr "一个用于剪断电线的老虎钳,你还可以用它来剪断铁丝网和锁链。" - -#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." -#~ msgstr "一只木棍被切割成木质的机关,用于制作圈套陷阱。" +#~ "Your entire body may resonate at very high power, creating a short-range " +#~ "shockwave. While it will not too much damage to flexible creatures, " +#~ "stiff items such as walls, doors, and even robots will be severely " +#~ "damaged." +#~ msgstr "" +#~ "整个身体产生高强度共振并引发一个短距离音波。虽然它不会对柔软的生物造成较高" +#~ "伤害,但是却对硬物如墙体门窗甚至是机器人效果拔群。" #~ msgid "" -#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " -#~ "mechanics crafting recipes." -#~ msgstr "一把扳手,能当做武器握在手里,也是许多机械制造必备之物。" +#~ "This is a highly modified EMP grenade, designed to scramble robots' " +#~ "control chips, rather than destroy them. This converts the robot to your " +#~ "side for a short time, before the backup systems kick in." +#~ msgstr "" +#~ "这是一个高度修改的EMP手雷,用来获取机器人芯片的控制权,从而让它们站在你这" +#~ "边。可惜,效果只能维持一会,然后就会被机器人的备用系统取代。" #~ msgid "" -#~ "A Philips-head screwdriver, important for almost all electronics crafting " -#~ "and most mechanics crafting." -#~ msgstr "一把十字螺丝刀,对于几乎所有电子制作和机械制作都十分重要。" - -#~ msgid "A tool used for disassembling firearm ammunition." -#~ msgstr "这是一个用来拆卸子弹的装置。" +#~ "Use this item to pull the pin. Five turns after you do that, it will " +#~ "begin to expel a highly toxic gas for several turns. This gas damages and " +#~ "slows those who enter it, as well as obscuring vision and scent." +#~ msgstr "" +#~ "拔下安全销来使用毒气弹,你将有五回合时间来扔掉它,接下来的几个回合它会在周" +#~ "围释放毒气,让所有进入毒雾的倒霉蛋受到毒害速度下降,顺便毒雾还能阻碍视线," +#~ "掩盖气味,真乃杀人放火、逃命飞奔之必备良器。" #~ msgid "" -#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " -#~ "outside and place a container beneath it to collect water when it rains." +#~ "Use this item to pull the pin. Five turns after you do that, it will " +#~ "begin to expel a thick black smoke. This smoke will slow those who enter " +#~ "it, as well as obscuring vision and scent." #~ msgstr "" -#~ "一个用来收集雨水的小型手工粗制漏斗状装置。户外a键激活放置好,然后在它下面" -#~ "放一个容器就可以收集雨水了。" +#~ "拔下安全销来使用烟雾弹,你将有五回合时间来扔掉它,之后它会释放浓厚的烟雾," +#~ "让所有进入其中的倒霉蛋速度下降,顺便浓烟还能阻碍视线,掩盖气味,真乃杀人放" +#~ "火、逃命飞奔之必备良器。" #~ msgid "" -#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " -#~ "container beneath it to collect water when it rains." +#~ "An advanced version of the unified power supply, or UPS. This device has " +#~ "been significantly redesigned to provide better efficiency as well as to " +#~ "consume plutonium fuel cells rather than batteries." #~ msgstr "" -#~ "一个用来收集雨水的漏斗状装置。户外a键激活放置好,然后在它下面放一个容器就" -#~ "可以收集雨水了。" +#~ "UPS(unified power supply)电源的高级改良版,经过重新设计,不再消耗普通电" +#~ "池而是消耗钚电池。" #~ msgid "" -#~ "A large stand with slots in the side. (a)ctivate it and place it " -#~ "somewhere then set fires in it with no risk of spreading." +#~ "A small hand press for hand loading firearm ammunition. Comes with " +#~ "everything you need to start hand loading." #~ msgstr "" -#~ "侧面有孔的盆子。(a)键把它放在某处,然后在里面点火,火势就不会四处蔓延了。" +#~ "需要手动去压缩弹药填充的枪支,手工装载完弹药便可以拥有你想要的一切。" #~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time. This candle is lit." +#~ "A sharpened stone affixed to a stick, works passably well as an axe but " +#~ "really can't compare to a proper axe." #~ msgstr "" -#~ "一只粗蜡烛,除了提供足够时间的可怜照明亮度之外,也可能有过些奇奇怪怪的用" -#~ "途。这支蜡烛已经点着了。" +#~ "一片锋利的石头被绑在一根棍子上,也能当斧子来用啦,可惜和铁斧相比,就差得远" +#~ "了。" #~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time." +#~ "A portable charcoal fired metalworking forge. Combined with the right " +#~ "tools, you can use this for metalworking." #~ msgstr "" -#~ "一只粗蜡烛,除了提供足够时间的可怜照明亮度之外,也可能有过些奇奇怪怪的用" -#~ "途。" +#~ "一种便携式烧炭金工锻造工具。搭配合适当的工具,您可以用来加工金属物品。" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " -#~ "producing plenty of light" -#~ msgstr "汽油浸过的布胡乱地缠在棍子上,正在燃烧,看,你有光了。" +#~ msgid "Swanzey" +#~ msgstr "斯万泽" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " -#~ "amount of light" -#~ msgstr "汽油浸过的布胡乱地缠在棍子上,点燃了似乎就能照亮四周。" +#~ msgid "Tinmouth" +#~ msgstr "媞莫斯" -#~ msgid "A small tent, just big enough to fit a person comfortably." -#~ msgstr "一顶小帐篷,足够一个人舒舒服服地钻进去睡大觉。" +#~ msgid "Tisbury" +#~ msgstr "媞斯百瑞" -#~ msgid "A sturdy saw, useful for cutting through metal objects." -#~ msgstr "一把坚固的锯子,能切割金属。" +#~ msgid "Trescott" +#~ msgstr "提斯科特" -#~ msgid "" -#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." -#~ msgstr "" -#~ "巨大的双手斧。是个优秀的近战武器,至于速度比较慢,请不要在意这些细节。" +#~ msgid "Tuftonboro" +#~ msgstr "提夫顿波罗" -#~ msgid "A flimsy saw, useful for cutting through wood objects." -#~ msgstr "一个易损坏的锯子,可以用来锯木头。" +#~ msgid "Tyngsborough" +#~ msgstr "提幅墩钵罗夫" -#~ msgid "" -#~ "Designed for combat, and deadly in the right hands. Can be used to " -#~ "butcher corpses." -#~ msgstr "专为战斗设计,右手使用可进行致命攻击。可用于屠宰。" +#~ msgid "Unity" +#~ msgstr "尤尼媞" -#~ msgid "" -#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " -#~ "butchering corpses." -#~ msgstr "一把锋利、厚重的刀子,是个做武器的好材料,也可以用来屠宰尸体。" +#~ msgid "Veazie" +#~ msgstr "维尼兹" -#~ msgid "" -#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " -#~ "corpses." -#~ msgstr "一把尖锐的刀,不是做武器的料,但很适合用来屠宰尸体。" +#~ msgid "Vershire" +#~ msgstr "维夏利" -#~ msgid "" -#~ "A large blade attached to a long stick. Could do a considerable amount of " -#~ "damage." -#~ msgstr "长长的棍子上有个大大的刀片,能造成严重的伤害。" +#~ msgid "Victory" +#~ msgstr "胜利之城" -#~ msgid "" -#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " -#~ "built into the insulated hilt. The blade is glowing brightly." -#~ msgstr "" -#~ "大刀片的一侧有燃料管,和一个小槽和内置在绝缘柄的点火器。刀片会发出明亮的" -#~ "光。" +#~ msgid "Voluntown" +#~ msgstr "沃伦镇" -#~ msgid "" -#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " -#~ "built into the insulated hilt. When filled with gasoline, the blade can " -#~ "be made scorching hot to singe enemies and light your way." -#~ msgstr "" -#~ "大刀片的一侧有燃料管,和一个小槽和内置在绝缘柄的点火器。当装满汽油,刀片可" -#~ "灼热烧焦敌人,照亮你的道路。" +#~ msgid "Waldoboro" +#~ msgstr "沃尔多伯勒" -#~ msgid "" -#~ "A large blade that has had a portion of the handle wrapped in duct tape, " -#~ "making it easier to wield as a rough machete." -#~ msgstr "一把由胶带包裹着手柄的刀片,可以凑合着当砍刀用。" +#~ msgid "Wallagrass" +#~ msgstr "沃格拉斯" -#~ msgid "A huge two-handed sword from Germany. Packs a real whallop." -#~ msgstr "一把德制巨型双手剑,极具视觉冲击力。" +#~ msgid "Wardsboro" +#~ msgstr "沃兹伯勒" -#~ msgid "" -#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " -#~ "makes any battle a stylish battle." -#~ msgstr "很适合绅士与剑士使用的武器,轻盈而迅捷,可以适用于各种战斗。" +#~ msgid "Ware" +#~ msgstr "威尔" -#~ msgid "A simple wood pole made deadlier by the blade tied to it." -#~ msgstr "顶端绑着一把刀刃的长长的木棍,吓唬人很不错。" +#~ msgid "Weld" +#~ msgstr "韦尔德" -#~ msgid "" -#~ "A katana that glows with the fury and heat of the SUN! Well, okay it's " -#~ "not THAT hot, but getting hit with it still stings like the dickens." -#~ msgstr "" -#~ "武士刀可以发出愤怒灼热的光,当然这不是因为热,但它仍然像魔鬼一样刺痛。" +#~ msgid "West Boylston" +#~ msgstr "西博尔斯顿" + +#~ msgid "West Fairlee" +#~ msgstr "西费尔利" + +#~ msgid "West Tisbury" +#~ msgstr "西蒂斯伯里" + +#~ msgid "Westerly" +#~ msgstr "韦斯特里" + +#~ msgid "Westmanland" +#~ msgstr "维斯特曼兰德" + +#~ msgid "Default: %d - Min: %d, Max %d" +#~ msgstr "默认: %d - 最小: %d, 最大: %d" + +#~ msgid "Default: %f - Min: %f, Max %f" +#~ msgstr "默认: %f - 最小: %f, 最大: %f" #~ msgid "" -#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " -#~ "effective against armor." +#~ "Welcome to the Cataclysm tutorial! As you play, pop-ups like this one " +#~ "will\n" +#~ "appear to guide you through the basic game actions. Pressing spacebar " +#~ "will\n" +#~ "close the pop-up." #~ msgstr "" -#~ "一把日本刀,锋利的刀刃可以轻易划开没有护甲的肉体,甚至对于护甲也有很好的穿" -#~ "透力。德艺双馨的苍井空老师曾经拿着它上演过切瓜砍菜的丧尸无双。" +#~ "欢迎来到大灾变CDDA教程之旅,你很幸运的成为了一名大灾变幸存者。\n" +#~ "就像你现在看到的,这样的弹出提示窗口将会贯穿整个基础训练。你可\n" +#~ "以按 '空格' 键关闭这个弹窗。" #~ msgid "" -#~ "This huge iron knife has been modified with a fuel tank, insulated " -#~ "handguard and ignition system. The blade is glowing with heat, making it " -#~ "a great plant scorcher and nightlight." +#~ "The '@' character in the center of the screen represents you. To move, " +#~ "you\n" +#~ "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have " +#~ "your\n" +#~ "character wait in place, press '.'" #~ msgstr "" -#~ "这把大铁刀已经被改装成具备燃料储存,隔热以及点火系统.刀刃因热而发光,让周围" -#~ "变得更亮,同时也变得非常热." - -#~ msgid "This huge iron knife makes an excellent melee weapon." -#~ msgstr "这是把巨大的铁刀,可以作为青龙偃月刀使。" +#~ "这个屏幕中间的 '@' 字符就是你啦!长的不够帅?没关系,活下去就行\n" +#~ "你可以使用数字小键盘、vi键 (hjklyubn)、或者方向键来进行移动。你也\n" +#~ "可以按 '.' 让你的小@呆在那里任凭时间流逝。" #~ msgid "" -#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " -#~ "precision strike in the hands of the skilled." +#~ "To see what the symbols around you mean, press ';'. You'll be able to " +#~ "scroll\n" +#~ "around and get information on the terrain, monsters, and items in the " +#~ "world\n" +#~ "around you." #~ msgstr "" -#~ "一把小型的,非常锋利的刀具,被广泛应用于各项外科手术中。如果你很擅长近战武" -#~ "器的话,它也会是一件大杀器。" +#~ "观察周围的环境,你可以按 ';' 。这时候你可以四处移动\n" +#~ "光标来得到关于在你周围的地形、怪物、物品的讯息。" #~ msgid "" -#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " -#~ "with. Its small tip allows for a precision strike in the hands of the " -#~ "skilled. It is too small to butcher corpses with." +#~ "That brown '+' next to you is a closed door. To open it, either simply " +#~ "walk\n" +#~ "into it, or press 'o' and then a movement key." #~ msgstr "" -#~ "一把小型的,非常锋利的刀具,伤害不错但很难打中敌人。锋利的它可以用来屠宰尸" -#~ "体。" +#~ "你身旁的棕色 '+'是一扇关闭的房门。要打开它,简单点你可以\n" +#~ "直接移动过去,或者按小写字母 'o' 再配合方向键。" #~ msgid "" -#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " -#~ "from the floor, making it easier to sleep" +#~ "You can close an opened door by pressing 'c' and then a movement key. " +#~ "Closing\n" +#~ "doors behind you can often slow down throngs of monsters greatly." #~ msgstr "" -#~ "一大张卷起来的泡沫塑料,很方便存放的样子,如果铺开也能当做一个床铺来使用。" +#~ "你可以用 'c'配合方向键来关闭已经打开的门。养成随手关门的好习惯\n" +#~ "可以有效的延缓怪物野兽接近你的速度。关键时可是能救下你的小命哦。" #~ msgid "" -#~ "A military style fold up cot, not quite as comfortable as a bed but much " -#~ "better than slumming it on the ground." -#~ msgstr "一张折叠起来的行军床,虽然没家里的床舒服,但至少比睡在地上好多了。" +#~ "Most monsters will have to smash their way through a closed door. If a " +#~ "door\n" +#~ "is locked or stuck, you can smash it by pressing 's' and then a movement " +#~ "key." +#~ msgstr "" +#~ "大多数怪物不得不破坏掉关闭的房门才能进入。而对于你这个普通人,\n" +#~ "可以按 's' 配合方向键来破坏锁住或者堵住的房门。当然这和你手里拿的\n" +#~ "家伙也有直接关系。" -#~ msgid "A tool for welding metal pieces together. Useful for construction." -#~ msgstr "用来焊接金属的工具,非常有用。" +#~ msgid "You %4$s the %1$s into %2$i %3$s." +#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." +#~ msgstr[0] "你 %4$s 这 %1$s 变成 %2$i %3$s。" #~ msgid "" -#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " -#~ "the sample. Use this tool to draw blood, either from yourself or from a " -#~ "corpse you are standing on." -#~ msgstr "" -#~ "一个用于抽血的工具,真空密封的针筒可以存放血样。你可以用它抽血,至于是抽你" -#~ "自己的,还是其他什么奇怪生物的,随你的兴趣了。" +#~ "A brass-jacketed .22 calibre round with superior penetration capacity." +#~ msgstr ".22黄铜被甲高穿透力子弹。" #~ msgid "" -#~ "A small whistle. When used, it produces a high tone that causes nearby " -#~ "friendly dogs to either follow you closely and stop attacking, or start " -#~ "attacking enemies if they are currently docile." -#~ msgstr "" -#~ "一只小型的哨子,吹它的时候会产生一种高频的声波,让附近所有非敌对状态的狗狗" -#~ "都会向你靠拢并为你而战。" +#~ "A bottle filled with match heads and equipped with a fuse. Use this item " +#~ "to light the fuse; you will, of course, need a lighter in your inventory " +#~ "to do this. After lighting it, throw it to cause fires." +#~ msgstr "一个塞满火柴头的瓶子并装备了导火索。用打火机点燃它,然后纵火吧!!" + +#~ msgid "Akiko" +#~ msgstr "亜希子" + +#~ msgid "Daisuki" +#~ msgstr "だいすき" + +#~ msgid "Aizawa" +#~ msgstr "相沢" #~ msgid "" -#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " -#~ "and ticking!" -#~ msgstr "" -#~ "一不留神就会爆炸的东西,使用时千万要小心啊!外面露出来一个小巧的计时器,正" -#~ "在滴滴答答地响呢。" +#~ "A powdered antihemorrhagic compound which reacts with blood to " +#~ "immediately form a gel-like substance which stops bleeding." +#~ msgstr "止血粉,用于止血和抗复合反应" -#~ msgid "Highly explosive, use with caution! Armed with a small timer." -#~ msgstr "" -#~ "一不留神就会爆炸的东西,使用时千万要小心啊!外面露出来一个小巧的计时器,好" -#~ "像可以激活吧。" +#~ msgid "Kira" +#~ msgstr "基拉" -#~ msgid "A crude explosive device triggered by a piece of string." -#~ msgstr "" -#~ "由引线启动的简陋炸药。再也不用担心炸弹捻被人不小心踩灭的尴尬事情发生了。" +#~ msgid "Keita" +#~ msgstr "庆太" -#~ msgid "Food for dogs. It smells strange, but dogs love it." -#~ msgstr "狗粮,闻起来很奇怪,但是狗狗喜欢。" +#~ msgid "Hikari" +#~ msgstr "光" -#~ msgid "A human skull with strange etchings covering it." -#~ msgstr "这是一个雕刻着奇怪刻印的人的头骨。" +#~ msgid "Nuku" +#~ msgstr "努库" -#~ msgid "" -#~ "A stone with spirals all over it, and holes around its perimeter. Though " -#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " -#~ "it." -#~ msgstr "" -#~ "一块遍布漩涡刻痕的石头,四周遍布着孔洞。虽然看上去不小,但几乎没有重量,似" -#~ "乎有气流聚集在这块石头的周围。" +#~ msgid "Natsuki" +#~ msgstr "夏纪" -#~ msgid "" -#~ "A portable games console in working condition, with a backlit screen " -#~ "allowing you to play in the dark. You can use it to play it for a little " -#~ "while, but this requires batteries." -#~ msgstr "" -#~ "一个完好的便携式游戏机,它有一个背光屏幕可以在黑暗中使用,你需要电池才能玩一" -#~ "会." +#~ msgid "Kyosuki" +#~ msgstr "京介" -#~ msgid "" -#~ "A high-powered stun gun. Use this item to attempt to electrocute an " -#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " -#~ "shock can actually jump through the air, it is difficult to miss." -#~ msgstr "" -#~ "这是一把高功率的电击枪。使用它可以使指定地点及临近的敌人受伤且暂时瘫痪。因" -#~ "为该攻击是像电磁炮一样穿梭于空气中的,所以很难Miss。" +#~ msgid "Heather" +#~ msgstr "希瑟" -#~ msgid "" -#~ "A unified power supply, or UPS, is a device developed jointly by military " -#~ "and scientific interests for use in combat and the field. The UPS is " -#~ "designed to power armor and some guns, but drains batteries quickly." -#~ msgstr "" -#~ "UPS电源,即不间断电源供应,军事设施及研究设施里很常见。用于给某些装甲和枪" -#~ "械供能。" +#~ msgid "Van Wilde" +#~ msgstr "范·维尔德" -#~ msgid "" -#~ "An inactive turret. Using this item involves turning it on and placing it " -#~ "on the ground, where it will attach itself. The turret will then identify " -#~ "you as a friendly, and attack all enemies with an SMG." -#~ msgstr "" -#~ "一座未激活的炮塔。使用它时需打开它然后放在地上。炮塔和你默认是友方,并用机" -#~ "枪攻击你的敌人。" +#~ msgid "Takeuchi" +#~ msgstr "竹内" -#~ msgid "" -#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " -#~ "air. They are covered with whirring blades and attack by throwing " -#~ "themselves against their target. Use this item to activate the manhack." -#~ msgstr "" -#~ "一个未激活的飞锯,只有拳头大,能在空中旋转飞行。表面全是呼呼作响的刀刃,通" -#~ "过把自己扔到目标处来攻击。使用可以激活之。" +#~ msgid "West" +#~ msgstr "韦斯特" -#~ msgid "A rare and arcane device, covered in alien markings." -#~ msgstr "这是一件很神秘的设备,上面刻满了奇怪的符号。" +#~ msgid "Yuki" +#~ msgstr "由纪" + +#~ msgid "Stepped on bubblewrap." +#~ msgstr "踩上气泡袋。" #~ msgid "" -#~ "This miniature nuclear bomb has a light blinking on the side, showing " -#~ "that it will soon explode. You should probably get far away from it." -#~ msgstr "这种微型核弹的指示灯正在闪烁,它很快就要爆炸,你不跑开就会挂。" +#~ "You just stepped on a space with one or more items. If you wish to pick " +#~ "it\n" +#~ "up, press ',' or 'g'." +#~ msgstr "若你刚好踩在一个或多个物品上,如果想捡起物品,按',' 或 'g'。" #~ msgid "" -#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " -#~ "it to activate the timer. Ten turns later it will explode, leaving behind " -#~ "a radioactive crater. The explosion is large enough to take out a house." +#~ "You can smash through windows by pressing 's' and then a movement key. " +#~ "A\n" +#~ "smashed window takes a long time to climb through, and it's possible to " +#~ "hurt\n" +#~ "yourself on the broken glass, but it's a good last-ditch escape route. " +#~ "You\n" +#~ "can smash through other things, too; use the ';' command and look for " +#~ "things\n" +#~ "that are \"Smashable.\"" #~ msgstr "" -#~ "威力极强的武器——手持核弹。你可以激活它的计时器,10回合就会爆炸,威力足以摧" -#~ "毁房屋,产生一个放射性弹坑。" +#~ "你可以按然‘s’然后按移动键打破窗户。一个破碎的\\n\n" +#~ "窗户需要很长时间才能爬上通过,并且破碎的玻璃\\n\n" +#~ "有可能划伤你自己,但它是一个很好的最后逃生路\\n\n" +#~ "线。你也可以凭此做其他的事情;使用“;”命令可以\\n\n" +#~ "查看物品能否摧毁。" #~ msgid "" -#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " -#~ "before it explodes." +#~ "The item you just picked up is a tool! To activate a tool, press 'a'. " +#~ "Some\n" +#~ "tools have a set charge, which can be reloaded once depleted. Other are\n" +#~ "single-use items, and still others are reusable." #~ msgstr "" -#~ "一个被点火的鞭炮,引信燃烧的同时还在嘶嘶作响。动作快一点,不然就等着被炸伤" -#~ "吧!" +#~ "你刚刚捡起的物品是件工具!按“a”可以激活工具。一些工具\n" +#~ "有使用次数,当用光时是能重新加载的。在工具中虽然部分\n" +#~ "是一次性物品,但还有些是可重复利用的。" #~ msgid "" -#~ "A firecracker with a short fuse. Use this item to light the fuse; you " -#~ "will need a lighter of course. Shortly after you light the fuse it will " -#~ "explode, so throw it quickly!" +#~ "The Examine command is useful for grabbing items off window frames, " +#~ "around\n" +#~ "corners, etc. It's also used for interacting with a few terrain types.\n" +#~ "Interactive terrain is usually designated with a '6' symbol." #~ msgstr "" -#~ "一个鞭炮,引信短而且可以被点燃,当然,你还是要用到打火机。引信燃烧时间很" -#~ "短,所以动作快一点,不然就等着被炸伤吧!" +#~ "“检查”命令(e)可让你从周围的窗框,拐角等处\n" +#~ "拿取物品。它也用于与几种地形互动。\n" +#~ "可互动的地形通常以符号“6”表示。" #~ msgid "" -#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " -#~ "them quickly before the start to explode." +#~ "You don't have space in your inventory to store the item you just tried " +#~ "to\n" +#~ "pick up. You need to wear something with storage space, like a backpace " +#~ "or\n" +#~ "cargo pants, to gain more storage space." #~ msgstr "" -#~ "25个鞭炮捆在了一起,引信燃烧的同时还在嘶嘶作响。动作快一点,不然就等着被炸" -#~ "伤吧!" +#~ "你的身上装不下该物品你只能拿在手上,你需要穿一些\\n\n" +#~ "可以装东西的衣物,比如一个背包或一条裤子,以获得\\n\n" +#~ "更多的存储空间。" #~ msgid "" -#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " -#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " -#~ "they will begin to explode, so throw them quickly!" +#~ "The item you just picked up has been wielded as a weapon automatically. " +#~ "This\n" +#~ "happened because you do not have space in your inventory to stash the " +#~ "item,\n" +#~ "and so you must carry it in your hand. To expand your inventory space, " +#~ "try\n" +#~ "wearing clothing with a lot of storage space, like a backpack, or cargo " +#~ "pants." #~ msgstr "" -#~ "这是一捆摆放的很整齐的鞭炮,数了数,共有25支。如果你身上有打火机,使用这捆" -#~ "鞭炮就能将它们点燃。请记得,它们的引信很短,所以点燃之后立刻丢掉它!吸引丧" -#~ "尸的绝佳物品。" +#~ "当你拿起该物品这自动视为武器使用。这是因为你的身上\\n\n" +#~ "不够空间装下该物品,所以你只能把它拿在手里。扩大你\\n\n" +#~ "的携带空间,尝试穿有大量的携带空间的衣物,像一个背\\n\n" +#~ "包或一条裤子。" #~ msgid "" -#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " -#~ "now." -#~ msgstr "引信嘶嘶地燃烧着。炸药随时都要爆了!" +#~ "The item you just picked up has been wielded as a weapon automatically. " +#~ "This\n" +#~ "happened because it is a good melee weapon, and you were empty-handed. " +#~ "This\n" +#~ "usually is faster than than picking it up, then wielding it." +#~ msgstr "" +#~ "你刚才拾取的物品将自动视为武器使用。这是因为该物品是一个很好\\n\n" +#~ "的近战武器,同时你两手空空没拿东西。这种判定通常比先捡起来再\\n\n" +#~ "装备使用要快。" #~ msgid "" -#~ "Several sticks of explosives with a fuse attached. Use this item to light " -#~ "the fuse; you will, of course, need a lighter in your inventory to do " -#~ "this. Shortly after lighting the fuse, this item will explode, so get " -#~ "away!" +#~ "The item you just picked up went into your inventory, the shared storage\n" +#~ "space of all the clothing you're wearing. To view your inventory, press " +#~ "'i'.\n" +#~ "You can then press the letter of any item to get more information about " +#~ "it." #~ msgstr "" -#~ "几个棍棒形的炸药,外面露出了导火线,很容易被点燃。当然,你还是要用到打火" -#~ "机。引信燃烧时间很短,在爆炸前,快点跑吧!" +#~ "你刚才捡的物品放进了物品栏,并共享所有已装备衣服的\n" +#~ "存储空间。按“i”键查看你的道具栏。之后您可以按任何物\n" +#~ "品对应的字母来获得更多它的信息。" #~ msgid "" -#~ "A glass vial, with two chemicals mixing inside. If this mixture is " -#~ "exposed to air (as happens if you throw the vial), they will spill out as " -#~ "a pool of potent acid." +#~ "The item you just picked up is a type of clothing! To wear clothing, " +#~ "press\n" +#~ "W and then select an item. To take off clothing, press T, or simply take " +#~ "it\n" +#~ "off and drop it in one action by pressing d." #~ msgstr "" -#~ "这是一个两种化学物质混合着的玻璃瓶,如果你把这两种液体的混合物暴露在空气中" -#~ "(比如说丢出去),所投掷的地区将形成一片持续的强酸液。" +#~ "你刚刚捡起的物品是衣物类型!你得把衣服穿上\n" +#~ "——按“w”,然后选择物品。要脱衣服,按“T”,\n" +#~ "或按“d”——简单地把它脱掉并扔在地上。" #~ msgid "" -#~ "A glass vial, split into two chambers. The divider is removable, which " -#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " -#~ "happens if you throw the vial) they will spill out as a pool of potent " -#~ "acid." +#~ "The item you just picked up is a good weapon! To wield a weapon, press " +#~ "w,\n" +#~ "then pick what to wield. To wield nothing, either drop your weapon with " +#~ "d,\n" +#~ "or press 'w-' to put it away. A zombie has spawned nearby. To attack " +#~ "it,\n" +#~ "simply move into it." #~ msgstr "" -#~ "这是一个被分割成两个空间的玻璃小瓶,两个空间中有东西格挡着,如果取下挡板," -#~ "并把两种液体的混合物暴露在空气中(比如说丢出去),所投掷的地区将形成一片持" -#~ "续的强酸液。" +#~ "你刚捡起的物品是件好武器!按“w”,选择这个武器再\n" +#~ "装备它。要玩徒手?那么按“d”把你的武器扔在地上,\n" +#~ "或按“w -”收起它。一个僵尸在附近溜达。要攻击它\n" +#~ "就向它所在的方向移动,干掉它!" #~ msgid "" -#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " -#~ "the rag; you will, of course, need a lighter in your inventory to do " -#~ "this. After lighting it, throw it to cause fires." +#~ "The item you just picked up is a comestible! To eat a comestible, press " +#~ "'E'.\n" +#~ "Comestibles are items you can use up, like food, drink, pills, etc. " +#~ "Most\n" +#~ "food expires eventually, so be careful. Some comestibles, especially " +#~ "drugs,\n" +#~ "can cause subtle, long-term effects." #~ msgstr "" -#~ "一瓶塞着一块破布的易燃液体。(a)使用,你就能用打火机点燃它。如果渴了也可以" -#~ "喝掉它,难道我骗过你吗?" +#~ "你刚才捡了个“可食物”!要吃它按“E”。“可食物”\n" +#~ "是消耗品,如食品、饮料、药丸等能吃的都是。\n" +#~ "要当心,多数食品最终会过期的。一些“可食物”\n" +#~ ",特别是药物,可能会导致长期而微妙的影响。" #~ msgid "" -#~ "This canister of teargas has had its pin removed, indicating that it is " -#~ "(or will shortly be) expelling highly toxic gas." -#~ msgstr "这种催泪瓦斯罐的封口被去掉了,这说明它正在(或将要)释放剧毒气体。" - -#~ msgid "active teargas" -#~ msgstr "催泪弹(已激活)" +#~ "The nearby { is a display rack, and the blue background indicates that " +#~ "there\n" +#~ "are items there. If you examine the square by pressing 'e', you can pick " +#~ "up\n" +#~ "items without moving to the square." +#~ msgstr "" +#~ "附近的 { 是一个展示架,蓝色的背景说明上面有东西。\\n\n" +#~ "如果你按‘e’检查方块(例:展示架),你能捡起物品而\\n\n" +#~ "不移动方块(例:展示架)" #~ msgid "" -#~ "This EMP grenade is active, and will shortly detonate, creating a large " -#~ "EMP field that damages robots and drains bionic energy." +#~ "The item you just picked up is a firearm! Guns are very powerful weapons " +#~ "but\n" +#~ "they require ammunition. Firearms have many special attributes. Most\n" +#~ "modify the damage done by their ammunition. They also have dispersion, " +#~ "which\n" +#~ "affects their chance to hit. Some guns are semi-automatic, while others " +#~ "can\n" +#~ "fire a burst. Some firearms (mainly bows and other muscle-powered " +#~ "weapons)\n" +#~ "have a range, which is added on top of the ammo's range when firing." #~ msgstr "" -#~ "很好,这个EMP手雷已经被激活了,你需要做的就是把它用力丢出去,然后...就等着" -#~ "瞧吧。" +#~ "刚刚你捡起的物品是枪支!枪支是非常NB的武器,但\n" +#~ "是他们需要弹药。枪支有许多特殊属性。你所选\n" +#~ "择的子弹最影响它们的“威力”。而“散布”影响它们\n" +#~ "的命中率。一些枪支是半自动的,另一些可以点射。\n" +#~ "一些远程武器(主要是弓和其他使用肌肉动力的武器)\n" +#~ "有“射程”加成,这个属性增加了了弹药的发射时的射程。" #~ msgid "" -#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " -#~ "will then have three turns before it detonates, creating an EMP field " -#~ "that damages robots and drains bionic energy." +#~ "That drug you just took is a painkiller. Painkillers are very important " +#~ "to\n" +#~ "keep on hand, as pain both penalizes your stats and makes you slower. " +#~ "Be\n" +#~ "careful, as the stronger painkillers can make you woozy, and some are " +#~ "even\n" +#~ "addictive." #~ msgstr "" -#~ "拔下安全销来使用EMP手雷,你有三回合时间去扔掉它,它会产生一个电磁场来使其" -#~ "周围的电子设备瘫痪,他是机械人的最(ke)爱(xing)。" +#~ "你捡起的药物是一盒止痛药。止痛药是非常重要的,应该\n" +#~ "保留在手边,因为“疼痛”降低你的属性并让你变慢。要小心\n" +#~ "使用,因为强效止痛药会使你头昏眼花的,有时甚至会让你\n" +#~ "上瘾。" #~ msgid "" -#~ "This grenade is active, and will explode any second now. Better throw it!" +#~ "You just put on an article of clothing that provides ample storage " +#~ "space.\n" +#~ "This will allow you to carry much more stuff, but be aware that there is " +#~ "also\n" +#~ "a limit on the weight you can carry which depends on strength. The item " +#~ "you\n" +#~ "put on also encumbered your torso. This will make combat a little more\n" +#~ "difficult. To check encumberance, press @." #~ msgstr "" -#~ "正如字面所述,这颗手雷已经被激活了然后呢,你剩下的时间也不多了,向着远方迈" -#~ "步吧,真男人从不回头看爆炸。" +#~ "你刚穿上了一件提供携带空间的衣服,这将允许你携带更多\\n\n" +#~ "的东西,但要知道,还有你的体重可以决定行动强度极限。\\n\n" +#~ "你穿上的衣物也会拖累你的身体各部分。这将使战斗更困难\\n\n" +#~ "的,阻碍行动,按@可查看人物状态。" #~ msgid "" -#~ "A section of a pipe filled with explosive materials. Use this item to " -#~ "light the fuse, which gives you 3 turns before it detonates. You will " -#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." +#~ "You just put on an article of clothing that protects against the " +#~ "environment.\n" +#~ "The most common and imporant are respiratory devices, which will protect " +#~ "you\n" +#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" +#~ "However, they also make it a little harder to breath when running, so " +#~ "you'll\n" +#~ "move more slowly. To check encumberance, press @." #~ msgstr "" -#~ "看起来普普通通的小铁筒,里面却塞满了炸药。用打火机点燃引信,仅仅3回合就会" -#~ "爆炸了。话虽如此,这个简陋的炸弹说不准就成了哑弹了。" +#~ "你刚刚穿上那套衣服可以形成环境防护。最\n" +#~ "常见也是重要的是呼吸设备,它们能从烟雾、\n" +#~ "空气毒素、微生物和其他常见的危害中保护\n" +#~ "你。然而,它们也使你不能顺畅地呼吸,你会\n" +#~ "移动得更慢。按“@”,检查\"累赘度\"。" #~ msgid "" -#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " -#~ "sentient. Open at your own risk.\"" -#~ msgstr "警告:内含剧毒及极强腐蚀性物质,该物质活性极强,开启后果自负。" +#~ "The item you just picked up is ammunition, used with a gun. It has many\n" +#~ "special attributes. The damage value is the maximum done on a standard " +#~ "hit;\n" +#~ "a critical hit or headshot will do much more damage. Some monsters or " +#~ "NPCs\n" +#~ "will wear armor which reduces the damage from gunfire; a high Armor-" +#~ "pierce\n" +#~ "value will reduce this effect. The Range is the maximum range the ammo " +#~ "can\n" +#~ "achieve, and the dispersion affects its chance to hit." +#~ msgstr "" +#~ "你刚刚捡起的东西是弹药,要发射它你需要把枪。\n" +#~ "它有很多特殊属性。“伤害”一个标准命中造成的最\n" +#~ "大伤害;致命一击或爆头将造成更大伤害。\n" +#~ "有些怪物或npc的护甲降低的射击伤害;高“穿甲”值\n" +#~ "会降低这种影响。“射程”是弹药可以发挥作用的最\n" +#~ "大距离,“散射”影响命中几率。" #~ msgid "" -#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " -#~ "you to teleport a short distance away." +#~ "You just put on an article of clothing that provides physical " +#~ "protection.\n" +#~ "There are two types of damage that clothing defends against, bashing, " +#~ "and\n" +#~ "cutting. Most monsters deal bashing damage, but cutting is often the " +#~ "more\n" +#~ "deadly of the two. Bullets are considered cutting damage." #~ msgstr "" -#~ "这是一个神秘的装置,需要钚电池供能,能让你传送一小段距离。至于会不会传到怪" -#~ "物堆里,那就听天由命了。" +#~ "你刚穿上一件衣服,它能提供物理防护。服装的防御有两种类\\n\n" +#~ "型,钝击和劈砍。大多数的怪物攻击为钝击伤害,但劈砍往往\\n\n" +#~ "是更致命的。枪击视为劈砍损伤。" #~ msgid "" -#~ "A tool for measuring radiation. It is in continuous scan mode, and will " -#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " -#~ "it allows you to turn it off, or scan yourself or the ground." +#~ "Taking damage often causes pain. Small amounts of pain are tolerable, " +#~ "but as\n" +#~ "it gets worse your stats will drop and you will move much slower. To " +#~ "reduce\n" +#~ "pain, take painkillers like codeine, or simply wait it out." #~ msgstr "" -#~ "本产品适用于监测辐射。提示:本产品正处于持续扫描模式下,一旦检测到强辐射会" -#~ "发出无声警报。再次使用可以切换模式,转为一次性扫描,或是终止运行。" +#~ "受到伤害通常会引起“疼痛”。少量的疼痛可以忍受,但是痛\n" +#~ "苦加剧会引起你属性下降,同时你将更慢的行动。要消除“\n" +#~ "疼痛”,请服用可待因等止痛药,或让时间抚平你的伤痛。" #~ msgid "" -#~ "A tool for measuring radiation. Using it will prompt you to choose " -#~ "whether to scan yourself or the terrain, or to turn it on, which will " -#~ "provide continuous feedback on ambient radiation." +#~ "When you kill a monster it will often leave behind a corpse. Corpses can " +#~ "be\n" +#~ "important sources of food, but you must Butcher them by standing on the\n" +#~ "corpse and pressing 'B'. You'll need a bladed weapon in your inventory,\n" +#~ "preferably a small, very sharp one. An unskilled butcher may only get a " +#~ "few\n" +#~ "pieces of meat, or none at all. Note that many monsters, such as " +#~ "zombies,\n" +#~ "leave tainted meat, unsuitable for consumption." #~ msgstr "" -#~ "本产品适用于监测辐射,可以用于持续监测周围环境的辐射,也可以扫描一次你的身" -#~ "体或是周围的地形,检测辐射是否超标。" +#~ "你杀死一个怪物时,往往会留下尸体。尸体是你食物的\n" +#~ "重要来源,但必须去掉头再吃。所以你必须通过站在尸\n" +#~ "体上按“B”来屠宰他们。你的物品栏中必须有带刃的武\n" +#~ "器,最好是小型,锋利的那种。一个如果你不熟练的话只\n" +#~ "能取得几块肉,或根本没有肉。注意!许多怪物,如僵尸,\n" +#~ "只能爆出受污染的肉类,不适合食用。" -#~ msgid "An anti-personnel mine that is triggered when stepped upon." -#~ msgstr "这是一个已经埋设好的地雷,一旦踩上就会爆炸。" +#~ msgid "" +#~ "If you press 'i' and then the letter of your weapon, you'll see its " +#~ "combat\n" +#~ "stats. Bashing damage ignores most armor, but varies greatly and " +#~ "requires\n" +#~ "strength. Cutting damage is a fixed amount, but is blocked by armor. " +#~ "The\n" +#~ "To-hit bonus affects your chances of hitting. The amount of time it takes " +#~ "to\n" +#~ "swing your melee weapon depends on both its size and weight; small, " +#~ "compact\n" +#~ "weapons are the fastest." +#~ msgstr "" +#~ "如果你按“i”然后选择你的武器所对应的字母,你将会\n" +#~ "看到它的战斗属性,“冲击”伤害将会穿透多数护甲。\n" +#~ "“切割”伤害是一个较大的固定量,但会被护甲阻挡。\n" +#~ "“命中加成”影响你的命中率。“延迟时间”影响你武器\n" +#~ "的挥舞频率,这个属性取决于该武器的大小和重量;\n" +#~ "轻巧而紧凑的武器是最快的。" #~ msgid "" -#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " -#~ "Requires a tree nearby. Effective at trapping monsters." +#~ "Hitting a monster will stun it briefly, allowing you to escape or get in\n" +#~ "another attack. Your dexterity and melee skills are used to determine\n" +#~ "whether an attack hits, while strength affects damage." #~ msgstr "" -#~ "这是由粗绳与有活结的套索组成的一个简单的陷阱,需要附近有一棵树,猎物掉到其" -#~ "中就会被网住。" +#~ "命中一个怪物将令它短暂硬直,允许你逃跑或进行\n" +#~ "另一次攻击。你的敏捷和近战技能影响你的攻击\n" +#~ "是否命中,而力量影响所造成的伤害。" #~ msgid "" -#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " -#~ "Requires a young tree nearby. Effective at trapping and killing some " -#~ "small animals." +#~ "It's dark down here! Without a source of light, you'll be limited to " +#~ "seeing\n" +#~ "only one space in any direction. You'll encounter darkness while " +#~ "underground\n" +#~ "or at night. Press '<' to go back upstairs, and look around for a " +#~ "flashlight." #~ msgstr "" -#~ "这是由细绳与有活结的套索组成的一个简单的陷阱。需要附近有颗小树,用来诱捕可" -#~ "怜且美味的小动物。" +#~ "现在一片黑暗!没有光源,您只能看到你周围的一格。\n" +#~ "每到夜晚降临或你身在地下你都会被黑暗包围。\n" +#~ "按“<”回到楼上,去寻找一个手电筒。" #~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " -#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " -#~ "time the trigger is pulled, one or two may be used." +#~ "Once you have a loaded gun wielded, you can fire it. Press the 'f' key " +#~ "to\n" +#~ "fire a single shot. With many guns, you can fire a burst by pressing " +#~ "'F'.\n" +#~ "You'll automatically target the last monster you shot at, or the closest\n" +#~ "monster to you. You can change your target with the movement keys, or " +#~ "cycle\n" +#~ "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " +#~ "hit\n" +#~ "the escape key." #~ msgstr "" -#~ "一根轻巧的棉线轻柔地连在了短管霰弹枪的扳机之上,只要轻轻一拨,霰弹枪就会双" -#~ "管齐发,给那位不幸的家伙一个痛快。" +#~ "当你持有一把上膛的枪时,你可以射击。按'f'键\n" +#~ "进行点射。许多枪械可以用”F“键进行连射。\n" +#~ "你会自动瞄准你最后一次射击的敌人,或者是\n" +#~ "距你最近的敌人。你可以用方向键更改目标,\n" +#~ "或用“<\"键和”>“键切换目标。按”f“或”.“射击,\n" +#~ "按esc取消射击。" #~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " -#~ "pulled, the crossbow fires. Only a single round can be used, after which " -#~ "the trap is disabled." +#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " +#~ "using\n" +#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " +#~ "your\n" +#~ "gun, possibly to change ammunition types, press 'U'." #~ msgstr "" -#~ "一根轻巧的棉线轻柔地连在了弩的扳机之上,只要轻轻一拨,一支致命的短矢就会直" -#~ "奔目标而去,把它扎成巫毒娃娃。" +#~ "要使用枪支,有三个步骤,首先 按”w“键握住它;然后只要你有合\n" +#~ "适的弹药,你需要使用“r”键来装填弹药;最后,如果你想卸载你\n" +#~ "的弹药,可能只是为了改变弹药类型,按“U”键。" #~ msgid "" -#~ "A tripwire trap must be placed across a doorway or other thin passage. " -#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " -#~ "hurt themselves minorly." +#~ "After firing your gun, you will probably notice a Recoil alert in the " +#~ "lower\n" +#~ "right. Generally speaking, the more damaging the ammo, the worse the " +#~ "recoil.\n" +#~ "Recoil severely reduces your chance to hit, but you can eliminate recoil " +#~ "by\n" +#~ "pausing ('.') for a turn or moving normally. High strength reduces " +#~ "recoil,\n" +#~ "so weak characters might want to stick to .22 or 9mm guns." #~ msgstr "" -#~ "绊索陷阱,只能设置在门口或是狭窄的走廊。它可以用来困住经过的对象,将对方绊" -#~ "倒的同时也可能造成轻微伤。" +#~ "你射击后,你可能会注意到一个后坐力指示器在右下\n" +#~ "角。一般来说,更具威力的弹药,后坐力越强。后坐力\n" +#~ "严重影响了你的命中率,但是你可以消除反坐力通过\n" +#~ "暂停(“.”)一回合或正常移动。高力量减少后坐力,\n" +#~ "所以一个弱子可能只能撸.22或9mm了。" #~ msgid "" -#~ "Several pieces of wood, nailed together, with nails sticking straight up. " -#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." +#~ "You just activated a grenade! You probably want to throw it. To throw " +#~ "an\n" +#~ "item, press 't' and then select the item to throw. The maximum range " +#~ "depends\n" +#~ "on your strength and the object's weight and size. Throwing isn't very " +#~ "good\n" +#~ "in most combat situations, but if you've got some fire power..." #~ msgstr "" -#~ "这是一块厚实的木板,其中一端上有几枚长长的钉子。极简主义的杀人利器。" +#~ "你刚刚激活一个手雷!你可能想把它扔了。要投掷一个\n" +#~ "道具,按“t”,然后选择要扔的道具。最大投掷范围取决于\n" +#~ "在你的力量和头植物的重量和尺寸。在大多数战斗中\n" +#~ "投掷不是很好的选择,但是如果你有一些NB的火力…" #~ msgid "" -#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " -#~ "creating a trap that will ensnare and damage anything that steps on it. " -#~ "If you are carrying a shovel, you will have the option of burying it." +#~ "You're carrying more volume than you have storage for, which means you " +#~ "are\n" +#~ "carrying some stuff in the crook of your arm or in some other awkward " +#~ "manner.\n" +#~ "While overloaded like this, you will suffer SEVERE encumberment " +#~ "penalties,\n" +#~ "making combat dangerous. Either drop an item, or possibly wield " +#~ "something--\n" +#~ "the object you are wielding does not take up inventory space." #~ msgstr "" -#~ "一副装有弹簧的铁爪。布置在地面上做成陷阱,可以保证每个失足踩上来的家伙喝上" -#~ "一壶。如果你随身带着铁铲,你将可以选择埋设它。" +#~ "你能携带比你物品栏限制体积更多的(一个或一组)东西,\n" +#~ "这意味着你将用你的手臂或在其他一些尴尬的方式携带这个\n" +#~ "臃肿的东西。但是在超载章台,你将遭受严重的累赘度惩罚,\n" +#~ "这让接下来的战斗变得危险起来。要么扔掉这个道具,你握\n" +#~ "住这个道具——你握住的道具不占用物品储存空间。" #~ msgid "" -#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " -#~ "the ground, creating a trap that will warn you with noise when something " -#~ "steps on it." +#~ "You just placed a trap. Traps are permanent until set off, and can be " +#~ "an\n" +#~ "important defensive tactic, particularly when sleeping in unsafe " +#~ "territory.\n" +#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." #~ msgstr "" -#~ "这是一层又一层的泡沫塑料,如果有东西踩过它的话,会发出足够的响声以提醒在附" -#~ "近活动的你。" - -#~ msgid "bubblewrap" -#~ msgstr "警戒陷阱" +#~ "你捡起了一个陷阱。陷阱是永久的直到你设置它。设置陷\n" +#~ "阱是一个重要的防守策略,特别是当你睡在不安全地区的时\n" +#~ "候。试着踩“_”——别担心,这是一个无害的气泡陷阱。" #~ msgid "" -#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " -#~ "adjacent solid terrain." +#~ "That yellow > next to you is a staircase leading down. To go downtairs, " +#~ "step\n" +#~ "onto the staircase and press the '>' key. Similarly, a yellow < is " +#~ "stairs\n" +#~ "leading up, and can be followed with the '<' key." #~ msgstr "" -#~ "这把冲击钻靠汽油来驱动,使用之后,可以把附近的地面或者敌人钻出一个大洞来。" - -#~ msgid "" -#~ "Using this item will, if loaded with gas, cause it to turn on, making a " -#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." -#~ msgstr "加满油,然后打开开关。听着运行时的噪音,你挥舞着它开始大杀特杀!" +#~ "那在你旁边黄>是下行楼梯。要通往下一层,踩在上面\n" +#~ "按'“>”键。同样,一个黄色的<是上行楼梯,可以按“<”键\n" +#~ "上楼。" #~ msgid "" -#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " -#~ "a vehicle." -#~ msgstr "一个灵活的橡胶软管。可以用于制造,或者从别人的汽车里偷油出来。" +#~ "That drug you just took placed an effect on you. To check your effects,\n" +#~ "press '@'. Most only last a short while, while others, like chronic " +#~ "disease,\n" +#~ "last until cured by some other means." +#~ msgstr "" +#~ "刚才嗑的药在你身上起效了。按“@”检查它的效果。\n" +#~ "大多数效果只持续很短一段时间。但是另一些,如\n" +#~ "慢性病,将持续直到通过一些方式治愈。" -#~ msgid "A listening tool. Use it to listen to things. Closely." -#~ msgstr "一个听觉工具.只能用来听比较接近的东西." +#~ msgid "Kaiko" +#~ msgstr "かいこ" -#~ msgid "A digging tool. Use it to dig pits adjacent to your location." -#~ msgstr "" -#~ "一个挖坑工具,你可以用它在你周围挖坑。做人莫学杨江南,挖坑从来不带填。" +#~ msgid "Nakiya" +#~ msgstr "诺基亚" #~ msgid "" -#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " -#~ "pile of dirt." -#~ msgstr "一把农具,你可以用它来把平土地锄成难以通过的一团泥。" +#~ "~ is a terrain symbol that indicates water. From a water source like " +#~ "this,\n" +#~ "you can fill any containers you might have. Step onto the water, then " +#~ "press\n" +#~ "the pickup key (',' or 'g'), then select a watertight container to put " +#~ "the\n" +#~ "water into." +#~ msgstr "" +#~ "“~”是一个表示水的地形符号。通过这样的水源,你能\n" +#~ "填充任何容器。站在水中,然后按拾取键(','或' g '),之\n" +#~ "后选择一个水密容器把水灌进去。" #~ msgid "" -#~ "A prying tool. Use it to open locked doors without destroying them, or to " -#~ "lift manhole covers." +#~ "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " +#~ "then\n" +#~ "select your flashlight to turn it on." #~ msgstr "" -#~ "一整套开锁工具,可以轻易进出别人的家里而不破坏门或者用来开启下水沟井盖。" +#~ "现在一片黑暗!幸运的是,你有一个手电筒。按' a '然后\n" +#~ "选择你的手电筒来打开它。" -#~ msgid "" -#~ "A road map. Use it to read points of interest, including, but not limited " -#~ "to, location(s) of hospital(s) nearby." -#~ msgstr "一张附近的地图,标出了不少有用的地点,诸如医院、商店等。" +#~ msgid "Gendo" +#~ msgstr "げんど" -#~ msgid "" -#~ "This device was constructed by 'enhancing' a radio with some amplifier " -#~ "circuits. It's completely lost its ability to pick up a station, but it's " -#~ "nice and loud now. Could be useful to distract zombies." -#~ msgstr "" -#~ "这是台有着功率放大集成电路的收音机,但现在它已经没法再收听任何的电台新闻," -#~ "可是它依然能放出嗞嗞嗞的噪音,用来和吸引丧尸,和丧尸来个约会。" +#~ msgid "You have a nicotine craving." +#~ msgstr "你的烟(尼古丁)瘾发作了." -#~ msgid "" -#~ "A string of numbers to access the elevator in the hazardous waste " -#~ "sarcophagus." -#~ msgstr "一串密码,用来启动通往危险废品储存间的电梯。" +#~ msgid "You have a caffeine craving." +#~ msgstr "你的咖啡(因)瘾发作了." -#~ msgid "" -#~ "If you can find a system to analyze this you may find something of " -#~ "interest." -#~ msgstr "" -#~ "如果你能找到什么系统来分析一下这里面的东西,或许能找到什么有用的东西吧。" -#~ "(谁知道呢?)" +#~ msgid "You have an opiate craving." +#~ msgstr "你的阿片瘾发作了。" -#~ msgid "" -#~ "An antenna designed to pick up signals better when pointed at the source." -#~ msgstr "" -#~ "天线,可以用来收集信号。当然,你要是把天线对准了信号源,信号强度会更高。" +#~ msgid "You have a craving for cocaine." +#~ msgstr "你开始对可卡因上瘾了。" -#~ msgid "" -#~ "This radio is turned on, and continually draining its batteries. It is " -#~ "playing the broadcast being sent from any nearby radio towers." -#~ msgstr "" -#~ "这台无线电设备已经被启动,不停消耗着电池的同时不断向你播送着附近电台传出的" -#~ "资讯。" +#~ msgid "You have a craving for crack." +#~ msgstr "你对快克可卡因上瘾了。" -#~ msgid "" -#~ "Using this radio turns it on. It will pick up any nearby signals being " -#~ "broadcast and play them audibly." -#~ msgstr "" -#~ "无线电,能够接受信号,并转化为声波。据说要是对准了信号塔,声音会格外响亮。" +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "你的皮肤下有虫子在爬!" -#~ msgid "" -#~ "Using this allows you to send out a signal; either a general SOS, or if " -#~ "you are in contact with a faction, to send a direct call to them." -#~ msgstr "" -#~ "在你生命受到威胁之时,别犹豫,就是它了。它能发出SOS信号,如果你加入了某个" -#~ "阵营,更是能直接向阵营求救!" +#~ msgid "Cleaned the bite wound." +#~ msgstr "清洗了被咬的伤口。" -#~ msgid "" -#~ "Using this item on a container full of water will purify the water. Water " -#~ "taken from uncertain sources like a river may be dirty." -#~ msgstr "" -#~ "从河里、水箱里、集雨器里以及马桶里弄来的水都不怎么干净,有了它,你就能喝上" -#~ "比山泉更可口的CDDA牌矿物质纯净水了!" +#~ msgid "Sterilized the infection... this time." +#~ msgstr "感染已消除...这次。" -#~ msgid "" -#~ "A piece of metal that can get very hot. Necessary for electronics " -#~ "crafting. You could also use it to cauterize wounds, if you had to." -#~ msgstr "" -#~ "一块可以被烧得很烫的金属板,可以用来制作电子产品,当然也可以用来灼烧伤口" +#~ msgid "You start scratching yourself all over!" +#~ msgstr "你开始疯狂抓挠自己全身!" -#~ msgid "" -#~ "A small heating element. Indispensable for cooking and chemistry. Try not " -#~ "to burn yourself." -#~ msgstr "" -#~ "一个小小的加热装置,无论是烹饪还是做化学药剂都必不可少。用的时候可得小心," -#~ "可别把自己给煮了。" +#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." +#~ msgstr "你觉得发烧、恶心,并且你的伤口已经开始变绿。" -#~ msgid "A spent glowstick, essentially trash." -#~ msgstr "用过的荧光棒,没什么用了,有兴趣可以留着。" +#~ msgid "The sludge is thick and sticky." +#~ msgstr "污泥又粘又稠。" -#~ msgid "" -#~ "This glowstick is active and producing light. It will last for a few " -#~ "hours before burning out." -#~ msgstr "被激活内在化学反应而正在发光的荧光棒,微弱的光,只能亮几个小时。" +#~ msgid "Martial arts gained." +#~ msgstr "学会了武术。" -#~ msgid "" -#~ "A small blue light glowstick, bend it to break the glass cylinder inside " -#~ "and start the reaction to produce a very small amount of light." -#~ msgstr "小小的蓝色荧光棒,弯曲一下就能产生光,当然,不怎么亮就是了。" +#~ msgid "MEDICINE/DRUGS" +#~ msgstr "药物/毒品:" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Provides a " -#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " -#~ "die, you'll need to scrap it to recover the components that are reusable." -#~ msgstr "" -#~ "一个能发光的简单电路,连接着电池。散发微弱的光芒,3单位电池可以使它持续发" -#~ "光25小时。当电量耗尽,你还能拆掉它来重复利用某些部件。" +#~ msgid "MODS/BIONICS" +#~ msgstr "额外插件/仿生插件:" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Once " -#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " -#~ "batteries die, you'll need to scrap it to recover the components that are " -#~ "reusable." -#~ msgstr "" -#~ "一个能发光的简单电路,连接着电池。一旦被激活,3单位电池可以使它持续发光25" -#~ "小时。当电量耗尽,你还能拆掉它来重复利用某些部件。" +#~ msgid ". Requires Unarmed Skill of " +#~ msgstr "需要徒手技能级" -#~ msgid "" -#~ "A burnt-out lightstrip. You could disassemble this to recover the " -#~ "amplifier circuit." -#~ msgstr "一条烧坏的小彩灯,你可以拆开它拿到电路放大器。" +#~ msgid "A common hydraulic jack, used when changing tires." +#~ msgstr "一个普通的液压千斤顶,用来换轮胎." -#~ msgid "" -#~ "This flashlight is turned on, and continually draining its batteries. It " -#~ "provides light during the night or while underground. Use it to turn it " -#~ "off." -#~ msgstr "这个手电筒已经被打开,它耗电很快,所以不用的时候请记得关上。" +#~ msgid "You set the boobytrap up and activate the grenade." +#~ msgstr "你设置引信,激活了榴弹。" #~ msgid "" -#~ "Using this flashlight will turn it on, assuming it is charged with " -#~ "batteries. A turned-on flashlight will provide light during the night or " -#~ "while underground." +#~ "A leather sling, it is easy to use and accurate, but pebbles do little " +#~ "damage. Pebbles are used as ammunition." #~ msgstr "" -#~ "手电筒,打开就能放光的神奇存在,无论是夜晚还是地底,光明总是让人安心。记得" -#~ "随时换电池!" +#~ "皮革弹弓,小孩子的玩具,操作简单,但小石子那伤害惨不忍睹,也就只能用来欺负" +#~ "小朋友了。弹药:小石子。" #~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. It is turned on. Use it to turn it off." +#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " +#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " +#~ "round. It is nearly silent, but is so weak as to be nearly useless." #~ msgstr "" -#~ "小型汽油燃料灯笼。它的光线较弱,但它的持续时间较长。它正亮着呢,不用时请关" -#~ "掉它。" +#~ ".22 CB具有圆锥形的弹头,只使用少量底火且一般不使用推进药,因此速度低于音" +#~ "速。它射击时非常安静,但它几可忽略的威力使其在战斗时基本没有什么用处。" #~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. Use it to turn it on." +#~ "9 millimeter parabellum is generally regarded as the most popular handgun " +#~ "cartridge, used by the majority of US police forces. It is also a very " +#~ "popular round in sub-machine guns." #~ msgstr "" -#~ "小型汽油燃料灯笼。它的光线较弱,但它的持续时间较长。用的时候请打开它。" - -#~ msgid "" -#~ "With enough electronics skill, you could attach this to your devices to " -#~ "increase their battery capacity." -#~ msgstr "对自己的电子学有信心的话,把它装在电子设备上,能提高电池容量。" - -#~ msgid "Use a fire extinguisher to put out adjacent fires." -#~ msgstr "使用灭火器来扑灭附近的火焰" +#~ "九毫米帕拉贝伦子弹是大多数美国警察机关所主要使用的手枪子弹。它一般被认为是" +#~ "最普遍的手枪子弹,并被大量使用在冲锋枪中。无论是灾变前还是灾变后,都是烂大" +#~ "街的存在。" #~ msgid "" -#~ "Use a hammer, with nails and two by fours in your inventory, to board up " -#~ "adjacent doors and windows." -#~ msgstr "使用锤子、钉子和2x4制式木材把门窗封上" +#~ "A brass-jacketed variant of the .40 Smith & Wesson round. This increases " +#~ "penetration slightly at the cost of reduced expansion." +#~ msgstr ".40 Smith&Wesson黄铜被甲高穿透力子弹。牺牲少许伤害用来增加穿透力。" #~ msgid "" -#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." +#~ "The .454 Casull round a very powerful revolver round capable of killing " +#~ "Huge game like Elephants with ease, it's designed to be used with the " +#~ "Taurus Raging Bull." #~ msgstr "" -#~ "剪刀,你有了一把剪刀了,快掏出来大发神威吧!但是在CDDA,剪刀剪不动塑料什么" -#~ "的,只能剪衣服玩了。" - -#~ msgid "" -#~ "Use a sewing kit on an article of clothing to attempt to repair or " -#~ "reinforce that clothing. This uses your tailoring skill." -#~ msgstr "使用缝纫工具可以修复或者加固各类服饰,这需要用到你的缝纫技能。" - -#~ msgid "A simple hand-powered stone quern." -#~ msgstr "一个简单的手推石磨." +#~ ".454 Casull子弹是一种大威力转轮手枪子弹,其威力可以击毙成年大象。它被设计" +#~ "使用在Taurus公司的Raging Bull左轮手枪上。" #~ msgid "" -#~ "A fire drill is a simple item for firestarting, made from two pieces of " -#~ "wood and some string. Although it is constructed out of simple materials, " -#~ "it's slow and rather difficult to get a fire started with this tool." +#~ "The .500 S&W Magnum round the World's most powerful handgun round " +#~ "recently developed by Smith and Wesson together with the revolutionary " +#~ "S&W 500 Revolver, it has enough power to kill anything with ease." #~ msgstr "" -#~ "钻木取火器是用来生火的简单道具,用两片木片以及一些绳子就可以做出来。很简" -#~ "陋,用来生火很慢而且也很难。" +#~ ".500 S&W Magnum子弹应该是世界上威力最大的手枪子弹了。由Smith&Wesson公司开" +#~ "发,使用在S&W 500左轮手枪上。它几乎可以消灭你看见的任何东西。" #~ msgid "" -#~ "Matches must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use matches to light " -#~ "nearby items on fire." +#~ "Designed during World War II by the Soviet Union, the popularity of the " +#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " +#~ "rifle round. However, due to its lack of yaw, this round deals less " +#~ "damage than most." #~ msgstr "" -#~ "火柴是很有用的,不论你是想抽根烟,想点燃燃烧瓶,或是把周围的东西烧起来。小" -#~ "心不要烧伤哦。" - -#~ msgid "Bright pink chewing gum. Sugary, sweet and bad for your teeth." -#~ msgstr "亮粉色的口香糖。含糖,甜,对你的牙齿不好。" +#~ "苏联于二战时设计的步枪弹药。Ak-47和SKS的普及很大程度上是由于这种高泛用性弹" +#~ "药的各种不同版本。然而由于弹头滚转较小,威力不如大部分的弹药。" #~ msgid "" -#~ "Strawberries left to ferment with a few other choice ingredients offer up " -#~ "a surprisingly platable mixture; you barely even have to force yourself " -#~ "to drink it after the first few gulps." +#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " +#~ "feet of concrete." #~ msgstr "" -#~ "草莓发酵后与其他一些配料组合成的惊人混合物,在喝下前几口后你几乎不用再强迫" -#~ "自己才能喝下去。" +#~ "一颗66mm高爆反坦克火箭弹。它能击穿厚达两英尺的混凝土,让你真正的体会到什么" +#~ "叫日穿钢板。" #~ msgid "" -#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" -#~ msgstr "浸泡在糖水中的苹果片,看起来还算新鲜。" - -#~ msgid "apple slices" -#~ msgstr "苹果片" +#~ "A machete is attached laterally to a motor, with a tripwire controlling " +#~ "its throttle. When the tripwire is pulled, the blade is swung around with " +#~ "great force. The trap forms a 3x3 area of effect." +#~ msgstr "" +#~ "弯刀横向的连接着电动机,连接着一个开关。当按下开关,刀片就会像电风扇一样转" +#~ "起来,形成一个3x3面积的陷阱。" #~ msgid "" -#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " -#~ "color." +#~ "Use this item to pull the pin, turning it into an active grenade. You " +#~ "will then have five turns before it explodes; throwing it would be a good " +#~ "idea." #~ msgstr "" -#~ "惨白、浮肿、软趴趴的苹果尸体被切片之后丢在了葡萄糖溶液中。。。看着它你的心" -#~ "情也是一样的惨淡。" - -#~ msgid "canned apple slices" -#~ msgstr "罐装苹果" - -#~ msgid "MRE - beef" -#~ msgstr "即食牛肉" - -#~ msgid "This white flour is useful for baking." -#~ msgstr "这白色的面粉可以用来做成面包。" +#~ "拔下安全销来使用手雷,你有五回合时间去扔掉它,话虽如此,除了能把周围的东西" +#~ "炸成渣,它也没什么其他特效了。" #~ msgid "" -#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." +#~ "Use this item to pull the pin, turning it into an active flashbang. You " +#~ "will then have five turns before it detonates with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." #~ msgstr "" -#~ "一枚巨大的蚂蚁的卵,有垒球般大,超级有营养,它的蛋白质是牛肉的6倍。如果你" -#~ "是贝爷的话。" +#~ "拔下安全销来使用震撼弹,你有五回合时间去扔掉它,它会让任何人,哦不,人脑爱" +#~ "好者在一段时间感到眩晕,失去方向感。你还不快撤?对,就说你呢!" #~ msgid "" -#~ "A malformed human leg, this would be gross to eat, and cause mutations." +#~ "This flashbang is active, and will soon detonate with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." #~ msgstr "" -#~ "变异人的腿,吃下去也会让你变异,至于是变成蝙蝠侠还是史莱姆亦或死翘翘,谁知" -#~ "道呢,除非你用S&L大法。" +#~ "正如字面所述,这颗震撼弹已经被激活了,请背过身去,捂上耳朵,然后在心里默" +#~ "数“1、2、3,木头人!" #~ msgid "" -#~ "A misshapen human arm, eating this would be pretty disgusting and cause " -#~ "your DNA to mutate." -#~ msgstr "变异人的手臂,丧心病狂的人才去吃,吃了后会恶心,并且导致DNA突变。" +#~ "This huge iron knife has been modified with a fuel tank, insulated " +#~ "handguard and ignition system. When filled with gasoline, a system of " +#~ "torches heats the blade, burning your target." +#~ msgstr "" +#~ "这把大铁刀已经被改装成具备燃料储存、隔热以及点火系统.当加入汽油,刀刃能被" +#~ "点燃,并可灼烧你的目标." #~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." +#~ "People love fire, and people love katanas, so why not put them together? " +#~ "The gas burners attached to this blade can really turn up the heat on " +#~ "your foes." #~ msgstr "" -#~ "一个原本可以成为人类但畸形了的胚胎,看上去恶心极了。有勇气吃掉它的人,很可" -#~ "能发生某种变化。" +#~ "大家喜欢火, 人们喜欢武士刀, 所以为什么不把它们结合在一起? 汽油燃烧器附加" +#~ "在刀刃上可以烧伤敌人。" #~ msgid "" -#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " -#~ "all sorts of afflictions." -#~ msgstr "一大块涂满了密密的、深色的蜂蜜的蜡,或许可以用来解除各种疾病症状。" +#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " +#~ "Called 'broad' to contrast with the slimmer rapiers." +#~ msgstr "" +#~ "一种早期的现代剑,在16到18世纪的西方被广泛使用。之所以命名为阔剑,是为了与" +#~ "细长的刺剑对比。" #~ msgid "" -#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " -#~ "emergency." -#~ msgstr "一大块蜂蜡,既不好吃又不滋补,除非实在没东西吃了。" - -#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. Light it up and show those heathen zombies " +#~ "who's Lord around here." #~ msgstr "" -#~ "看起来很恶心的样子,虽然知道是可以吃的东西,不过还是留到饿死前再试吧。" - -#~ msgid "tuna fish" -#~ msgstr "金枪鱼" - -#~ msgid "sardines" -#~ msgstr "沙丁鱼" - -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "很饱肚子没错啦,但是味道就不敢恭维了。" - -#~ msgid "Canned beans. A staple for hobos." -#~ msgstr "罐装豆子。流浪汉的主要食物。" - -#~ msgid "cooked spaghetti" -#~ msgstr "美味的意大利面条" - -#~ msgid "carrot" -#~ msgstr "胡萝卜" - -#~ msgid "Bread and turkey, that's it." -#~ msgstr "面包和火鸡,就是你了!" - -#~ msgid "beef jerky" -#~ msgstr "肉干" - -#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." -#~ msgstr "从酸雨中收集的经浓缩后的酸液,禁止饮用。" +#~ "在黑暗时代用来解决冲突的两个经典象征的组合---大刀和火炬. 将它点燃,告诉那" +#~ "些毫无信仰的丧尸,谁才是这里的主人." -#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." -#~ msgstr "请勿饮用,它与漂白剂混合会产生有毒气体。" +#~ msgid "" +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " +#~ "eat it's heart out." +#~ msgstr "" +#~ "一个将中世纪用来解决麻烦的典范(大刀和火炬)组合起来的武器,刀刃已经发烫,让" +#~ "圣剑也妒忌吧." -#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." -#~ msgstr "请勿饮用,它与氨水混合会产生有毒气体。" +#~ msgid "" +#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " +#~ "make it ready to fire. Once activated, it cannot be repacked." +#~ msgstr "" +#~ "M72式单兵火箭筒,封装以便于贮存。激活它之后,你就能发射,一旦激活就不能重" +#~ "新封装了。" #~ msgid "" -#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " -#~ "does less damage and is less accurate. Stands a good chance of remaining " -#~ "intact once fired." +#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " +#~ "metal, and complete disregard for personal safety. Not as efficient as a " +#~ "factory welder, but it will serve in a pinch." #~ msgstr "" -#~ "由木材削尖制得的弩矢。重量较钢制弩矢更轻,相对地,精准性和破坏力较低。发射" -#~ "后不易损坏,回收率高。" +#~ "这个由铜线和废铁组装的焊枪粗制滥造,完全无视人身安全。虽然效率不如工厂出" +#~ "品,但在必要时还是能用的。" -#~ msgid "Basic Sword & Sorcery." -#~ msgstr "剑术和巫术入门指南。" +#~ msgid "" +#~ "A bottle filled with match heads and equipped with a fuse. This one has " +#~ "been lit, and its fuse is rapidly burning down." +#~ msgstr "" +#~ "一个装满了的火柴头的瓶子,并配备了一个导火索。它已被点燃,其导火索迅速烧" +#~ "毁。" #~ msgid "" -#~ "Will you be able to place the arrow right into bull's eye? It is not that " -#~ "easy, but once you know how it's done, you will have a lot of fun with " -#~ "archery." +#~ "Your bones are very light. This enables you to run and attack 10%% " +#~ "faster, but also reduces your carrying weight by 20%% and makes bashing " +#~ "attacks hurt a little more." #~ msgstr "" -#~ "你知道如何把箭射中靶心吗?这并不简单,但你一旦学会它,射箭将会是一件很有趣" -#~ "的事情。" +#~ "你的骨质非常松脆,你的行动速度增加了10%%,但你所携带的物品最大重量下降20%" +#~ "%,\r\n" +#~ "冲击对你造成的伤害将更多。" -#~ msgid "Primer from a small caliber round." -#~ msgstr "小口径手枪子弹底火" +#~ msgid "" +#~ "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is " +#~ "very light as a result, enabling you to run and attack 20%% faster, but " +#~ "also frail; you can carry 40%% less, and bashing attacks injure you more." +#~ msgstr "" +#~ "你有兽骨综合症 - 你的骨头几乎是空心的。由于你的身体很轻,你的步行移动速度" +#~ "和攻\r\n" +#~ "击速度增加20%%,但你的体质也弱,你携带的东西减少40%%,且更容易受伤。" #~ msgid "" -#~ "A 40mm grenade with a small explosion and a high number of damaging " -#~ "fragments." -#~ msgstr "一颗40mm榴弹,能产生小型爆炸和大量冲击碎片。" +#~ "You feel very sluggish when not in direct sunlight. You suffer a 5%% drop " +#~ "in speed when in shade, and a 10%% drop in speed when in the dark." +#~ msgstr "" +#~ "如果你不能在阳光照射下将变得非常缓慢。你在阴暗中速度下降5%%,在黑暗中下降" +#~ "10%\r\n" +#~ "%" -#~ msgid "A 40mm grenade with a concussive explosion." -#~ msgstr "一个40mm震荡爆炸榴弹" +#~ msgid "" +#~ "Your muscle response is dependent on ambient temperatures. You lose 1%% " +#~ "of your speed for every 5 degrees below 65 F." +#~ msgstr "" +#~ "你的肌肉反应速度受环境温度影响。在18℃(65F)以下,温度每降低2℃(5F),你的" +#~ "速\r\n" +#~ "度将下降1%%。" #~ msgid "" -#~ "This small caliber pistol round offers quite good armor penetration at " -#~ "the cost of slightly less damage. It is rarely used outside of the " -#~ "Chinese army." +#~ "Your muscle response is highly dependent on ambient temperatures. You " +#~ "lose 1%% of your speed for every 3 degrees below 65 F." #~ msgstr "" -#~ "这种7.62mm的小型手枪子弹通过牺牲少量的威力增强了其穿甲性。除了中国军队外很" -#~ "其他地区很少使用。" +#~ "你的肌肉反应速度受环境温度影响。在18℃(65F)以下,温度每降低1℃(3F),你的" +#~ "速\r\n" +#~ "度将下降1%%。" -#~ msgid "A tough sinew cut from a corpse, useable as thread." -#~ msgstr "从尸体上截下来的一小段肌腱,很有弹性,能用于缝制衣物。" +#~ msgid "" +#~ "You are cold-blooded and rely on heat to keep moving. Your lose 1%% of " +#~ "your speed for every 2 degrees below 65 F." +#~ msgstr "" +#~ "你是冷血动物,依靠热量来移动。你在气温为18℃以下(65F)时气温每下降1℃(2F)" +#~ "速\r\n" +#~ "度降低1%%。" #~ msgid "" -#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " -#~ "damage. It could be used to practice your rifle skill up to level 1." +#~ "You used to be a ballroom dancer before the cataclysm, and now you use " +#~ "your skills to save your life. You start with a tuxedo and a level in " +#~ "dodging." #~ msgstr "" -#~ "BB枪是儿童们的专利,而你手中这把特制的BB枪也有着不同凡响的精准度,只是就BB" -#~ "弹这种弹药来说...实在很难对敌人造成任何杀伤力。不过至少你可以用这把枪来将" -#~ "步枪技能提升到1级。" +#~ "大灾变发生前你是个舞厅群众演员,在明星后面跳跳蹦蹦混碗饭吃。\r\n" +#~ "你现在需要利用你的这些技能延长自己的生命,因为你比普通人更会\r\n" +#~ "闪避。你穿着一身燕尾服开始了人生冒险。" #~ msgid "" -#~ "A tool used to drive nails into wood or other material. It could also be " -#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." +#~ "You've always loved tinkering with stuff. You start with a tool belt, and " +#~ "know a little bit about mechanics, tailoring, electronics, and carpentry." #~ msgstr "" -#~ "射钉枪,顾名思义,就是能用来发射钉子的枪,想射哪里就射哪里。拿在手里,既能" -#~ "做建设,又能当武器,钉子没了还能用来砸人。有了它,你就能轻易练习你的火器技" -#~ "能了!\n" -#~ "警告:本武器过于危险,被大批敌人包围时慎重使用,以免伤害自身。" +#~ "你一直喜欢摆弄小玩意试图靠这个发家致富,\r\n" +#~ "所以你总是穿着工具腰带,并且还有一点点\r\n" +#~ "关于机械,裁缝,电子和木工方面的知识。" + +#~ msgid "a smoker explodes!" +#~ msgstr "一只烟雾丧尸爆炸了!" #~ msgid "" -#~ "A medieval helmet that provides excellent protection to head, with a Y " -#~ "shaped opening for the face." -#~ msgstr "一个面部Y形开口的,全面保护头部的中世纪头盔。" +#~ "A sluglike creature, eight feet long and the width of a refrigerator, " +#~ "it's black body glistens as it oozes it's way along the ground. Eye " +#~ "stalks occassionally push their way out of the oily mass and look around." +#~ msgstr "" +#~ "一种鼻涕虫状的生物,八英尺长和冰箱一样的宽度。\r\n" +#~ "身体闪耀着黑色的油污沿着他行走的路径四下扩散。" -#~ msgid "light plate mail" -#~ msgstr "轻板甲" +#~ msgid "You need a " +#~ msgstr "你需要: " -#~ msgid "plate armor gauntlets" -#~ msgstr "板甲护手" +#~ msgid " and a " +#~ msgstr " 和 " -#~ msgid "plate armor boots" -#~ msgstr "板甲靴" +#~ msgid "powered welder" +#~ msgstr "有电的焊枪" -#~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." -#~ msgstr "密闭在包装袋里用来检测辐射量的徽章,从袋子中取出便会被激活。" +#~ msgid " to install parts." +#~ msgstr " 来安装部件。" -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "穿起来有点笨重,但可以提供一些储物空间." +#~ msgid "Choose new part to install here: " +#~ msgstr "选择一个新的部件安装在这里: " -#~ msgid "A thin pair of leather gloves. Good for doing manual labor." -#~ msgstr "一对薄薄的皮手套,干体力活时戴上很不错。" +#~ msgid ", a " +#~ msgstr ", " -#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." -#~ msgstr "一件厚重的棉大衣,很笨重,也很暖和,还有几个很深的口袋。" +#~ msgid ", and level " +#~ msgstr ",和级别 " -#~ msgid "A padded coat with deep pockets. Very warm." -#~ msgstr "有着大口袋的棉衣,相当保暖。" +#~ msgid " skill in mechanics." +#~ msgstr " 的机械" -#~ msgid "A thin cotton jacket. Good for brisk weather." -#~ msgstr "一件薄棉夹克。清新凉爽的天气里穿上它很适宜。" +#~ msgid " You also need level " +#~ msgstr "你还需要 " -#~ msgid "plate mail" -#~ msgstr "板甲" +#~ msgid " skill in mechanics to install additional engine." +#~ msgstr "的机械技能来安装额外的发动机。" -#~ msgid "" -#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " -#~ "will provide excellent protection against ambient radiation." -#~ msgstr "危险物品防护装。虽然看上去十分庞大和沉重,但可以防辐射。" +#~ msgid "You need a powered welder to repair." +#~ msgstr "你需要一个 有电的焊枪 才能维修。" -#~ msgid "" -#~ "A long cotton dress. Difficult to move in and lacks any storage space." -#~ msgstr "这是一件棉质礼服,虽然非常漂亮但穿着它活动会很困难。" +#~ msgid "You need level %d skill in mechanics." +#~ msgstr "你需要机械:%d级。" -#~ msgid "long underwear" -#~ msgstr "秋裤" +#~ msgid "You also need a wrench and %s to replace broken one." +#~ msgstr "你需要扳手和%s来替换这个损坏的部件。" -#~ msgid "" -#~ "Powerful heatsinks supermaterials are woven into your flesh. While " -#~ "powered, this system will prevent heat damage up to 2000 degrees " -#~ "fahrenheit. Note that this does not affect your internal temperature." -#~ msgstr "" -#~ "你的肉体被植入了强大的热能防护材料。当系统激活时,它可以阻挡高达2000华氏度" -#~ "的高温伤害。注意,该系统不会影响你的身体温度。" +#~ msgid " to remove parts." +#~ msgstr "来拆除部件。" -#~ msgid "" -#~ "Inside your body is a fleet of tiny dormant robots. Once charged from " -#~ "your energy banks, they will flit about your body, repairing any damage." -#~ msgstr "" -#~ "你的体内植入了一队纳米机器人。一旦你对它们进行充能,它们就会飞出体外,对你" -#~ "的身体进行修复。" +#~ msgid "You cannot remove mount point while something is attached to it." +#~ msgstr "你不能拆除连接其他部分的部件。" -#~ msgid "" -#~ "Your memory has been enhanced with small quantum storage drives. Any " -#~ "time you start to forget a skill, you have a chance at retaining all " -#~ "knowledge, at the cost of a small amount of poweron." -#~ msgstr "" -#~ "你使用了微型量子储存元件强化了你的记忆。任何时候当你即将遗忘某个技能时,你" -#~ "将有几率保留所有已获得的知识,仅需消耗一些能量。" +#~ msgid "OTD" +#~ msgstr "新讯息" -#~ msgid "That isn't knife!" -#~ msgstr "那个不是刀!" +#~ msgid "Activate your bio lockpick" +#~ msgstr "激活你的生化开锁器" -#~ msgid "You couldn't stop the bleeding." -#~ msgstr "你无法止血。" +#~ msgid "" +#~ "You just drank a bottle of water, reducing your thirst level and reducing " +#~ "the\n" +#~ "water level in the bottle. You'll probably want to drop empty bottles,\n" +#~ "or you might want to save them to refill from a water source later." +#~ msgstr "" +#~ "你喝了一瓶水,这减轻了你的口渴和瓶装\n" +#~ "水的水位。你可能会想要丢弃空瓶,或者\n" +#~ "你可能想留着以后装水。" -#~ msgid "You managed to stop the bleeding." -#~ msgstr "你设法去止血。" +#~ msgid "You feel terrible for killing %s!" +#~ msgstr "杀掉%s让你备受煎熬!" #~ msgid "" -#~ "You neatly sever all of the veins\n" -#~ "and arteries in your body. Oh wait,\n" -#~ "Never mind." +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire." #~ msgstr "" -#~ "你熟练地割断了你的身体\n" -#~ "所有的静脉和动脉。哦,\n" -#~ "等一下,不要介意。" +#~ "经典的ZIPPO打火机,可以用来点燃香烟、燃烧瓶之类的东西。还可以用来生火,从" +#~ "而点燃附近的可燃物。同时还是NPC的应急食物。" -#~ msgid "Put up the shelter" -#~ msgstr "建造避难所" +#~ msgid "%1$s slams %2$s %3$s against %4$s" +#~ msgstr "%1$s 结实地把 %2$s %3$s 砸在 %4$s 上" -#~ msgid "Pitch the tent" -#~ msgstr "安置帐篷" +#~ msgid "%1$s jab %2$s %3$s at %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 精准地刺杀 %4$s" -#~ msgid "Cut up metal" -#~ msgstr "切割金属" +#~ msgid "%1$s karate chops %4$s" +#~ msgstr "%1$s 掌劈 %4$s" -#~ msgid "Your tazer crackles in the air." -#~ msgstr "你的tazer在空中发出爆裂声。" +#~ msgid "%1$s quickly punches %4$s" +#~ msgstr "%1$s 迅速打向 %4$s" -#~ msgid "Place the turret" -#~ msgstr "设置炮塔" +#~ msgid "%1$s disarm %4$s" +#~ msgstr "%1$s 缴械了 %4$s" -#~ msgid "You set the landmine." -#~ msgstr "你设置了地雷." +#~ msgid "%1$s strike %4$s" +#~ msgstr "%1$s 精确打击了 %4$s" -#~ msgid "You bury the landmine." -#~ msgstr "你埋设了地雷." +#~ msgid "%1$s power-kicks %4$s" +#~ msgstr "%1$s 奋力踢击 %4$s" -#~ msgid "Bury the landmine?" -#~ msgstr "埋设地雷?" +#~ msgid "%1$s power-kick %4$s" +#~ msgstr "%1$s 用力踢向 %4$s" -#~ msgid "You set the bubblewrap on the ground, ready to be popped." -#~ msgstr "你在地上安置了警戒陷阱。" +#~ msgid "" +#~ "This is an advertisement for Robert's Universal Robotics brand law " +#~ "enforcement robots. It shows a picture of tripod robot incinerating a mob " +#~ "of looters and stepping over charred and smoking corpses. The caption " +#~ "reads: \"Built to Protect. Programmed to Serve.\"" +#~ msgstr "" +#~ "这是一张 罗伯特通用机器人技术公司 执法机器人的广告传单。它展示了这样一副画" +#~ "面,三脚机器人丧心病狂地踩着一堆烧焦冒烟的尸体将一群劫掠暴徒烧成渣。标题写" +#~ "着:“专业护卫制造,专业服务保障。”" -#~ msgid "Place trap" -#~ msgstr "放置陷阱" +#~ msgid "%1$s throw %4$s" +#~ msgstr "%1$s 投摔 %4$s" -#~ msgid "Drill" -#~ msgstr "钻头" +#~ msgid "%1$s jabs %2$s %3$s at %4$s" +#~ msgstr "%1$s 精准地刺出 %2$s %3$s 对 %4$s" -#~ msgid "Siphon from" -#~ msgstr "抽取" +#~ msgid "%1$s feints at %4$s" +#~ msgstr "%1$s 虚晃向 %4$s" -#~ msgid "The door swings open..." -#~ msgstr "门开了……" +#~ msgid "%1$s disarms %4$s" +#~ msgstr "%1$s 缴械了 %4$s" -#~ msgid "Use your pick lock" -#~ msgstr "使用你选择的锁" +#~ msgid "%1$s grab %4$s" +#~ msgstr "%1$s 擒住了 %4$s" -#~ msgid "You can't find a hospital near your location." -#~ msgstr "你无法在附近找到医院。" +#~ msgid "%1$s grabs %4$s" +#~ msgstr "%1$s 抓住了 %4$s" -#~ msgid "It's %d squares to the %s" -#~ msgstr "有%d格的距离到%s" +#~ msgid "%1$s strikes %4$s" +#~ msgstr "%1$s 精准的打击对 %4$s" -#~ msgid "You add a %s location to your map." -#~ msgstr "你在地图上标出了 %s 的位置。" +#~ msgid "the %s" +#~ msgstr "<目标> %s" -#~ msgid "You don't have enough battery power to purify all the water." -#~ msgstr "你没有足够的电池净化所有的水。" +#~ msgid "%1$s jab %4$s" +#~ msgstr "%1$s 戳击 %4$s" -#~ msgid "You don't have enough batteries!" -#~ msgstr "你没有足够的电池!" +#~ msgid "%1$s jabs %4$s" +#~ msgstr "%1$s 猛戳 %4$s" -#~ msgid "Pry" -#~ msgstr "撬" +#~ msgid "%1$s hits %4$s" +#~ msgstr "%1$s 挥打 %4$s" -#~ msgid "Light" -#~ msgstr "亮" +#~ msgid "%1$s stabs %4$s" +#~ msgstr "%1$s 刺击 %4$s" -#~ msgid "Put the dog food" -#~ msgstr "把狗粮" +#~ msgid "%1$s nicks %4$s" +#~ msgstr "%1$s 凿刻 %4$s" -#~ msgid "You disinfect the bite wound." -#~ msgstr "你将咬伤消毒。" +#~ msgid "%1$s cuts %4$s" +#~ msgstr "%1$s 削砍 %4$s" -#~ msgid "You clean the bite wound." -#~ msgstr "你清理了伤口" +#~ msgid "%1$s nick %4$s" +#~ msgstr "%1$s 砸刻 %4$s" -#~ msgid "Clean Wound" -#~ msgstr "清洗伤口" +#~ msgid "%1$s slices %4$s" +#~ msgstr "%1$s 切击 %4$s" -#~ msgid "You stopped the bleeding." -#~ msgstr "你止住了血" +#~ msgid "%1$s cut %4$s" +#~ msgstr "%1$s 切削 %4$s" -#~ msgid "Stop Bleeding" -#~ msgstr "止血" +#~ msgid "%1$s slice %4$s" +#~ msgstr "%1$s 切割 %4$s" -#~ msgid "8: Exit" -#~ msgstr "8:退出" +#~ msgid "%1$s hacks %4$s" +#~ msgstr "%1$s 劈杀 %4$s" -#~ msgid "7: %s" -#~ msgstr "7:%s" +#~ msgid "%1$s poke %4$s" +#~ msgstr "%1$s 捅杀 %4$s" -#~ msgid "%1$s stumbles and leers at %4$s" -#~ msgstr "%1$s 歪歪扭扭的绊倒了 %4$s" +#~ msgid "%1$s hack %4$s" +#~ msgstr "%1$s 劈砍 %4$s" -#~ msgid "%1$s stumble and leer at %4$s" -#~ msgstr "%1$s 歪歪扭扭的绊倒了 %4$s" +#~ msgid "%1$s pokes %4$s" +#~ msgstr "%1$s 捅刺 %4$s" -#~ msgid "zui quan" -#~ msgstr "醉拳" +#~ msgid "%1$s clobbers %4$s" +#~ msgstr "%1$s 痛击 %4$s" -#~ msgid "toad style" -#~ msgstr "毒蟾拳" +#~ msgid "%1$s clobber %4$s" +#~ msgstr "%1$s 痛打 %4$s" -#~ msgid "lizard style" -#~ msgstr "毒蜥拳" +#~ msgid "You wake up to the ringing of an alarm-clock." +#~ msgstr "闹钟的铃声把你从睡梦中唤醒。" #~ msgid "" -#~ "One of the Five Deadly Venoms. Lizard Style focuses on using walls to " -#~ "one's\n" -#~ "advantage. Moving alongside a wall will make you run up along it, giving " -#~ "you\n" -#~ "a large to-hit bonus. Standing by a wall allows you to use it to boost " -#~ "dodge." +#~ "A fine glass tube with a bulb on the end, used in partaking of certain " +#~ "illicit substances." #~ msgstr "" -#~ "五毒拳法中的一种。蜥蜴拳着重利用墙壁提升威力。\n" -#~ "靠着墙壁移动会使你爬到墙上,并给你极大的攻击\n" -#~ "加成。站在墙边则让你能够利用墙增强躲避。" - -#~ msgid "%1$s strikes %4$s with spincer fist" -#~ msgstr "%1$s 用蝎拳猛烈地殴打 %4$s" - -#~ msgid "%1$s strike %4$s with spincer fist" -#~ msgstr "%1$s 用蝎拳猛烈地殴打 %4$s" - -#~ msgid "scorpion style" -#~ msgstr "毒蝎拳" - -#~ msgid "viper style" -#~ msgstr "毒蛇拳" - -#~ msgid "%1$s swiftly hits %4$s" -#~ msgstr "%1$s 迅速打击 %4$s" +#~ "像极了一只精巧的玻璃烧瓶,其球状底部可以用火灼烧。用来享用某些非法的违禁物" +#~ "质,你懂的。" -#~ msgid "%1$s swiftly hit %4$s" -#~ msgstr "%1$s 迅速打击 %4$s" +#~ msgid "young fungaloid" +#~ msgstr "真菌幼体" -#~ msgid "centipede style" -#~ msgstr "蜈蚣拳" +#~ msgid "" +#~ "A very large triffid, with a particularly\n" +#~ "vicious sting and thick bark. As it\n" +#~ "moves, plant matter drops off its body\n" +#~ "and immediately takes root." +#~ msgstr "" +#~ "一颗庞大的巨行三尖树,覆盖着特别\n" +#~ "恶毒的钩刺和厚厚的树皮。\n" +#~ "当它移动的时候,植物物质从它身上剥落\n" +#~ "并立即生根发芽。" -#~ msgid "%1$s uses dragon strike on %4$s" -#~ msgstr "%1$s 施展出龙拳猛烈攻击 %4$s" +#~ msgid "" +#~ "A small triffid, only a few feet tall. It\n" +#~ "has not yet developed bark, but its sting\n" +#~ "is still sharp and deadly." +#~ msgstr "" +#~ "一丛小三尖树,只有几英尺高。\n" +#~ "尚未长出树皮,但是它的刺\n" +#~ "仍然锋利和致命。" -#~ msgid "%1$s use dragon strike on %4$s" -#~ msgstr "%1$s 施展出龙拳猛烈攻击 %4$s" +#~ msgid "young triffid" +#~ msgstr "三尖树苗" -#~ msgid "dragon style" -#~ msgstr "龙形" +#~ msgid "queen triffid" +#~ msgstr "三尖女王" -#~ msgid "%1$s writhes free from %4$s" -#~ msgstr "%1$s从%4$s里挣扎出来" +#~ msgid "" +#~ "A fat, white grub the size of your foot, with\n" +#~ "a set of mandibles that look more suited for\n" +#~ "digging than fighting." +#~ msgstr "" +#~ "一条和你脚般长的肥胖白蛆\n" +#~ "。比起用于战斗,它的上下\n" +#~ "颚貌似更适于挖洞。" -#~ msgid "%1$s writhe free from %4$s" -#~ msgstr "%1$s从%4$s里挣扎出来" +#~ msgid "" +#~ "A large, brown spider, which moves quickly\n" +#~ "and aggresively." +#~ msgstr "" +#~ "一只棕色的大蜘蛛。迅速,\n" +#~ "侵略性强。" -#~ msgid "%1$s snakebites %4$s" -#~ msgstr "%1$s 蛇咬 %4$s" +#~ msgid "" +#~ "A wasp-like flying insect, smaller than most\n" +#~ "mutated wasps. It does not looke very\n" +#~ "threatening, but has a large ovipositor in\n" +#~ "place of a sting." +#~ msgstr "" +#~ "一只形似黄蜂的飞行昆虫,小\n" +#~ "于大多数突变黄蜂。虽然看上\n" +#~ "去并不凶悍,但它的尾刺中藏\n" +#~ "有异常发达的产卵器。" -#~ msgid "%1$s snakebite %4$s" -#~ msgstr "%1$s 蛇咬 %4$s" +#~ msgid "" +#~ "A yellow spider the size of a dog. It lives\n" +#~ "in webs, waiting for prey to become\n" +#~ "entangled before pouncing and biting." +#~ msgstr "" +#~ "一只狗大小的黄色的蜘蛛。它生活\n" +#~ "在它们的蛛网里,在猛扑并撕咬\n" +#~ "前会静待猎物成为瓮中之鳖。" -#~ msgid "snake style" -#~ msgstr "少林蛇拳" +#~ msgid "" +#~ "A small, almost cute-looking spider. It\n" +#~ "leaps so quickly that it almost appears to\n" +#~ "instantaneously move from one place to\n" +#~ "another." +#~ msgstr "" +#~ "一只小的,长相可爱的蜘蛛。它\n" +#~ "跳跃的速度如此之快,在视觉上\n" +#~ "几乎瞬移般从一个地方移动到\n" +#~ "另一个地方。" -#~ msgid "%1$s strikes %4$s with leopard fist" -#~ msgstr "%1$s 用豹拳殴击 %4$s" +#~ msgid "" +#~ "A dog's body with a mass of ropy, black\n" +#~ "tentacles extending from its head." +#~ msgstr "" +#~ "狗躯体覆盖着大量粘液, 黑色的\n" +#~ "触手纷纷从原本的头部冒了出来。" -#~ msgid "%1$s strike %4$s with leopard fist" -#~ msgstr "%1$s 用豹拳殴击 %4$s" +#~ msgid "Thing" +#~ msgstr "怪形" -#~ msgid "%1$s swiftly jabs %4$s" -#~ msgstr "%1$s 迅疾戳刺 %4$s" +#~ msgid "" +#~ "A large spider with a bulbous thorax. It\n" +#~ "creates a subterranean nest and lies in\n" +#~ "wait for prey to fall in and become trapped\n" +#~ "in its webs." +#~ msgstr "" +#~ "一只有着球形胸部的大蜘蛛。它\n" +#~ "精心的构造地下巢穴正等待猎物\n" +#~ ",他们将在死前将被困于地下的\n" +#~ "蛛网中。" -#~ msgid "%1$s swiftly jab %4$s" -#~ msgstr "%1$s 迅疾戳刺 %4$s" +#~ msgid "" +#~ "A spider with a characteristic red\n" +#~ "hourglass on its black carapace. It is\n" +#~ "known for its highly toxic venom." +#~ msgstr "" +#~ "这种蜘蛛的甲壳上有着红色\n" +#~ "漏斗形纹路。它因剧毒毒液\n" +#~ "而闻名。" -#~ msgid "%1$s hand-pecks %4$s" -#~ msgstr "%1$s 手啄 %4$s" +#~ msgid "" +#~ "A huge, black worm, its flesh glistening\n" +#~ "with an acidic, blue slime. It has a gaping\n" +#~ "round mouth lined with dagger-like teeth." +#~ msgstr "" +#~ "一个巨大的黑色虫子, 他荧光的血肉\n" +#~ "中满是酸性的蓝色粘液。它的大圆口满\n" +#~ "是匕首般尖牙。" -#~ msgid "%1$s hand-peck %4$s" -#~ msgstr "%1$s 手啄 %4$s" +#~ msgid "Amigara horror" +#~ msgstr "阿弥壳之怪" -#~ msgid "crane style" -#~ msgstr "少林鹤拳" +#~ msgid "" +#~ "A spindly body, standing at least 15 feet\n" +#~ "tall. It looks vaguely human, but its face is\n" +#~ "grotesquely stretched out, and its limbs are\n" +#~ "distorted to the point of being tentacles." +#~ msgstr "" +#~ "一具细长的躯体,至少15英尺高。\n" +#~ "它看起来像是抽象的不成人形的\n" +#~ "人体,它的面部怪异的伸展着,\n" +#~ "它的四肢如触手般怪异地扭曲。" -#~ msgid "tiger style" -#~ msgstr "少林虎拳" +#~ msgid "" +#~ "An amorphous black creature which seems to\n" +#~ "sprout tentacles rapidly." +#~ msgstr "" +#~ "不定形的黑色生物似乎\n" +#~ "正迅速萌发着触手。" -#~ msgid "%1$s brutally kicks %4$s" -#~ msgstr "%1$s 抡踢 %4$s" +#~ msgid "A large snail, with an oddly human face." +#~ msgstr "一只恶臭的有奇怪人脸的巨型蜗牛。" -#~ msgid "%1$s brutally kick %4$s" -#~ msgstr "%1$s 抡踢 %4$s" +#~ msgid "" +#~ "A human body, but with its limbs, neck, and\n" +#~ "hair impossibly twisted." +#~ msgstr "" +#~ "一个人的躯体, 四肢、颈部,和\n" +#~ "毛发都都难以名状地扭曲着。" -#~ msgid "taekwondo" -#~ msgstr "跆拳道" +#~ msgid "" +#~ "An amorphous mass of twisting black flesh\n" +#~ "that flies through the air swiftly." +#~ msgstr "" +#~ "一坨形状怪异扭曲的黑色肉团\n" +#~ "从空中迅速飞过。" #~ msgid "" -#~ "Taekwondo is the national sport of Korea, and was used by the South " -#~ "Korean\n" -#~ "army in the 20th century. Focused on kicks and punches, it also includes\n" -#~ "strength training; your blocks absorb extra damage the stronger you are." +#~ "A twisting spot in the air, with some kind\n" +#~ "of morphing mass at its center." #~ msgstr "" -#~ "跆拳道是韩国国民运动,被韩国军队\n" -#~ "在20世纪。以其以其腾空、旋踢脚法\n" -#~ "而闻名。当你使用时你的力量越高,\n" -#~ "每次格挡受到的伤害越小。" +#~ "半空中出现的扭曲点,里面有\n" +#~ "某种已经蜷曲变形的东西。" -#~ msgid "ninjutsu" -#~ msgstr "忍术" +#~ msgid "" +#~ "A shapeless blob the size of a cow. It\n" +#~ "oozes slowly across the ground, small\n" +#~ "chunks falling off of its sides." +#~ msgstr "" +#~ "一坨牛大小的不定西团缓慢地在地\n" +#~ "面蠕动,并在自身周围不断地剥落\n" +#~ "分裂。" #~ msgid "" -#~ "Ninjutsu is a martial art and set of tactics used by ninja in feudal " -#~ "Japan.\n" -#~ "It focuses on rapid, precise, silent strikes. Ninjutsu is entirely " -#~ "silent.\n" -#~ "It also provides small combat bonuses the turn after moving a tile." +#~ "A pinkish, fungoid crustacean-like\n" +#~ "creature with numerous pairs of clawed\n" +#~ "appendages and a head covered with waving\n" +#~ "antennae." #~ msgstr "" -#~ "忍术是在封建日本的忍者运用的武术。\n" -#~ "它着重于快速、精确、无声。忍术是完\n" -#~ "全无声。而且在每次移动后都有少量的\n" -#~ "攻击加成。" +#~ "一种浅桃色,龙虾状菌类\n" +#~ "生物,附着着无数双爪子\n" +#~ ",头部覆盖着满满一层的\n" +#~ "浓密触角正激烈挥舞着。" -#~ msgid "%1$s slaps %4$s" -#~ msgstr "%1$s 掌掴 %4$s" +#~ msgid "gelatinous blob" +#~ msgstr "胶质粘液团" -#~ msgid "%1$s slap %4$s" -#~ msgstr "%1$s 掌掴 %4$s" +#~ msgid "" +#~ "An enormous white flatworm writhing\n" +#~ "beneath the earth. Poking from the\n" +#~ "ground is a bulbous head dominated by a\n" +#~ "pink mouth, lined with rows of fangs." +#~ msgstr "" +#~ "一个巨大的白色扁形虫在地\n" +#~ "底下翻滚。从地上戳出来的\n" +#~ "是是一个有着粉红色嘴的球\n" +#~ "状头,里面排满了獠牙。" -#~ msgid "muay thai" -#~ msgstr "泰拳" +#~ msgid "Mi-go" +#~ msgstr "米-戈" #~ msgid "" -#~ "Also referred to as the \"Art of 8 Limbs,\" Muay Thai is a popular " -#~ "fighting\n" -#~ "technique from Thailand that uses powerful strikes. It does extra damage\n" -#~ "against large or strong opponents." +#~ "A ropy, worm-like creature that flies on\n" +#~ "bat-like wings. Its form continually\n" +#~ "shifts and changes, twitching and\n" +#~ "writhing." #~ msgstr "" -#~ "也被称为《八门的艺术》泰拳是一个受欢迎的\n" -#~ "战斗武术,当使用泰拳对大型或强劲的对手是\n" -#~ "能发挥额外的伤害。" +#~ "一个粘稠的,蠕虫状生物,用\n" +#~ "蝙蝠一样的翅膀飞行。它的\n" +#~ "形状不断变化转换,抽搐\n" +#~ "扭动。" -#~ msgid "%1$s counter-attacks %4$s" -#~ msgstr "%1$s 反击 %4$s" +#~ msgid "" +#~ "A strange dark area in the area. It whispers\n" +#~ "softly as it moves." +#~ msgstr "" +#~ "一篇奇怪的暗区。随着它的移动,这片\n" +#~ "区域不断发出轻声细语。" -#~ msgid "%1$s counter-attack %4$s" -#~ msgstr "%1$s 反击 %4$s" +#~ msgid "" +#~ "This poor victim was sliced open and bled to\n" +#~ "death long ago. Yet, chained down it thrashes\n" +#~ "in eternal misery from its tortures." +#~ msgstr "" +#~ "这可怜的受害者在很久以前因为胸腔被刨开\n" +#~ "而流血至死。然而,因为这场灾变,它在束缚\n" +#~ "中痛苦挣扎,遭受着永恒的折磨。" -#~ msgid "krav maga" -#~ msgstr "以色列防身术" +#~ msgid "" +#~ "A strange, immobile pink goo. It seems to\n" +#~ "be breathing slowly." +#~ msgstr "" +#~ "一个古怪的粉色粘状物固定在哪里,仔细观察\n" +#~ "就会发现它竟然正缓慢地呼吸着。" #~ msgid "" -#~ "Originating in Israel, Krav Maga is based on taking down an enemy quickly " -#~ "and\n" -#~ "effectively. It focuses on applicable attacks rather than showy or " -#~ "complex\n" -#~ "moves. Popular among police and armed forces everywhere." +#~ "An insane individual with many bloody holes\n" +#~ "on the sides of their shaved head. Some form\n" +#~ "of lobotomy has left it with a partially re-\n" +#~ "animated brain." #~ msgstr "" -#~ "KRAV MAGA(以色列防身术),以色列语的语意为“近身格斗”,被公认为世界上最纯正" -#~ "的防卫术。KRAV MAGA\n" -#~ "是一个完整的内容广泛的武打系统,内容包括运用自己身体各部去攻击敌人、自我防" -#~ "卫技术、反击打和\n" -#~ "脚踢技术、被动解脱术、摔投法、地面格斗术、徒手对刀术、徒手对棍术、徒手对枪" -#~ "术、反多人攻击术等。" +#~ "顶着一个两侧开满血洞头颅的疯狂\n" +#~ "人形,拜某种额叶切除术所赐,他\n" +#~ "带着部分功能的大脑复活了。" -#~ msgid "%1$s spin-kicks %4$s" -#~ msgstr "%1$s 旋风踢 %4$s" +#~ msgid "A large snake, translucent black." +#~ msgstr "一条大蛇,黑色半透明。" -#~ msgid "%1$s spin-kick %4$s" -#~ msgstr "%1$s 旋风踢 %4$s" +#~ msgid "" +#~ "A pale white man with a physically flawless athletic\n" +#~ "body and shaved head. His eyes are completely black\n" +#~ "as bloody tears pour forth from them." +#~ msgstr "" +#~ "这个剃过头的苍白的男性躯体完美地保持者运动\n" +#~ "功能。原本眼睛的部位已经变成了一对流出血泪\n" +#~ "的黑洞。" -#~ msgid "%1$s spins and hits %4$s" -#~ msgstr "%1$s 旋转冲击 %4$s" +#~ msgid "" +#~ "A robot with an insectoid design, about\n" +#~ "the size of a small dog. It skitters\n" +#~ "quickly across the ground, two electric\n" +#~ "prods at the ready." +#~ msgstr "" +#~ "一台以昆虫为原型设计的机器人,\n" +#~ "约有一条狗的大小。它飞掠而过,\n" +#~ "两个电击触角随时准备攻击。" -#~ msgid "%1$s spin and hit %4$s" -#~ msgstr "%1$s 旋转冲击 %4$s" +#~ msgid "" +#~ "Slender and terrifying, this gigantic man lacks\n" +#~ "any skin yet moves swiftly and gracefully without\n" +#~ "it. Wings of flesh protrude uselessly from his\n" +#~ "back and a third eye dominates his forehead." +#~ msgstr "" +#~ "细长而又可怕!这巨大的人体在完全没有皮\n" +#~ "肤的情况下动作迅速而优雅。无用的肉翅生\n" +#~ "在了它的背上,第三只眼睛占据了他的前额。" -#~ msgid "%1$s low kicks %4$s" -#~ msgstr "%1$s 下段踢击 %4$s" +#~ msgid "" +#~ "A roughly spherical robot that hovers about\n" +#~ "five feet of the ground. Its front side is\n" +#~ "dominated by a huge eye and a flash bulb.\n" +#~ "Frequently used for reconaissance." +#~ msgstr "" +#~ "球形机器人大致盘旋约五英尺的\n" +#~ "地表。它的正面是由一个巨大的\n" +#~ "眼睛和一个闪光灯泡组成,通常\n" +#~ "执行侦查任务。" -#~ msgid "%1$s low kick %4$s" -#~ msgstr "%1$s 下段踢击 %4$s" +#~ msgid "" +#~ "A snake-shaped robot that tunnels through the\n" +#~ "ground slowly. When it emerges from the\n" +#~ "ground it can attack with its large, spike-\n" +#~ "covered head." +#~ msgstr "" +#~ "一个蛇形机器人,缓慢的在地下\n" +#~ "隧道移动。当它冒出地面的时候\n" +#~ "会用它覆盖长钉的头部攻击。" -#~ msgid "%1$s bluffs %4$s" -#~ msgstr "%1$s 吓唬 %4$s" +#~ msgid "" +#~ "This fearsome robot is essentially an\n" +#~ "autonomous tank. It moves surprisingly fast\n" +#~ "on its treads, and is armed with a variety of\n" +#~ "deadly weapons." +#~ msgstr "" +#~ "这可怕的机器人实质上就是\n" +#~ "一台可自主行动的坦克,能依靠它的履带\n" +#~ "进行出人意料的迅速机动,并且还装备有\n" +#~ "各式各样的致命武器。" -#~ msgid "%1$s bluff %4$s" -#~ msgstr "%1$s 吓唬 %4$s" +#~ msgid "" +#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " +#~ "Though large and heavy compared to other spears, its accuracy and damage " +#~ "are unparalled." +#~ msgstr "" +#~ "一款中世纪武器,长长的木棍末端装有尖尖的铁锥。虽然又长又重,但是命中率和伤" +#~ "害性都是无与伦比的。" -#~ msgid "capoeira" -#~ msgstr "巴西战舞" +#~ msgid "Bandage" +#~ msgstr "绷带" + +#~ msgid "Disinfectant" +#~ msgstr "消毒剂" #~ msgid "" -#~ "A dance-like style with its roots in Brazilian slavery, capoeira is " -#~ "focused\n" -#~ "on fluid movement and sweeping kicks. Moving a tile will boost attack " -#~ "and\n" -#~ "dodge; attacking boosts dodge, and dodging boosts attack." +#~ "A bow with wheels that fires high velocity arrows. Weaker people can use " +#~ "compound bows more easily. Arrows fired from this weapon have a good " +#~ "chance of remaining intact for re-use. It requires 8 strength to fire" #~ msgstr "" -#~ "源自巴西奴隶的一种类似跳舞的身法,巴西战舞的核心\n" -#~ "是流水般的移动和扫荡踢脚。每走一步都能提高攻击\n" -#~ "和躲避;而攻击可以提高躲避,躲避也能提高攻击。" - -#~ msgid "tai chi" -#~ msgstr "太极" +#~ "一把带滑轮的弓,能让你高效地射箭。较弱的家伙也可以轻易使用复合弓。这种弓射" +#~ "出的箭能再利用的可能性更高。你需要8点力量来拉动它。" #~ msgid "" -#~ "Though tai chi is often seen as a form of mental and physical exercise, " -#~ "it is\n" -#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " -#~ "the\n" -#~ "force of an attack makes your Perception decrease damage further on a " -#~ "block." +#~ "A six-foot wooden bow that fires feathered arrows. This takes a fair " +#~ "amount of strength to draw. Arrows fired from this weapon have a good " +#~ "chance of remaining intact for re-use. It requires 10 strength to fire" #~ msgstr "" -#~ "虽然太极是通常被视为一种心理和身体的运动,它是\n" -#~ "一个正当的武术,他化攻击于无形,感知能力越强,\n" -#~ "受到的伤害就越低。" +#~ "总长6英尺的木制长弓。需要有把子力气才能拉开。长弓射出的箭不易损坏,有很大" +#~ "的几率回收。需要10点力量来拉开它。" -#~ msgid "judo" -#~ msgstr "柔道" +#~ msgid "bow-like_object" +#~ msgstr "像弓一样的东西" #~ msgid "" -#~ "Judo is a martial art that focuses on grabs and throws, both defensive " -#~ "and\n" -#~ "offensive. It also focuses on recovering from throws; while using judo, " -#~ "you\n" -#~ "will not lose any turns to being thrown or knocked down." +#~ "An object that looks like a bow from afar, but closer inspection will " +#~ "reveal its simple nature. This is a bow someone with absolutely no " +#~ "knowledge of bows would make. Solely based on popular depictions from " +#~ "movies and video games, this object merely tries to look and act like a " +#~ "bow, nothing more." #~ msgstr "" -#~ "柔道是一种侧重于抓取并抛出武术,兼具防守\n" -#~ "与进攻。它还集中在防御抛投,使用柔道,你\n" -#~ "任何时候都不会被击倒在地。" +#~ "从远处看上去像把弓,但仔细检查就会发现它如此的“浑然天成”…这就是完全没有弓箭" +#~ "知识的人所造的弓!它的蓝图是基于电影和电子游戏中所流行的外观!这个物品只是" +#~ "试图从外观和力学上模仿一张弓,仅此而已。" -#~ msgid "%1$s throws %4$s" -#~ msgstr "%1$s 抛投 %4$s" +#~ msgid "10kg bow" +#~ msgstr "10kg弓" -#~ msgid "%1$s feint at %4$s" -#~ msgstr "%1$s 佯攻 %4$s" +#~ msgid "" +#~ "Made using the most rudimentary knowledge of bows, this short and weak " +#~ "bow is just enough to take down small game in a shot or two." +#~ msgstr "" +#~ "依靠最基本的弓箭知识造出的弓。不过这种既短又弱的弓足以在一两场狩猎中拿下一" +#~ "个小目标。" -#~ msgid "aikido" -#~ msgstr "合气道" +#~ msgid "20kg_bow" +#~ msgstr "20公斤弓" #~ msgid "" -#~ "Aikido is a Japanese martial art focused on self-defense, while " -#~ "minimizing\n" -#~ "injury to the attacker. It uses defense throws and disarms. Damage done\n" -#~ "while using this technique is halved, but pain inflicted is doubled." +#~ "A bow with a semi-powerful draw. Its relatively low draw weight gives a " +#~ "good draw speed, as well as precision for lack of strain on the user when " +#~ "the bow is fully drawn." #~ msgstr "" -#~ "合气道是一种日本武术,集中在自卫同时最小化\n" -#~ "伤害攻击者。它使用防御抛投和缴械。使用这种\n" -#~ "技术虽然伤害减半但造成疼痛加倍。" +#~ "能用适中力量拉开的弓。其相对较低的拉弓磅数也使你的拉弓速度更快,但由于即使" +#~ "完全张弓也缺乏张力,这种弓不怎么精准。" -#~ msgid "%1$s karate chop %4$s" -#~ msgstr "%1$s 手斩 %4$s" +#~ msgid "30kg bow" +#~ msgstr "30kg弓" -#~ msgid "%1$s blocks %4$s" -#~ msgstr "%1$s 格挡 %4$s" +#~ msgid "" +#~ "With a draw weight slightly above what professional users use, this bow " +#~ "can take down medium game, and even large game with enough skill." +#~ msgstr "" +#~ "开弓磅数比专业用户用的弓更大。这把弓拿下中型猎物绰绰有余,而且只要有足够的" +#~ "技巧你还能用它狩猎大型猎物。" -#~ msgid "%1$s block %4$s" -#~ msgstr "%1$s 格挡 %4$s" +#~ msgid "30kg bow compound" +#~ msgstr "30kg弓.复合型" -#~ msgid "%1$s quickly punch %4$s" -#~ msgstr "%1$s 敏捷地猛击 %4$s" +#~ msgid "" +#~ "A bow that uses a set of pulleys to take the strain off the user when a " +#~ "bow is fully drawn to provide better accuracy. This does not mean however " +#~ "that the draw weight on these must be less than a bow with similar draw " +#~ "weight." +#~ msgstr "" +#~ "一把带滑轮组的弓,能让使用者在完全开弓时保持稳定以保证射击精度。但这并不意" +#~ "味着这种弓的开弓磅数一定比其他有类似开弓磅数的弓小。" -#~ msgid "karate" -#~ msgstr "空手道" +#~ msgid "40kg bow" +#~ msgstr "40公斤弓" #~ msgid "" -#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" -#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " -#~ "allows\n" -#~ "you an extra dodge and two extra blocks on the following round." +#~ "A bow with a draw strength rarely seen in modern day. The bow's power is " +#~ "akin to those of big game hunters in the safari. However, due to its draw " +#~ "weight, the draw time is slower, and the strain of the draw hinders " +#~ "accuracy." #~ msgstr "" -#~ "空手道是一个流行的武术,源自日本。它以\n" -#~ "快速且准确的攻击和移动著称。每次击中都\n" -#~ "能增加下回合的闪避与格挡。" +#~ "这种弓有着当代少有的开弓磅数。其威力足以应付远征狩猎中的大型猎物。然而,由" +#~ "于开弓磅数较大,此弓的张弓速度慢,完全张弓也缺乏射击精准度。" + +#~ msgid "50kg bow" +#~ msgstr "50公斤弓" #~ msgid "" -#~ "There is only the space where an object should be, but isn't. No item " -#~ "template of this type exists." +#~ "Among the most distinctive things about this bow are the curled arms that " +#~ "turn away from the archer at the ends. Due to high workmanship, the high " +#~ "draw weight is much more efficiently transferred into throwing the arrow. " +#~ "The strain does however put a great deal of strain onto the user, " +#~ "lowering both accuracy and rate of fire." #~ msgstr "" -#~ "这里有个可以存放物体的空间,但是它并不是,它的模版不支持任何种类的模型。" +#~ "这把弓最具特色的部分就是远离弓手的末端曲臂。由于制作工艺高超,其高开弓磅数" +#~ "可以有效转化为箭头的动能。但使用者大力拉弓无疑会牺牲其准确性和发射速率。" -#~ msgid "Error: Item Missing." -#~ msgstr "错误: 道具丢失。" +#~ msgid "65kg bow" +#~ msgstr "65kg巨型弓" #~ msgid "" -#~ "While sleeping in dangerous territory, it may be wise to set traps to " -#~ "ward\n" -#~ "off unwanted intrusions. There are a few traps to be found in the world,\n" -#~ "most notably bubblewrap (which will make a loud noise if stepped on, " -#~ "helping\n" -#~ "to wake you up) and bear traps (which make noise AND damage and trap " -#~ "anything\n" -#~ "that steps on them). Others need to be crafted; this requires the Traps " -#~ "skill\n" -#~ "and possibly Mechanics.\n" -#~ "\n" -#~ "To set a trap, simply use the item%s and choose a direction; the trap\n" -#~ "will be placed on an adjacent tile. Some traps may require additional " -#~ "tools,\n" -#~ "like a shovel, to be set. Once set, a trap will remain in place until\n" -#~ "stepped on or disarmed.\n" -#~ "\n" -#~ "To disarm a trap, examine%s the space it is on. Your success depends\n" -#~ "upon your Traps skill and Dexterity. If you succeed, the trap is removed\n" -#~ "and replaced by some or all of its constituent parts; however, if you " -#~ "fail,\n" -#~ "there is a chance that you will set off the trap, suffering the " -#~ "consequences.\n" -#~ "\n" -#~ "Many traps are fully or partially hidden. Your ability to detect traps " -#~ "is\n" -#~ "entirely dependent upon your Perception. Should you stumble into a trap, " -#~ "you\n" -#~ "may have a chance to avoid it, depending on your Dodge skill." +#~ "The massive frame of this weapon belies its monstrous power and a draw " +#~ "weight at the edge of human capability. The immense strain that this bow " +#~ "puts on the user comes at a drastic cost of accuracy and rate of fire, " +#~ "but the power and range rewarded is unparalleled." #~ msgstr "" -#~ "如果你万不得已需要睡在荒郊野外,最好能够在周围设置一些陷阱以防止不速之\n" -#~ "客的到来。有些陷阱在游戏中比较容易找到,比如气泡陷阱(会产生噪音来唤醒玩" -#~ "家)\n" -#~ "和捕兽夹(产生噪音的同时也能造成伤害),其他更复杂的陷阱就需要玩家自行制" -#~ "作,\n" -#~ "这会需要用到陷阱技能和一些机械技能。\n" -#~ "\n" -#~ " 像普通物品一样使用陷阱(%s)并选择一个方向就能把陷阱设置在与玩家\n" -#~ "相邻的位置,有些陷阱在设置时需要用到一些工具,比如铲子等,一旦设置成功," -#~ "这\n" -#~ "个陷阱就会留在那个位置,只要被人触发或者解除。\n" -#~ "\n" -#~ " 想要解除一个陷阱,需要对着陷阱所在的位置按%s键,成功与否取决于玩家的" -#~ "陷\n" -#~ "阱技能和灵巧度,如果你成功了,陷阱就会被解除被被分解成部分或全部的材料;" -#~ "如\n" -#~ "果解除失败,你就会尝到陷阱给你带来的愉♂悦。\n" -#~ "\n" -#~ " 很多陷阱都会被隐藏得很好,所以你的感知度将影响你探测陷阱的能力;一旦" -#~ "你\n" -#~ "踩上了一个陷阱,如果你的回避能力够高的话,依旧有机会能够躲开。" +#~ "人类的弱小使这种巨型武器的荒谬威力(以及开弓磅数)变得微不足道。这种弓的使" +#~ "用者需要调动身力量拉弓以至于大幅牺牲了准确性和射度,但也换来了无与伦比的威" +#~ "力和射程。" -#~ msgid "" -#~ "Many important items can be very hard to find, or will cost a great deal " -#~ "of\n" -#~ "money to trade for. Fortunately, it is possible to craft a wide variety " -#~ "of\n" -#~ "goods with the proper tools, materials, and training.\n" -#~ "\n" -#~ "Some recipes require a set of tools. These are not used up when " -#~ "crafting,\n" -#~ "so you can keep your tool set. All recipes require one or more " -#~ "ingredients.\n" -#~ "These ARE used up in crafting.\n" -#~ "\n" -#~ "%sThere are five categories; Weapons, Food, \n" -#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" -#~ "no skill to create, the majority require you to have some knowledge:\n" -#~ "\n" -#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" -#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" -#~ "at higher levels, you have an understanding of chemistry and can make\n" -#~ "chemical weapons and beneficial elixirs.\n" -#~ "->Electronics skill lets you make a wide variety of tools with intricate " -#~ "uses.\n" -#~ "->Tailoring skill is used to create basic clothing, and later tough " -#~ "armor.\n" -#~ "\n" -#~ "In addition to the primary crafting skills, other skills may be " -#~ "necessary\n" -#~ "to create certain items. Traps skill, Firearms skill, and First Aid " -#~ "skill\n" -#~ "are all required for certain items." +#~ msgid "Destination can only hold " +#~ msgstr "目标仅能承受 " + +#~ msgid "Using knife on worn equipment:" +#~ msgstr "在磨损的设备上使用小刀:" + +#~ msgid "null" +#~ msgstr "空" + +#~ msgid "custom vehicle template/placeholder" +#~ msgstr "自定义车辆模板/占位" + +#~ msgid "Revive zombies" +#~ msgstr "丧尸复活" + +#~ msgid "Allow zombies to revive after a certain amount of time." +#~ msgstr "允许丧尸一定时间后复活。" + +#~ msgid "Sort Crafting menu" +#~ msgstr "制作菜单的排序" + +#~ msgid "" +#~ "If true, the crafting menus will display recipes that you can craft " +#~ "before other recipes" +#~ msgstr "如果设置为是,制作菜单将会把你能制作的项目给排在其他项目之前。" + +#~ msgid "---DebugINFO---" +#~ msgstr "---调试信息---" + +#~ msgid "Material_factor: %f" +#~ msgstr "材料系数:%f" + +#~ msgid "weigth_factor: %f" +#~ msgstr "权重因子:%f" + +#~ msgid "---------------" +#~ msgstr "---------------" + +#~ msgid "It is too dark to plant anything now." +#~ msgstr "光线不足,无法种植。" + +#~ msgid "" +#~ "A red ant the size of a crocodile. It is\n" +#~ "covered in chitinous armor, and has a\n" +#~ "pair of vicious mandibles." #~ msgstr "" -#~ "本作中很多重要的物品都不是太容易找到,即使想通过交易来购买可能这个价格\n" -#~ "也不是轻易能够承担的,索性,只要有合适的工具和材料,你的角色可以自行制" -#~ "作。\n" -#~ "\n" -#~ " 有些物品的制作需要用到不止一件工具,拥有这些工具可以进行多次制作;而" -#~ "所\n" -#~ "有的物品都需要一种或更多的材料来进行制作,这些材料在制作之后都会被消耗" -#~ "掉。\n" -#~ "\n" -#~ "%s一共有五大类,武器、食物、电器、护甲及其\n" -#~ "它,虽然有些物品的制作不需要专业的技能,但大多数物品的制作都需要角色具有" -#~ "相\n" -#~ "对应的技能:\n" -#~ "\n" -#~ "->机械技能对于制作武器、陷阱和一些工具来说很重要;\n" -#~ "->烹调技能只需要较低的等级就能陆续做出可口的食物,而随着等级的提高你会对" -#~ "化\n" -#~ " 学有更深的认识,甚至能够制造化学武器和强化药剂;\n" -#~ "->电子技能会影响许多复杂工具的使用,在游戏的整个过程中都有用到;\n" -#~ "->裁缝技能可以让你制作各类服装以及一些护甲\n" -#~ "\n" -#~ "除了上述主要技能以外,其他一些比如陷阱技能、火器技能、急救技能等也会影响" -#~ "到\n" -#~ "特定物品的制作。" +#~ "鳄鱼大小的红蚂蚁。在\n" +#~ "坚硬的甲壳盔甲下,有\n" +#~ "一对凶恶的大颌。" #~ msgid "" -#~ "Whoa. Whoa. Hey. This game requires a minimum terminal size of %dx%d. " -#~ "I'm\n" -#~ "sorry if your graphical terminal emulator went with the woefully-" -#~ "diminutive\n" -#~ "%dx%d as its default size, but that just won't work here. Now stretch " -#~ "the\n" -#~ "window until you've got it at the right size (or bigger).\n" +#~ "A human body, stumbling slowly forward on\n" +#~ "uncertain legs, possessed with an\n" +#~ "unstoppable rage." #~ msgstr "" -#~ "嗨!这个游戏要求你的游戏窗口尺寸最小不能低于%d*%d。\n" -#~ "但是你的终端尺寸默认为%d*%d,这样不能游戏。\n" -#~ "现在请你手动调整窗口大小直至合适尺寸(或者更大一些)。\n" +#~ "一个人类身躯,缓慢的蹒跚前行\n" +#~ "颤巍巍的双腿,充满了\n" +#~ "无法抑制的愤怒。" -#~ msgid "Wield item: Press - to choose a style" -#~ msgstr "装备物品:按下'-'键选择一个类型" +#~ msgid "smash" +#~ msgstr "哗啦~" -#~ msgid "Butcher the %s corpse?" -#~ msgstr "屠宰 %s 的尸体?" +#~ msgid "Lightning" +#~ msgstr "闪电" -#~ msgid "You need a charged UPS." -#~ msgstr "你需要一个充过电的UPS。" +#~ msgid "Fusion blast" +#~ msgstr "核爆" -#~ msgid "Drop" -#~ msgstr "丢弃" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Refill vehicle" -#~ msgstr "给车灌油" +#~ msgid "This should never happen... I think." +#~ msgstr "这绝不该发生...我认为。" -#~ msgid "There's no vehicle to grab there!" -#~ msgstr "这附近没有可挂扣的车辆." +#, fuzzy +#~ msgid "24 hour time" +#~ msgstr "24小时制" -#~ msgid "Have a drink?" -#~ msgstr "喝一杯?" +#, fuzzy +#~ msgid "%1$s sweep-kicks %4$s" +#~ msgstr "%1$s 旋风踢 %4$s" -#~ msgid "Fill a container?" -#~ msgstr "填充一个容器?" +#, fuzzy +#~ msgid "%1$s side-kicks %4$s" +#~ msgstr "%1$s 旋风踢 %4$s" -#~ msgid "You dont see any items around you!" -#~ msgstr "周围你没有看见任何物品!" +#, fuzzy +#~ msgid "%1$s surprise attack %4$s" +#~ msgstr "%1$s 反击 %4$s" -#~ msgid "Peek" -#~ msgstr "偷窥" +#, fuzzy +#~ msgid "%1$s flying knees %4$s" +#~ msgstr "%1$s 劈 %4$s" -#~ msgid "Examine" -#~ msgstr "E查看" +#, fuzzy +#~ msgid "%1$s elbows %4$s" +#~ msgstr "%1$s 抛投 %4$s" -#~ msgid "Control vehicle" -#~ msgstr "控制交通工具" +#, fuzzy +#~ msgid "%1$s elbow %4$s" +#~ msgstr "%1$s 抛投 %4$s" -#~ msgid " where? (Direction button)" -#~ msgstr " 哪个方向?(方向按钮)" +#, fuzzy +#~ msgid "%1$s uses %2$s %3$s to sweep %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" -#~ msgid "The corpse is now thoroughly pulped." -#~ msgstr "尸体彻底变成肉酱了。" +#, fuzzy +#~ msgid "%1$s use %2$s %3$s to sweep %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" -#~ msgid "You damage the %s!" -#~ msgstr "你损坏了 %s !" +#, fuzzy +#~ msgid "%1$s uses %2$s %3$s to wrap up %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" -#~ msgid "You greatly damage the %s!" -#~ msgstr "你巨大的损坏了 %s !" +#, fuzzy +#~ msgid "%1$s use %2$s %3$s to wrap up %4$s" +#~ msgstr "%1$s 用 %2$s %3$s 扔 %4$s" -#~ msgid "You swing at the corpse." -#~ msgid_plural "You swing at the corpses." -#~ msgstr[0] "你猛击尸体。" +#, fuzzy +#~ msgid "%1$s quickly strikes with %2$s %3$s at %4$s" +#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" -#~ msgid "Smash" -#~ msgstr "粉碎" +#, fuzzy +#~ msgid "%1$s quickly strike with %2$s %3$s at %4$s" +#~ msgstr "%1$s 横扫 %2$s %3$s 在 %4$s" -#~ msgid "Close" -#~ msgstr "关闭" +#, fuzzy +#~ msgid "Very Heavily Bleeding " +#~ msgstr "重度热依赖" -#~ msgid "Open" -#~ msgstr "打开" +#, fuzzy +#~ msgid "Cart" +#~ msgstr "高尔夫球车" -#~ msgid "%s Stop %s?" -#~ msgstr "%s 停止 %s" +#, fuzzy +#~ msgid "Enter new cart name:" +#~ msgstr "输入新的车辆名字" -#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." -#~ msgstr "%s 停止 %s ?(Y)是,(N)否,(I)忽略干扰并直到结束。" +#, fuzzy +#~ msgid "Start cart construction" +#~ msgstr "开始车辆建造" -#~ msgid "training" -#~ msgstr "训练" +#~ msgid "" +#~ "You just put on an article of clothing that provides ample storage " +#~ "space.\n" +#~ "This will allow you to carry much more stuff, but be aware that there is " +#~ "also\n" +#~ "a limit on the weight you can carry which depends on strength. The item " +#~ "you\n" +#~ "put on also encumbered your torso. This will make combat a little more\n" +#~ "difficult. To check encumbrance, press @." +#~ msgstr "" +#~ "你刚穿上了一件提供携带空间的衣服,这将允许你携带更多\n" +#~ "的东西,但要知道,还有你的体重可以决定行动强度极限。 \n" +#~ "你穿上的衣物也会拖累你的身体各部分。这将使战斗更困难 \n" +#~ "的,阻碍行动,按@可查看人物状态。" -#~ msgid "pumping gas" -#~ msgstr "抽气" +#~ msgid "" +#~ "You just put on an article of clothing that protects against the " +#~ "environment.\n" +#~ "The most common and imporant are respiratory devices, which will protect " +#~ "you\n" +#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" +#~ "However, they also make it a little harder to breath when running, so " +#~ "you'll\n" +#~ "move more slowly. To check encumbrance, press @." +#~ msgstr "" +#~ "你刚刚穿上那套衣服可以形成环境防护。最\n" +#~ "常见也是重要的是呼吸设备,它们能从烟雾、\n" +#~ "空气毒素、微生物和其他常见的危害中保护\n" +#~ "你。然而,它们也使你不能顺畅地呼吸,你会\n" +#~ "移动得更慢。按“@”,检查\"累赘度\"。" -#~ msgid "foraging" -#~ msgstr "觅食" +#~ msgid "" +#~ "Choose the tileset you want to use. Only applicable on SDL builds. " +#~ "Requires restart." +#~ msgstr "选择你想要的贴图版本。目前只支持SDL版本。需要重新启动。" -#~ msgid "disassembly" -#~ msgstr "拆卸" +#~ msgctxt "Main Menu" +#~ msgid "eset" +#~ msgstr "重置" -#~ msgid "butchering" -#~ msgstr "屠宰" +#~ msgid "mole" +#~ msgstr "鼹鼠" -#~ msgid "waiting" -#~ msgstr "等待中" +#~ msgid "" +#~ "An eastern timber rattlesnake, one of New England's most poisonous snakes." +#~ msgstr "东部响尾蛇,新英格兰最毒的蛇。" -#~ msgid "reloading" -#~ msgstr "装填" +#~ msgid "A small, omnivorous marsupial native to North America." +#~ msgstr "一种原产于北美的小型杂食性有袋类动物。" -#~ msgid "reading" -#~ msgstr "阅读" +#~ msgid "" +#~ "A small mammal native to North America, distinctive for its dexterous " +#~ "paws and facial markings." +#~ msgstr "北美本地的小型哺乳动物,具有灵巧的爪子和显著的面部特征。" -#~ msgid "playing" -#~ msgstr "播放中" +#~ msgid "" +#~ "A small blob of viscous goo that oozes\n" +#~ "across the ground like a mass of living\n" +#~ "oil." +#~ msgstr "" +#~ "一个黑色的粘液小球,渗出的\n" +#~ "粘液滴在地上像一团生活用\n" +#~ "的大众石油。" -#~ msgid "crafting" -#~ msgstr "手工艺" +#, fuzzy +#~ msgid "" +#~ "A plant that grows as high as your head,\n" +#~ "with one thick, bark-coated stalk\n" +#~ "supporting a flower-like head with a paralyzing\n" +#~ "sting within." +#~ msgstr "" +#~ "一种植物长得和你的头一样高,\n" +#~ "有着一个厚的,树皮覆盖的茎\n" +#~ "支撑着有个像头一样里面有着\n" +#~ "锋利刺毛的花。" -#~ msgid "whatever" -#~ msgstr "不管怎么样" +#~ msgid "" +#~ "A massive, mutated freshwater shellfish,\n" +#~ "resembling a humongous lobster." +#~ msgstr "巨大的淡水变异贝。" -#~ msgid "You learn %s." -#~ msgstr "你学会了 %s 。" +#~ msgid "" +#~ "A large and colorful game bird native to the forests of North America." +#~ msgstr "一种原产于北美森林的大型鸟类" -#~ msgid "Study %s?" -#~ msgstr "研究 %s ?" +#~ msgid "clams" +#~ msgstr "蛤蜊" -#~ msgid "You haven't had anything to drink in 2 days!" -#~ msgstr "你两天没喝东西了!" +#~ msgid "" +#~ "Vacuum packed fruit slices in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "用塑料袋真空包装的水果片,打开它尽情享用吧" -#~ msgid "4 days... no water.." -#~ msgstr "水…4天没喝了…" +#~ msgid "" +#~ "This chemistry set stored in a bag contains glass containers, hoses, " +#~ "metal wire, a hotplate, and safety glasses. It might be used to craft " +#~ "some chemistry projects if you're so inclined." +#~ msgstr "" +#~ "这个包里存放的一套化学用品包括一些玻璃器皿,一些金属线以及护目镜.如果你想制" +#~ "作一些化学品,它可为你提供一定的便利。绝命毒师最喜欢的道具!" -#~ msgid "You haven't eaten in over a week!" -#~ msgstr "你一星期没吃东西了!" +#, fuzzy +#~ msgid "" +#~ "Small metal objects covered with many sharp points. If an unsuspecting " +#~ "victim steps on it, they'll get a spine through the foot." +#~ msgstr "" +#~ "这是一块厚实的木板,其中一端上有几枚长长的钉子。极简主义的杀人利器。" -#~ msgid "Your bite wound feels swollen and painful." -#~ msgstr "咬伤的地方有些肿胀和疼痛。" +#~ msgid "Really cheap fortified red wine." +#~ msgstr "廉价的红酒" -#~ msgid "Your bite wound really hurts." -#~ msgstr "咬伤的伤口十分疼痛" +#~ msgid "RPG-7 Ammo" +#~ msgstr "RPG-7专用弹药" + +#~ msgid "Lumpy white soup made of clams and potatoes." +#~ msgstr "像湖泊一样起伏的白色蛤蜊汤混杂着土豆." + +#~ msgid "An empty hull from a 5x50mm flechette round." +#~ msgstr "一个5x50mm箭弹的空壳" + +#~ msgid "Ammunition for the RPG-7." +#~ msgstr "已装填弹药的RPG-7" + +#~ msgid "A very loud horn, usually found on large trucks like semis." +#~ msgstr "一个非常响亮的喇叭,通常用在拖车这样的大卡车上" #~ msgid "" -#~ "Strength - 1; Intelligence - 2\n" -#~ "You stop to scratch yourself frequently; high intelligence helps you " -#~ "resist\n" -#~ "this urge." +#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " +#~ "stimulant when you inject yourself with it. Asthmatics can use it in an " +#~ "emergency to clear their asthma." +#~ msgstr "一支包含一次计量强心剂的针筒。注射这玩意会让你嗨到翻。" + +#~ msgid "" +#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " +#~ "ball game will REALLY heat up." #~ msgstr "" -#~ "力量- 1;智力- 2\n" -#~ "你停下来扯住自己头发; 高智力可抵抗这种\n" -#~ "强烈欲望。" +#~ "一杆结实的棒球棒裹上浸润易燃液体的布条。只要点燃它,“棒”-“球”运动会变得超" +#~ "级火热!超级棒!" #~ msgid "" -#~ "Speed -40%\n" -#~ "You can feel the tiny spores sinking directly into your flesh." +#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " +#~ "brightly, and makes it much easier to see the baselines at night games " +#~ "(It also makes the umpire FAR more likely to call a ball instead of a " +#~ "strike)." #~ msgstr "" -#~ "速度-40%\n" -#~ "你可以感觉到小孢子直接侵入你的肉体中。" +#~ "一杆结实的棒球棒裹上浸润易燃液体的布条。燃烧的如此灿烂!让你能在夜间“游" +#~ "戏”中更容易找到“基线”。(当然这也让裁判 【更】容易判罚一次坏“球”而不是一次" +#~ "好”球”)" -#~ msgid "Pus Filled Wound" -#~ msgstr "充满脓液的伤口" +#~ msgid "" +#~ "A stout collapsible spade commonly used by military forces and favored by " +#~ "hikers." +#~ msgstr "这种结实的折叠铲常用于军队,不过也备受徒步旅行者的追捧。" -#~ msgid "Painful Infected Wound" -#~ msgstr "剧痛的感染伤口" +#~ msgid "A simple bulb horn, found on many bicycles. Honk honk." +#~ msgstr "一个简单的小灯泡,许多自行车上都可以看到." -#~ msgid "Infected Wound" -#~ msgstr "受感染的伤口" +#~ msgid "" +#~ "A shell filled with tiny steel darts. Extremely damaging, plus the spread " +#~ "makes it very accurate at short range. Slices through most forms of armor " +#~ "with ease." +#~ msgstr "小钢镖,威力不错,可以及其精准的命中怪物." -#~ msgid "Painful Bite Wound" -#~ msgstr "剧痛的咬伤" +#~ msgid "" +#~ "A sealed glass jar containing a sliced fruit. Activate to open and enjoy." +#~ msgstr "装在玻璃瓶里的水果片,打开它尽情享受吧" -#~ msgid "Bite Wound" -#~ msgstr "咬伤" +#~ msgid "A portable electric food dehydrator, powered by standard batteries." +#~ msgstr "便携式食品脱水机,电池供能" -#~ msgid "Bugs Under Skin" -#~ msgstr "皮肤下有虫子在蠕动" +#~ msgid "" +#~ "A portable charcoal smoker. Good for weekend barbecuing and preserving " +#~ "meat with smoke." +#~ msgstr "一个便携式木炭烤架,适合周末烧烤和保存鲜肉." -#~ msgid "Bleeding" -#~ msgstr "流血" +#~ msgid "" +#~ "A pipe whose ends have been bent and hammered flat to resemble a crowbar." +#~ msgstr "一根钢管,其中一端弯曲后被锤子砸扁,可以当撬棍使。" -#~ msgid "Spores" -#~ msgstr "孢子" +#~ msgid "" +#~ "A huge, curved, two-handed sword from Japan. Surprisingly light for its " +#~ "size." +#~ msgstr "双手日本刀,外表闪亮着寒光。" -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s 开始疯狂抓挠自己的全身!" +#~ msgid "A handful of large, purple plums. It is good for your digestion." +#~ msgstr "一把紫色的大李子。它是对你对消化道有好处。" -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s 开始疯狂抓挠自己的全身!" +#~ msgid "" +#~ "A dry and tasteless bread product capable of remaining edible without " +#~ "spoilage for vast lengths of time." +#~ msgstr "干燥无味的面包,没有打开的话可以保存很长时间。" -#~ msgid "Contracted the infection." -#~ msgstr "感染" +#~ msgid "A car horn meant to be attached to a car's electrical system." +#~ msgstr "汽车喇叭要连接到汽车的电气系统." -#~ msgid "You disassemble the item into its components." -#~ msgstr "你把它拆解成它的组件." +#~ msgid "" +#~ "A brass-jacketed variant of the .44 Magnum round. This increases " +#~ "penetration slightly at the cost of reduced expansion." +#~ msgstr "" +#~ "一种带铜质外壳的改装版马格南左轮手枪。在牺牲了弹夹量的同时,这把枪获得了更" +#~ "好的穿透力。" -#~ msgid "Can't move furniture there! Choose a direction with open floor." -#~ msgstr "不能移向那个地方!选择一个有空地板的方向." +#, fuzzy +#~ msgid "" +#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " +#~ "you from the floor, making it easier to sleep" +#~ msgstr "" +#~ "一大张卷起来的泡沫塑料,很方便存放的样子,如果铺开也能当做一个床铺来使用。" -#~ msgid "Press a direction for the furniture to move (. to cancel):" -#~ msgstr "按方向键将家具向那个方向移动(.键取消)" +#~ msgid "A bacon, lettuce and tomato sandwich on toasted bread." +#~ msgstr "培根生菜西红柿三明治" -#~ msgid "You're not strong enough!" -#~ msgstr "你不够强壮!" +#~ msgid " misses!" +#~ msgstr "失手了!" -#~ msgid "Contruct" -#~ msgstr "建立" +#~ msgid " barely misses!" +#~ msgstr "差点失手了!" -#~ msgid "create an EMP" -#~ msgstr "制作一个EMP炸弹" +#~ msgid "l, 6, or right arrow" +#~ msgstr "按l、6或右方向键" -#~ msgid "Start a fire" -#~ msgstr "生一堆火" +#~ msgid "j/k, 8/2, or arrows" +#~ msgstr "按j/k、8/2或方向键" -#~ msgid "Too many itens" -#~ msgstr "太多东西" +#~ msgid "h, 4, or left arrow" +#~ msgstr "按h、4或左方向键" -#~ msgid "You have a speed craving." -#~ msgstr "你对兴奋剂上瘾了。" +#~ msgid "(Press spacebar to toggle)" +#~ msgstr "(按空格键进行切换)" -#~ msgid "You have a craving." -#~ msgstr "你开始犯瘾了。" +#~ msgid " select a statistic." +#~ msgstr " 选择属性" -#~ msgid "You have an alcohol craving." -#~ msgstr "你酒(精)瘾发作." +#~ msgctxt "Main Menu" +#~ msgid "oad" +#~ msgstr "载入" + +#~ msgctxt "Main Menu" +#~ msgid "elp" +#~ msgstr "帮助" #~ msgid "" -#~ "The mere thought of eating this stuff is enough to make your hair stand " -#~ "on end. Save it for when you're about to die of starvation." +#~ "Your body has bionics worth millions payed by public taxes. The " +#~ "government employed you as a spy: you have night vision, an alarm and a " +#~ "hacking module powered by your own metabolism." #~ msgstr "" -#~ "看起来很恶心的样子,虽然知道是可以吃的东西,不过还是留到饿死前再试吧。" +#~ "你的身体装有仿生学部件,是政府花了数百万美元税收来培养的间谍,你拥有夜视能" +#~ "力,报警和黑客攻击模块,这些经由你自身的新陈代谢。" + +#~ msgid "" +#~ "You were on your way to collect your check, when your pimp tried to kill " +#~ "you. You wish that it wasn't a common occurence. You start with the last " +#~ "of your stash and a strong crack addiction." +#~ msgstr "" +#~ "一直潜规则你的皮条客在你准备开工的时候试图杀了你,然后你发现这不是个别案" +#~ "例。于是你一身性感的打扮开始逃命!对了,你还是个不可救药的瘾君子。" + +#~ msgid "" +#~ "Before the Apocalypse, you turned to Heroin to soothe your many problems. " +#~ "Now, your habit is your only comfort and your only drive." +#~ msgstr "" +#~ "天启之前,你靠海洛因来安抚你的所有问题。现在,你的爱好是你的唯一的安慰和唯" +#~ "一的动力。" + +#~ msgid "Hardcore" +#~ msgstr "脆皮" + +#~ msgid "" +#~ "The shuffling corpse of a once-proud bear, its eyes ooze with black " +#~ "fluid, and its flesh is torn and scarred." +#~ msgstr "" +#~ "丧尸熊,现在他的眼睛流出黑色的血液,躯体伤痕累累,不过战斗力却更加可怕了." + +#~ msgid "" +#~ "The Northern short-tailed shrew, an insectvorous mammal that resembles a " +#~ "cross between a mouse and a mole. Notably for a mammal, it has a " +#~ "venomous bite, which can prove painful for humans." +#~ msgstr "" +#~ "北美短尾鼩,哺乳动物,形象介于老虎和鼹鼠之剑,他的咬力非常惊人,可以证明他" +#~ "足以给你造成伤害." + +#~ msgid "" +#~ "There's no room in your inventory for the %s, and you can't unwield your " +#~ "%s." +#~ msgstr "你的包裹没有给 %s 的空间了,并且你不能卸下你的 %s 。" + +#~ msgid "Monster Spotted!" +#~ msgstr "发现怪物!!" + +#~ msgid "Normal" +#~ msgstr "正常" diff --git a/lang/po/zh_TW.po b/lang/po/zh_TW.po index 1744d4d616432..6d2ef7284724b 100644 --- a/lang/po/zh_TW.po +++ b/lang/po/zh_TW.po @@ -1,14 +1,14 @@ -# Chinese (Traditional) translation for cataclysm +# Chinese (Traditional) translation for cdda # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the cataclysm package. +# This file is distributed under the same license as the cdda package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" -"Project-Id-Version: cataclysm\n" +"Project-Id-Version: cdda\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-07 14:53+1300\n" -"PO-Revision-Date: 2013-11-06 08:00+0000\n" +"POT-Creation-Date: 2013-11-08 22:24-0500\n" +"PO-Revision-Date: 2013-11-14 03:22+0000\n" "Last-Translator: xap cdda \n" "Language-Team: Chinese (Traditional) \n" "Language: \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2013-11-07 00:25+0000\n" +"X-Launchpad-Export-Date: 2013-11-14 03:32+0000\n" "X-Generator: Launchpad (build 16820)\n" #: action.cpp @@ -2890,7 +2890,7 @@ msgstr "離開並關機" #: computer.cpp msgid "Released subspace specimens." -msgstr "已釋放的子空間樣本。" +msgstr "已釋放的異空間樣本。" #: computer.cpp msgid "Result: Human blood, no pathogens found." @@ -2959,7 +2959,7 @@ msgstr "獲取目標已取消." #: computer.cpp msgid "Terminated subspace specimens." -msgstr "已終結的子空間樣本。" +msgstr "已終結的異空間樣本。" #: computer.cpp msgid "The console electrocutes you!" @@ -3695,7 +3695,7 @@ msgstr "蜘蛛" #: defense.cpp msgid "Subspace" -msgstr "子空間" +msgstr "異空間" #: defense.cpp msgid "Template Name:" @@ -7554,7 +7554,7 @@ msgstr "退出" #. ~ Fast-scroll indicator #: game.cpp msgid "F" -msgstr "" +msgstr "F" #: game.cpp msgid "FACTIONS:" @@ -7725,9 +7725,8 @@ msgid "Maybe you should find something new to read..." msgstr "你也許該找點新的閱讀材料..." #: game.cpp -#, fuzzy msgid "Monster dangerously close!" -msgstr "你的臉快凍僵了." +msgstr "危險的怪物靠近了!" #: game.cpp msgid "Monster spotted!" @@ -8801,9 +8800,8 @@ msgid "You fall on the ground for %d damage." msgstr "你摔到地上造成 %d 傷害。" #: game.cpp -#, fuzzy msgid "You feel like you haven't slept in days." -msgstr "你兩天沒睡了!" +msgstr "你覺得你好像好多天沒睡覺了。" #: game.cpp #, c-format @@ -11603,7 +11601,7 @@ msgstr "左輪手槍。" #: item.cpp msgid "Rifles." -msgstr "長槍." +msgstr "步槍" #: item.cpp msgid "SMGs. " @@ -11984,6 +11982,10 @@ msgstr "元件" msgid "corpse" msgstr "屍體" +#: itypedef.cpp +msgid "ferrous rail projectile" +msgstr "" + #: itypedef.cpp msgid "flyer" msgstr "傳單" @@ -12057,9 +12059,8 @@ msgid "shot" msgstr "散彈" #: itypedef.cpp lang/json/json_items.py -#, fuzzy msgid "signal flare" -msgstr "信號接收器" +msgstr "信號彈" #: itypedef.cpp lang/json/json_vehicle_parts.py msgid "small wheel" @@ -12512,6 +12513,10 @@ msgstr "出現巨大蒼蠅!!" msgid "Giant wasps appear!" msgstr "出現巨大黃蜂!!" +#: iuse.cpp +msgid "HOOOOONK!" +msgstr "叭~~~!" + #: iuse.cpp msgid "Hammers can only remove boards from windows, doors and fences." msgstr "鐵鎚只能拿來拆窗戶,門與籬笆。" @@ -12696,9 +12701,8 @@ msgid "Put a knife in the boot" msgstr "在靴子中藏了一把小刀。" #: iuse.cpp -#, fuzzy msgid "Put the cat food where?" -msgstr "把寶路放置到哪邊?" +msgstr "把貓食放在哪?" #: iuse.cpp msgid "Put the dog food where?" @@ -12978,7 +12982,7 @@ msgstr "蠟燭熄滅了" msgid "" "The cat seems to like you! Or maybe it just tolerates your presence better. " "It's hard to tell with cats." -msgstr "" +msgstr "貓看起來很喜歡你!或是可能他只是允許你的存在而已。貓的心思猜不透啊。" #: iuse.cpp msgid "The dog seems to like you!" @@ -12993,9 +12997,8 @@ msgid "The fabric of space seems to decay." msgstr "這個空間似乎正在分解..." #: iuse.cpp -#, fuzzy msgid "The flare sputters out." -msgstr "%s 四散成了碎片。" +msgstr "信號彈射出。" #: iuse.cpp msgid "The flashlight flicks off." @@ -13394,6 +13397,12 @@ msgstr "你埋藏了地雷。" msgid "You can dig a pit via the construction menu--hit *" msgstr "你能夠透過建設選單進行挖坑--按下 *" +#: iuse.cpp +msgid "" +"You can feel the blood rushing through your veins and a strange, medicated " +"feeling washes over your senses." +msgstr "你能感受到血液沖過你身體的每一條血管,並且有奇特的藥效洗淨了你的感官。" + #: iuse.cpp msgid "You can only mod tools with this battery mod." msgstr "你只能將這個電池插件裝在工具上" @@ -13475,9 +13484,8 @@ msgid "You can't see to sew!" msgstr "太暗了,你無法縫紉!" #: iuse.cpp -#, fuzzy msgid "You can't turn off a flare." -msgstr "螢光棒是關不掉的。" +msgstr "你不能把照明彈關閉。" #: iuse.cpp msgid "You can't turn off a glowstick." @@ -13506,9 +13514,9 @@ msgid "You cauterize yourself. It hurts like hell!" msgstr "你燒灼自己。痛死了!" #: iuse.cpp -#, fuzzy, c-format +#, c-format msgid "You chew your %s." -msgstr "你吃了你的 %s。" +msgstr "你咀嚼你的 %s。" #: iuse.cpp msgid "You churn up the earth here." @@ -13548,6 +13556,10 @@ msgstr "你更進一步地弄壞了 %s 。" msgid "You damage your %s!" msgstr "你的 %s 受損了!" +#: iuse.cpp +msgid "You depress the button but no sound comes out." +msgstr "你鬆開按鈕但是沒有任何聲響。" + #: iuse.cpp msgid "You destroy it!" msgstr "你毀了它。" @@ -13603,7 +13615,7 @@ msgstr "你覺得有一點搖搖晃晃。" #: iuse.cpp msgid "You feel a burning sensation under your skin that quickly fades away." -msgstr "" +msgstr "你感覺皮膚有快速消失的灼熱感。" #: iuse.cpp msgid "You feel a momentary nausea." @@ -13661,6 +13673,10 @@ msgstr "你覺得快起笑了。" msgid "You feel very sleepy..." msgstr "你覺得很想睡..." +#: iuse.cpp +msgid "You feel...better. Somehow." +msgstr "你感覺...好多了。不知為何。" + #: iuse.cpp msgid "You have a vision of the surrounding area..." msgstr "你睜開眼睛,勉強看到周圍。" @@ -13681,6 +13697,10 @@ msgstr "你加熱了食物" msgid "You honk the bicycle horn." msgstr "你按了腳踏車的吧噗。" +#: iuse.cpp +msgid "You honk your airhorn." +msgstr "你按了喇叭。" + #: iuse.cpp msgid "You inject the vaccine." msgstr "你注射了疫苗。" @@ -13828,6 +13848,10 @@ msgid "" "disassemble ammunition." msgstr "你至少需要第二級火槍技能,才可以分解彈藥。" +#: iuse.cpp +msgid "You need to roar, bask, bite, and flap. NOW." +msgstr "你需要吼叫、曬太陽、咬東西及鼓動翅膀。現在。" + #: iuse.cpp msgid "You open the jar, exposing it to the atmosphere." msgstr "你打開了罐頭。" @@ -14059,9 +14083,8 @@ msgid "You snort some crystal meth." msgstr "你吸了點冰毒。" #: iuse.cpp -#, fuzzy msgid "You spill the cat food all over the ground." -msgstr "你把狗食灑了一地。" +msgstr "你把貓食灑在地上。" #: iuse.cpp msgid "You spill the dogfood all over the ground." @@ -14080,9 +14103,8 @@ msgid "You stop the bleeding." msgstr "你止血了。" #: iuse.cpp -#, fuzzy msgid "You strike your flare and light it." -msgstr "你把 %s 修改得更合身。" +msgstr "你把照明彈點燃了。" #: iuse.cpp msgid "You string up the tripwire." @@ -15391,6 +15413,10 @@ msgstr "你的視力得到大幅強化,讓你得到額外 2 點的感知。" msgid "A terrifyingly real dream has you killing game with your bare teeth." msgstr "你做了一個你用牙齒進行殺戮的嚇人夢境。" +#: lang/json/json_dreams.py +msgid "Hoof. Talon. Tooth. Fight. Feed. Forward." +msgstr "蹄。爪。牙。戰鬥。進食。前進。" + #: lang/json/json_dreams.py msgid "" "In a dream you catch a glimpse of a strangely cattle-like image of yourself." @@ -15442,6 +15468,12 @@ msgid "" "While dreaming, you see a distinctively lizard-like reflection of yourself." msgstr "你做夢的時候看到自己的倒影像是蜥蜴一樣。" +#: lang/json/json_dreams.py +msgid "" +"While dreaming, you see yourself dressed in a hospital gown, receiving " +"treatment." +msgstr "在夢中,你看到自己穿著病服,在醫院接受治療。" + #: lang/json/json_dreams.py msgid "Whilst dreaming, you see a disturbingly bestial version of yourself." msgstr "在夢中,你看到了野獸模樣的自己感到很不安。" @@ -15459,6 +15491,10 @@ msgstr "你做了一個比你真實生活更逼真的夢境,是有關於鳥類 msgid "You are frightened of the outside after your vivid dream of cave life." msgstr "你發現你在做完穴居生活的夢境後變得害怕外出。" +#: lang/json/json_dreams.py +msgid "You are many animals, and yet one." +msgstr "你是許多動物中的其中之一。" + #: lang/json/json_dreams.py msgid "You are terrified by a dream of becoming a lizard hybrid." msgstr "你做了一個自己變成半蜥蜴人的可怕夢境。" @@ -15467,6 +15503,15 @@ msgstr "你做了一個自己變成半蜥蜴人的可怕夢境。" msgid "You are terrified by a dream of serving the hive queen mindlessly." msgstr "你被夢境中的自己盲目服從女王蜂而嚇到了。" +#: lang/json/json_dreams.py +msgid "" +"You can't quite work out what the dream is about...it just keeps changing." +msgstr "你無法理清做的是什麼夢...它不停的變換。" + +#: lang/json/json_dreams.py +msgid "You dream about the zoo, for some reason." +msgstr "你不知道為什麼夢到了動物園。" + #: lang/json/json_dreams.py msgid "You dream of being a primitive cave dweller." msgstr "你夢到你變成原始的穴居動物。" @@ -15475,6 +15520,11 @@ msgstr "你夢到你變成原始的穴居動物。" msgid "You dream of grazing in an open field." msgstr "你做了一個在廣闊牧場放牛的夢。" +#: lang/json/json_dreams.py +msgid "" +"You dream of having that success you knew you deserved, back before all this." +msgstr "你夢到在這一切事情發生前你是多麼的成功。" + #: lang/json/json_dreams.py msgid "You dream of living as a terrifying octopus mutant." msgstr "你夢到你生活像是個嚇人的章魚突變體。" @@ -15491,6 +15541,10 @@ msgstr "你夢到你生活在海底。" msgid "You dream of swimming in the open ocean" msgstr "你夢到了你在大海中游泳。" +#: lang/json/json_dreams.py +msgid "You feel...OK." +msgstr "你覺得...還好。" + #: lang/json/json_dreams.py msgid "" "You find it hard to control your limbs after dreaming of amorphous blob life." @@ -15516,10 +15570,20 @@ msgstr "你做了一個有關沐浴在陽光下的怪夢。" msgid "You have a disturbing dream of swimming with a school of fish." msgstr "你作了一個令人不安的夢,夢中你和一群魚在水中遨遊。" +#: lang/json/json_dreams.py +msgid "You have a disturbing dream of undergoing strange medical procedures." +msgstr "你做了一個關於進行地下手術的不安夢境。" + #: lang/json/json_dreams.py msgid "You have a disturbingly lifelike dream of living as a lizard." msgstr "你做了一個生活像是蜥蜴的嚇人夢境。" +#: lang/json/json_dreams.py +msgid "" +"You have a dream of doctors and nurses doing unnatural things to your body, " +"which brings you perverse pleasure." +msgstr "你夢到有醫生和護士對你的身體做不自然的事情,讓你有種變態的快感。" + #: lang/json/json_dreams.py msgid "You have a dream of working in a hive." msgstr "你做了一個在蜂巢工作的夢。" @@ -15533,6 +15597,11 @@ msgstr "你做了一個變成侯鳥避寒遷徙的真實夢境。" msgid "You have a strange dream about animals." msgstr "你做了一個有關動物的怪夢。" +#: lang/json/json_dreams.py +msgid "" +"You have a strange dream about being a patient in a frightening hospital." +msgstr "你做了一個在恐怖病院當病患的詭異夢境。" + #: lang/json/json_dreams.py msgid "You have a strange dream about birds." msgstr "你做了一個有關於鳥類的怪夢。" @@ -15585,6 +15654,16 @@ msgstr "你做了一個在污泥中生活的怪夢。" msgid "You have a strange dream of spinning webs" msgstr "你夢到你在織網。" +#: lang/json/json_dreams.py +msgid "You have a strange dream." +msgstr "你做了一個怪夢。" + +#: lang/json/json_dreams.py +msgid "" +"You have a vivid dream of being a medical anomaly, as your heartbeat syncs " +"with the steady drip of an IV line." +msgstr "你做了一個關於醫療的生動夢境,你的心跳和點滴穩定的同步跳動。" + #: lang/json/json_dreams.py msgid "You have a vivid dream of hunting in the woods." msgstr "你做了一個有關於在樹林中打獵的生動夢境。" @@ -15597,6 +15676,11 @@ msgstr "你做了一個在天空飛翔的怪夢。" msgid "You scream in fear while you dream of being chased by a cat" msgstr "你做夢時發出害怕的尖叫因為你夢到被貓追。" +#: lang/json/json_dreams.py +msgid "" +"You see yourself, five years from now, as the leader of a successful city." +msgstr "你看到五年後的自己,成為了一個城市的成功領導。" + #: lang/json/json_dreams.py msgid "You terrifyingly dream of being led to a slaughterhouse by a farmer." msgstr "你做了一個被屠夫牽去屠宰場的惡夢。" @@ -15617,10 +15701,18 @@ msgstr "你做了帶著背包奔跑,狩獵動物的生動夢境。" msgid "Your disturbingly lifelike dream has you pollinating plants." msgstr "你做了一個有關於植物授粉的怪夢。" +#: lang/json/json_dreams.py +msgid "Your dream is filled with creatures, and yet all seem like you." +msgstr "你夢到被動物圍繞,而且牠們似乎都很喜歡你。" + #: lang/json/json_dreams.py msgid "Your dream of living in the dark for years is almost real." msgstr "夢境中的自己終年生活在黑暗中就像是真的一樣。" +#: lang/json/json_dreams.py +msgid "Your dream-self looks competent and in control." +msgstr "你夢到自己很有自信且能幹。" + #: lang/json/json_dreams.py msgid "Your dreams give a strange reclusive feeling." msgstr "你的夢境讓你有了穴居動物的奇怪感覺。" @@ -15669,6 +15761,10 @@ msgstr "你的夢境讓你有了潮溼的奇怪感覺。" msgid "Your dreams give you a strange wet, scaly feeling." msgstr "你的夢境讓你有了潮濕,鱗屑的感覺。" +#: lang/json/json_dreams.py +msgid "Your dreams give you an oddly medicated feeling." +msgstr "你做的夢讓你有了奇異的藥物感。" + #: lang/json/json_dreams.py msgid "Your dreams of fully turning into a spider frighten you." msgstr "你變成蜘蛛的夢嚇到你了。" @@ -15678,10 +15774,18 @@ msgid "" "Your dreams of living on the ocean floor seem more lifelike than reality." msgstr "你覺得生活在海底的夢境似乎比真實生活更真實。" +#: lang/json/json_dreams.py +msgid "Your dreams...are complex and multifaceted." +msgstr "你的夢境...變得複雜而多變。" + #: lang/json/json_dreams.py msgid "Your lifelike dreams have you scavenging food with a pack of rats." msgstr "你和鼠群一同生活的夢境就像是真實生活一樣。" +#: lang/json/json_dreams.py +msgid "Your success in restoring civilization was only a dream. For now." +msgstr "你在夢中成功的重建文明。" + #: lang/json/json_dreams.py msgid "Your vivid dream of living as a slime blob frightens you." msgstr "你被有關活的像是黏液球的生動夢境而嚇到。" @@ -16726,7 +16830,7 @@ msgstr ".50 BMG 彈殼" #: lang/json/json_items.py msgid ".50 BMG incendiary" -msgstr "" +msgstr ".50 BMG 燃燒彈" #: lang/json/json_items.py msgid ".500 S&W Magnum" @@ -16769,6 +16873,14 @@ msgstr "10mm Auto彈" msgid "12 gauge pistol" msgstr "散彈手槍" +#: lang/json/json_items.py +msgid "2-by-arm guards" +msgstr "" + +#: lang/json/json_items.py +msgid "2-by-shin guards" +msgstr "" + #: lang/json/json_items.py msgid "2-by-sword" msgstr "2x4木劍" @@ -16965,10 +17077,12 @@ msgid "" "cartridge and used by the majority of US police forces. It is also a very " "popular round in sub-machine guns." msgstr "" +"9釐米帕拉彈被公認為最受歡迎的手槍子彈,被美國警方所廣泛使用。這子彈同時也是衝" +"鋒槍子彈的熱門選擇。" #: lang/json/json_items.py msgid "93mm single-stage high-explosive ammunition for the RPG-7." -msgstr "" +msgstr "供RPG-7使用的 93mm 口徑高爆彈藥。" #: lang/json/json_items.py msgid "9mm +P" @@ -17019,7 +17133,7 @@ msgstr "裝填了獵鹿鋼珠的40mm口徑榴彈" #: lang/json/json_items.py msgid "A 40mm grenade with a concussive explosion load." -msgstr "" +msgstr "能產生震撼爆炸的 40mm 榴彈。" #: lang/json/json_items.py msgid "" @@ -17033,7 +17147,7 @@ msgstr "" msgid "" "A 40mm grenade with a small explosive load and a high number of damaging " "fragments." -msgstr "" +msgstr "爆炸時會產生大量致命破片的 40mm 榴彈。" #: lang/json/json_items.py msgid "" @@ -17066,6 +17180,8 @@ msgid "" "A 60mm High Explosive Anti Tank round. It could blow through up to two feet " "of concrete." msgstr "" +"一個 60mm的高爆反坦克砲彈。能夠炸穿厚達2英吋的混凝土。(明明物品名稱是 " +"66mm ...)" #: lang/json/json_items.py msgid "" @@ -17123,7 +17239,7 @@ msgstr "拇指大小的隨身碟,儲存資料用。" #: lang/json/json_items.py msgid "A bacon, lettuce, and tomato sandwich on toasted bread." -msgstr "" +msgstr "一個用培根、生菜、蕃茄和烤麵包製成的三明治。" #: lang/json/json_items.py msgid "A bag of cheap, own-brand chips." @@ -17366,7 +17482,7 @@ msgstr "一盒小鐵球。幾乎沒有殺傷力。" #: lang/json/json_items.py msgid "A brass-jacketed .22 caliber round with superior penetration capacity." -msgstr "" +msgstr "外表包覆全金屬的.22口徑子彈,有著相對較高的穿透力。" #: lang/json/json_items.py msgid "" @@ -17405,6 +17521,8 @@ msgid "" "A brass-jacketed variant of the .44 Magnum round. This increases " "penetration slightly at the cost of reduced damage from expansion." msgstr "" +"外表包覆全金屬的.40史密斯威森彈。藉由犧牲其彈頭擴張性所帶來的抑止力,其在穿透" +"力上能稍微有所提升。" #: lang/json/json_items.py msgid "" @@ -17607,7 +17725,7 @@ msgstr "一個棉製手帕,蓋住口鼻來保暖或是阻擋一些粉塵。" #: lang/json/json_items.py msgid "A crisp head of iceberg lettuce." -msgstr "" +msgstr "一個鮮嫩的捲心萵苣。" #: lang/json/json_items.py msgid "" @@ -17905,6 +18023,12 @@ msgstr "每季出刊,主要介紹可以用強力膠製造的手工藝品雜誌 msgid "A fur coat with a couple small pockets. Extremely warm." msgstr "一件毛外套,擁有許多小口袋。非常保暖。" +#: lang/json/json_items.py +msgid "" +"A fur pelt tied into a loincloth. Covers your modesty, but not much else. " +"Now you are a true barbarian warrior." +msgstr "" + #: lang/json/json_items.py msgid "" "A fuzzy pair of brownish cat ears on a headband. It does nothing, but " @@ -18017,6 +18141,8 @@ msgid "" "weapon, it consists of a stick with a perpendicular handle attached a third " "of the way down its length." msgstr "" +"一根通常被警察所使用的硬塑膠製短棍。源自沖繩的武器,由一個握柄垂直連結於棍子" +"的三分之一處所組成。" #: lang/json/json_items.py msgid "" @@ -18137,7 +18263,7 @@ msgstr "一對厚實的皮革手套,常用在消防員或是一些鑄鐵工作 msgid "" "A heavy plastic cartridge made for use in flare guns. It appears to be a " "modified 12 gauge shotgun shell." -msgstr "" +msgstr "一個沈重的塑膠信號彈殼。似乎被改造成散彈槍殼了。" #: lang/json/json_items.py msgid "A heavy plastic helmet normally worn by football players." @@ -18285,6 +18411,13 @@ msgid "" "projectile to high velocity. Powered by UPS." msgstr "一把土炮的改造槍,利用電磁原理來把投射物推到高速發射。需要UPS供電。" +#: lang/json/json_items.py +msgid "" +"A huge duffel bag with backpack attached, both packed to the gills. Judging " +"by the feel, a National Guard soldier could have packed this to be ready for " +"deployment. /n Disassemble to unpack and enjoy." +msgstr "" + #: lang/json/json_items.py msgid "A huge duffel bag, provides plenty of storage but severely encumbering." msgstr "一個很大的帆布行李袋,能夠提供許多的儲物空間,但是也造成了許多累贅。" @@ -18323,6 +18456,12 @@ msgid "" "long firearm. It allows crossbow bolts to be fired." msgstr "在長槍槍管上安裝十字弓臂與軌道的模組。能夠發射十字弓箭矢。" +#: lang/json/json_items.py +msgid "" +"A knife consisting of a long somewhat sharpened spike and a thightly wrapped " +"a rag as a handle. It makes a good melee weapon." +msgstr "" + #: lang/json/json_items.py msgid "A large 12v lead-acid battery used to power truck electrical systems." msgstr "一個12v的鉛酸電池,用來供電給卡車的電子系統。" @@ -18494,14 +18633,11 @@ msgid "A large, spiky pineapple. A bit sour, though." msgstr "一個大而參差的鳳梨。有點酸。" #: lang/json/json_items.py -#, fuzzy msgid "" "A leather album full of photos of somebody's family. You don't know any of " "the people in them, but seeing these pictures still makes you think of " "happier times." msgstr "" -"一本裝滿著某人家族照片的皮革相簿。你不認識裡面的任何人,但是看這些照片讓你回" -"想起過去一些快樂的時光。" #: lang/json/json_items.py msgid "" @@ -18548,11 +18684,10 @@ msgid "" msgstr "一條細長而相對堅韌的金屬絲線。就像是你在鐵絲護欄上會看到的那種。" #: lang/json/json_items.py -#, fuzzy msgid "" "A light and breezy cotton dress. Though cool and comfortable to wear, it " "lacks any storage space." -msgstr "一件棉質長洋裝。雖然穿起來很舒適,但是沒甚麼儲物空間。" +msgstr "" #: lang/json/json_items.py msgid "A light vest covered in pockets and straps for storage." @@ -18575,6 +18710,8 @@ msgid "" "A lightweight hatchet made for throwing. Its ineffective cutting edge and " "light weight makes it unsuitable for use as a tool." msgstr "" +"一支輕型的投擲用手斧,那並不鋒利的刀刃與輕量化的特性,讓它無法被當成工具使" +"用。" #: lang/json/json_items.py msgid "" @@ -18615,6 +18752,12 @@ msgstr "一根長鐵桿,尾部是扁平的金屬頭,用來駕馭高爾夫球 msgid "A long nylon rope. Useful for keeping yourself safe from falls." msgstr "一捆尼龍繩,可以用來避免你墜落。" +#: lang/json/json_items.py +msgid "" +"A long peice of wood with several chunks of steel firmly tied to it. The " +"resulting weapon is unwieldy and slow but very heavy hitting." +msgstr "" + #: lang/json/json_items.py msgid "" "A long piece of cotton string. Use scissors on it to cut it into smaller " @@ -19036,6 +19179,20 @@ msgstr "" msgid "A pair of high heels. Difficult to even walk in." msgstr "一雙高跟鞋。穿這個連走路都不好走。" +#: lang/json/json_items.py +msgid "" +"A pair of improvised arm guards made from broken pieces of a 2by4 that are " +"tied to your arms with rags and string, they offer good proection but are " +"really uncomfortable to wear." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A pair of improvised shin guards made from broken pieces of a 2by4 that are " +"tied to your shins with rags and string, they offer good proection but are " +"really hard to run with." +msgstr "" + #: lang/json/json_items.py msgid "A pair of khaki pants. Slightly warmer than jeans." msgstr "一件卡其色的褲子。稍微比牛仔褲保暖。" @@ -19048,6 +19205,12 @@ msgstr "一件卡其色的短褲。" msgid "A pair of knee pads made of stout plastic and cloth." msgstr "一對由堅固的布料與塑膠製成的護膝。" +#: lang/json/json_items.py +msgid "" +"A pair of knuckles consisting of two small squares of wood with several " +"nails coming through them. Usefull in nasty street fights ." +msgstr "一對手指虎,由兩塊被數支鐵釘穿過的木頭所組成,在街頭打架時很好用。" + #: lang/json/json_items.py msgid "" "A pair of leather gloves with no fingers, allowing greater manual dexterity." @@ -19124,11 +19287,10 @@ msgid "A pair of soft neoprene arm sleeves, often used in contact sports." msgstr "一對柔軟的尼龍製袖套,常用在各種運動上。" #: lang/json/json_items.py -#, fuzzy msgid "" "A pair of stylish sunglasses, look good while keeping the glare out of your " "eyes." -msgstr "一副太陽眼鏡,能夠防止強光亮瞎你的眼。" +msgstr "一副時尚墨鏡,擋住強光,留住時尚。" #: lang/json/json_items.py msgid "A pair of sunglasses, good for keeping the glare out of your eyes." @@ -19241,7 +19403,7 @@ msgstr "一件有兩個大口袋的雨衣。提供了防雨水的機能以及些 #: lang/json/json_items.py msgid "A plastic single shot pistol made to fire signal flares." -msgstr "" +msgstr "一個塑膠製的單發手槍,能用來發射信號彈。" #: lang/json/json_items.py msgid "" @@ -19551,6 +19713,8 @@ msgid "" "damage and isn't particularly accurate. Stands a good chance of remaining " "intact once fired." msgstr "" +"由木頭刻成並削尖的十字弓箭。它比鋼製十字弓箭要輕,但只能造成較輕微的傷害同時" +"準確度也較差。發射後有有很好的機率能重新使用。" #: lang/json/json_items.py msgid "" @@ -19608,6 +19772,20 @@ msgstr "" msgid "A short piece of nylon rope. Too small to be of much use." msgstr "一小段尼龍繩。因為太短所以沒辦法做什麼用。" +#: lang/json/json_items.py +msgid "" +"A short piece of rebar which has been straightened and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"A short piece of steel which has been forged true and sharpened on one end. " +"Could be used as a projectile by a sufficiently powerful ferromagnetic " +"weapon." +msgstr "" + #: lang/json/json_items.py msgid "" "A short, breezy cotton skirt. Easy to move in, but only has a single small " @@ -19650,6 +19828,8 @@ msgid "" "spread makes it very accurate at short range. Slices through most forms of " "armor with ease." msgstr "" +"填入了許多小鋼鏢的散彈。極大的傷害,在近距離有非常高的命中率。能夠穿透大部分" +"的護甲。" #: lang/json/json_items.py msgid "" @@ -19776,6 +19956,14 @@ msgid "" "scrap." msgstr "能夠裝填一發散彈的手槍,由廢料手工打造而成。" +#: lang/json/json_items.py +msgid "" +"A single-shot, electrically propelled, steel rail launcher handcrafted from " +"scrap. The hypervelocity metal stake that it fires is accelerated to the " +"point of spontaneous combustion by a Lorentz force generated by " +"electromagnetic induction, powered by a standard UPS." +msgstr "" + #: lang/json/json_items.py msgid "" "A six-foot wooden bow that fires arrows. This takes a fair amount of " @@ -19801,6 +19989,12 @@ msgstr "一件無袖的迷彩上衣。相當便於活動。" msgid "A sleeveless cotton shirt. Very easy to move in." msgstr "一件無袖的棉質上衣。相當便於活動。" +#: lang/json/json_items.py +msgid "" +"A slender long rod of wood, while traditionally intended as a training tool " +"for many dueling moves, it still makes a good melee weapon in a pinch." +msgstr "" + #: lang/json/json_items.py msgid "" "A slow-loading hand weapon that launches bolts. Stronger people can reload " @@ -19879,7 +20073,7 @@ msgstr "一頂金屬的安全帽,能夠蓋住頭部防止砍劈及穿刺傷害 #: lang/json/json_items.py msgid "A small metal teapot. Teatime wouldn't be complete without one." -msgstr "" +msgstr "一個金屬製的小茶壺。喝下午茶時,要有個茶壺才完美。" #: lang/json/json_items.py msgid "" @@ -20024,7 +20218,7 @@ msgstr "" msgid "" "A solid steel copper jacketed variant of the .50 BMG round. Penetration is " "increased, but damage is reduced." -msgstr "" +msgstr "一個用堅硬的鋼銅護套改造的.50 BMG子彈。穿透力增加,但傷害減少。" #: lang/json/json_items.py msgid "" @@ -20033,6 +20227,12 @@ msgid "" "you light the fuse it will explode, so throw it quickly!" msgstr "" +#: lang/json/json_items.py +msgid "" +"A somewhat sharpened piece of rebar, it is still better at bashing than " +"stabbing but the added flexibility is nice" +msgstr "" + #: lang/json/json_items.py msgid "A soup made from someone who is a far better meal than person." msgstr "一碗由顯然作為食材比作人更適合的某人'被'熬成的湯" @@ -20096,7 +20296,7 @@ msgstr "一個金屬的長型容器,利用熱解作用製炭;在缺氧狀態 #: lang/json/json_items.py msgid "A stout metal pole with a sharp point." -msgstr "" +msgstr "一根有著銳利尖端的結實金屬棒。" #: lang/json/json_items.py msgid "A stout pole with an improvised grip and a fire-hardened point." @@ -20108,6 +20308,8 @@ msgid "" "an Okinawan weapon, it consists of a stick with a perpendicular handle " "attached a third of the way down its length." msgstr "" +"一根通常被警察所使用的木製結實短棍。源自沖繩的武器,由一個握柄垂直連結於棍子" +"的三分之一處所組成。" #: lang/json/json_items.py msgid "" @@ -20186,14 +20388,13 @@ msgid "A sweet red berry." msgstr "紅色的甜莓果。" #: lang/json/json_items.py -#, fuzzy msgid "" "A sword bayonet is a large slashing weapon that can be attached to the front " -"of a shotgun or rifle, allowing a melee attack to deal piercing damage. The " +"of a shotgun or rifle, allowing a melee attack to deal cutting damage. The " "added length increases recoil substantially." msgstr "" -"刺刀是一種穿刺武器,能夠附掛在散彈槍,衝鋒槍,或是步槍上,可進行近戰攻擊來造" -"成穿刺傷害。但增加槍身的整體長度,造成一些後座力影響。" +"劍刺刀是大型的砍殺武器,能夠附掛在散彈槍或步槍的前端,並使用近戰攻擊來造成砍" +"劈傷害。增加的長度會大幅提高武器的後座力。" #: lang/json/json_items.py msgid "" @@ -20235,7 +20436,7 @@ msgstr "精選大骨熬煮,味美濃稠。" #: lang/json/json_items.py msgid "A tasty and nutritious fried bread treat." -msgstr "" +msgstr "請你吃一份美味又營養的油煎麵包。" #: lang/json/json_items.py msgid "A tasty summer squash." @@ -20333,6 +20534,8 @@ msgid "" "A thin and flat knife made for throwing. Its ineffective cutting edge and " "odd shape makes it unsuitable for use as a tool." msgstr "" +"一支薄且扁平的投擲用小刀,那並不鋒利的刀刃與奇特的形狀,讓它無法被當成工具使" +"用。" #: lang/json/json_items.py msgid "A thin cotton jacket with a hood. Good for brisk weather." @@ -20479,6 +20682,8 @@ msgid "" "designed to burn hotly upon impact, piercing armor and igniting flammable " "substances." msgstr "" +"一個改造過的強力.50 BMG狙擊子彈,能夠在射中時產生燃燒效果,同時能夠穿甲與點燃" +"可燃物。" #: lang/json/json_items.py msgid "" @@ -20817,18 +21022,16 @@ msgstr "" "容量。" #: lang/json/json_items.py -#, fuzzy msgid "" "An all-encompassing black helmet that covers your entire face and neck, " "providing excellent protection from all sorts of damage." -msgstr "一頂輕量的黑色頭盔能夠對於許多傷害提供保護。" +msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "An aluminium baseball bat, lighter than a wooden bat and a little easier to " "swing as a result." -msgstr "一根鋁製棒球棍,比木製的小又輕,所以傷害比較小一點。" +msgstr "" #: lang/json/json_items.py msgid "An aluminum can, like what soda comes in." @@ -20998,7 +21201,7 @@ msgstr "一個空的散彈彈殼。" #: lang/json/json_items.py msgid "An empty plastic hull from a 5x50mm flechette round." -msgstr "" +msgstr "一個 5x50mm 鋼鏢彈的空塑膠彈殼。" #: lang/json/json_items.py msgid "" @@ -21050,6 +21253,10 @@ msgstr "由非常沈重的鋼板製成的靴子。" msgid "An extremely heavy set of armor plated gloves." msgstr "由非常沈重的鋼板製成的手套。" +#: lang/json/json_items.py +msgid "An extremely rare mutagen cocktail." +msgstr "" + #: lang/json/json_items.py msgid "" "An extremely strong opioid narcotic derived from morphine. Incredibly " @@ -21477,6 +21684,8 @@ msgid "" "Claimed to be the world's most powerful handgun round, the .500 S&W Magnum " "was developed in tandem with the revolutionary S&W 500 Revolver." msgstr "" +".500 S&W 麥格農是由史密斯與威森兩人與他們革命性的500型左輪手槍所一同開發出的" +"彈種。" #: lang/json/json_items.py msgid "Clear juice obtained by cooking fruit in a large volume of water" @@ -21527,6 +21736,9 @@ msgid "" "charge and generally lacks gunpowder. The end result is a subsonic round. It " "is nearly silent, but is so weak as to be nearly useless." msgstr "" +".22CB是.22口徑子彈的一種變形。它只有非常小量的高壓瓦斯而基本上沒有任何火藥," +"使它成為一種亞音速子彈。射擊時幾乎沒有聲音,但貧弱的威力使其幾乎沒有什麼用" +"途。" #: lang/json/json_items.py msgid "" @@ -21715,6 +21927,9 @@ msgid "" "rifle round. However, due to its lack of yaw, this round deals less damage " "than most." msgstr "" +"7.62x39mm彈是由蘇聯於第二次世界大戰中所設計。由於使用這種彈藥的AK-47步槍與SKS" +"步槍的風行,7.62x39mm步槍彈的人氣也隨之廣為流傳。但必須注意的是因為這種彈種缺" +"乏滾轉的特性,使其的傷害會低於大部分其他彈種。" #: lang/json/json_items.py msgid "" @@ -22194,7 +22409,7 @@ msgstr "弓箭的箭頭。將它裝在弓箭的前端可以提升弓箭的傷害 #: lang/json/json_items.py msgid "Healthy and filling cornbread." -msgstr "" +msgstr "健康又可填飽肚子的玉米麵包。" #: lang/json/json_items.py msgid "Healthy and filling." @@ -22389,6 +22604,12 @@ msgstr "有著鋼頭的皮靴子。超耐用。" msgid "Leather gauntlets with bone armor reinforcement. Very light and strong." msgstr "骨甲加固的皮革手套。輕又強韌。" +#: lang/json/json_items.py +msgid "" +"Leather patches stitched together and tied into a makeshift loincloth. " +"Covers your modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Leg and body armor made from the exoskeletons of insects. Light and durable." @@ -22398,7 +22619,7 @@ msgstr "由昆蟲外骨骼製成的護甲,覆蓋了腿部以及軀幹部位。 msgid "" "Lemon juice mixed with water and sugar to dull the sourness. Delicious and " "refreshing." -msgstr "" +msgstr "混合了水與糖以緩和其酸味的檸檬汁,美味又提神。" #: lang/json/json_items.py msgid "Lessons for the Novice Bowhunter" @@ -22410,7 +22631,7 @@ msgstr "輕便好背的包包,但是沒有多少儲存空間" #: lang/json/json_items.py msgid "Lightweight shoes made of cloth and rubber." -msgstr "" +msgstr "以布料與橡膠製成的輕量鞋子。" #: lang/json/json_items.py msgid "Like apple cider, only with vodka." @@ -22420,6 +22641,13 @@ msgstr "作法類似蘋果西打,只是加入了伏特加酒。" msgid "Like cola, but without caffeine. Still not that healthy." msgstr "像可樂但是不含咖啡因,一樣對身體不好。" +#: lang/json/json_items.py +msgid "" +"Long pieces of cloth that are meant to be wrapped around your hands to " +"provide small amounts of protection while punching and performing other " +"general mischief." +msgstr "" + #: lang/json/json_items.py msgid "Lots of articles about cars and driving techniques." msgstr "這雜誌裡面有許多關於車輛以及駕駛的文章。" @@ -22503,7 +22731,7 @@ msgstr "軍用口糧 - 蔬菜" #: lang/json/json_items.py msgid "Made from real Massachusetts cranberries. Delicious and nutritious." -msgstr "" +msgstr "由真正馬薩諸塞州蔓越莓所製成,美味又營養。" #: lang/json/json_items.py msgid "Made from, by, and for real Southern colonels!" @@ -22801,9 +23029,21 @@ msgid "PDA - Flashlight" msgstr "PDA-手電筒模式" #: lang/json/json_items.py -msgid "PG-7VL rocket" +msgid "PE023 \"Medical\": Application and Findings" +msgstr "" + +#: lang/json/json_items.py +msgid "PE050 \"Alpha\": Preliminary Report" +msgstr "" + +#: lang/json/json_items.py +msgid "PE065 \"Chimera\": Best Practices" msgstr "" +#: lang/json/json_items.py +msgid "PG-7VL rocket" +msgstr "PG-7VL 火箭彈" + #: lang/json/json_items.py msgid "PPSh-41" msgstr "PPSh-41" @@ -22924,7 +23164,7 @@ msgstr "散彈槍子彈的底火" #: lang/json/json_items.py msgid "Primer from a small caliber pistol round." -msgstr "" +msgstr "小手槍子彈的底火。" #: lang/json/json_items.py msgid "Primer from a small caliber rifle round." @@ -22992,6 +23232,12 @@ msgstr "RPG-7" msgid "RV kitchen unit" msgstr "車載廚房模組" +#: lang/json/json_items.py +msgid "" +"Rags stitched together and tied into a makeshift loincloth. Covers your " +"modesty, but not much else." +msgstr "" + #: lang/json/json_items.py msgid "" "Rat-shot is extremely weak ammunition, designed for killing rats, snakes, or " @@ -23490,6 +23736,8 @@ msgid "" "game, like elephants, with ease. It's designed to be used with the Taurus " "Raging Bull." msgstr "" +".454卡蘇爾是非常強大的左輪彈種,它能夠輕易地殺死像是大象之類的巨大獵物。它被" +"設計用於蠻牛左輪手槍 。" #: lang/json/json_items.py msgid "" @@ -23988,6 +24236,12 @@ msgid "" "could also be used to make cartridges for a cap and ball revolver." msgstr "" +#: lang/json/json_items.py +msgid "" +"These may not be the Great Plains, but you can still be the Boss with this " +"high-crowned hat." +msgstr "" + #: lang/json/json_items.py msgid "They're blue, but that doesn't mean they're sad." msgstr "Blue在這指的是藍色,不是憂鬱的意思。" @@ -24088,6 +24342,12 @@ msgid "" "your morale slightly. Use it to turn it on." msgstr "這個吃電池的裝置藏了許多經典好歌,你可以啟動它來獲得一些士氣加乘。" +#: lang/json/json_items.py +msgid "" +"This binder of highly technical papers describes some new chemical formula, " +"and its effects on human subjects. It's stamped \"APPROVED\"...." +msgstr "" + #: lang/json/json_items.py msgid "This bone meal is useful for fertilizing plants." msgstr "這骨粉很適合用來當肥料。" @@ -24099,11 +24359,10 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "" "This burning magnesium flare is producing light. It will last for about a " "half hour before burning out." -msgstr "這個螢光棒已經啟動並且正在產生光照。至少會持續幾個小時才會耗盡。" +msgstr "這是正在產生亮光的鎂光照明彈。將會持續約半小時。" #: lang/json/json_items.py msgid "" @@ -24193,6 +24452,8 @@ msgid "" "rotating its blade 90 degrees, transforming it into a deadly giant blade on " "the end of a stick." msgstr "" +"由農業工具改良而成,將刀刃旋轉90°並予以補強,使它變成在棍子末端接上一個致命大" +"刀刃的武器。" #: lang/json/json_items.py msgid "" @@ -24415,7 +24676,7 @@ msgstr "" #: lang/json/json_items.py msgid "This is a common hydraulic jack, used when changing tires." -msgstr "" +msgstr "這是一個常見的液壓千斤頂,通常在換輪胎時會用到。" #: lang/json/json_items.py msgid "" @@ -24450,6 +24711,7 @@ msgid "" "contains a battery draining attachment so the drill can be charged in lieu " "of mains power." msgstr "" +"一個充電式的電鑽包含許多種類的鑽頭。充電的元件有著能從一般電池充電的機能。" #: lang/json/json_items.py msgid "" @@ -24545,6 +24807,8 @@ msgid "" "This is a funnel used to collect rainwater. Use it outside and place a " "container beneath it to collect water when it rains." msgstr "" +"這是一個能夠用來收集雨水的漏斗。在室外使用後並且在下方放個容器就能夠收集雨" +"水。" #: lang/json/json_items.py msgid "" @@ -25138,7 +25402,7 @@ msgstr "一根木桿連接上刀刃將使它更為致命。" msgid "" "This is a slow-burning magnesium flare. Use it to strike the striker and " "light it. It will produce a bright light for about a half hour." -msgstr "" +msgstr "這是個慢燃鎂光照明彈。使用他來點燃他。會產生約半小時的亮光。" #: lang/json/json_items.py msgid "" @@ -25155,6 +25419,12 @@ msgid "" "nearby items on fire." msgstr "" +#: lang/json/json_items.py +msgid "" +"This is a small can of compressed air attached to a plastic horn. Pressing " +"the button on top causes it to emit a loud honking sound." +msgstr "" + #: lang/json/json_items.py msgid "" "This is a small gasoline powered lantern. It does not provide much light, " @@ -25219,6 +25489,8 @@ msgid "" "This is a small, makeshift funnel used to collect rainwater. Use it outside " "and place a container beneath it to collect water when it rains." msgstr "" +"這是一個小型粗製的漏斗可用來收集雨水。在室外使用後並且在下方放個容器就能夠收" +"集雨水。" #: lang/json/json_items.py msgid "" @@ -25245,9 +25517,8 @@ msgid "This is a spent glowstick. It is essentially trash." msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is a spent magnesium flare. It is essentially trash." -msgstr "一根用完的螢光棒,基本上是垃圾。" +msgstr "這是已經用過的鎂光照明彈。基本上是垃圾。" #: lang/json/json_items.py msgid "" @@ -25512,6 +25783,8 @@ msgid "" "be a giant blade on the end of a stick, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"這是一個用來割高草的過時農業工具。在棍子末端接上一個大刀刃,但很難將它靈活運" +"用在原本用途外的地方。" #: lang/json/json_items.py msgid "" @@ -25519,6 +25792,8 @@ msgid "" "be a massive curved blade on a handle, it is incredibly awkward to use for " "anything but its intended purpose." msgstr "" +"這是一個用來割高草的過時農業工具。在握柄處接上一個大彎刀,但很難將它靈活運用" +"在原本用途外的地方。" #: lang/json/json_items.py msgid "" @@ -25533,13 +25808,12 @@ msgid "" msgstr "" #: lang/json/json_items.py -#, fuzzy msgid "This is food for cats. It smells strange, but cats seem to love it." -msgstr "經典狗食,雖然嚐起來味道特殊,但小狗很喜歡。" +msgstr "貓食,雖然嚐起來味道特殊,但貓咪很喜歡。" #: lang/json/json_items.py msgid "This is food for dogs. It smells strange, but dogs seem to love it." -msgstr "" +msgstr "經典狗食,雖然嚐起來味道特殊,但小狗很喜歡。" #: lang/json/json_items.py msgid "" @@ -25783,6 +26057,20 @@ msgstr "" "這個干擾手榴彈已經啟動,很快的就會炸開,釋放出控制波,讓附近的機器人短暫成為" "你的友軍。" +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated the day before you evacuated-describes a new " +"chemical formula in detail and supplies instructions for its use as some " +"sort of ...crowd-control catalyst? That can't be right..." +msgstr "" + +#: lang/json/json_items.py +msgid "" +"This sheaf of papers-dated two weeks before all this started-describes some " +"new chemical formula, and its effects on human subjects. It's stamped " +"\"APPROVED\"..." +msgstr "" + #: lang/json/json_items.py msgid "" "This simple IED is designed to be attached to an arrow and detonate on " @@ -25800,6 +26088,8 @@ msgid "" "This small caliber pistol round offers good armor penetration at the cost of " "slightly less damage. It is rarely used outside of the Chinese army." msgstr "" +"這種小型手槍子彈以較低的傷害為代價換取到相當不錯的穿甲能力。這種彈種通常不會" +"在中國軍隊以外的地方看到。" #: lang/json/json_items.py msgid "" @@ -25919,15 +26209,12 @@ msgstr "" "引殭屍。滅音器可以有效降低噪音,但是會產生較差的火力以及準確度。" #: lang/json/json_items.py -#, fuzzy msgid "" "Using this item on a container full of water will purify the water using " "layered charcoal. Once the charcoal has purified enough water, it will " "become unusable and can be disassembled and recycled. Water taken from " "uncertain sources like a river may be dirty." msgstr "" -"利用這個物品經過層層的木炭過濾來取得淨化的水。河川之類的的水源有可能是被污染" -"的。" #: lang/json/json_items.py msgid "" @@ -26039,6 +26326,12 @@ msgstr "什麼是電晶體?" msgid "When the cheese starts flowing, Kraft gets your noodle going." msgstr "當乳酪開始融化時,美味的通心麵就出現了。" +#: lang/json/json_items.py +msgid "" +"Whether hunting varmints, fixing up the ranch, or just wishing you had a " +"horse, this is the hat for the job." +msgstr "" + #: lang/json/json_items.py msgid "" "While this seems like it would be very useful in this situation, the sheer " @@ -26107,9 +26400,8 @@ msgid "active Granade" msgstr "啟動中手榴彈" #: lang/json/json_items.py -#, fuzzy msgid "active flare" -msgstr "啟動中閃光彈" +msgstr "啟動中照明彈" #: lang/json/json_items.py msgid "active flashbang" @@ -26163,6 +26455,10 @@ msgstr "高級UPS (開)" msgid "adventure novel" msgstr "" +#: lang/json/json_items.py +msgid "alpha mutagen" +msgstr "" + #: lang/json/json_items.py msgid "aluminium bat" msgstr "鋁製棒球棍" @@ -26656,9 +26952,8 @@ msgid "cabernet sauvignon" msgstr "卡本內蘇維濃葡萄酒" #: lang/json/json_items.py -#, fuzzy msgid "caffeinated chewing gum" -msgstr "口香糖" +msgstr "" #: lang/json/json_items.py msgid "caffeine pills" @@ -26861,14 +27156,17 @@ msgid "chewing gum" msgstr "口香糖" #: lang/json/json_items.py -#, fuzzy msgid "chewing tobacco" -msgstr "口香糖" +msgstr "" #: lang/json/json_items.py msgid "children's book" msgstr "童書" +#: lang/json/json_items.py +msgid "chimera mutagen" +msgstr "" + #: lang/json/json_items.py msgid "chitin arm guards" msgstr "甲殼護手" @@ -27025,6 +27323,10 @@ msgstr "合成弓" msgid "compound bow" msgstr "複合弓" +#: lang/json/json_items.py +msgid "compressed air horn" +msgstr "" + #: lang/json/json_items.py msgid "concentrated acid" msgstr "濃縮酸液" @@ -27095,7 +27397,7 @@ msgstr "玉米" #: lang/json/json_items.py msgid "cornbread" -msgstr "" +msgstr "玉米麵包" #: lang/json/json_items.py msgid "cornmeal" @@ -27113,6 +27415,10 @@ msgstr "行軍床" msgid "cotton hat" msgstr "棉帽" +#: lang/json/json_items.py +msgid "cowboy hat" +msgstr "" + #: lang/json/json_items.py msgid "crack" msgstr "快克" @@ -27157,6 +27463,10 @@ msgstr "坩鍋" msgid "crude sword" msgstr "粗製的劍" +#: lang/json/json_items.py +msgid "cudgel" +msgstr "" + #: lang/json/json_items.py msgid "damaged shelter kit" msgstr "破損的帳篷" @@ -27170,9 +27480,8 @@ msgid "darts" msgstr "鏢" #: lang/json/json_items.py -#, fuzzy msgid "dead flare" -msgstr "紅色地板" +msgstr "熄滅的照明彈" #: lang/json/json_items.py msgid "dead glowstick" @@ -27280,7 +27589,7 @@ msgstr "護肘" #: lang/json/json_items.py msgid "electric forge" -msgstr "電子鍛造爐" +msgstr "電力鍛造爐" #: lang/json/json_items.py lang/json/json_vehicle_parts.py msgid "electric motor" @@ -27390,6 +27699,10 @@ msgstr "泡麵" msgid "feather" msgstr "羽毛" +#: lang/json/json_items.py +msgid "ferromagnetic rail rifle" +msgstr "" + #: lang/json/json_items.py msgid "fertilizer" msgstr "肥料標示" @@ -27479,14 +27792,12 @@ msgid "flannel jacket" msgstr "法蘭絨外套" #: lang/json/json_items.py -#, fuzzy msgid "flare" -msgstr "強光" +msgstr "照明彈" #: lang/json/json_items.py -#, fuzzy msgid "flaregun" -msgstr "強光" +msgstr "信號槍" #: lang/json/json_items.py msgid "flashbang" @@ -27664,6 +27975,10 @@ msgstr "毛熱褲" msgid "fur kitty collar" msgstr "毛茸茸貓領子" +#: lang/json/json_items.py +msgid "fur loincloth" +msgstr "" + #: lang/json/json_items.py msgid "fur pants" msgstr "皮褲" @@ -27730,7 +28045,7 @@ msgstr "琴酒" #: lang/json/json_items.py msgid "glass" -msgstr "玻璃" +msgstr "玻璃杯" #: lang/json/json_items.py msgid "glass bottle" @@ -27764,6 +28079,10 @@ msgstr "手套內裡" msgid "glowstick" msgstr "螢光棒" +#: lang/json/json_items.py +msgid "go bag" +msgstr "" + #: lang/json/json_items.py msgid "gold" msgstr "金子" @@ -27828,6 +28147,10 @@ msgstr "鐵鎚" msgid "hand press & die set" msgstr "手壓模具組" +#: lang/json/json_items.py +msgid "hand wraps" +msgstr "" + #: lang/json/json_items.py msgid "handheld game system" msgstr "掌上型電動" @@ -27968,6 +28291,10 @@ msgstr "全像瞄準鏡" msgid "holster" msgstr "槍套" +#: lang/json/json_items.py +msgid "homewrecker" +msgstr "" + #: lang/json/json_items.py msgid "honey comb" msgstr "蜂巢" @@ -28066,7 +28393,7 @@ msgstr "醃人肉" #: lang/json/json_items.py msgid "johnnycake" -msgstr "" +msgstr "玉米餅" #: lang/json/json_items.py msgid "jumpsuit" @@ -28224,6 +28551,10 @@ msgstr "皮熱褲" msgid "leather jacket" msgstr "皮外套" +#: lang/json/json_items.py +msgid "leather loincloth" +msgstr "" + #: lang/json/json_items.py msgid "leather pants" msgstr "皮褲" @@ -28262,11 +28593,11 @@ msgstr "檸檬" #: lang/json/json_items.py msgid "lemonade" -msgstr "" +msgstr "檸檬汁" #: lang/json/json_items.py msgid "lettuce" -msgstr "" +msgstr "萵苣" #: lang/json/json_items.py msgid "light amp goggles" @@ -28320,6 +28651,10 @@ msgstr "蛇蜥突變劑" msgid "log" msgstr "原木" +#: lang/json/json_items.py +msgid "loincloth" +msgstr "" + #: lang/json/json_items.py msgid "long island iced tea" msgstr "長島冰茶" @@ -28345,9 +28680,8 @@ msgid "loose caltrops" msgstr "雞爪釘" #: lang/json/json_items.py -#, fuzzy msgid "lowtop tennis shoes" -msgstr "小丑鞋" +msgstr "短筒網球鞋" #: lang/json/json_items.py msgid "lump of steel" @@ -28381,6 +28715,10 @@ msgstr "粗製集雨器" msgid "makeshift halberd" msgstr "粗製長矛" +#: lang/json/json_items.py +msgid "makeshift knife" +msgstr "" + #: lang/json/json_items.py msgid "makeshift machete" msgstr "粗製開山刀" @@ -28431,7 +28769,7 @@ msgstr "美乃滋醬" #: lang/json/json_items.py msgid "meat jerky" -msgstr "" +msgstr "醃肉" #: lang/json/json_items.py msgid "meat pizza" @@ -28453,6 +28791,10 @@ msgstr "藥用紗布" msgid "medical gloves" msgstr "醫護手套" +#: lang/json/json_items.py +msgid "medical mutagen" +msgstr "" + #: lang/json/json_items.py msgid "medical tape" msgstr "醫療膠帶" @@ -28629,6 +28971,10 @@ msgstr "釘板" msgid "nail gun" msgstr "釘槍" +#: lang/json/json_items.py +msgid "nail knuckles" +msgstr "鐵釘手指虎" + #: lang/json/json_items.py msgid "nail rifle" msgstr "鐵釘步槍" @@ -29153,6 +29499,10 @@ msgstr "老花眼鏡" msgid "rebar" msgstr "鋼筋" +#: lang/json/json_items.py +msgid "rebar rail" +msgstr "" + #: lang/json/json_items.py msgid "recurve bow" msgstr "反曲弓" @@ -29391,7 +29741,7 @@ msgstr "螺絲起子" #: lang/json/json_items.py msgid "scythe" -msgstr "" +msgstr "大鐮" #: lang/json/json_items.py msgid "sealed 3-litre jar of kompot" @@ -29449,6 +29799,10 @@ msgstr "針線包" msgid "sharpened metal arrow" msgstr "削尖金屬箭" +#: lang/json/json_items.py +msgid "sharpened rebar" +msgstr "" + #: lang/json/json_items.py msgid "sheet" msgstr "布罩" @@ -29522,9 +29876,8 @@ msgid "shovel" msgstr "鏟子" #: lang/json/json_items.py -#, fuzzy msgid "sickle" -msgstr "酸黃瓜" +msgstr "鐮刀" #: lang/json/json_items.py msgid "signal receiver" @@ -29767,9 +30120,13 @@ msgid "steel plating" msgstr "鋼鐵裝甲板" #: lang/json/json_items.py -msgid "steel spear" +msgid "steel rail" msgstr "" +#: lang/json/json_items.py +msgid "steel spear" +msgstr "鋼矛" + #: lang/json/json_items.py msgid "steel tongs" msgstr "鋼鉗" @@ -29831,9 +30188,8 @@ msgid "string - 6 in" msgstr "細繩-6吋" #: lang/json/json_items.py -#, fuzzy msgid "stylish sunglasses" -msgstr "太陽眼鏡" +msgstr "時尚墨鏡" #: lang/json/json_items.py msgid "sugar" @@ -29844,9 +30200,8 @@ msgid "suit" msgstr "西裝" #: lang/json/json_items.py -#, fuzzy msgid "sundress" -msgstr "洋裝" +msgstr "" #: lang/json/json_items.py msgid "sunglasses" @@ -29929,9 +30284,8 @@ msgid "switchblade" msgstr "彈簧刀" #: lang/json/json_items.py -#, fuzzy msgid "sword bayonet" -msgstr "手槍刺刀" +msgstr "劍刺刀" #: lang/json/json_items.py msgid "syringe" @@ -29950,9 +30304,8 @@ msgid "tactical dump pouch" msgstr "戰術儲存袋" #: lang/json/json_items.py -#, fuzzy msgid "tactical full helmet" -msgstr "戰術頭盔" +msgstr "" #: lang/json/json_items.py msgid "tactical gloves" @@ -30003,9 +30356,8 @@ msgid "tea leaves" msgstr "茶葉" #: lang/json/json_items.py -#, fuzzy msgid "teapot" -msgstr "武器" +msgstr "茶壺" #: lang/json/json_items.py msgid "teargas canister" @@ -30019,6 +30371,10 @@ msgstr "傳送器" msgid "television" msgstr "電視" +#: lang/json/json_items.py +msgid "ten-gallon hat" +msgstr "" + #: lang/json/json_items.py msgid "tent" msgstr "帳篷" @@ -30033,11 +30389,11 @@ msgstr "驚悚小說" #: lang/json/json_items.py msgid "throwing axe" -msgstr "" +msgstr "飛斧" #: lang/json/json_items.py msgid "throwing knife" -msgstr "" +msgstr "飛刀" #: lang/json/json_items.py msgid "tights" @@ -30229,7 +30585,7 @@ msgstr "戰爭小說" #: lang/json/json_items.py msgid "war scythe" -msgstr "" +msgstr "戰鐮" #: lang/json/json_items.py msgid "wasp sting" @@ -30360,9 +30716,8 @@ msgid "wooden javelin" msgstr "木製標槍" #: lang/json/json_items.py -#, fuzzy msgid "wooden tonfa" -msgstr "木牆" +msgstr "木製旋棍" #: lang/json/json_items.py msgid "woods soup" @@ -30560,6 +30915,15 @@ msgid "" "completely inert prior to termination." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"Dr. Dionne's team has come up with an ambitious mutagenic cocktail, dubbed " +"PE065. Though its effects are wildly polymorphic and unstable, to say the " +"least, he suggests that several such mutants could effectively check the " +"spread of reanimated XE037 infectees. We are looking into implementation " +"methodology." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "Earlier conjecture that revivification occurred only in humans and insects " @@ -30787,6 +31151,14 @@ msgid "" "destroyed when security put down the fauna." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The chemical department has come through with a stable mutagen cocktail. " +"PE050 shows promise as an all-around genetic enhancement, with the worst " +"side effect being digestive upset. The lack of macro-scale physical changes " +"makes it ideal for both military and civilian applications." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The primary factor in determining revivification of mammalian subjects seems " @@ -30795,6 +31167,15 @@ msgid "" "going dormant. Larger canine subjects, however, do." msgstr "" +#: lang/json/json_lab_notes.py +msgid "" +"The research team headed by Dr. Isha has produced a concentrated form of " +"mutagen that shows promising results for the treatment of many forms of " +"disease. Testing reveals that it inhibits the body's pain responses while " +"bolstering the immune system and natural regenerative capabilities, though a " +"few troubling behavioral side effects have been reported." +msgstr "" + #: lang/json/json_lab_notes.py msgid "" "The vivisection program has shown mixed results, revealing an incredible " @@ -30907,9 +31288,8 @@ msgid "+3 Bash/atk" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "+4 Atk Speed" -msgstr "攻擊速度加成" +msgstr "" #: lang/json/json_martialarts.py msgid "" @@ -30920,31 +31300,22 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "AKA \"drunken boxing,\" Zui Quan imitates the movement of a drunk to confuse " "the enemy. The turn after you successfully attack, you may dodge any number " "of attacks with no penalty." msgstr "" -"同時也被稱作 \"醉酒拳法\",醉拳模仿酒醉的人來迷惑對手。\n" -"你攻擊過後的一個回合將能夠沒有閃避懲罰的躲開無限數量\n" -"的攻擊。" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Aikido" msgstr "合氣道" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "Aikido is a Japanese martial art focused on self-defense, while minimizing " "injury to the attacker. It uses defensive throws and disarms. Damage done " "while using this technique is halved, but pain inflicted is doubled." msgstr "" -"合氣道是日本一種重視自我防衛的武術,\n" -"同時也減少對攻擊者的傷害。常使用防禦\n" -"性投擲或是繳械。使用這武術會讓傷害減\n" -"半,但是疼痛影響會加倍。" #: lang/json/json_martialarts.py msgid "" @@ -30959,9 +31330,8 @@ msgid "Attacks scale better with strength" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Bonus damage from intelligence." -msgstr "你更聰明了。智力 +2" +msgstr "" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Capoeira" @@ -30972,42 +31342,36 @@ msgid "Capoeira Tempo" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Centipede Kung Fu" -msgstr "蜈蚣毒" +msgstr "" #: lang/json/json_martialarts.py msgid "Crane Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Crane Precision" -msgstr "紅外線視覺" +msgstr "" #: lang/json/json_martialarts.py msgid "Damage bonus from dexterity at the cost of damage from strength." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Intelligence" -msgstr "智力" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Dragon Kung Fu" -msgstr "龍形拳" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Drunk Dodging" -msgstr "閃避" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Flat bonus to damage." -msgstr " 但沒有造成傷害。" +msgstr "" #: lang/json/json_martialarts.py msgid "Half damage to enemies" @@ -31052,19 +31416,16 @@ msgid "Krav Maga" msgstr "以色列格鬥術" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Kung Fu" -msgstr "豹形拳" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Leopard Strategy" -msgstr "豹形拳" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Lizard Kung Fu" -msgstr "壁虎毒" +msgstr "" #: lang/json/json_martialarts.py newcharacter.cpp msgid "Muay Thai" @@ -31091,109 +31452,74 @@ msgstr "" #: lang/json/json_martialarts.py msgid "" -"One of the Five Deadly Venoms, and likely to be removed at the next save-" -"compatibility breaker. Lizard Style docuses on using walls to your advantage." +"One of the Five Deadly Venoms, and likely to be refactored to a mutation at " +"the next save-compatibility breaker. Lizard Style docuses on using walls to " +"your advantage." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Centipede Style uses an onslaught of rapid " "strikes. Each attack you land reduces the cost of attacking by 4." msgstr "" -"五毒的其中一式。蜈蚣毒使用快速的連續突擊。\n" -"你每次攻擊都能夠讓你的行動點數耗費減少 4;\n" -"能夠累計,但是你若被對手擊中了就會重置。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Scorpion Style is a mysterious art which " "uses pincer-like hands and a stinger kick. Critical hits should do massive " "damage and knock your target back, and we'll fix that as soon as we can." msgstr "" -"五毒的其中一式。蠍毒是一種使用鉗形拳與刺針腿\n" -"的神秘招式。爆擊將能夠使出大量傷害並且擊退你\n" -"的目標。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Toad Style will be immensely powerful " "through its immunity to nearly any weapon, once we get the connection " "rebuilt. Until then, best not meditate by pausing, though it used to give " "you armor proportional to your Intelligence and Perception." msgstr "" -"五毒的其中一式。無比的強大,幾乎能夠對任何武器免疫。\n" -"你能夠用原地等待一個回合來進行冥想;這樣能夠讓你依照\n" -"你的智力與感知高低來獲得暫時的防護。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the Five Deadly Venoms. Viper Style has a uniqe three-part combo, " "ehich is supposed to initiate on a critical strike, then chain into piercing " "damage and a two-handed Viper Strike." msgstr "" -"五毒的其中一式。蛇毒擁有獨特的三連擊。\n" -"假如你第一擊成功使出爆擊,便會啟動。\n" -"第二擊將會使出蛇形刁手造成穿刺傷害,\n" -"而第三擊會用雙手使出致命突擊。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Crane uses intricate hand " "techniques and jumping dodges. Dexterity determines the majority of your " "damage, rather than Strength; you also receive a dodge bonus the turn after " "moving a tile." msgstr "" -"少林五形拳的其中一式。鶴形拳使用複雜的手部技法及跳躍閃避。\n" -"敏捷屬性能夠提昇此式的命中率;\n" -"你每走一步就能獲得閃避加成。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Dragon uses fluid movements and " "hard strikes. Intelligence improves your accuracy and damage dealt, as does " "moving." msgstr "" -"少林五形拳的其中一式。龍形拳使用流暢的移動及強力的攻擊。\n" -"智力能夠提昇你的命中率及攻擊力。\n" -"每走一步就能夠提昇你一回合的攻擊力。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Leopard focuses on rapid, " "strategically planned strikes. Perception and Inteligence both boost " "accuracy, and moving further boosts your accuracy." msgstr "" -"少林五形拳的其中一式。豹形拳注重於連續的戰術攻擊。\n" -"你的感知與智力能夠提昇命中率,\n" -"並且每走一步都能提昇一回合的加成。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Snake focuses on sinuous " "movement and precision strikes. Your Perception iproves yur accuracy and " "your damage." msgstr "" -"少林五形拳的其中一式。蛇形拳使用蜿蜒而精確的攻擊能力。\n" -"感知能夠提昇你的命中率以及傷害。" #: lang/json/json_martialarts.py -#, fuzzy msgid "" "One of the five Shaolin animal styles. The Tiger focuses on relentless " "attacks above all else. Your Strength determines your accuracy, and your " "attacks do increasing damage as you continue attacking." msgstr "" -"少林五形拳的其中一式。虎形拳注重於連續進攻。\n" -"力量屬性能夠提昇此式的命中率;\n" -"持續攻擊數回合能夠得到連續的攻擊加成。" #: lang/json/json_martialarts.py msgid "" @@ -31219,14 +31545,12 @@ msgid "Perception provides a bonus to hit." msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Kung Fu" -msgstr "蠍毒" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Scorpion Venom" -msgstr "蠍毒" +msgstr "" #: lang/json/json_martialarts.py msgid "Silent melee attacks" @@ -31241,9 +31565,8 @@ msgid "Snake Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Snake Sight" -msgstr "雷射指標器" +msgstr "" #: lang/json/json_martialarts.py msgid "Strength decreases damage when blocking" @@ -31277,23 +31600,20 @@ msgid "" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Fury" -msgstr "虎形拳" +msgstr "" #: lang/json/json_martialarts.py msgid "Tiger Kung Fu" msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Tiger Strength" -msgstr "力量" +msgstr "" #: lang/json/json_martialarts.py -#, fuzzy msgid "Toad Armor" -msgstr "排序護甲" +msgstr "" #: lang/json/json_martialarts.py msgid "Toad Kung Fu" @@ -32765,7 +33085,7 @@ msgid "" "A monster with an obese human body and the head of a cow. It treads slowly, " "and milky white drool drips from its mouth." msgstr "" -"有著稍微過重的人類身形,而頭部是牛頭。它移動緩慢,乳白色的唾液從他的嘴巴流" +"有著稍微肥胖的人類身形,而頭部是牛頭。它移動緩慢,乳白色的唾液從他的嘴巴流" "下。(日本電影:牛頭 Gozu)" #: lang/json/json_monsters.py @@ -33031,7 +33351,7 @@ msgstr "由真菌尖頂增長而成的自然防壁。看起來非常堅固,並 #: lang/json/json_monsters.py msgid "A weird mass of immobile pink goo. It seems to breathe." -msgstr "一個奇異的固定粉紅色肉塊。它似乎會 緩慢的呼吸。" +msgstr "一個奇異的固體粉紅色肉塊。它似乎會緩慢的呼吸。" #: lang/json/json_monsters.py msgid "" @@ -33425,6 +33745,8 @@ msgid "" "The timber rattlesnake is the most venomous viper native to New England. " "Climatic changes have extended its range far into the north." msgstr "" +"源自新英格蘭的木紋響尾蛇是一種最毒的毒蛇。由於氣候的變遷,在北方也可以看到牠" +"的足跡。" #: lang/json/json_monsters.py msgid "" @@ -34377,9 +34699,8 @@ msgid "Forked Tongue" msgstr "蛇信" #: lang/json/json_mutations.py -#, fuzzy msgid "Frail" -msgstr "欄杆" +msgstr "" #: lang/json/json_mutations.py msgid "Full Night Vision" @@ -34749,6 +35070,14 @@ msgstr "輻射化" msgid "Regeneration" msgstr "再生" +#: lang/json/json_mutations.py +msgid "Reptilian Eyes" +msgstr "" + +#: lang/json/json_mutations.py +msgid "Reptilian IR" +msgstr "" + #: lang/json/json_mutations.py msgid "Road-Runner" msgstr "路跑選手" @@ -34943,6 +35272,10 @@ msgstr "動物都很怕你,看到你就想逃。" msgid "Thick Scales" msgstr "厚鳞片" +#: lang/json/json_mutations.py +msgid "Thick Tail" +msgstr "" + #: lang/json/json_mutations.py msgid "" "Thick black fur has grown to cover your entire body, providing a marginal " @@ -35333,6 +35666,12 @@ msgstr "" "你有一條長而優雅的尾巴,就像個大貓一樣。能夠增加你的身體平衡,讓你閃避能力提" "高。" +#: lang/json/json_mutations.py +msgid "" +"You have a long, thick, lizardlike tail. It helps you balance a bit but also " +"makes a serviceable whip." +msgstr "" + #: lang/json/json_mutations.py msgid "" "You have a major digestive disorder, which causes you to vomit frequently." @@ -35846,6 +36185,13 @@ msgstr "你的眼球凸出了幾吋。沒有什麼影響。" msgid "Your eyes have mutated to pick up radiation in the infrared spectrum." msgstr "你的眼睛突變成能夠以特殊的光譜看見輻射。" +#: lang/json/json_mutations.py +msgid "" +"Your eyes have mutated, with a brilliant iris and slitted pupil similar to " +"that of a lizard. This is visually striking, but doesn't seem to affect " +"your vision." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your feet have fused into hooves. This allows kicking attacks to do much " @@ -35969,6 +36315,12 @@ msgstr "你的肌肉變得更強壯了。力量 +2" msgid "Your muscles are very slow to move. You run 30% slower." msgstr "" +#: lang/json/json_mutations.py +msgid "" +"Your optic nerves and brain have mutated to catch up with your eyes, " +"allowing you to see in the infrared spectrum." +msgstr "" + #: lang/json/json_mutations.py msgid "" "Your scent is particularly strong. It's not offensive to humans, but animals " @@ -45788,6 +46140,7 @@ msgid "" "Before the apocalypse, you turned to Heroin to soothe your many problems. " "Now, your habit is your only comfort and your only drive." msgstr "" +"在大災變之前, 你吸食海洛因來逃避你的問題。現在,你的毒癮是你唯一的安慰。" #: lang/json/json_professions.py msgid "" @@ -46215,7 +46568,7 @@ msgstr "" msgid "" "You were about to marry your bride before the cataclysm, now you spend your " "days searching for her." -msgstr "" +msgstr "你在大災變前才正要娶你的新娘,而你現在正找尋著她。" #: lang/json/json_professions.py msgid "" @@ -46238,6 +46591,8 @@ msgid "" "you. You wish that it wasn't a common occurrence. You start with the last of " "your stash and a strong crack addiction." msgstr "" +"你正在前往收皮肉錢的路上,結果馬伕變成殭屍差點吃了你。你只希望這只是個案。你" +"一開始便有強烈的快克上癮症狀並只剩下一小包毒品。" #: lang/json/json_professions.py msgid "" @@ -46292,6 +46647,8 @@ msgid "" "your parents' trust fund. But now they're gone, and the only thing between " "you and death is the open road and your backpack." msgstr "" +"你生存的意義是旅行,四處觀光,有你父母的信託基金讓你生活寬裕。但這些已經是過" +"去式了,你和你的背包就是你現在生存的關鍵。" #: lang/json/json_professions.py msgid "" @@ -46810,6 +47167,8 @@ msgid "" "looters and stepping over charred and smoking corpses. The caption reads: " "\"R.U.R. Technology you can Trust.\"" msgstr "" +"這是全能機器牌機械執法者的廣告。上面有著三腳機器人燃燒暴徒並走過其冒煙屍體的" +"圖案。標題寫著: \"你能信任的全能機器。\"" #: lang/json/json_snippets.py msgid "" @@ -46956,6 +47315,15 @@ msgstr "" "圖案。標題寫著:\"今天就裝上全新的禿鷹28.vx型吧!\" 以及 \"Twenty8。能看見你缺" "少的。\"" +#: lang/json/json_techniques.py +msgid " Snakebites %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " axe-kicks %s" @@ -46976,6 +47344,10 @@ msgstr " 肘擊 %s" msgid " feints at %s" msgstr "" +#: lang/json/json_techniques.py +msgid " flaps free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " flying knees %s" @@ -46986,11 +47358,36 @@ msgstr "" msgid " grabs %s" msgstr " 擒拿 %s" +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and grounds %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " grabs and knees %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hand-pecks %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " hisses threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " jabs %s with a Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " jabs deftly at %s" @@ -47001,6 +47398,20 @@ msgstr "" msgid " karate chops %s" msgstr " 用手刀砍了 %s" +#: lang/json/json_techniques.py +#, python-format +msgid " low-roundhouses %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " makes serpentine hand motions at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid " performs the Crane Wing!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " power-kicks %s" @@ -47016,21 +47427,51 @@ msgstr " 迅速地揮拳打了 %s" msgid " quickly strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " quickly swipes at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " sends %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " sends %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " side-kicks %s" msgstr " 側踢 %s" +#: lang/json/json_techniques.py +#, python-format +msgid " snatches and clobbers %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " strikes %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " strikes out at %s with a Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " stumbles and leers at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " surprise attacks %s" @@ -47046,6 +47487,16 @@ msgstr " 掃踢 %s" msgid " sweeps %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly hits %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid " swiftly jabs %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid " swings in a wide arc through %s" @@ -47061,14 +47512,59 @@ msgstr " 投擲 %s" msgid " wraps up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "'s Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "Brutal Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Crane Flap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Crane Wing" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Snatch" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Dragon Sweeper" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Drunk feint" +msgstr "" + #: lang/json/json_techniques.py msgid "Grab Break" msgstr "" +#: lang/json/json_techniques.py +msgid "Leopard Fist" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Leopard Swipe" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Pincer Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Precise Strike" msgstr "" @@ -47077,10 +47573,50 @@ msgstr "" msgid "Rapid Strike" msgstr "" +#: lang/json/json_techniques.py +msgid "Snake Slide" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Slither" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Snap" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Snake Strike" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Stinger Strike" +msgstr "" + #: lang/json/json_techniques.py msgid "Sweep Attack" msgstr "" +#: lang/json/json_techniques.py +msgid "Tiger Takedown" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Toad's Tongue" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Bite" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Hiss" +msgstr "" + +#: lang/json/json_techniques.py +msgid "Viper Writhe" +msgstr "" + #: lang/json/json_techniques.py msgid "Wide Strike" msgstr "" @@ -47089,6 +47625,11 @@ msgstr "" msgid "Wrap attack" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You Snakebite %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You axe-kick %s" @@ -47119,6 +47660,26 @@ msgstr "" msgid "You grab %s" msgstr "你擒拿 %s" +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and ground %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You grab and knee %s!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hand-peck %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You hiss threateningly at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You jab %s" @@ -47134,11 +47695,26 @@ msgstr "" msgid "You karate chop %s" msgstr "你用手刀砍了 %s" +#: lang/json/json_techniques.py +#, python-format +msgid "You low-roundhouse %s 's legs!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You make serpentine hand motions at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You power-kick %s" msgstr "你重踢 %s" +#: lang/json/json_techniques.py +#, python-format +msgid "You punch %s with your Pincer Fist!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You quickly punch %s" @@ -47149,21 +47725,59 @@ msgstr "你迅速地揮拳打了 %s" msgid "You quickly strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You quickly swipe at %s" +msgstr "" + +#: lang/json/json_techniques.py +msgid "You raise your arms intimidatingly!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You send %s reeling" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You send %s reeling with a Dragon Strike!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You side-kick %s" msgstr "你側踢 %s" +#: lang/json/json_techniques.py +msgid "You slither free!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You snatch and clobber %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You strike %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You strike out at %s with your Leopard Fist!" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You stumble and leer at %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You surprise attack %s" @@ -47179,11 +47793,25 @@ msgstr "" msgid "You sweep-kick %s" msgstr "你掃踢 %s" +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly hit %s" +msgstr "" + +#: lang/json/json_techniques.py +#, python-format +msgid "You swiftly jab %s" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You swing in a wide arc through %s" msgstr "" +#: lang/json/json_techniques.py +msgid "You swing your arms and break free!" +msgstr "" + #: lang/json/json_techniques.py #, python-format msgid "You throw %s" @@ -47194,6 +47822,11 @@ msgstr "你投擲 %s" msgid "You wrap up %s" msgstr "" +#: lang/json/json_techniques.py +#, python-format +msgid "Your Stinger Kick sends %s flying!" +msgstr "" + #: lang/json/json_techniques.py msgid "axe-kick" msgstr "戰斧踢" @@ -48666,12 +49299,12 @@ msgstr "是否刪除世界和所有紀錄?" #: main_menu.cpp msgctxt "Main Menu" msgid "Hlp" -msgstr "" +msgstr "說明" #: main_menu.cpp msgctxt "Main Menu" msgid "Lod" -msgstr "" +msgstr "讀取" #: main_menu.cpp msgid "No Worlds found!" @@ -48700,7 +49333,7 @@ msgstr "請回報bug到 kevin.granade@gmail.com 或是發文到論壇上。" #: main_menu.cpp msgid "Remove all saves and regenerate world?" -msgstr "刪除所有遊戲記錄並產生世界?" +msgstr "刪除所有遊戲記錄並重新產生世界?" #: main_menu.cpp #, c-format @@ -49275,6 +49908,16 @@ msgstr "%s 用尾巴 螫 %s!" msgid "%s stings %s with his tail!" msgstr "%s 用尾巴 螫 %s!" +#: melee.cpp +#, c-format +msgid "%s whaps %s with her tail!" +msgstr "" + +#: melee.cpp +#, c-format +msgid "%s whaps %s with his tail!" +msgstr "" + #: melee.cpp #, c-format msgid " batters %s" @@ -49561,6 +50204,11 @@ msgstr "你瘋狂的揮動卻無法命中。" msgid "You whack %s" msgstr "你揮打 %s" +#: melee.cpp +#, c-format +msgid "You whap %s with your tail!" +msgstr "" + #: melee.cpp #, c-format msgid "Your %s gets stuck in %s, but you yank it free." @@ -51179,7 +51827,7 @@ msgstr "一個機械語音,\"請放下你的武器。\"" #: monattack.cpp msgid "a sibilant rattling sound!" -msgstr "" +msgstr "一陣嘶嘶作響的咯咯聲!" #: monattack.cpp msgid "a spitting noise." @@ -51292,6 +51940,11 @@ msgstr "%s %s於 %s!" msgid "A %s %s into the %s!" msgstr "%s %s入了 %s!" +#: monmove.cpp +#, c-format +msgid "Something hits your %s." +msgstr "" + #: monmove.cpp #, c-format msgid "The %1$s hits %2$s's %3$s." @@ -51650,9 +52303,9 @@ msgid "Points left:%3d" msgstr "剩餘點數:%3d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Points left:%3d " -msgstr "剩餘點數:%3d" +msgstr "" #: newcharacter.cpp #, c-format @@ -51669,9 +52322,9 @@ msgid "Ranged penalty: -%d" msgstr "遠距懲罰: -%d" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%%" -msgstr "閱讀時間: %d%%" +msgstr "" #: newcharacter.cpp msgid "Remaining points will be discarded, are you sure you want to proceed?" @@ -51690,9 +52343,9 @@ msgid "STATS" msgstr "屬性" #: newcharacter.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%%" -msgstr "技能遺忘: %d%%" +msgstr "" #: newcharacter.cpp #, c-format @@ -51734,14 +52387,12 @@ msgid "To go back and review your character, press <" msgstr "回頭瀏覽你的角色, 按下 <" #: newcharacter.cpp -#, fuzzy msgid "To pick a random name for your character, press ?" -msgstr "角色使用隨機名字, 按下 ?." +msgstr "" #: newcharacter.cpp -#, fuzzy msgid "To save this character as a template, press !" -msgstr "把這個角色存成模板, 按下 !。" +msgstr "" #: newcharacter.cpp msgid "Too many points allocated, change some features and try again." @@ -51780,14 +52431,12 @@ msgid "Your profession of %s prevents you from taking this trait." msgstr "你的 %s 職業不允許你選取這個特質." #: newcharacter.cpp -#, fuzzy msgid "______NO NAME ENTERED!!!______" -msgstr "__沒有輸入名字!!!__" +msgstr "" #: newcharacter.cpp -#, fuzzy msgid "h, 4, or left arrow to decrease the statistic." -msgstr " 屬性降低." +msgstr "" #: newcharacter.cpp msgid "j/k, 8/2, or up/down arrows to select a statistic." @@ -51798,9 +52447,8 @@ msgid "kg" msgstr "kg" #: newcharacter.cpp -#, fuzzy msgid "l, 6, or right arrow to increase the statistic." -msgstr " 屬性增加" +msgstr "" #: newcharacter.cpp options.cpp player.cpp msgid "lbs" @@ -55703,8 +56351,8 @@ msgid "Alcohol Craving" msgstr "酒精上癮" #: player.cpp -msgid "Almost instantly you feel a familiar pain in your stomach" -msgstr "你立刻在胃中感受到熟悉的疼痛。" +msgid "Almost instantly you feel a familiar pain in your stomach." +msgstr "" #: player.cpp msgid "Arm encumbrance affects your accuracy with ranged weapons." @@ -55757,7 +56405,7 @@ msgstr "生化插件:" msgid "Broken %s began to mend." msgstr "殘破的 %s 開始修補。" -#: player.cpp +#: player.cpp ranged.cpp msgid "Burst" msgstr "連發" @@ -55796,9 +56444,9 @@ msgid "Cocaine Craving" msgstr "古柯鹼上癮" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Cold-Blooded -%s%d%%" -msgstr "冷血 -%s%d%%" +msgstr "" #: player.cpp #, c-format @@ -55843,18 +56491,18 @@ msgid "Depressants" msgstr "鎮靜劑" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressants -%s%d%%" -msgstr "鎮靜劑 -%s%d%%" +msgstr "" #: player.cpp msgid "Depressed" msgstr "沮喪" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Depressed -%s%d%%" -msgstr "沮喪 -%s%d%%" +msgstr "" #: player.cpp msgid "Dex " @@ -55997,9 +56645,9 @@ msgid "Good Feeling" msgstr "感覺良好" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Good mood +%s%d%%" -msgstr "好心情 +%s%d%%" +msgstr "" #: player.cpp msgid "Guilty about Killing" @@ -56032,9 +56680,9 @@ msgid "Heard Disturbing Scream" msgstr "聽到擾人的尖叫" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Hunger -%s%d%%" -msgstr "飢餓 -%s%d%%" +msgstr "" #: player.cpp msgid "Hungry" @@ -56241,10 +56889,6 @@ msgstr "你的物品欄放不下 %s。丟棄嗎?" msgid "No space in inventory for your %s. Drop it?" msgstr "你的物品欄已經放不下 %s。要丟棄嗎?" -#: player.cpp -msgid "Normal" -msgstr "正常" - #: player.cpp msgid "Nothing to see here!" msgstr "這裡沒有什麼東西好看的!" @@ -56267,14 +56911,14 @@ msgid "Opiate Craving" msgstr "藥物上癮" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Out of Sunlight -%s%d%%" -msgstr "沒有陽光 -%s%d%%" +msgstr "" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Overburdened -%s%d%%" -msgstr "超重 -%s%d%%" +msgstr "" #: player.cpp #, c-format @@ -56286,9 +56930,9 @@ msgid "Pain" msgstr "疼痛" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Pain -%s%d%%" -msgstr "疼痛 -%s%d%%" +msgstr "" #: player.cpp #, c-format @@ -56296,9 +56940,9 @@ msgid "Pain %d" msgstr "疼痛 %d" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Painkillers -%s%d%%" -msgstr "止痛藥 -%s%d%%" +msgstr "" #: player.cpp msgid "Parched" @@ -56351,9 +56995,9 @@ msgid "Putting on a %s would be tricky." msgstr "你不太可能把 %s 穿戴上。" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Quick +%s%d%%" -msgstr "急性子 +%s%d%%" +msgstr "" #: player.cpp msgid "R Arm: " @@ -56369,9 +57013,9 @@ msgid "Read %i" msgstr "閱讀 %i" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Read times: %d%% " -msgstr "閱讀時間: %d%% " +msgstr "" #: player.cpp #, c-format @@ -56440,9 +57084,9 @@ msgid "Siphoned %d units of %s from the %s." msgstr "抽取了 %d 單位的 %s 從 %s。" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Skill rust: %d%% " -msgstr "技能遺忘: %d%% " +msgstr "" #: player.cpp msgid "Skills:" @@ -56491,9 +57135,9 @@ msgid "Stimulant Overdose" msgstr "興奮劑過量" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Stimulants +%s%d%%" -msgstr "興奮劑 +%s%d%%" +msgstr "" #: player.cpp msgid "Storage" @@ -56587,9 +57231,9 @@ msgid "The thought of eating that makes you feel sick. Really do it?" msgstr "你一想到要把它吃下去就噁心。你確定真的要吃嗎?" #: player.cpp -#, fuzzy, c-format +#, c-format msgid "Thirst -%s%d%%" -msgstr "口渴 -%s%d%%" +msgstr "" #: player.cpp msgid "Thirsty" @@ -56715,6 +57359,11 @@ msgstr "武器:" msgid "Weapon: %s" msgstr "武器:%s" +#: player.cpp +#, c-format +msgid "Weapon: %s (%s)" +msgstr "" + #: player.cpp msgid "Wet" msgstr "濕透了" @@ -56916,8 +57565,8 @@ msgid "You feel fatigued all of a sudden." msgstr "你突然感到疲倦。" #: player.cpp -msgid "You feel horrible for eating a person.." -msgstr "你覺得吃人肉很可怕..." +msgid "You feel horrible for eating a person." +msgstr "" #: player.cpp #, c-format @@ -56976,11 +57625,10 @@ msgid "You need a %s to consume that!" msgstr "你需要 %s 才能消化!" #: player.cpp -#, fuzzy msgid "" "You need to be at least level 1 in the marksmanship skill before you can " "modify guns." -msgstr "你需要達到 槍械 技能等級 1 以上才能夠改造槍枝。" +msgstr "" #: player.cpp #, c-format @@ -57200,9 +57848,8 @@ msgid "Your batteries discharge slightly." msgstr "你的電池因放電而電力下降。" #: player.cpp -#, fuzzy msgid "Your body strains under the weight!" -msgstr "你笨拙的屠宰技術破壞了肉!" +msgstr "" #: player.cpp msgid "Your eyes won't focus without reading glasses." @@ -57324,6 +57971,11 @@ msgstr "爆擊!" msgid "Firing %s (%d)" msgstr "射擊 %s (%d)" +#: ranged.cpp +#, c-format +msgid "Firing mode: %s" +msgstr "" + #: ranged.cpp msgid "Fwoosh!" msgstr "嗚咻!" @@ -58255,9 +58907,8 @@ msgid "Headlights turned on" msgstr "打開車頭燈" #: vehicle.cpp -#, fuzzy msgid "Honk horn" -msgstr "卡車喇叭" +msgstr "" #. ~ indicates that a vehicle part is inside #: vehicle.cpp @@ -58622,9419 +59273,9386 @@ msgstr "世界名稱:" msgid "______NO NAME ENTERED!!!!_____" msgstr "__沒有輸入名字!!!__" -#~ msgid "Monster Spotted!" -#~ msgstr "發現怪物!" - -#~ msgid "" -#~ "There's no room in your inventory for the %s, and you can't unwield your " -#~ "%s." -#~ msgstr "你的物品欄放不下 %s ,所以你無法把手中的 %s 收回。" +#~ msgid "You have a nicotine craving." +#~ msgstr "你尼古丁的癮頭犯了。" -#~ msgid "Hardcore" -#~ msgstr "玻璃娃娃" +#~ msgid "You have a caffeine craving." +#~ msgstr "你咖啡因上癮了。" -#~ msgid "" -#~ "Before the Apocalypse, you turned to Heroin to soothe your many problems. " -#~ "Now, your habit is your only comfort and your only drive." -#~ msgstr "" -#~ "在大災變之前,你吸食海洛因來逃避你的問題。現在,你的毒癮是你唯一的安慰。" +#~ msgid "You have an alcohol craving." +#~ msgstr "你酒精上癮了。" -#~ msgid "" -#~ "You were on your way to collect your check, when your pimp tried to kill " -#~ "you. You wish that it wasn't a common occurence. You start with the last " -#~ "of your stash and a strong crack addiction." -#~ msgstr "" -#~ "你正在前往收皮肉錢的路上,結果馬伕變成殭屍差點吃了你。你只希望這只是個案。" -#~ "你一開始只剩下一點點能安撫你強烈快克成癮的毒品了。" +#~ msgid "You have an opiate craving." +#~ msgstr "你藥物上癮了。" -#~ msgid "" -#~ "Your body has bionics worth millions payed by public taxes. The " -#~ "government employed you as a spy: you have night vision, an alarm and a " -#~ "hacking module powered by your own metabolism." -#~ msgstr "" -#~ "你的身體裝有由納稅人提供的百萬等級生化插件。政府指派你進行間諜活動:你擁有" -#~ "植入式夜視儀、警報系統、以及手指駭客,由電池系統所供電。" +#~ msgid "You have a craving." +#~ msgstr "你出現上癮症狀。" -#~ msgctxt "Main Menu" -#~ msgid "elp" -#~ msgstr "說明" +#~ msgid "You have a speed craving." +#~ msgstr "你對興奮劑上癮了。" -#~ msgctxt "Main Menu" -#~ msgid "oad" -#~ msgstr "讀取" +#~ msgid "You have a craving for cocaine." +#~ msgstr "你對古柯鹼上癮了。" -#~ msgid " select a statistic." -#~ msgstr " 選擇屬性." +#~ msgid "You have a craving for crack." +#~ msgstr "你對快克上癮了。" -#~ msgid "(Press spacebar to toggle)" -#~ msgstr "按空白鍵切換" +#~ msgid "Too many itens" +#~ msgstr "太多物品" -#~ msgid "h, 4, or left arrow" -#~ msgstr "h, 4, 或左方向鍵" +#~ msgid "Start a fire" +#~ msgstr "生了火" -#~ msgid "j/k, 8/2, or arrows" -#~ msgstr "j/k, 8/2, 或方向鍵" +#~ msgid "create an EMP" +#~ msgstr "產生電磁脈衝" -#~ msgid "l, 6, or right arrow" -#~ msgstr "l, 6, 或右方向鍵" +#~ msgid "Activate your bio lockpick" +#~ msgstr "啟動你的生化開鎖器" -#~ msgid " barely misses!" -#~ msgstr " 差點沒命中!" +#~ msgid "You're not strong enough!" +#~ msgstr "你不夠強壯!" -#~ msgid " misses!" -#~ msgstr " 未命中!" +#~ msgid "Press a direction for the furniture to move (. to cancel):" +#~ msgstr "按下要把家具移動的方向 (按 . 取消):" -#, fuzzy -#~ msgid "" -#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " -#~ "you from the floor, making it easier to sleep" -#~ msgstr "一張緊密卷曲的睡墊。可以讓你跟地板有所阻隔,更容易入睡。" +#~ msgid "Can't move furniture there! Choose a direction with open floor." +#~ msgstr "無法把家具移到那! 選擇有開闊地的方向." -#~ msgid "A car horn meant to be attached to a car's electrical system." -#~ msgstr "連接在汽車電子系統的汽車喇叭。" +#~ msgid "You disassemble the item into its components." +#~ msgstr "你把這個物品拆解成數個元件." -#~ msgid "" -#~ "A dry and tasteless bread product capable of remaining edible without " -#~ "spoilage for vast lengths of time." -#~ msgstr "乾而無味的麵包,能夠拉長不變質的時間。" +#~ msgid "There's bugs crawling under your skin!" +#~ msgstr "有蟲在你的皮膚底下爬!" -#~ msgid "A handful of large, purple plums. It is good for your digestion." -#~ msgstr "手掌大小的紫色李子。有助於消化。" +#~ msgid "Contracted the infection." +#~ msgstr "受到感染。" -#~ msgid "" -#~ "A pipe whose ends have been bent and hammered flat to resemble a crowbar." -#~ msgstr "一跟末端被彎折並敲平的鐵管,能當做撬棍使用。" +#~ msgid "You start scratching yourself all over!" +#~ msgstr "你開始對著全身拼命抓癢!" -#~ msgid "" -#~ "A portable charcoal smoker. Good for weekend barbecuing and preserving " -#~ "meat with smoke." -#~ msgstr "一個攜帶式的碳烤爐。適合假日出遊烤肉。" +#~ msgid "%s starts scratching himself all over!" +#~ msgstr "%s 開始對著全身拼命抓癢!" -#~ msgid "" -#~ "A shell filled with tiny steel darts. Extremely damaging, plus the spread " -#~ "makes it very accurate at short range. Slices through most forms of armor " -#~ "with ease." -#~ msgstr "" -#~ "一個裝滿了小鋼鏢的散彈。能造成極大傷害,在近距離非常準。能夠割開大部分形式" -#~ "的裝甲。" +#~ msgid "%s starts scratching herself all over!" +#~ msgstr "%s 開始對著全身拼命抓癢!" -#~ msgid "A simple bulb horn, found on many bicycles. Honk honk." -#~ msgstr "簡單的球狀喇叭,許多腳踏車上都有裝。叭噗叭噗。" +#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." +#~ msgstr "你覺得發燒,噁心,你的傷口已經開始變綠" -#~ msgid "" -#~ "A stout collapsible spade commonly used by military forces and favored by " -#~ "hikers." -#~ msgstr "一個可折疊的粗壯鐵鍬常用於軍隊和受到遠足者的愛用。" +#~ msgid "Spores" +#~ msgstr "孢子" -#~ msgid "" -#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " -#~ "brightly, and makes it much easier to see the baselines at night games " -#~ "(It also makes the umpire FAR more likely to call a ball instead of a " -#~ "strike)." -#~ msgstr "" -#~ "一根堅硬的球棒,裹著汽油浸濕的布條。它已經點燃並發亮,讓你更容易看清楚夜晚" -#~ "中的壘包(這也讓裁判更容易判壞球)。" +#~ msgid "Bleeding" +#~ msgstr "流血" -#~ msgid "" -#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " -#~ "ball game will REALLY heat up." -#~ msgstr "一根堅硬的球棒,裹著汽油浸濕的布條。點燃它,讓球賽變得更加火熱吧!" +#~ msgid "Bugs Under Skin" +#~ msgstr "皮下寄生蟲" -#~ msgid "A very loud horn, usually found on large trucks like semis." -#~ msgstr "很大聲的喇叭,通常會用在類似貨櫃車上。" +#~ msgid "Bite Wound" +#~ msgstr "咬傷" -#~ msgid "Ammunition for the RPG-7." -#~ msgstr "RPG-7的專用彈藥。" +#~ msgid "Painful Bite Wound" +#~ msgstr "疼痛的咬傷" -#~ msgid "An empty hull from a 5x50mm flechette round." -#~ msgstr "一個空的5x50mm鋼鏢彈彈殼。" +#~ msgid "Infected Wound" +#~ msgstr "感染的咬傷" -#~ msgid "Lumpy white soup made of clams and potatoes." -#~ msgstr "使用蛤蜊與馬鈴薯做成的白色濃湯。" +#~ msgid "Painful Infected Wound" +#~ msgstr "疼痛的感染傷口" -#~ msgid "RPG-7 Ammo" -#~ msgstr "RPG-7彈藥" +#~ msgid "Pus Filled Wound" +#~ msgstr "充滿膿液的傷口" -#, fuzzy #~ msgid "" -#~ "Small metal objects covered with many sharp points. If an unsuspecting " -#~ "victim steps on it, they'll get a spine through the foot." +#~ "Speed -40%\n" +#~ "You can feel the tiny spores sinking directly into your flesh." #~ msgstr "" -#~ "由木板與豎立的鐵釘合成的陷阱。假如有粗心的獵物踩上去,腳掌就會被刺穿。" +#~ "速度 -40%\n" +#~ "你可以感受到有微小孢子正潛入你的血肉之中." #~ msgid "" -#~ "A large and colorful game bird native to the forests of North America." -#~ msgstr "一隻大而多彩的鳥,原產於北美的森林。" +#~ "Strength - 1; Intelligence - 2\n" +#~ "You stop to scratch yourself frequently; high intelligence helps you " +#~ "resist\n" +#~ "this urge." +#~ msgstr "" +#~ "力量 - 1; 智力 - 2\n" +#~ "你不時停下來開始抓癢; 高的智力能讓你抵抗\n" +#~ "這種狀況." -#~ msgid "" -#~ "A massive, mutated freshwater shellfish,\n" -#~ "resembling a humongous lobster." -#~ msgstr "一個龐大的突變甲殼魚類,像是一個巨大的龍蝦。" +#~ msgid "Your bite wound really hurts." +#~ msgstr "你被咬傷的地方很痛." -#, fuzzy -#~ msgid "" -#~ "A plant that grows as high as your head,\n" -#~ "with one thick, bark-coated stalk\n" -#~ "supporting a flower-like head with a paralyzing\n" -#~ "sting within." -#~ msgstr "" -#~ "一株植物與你的身高差不多,\n" -#~ "有著厚實,齒狀的莖\n" -#~ "頂部有著花狀的頭部以及\n" -#~ "尖刺。" +#~ msgid "Your bite wound feels swollen and painful." +#~ msgstr "你被咬傷的地方變得腫脹和疼痛." -#~ msgid "" -#~ "A small mammal native to North America, distinctive for its dexterous " -#~ "paws and facial markings." -#~ msgstr "一種小型哺乳動物,原產於北美,其靈巧的爪子和臉部標記為其特色。" +#~ msgid "The sludge is thick and sticky." +#~ msgstr "污泥黏稠." -#~ msgid "A small, omnivorous marsupial native to North America." -#~ msgstr "一隻小型的雜食性有袋動物,原產於北美。" +#~ msgid "You haven't eaten in over a week!" +#~ msgstr "你一整個星期沒進食了!" -#~ msgid "" -#~ "An eastern timber rattlesnake, one of New England's most poisonous snakes." -#~ msgstr "一隻東部的森林響尾蛇,新英格蘭地區最毒的蛇之一。" +#~ msgid "4 days... no water.." +#~ msgstr "四天了... 都沒水喝..." -#~ msgctxt "Main Menu" -#~ msgid "eset" -#~ msgstr "重置" +#~ msgid "You haven't had anything to drink in 2 days!" +#~ msgstr "你兩天沒喝水了!" -#~ msgid "" -#~ "Choose the tileset you want to use. Only applicable on SDL builds. " -#~ "Requires restart." -#~ msgstr "選擇你想要使用的圖像包。只有SDL版本才有用。必須重新啟動遊戲。" +#~ msgid "Study %s?" +#~ msgstr "鑽研 %s?" -#, fuzzy -#~ msgid "Start cart construction" -#~ msgstr "開始建設車輛" +#~ msgid "You learn %s." +#~ msgstr "你學習 %s." -#, fuzzy -#~ msgid "Enter new cart name:" -#~ msgstr "輸入新的車輛名稱:" +#~ msgid "whatever" +#~ msgstr "算了" -#, fuzzy -#~ msgid "Cart" -#~ msgstr "高爾夫球車" +#~ msgid "crafting" +#~ msgstr "製作物品中" -#, fuzzy -#~ msgid "Very Heavily Bleeding " -#~ msgstr "高溫度依賴症" +#~ msgid "playing" +#~ msgstr "播放中" -#, fuzzy -#~ msgid "%1$s quickly strike with %2$s %3$s at %4$s" -#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" +#~ msgid "reading" +#~ msgstr "閱讀中" -#, fuzzy -#~ msgid "%1$s quickly strikes with %2$s %3$s at %4$s" -#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" +#~ msgid "reloading" +#~ msgstr "裝填中" -#, fuzzy -#~ msgid "%1$s use %2$s %3$s to wrap up %4$s" -#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" +#~ msgid "waiting" +#~ msgstr "等待中" -#, fuzzy -#~ msgid "%1$s uses %2$s %3$s to wrap up %4$s" -#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" +#~ msgid "butchering" +#~ msgstr "屠宰中" -#, fuzzy -#~ msgid "%1$s use %2$s %3$s to sweep %4$s" -#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" +#~ msgid "disassembly" +#~ msgstr "拆解" -#, fuzzy -#~ msgid "%1$s uses %2$s %3$s to sweep %4$s" -#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" +#~ msgid "foraging" +#~ msgstr "覓食" -#, fuzzy -#~ msgid "%1$s elbow %4$s" -#~ msgstr "%1$s 摔出 %4$s" +#~ msgid "pumping gas" +#~ msgstr "抽取汽油" -#, fuzzy -#~ msgid "%1$s elbows %4$s" -#~ msgstr "%1$s 摔出 %4$s" +#~ msgid "training" +#~ msgstr "訓練" -#, fuzzy -#~ msgid "%1$s flying knees %4$s" -#~ msgstr "%1$s 砍中 %4$s" +#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." +#~ msgstr "%s 停止 %s? (Y)是, (N)否, (I)忽略所有提示並專心完成." -#, fuzzy -#~ msgid "%1$s surprise attack %4$s" -#~ msgstr "%1$s 反擊 %4$s" +#~ msgid "%s Stop %s?" +#~ msgstr "%s 停止 %s?" -#, fuzzy -#~ msgid "%1$s side-kicks %4$s" -#~ msgstr "%1$s 迴旋踢 %4$s" +#~ msgid "Martial arts gained." +#~ msgstr "武術習得." -#, fuzzy -#~ msgid "%1$s sweep-kicks %4$s" -#~ msgstr "%1$s 迴旋踢 %4$s" +#~ msgid "Open" +#~ msgstr "開啟" -#, fuzzy -#~ msgid "24 hour time" -#~ msgstr "時間格式" +#~ msgid "Close" +#~ msgstr "關閉" -#~ msgid "smash" -#~ msgstr "敲擊" +#~ msgid "Smash" +#~ msgstr "砸" -#~ msgid "It is too dark to plant anything now." -#~ msgstr "光線太暗無法種植。" +#~ msgid "You swing at the corpse." +#~ msgid_plural "You swing at the corpses." +#~ msgstr[0] "你進行虐屍。" -#~ msgid "" -#~ "If true, the crafting menus will display recipes that you can craft " -#~ "before other recipes" -#~ msgstr "設定為 True ,製作選單將會把你能製作的物品優先排在前面。" +#~ msgid "You greatly damage the %s!" +#~ msgstr "你對 %s 造成大量傷害!" -#~ msgid "Sort Crafting menu" -#~ msgstr "製作物品選單排序" +#~ msgid "You damage the %s!" +#~ msgstr "你對 %s 造成傷害!" -#~ msgid "Allow zombies to revive after a certain amount of time." -#~ msgstr "允許殭屍在一段時間後復活" +#~ msgid "The corpse is now thoroughly pulped." +#~ msgstr "這屍體變成徹底的肉醬了" -#~ msgid "Revive zombies" -#~ msgstr "殭屍復活" +#~ msgid " where? (Direction button)" +#~ msgstr " 哪邊? (方向鍵)" -#~ msgid "" -#~ "The massive frame of this weapon belies its monstrous power and a draw " -#~ "weight at the edge of human capability. The immense strain that this bow " -#~ "puts on the user comes at a drastic cost of accuracy and rate of fire, " -#~ "but the power and range rewarded is unparalleled." -#~ msgstr "" -#~ "要拉動這件大型武器的力量已經在人類能力的極限了。雖然巨大的拉弓力量讓使用者" -#~ "降低許多準度與連射速度,但是得到的是無與倫比的攻擊力量與射擊距離。" +#~ msgid "Control vehicle" +#~ msgstr "控制車輛" -#~ msgid "65kg bow" -#~ msgstr "65公斤弓" +#~ msgid "Examine" +#~ msgstr "檢視" -#~ msgid "" -#~ "Among the most distinctive things about this bow are the curled arms that " -#~ "turn away from the archer at the ends. Due to high workmanship, the high " -#~ "draw weight is much more efficiently transferred into throwing the arrow. " -#~ "The strain does however put a great deal of strain onto the user, " -#~ "lowering both accuracy and rate of fire." -#~ msgstr "" -#~ "關於這把弓其中最有特色的就是末端向外彎曲的弓臂。由於高做工的高拉伸重量,更" -#~ "有效地轉移動能到箭矢上。但也由於需要耗費使用者大量的力量,所以降低了準度與" -#~ "連射速度。" +#~ msgid "Peek" +#~ msgstr "窺" -#~ msgid "50kg bow" -#~ msgstr "50公斤弓" +#~ msgid "You dont see any items around you!" +#~ msgstr "你周圍都沒有東西!" -#~ msgid "" -#~ "A bow with a draw strength rarely seen in modern day. The bow's power is " -#~ "akin to those of big game hunters in the safari. However, due to its draw " -#~ "weight, the draw time is slower, and the strain of the draw hinders " -#~ "accuracy." -#~ msgstr "" -#~ "在現代很少見到需要如此拉弓力量的弓。這把弓的力量是用於在野外狩獵的大型比賽" -#~ "居多。因為拉弓力量大,所以拉滿的時間也較長,也容易造成準確度不高的情形。" +#~ msgid "Have a drink?" +#~ msgstr "喝下?" -#~ msgid "40kg bow" -#~ msgstr "40公斤弓" +#~ msgid "Refill vehicle" +#~ msgstr "車輛加油" -#~ msgid "" -#~ "A bow that uses a set of pulleys to take the strain off the user when a " -#~ "bow is fully drawn to provide better accuracy. This does not mean however " -#~ "that the draw weight on these must be less than a bow with similar draw " -#~ "weight." -#~ msgstr "" -#~ "一把帶有滑輪的複合弓,可以減少使用者拉滿弓時的負擔以增加精準度。但不代表拉" -#~ "弓的磅數會比相似的弓低。" +#~ msgid "Drop" +#~ msgstr "丟棄到" -#~ msgid "30kg bow compound" -#~ msgstr "30公斤複合弓" +#~ msgid "You need a charged UPS." +#~ msgstr "你需要有電的UPS。" -#~ msgid "" -#~ "With a draw weight slightly above what professional users use, this bow " -#~ "can take down medium game, and even large game with enough skill." -#~ msgstr "" -#~ "拉弓力量略高於職業使用者的弓,這把弓能輕易的贏下中型比賽,只要有足夠技巧要" -#~ "贏大型比賽也是可能的。" +#~ msgid "Butcher the %s corpse?" +#~ msgstr "屠宰 %s 的屍體?" -#~ msgid "30kg bow" -#~ msgstr "30公斤弓" +#~ msgid "Wield item: Press - to choose a style" +#~ msgstr "手持物品: 按 - 選擇招式" -#~ msgid "" -#~ "A bow with a semi-powerful draw. Its relatively low draw weight gives a " -#~ "good draw speed, as well as precision for lack of strain on the user when " -#~ "the bow is fully drawn." -#~ msgstr "" -#~ "一把中等磅數的弓。它的輕量磅數相對讓你拉弓更為快速,不過即使是拉到最滿還是" -#~ "缺乏張力而欠缺準度。" +#~ msgid "MEDICINE/DRUGS" +#~ msgstr "藥物" -#~ msgid "20kg_bow" -#~ msgstr "20公斤弓" +#~ msgid "MODS/BIONICS" +#~ msgstr "模組/生化插件" -#~ msgid "" -#~ "Made using the most rudimentary knowledge of bows, this short and weak " -#~ "bow is just enough to take down small game in a shot or two." -#~ msgstr "" -#~ "用基礎知識造出來的弓,十分的短且無攻擊能力,只能拿來打打遊樂場的射箭遊戲。" +#~ msgid "Error: Item Missing." +#~ msgstr "錯誤: 找不到物品。" -#~ msgid "10kg bow" -#~ msgstr "10公斤弓" +#~ msgid "A common hydraulic jack, used when changing tires." +#~ msgstr "一個常見的液壓千斤頂,通常在換輪胎時會用到。" #~ msgid "" -#~ "An object that looks like a bow from afar, but closer inspection will " -#~ "reveal its simple nature. This is a bow someone with absolutely no " -#~ "knowledge of bows would make. Solely based on popular depictions from " -#~ "movies and video games, this object merely tries to look and act like a " -#~ "bow, nothing more." +#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" +#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " +#~ "allows\n" +#~ "you an extra dodge and two extra blocks on the following round." #~ msgstr "" -#~ "一個看起來像弓的東西,但仔細一看卻又不像。這是由新手嘗試模仿電影或電動製造" -#~ "的弓,除了外型與功能有點像,與真正的弓差太多了。" +#~ "空手道是來自於日本的有名流派。其專注\n" +#~ "於快速精準的攻擊阻擋及靈活的走位。攻擊\n" +#~ "命中能讓你能夠增加額外的閃避及格擋。" -#~ msgid "bow-like_object" -#~ msgstr "像弓的東西" +#~ msgid "karate" +#~ msgstr "空手道" -#~ msgid "" -#~ "A six-foot wooden bow that fires feathered arrows. This takes a fair " -#~ "amount of strength to draw. Arrows fired from this weapon have a good " -#~ "chance of remaining intact for re-use. It requires 10 strength to fire" -#~ msgstr "" -#~ "一把六呎長的木弓,以羽毛弓箭為彈藥,它需要不少力量拉滿弓,射出的弓箭有較高" -#~ "的機率重複使用。它需要10點力量才能使用。" +#~ msgid "%1$s quickly punch %4$s" +#~ msgstr "%1$s 快速的出拳打 %4$s" -#~ msgid "" -#~ "A bow with wheels that fires high velocity arrows. Weaker people can use " -#~ "compound bows more easily. Arrows fired from this weapon have a good " -#~ "chance of remaining intact for re-use. It requires 8 strength to fire" -#~ msgstr "" -#~ "帶有滑輪的弓箭,力量小的人可以用它輕鬆發射複合材質弓箭,射出的弓箭也可以有" -#~ "較高的機率重複使用。它需要8點力量才能使用。" +#~ msgid "%1$s quickly punches %4$s" +#~ msgstr "%1$s 快速的出拳打 %4$s" -#~ msgid "Disinfectant" -#~ msgstr "消毒" +#~ msgid "%1$s block %4$s" +#~ msgstr "%1$s 格擋 %4$s" -#~ msgid "Bandage" -#~ msgstr "繃帶" +#~ msgid "%1$s blocks %4$s" +#~ msgstr "%1$s 格擋 %4$s" -#~ msgid "" -#~ "A very large triffid, with a particularly\n" -#~ "vicious sting and thick bark. As it\n" -#~ "moves, plant matter drops off its body\n" -#~ "and immediately takes root." -#~ msgstr "" -#~ "一個非常大的食人樹,有著劇毒\n" -#~ "的刺及齒莖。隨著它的移動,會\n" -#~ "散佈立即紮根的種子。" +#~ msgid "%1$s karate chop %4$s" +#~ msgstr "%1$s 用手刀劈 %4$s" -#~ msgid "" -#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " -#~ "make it ready to fire. Once activated, it cannot be repacked." -#~ msgstr "M72 66火箭彈,按(a)可以啟動它並且準備發射,一但啟動就不能解除了。" +#~ msgid "%1$s karate chops %4$s" +#~ msgstr "%1$s 用手刀劈 %4$s" -#~ msgid "" -#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " -#~ "with. Its small tip allows for a precision strike in the hands of the " -#~ "skilled. It is too small to butcher corpses with." -#~ msgstr "" -#~ "小且鋒利的美工刀,具有良好的殺傷力但是很難命中物體,細小的刀尖很適合高手對" -#~ "付頭部區域。X-Acto美工刀不適合切割屍體或獵物,因為實在太小把了。" +#~ msgid "aikido" +#~ msgstr "合氣道" -#~ msgid ". Requires Unarmed Skill of " -#~ msgstr ". 需要徒手技能達到 " +#~ msgid "%1$s feint at %4$s" +#~ msgstr "%1$s 對 %4$s 使用虛擊。" -#~ msgid "" -#~ "You're carrying more volume than you have storage for, which means you " -#~ "are\n" -#~ "carrying some stuff in the crook of your arm or in some other awkward " -#~ "manner.\n" -#~ "While overloaded like this, you will suffer SEVERE encumberment " -#~ "penalties,\n" -#~ "making combat dangerous. Either drop an item, or possibly wield " -#~ "something--\n" -#~ "the object you are wielding does not take up inventory space." -#~ msgstr "" -#~ "你正攜帶著超出你儲物空間體積的狀態,也就是代表你正使用手臂用奇怪的方式\n" -#~ "帶著東西。當你像這樣子超載,你將會受到許多的累贅懲罰,讓戰鬥時陷入危險\n" -#~ "狀態。你可以選擇丟棄物品,或是手持該物品--你手持的物品不會計算在物品欄的\n" -#~ "儲物空間中。" +#~ msgid "%1$s feints at %4$s" +#~ msgstr "%1$s 對 %4$s 使用虛擊。" -#~ msgid "" -#~ "You just placed a trap. Traps are permanent until set off, and can be " -#~ "an\n" -#~ "important defensive tactic, particularly when sleeping in unsafe " -#~ "territory.\n" -#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." -#~ msgstr "" -#~ "你剛剛放置了陷阱。陷阱是一種一旦設置了就會永久處於待觸發狀態的重\n" -#~ "要防禦機制,特別是當你要在不安全的地區進行睡眠時。試試看踩到 _ 的\n" -#~ "符號上 -- 別擔心,那只是無害的泡泡紙陷阱。" +#~ msgid "%1$s throw %4$s" +#~ msgstr "%1$s 摔出 %4$s" -#~ msgid "" -#~ "When you kill a monster it will often leave behind a corpse. Corpses can " -#~ "be\n" -#~ "important sources of food, but you must Butcher them by standing on the\n" -#~ "corpse and pressing 'B'. You'll need a bladed weapon in your inventory,\n" -#~ "preferably a small, very sharp one. An unskilled butcher may only get a " -#~ "few\n" -#~ "pieces of meat, or none at all. Note that many monsters, such as " -#~ "zombies,\n" -#~ "leave tainted meat, unsuitable for consumption." -#~ msgstr "" -#~ "當你殺害了怪物通常會流下屍體。屍體有時是重要的食物來源,但是你必須\n" -#~ "先站在屍體上按下'B'來進行屠宰。你必須在物品欄中有刀刃的武器,最好是\n" -#~ "小而尖銳的。一個沒技巧的屠宰可能只能得到少量的肉,甚至完全沒有。注\n" -#~ "意,許多的怪物,像是殭屍,會留下感染的肉,這是不適合食用的。" +#~ msgid "%1$s throws %4$s" +#~ msgstr "%1$s 摔出 %4$s" -#~ msgid "" -#~ "Taking damage often causes pain. Small amounts of pain are tolerable, " -#~ "but as\n" -#~ "it gets worse your stats will drop and you will move much slower. To " -#~ "reduce\n" -#~ "pain, take painkillers like codeine, or simply wait it out." -#~ msgstr "" -#~ "受到傷害通常會造成疼痛。小數值的疼痛能夠被忍受,但是隨著數值的增加\n" -#~ "你各種屬性受到的影響也就越大。要減少疼痛,服用止痛藥,類似可待因,\n" -#~ "就能簡單的把疼痛降低。" +#~ msgid "%1$s disarm %4$s" +#~ msgstr "%1$s 繳械了 %4$s" -#~ msgid "" -#~ "If you press 'i' and then the letter of your weapon, you'll see its " -#~ "combat\n" -#~ "stats. Bashing damage ignores most armor, but varies greatly and " -#~ "requires\n" -#~ "strength. Cutting damage is a fixed amount, but is blocked by armor. " -#~ "The\n" -#~ "To-hit bonus affects your chances of hitting. The amount of time it takes " -#~ "to\n" -#~ "swing your melee weapon depends on both its size and weight; small, " -#~ "compact\n" -#~ "weapons are the fastest." -#~ msgstr "" -#~ "假如你按下'i'並選擇你的武器,你就能夠看到該武器的戰鬥數值。鈍擊傷害\n" -#~ "能忽略護甲保護,但都受到力量屬性限制傷害的大部分能力。砍劈傷害則是\n" -#~ "固定的數值,但是會被護甲影響。命中加成影響你擊中的機率。近戰武器的\n" -#~ "大小與重量則會影響揮動時耗費的時間;小而實在的武器速度是最快的。" +#~ msgid "%1$s disarms %4$s" +#~ msgstr "%1$s 繳械了 %4$s" #~ msgid "" -#~ "You just put on an article of clothing that protects against the " -#~ "environment.\n" -#~ "The most common and imporant are respiratory devices, which will protect " +#~ "Judo is a martial art that focuses on grabs and throws, both defensive " +#~ "and\n" +#~ "offensive. It also focuses on recovering from throws; while using judo, " #~ "you\n" -#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" -#~ "However, they also make it a little harder to breath when running, so " -#~ "you'll\n" -#~ "move more slowly. To check encumberance, press @." +#~ "will not lose any turns to being thrown or knocked down." #~ msgstr "" -#~ "你剛剛把能夠對抗環境因素的衣物穿戴上了。最常見和最重要的就是呼吸設備\n" -#~ "了,能夠讓你對抗煙塵、空氣中的毒素或微生物以及常見的災害。然而,同時\n" -#~ "也會讓你在奔跑時稍微增加難度,讓你速度變慢。要檢查累贅度,按下@。" +#~ "柔道是一項重視擒拿與投擲的武術,不分防禦及進攻。\n" +#~ "同時也注重從被投擲時快速恢復;當使用柔道時,你將\n" +#~ "不會被擊倒。" -#~ msgid "" -#~ "You just put on an article of clothing that provides physical " -#~ "protection.\n" -#~ "There are two types of damage that clothing defends against, bashing, " -#~ "and\n" -#~ "cutting. Most monsters deal bashing damage, but cutting is often the " -#~ "more\n" -#~ "deadly of the two. Bullets are considered cutting damage." -#~ msgstr "" -#~ "你剛把一件能提供物理保護的衣物穿上了。衣物能夠抵禦兩種形態的攻擊,\n" -#~ "鈍擊,與砍劈。大部分的怪物都使用鈍擊傷害,但砍劈造成的傷害較大。子\n" -#~ "彈也視為砍劈傷害。" +#~ msgid "judo" +#~ msgstr "柔道" -#~ msgid "" -#~ "You just put on an article of clothing that provides ample storage " -#~ "space.\n" -#~ "This will allow you to carry much more stuff, but be aware that there is " -#~ "also\n" -#~ "a limit on the weight you can carry which depends on strength. The item " -#~ "you\n" -#~ "put on also encumbered your torso. This will make combat a little more\n" -#~ "difficult. To check encumberance, press @." -#~ msgstr "" -#~ "你剛把一件能提供儲物空間的衣物穿上了。這樣能讓你容納更多的東西,\n" -#~ "但是要小心你攜帶物品時也受到負重限制,這部份是由力量屬性所決定。\n" -#~ "你穿戴上的這件物品同時也會讓你的軀幹造成累贅。會讓戰鬥時稍微增加\n" -#~ "難度。要檢視累贅度,按下@。" +#~ msgid "%1$s grab %4$s" +#~ msgstr "%1$s 擒拿 %4$s" -#~ msgid "hazmatbot" -#~ msgstr "災害處理機器人" +#~ msgid "%1$s grabs %4$s" +#~ msgstr "%1$s 擒拿 %4$s" #~ msgid "" -#~ "A utility robot designed for hazardous\n" -#~ "conditions. Its only means to stop intruders\n" -#~ "appears to involve thrashing around one of its\n" -#~ "multiple legs." +#~ "Though tai chi is often seen as a form of mental and physical exercise, " +#~ "it is\n" +#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " +#~ "the\n" +#~ "force of an attack makes your Perception decrease damage further on a " +#~ "block." #~ msgstr "" -#~ "一個設計於各種危險環境活動的機器人。\n" -#~ "它只能用它多條腿的其中之一來阻擋入侵\n" -#~ "者。" +#~ "太極拳是一種對心靈及身體進行修煉的武術,\n" +#~ "是一種合法的門派,重視自我防禦。它能夠吸\n" +#~ "收攻擊的力道,感知越高,傷害減少的越多。" -#~ msgid "" -#~ "A roughly spherical robot that hovers about\n" -#~ "five feet of the ground. Its front side is\n" -#~ "dominated by a huge eye and a flash bulb.\n" -#~ "Frequently used for reconaissance." -#~ msgstr "" -#~ "一個懸浮在約五呎空中的球形機器人。它的\n" -#~ "前面有著碩大的眼睛與閃爍的燈。常作為偵\n" -#~ "查的用途。" +#~ msgid "tai chi" +#~ msgstr "太極拳" -#~ msgid "" -#~ "A pale white man with a physically flawless athletic\n" -#~ "body and shaved head. His eyes are completely black\n" -#~ "as bloody tears pour forth from them." -#~ msgstr "" -#~ "一個完美身形的純白色人,頭髮是剃光的。\n" -#~ "它的眼睛是完全黑色,並且有血液的眼淚從\n" -#~ "中流出。" +#~ msgid "%1$s strike %4$s" +#~ msgstr "%1$s 攻擊 %4$s" -#~ msgid "" -#~ "An insane individual with many bloody holes\n" -#~ "on the sides of their shaved head. Some form\n" -#~ "of lobotomy has left it with a partially re-\n" -#~ "animated brain." -#~ msgstr "" -#~ "一個瘋狂的人,他們剃光頭的兩側有許多血洞。\n" -#~ "已被進行某種形式的前腦葉白質切除術,與某部\n" -#~ "分的腦子分離。" +#~ msgid "%1$s strikes %4$s" +#~ msgstr "%1$s 攻擊 %4$s" #~ msgid "" -#~ "A small humanoid, the size of a dog, with\n" -#~ "twisted red flesh and a distended neck. It\n" -#~ "scampers across the ground, panting and\n" -#~ "grunting." +#~ "A dance-like style with its roots in Brazilian slavery, capoeira is " +#~ "focused\n" +#~ "on fluid movement and sweeping kicks. Moving a tile will boost attack " +#~ "and\n" +#~ "dodge; attacking boosts dodge, and dodging boosts attack." #~ msgstr "" -#~ "一個小型機器人,尺寸像狗一樣,纏繞著\n" -#~ "紅色的血肉與漲大的脖子。它會在地上到\n" -#~ "處跑,喘氣,發出呼嚕聲。" +#~ "源自於巴西的一種類舞蹈武術,巴西戰舞注重於流暢的走位及掃踢。\n" +#~ "每走一步都能獲得攻擊與閃避加成;閃避成功也能得到攻擊加成。" -#~ msgid "" -#~ "A shapeless blob the size of a cow. It\n" -#~ "oozes slowly across the ground, small\n" -#~ "chunks falling off of its sides." -#~ msgstr "" -#~ "一顆無暇的球狀物體,約牛的大小。\n" -#~ "它緩慢的在地面上滾動。並且會從其\n" -#~ "上掉落小小的塊狀物體。" +#~ msgid "capoeira" +#~ msgstr "巴西戰舞" -#~ msgid "gelatinous blob" -#~ msgstr "凝膠球" +#~ msgid "%1$s bluff %4$s" +#~ msgstr "%1$s 對 %4$s 虛張聲勢" -#~ msgid "copbot" -#~ msgstr "警察機器人" +#~ msgid "%1$s bluffs %4$s" +#~ msgstr "%1$s 對 %4$s 虛張聲勢" -#~ msgid "" -#~ "A blue-painted robot that moves quickly on a\n" -#~ "set of three omniwheels. It has a nightstick\n" -#~ "readied, and appears to be well-armored." -#~ msgstr "" -#~ "一個藍色外漆的機器人,能夠利用其微型三\n" -#~ "輪進行快速移動。它有一個警棍,並且有良\n" -#~ "好的裝甲。" +#~ msgid "%1$s low kick %4$s" +#~ msgstr "%1$s 下段踢 %4$s" -#~ msgid "" -#~ "A robot with an insectoid design, about\n" -#~ "the size of a small dog. It skitters\n" -#~ "quickly across the ground, two electric\n" -#~ "prods at the ready." -#~ msgstr "" -#~ "一個昆蟲外型的機器人,約小狗的大小\n" -#~ "。它快速的掠過地面,並且有電子探測\n" -#~ "觸鬚。" +#~ msgid "%1$s low kicks %4$s" +#~ msgstr "%1$s 下段踢 %4$s" -#~ msgid "" -#~ "An eldritch creature, shuffling\n" -#~ "along, its hands twitching so\n" -#~ "fast they appear as nothing but\n" -#~ "blurs." -#~ msgstr "" -#~ "一個怪異的生物,一直隨機變換,\n" -#~ "其手掌抽搐的速度快到讓你看不見\n" -#~ "實體。" +#~ msgid "%1$s spin and hit %4$s" +#~ msgstr "%1$s 迴旋並擊中 %4$s" -#~ msgid "" -#~ "A beast with the body of a slightly-overweight\n" -#~ "man and the head of a cow. It walks slowly,\n" -#~ "milky white drool dripping from its mouth,\n" -#~ "wearing only a pair of white underwear." -#~ msgstr "" -#~ "有著稍微過重的人類身形,而頭部是牛頭。\n" -#~ "它移動緩慢,乳白色的唾液從他的嘴巴流下\n" -#~ ",只穿著一副白色的內衣。\n" -#~ "(日本電影:牛頭 Gozu)" +#~ msgid "%1$s spins and hits %4$s" +#~ msgstr "%1$s 迴旋並擊中 %4$s" -#~ msgid "Gozu" -#~ msgstr "牛頭人" +#~ msgid "%1$s spin-kick %4$s" +#~ msgstr "%1$s 迴旋踢 %4$s" + +#~ msgid "%1$s spin-kicks %4$s" +#~ msgstr "%1$s 迴旋踢 %4$s" #~ msgid "" -#~ "A boxy robot about four feet high. It moves\n" -#~ "slowly on a set of treads, and is armed with\n" -#~ "a large machine gun type weapon. It is\n" -#~ "heavily armored." +#~ "Originating in Israel, Krav Maga is based on taking down an enemy quickly " +#~ "and\n" +#~ "effectively. It focuses on applicable attacks rather than showy or " +#~ "complex\n" +#~ "moves. Popular among police and armed forces everywhere." #~ msgstr "" -#~ "一個四四方方的四英尺高的機器人。靠著\n" -#~ "一組履帶緩慢的移動,並配備了一把大機\n" -#~ "槍。它有著重裝甲。" +#~ "起源於以色列,以色列格鬥術的基本上是以有效率的方式\n" +#~ "迅速打倒敵人,它注重實用的攻擊,而非花俏或複雜的\n" +#~ "招式.在警察和武裝部隊中被廣泛的運用." -#~ msgid "secubot" -#~ msgstr "保全機器人" +#~ msgid "krav maga" +#~ msgstr "以色列格鬥術" -#~ msgid "" -#~ "Slender and terrifying, this gigantic man lacks\n" -#~ "any skin yet moves swiftly and gracefully without\n" -#~ "it. Wings of flesh protrude uselessly from his\n" -#~ "back and a third eye dominates his forehead." -#~ msgstr "" -#~ "一個巨大、修長而可怕的人,沒有任何皮膚在\n" -#~ "其肌肉上。從他的背後長出肉質的翅膀,並且\n" -#~ "在額頭上有著第三隻眼。" +#~ msgid "%1$s jab %4$s" +#~ msgstr "%1$s 衝撞 %4$s" -#~ msgid "" -#~ "This poor victim was sliced open and bled to\n" -#~ "death long ago. Yet, chained down it thrashes\n" -#~ "in eternal misery from its tortures." -#~ msgstr "" -#~ "這個可憐的受害者在不久前死亡,呈現被切開\n" -#~ "的狀態。並且被鐵鍊拴著,象徵永恆的痛苦。" +#~ msgid "%1$s jabs %4$s" +#~ msgstr "%1$s 衝撞 %4$s" -#~ msgid "A large snake, translucent black." -#~ msgstr "一條巨大的蛇,呈現半透明的黑色。" +#~ msgid "%1$s counter-attack %4$s" +#~ msgstr "%1$s 反擊 %4$s" -#~ msgid "" -#~ "A strange dark area in the area. It whispers\n" -#~ "softly as it moves." -#~ msgstr "" -#~ "奇怪的一塊陰影。它會在移動時\n" -#~ "發出耳語。" +#~ msgid "%1$s counter-attacks %4$s" +#~ msgstr "%1$s 反擊 %4$s" #~ msgid "" -#~ "A strange, immobile pink goo. It seems to\n" -#~ "be breathing slowly." +#~ "Also referred to as the \"Art of 8 Limbs,\" Muay Thai is a popular " +#~ "fighting\n" +#~ "technique from Thailand that uses powerful strikes. It does extra damage\n" +#~ "against large or strong opponents." #~ msgstr "" -#~ "一個奇異的固定粉紅色肉塊。它似乎會\n" -#~ "緩慢的呼吸。" +#~ "泰拳是一門受歡迎的戰鬥技巧,在泰國當地被稱作\"八肢的藝術\",\n" +#~ "以強大的攻擊能力著稱。此武術能夠對大型或更強的敵人造成額外\n" +#~ "的傷害。" -#~ msgid "" -#~ "An enormous white flatworm writhing\n" -#~ "beneath the earth. Poking from the\n" -#~ "ground is a bulbous head dominated by a\n" -#~ "pink mouth, lined with rows of fangs." -#~ msgstr "" -#~ "一個巨大的白色扁形蟲在地底下扭動著。\n" -#~ "會利用球狀的頭與肉色的獠牙口從地底竄\n" -#~ "出," +#~ msgid "muay thai" +#~ msgstr "泰拳" + +#~ msgid "%1$s slap %4$s" +#~ msgstr "%1$s 對 %4$s 甩巴掌" + +#~ msgid "%1$s slaps %4$s" +#~ msgstr "%1$s 對 %4$s 甩巴掌" + +#~ msgid "%1$s power-kick %4$s" +#~ msgstr "%1$s 對 %4$s 強力踢擊" + +#~ msgid "%1$s power-kicks %4$s" +#~ msgstr "%1$s 對 %4$s 強力踢擊" #~ msgid "" -#~ "A fist-sized robot that flies swiftly through\n" -#~ "the air. It's covered with whirring blades\n" -#~ "and has one small, glowing red eye." +#~ "Ninjutsu is a martial art and set of tactics used by ninja in feudal " +#~ "Japan.\n" +#~ "It focuses on rapid, precise, silent strikes. Ninjutsu is entirely " +#~ "silent.\n" +#~ "It also provides small combat bonuses the turn after moving a tile." #~ msgstr "" -#~ "一種飛在空中拳頭大小的機器人\n" -#~ "身上覆蓋著旋轉的刀片\n" -#~ "有著一顆發光的紅眼." +#~ "忍術是封建時代的日本忍者使用的一套武術及一系列戰術。\n" +#~ "它注重於快速、精準、無聲的突擊。忍術是完全無聲的。\n" +#~ "它也能夠在每走一步時提供些微的戰鬥加成。" -#~ msgid "" -#~ "This looks like a human body, but its\n" -#~ "flesh is snow-white and its face has no\n" -#~ "features save for a perfectly round\n" -#~ "mouth." -#~ msgstr "" -#~ "看起來像是人類的軀體,但是血肉是\n" -#~ "雪白色的,且臉部沒有五官,只有一\n" -#~ "張大嘴。" +#~ msgid "ninjutsu" +#~ msgstr "忍術" #~ msgid "" -#~ "An eyeball the size of an easy chair and\n" -#~ "covered in rolling blue flames. It floats\n" -#~ "through the air." +#~ "Taekwondo is the national sport of Korea, and was used by the South " +#~ "Korean\n" +#~ "army in the 20th century. Focused on kicks and punches, it also includes\n" +#~ "strength training; your blocks absorb extra damage the stronger you are." #~ msgstr "" -#~ "一個椅子大小的眼球,覆蓋著滾燙的\n" -#~ "藍色火焰。並漂浮在空中。" +#~ "跆拳道是韓國的國家運動,曾於20世紀用於南韓陸軍的訓練。\n" +#~ "注重於踢擊與拳擊的技巧,同時也包含了力量的訓練。\n" +#~ "你格擋時能夠依照你的力量屬性,吸收額外的傷害。" -#~ msgid "" -#~ "A pinkish, fungoid crustacean-like\n" -#~ "creature with numerous pairs of clawed\n" -#~ "appendages and a head covered with waving\n" -#~ "antennae." -#~ msgstr "" -#~ "一個粉紅色的真菌甲殼類生物,有\n" -#~ "著無數的附肢爪,頭部長了許多觸\n" -#~ "角。" +#~ msgid "taekwondo" +#~ msgstr "跆拳道" -#~ msgid "Mi-go" -#~ msgstr "米戈" +#~ msgid "%1$s brutally kick %4$s" +#~ msgstr "%1$s 殘暴的踢 %4$s" -#~ msgid "" -#~ "A ropy, worm-like creature that flies on\n" -#~ "bat-like wings. Its form continually\n" -#~ "shifts and changes, twitching and\n" -#~ "writhing." -#~ msgstr "" -#~ "一支黏稠,蠕蟲狀生物,有著用來飛行\n" -#~ "的蝙蝠狀翅膀。它的形狀不斷的轉變並\n" -#~ "抽搐扭動著。" +#~ msgid "%1$s brutally kicks %4$s" +#~ msgstr "%1$s 殘暴的踢 %4$s" -#~ msgid "" -#~ "An amorphous mass of twisting black flesh\n" -#~ "that flies through the air swiftly." -#~ msgstr "" -#~ "一個不定型的黑色扭曲肉塊,在空中快速\n" -#~ "的飛行。" +#~ msgid "tiger style" +#~ msgstr "虎形拳" -#~ msgid "" -#~ "A twisting spot in the air, with some kind\n" -#~ "of morphing mass at its center." -#~ msgstr "" -#~ "空氣中的一個氣流扭曲點,有某種東西\n" -#~ "在其中心點。" +#~ msgid "crane style" +#~ msgstr "鶴形拳" -#~ msgid "Thing" -#~ msgstr "那東西" +#~ msgid "%1$s hand-peck %4$s" +#~ msgstr "%1$s 手啄 %4$s" -#~ msgid "" -#~ "An amorphous black creature which seems to\n" -#~ "sprout tentacles rapidly." -#~ msgstr "" -#~ "一種無定形的黑色生物,其伸出的觸手迅速\n" -#~ "的扭動著。" +#~ msgid "%1$s hand-pecks %4$s" +#~ msgstr "%1$s 手啄 %4$s" -#~ msgid "" -#~ "A huge, black worm, its flesh glistening\n" -#~ "with an acidic, blue slime. It has a gaping\n" -#~ "round mouth lined with dagger-like teeth." -#~ msgstr "" -#~ "一隻巨大的黑色蟲狀怪,血肉中閃爍著酸\n" -#~ "性藍色的黏液。其口器圍繞著一圈像匕首\n" -#~ "的牙齒。" +#~ msgid "%1$s swiftly jabs %4$s" +#~ msgstr "%1$s 跳刺 %4$s" -#~ msgid "" -#~ "A spider with a characteristic red\n" -#~ "hourglass on its black carapace. It is\n" -#~ "known for its highly toxic venom." -#~ msgstr "" -#~ "一隻蜘蛛,黑色的腹部有著紅色的\n" -#~ "沙漏狀斑記。其劇毒性相當有名。" +#~ msgid "%1$s strike %4$s with leopard fist" +#~ msgstr "%1$s 對 %4$s 使用豹拳" -#~ msgid "" -#~ "A large spider with a bulbous thorax. It\n" -#~ "creates a subterranean nest and lies in\n" -#~ "wait for prey to fall in and become trapped\n" -#~ "in its webs." -#~ msgstr "" -#~ "有著球狀胸腔的大蜘蛛。它會製作一個地下陷阱\n" -#~ "並潛伏著等待獵物掉下並困在網中。" +#~ msgid "snake style" +#~ msgstr "蛇形拳" -#~ msgid "trap door spider" -#~ msgstr "活板門蛛" +#~ msgid "%1$s snakebite %4$s" +#~ msgstr "%1$s 蛇形刁手 %4$s" -#~ msgid "" -#~ "A small, almost cute-looking spider. It\n" -#~ "leaps so quickly that it almost appears to\n" -#~ "instantaneously move from one place to\n" -#~ "another." -#~ msgstr "" -#~ "一隻小型可愛外貌的蜘蛛。它跳躍的速\n" -#~ "度快到就像是從一個地方瞬間移動到另\n" -#~ "一個地方。" +#~ msgid "%1$s snakebites %4$s" +#~ msgstr "%1$s 蛇形刁手 %4$s" -#~ msgid "" -#~ "A wasp-like flying insect, smaller than most\n" -#~ "mutated wasps. It does not looke very\n" -#~ "threatening, but has a large ovipositor in\n" -#~ "place of a sting." -#~ msgstr "" -#~ "一隻類似黃蜂的飛行昆蟲,比大部分的變種\n" -#~ "黃蜂小。看起來不是很有威脅性,但是其蜂\n" -#~ "刺中有產卵器。" +#~ msgid "%1$s writhe free from %4$s" +#~ msgstr "%1$s 空翻過 %4$s" -#~ msgid "" -#~ "A fat, white grub the size of your foot, with\n" -#~ "a set of mandibles that look more suited for\n" -#~ "digging than fighting." -#~ msgstr "" -#~ "一隻肥胖的白色蟲子,大約你腳的大小,\n" -#~ "有著一對適合挖掘而非戰鬥的口器。" +#~ msgid "%1$s writhes free from %4$s" +#~ msgstr "%1$s 空翻過 %4$s" -#~ msgid "" -#~ "A gigantic slug, the size of a small car.\n" -#~ "It moves slowly, dribbling acidic goo from\n" -#~ "its fang-lined mouth." -#~ msgstr "" -#~ "一條巨大化的毛蟲,尺寸就像小汽車一樣。\n" -#~ "它移動緩慢,口器中盤帶著酸性黏液。" +#~ msgid "%1$s use dragon strike on %4$s" +#~ msgstr "%1$s 對 %4$s 使用神龍破" -#~ msgid "" -#~ "A thick-skinned green frog. It eyes you\n" -#~ "much as you imagine it might eye an insect." -#~ msgstr "" -#~ "一隻綠色厚皮的青蛙。它把你當做\n" -#~ "蟲子,就像你把它當作蟲子一樣。" +#~ msgid "%1$s uses dragon strike on %4$s" +#~ msgstr "%1$s 對 %4$s 使用神龍破" -#~ msgid "" -#~ "A meter-long centipede, moving swiftly on\n" -#~ "dozens of thin legs, a pair of venomous\n" -#~ "pincers attached to its head." -#~ msgstr "" -#~ "一米長的蜈蚣,能利用數隻小腳迅速移動,\n" -#~ "一對毒鉗連接在它的頭部。" +#~ msgid "Put up the shelter" +#~ msgstr "架設帳篷" #~ msgid "" -#~ "A ferocious airborne predator, flying swiftly\n" -#~ "through the air, its mouth a cluster of fangs." +#~ "Your memory has been enhanced with small quantum storage drives. Any " +#~ "time you start to forget a skill, you have a chance at retaining all " +#~ "knowledge, at the cost of a small amount of poweron." #~ msgstr "" -#~ "兇猛的空降捕食者,能在空中快速飛行,\n" -#~ "嘴巴是一組銳利的獠牙。" +#~ "你的記憶能力藉由植入量子硬碟得到增強。當你只要開始技能衰減時,將有可能透過" +#~ "消耗些許能量來保留全部的知識。" #~ msgid "" -#~ "An enormous mosquito, fluttering erratically,\n" -#~ "its face dominated by a long, spear-tipped\n" -#~ "proboscis." +#~ "Inside your body is a fleet of tiny dormant robots. Once charged from " +#~ "your energy banks, they will flit about your body, repairing any damage." #~ msgstr "" -#~ "一隻飛舞的巨大蚊子,臉部是長型並帶有\n" -#~ "長矛狀的口器。" +#~ "你的身體有一組處於休眠中的奈米級機器人。當經由你的能量庫充電後,他們將會到" +#~ "達你身體的每個部分修復傷害。" #~ msgid "" -#~ "A group of several rats, their tails\n" -#~ "knotted together in a filthy mass. A wave\n" -#~ "of nausea washes over you in its presence." +#~ "Powerful heatsinks supermaterials are woven into your flesh. While " +#~ "powered, this system will prevent heat damage up to 2000 degrees " +#~ "fahrenheit. Note that this does not affect your internal temperature." #~ msgstr "" -#~ "數十隻老鼠組成的團體,尾巴被混亂的\n" -#~ "打結在一起。你看到的時候湧上一股噁\n" -#~ "心的感覺。" +#~ "你的皮膚埋入了強大的超導散熱片。當有能量時,這個系統能夠防止你受到熱傷害," +#~ "最高可到 2000華氏度。而且不會影響到你的體溫。" -#~ msgid "" -#~ "A large, mangey rat with red eyes. It\n" -#~ "scampers quickly across the ground, squeaking\n" -#~ "hungrily." -#~ msgstr "" -#~ "一著有著紅色眼睛的巨大癩皮老鼠。\n" -#~ "在地面上快速的嗅探,飢渴的發出吱\n" -#~ "吱聲。" +#~ msgid "A 40mm grenade with a concussive explosion." +#~ msgstr "有震撼爆炸的 40mm 榴彈。" #~ msgid "" -#~ "A large snake, turned pale yellow from its\n" -#~ "underground life." -#~ msgstr "因地底生活而變成黃色的巨大蛇類。" +#~ "A 40mm grenade with a small explosion and a high number of damaging " +#~ "fragments." +#~ msgstr "爆炸時會產生大量致命破片的 40mm 榴彈。" -#~ msgid "" -#~ "Two or three humans fused together somehow,\n" -#~ "slowly dragging their thick-hided, hideous\n" -#~ "body across the ground." -#~ msgstr "" -#~ "兩到三個人融合在一起的形體,\n" -#~ "緩慢的在地面拖行著他們的厚皮\n" -#~ "與猙獰的軀體。" +#~ msgid "MRE - beef" +#~ msgstr "軍用口糧 - 牛肉" -#~ msgid "crawler mutant" -#~ msgstr "變種爬行者" +#~ msgid "A small pocket knife, not great for combat, but better than nothing." +#~ msgstr "一把小摺疊刀, 不適合戰鬥, 但聊勝於無." -#~ msgid "one-eyed mutant" -#~ msgstr "變種獨眼人" +#~ msgid "vacuum-packed apple slices" +#~ msgstr "真空包裝的蘋果片" #~ msgid "" -#~ "A relatively humanoid mutant with purple\n" -#~ "hair and a grapefruit-sized bloodshot eye." -#~ msgstr "" -#~ "一個突變種人形,有著紫色的毛髮\n" -#~ "與有如柚子大佈滿血絲的獨眼。" +#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " +#~ "sure footing." +#~ msgstr "你能跑的比一般人快,得到 15%% 的速度加成。" #~ msgid "" -#~ "An enormous fungal spire, towering 30 feet\n" -#~ "above the ground. It pulsates slowly,\n" -#~ "continuously growing new defenses." -#~ msgstr "" -#~ "在地面之上的一個高達30英尺的\n" -#~ "巨大真菌尖塔,它慢慢的搏動,\n" -#~ "並不斷增長。" +#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." +#~ msgstr "想打倒你要付出更多代價!你獲得 20%% 的HP加成。" -#~ msgid "" -#~ "A veritable wall of fungus, grown as a\n" -#~ "natural defense by the fungal spire. It\n" -#~ "looks very tough, and spews spores at an\n" -#~ "alarming rate." -#~ msgstr "" -#~ "由真菌尖頂增長而成的自然防壁。\n" -#~ "看起來非常堅固,並且以驚人速度\n" -#~ "噴出孢子。" +#~ msgid "Cross-Dresser" +#~ msgstr "變裝癖" #~ msgid "" -#~ "A fungal tendril just a couple feet tall. Its\n" -#~ "exterior is hardened into a leathery bark and\n" -#~ "covered in thorns; it also moves faster than\n" -#~ "full-grown fungaloids." -#~ msgstr "" -#~ "僅有幾英尺高的真菌卷鬚。其表皮為硬化\n" -#~ "的荊棘樹皮,移動速度比完全成熟的真菌\n" -#~ "快。" +#~ "Covering your body in clothing typical for the opposite gender makes you " +#~ "feel better." +#~ msgstr "穿上異性的服裝能夠讓你感覺良好。" -#~ msgid "" -#~ "A pale white fungus, one meaty gray stalk\n" -#~ "supporting a bloom at the top. A few\n" -#~ "tendrils extend from the base, allowing\n" -#~ "mobility and a weak attack." -#~ msgstr "" -#~ "一株白色的真菌,肉質的灰色秸稈上面並\n" -#~ "綻放著菌傘。根部長了一些卷鬚,讓它能\n" -#~ "夠活動並且進行微弱的攻擊。" +#~ msgid "Android" +#~ msgstr "生化人" #~ msgid "" -#~ "A spindly body, standing at least 15 feet\n" -#~ "tall. It looks vaguely human, but its face is\n" -#~ "grotesquely stretched out, and its limbs are\n" -#~ "distorted to the point of being tentacles." +#~ "At some point in the past you had a bionic upgrade installed in your " +#~ "body. You start the game with a power system, and one random bionic " +#~ "enhancement." #~ msgstr "" -#~ "有著細長的身體,至少約15英尺高\n" -#~ "。它看起來像人,但其四肢卻錯位\n" -#~ "扭曲的伸出,像是觸鬚一樣。" +#~ "基於某些理由,你已經有生化插件安裝在你的身體之中。你開始遊戲時便擁有能量儲" +#~ "存系統,以及隨機的生化插件。" -#~ msgid "Amigara horror" -#~ msgstr "阿彌殼怪" +#~ msgid "Shaolin Adept" +#~ msgstr "少林功夫好耶" #~ msgid "" -#~ "A dog's body with a mass of ropy, black\n" -#~ "tentacles extending from its head." -#~ msgstr "" -#~ "有著黏稠身體的狗,黑色\n" -#~ "的觸手從頭部延伸出來。" +#~ "You have studied the arts of the Shaolin monks. You start with one of the " +#~ "five animal fighting styles: Tiger, Crane, Leopard, Snake, or Dragon." +#~ msgstr "你跟少林寺方丈學過少林功夫。你一開始便能從五形拳中任選一個招式。" -#~ msgid "" -#~ "A yellow spider the size of a dog. It lives\n" -#~ "in webs, waiting for prey to become\n" -#~ "entangled before pouncing and biting." -#~ msgstr "" -#~ "一種體型跟狗一樣的黃色蜘蛛.\n" -#~ "生活在網中,等待獵物被糾纏住後\n" -#~ "撲上前猛咬." +#~ msgid "Venom Mob Protege" +#~ msgstr "五毒教徒" #~ msgid "" -#~ "A large green fish, it's mouth lined with\n" -#~ "three rows of razor-sharp teeth." -#~ msgstr "" -#~ "一種綠色且巨大的魚\n" -#~ "嘴裡長了三排鋒利的牙齒" +#~ "You are a pupil of the Venom Clan. You start with one of the five deadly " +#~ "venoms: Centipede, Viper, Scorpion, Lizard, or Toad." +#~ msgstr "你是五毒教的門徒。你一開始便能從五毒中任選一個招式。" #~ msgid "" -#~ "Your precious generator, noisily humming\n" -#~ "away. Defend it at all costs!" -#~ msgstr "" -#~ "你最珍惜的發電機,發出嗡嗡的噪音。\n" -#~ "不惜代價保護它!" +#~ "You simply can not carry as much as people with a similar strength could. " +#~ "Your maximum weight carried is reduced by 35%%." +#~ msgstr "你就是沒法像一般人一樣搬運這麼多東西。你的最大負重量減少 35%% 。" #~ msgid "" -#~ "A snake-shaped robot that tunnels through the\n" -#~ "ground slowly. When it emerges from the\n" -#~ "ground it can attack with its large, spike-\n" -#~ "covered head." -#~ msgstr "" -#~ "一種能鑽地的蛇形機器人。當他衝出地表時能夠\n" -#~ "使用其頭上的巨大尖刺進行攻擊。" +#~ "Your head can't take much abuse. Its maximum HP is 20%% lower than usual." +#~ msgstr "你的頭部無法受到太大的傷害。頭部比一般人少了 20%% 的HP。" #~ msgid "" -#~ "This fearsome robot is essentially an\n" -#~ "autonomous tank. It moves surprisingly fast\n" -#~ "on its treads, and is armed with a variety of\n" -#~ "deadly weapons." +#~ "Your whole body can't take much abuse. Its maximum HP is 75%% points " +#~ "lower than usual. Stacks with Glass Jaw. Not for casuals." #~ msgstr "" -#~ "這個可怕的機器人是有自主意識的坦克。它能\n" -#~ "利用其履帶出奇快速的移動,並且裝配了大量\n" -#~ "的致命武器。" - -#~ msgid "tankbot" -#~ msgstr "坦克機器人" +#~ "你的全身無法遭受太多傷害。全身降低了 75%% 的HP。搭配玻璃下巴簡直極品爆弱。" #~ msgid "" -#~ "A 10-foot-tall, heavily-armored robot that\n" -#~ "walks on a pair of legs with the knees\n" -#~ "facing backwards. It's armed with a\n" -#~ "nasty-looking machine gun." +#~ "Your bones are very light. This enables you to run and attack 10%% " +#~ "faster, but also reduces your carrying weight by 20%% and makes bashing " +#~ "attacks hurt a little more." #~ msgstr "" -#~ "10呎高的重裝甲雙足機器人,而膝蓋部分\n" -#~ "是像鳥一樣往後折的。裝配了看起來很威\n" -#~ "猛的機關槍。" - -#~ msgid "molebot" -#~ msgstr "地鼠機器人" - -#~ msgid "beef jerky" -#~ msgstr "醃肉" +#~ "你的骨頭很輕。讓你能夠奔跑及攻擊速度得到 10%% 的加成,但是會讓你減少 20%% " +#~ "的負重,另外鈍擊也會讓你傷害加大。" #~ msgid "" -#~ "A high-powered stun gun. Use this item to attempt to electrocute an " -#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " -#~ "shock can actually jump through the air, it is difficult to miss." -#~ msgstr "" -#~ "威力強大的電擊槍,用它可電暈或癱瘓敵人。電流還能通過空氣傳導,所以很難失" -#~ "手。" +#~ "Your legs are extremely limber and fast-moving. You run 30%% faster on " +#~ "flat surfaces." +#~ msgstr "你的腿很有彈性並且可以動得很快。你在平地的跑步速度提升 30%% 。" #~ msgid "" -#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " -#~ "mechanics crafting recipes." +#~ "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is " +#~ "very light as a result, enabling you to run and attack 20%% faster, but " +#~ "also frail; you can carry 40%% less, and bashing attacks injure you more." #~ msgstr "" -#~ "一個可調整的扳手. 非常適合當武器用,而且可以應用在許多機械製造的配方上." +#~ "你有禽骨綜合症 - 你的骨頭幾乎是空心的。由於你的身體很輕,讓你能夠提昇 20%" +#~ "% 的攻擊速度,同時也有缺點;你的負重能力降低到 40%%,並且鈍擊攻擊讓你受到" +#~ "的傷害更大。" -#~ msgid "" -#~ "A knot of roots that looks bizarrely like a\n" -#~ "heart. It beats slowly with sap, powering\n" -#~ "the root walls around it." -#~ msgstr "" -#~ "一個看起來很詭異的心臟樣貌的東西。\n" -#~ "它緩慢的搏動,並供給能量給予圍繞在\n" -#~ "其上的植根牆。" +#~ msgid "Your muscles are generally slow to move. You run 10%% slower." +#~ msgstr "你的肌肉變得移動緩慢。你奔跑速度下降 10%%。" -#~ msgid "The root walls begin to crumble around you." -#~ msgstr "植根牆開始在你周圍崩毀。" +#~ msgid "Your muscles are quite slow to move. You run 20%% slower." +#~ msgstr "你的肌肉運動速度相當緩慢。奔跑速度下降 20%%。" -#~ msgid "vinebeast" -#~ msgstr "藤蔓獸" +#~ msgid "Your muscles are very slow to move. You run 30%% slower." +#~ msgstr "你的肌肉運動速度非常緩慢。奔跑速度下降 30%%。" #~ msgid "" -#~ "This appears to be a mass of vines, moving\n" -#~ "with surprising speed. It is so thick and\n" -#~ "tangled that you cannot see what lies in\n" -#~ "the middle." +#~ "You feel very sluggish when not in direct sunlight. You suffer a 5%% drop " +#~ "in speed when in shade, and a 10%% drop in speed when in the dark." #~ msgstr "" -#~ "以驚人的速度移動的籐蔓,因為籐蔓\n" -#~ "厚重而糾結,讓你看不出中心有什麼\n" -#~ "。" +#~ "你若是沒有受到陽光照射就會覺得異常虛弱。你若是在陰影下會降低 5%% 的速度, " +#~ "在黑暗中降低 10%% 的速度。" #~ msgid "" -#~ "A thick stalk topped with a purple\n" -#~ "flower. The flower's petals are closed,\n" -#~ "and pulsate ominously." +#~ "Your muscle response is dependent on ambient temperatures. You lose 1%% " +#~ "of your speed for every 5 degrees below 65 F." #~ msgstr "" -#~ "厚實的莖上有紫色的花。\n" -#~ "花瓣是閉合的,並且有令人不安的搏動" +#~ "環境溫度的高低反應在你的肌肉上。在 65 F (19C) 溫度以下,每低於 5 度就會降" +#~ "低你的速度 1%% 。" #~ msgid "" -#~ "A thorny vine. It twists wildly as\n" -#~ "it grows, spreading rapidly." +#~ "Your muscle response is highly dependent on ambient temperatures. You " +#~ "lose 1%% of your speed for every 3 degrees below 65 F." #~ msgstr "" -#~ "厚實的植物莖。因為生長的速度快\n" -#~ "而瘋狂的扭曲纏繞。" - -#~ msgid "creeping vine" -#~ msgstr "變種藤蔓莖" +#~ "環境溫度的高低大量反應在你的肌肉上。在 65 F (19C) 溫度以下,每低於 3 度就" +#~ "會降低你的速度 1%% 。" #~ msgid "" -#~ "A thick stalk, rooted to the ground.\n" -#~ "It rapidly sprouts thorny vines in all\n" -#~ "directions." +#~ "You are cold-blooded and rely on heat to keep moving. Your lose 1%% of " +#~ "your speed for every 2 degrees below 65 F." #~ msgstr "" -#~ "厚實的植物莖紮根到地面。\n" -#~ "有棘刺的藤蔓往四面八方迅速生長。" +#~ "你的血液是冷的,需要熱度才能讓你移動。在 65 F (19C) 溫度以下,每低於 2 度" +#~ "就會降低你的速度 1%% 。" -#~ msgid "" -#~ "Hundreds of bee stings have given this zombie\n" -#~ "a thick covering of scar tissue, it will be\n" -#~ "much harder to damage than an ordinary zombie\n" -#~ "but moves a bit slower" -#~ msgstr "" -#~ "數以百記的蜂刺讓這殭屍出現厚厚的疤痕角質,\n" -#~ "儘管他移動速度較慢,但要打倒他會比打倒一般\n" -#~ "殭屍更困難。" +#~ msgid "Kyle" +#~ msgstr "凱爾" -#~ msgid "" -#~ "This zombie seems to have a cloud of black\n" -#~ "dust surrounding it. It also seems to have\n" -#~ "a better grasp of movement than most..." -#~ msgstr "" -#~ "這殭屍的周圍似乎圍繞著黑色的煙塵,\n" -#~ "而它的運動能力似乎也比一般的殭屍強\n" -#~ "上非常多..." +#~ msgid "Abbot" +#~ msgstr "亞培" -#~ msgid "" -#~ "A zombie wearing a tattered lab coat and\n" -#~ "some sort of utility belt. It looks weaker\n" -#~ "than most zombies, but more resourceful too." -#~ msgstr "" -#~ "這殭屍穿著破爛的白色大衣和某種工具腰帶。\n" -#~ "它看起來比大多數殭屍弱,但是更聰明。" +#~ msgid "Abington" +#~ msgstr "亞賓頓" -#~ msgid "" -#~ "This zombie was clearly a soldier before.\n" -#~ "Its tattered armor gives it strong defense,\n" -#~ "and it is much more physically fit than\n" -#~ "most zombies." -#~ msgstr "" -#~ "這殭屍很明顯生前是個軍人。破爛的護甲\n" -#~ "讓他提昇了許多防護能力,而體格也比大\n" -#~ "多數殭屍更強壯。" +#~ msgid "Acton" +#~ msgstr "阿克頓" -#~ msgid "" -#~ "A zombie with jet black skin and glowing red\n" -#~ "eyes. As you look at it, you're gripped by a\n" -#~ "feeling of dread and terror." -#~ msgstr "" -#~ "這殭屍有漆黑的皮膚和發出紅光的眼睛。\n" -#~ "當你看著它時,恐懼和害怕的感覺浮上你\n" -#~ "的心頭。" +#~ msgid "Acushnet" +#~ msgstr "Acushnet" -#~ msgid "" -#~ "A skeleton picked clean of all but a few\n" -#~ "rotten scraps of flesh, somehow still in\n" -#~ "motion." -#~ msgstr "" -#~ "一具血肉被挑空後的骷髏,還黏著一\n" -#~ "些腐爛的肉在上面,不知道為什麼還\n" -#~ "能動。" +#~ msgid "Acworth" +#~ msgstr "阿克沃斯" -#~ msgid "" -#~ "A bloated zombie that is coated with slimy\n" -#~ "gray mold. Its flesh is translucent and gray,\n" -#~ "and it dribbles a gray sludge from its mouth." -#~ msgstr "" -#~ "一個肥胖的殭屍,皮膚佈滿粘糊的灰黴。\n" -#~ "血肉呈現灰色半透明的,嘴掛著一團灰色\n" -#~ "的污泥。" +#~ msgid "Agawam" +#~ msgstr "阿格瓦姆" -#~ msgid "" -#~ "A bloated zombie sagging with fat. It emits a\n" -#~ "horrible odor, and putrid, pink sludge drips\n" -#~ "from its mouth." -#~ msgstr "" -#~ "脂肪臃腫下垂的肥胖殭屍。散發出可怕的\n" -#~ "腐爛氣味,粉紅色的粘液從它的嘴滴下。" +#~ msgid "Albany" +#~ msgstr "奧爾巴尼" -#~ msgid "" -#~ "A diseased zombie. Fungus sprouts from its\n" -#~ "mouth and eyes, and thick gray mold grows all\n" -#~ "over its translucent flesh." -#~ msgstr "" -#~ "一個帶菌的殭屍。真菌佈滿了他的嘴和眼,\n" -#~ "並且在其半透明的軀體上長了厚厚的灰黴。" +#~ msgid "Albion" +#~ msgstr "阿爾比恩" -#~ msgid "" -#~ "A zombie that has somehow grown to the size of\n" -#~ "6 men, with arms as wide as a trash can." -#~ msgstr "" -#~ "一個不知為何能長到6人高的巨大殭屍,\n" -#~ "手臂跟大垃圾桶一樣粗。" +#~ msgid "Alburg" +#~ msgstr "阿爾堡" -#~ msgid "" -#~ "A hideous beast of a zombie, bulging with\n" -#~ "distended muscles on both arms and legs." -#~ msgstr "" -#~ "一個可怕的野獸殭屍,雙臂與雙腿都\n" -#~ "有著膨脹的肌肉。" +#~ msgid "Alexandria" +#~ msgstr "亞歷安德拉" -#~ msgid "" -#~ "A sluglike creature, eight feet long and the width of a refrigerator, " -#~ "it's black body glistens as it oozes it's way along the ground. Eye " -#~ "stalks occassionally push their way out of the oily mass and look around." -#~ msgstr "" -#~ "像是鼻涕蟲的生物,8呎長而寬度就像冰箱一樣,黑色的軀體會產生黏液並在地上留" -#~ "下拖痕。眼睛則會隨著前進時伸縮並環顧四周。" +#~ msgid "Alford" +#~ msgstr "奧爾福德" -#~ msgid "" -#~ "This is an advertisement for Robert's Universal Robotics brand law " -#~ "enforcement robots. It shows a picture of tripod robot incinerating a mob " -#~ "of looters and stepping over charred and smoking corpses. The caption " -#~ "reads: \"Built to Protect. Programmed to Serve.\"" -#~ msgstr "" -#~ "這是全能機器牌機械執法者的廣告。上面有著三腳機器人燃燒暴徒並走過其冒煙屍體" -#~ "的圖案。標題寫著: \"建造保護。編程服務。\"" +#~ msgid "Alfred" +#~ msgstr "阿爾弗雷德" -#~ msgid "" -#~ "An enormously heavy block of oddly shaped steel with a chisel-like " -#~ "projection set into the corner. Used in most metalworking fabrication " -#~ "recipes." -#~ msgstr "" -#~ "形狀奇特如鋼鑿子般的極沉重鋼鐵。大部分用在進行鑄鐵相關的物品製作時。" +#~ msgid "Allagash" +#~ msgstr "阿拉加什" -#~ msgid "" -#~ "A cordless drill with a selection of drill bits. The charger base " -#~ "contains a battery draining attachment so the drill can be charged in " -#~ "lieu of mains power." -#~ msgstr "" -#~ "一個充電式的電鑽包含許多種類的鑽頭。充電的元件有著能從一般電池充電的機能。" +#~ msgid "Allenstown" +#~ msgstr "亞倫鎮" -#~ msgid "" -#~ "Strawberries left to ferment with a few other choice ingredients offer up " -#~ "a surprisingly platable mixture; you barely even have to force yourself " -#~ "to drink it after the first few gulps." -#~ msgstr "" -#~ "發酵過的草莓混合許多種配料合成的驚奇口感雞尾酒;你根本不用強迫自己就能自然" -#~ "的喝光光。" +#~ msgid "Alna" +#~ msgstr "歐那" -#~ msgid "" -#~ "A horrifying child zombie, you feel\n" -#~ "a twinge of remorse looking at it." -#~ msgstr "" -#~ "一個可怕的殭屍小孩子,\n" -#~ "看著它你會感到深深的自責。" +#~ msgid "Alstead" +#~ msgstr "歐斯典" -#~ msgid "" -#~ "Cannibalistic Humanoid Underground Dweller.\n" -#~ "A human, turned pale and mad from years in\n" -#~ "the subways." -#~ msgstr "" -#~ "Cannibalistic Humanoid Underground Dweller (寄居地下的食人者)。\n" -#~ "一個住在地下道多年而蒼白發瘋的人。" +#~ msgid "Alton" +#~ msgstr "奧爾頓" -#~ msgid "C.H.U.D." -#~ msgstr "C.H.U.D." +#~ msgid "Amesbury" +#~ msgstr "艾姆斯伯里" -#~ msgid "sewer fish" -#~ msgstr "下水道的魚" +#~ msgid "Amherst" +#~ msgstr "阿默斯特" -#~ msgid "black widow" -#~ msgstr "黑寡婦" +#~ msgid "Amity" +#~ msgstr "阿默帝" -#~ msgid "" -#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "抽真空的塑膠蔬菜包,使用它來打開享用吧。" +#~ msgid "Andover" +#~ msgstr "安多弗" -#~ msgid "It looks girly.\n" -#~ msgstr "它看起來很娘。\n" +#~ msgid "Anson" +#~ msgstr "安生" -#~ msgid "It looks manly.\n" -#~ msgstr "它看起來很 man。\n" +#~ msgid "Ansonia" +#~ msgstr "安索尼亞" -#~ msgid "%1$s assumes a %2$s stance." -#~ msgstr "%1$s 站在 %2$s 的立場。" +#~ msgid "Antrim" +#~ msgstr "安特里姆" -#~ msgid "Stepped on a lane mine." -#~ msgstr "踩到了地雷" +#~ msgid "Appleton" +#~ msgstr "阿普爾頓" -#~ msgid "crak" -#~ msgstr "喀" +#~ msgid "Aquinnah" +#~ msgstr "阿基那" -#~ msgid "plunk." -#~ msgstr "啪。" +#~ msgid "Argyle" +#~ msgstr "亞皆" -#~ msgid "crunch." -#~ msgstr "咔啦。" +#~ msgid "Arlington" +#~ msgstr "阿靈頓" -#~ msgid "" -#~ "The item you just picked up is ammunition, used with a gun. It has many\n" -#~ "special attributes. The damage value is the maximum done on a standard " -#~ "hit;\n" -#~ "a critical hit or headshot will do much more damage. Some monsters or " -#~ "NPCs\n" -#~ "will wear armor which reduces the damage from gunfire; a high Armor-" -#~ "pierce\n" -#~ "value will reduce this effect. The Range is the maximum range the ammo " -#~ "can\n" -#~ "achieve, and the dispersion affects its chance to hit." -#~ msgstr "" -#~ "你剛撿取的物品是彈藥,使用於槍械上。有許多不同種類的屬性。\n" -#~ "傷害屬性指的是正常命中時的數值;爆擊命中或是爆頭將能造成更\n" -#~ "大的傷害。某些怪物或是NPC會穿戴護甲來降低遭受的傷害;高穿\n" -#~ "甲屬性數值能夠降低護甲的影響。距離屬性指的是彈藥的有效距離\n" -#~ ",而分散屬性影響了命中率。(xap)" +#~ msgid "Arrowsic" +#~ msgstr "阿羅錫克" -#~ msgid "" -#~ "The item you just picked up is a firearm! Guns are very powerful weapons " -#~ "but\n" -#~ "they require ammunition. Firearms have many special attributes. Most\n" -#~ "modify the damage done by their ammunition. They also have dispersion, " -#~ "which\n" -#~ "affects their chance to hit. Some guns are semi-automatic, while others " -#~ "can\n" -#~ "fire a burst. Some firearms (mainly bows and other muscle-powered " -#~ "weapons)\n" -#~ "have a range, which is added on top of the ammo's range when firing." -#~ msgstr "" -#~ "你剛撿取的物品是槍械!槍是非常強力的武器但是需要彈藥。槍械有許多特別\n" -#~ "的屬性。大部分都是由裝填的彈藥來決定傷害能力。同時也有分散的屬性,來\n" -#~ "決定武器的命中率。某些槍有半自動射擊模式,能夠進行連發射擊。某些槍械\n" -#~ "(主要是弓箭以及要出力的武器)有距離限制,決定了彈藥射擊時的有效距離。\n" -#~ "(xap)" +#~ msgid "Arundel" +#~ msgstr "阿倫德爾" -#~ msgid "" -#~ "The item you just picked up is a comestible! To eat a comestible, press " -#~ "'E'.\n" -#~ "Comestibles are items you can use up, like food, drink, pills, etc. " -#~ "Most\n" -#~ "food expires eventually, so be careful. Some comestibles, especially " -#~ "drugs,\n" -#~ "can cause subtle, long-term effects." -#~ msgstr "" -#~ "你剛撿取的物品是可食用的!要把食物吃下,按下'E'。可食用的\n" -#~ "物品諸如食物,飲料,藥物,等等。大部分的食物最後都會腐敗\n" -#~ ",所以要注意。某些可食用物品,特別是藥物,會造成一些微妙\n" -#~ "或是長期的影響。(xap)" +#~ msgid "Ashburnham" +#~ msgstr "阿什波漢" -#~ msgid "" -#~ "The item you just picked up is a good weapon! To wield a weapon, press " -#~ "w,\n" -#~ "then pick what to wield. To wield nothing, either drop your weapon with " -#~ "d,\n" -#~ "or press 'w-' to put it away. A zombie has spawned nearby. To attack " -#~ "it,\n" -#~ "simply move into it." -#~ msgstr "" -#~ "你剛撿取的物品是很好的武器!要手持武器,按下'w',並選取要手持的物品\n" -#~ "。要變為徒手狀態,可以用'd'來丟棄武器,或是'w-'來收起。有殭屍在附近\n" -#~ "要攻擊的話只要朝著其方向移動即可。\n" -#~ "(xap)" +#~ msgid "Ashby" +#~ msgstr "阿什比" -#~ msgid "" -#~ "The item you just picked up is a type of clothing! To wear clothing, " -#~ "press\n" -#~ "W and then select an item. To take off clothing, press T, or simply take " -#~ "it\n" -#~ "off and drop it in one action by pressing d." -#~ msgstr "" -#~ "你剛撿取的物品是一種衣物!要穿戴衣物,按下'W'並選擇物品。要脫下\n" -#~ "衣物,按下'T',或是簡單的按下'd'來把該物品脫下並丟棄在地上。\n" -#~ "(xap)" +#~ msgid "Ashfield" +#~ msgstr "艾士菲" -#~ msgid "" -#~ "The item you just picked up went into your inventory, the shared storage\n" -#~ "space of all the clothing you're wearing. To view your inventory, press " -#~ "'i'.\n" -#~ "You can then press the letter of any item to get more information about " -#~ "it." -#~ msgstr "" -#~ "你剛撿取的物品被放入你的物品欄了,你身上所有的衣物會結算為一個總\n" -#~ "儲物空間。要查看你的物品欄,按下'i'。你能夠按下物品所代表的字母來\n" -#~ "查看相關的資訊。\n" -#~ "(xap)" +#~ msgid "Ashford" +#~ msgstr "阿什福德" -#~ msgid "" -#~ "The item you just picked up has been wielded as a weapon automatically. " -#~ "This\n" -#~ "happened because it is a good melee weapon, and you were empty-handed. " -#~ "This\n" -#~ "usually is faster than than picking it up, then wielding it." -#~ msgstr "" -#~ "你剛撿取的物品被自動手持作為武器了。這是因為該物品是好的近戰武器,而你\n" -#~ "是空手的。這樣動作會比撿取東西再從物品欄進行手持動作要快的多。\n" -#~ "(xap)" +#~ msgid "Ashland" +#~ msgstr "亞甚蘭" -#~ msgid "" -#~ "The item you just picked up has been wielded as a weapon automatically. " -#~ "This\n" -#~ "happened because you do not have space in your inventory to stash the " -#~ "item,\n" -#~ "and so you must carry it in your hand. To expand your inventory space, " -#~ "try\n" -#~ "wearing clothing with a lot of storage space, like a backpack, or cargo " -#~ "pants." -#~ msgstr "" -#~ "你剛撿取的物品被自動手持作為武器了。會發生這種狀況通常代表你的物品\n" -#~ "欄沒有足夠的儲物空間能夠收藏該物品,所以你必須用雙手拿著。要拓展儲\n" -#~ "物空間,試著穿上有許多儲物空間的衣物,類似背包,或是工作褲。\n" -#~ "(xap)" +#~ msgid "Athens" +#~ msgstr "雅典" -#~ msgid "" -#~ "You don't have space in your inventory to store the item you just tried " -#~ "to\n" -#~ "pick up. You need to wear something with storage space, like a backpace " -#~ "or\n" -#~ "cargo pants, to gain more storage space." -#~ msgstr "" -#~ "你的物品欄沒有足夠的儲物空間來儲存你要撿取的物品。你需要穿戴上\n" -#~ "有提供儲物空間的東西才能增加空間,像是背包或是工作褲。\n" -#~ "(xap)" +#~ msgid "Athol" +#~ msgstr "阿瑟爾" -#~ msgid "" -#~ "The Examine command is useful for grabbing items off window frames, " -#~ "around\n" -#~ "corners, etc. It's also used for interacting with a few terrain types.\n" -#~ "Interactive terrain is usually designated with a '6' symbol." -#~ msgstr "" -#~ "檢視指令在撿取於任何地形的物品時非常有用。同時也能夠與許多地形狀況\n" -#~ "進行互動。能夠互動的地形通常標示為 '6' 的符號。\n" -#~ "(xap)" +#~ msgid "Atkinson" +#~ msgstr "阿特金森" -#~ msgid "" -#~ "You can close an opened door by pressing 'c' and then a movement key. " -#~ "Closing\n" -#~ "doors behind you can often slow down throngs of monsters greatly." -#~ msgstr "" -#~ "你能夠藉由按下'c'並選方向,來關閉開啟的門。把你身後的門關起來能夠大幅\n" -#~ "地拖慢怪物的進擊速度。\n" -#~ "(xap)" +#~ msgid "Attleboro" +#~ msgstr "阿特爾伯勒" -#~ msgid "" -#~ "Most monsters will have to smash their way through a closed door. If a " -#~ "door\n" -#~ "is locked or stuck, you can smash it by pressing 's' and then a movement " -#~ "key." -#~ msgstr "" -#~ "大部分的怪物都必須要破壞關閉的門才能通過。若是門被鎖住或是卡住,\n" -#~ "你能夠利用's'選擇方向來砸爛該門。\n" -#~ "(xap)" +#~ msgid "Auburn" +#~ msgstr "奧本" -#~ msgid "" -#~ "You can smash through windows by pressing 's' and then a movement key. " -#~ "A\n" -#~ "smashed window takes a long time to climb through, and it's possible to " -#~ "hurt\n" -#~ "yourself on the broken glass, but it's a good last-ditch escape route. " -#~ "You\n" -#~ "can smash through other things, too; use the ';' command and look for " -#~ "things\n" -#~ "that are \"Smashable.\"" -#~ msgstr "" -#~ "你能夠利用's'加上方向鍵來砸壞窗戶來通過障礙。一個被砸壞的窗戶將會\n" -#~ "需要較長的時間才能爬過去,並且還有可能讓你被碎片刺傷,但這總是一\n" -#~ "個良好的脫逃方法。你也能夠砸爛其他東西;使用';'的指令並查看哪些東\n" -#~ "西是'可砸毀'的。\n" -#~ "(xap)" +#~ msgid "Augusta" +#~ msgstr "奧古斯塔" -#~ msgid "" -#~ "Welcome to the Cataclysm tutorial! As you play, pop-ups like this one " -#~ "will\n" -#~ "appear to guide you through the basic game actions. Pressing spacebar " -#~ "will\n" -#~ "close the pop-up." -#~ msgstr "" -#~ "歡迎來到大災變的教學模式!當你遊玩的時候,類似這個彈出訊息\n" -#~ "將會指導你進行基本的遊戲操作。按下 空白鍵 將會關閉這個彈出\n" -#~ "訊息。(xap)" +#~ msgid "Aurora" +#~ msgstr "奧羅拉" -#~ msgid "" -#~ "The '@' character in the center of the screen represents you. To move, " -#~ "you\n" -#~ "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have " -#~ "your\n" -#~ "character wait in place, press '.'" -#~ msgstr "" -#~ "在畫面中央的'@'符號代表玩家你。要移動,你能夠使用九宮數字鍵、hjklyubn\n" -#~ "、或是方向鍵。要讓你的角色在原地等待,按下'.'\n" -#~ "(xap)" +#~ msgid "Avon" +#~ msgstr "雅文" -#~ msgid "" -#~ "To see what the symbols around you mean, press ';'. You'll be able to " -#~ "scroll\n" -#~ "around and get information on the terrain, monsters, and items in the " -#~ "world\n" -#~ "around you." -#~ msgstr "" -#~ "要了解各符號代表的意義,按下';'。你將能夠四處捲動,並了解地形地物的\n" -#~ "各種資訊,包括各種在你周圍的怪物與物品。\n" -#~ "(xap)" +#~ msgid "Ayer" +#~ msgstr "艾爾" -#~ msgid "" -#~ "The nearby { is a display rack, and the blue background indicates that " -#~ "there\n" -#~ "are items there. If you examine the square by pressing 'e', you can pick " -#~ "up\n" -#~ "items without moving to the square." -#~ msgstr "" -#~ "附近的 { 符號為展示架,而藍色背景指的是有物品在這。若是你按下'e'來\n" -#~ "檢視該格子,你就能夠在不移動到該格子上的情況下撿取物品。\n" -#~ "(xap)" +#~ msgid "Baileyville" +#~ msgstr "貝利村" -#~ msgid "" -#~ "That brown '+' next to you is a closed door. To open it, either simply " -#~ "walk\n" -#~ "into it, or press 'o' and then a movement key." -#~ msgstr "" -#~ "你身旁的棕色 '+' 符號代表一扇闔上的門\n" -#~ "直接走過去或是按下字母 'o' 配合方向鍵來開啟。" +#~ msgid "Bakersfield" +#~ msgstr "貝克斯菲爾德" -#~ msgid "%s %s" -#~ msgstr "%s %s" +#~ msgid "Baldwin" +#~ msgstr "鮑德溫" -#~ msgid "" -#~ "A wispy spore, about the size of a fist,\n" -#~ "wafting on the breeze." -#~ msgstr "" -#~ "約拳頭大小的孢子束,\n" -#~ "隨著風飄動。" +#~ msgid "Baltimore" +#~ msgstr "巴爾的摩" -#~ msgid "" -#~ "A black blob of viscous goo that oozes\n" -#~ "across the ground like a mass of living\n" -#~ "oil." -#~ msgstr "" -#~ "一個黑色的黏液球體,\n" -#~ "像是個活體生物,橫行\n" -#~ "在路上。" +#~ msgid "Bancroft" +#~ msgstr "班克羅夫特" -#~ msgid "%1$s swings %2$s %3$s wide at %4$s" -#~ msgstr "%1$s 大力揮動 %2$s %3$s 朝著 %4$s" +#~ msgid "Bangor" +#~ msgstr "班戈" -#~ msgid "%1$s swing %2$s %3$s wide at %4$s" -#~ msgstr "%1$s 大力揮動 %2$s %3$s 朝著 %4$s" +#~ msgid "Bar Harbor" +#~ msgstr "巴爾港" -#~ msgid "You trigger a landmine!" -#~ msgstr "你觸發了地雷!" +#~ msgid "Baring Plantation" +#~ msgstr "巴靈" -#~ msgid "The %s sinks its ovipositor into you!" -#~ msgstr "%s 在你身上產卵了!" +#~ msgid "Barkhamsted" +#~ msgstr "巴克漢士德" -#~ msgid "%1$s use %2$s %3$s to toss %4$s" -#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" +#~ msgid "Barnard" +#~ msgstr "巴納德" -#~ msgid "%1$s uses %2$s %3$s to toss %4$s" -#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" +#~ msgid "Barnet" +#~ msgstr "巴尼特" -#~ msgid "%1$s wrap %2$s %3$s around %4$s" -#~ msgstr "%1$s 把 %2$s %3$s 包在 %4$s 之中" +#~ msgid "Barnstable" +#~ msgstr "巴恩斯特布爾" -#~ msgid "%1$s wraps %2$s %3$s around %4$s" -#~ msgstr "%1$s 把 %2$s %3$s 包在 %4$s 之中" +#~ msgid "Barnstead" +#~ msgstr "巴恩斯德" -#~ msgid "%1$s pierces %4$s" -#~ msgstr "%1$s 刺中 %4$s" +#~ msgid "Barre" +#~ msgstr "巴雷" -#~ msgid "%1$s stab %4$s" -#~ msgstr "%1$s 戳中 %4$s" +#~ msgid "Barrington" +#~ msgstr "巴林頓" -#~ msgid "%1$s impales %4$s" -#~ msgstr "%1$s 刺擊 %4$s" +#~ msgid "Bartlett" +#~ msgstr "巴特利特" -#~ msgid "%1$s pierce %4$s" -#~ msgstr "%1$s 刺中 %4$s" +#~ msgid "Barton" +#~ msgstr "巴頓" -#~ msgid "%1$s impale %4$s" -#~ msgstr "%1$s 刺擊 %4$s" +#~ msgid "Bath" +#~ msgstr "巴斯" -#~ msgid "%s butt %s with %s antlers!" -#~ msgstr "%s 撞擊 %s 利用 %s 角!" +#~ msgid "Beacon Falls" +#~ msgstr "倍根瀑" -#~ msgid "%s slices %s with %s mandibles!" -#~ msgstr "%s 嘶咬 %s 利用 %s 下顎!" +#~ msgid "Beals" +#~ msgstr "比爾斯" -#~ msgid "%s butts %s with %s antlers!" -#~ msgstr "%s 撞擊 %s 利用 %s 角!" +#~ msgid "Beaver Cove" +#~ msgstr "海狸灣" -#~ msgid "%s sting %s with %s tail!" -#~ msgstr "%s 刺 %s 利用 %s 尾巴!" +#~ msgid "Becket" +#~ msgstr "貝克特" -#~ msgid "%s sink %s fangs into %s!" -#~ msgstr "%s 的 %s 撩牙刺入 %s!" +#~ msgid "Beddington" +#~ msgstr "貝丁頓" -#~ msgid "%s slice %s with %s mandibles!" -#~ msgstr "%s 嘶咬 %s 利用 %s 下顎!" +#~ msgid "Bedford" +#~ msgstr "貝德福德" -#~ msgid "%s sinks %s fangs into %s!" -#~ msgstr "%s 的 %s 撩牙刺入 %s!" +#~ msgid "Belchertown" +#~ msgstr "貝爾徹鎮" -#~ msgid "Wagon" -#~ msgstr "拖車" +#~ msgid "Belfast" +#~ msgstr "貝爾法斯特" -#~ msgid "A decent sized piece of cotton designed for medical purposes." -#~ msgstr "一片尺寸適中的醫療用棉布。" +#~ msgid "Belgrade" +#~ msgstr "貝爾格萊德" -#~ msgid "" -#~ "That drug you just took placed an effect on you. To check your effects,\n" -#~ "press '@'. Most only last a short while, while others, like chronic " -#~ "disease,\n" -#~ "last until cured by some other means." -#~ msgstr "" -#~ "你剛吃下去的藥起了作用。按下 '@' 來檢視。\n" -#~ "大部分症狀都會在短時間內治癒,不過有少數慢性疾病\n" -#~ "會一直維持到你用其他方法治療為止。" +#~ msgid "Bellingham" +#~ msgstr "柏林罕" -#~ msgid "" -#~ "You just stepped on a space with one or more items. If you wish to pick " -#~ "it\n" -#~ "up, press ',' or 'g'." -#~ msgstr "你現在腳下有個道具,按下 ',' 或是 'g' 來撿起它。" +#~ msgid "Belmont" +#~ msgstr "貝爾蒙特" -#~ msgid "" -#~ "A set of swages and dies for metalsmithing. Used in some metalworking " -#~ "fabrication recipes." -#~ msgstr "一組鍛造時使用的型鐵與模具。常使用於一些冶煉製造的配方上。" +#~ msgid "Belvidere" +#~ msgstr "貝爾維迪爾" -#~ msgid "" -#~ "The item you just picked up is a tool! To activate a tool, press 'a'. " -#~ "Some\n" -#~ "tools have a set charge, which can be reloaded once depleted. Other are\n" -#~ "single-use items, and still others are reusable." -#~ msgstr "" -#~ "你剛撿起來的是一個工具!按下 'a' 鍵來使用它。\n" -#~ "有些工具有使用次數,重新裝載後可以再次使用。\n" -#~ "而其他工具不是一次性就是無限次數的。" +#~ msgid "Benedicta" +#~ msgstr "貝內迪克塔" -#~ msgid "" -#~ "Your legs have transformed into six tentacles. This decreases your speed " -#~ "on land by 20%%, but makes your movement silent. However, they also " -#~ "increase your swimming speed. Somewhat decreases wet penalties." -#~ msgstr "" -#~ "你的腿變形成了 6 根觸手。減少了你在陸地的移動速度 20%%,但是卻是無聲移動。" -#~ "還能增加你的游泳速度,也稍微增加防水能力。" +#~ msgid "Bennington" +#~ msgstr "班寧頓" -#~ msgid "" -#~ "The bottoms of your feet are strongly padded. You receive no movement " -#~ "penalty for not wearing shoes, and even receive a 10%% bonus when running " -#~ "barefoot. Slightly decreases wet penalties." -#~ msgstr "" -#~ "你的腳掌增生成厚厚的角質墊。你不穿鞋也不會有任何移動懲罰,赤腳甚至還能得" -#~ "到 10%% 的移動加成。稍微提昇防水能力。" +#~ msgid "Benson" +#~ msgstr "本森" -#~ msgid " skill in mechanics." -#~ msgstr " 機械技能。" +#~ msgid "Benton" +#~ msgstr "班頓" -#~ msgid " skill in mechanics to install additional engine." -#~ msgstr "機械技能能夠安裝額外的引擎。" +#~ msgid "Berkley" +#~ msgstr "伯克利" -#~ msgid "K dynamics: " -#~ msgstr "K 動力: " +#~ msgid "Berkshire" +#~ msgstr "伯克希爾" + +#~ msgid "Berlin" +#~ msgstr "柏林" + +#~ msgid "Bernardston" +#~ msgstr "貝爾納茨頓" + +#~ msgid "Berwick" +#~ msgstr "伯威克" + +#~ msgid "Bethany" +#~ msgstr "貝瑟尼" + +#~ msgid "Bethel" +#~ msgstr "伯特利" + +#~ msgid "Bethlehem" +#~ msgstr "伯利恆" + +#~ msgid "Beverly" +#~ msgstr "比佛利" + +#~ msgid "Biddeford" +#~ msgstr "畢德佛" + +#~ msgid "Billerica" +#~ msgstr "比爾里卡" + +#~ msgid "Bingham" +#~ msgstr "賓漢" + +#~ msgid "Blackstone" +#~ msgstr "黑石" + +#~ msgid "Blaine" +#~ msgstr "布萊恩" + +#~ msgid "Blanchard" +#~ msgstr "布蘭查德" + +#~ msgid "Blandford" +#~ msgstr "布蘭福德" + +#~ msgid "Bloomfield" +#~ msgstr "布盧姆菲爾德" + +#~ msgid "Blue Hill" +#~ msgstr "藍山" + +#~ msgid "Bolton" +#~ msgstr "波頓" + +#~ msgid "Boothbay" +#~ msgstr "布斯" + +#~ msgid "Boothbay Harbor" +#~ msgstr "布斯灣" + +#~ msgid "Boscawen" +#~ msgstr "博斯科恩" + +#~ msgid "Boston" +#~ msgstr "波士頓" + +#~ msgid "Bourne" +#~ msgstr "波恩" + +#~ msgid "Bow" +#~ msgstr "布羅" + +#~ msgid "Bowdoin" +#~ msgstr "鮑登" + +#~ msgid "Bowdoinham" +#~ msgstr "鮑登漢" + +#~ msgid "Bowerbank" +#~ msgstr "鮑爾班克" + +#~ msgid "Boxborough" +#~ msgstr "博克斯伯勒" + +#~ msgid "Boxford" +#~ msgstr "博克斯福德" + +#~ msgid "Boylston" +#~ msgstr "斯頓" + +#~ msgid "Bozrah" +#~ msgstr "波斯拉" -#~ msgid "K mass: " -#~ msgstr "K 質量: " +#~ msgid "Bradford" +#~ msgstr "布拉德福德" -#~ msgid " to remove parts." -#~ msgstr "可移除零件。" +#~ msgid "Bradley" +#~ msgstr "布拉德利" -#~ msgid "To change a wheel you need a " -#~ msgstr "要更換輪胎你需要 " +#~ msgid "Braintree" +#~ msgstr "布倫特里" -#~ msgid "Bread and turkey, that's it." -#~ msgstr "麵包加上肉,就是這樣。" +#~ msgid "Branford" +#~ msgstr "布蘭福德" -#~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. This one has " -#~ "been lit, and its fuse is rapidly burning down." -#~ msgstr "" -#~ "一個裝滿了火柴頭的瓶子,並且在瓶口加了引線。已經被點燃,且引線很快地燃燒。" +#~ msgid "Brattleboro" +#~ msgstr "伯瑞特波羅" -#~ msgid "" -#~ "A bottle filled with match heads and equipped with a fuse. Use this item " -#~ "to light the fuse; you will, of course, need a lighter in your inventory " -#~ "to do this. After lighting it, throw it to cause fires." -#~ msgstr "" -#~ "一個裝滿了火柴頭的瓶子,並且在瓶口加了引線。使用這個物品以點燃它;當然你需" -#~ "要有個打火機在物品欄。點燃之後,可投擲出去造成火災。" +#~ msgid "Bremen" +#~ msgstr "不來梅" -#~ msgid "" -#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "一根短而粗的鐵工鑿子。可用在鑄造物品時的工具。" +#~ msgid "Brentwood" +#~ msgstr "布倫特伍德" -#~ msgid "" -#~ "A King Size(tm) industrial strength permanent marker, about halfway " -#~ "between a typical marker and a can of spray paint in size." -#~ msgstr "King Size工業製造的奇異筆,大小介於傳統奇異筆與噴機罐之間。" +#~ msgid "Brewer" +#~ msgstr "布魯爾" -#~ msgid "" -#~ "A large stand with slots in the side. (a)ctivate it and place it " -#~ "somewhere then set fires in it with no risk of spreading." -#~ msgstr "" -#~ "一個周邊有通風口的架子。(a)使用它來放置到地上,能夠在上面安全的生火。" +#~ msgid "Brewster" +#~ msgstr "布魯斯特" -#~ msgid "" -#~ "A rock affixed to a stick, functions adequately as a hammer, but really " -#~ "can't compare to a proper hammer." -#~ msgstr "一把綁著石頭的木棍,讓它有類似鐵鎚的功能,但與真正的鐵鎚還差的遠。" +#~ msgid "Bridgeport" +#~ msgstr "布里奇波特" -#~ msgid "" -#~ "A flattened stone affixed to a stick, works passably well as a shovel but " -#~ "really can't compare to a real shovel." -#~ msgstr "一根木棍連結一石片,功能類似鏟子,但與真正的鏟子差太多。" +#~ msgid "Bridgewater" +#~ msgstr "布里奇沃特" -#~ msgid "" -#~ "A unified power supply, or UPS, is a device developed jointly by military " -#~ "and scientific interests for use in combat and the field. The UPS is " -#~ "designed to power armor and some guns, but drains batteries quickly." -#~ msgstr "" -#~ "一個統一規格的不斷電系統,由軍方與科學家共同開發適用於戰場的設備,設計用來" -#~ "提供電能給動力裝甲與某些槍械,但缺點是耗電迅速。" +#~ msgid "Bridgton" +#~ msgstr "布里奇頓" -#~ msgid "" -#~ "A sharpened stone affixed to a stick, works passably well as an axe but " -#~ "really can't compare to a proper axe." -#~ msgstr "" -#~ "一把綁著鋒利石刀的木棍,讓它有類似斧頭的功能,但與真正的斧頭還差的遠。" +#~ msgid "Bridport" +#~ msgstr "布里德波特" -#~ msgid "" -#~ "An advanced version of the unified power supply, or UPS. This device has " -#~ "been significantly redesigned to provide better efficiency as well as to " -#~ "consume plutonium fuel cells rather than batteries." -#~ msgstr "" -#~ "一個高階版的統一規格不斷電系統。重新設計的規格讓它可以更有效率的使用鈽元" -#~ "素,而不是傳統電池。" +#~ msgid "Brighton" +#~ msgstr "布萊頓" -#~ msgid "" -#~ "A stone with spirals all over it, and holes around its perimeter. Though " -#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " -#~ "it." -#~ msgstr "" -#~ "一顆佈滿螺旋紋路與孔洞的石頭。雖然體積很大,但是重量卻很輕。空氣似乎圍著" -#~ "它。" +#~ msgid "Brighton Plantation" +#~ msgstr "布萊頓森林" -#~ msgid "" -#~ "This miniature nuclear bomb has a light blinking on the side, showing " -#~ "that it will soon explode. You should probably get far away from it." -#~ msgstr "這個迷你核彈的指示燈不停地在閃爍,看起來就快爆炸了,趕快跑吧。" +#~ msgid "Brimfield" +#~ msgstr "布林菲爾德" -#~ msgid "A sealed glass jar containing kompot. Activate to open and enjoy." -#~ msgstr "一瓶未開封的水果蜜餞,使用它來打開並享用吧。" +#~ msgid "Bristol" +#~ msgstr "布里斯托爾" -#~ msgid "" -#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " -#~ "it to activate the timer. Ten turns later it will explode, leaving behind " -#~ "a radioactive crater. The explosion is large enough to take out a house." -#~ msgstr "" -#~ "一個威力極強的炸彈--算是一種手持核武。使用計時器來啟動,將在第十回合後引" -#~ "爆,炸出一個放射性彈坑。爆炸範圍足以夷平一棟房子。" +#~ msgid "Brockton" +#~ msgstr "布魯克頓" -#~ msgid "You also need a wrench and %s to replace broken one." -#~ msgstr "你還需要一把扳手和 %s 才能把壞掉的換掉" +#~ msgid "Brookfield" +#~ msgstr "布魯克菲爾德" -#~ msgid ", a " -#~ msgstr ", " +#~ msgid "Brooklin" +#~ msgstr "布魯克林" -#~ msgid "" -#~ "~ is a terrain symbol that indicates water. From a water source like " -#~ "this,\n" -#~ "you can fill any containers you might have. Step onto the water, then " -#~ "press\n" -#~ "the pickup key (',' or 'g'), then select a watertight container to put " -#~ "the\n" -#~ "water into." -#~ msgstr "" -#~ "~ 是一個代表含水的地形符號,\n" -#~ "類似這樣的水源你可以拿容器裝水,站在水上面\n" -#~ "按下 (',' 或是 'g') 鍵來選擇一個水密容器裝水" +#~ msgid "Brookline" +#~ msgstr "布魯克賴" -#~ msgid "You need a " -#~ msgstr "你需要 " +#~ msgid "Brooksville" +#~ msgstr "布魯克斯維爾" -#~ msgid " and a " -#~ msgstr " 與 " +#~ msgid "Brookton" +#~ msgstr "布羅克頓" -#~ msgid "powered welder" -#~ msgstr "有電的電焊機" +#~ msgid "Brownfield" +#~ msgstr "布朗菲爾德" -#~ msgid "" -#~ "Hitting a monster will stun it briefly, allowing you to escape or get in\n" -#~ "another attack. Your dexterity and melee skills are used to determine\n" -#~ "whether an attack hits, while strength affects damage." -#~ msgstr "" -#~ "擊中敵人時會短暫的震暈它,讓你有空檔可以逃離或是繼續追擊。\n" -#~ "你的敏捷和近戰能力決定攻擊的命中率,\n" -#~ "而力量則會影響傷害大小。" +#~ msgid "Brownington" +#~ msgstr "布朗寧頓" -#~ msgid "" -#~ "That drug you just took is a painkiller. Painkillers are very important " -#~ "to\n" -#~ "keep on hand, as pain both penalizes your stats and makes you slower. " -#~ "Be\n" -#~ "careful, as the stronger painkillers can make you woozy, and some are " -#~ "even\n" -#~ "addictive." -#~ msgstr "" -#~ "你剛剛吞下去的是止痛藥,身上隨時帶著止痛藥是重要的,\n" -#~ "因為受傷不但會降低能力值還會減緩你的移動速度。\n" -#~ "不過要注意,藥效太強的止痛藥會讓你頭暈目眩,\n" -#~ "還有可能會上癮。" +#~ msgid "Brownville" +#~ msgstr "布朗寧菲爾" -#~ msgid "" -#~ "You just drank a bottle of water, reducing your thirst level and reducing " -#~ "the\n" -#~ "water level in the bottle. You'll probably want to drop empty bottles,\n" -#~ "or you might want to save them to refill from a water source later." -#~ msgstr "" -#~ "你剛喝了一瓶水,止了些渴也讓瓶中的水減少了。\n" -#~ "你可以選擇丟掉空瓶,或是留著拿來裝水。" +#~ msgid "Brunswick" +#~ msgstr "布朗斯維克" -#~ msgid "" -#~ "You just activated a grenade! You probably want to throw it. To throw " -#~ "an\n" -#~ "item, press 't' and then select the item to throw. The maximum range " -#~ "depends\n" -#~ "on your strength and the object's weight and size. Throwing isn't very " -#~ "good\n" -#~ "in most combat situations, but if you've got some fire power..." -#~ msgstr "" -#~ "你剛拉下了手榴彈的插梢!你最好趕快投擲出去。\n" -#~ "按下 't' 來選取物品進行投擲。\n" -#~ "投擲的最遠距離取決於你的力量和物品的重量及大小。\n" -#~ "投擲物品的動作在大部分的戰鬥中起不了什麼太大的作用,\n" -#~ "除非你帶的是燃燒武器..." +#~ msgid "Buckfield" +#~ msgstr "巴克菲爾德" -#~ msgid "" -#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " -#~ "using\n" -#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " -#~ "your\n" -#~ "gun, possibly to change ammunition types, press 'U'." -#~ msgstr "" -#~ "在使用槍之前,你需要先按下 'w' 鍵來進行手持動作,\n" -#~ "假設你有帶相對應的子彈的話使用 'r' 鍵來進行裝填子彈。\n" -#~ "你可以按下 'U' 鍵來卸下彈夾以換上不同的類型的子彈。" +#~ msgid "Buckland" +#~ msgstr "巴克蘭" -#~ msgid "" -#~ "Once you have a loaded gun wielded, you can fire it. Press the 'f' key " -#~ "to\n" -#~ "fire a single shot. With many guns, you can fire a burst by pressing " -#~ "'F'.\n" -#~ "You'll automatically target the last monster you shot at, or the closest\n" -#~ "monster to you. You can change your target with the movement keys, or " -#~ "cycle\n" -#~ "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " -#~ "hit\n" -#~ "the escape key." -#~ msgstr "" -#~ "槍上好子彈以後就可以發射了,按下 'f' 鍵來單發射擊\n" -#~ "有許多種槍能夠按下 'F' 鍵來進行連發射擊。\n" -#~ "你會自動瞄準上一次射擊的目標或是離你最近的敵人。\n" -#~ "你可以按下移動鍵來切換目標或是 '<' 跟 '>' 切換不同敵人,\n" -#~ "按下 'f' 或是 '.' 來射擊;按下 esc 鍵可取消射擊。" +#~ msgid "Bucksport" +#~ msgstr "巴克斯波特" -#~ msgid " You also need level " -#~ msgstr " 你還需要等級 " +#~ msgid "Burke" +#~ msgstr "伯克" -#~ msgid "" -#~ "That yellow > next to you is a staircase leading down. To go downtairs, " -#~ "step\n" -#~ "onto the staircase and press the '>' key. Similarly, a yellow < is " -#~ "stairs\n" -#~ "leading up, and can be followed with the '<' key." -#~ msgstr "" -#~ "在你身旁的黃色>符號代表向下的樓梯,站在符號上 \n" -#~ "按下 '>'即可下樓,同理<符號代表往高一層的樓梯\n" -#~ "按下 '<'即可上樓" +#~ msgid "Burlington" +#~ msgstr "伯靈頓" -#~ msgid "" -#~ "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " -#~ "then\n" -#~ "select your flashlight to turn it on." -#~ msgstr "" -#~ "這裡一片漆黑!不過幸好你有帶著手電筒 ,按下'a' 鍵 然後選擇你的手電筒來開啟" -#~ "他" +#~ msgid "Burnham" +#~ msgstr "伯納姆" -#~ msgid "" -#~ "It's dark down here! Without a source of light, you'll be limited to " -#~ "seeing\n" -#~ "only one space in any direction. You'll encounter darkness while " -#~ "underground\n" -#~ "or at night. Press '<' to go back upstairs, and look around for a " -#~ "flashlight." -#~ msgstr "" -#~ "這裡一片漆黑!少了光源你只能看到\n" -#~ "周圍一格的範圍,只要是在地鐵或是晚上都是這樣\n" -#~ "按下 '<' 鍵回到樓上,去找把手電筒吧" +#~ msgid "Burrillville" +#~ msgstr "伯瑞維爾" -#~ msgid "Choose new part to install here: " -#~ msgstr "選擇要新換上的零件: " +#~ msgid "Buxton" +#~ msgstr "巴克斯頓" -#~ msgid "" -#~ "After firing your gun, you will probably notice a Recoil alert in the " -#~ "lower\n" -#~ "right. Generally speaking, the more damaging the ammo, the worse the " -#~ "recoil.\n" -#~ "Recoil severely reduces your chance to hit, but you can eliminate recoil " -#~ "by\n" -#~ "pausing ('.') for a turn or moving normally. High strength reduces " -#~ "recoil,\n" -#~ "so weak characters might want to stick to .22 or 9mm guns." -#~ msgstr "" -#~ "開了槍以後,你可能有注意到右下方的後座力警示\n" -#~ "一般來說,威力越大的子彈,後座力越強\n" -#~ "這會嚴重的影響你的命中率,你可以按下 ('.')\n" -#~ "結束一回合或是往旁邊移動來回復正常\n" -#~ "力量值夠高的話可以減少後座力,\n" -#~ "如果你不夠壯的話還是回去用.22 或 9釐米的槍吧" +#~ msgid "Byron" +#~ msgstr "拜倫" -#~ msgid " to install parts." -#~ msgstr " 來裝上零件" +#~ msgid "Cabot" +#~ msgstr "卡博特" -#~ msgid "Needs " -#~ msgstr "需要 " +#~ msgid "Calais" +#~ msgstr "加萊" -#~ msgid ", and level " -#~ msgstr ", 以及等級 " +#~ msgid "Cambridge" +#~ msgstr "劍橋" -#~ msgid "" -#~ "A large stick, with the end carved into a blade for digging. Can be used " -#~ "to dig shallow pits, but not deep ones." -#~ msgstr "一根尾端為了挖掘而削成刀片狀的大棒,可以用來挖淺坑。" +#~ msgid "Camden" +#~ msgstr "坎登" -#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." -#~ msgstr "小型避難所,用木棍跟毛皮搭設,按(a)設置。" +#~ msgid "Campton" +#~ msgstr "坎普頓" -#~ msgid "" -#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " -#~ "shelter has been damaged, and needs repairs." -#~ msgstr "小型避難所,用木棍跟毛皮搭設,按(a)設置。該裝置受損,需要修復。" +#~ msgid "Canaan" +#~ msgstr "迦南" -#~ msgid "A piece of plastic. Not much use except to repair plastic items" -#~ msgstr "一小片塑膠,除了拿來修理塑膠物品外沒什麼用途。" +#~ msgid "Candia" +#~ msgstr "坎地亞" -#~ msgid "" -#~ "A spray can, filled with paint. Use this tool to make graffiti on the " -#~ "floor." -#~ msgstr "一個裝著顏料的噴漆罐,用它在地面隨便塗鴉。" +#~ msgid "Canterbury" +#~ msgstr "坎特伯里" -#~ msgid "" -#~ "A small multipurpose electronic device. This PDA has its flashlight app " -#~ "on, and is providing light." -#~ msgstr "一個多功能電子裝置,它裝有手電筒應用程式,可以發出光源。" +#~ msgid "Canton" +#~ msgstr "坎頓" -#~ msgid "" -#~ "A small multipurpose electronic device. Can be loaded with a variety of " -#~ "apps, providing all kinds of functionality." -#~ msgstr "一個多功能電子裝置,可以安裝各種不同功能的應用程式。" +#~ msgid "Cape Elizabeth" +#~ msgstr "開普敦伊麗莎白" -#~ msgid "" -#~ "A combination lock box, breaking inside would destroy anything of value." -#~ msgstr "一個有著密碼鎖的箱子,強行打開會毀掉裡面有價值的東西。" +#~ msgid "Caratunk" +#~ msgstr "卡拉籐克" -#~ msgid "A rare and arcane device, covered in alien markings." -#~ msgstr "一個罕見且神秘的設備,表面滿是外星符號。" +#~ msgid "Caribou" +#~ msgstr "卡里布" -#~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time." -#~ msgstr "一根粗蠟燭,雖然提供不了多少光亮,但可以持續燃燒很長一段時間。" +#~ msgid "Carlisle" +#~ msgstr "卡萊爾" -#~ msgid "" -#~ "A thick candle, doesn't provide very much light, but it can burn for " -#~ "quite a long time. This candle is lit." -#~ msgstr "" -#~ "一根粗蠟燭,雖然提供不了多少光亮,但可以持續燃燒很長一段時間。(燃燒中)" +#~ msgid "Carmel" +#~ msgstr "卡梅爾" -#~ msgid "" -#~ "There is only the space where an object should be, but isn't. No item " -#~ "template of this type exists." -#~ msgstr "" -#~ "那裡是唯一一個物件應出現的地方,但並沒有。沒有該類型的物品模板存在。" +#~ msgid "Carrabassett Valley" +#~ msgstr "卡勒巴西特谷" -#~ msgid "A talking doll for children, luckily it still works." -#~ msgstr "一個小孩玩的會說話玩偶,還好還沒壞。" +#~ msgid "Carroll" +#~ msgstr "卡洛爾" -#~ msgid "Rats swarm from nowhere to avenge the %s." -#~ msgstr "鼠群從四周竄出對 %s 復仇。" +#~ msgid "Carroll Plantation" +#~ msgstr "卡洛爾森林" -#~ msgid "The %s disappears! Was it in your head?" -#~ msgstr "%s 不見了!是幻覺嗎?" +#~ msgid "Carthage" +#~ msgstr "迦太基" -#~ msgid "tripod robot" -#~ msgstr "三腳機器人" +#~ msgid "Carver" +#~ msgstr "卡弗" -#~ msgid "" -#~ "A 8-foot-tall robot that walks on three long\n" -#~ "legs. It has a pair of spiked tentacles, as\n" -#~ "well as a flamethrower mounted on its head." -#~ msgstr "" -#~ "一個有著三隻長腳的8英尺高機器人。\n" -#~ "它有一對尖刺手臂,\n" -#~ "在其頭部還有一個火焰噴射器。" +#~ msgid "Cary Plantation" +#~ msgstr "卡里森林" -#~ msgid "%1$s batters %4$s" -#~ msgstr "%1$s 敲中 %4$s" +#~ msgid "Casco" +#~ msgstr "卡斯科" -#~ msgid "%1$s batter %4$s" -#~ msgstr "%1$s 敲中 %4$s" +#~ msgid "Castine" +#~ msgstr "卡斯廷" -#~ msgid "Critical! " -#~ msgstr "爆擊! " +#~ msgid "Castle Hill" +#~ msgstr "城堡山" -#~ msgid "%1$s slam %2$s %3$s against %4$s" -#~ msgstr "%1$s 揮舞 %2$s %3$s 擊飛了 %4$s" +#~ msgid "Castleton" +#~ msgstr "卡斯爾頓" -#~ msgid "%1$s slams %2$s %3$s against %4$s" -#~ msgstr "%1$s 揮舞 %2$s %3$s 擊飛了 %4$s" +#~ msgid "Caswell" +#~ msgstr "卡斯威爾" -#~ msgid "" -#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " -#~ "enjoy." -#~ msgstr "真空封存於袋內的肉片,可以打開它並且食用。" +#~ msgid "Cavendish" +#~ msgstr "卡文迪許" -#~ msgid "" -#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." -#~ msgstr "攜帶型熱塑封口機,配有空氣幫浦,可將食物真空密封保存。" +#~ msgid "Center Harbor" +#~ msgstr "森特港" -#~ msgid "You are already wielding nothing." -#~ msgstr "你手上已經沒有拿東西了。" +#~ msgid "Centerville" +#~ msgstr "森特維爾" -#~ msgid "" -#~ "A small hand press for hand loading firearm ammunition. Comes with " -#~ "everything you need to start hand loading." -#~ msgstr "一個小型的手壓模具,讓你可以手工組裝槍枝的子彈。" +#~ msgid "Central Falls" +#~ msgstr "森特瀑" -#~ msgid "" -#~ "A still, useful for the distillation of alcohol and other, more curious " -#~ "substances." -#~ msgstr "一個蒸餾器,可以用來釀酒." +#~ msgid "Chaplin" +#~ msgstr "卓別林" -#~ msgid "" -#~ "A Philips-head screwdriver, important for almost all electronics crafting " -#~ "and most mechanics crafting." -#~ msgstr "十字螺絲起子,重要的是它可以應付大部分的電子及機械類物品的製造." +#~ msgid "Chapman" +#~ msgstr "查普曼" -#~ msgid "" -#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " -#~ "gauge wire." -#~ msgstr "一把大型的剪線鉗,可以用它來剪斷掛鎖或鐵絲網." +#~ msgid "Charlemont" +#~ msgstr "查理蒙特" -#~ msgid "%1$s slices %4$s" -#~ msgstr "%1$s 砍中 %4$s" +#~ msgid "Charleston" +#~ msgstr "查爾斯頓" -#~ msgid "%1$s slice %4$s" -#~ msgstr "%1$s 砍中 %4$s" +#~ msgid "Charlestown" +#~ msgstr "查爾斯鎮" -#~ msgid "%1$s hack %4$s" -#~ msgstr "%1$s 劈中 %4$s" +#~ msgid "Charlton" +#~ msgstr "查爾頓" -#~ msgid "%1$s hacks %4$s" -#~ msgstr "%1$s 劈中 %4$s" +#~ msgid "Chatham" +#~ msgstr "查塔姆" -#~ msgid "%1$s clobber %4$s" -#~ msgstr "%1$s 痛打 %4$s" +#~ msgid "Chebeague Island" +#~ msgstr "楚別克島" -#~ msgid "%1$s clobbers %4$s" -#~ msgstr "%1$s 痛打 %4$s" +#~ msgid "Chelmsford" +#~ msgstr "切姆斯福德" -#~ msgid "" -#~ "An amalgamation of putrid human and animal\n" -#~ "parts that have become fused in this golem\n" -#~ "of flesh. The eyes of all the heads dart\n" -#~ "rapidly and the mouths scream or groan." -#~ msgstr "" -#~ "許多腐爛的人類和動物融合成噁心的形體\n" -#~ "上面的所有頭顱會快速的眨眼而嘴巴會發\n" -#~ "出尖叫與呻吟。" +#~ msgid "Chelsea" +#~ msgstr "切爾西" -#~ msgid "" -#~ "A huge curved two-handed sword from Japan. Surprisingly light for its " -#~ "size." -#~ msgstr "日本傳來的巨大雙手曲劍。相較其大小非常的輕。" +#~ msgid "Cherryfield" +#~ msgstr "切里菲爾德" -#~ msgid "An unwieldy mop. Good for cleaning up spills." -#~ msgstr "適合打掃家裡或是清除打翻的液體" +#~ msgid "Cheshire" +#~ msgstr "柴郡" -#~ msgid "" -#~ "A large, brown spider, which moves quickly\n" -#~ "and aggresively." -#~ msgstr "" -#~ "一個大型的,快速移動的褐色蜘蛛\n" -#~ "侵略地。" +#~ msgid "Chester" +#~ msgstr "切斯特" + +#~ msgid "Chesterfield" +#~ msgstr "切斯特菲爾德" -#~ msgid "An anti-personnel mine that is triggered when stepped upon." -#~ msgstr "一個反人員地雷,當踩上就會爆炸。" +#~ msgid "Chesterville" +#~ msgstr "切斯特維爾" -#~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " -#~ "pulled, the crossbow fires. Only a single round can be used, after which " -#~ "the trap is disabled." -#~ msgstr "" -#~ "一個簡單的絆索連接到一個上膛十字弓的扳機。當一被拉動,十字弓就會發射。一次" -#~ "只能射出一發箭,之後這陷阱就失效了。" +#~ msgid "Chichester" +#~ msgstr "奇切斯特" -#~ msgid "" -#~ "A tripwire trap must be placed across a doorway or other thin passage. " -#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " -#~ "hurt themselves minorly." -#~ msgstr "" -#~ "絆索陷阱必須被布置在門口或其他狹小的通道。當目標經過時將被絆倒並可能造成些" -#~ "許傷害。" +#~ msgid "Chicopee" +#~ msgstr "奇科皮" -#~ msgid "" -#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " -#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " -#~ "time the trigger is pulled, one or two may be used." -#~ msgstr "" -#~ "一個簡單的絆索連接到一個上膛削短型散彈槍 的扳機。當一被拉動,散彈槍就會發" -#~ "射。一次使用兩發子彈,一次觸發會使用一發或兩發子彈。" +#~ msgid "Chilmark" +#~ msgstr "奇瑪克" -#~ msgid "" -#~ "A machete is attached laterally to a motor, with a tripwire controlling " -#~ "its throttle. When the tripwire is pulled, the blade is swung around with " -#~ "great force. The trap forms a 3x3 area of effect." -#~ msgstr "" -#~ "開山刀連接在馬達上,而絆索控制著馬達油門,當絆索被觸發,強力的馬達會帶動開" -#~ "山刀旋轉撕砍,形成一格3乘3區域的殺傷範圍。" +#~ msgid "China" +#~ msgstr "中國" -#~ msgid "Highly explosive, use with caution! Armed with a small timer." -#~ msgstr "" -#~ "流言終結者:只要出問題,C4都能搞定。小心使用,強效爆炸威力。內建倒數計時" -#~ "器。" +#~ msgid "Chittenden" +#~ msgstr "齊坦丹縣" -#~ msgid "" -#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " -#~ "and ticking!" -#~ msgstr "" -#~ "流言終結者:只要出問題,C4都能搞定。小心使用,強效爆炸威力。倒數計時器已啟" -#~ "動。" +#~ msgid "Claremont" +#~ msgstr "克萊蒙特" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " -#~ "producing plenty of light" -#~ msgstr "一個纏繞吸飽汽油布塊的木棍,正在燃燒而且產生大量光源。" +#~ msgid "Clarendon" +#~ msgstr "克萊爾登" -#~ msgid "A flimsy saw, useful for cutting through wood objects." -#~ msgstr "一把脆弱的鋸子,適合切割木頭材質物品。" +#~ msgid "Clarksburg" +#~ msgstr "克拉克斯堡" -#~ msgid "" -#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." -#~ msgstr "雙手巨斧,良好的揮擊武器,但是不太好使。" +#~ msgid "Clarksville" +#~ msgstr "克拉克斯維爾" -#~ msgid "A sturdy saw, useful for cutting through metal objects." -#~ msgstr "一把堅固的鋸子,適合用來切割金屬物品。" +#~ msgid "Clifton" +#~ msgstr "克里夫頓" -#~ msgid "A small tent, just big enough to fit a person comfortably." -#~ msgstr "剛好容納一個人的小帳篷" +#~ msgid "Clinton" +#~ msgstr "克靈頓" -#~ msgid "" -#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " -#~ "amount of light" -#~ msgstr "一大塊吸飽汽油的布料,點燃它可以產生不少光源。" +#~ msgid "Codyville Plantation" +#~ msgstr "寇地維爾森林" -#~ msgid "" -#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " -#~ "makes any battle a stylish battle." -#~ msgstr "適合紳士與劍客決鬥的武器。輕巧易使,讓任何戰鬥都變的十分高雅。" +#~ msgid "Cohasset" +#~ msgstr "科哈塞特" -#~ msgid "A simple wood pole made deadlier by the blade tied to it." -#~ msgstr "一個木柄用布料連接了一把刀子。" +#~ msgid "Colchester" +#~ msgstr "科爾切斯特" -#~ msgid "" -#~ "A small whistle. When used, it produces a high tone that causes nearby " -#~ "friendly dogs to either follow you closely and stop attacking, or start " -#~ "attacking enemies if they are currently docile." -#~ msgstr "利用吹響的高頻音效,對小狗下達命令。" +#~ msgid "Colebrook" +#~ msgstr "科爾布魯克" -#~ msgid "" -#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " -#~ "the sample. Use this tool to draw blood, either from yourself or from a " -#~ "corpse you are standing on." -#~ msgstr "一個真空的採血裝置,用它來採集你自己或是屍體的血液。" +#~ msgid "Colrain" +#~ msgstr "科爾瑞" -#~ msgid "A crude explosive device triggered by a piece of string." -#~ msgstr "由繩子啟動的土製爆炸裝置" +#~ msgid "Columbia" +#~ msgstr "哥倫比亞" -#~ msgid "" -#~ "A military style fold up cot, not quite as comfortable as a bed but much " -#~ "better than slumming it on the ground." -#~ msgstr "軍用行軍床,不比床舒服,但也比睡在地上好多了。" +#~ msgid "Columbia Falls" +#~ msgstr "哥倫比亞瀑布" -#~ msgid "" -#~ "A portable games console in working condition, with a backlit screen " -#~ "allowing you to play in the dark. You can use it to play it for a little " -#~ "while, but this requires batteries." -#~ msgstr "" -#~ "運作良好的掌上型遊樂器,有背光的螢幕讓你可以在黑暗中遊玩,但是需要電池。" +#~ msgid "Concord" +#~ msgstr "康科爾" -#~ msgid "A human skull with strange etchings covering it." -#~ msgstr "一個人類頭骨,其上有許多不明的蝕刻符號" +#~ msgid "Conway" +#~ msgstr "康威" -#~ msgid "" -#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " -#~ "Requires a tree nearby. Effective at trapping monsters." -#~ msgstr "" -#~ "這個陷阱包含一個繩索套與聯接繩,同時需要一棵樹才可以設置。當生物通過時,啟" -#~ "動的陷阱會困住它們。" +#~ msgid "Coplin Plantation" +#~ msgstr "科普林森林" -#~ msgid "" -#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " -#~ "adjacent solid terrain." -#~ msgstr "這個電鑽已經啟動了,而且不停地消耗汽油。你可以用它在地面上鑽個洞。" +#~ msgid "Corinna" +#~ msgstr "科林那" -#~ msgid "" -#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " -#~ "sentient. Open at your own risk.\"" -#~ msgstr "" -#~ "\"警告: 有毒且腐蝕性極強的材料。內容物可能是有感覺的生物。打開風險自負。\"" +#~ msgid "Corinth" +#~ msgstr "科林斯" -#~ msgid "" -#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " -#~ "you to teleport a short distance away." -#~ msgstr "一個神秘的裝置,由鈽電池供電。使用它會讓你進行短距離瞬間移動。" +#~ msgid "Cornish" +#~ msgstr "科尼什" -#~ msgid "" -#~ "A section of a pipe filled with explosive materials. Use this item to " -#~ "light the fuse, which gives you 3 turns before it detonates. You will " -#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." -#~ msgstr "" -#~ "一段鐵管裡面塞滿高爆物質。使用這個物品會點燃它的引信,讓它在三回合後爆炸。" -#~ "要使用這物品你會需要一個打火機。要注意的是這炸彈並不可靠,偶而可能會引爆失" -#~ "敗。" +#~ msgid "Cornville" +#~ msgstr "康維爾" -#~ msgid "" -#~ "Using this allows you to send out a signal; either a general SOS, or if " -#~ "you are in contact with a faction, to send a direct call to them." -#~ msgstr "使用該裝置可以讓你發送求救信號(SOS),或是讓你與某些派系聯繫。" +#~ msgid "Cornwall" +#~ msgstr "康沃爾" -#~ msgid "" -#~ "Using this item on a container full of water will purify the water. Water " -#~ "taken from uncertain sources like a river may be dirty." -#~ msgstr "" -#~ "在裝滿水的容器上使用這個物品能進行淨水。自不穩定地區(像是河流)所取來的水可" -#~ "能會不太乾淨。" +#~ msgid "Coventry" +#~ msgstr "科芬特里" -#~ msgid "" -#~ "A piece of metal that can get very hot. Necessary for electronics " -#~ "crafting. You could also use it to cauterize wounds, if you had to." -#~ msgstr "可以產生高溫的金屬裝置,用來焊接金屬,必要時也可以用於消毒傷口。" +#~ msgid "Craftsbury" +#~ msgstr "荂夫斯貝里" -#~ msgid "" -#~ "A powdered antihemorrhagic compound which reacts with blood to " -#~ "immediately form a gel-like substance which stops bleeding." -#~ msgstr "當它與傷口的血液作用,會形成膠狀物阻止更多的出血。" +#~ msgid "Cranberry Isles" +#~ msgstr "蔓越莓群島" -#~ msgid "" -#~ "An antenna designed to pick up signals better when pointed at the source." -#~ msgstr "當天線對準訊號元的時候會有更好的收訊效果。" +#~ msgid "Cranston" +#~ msgstr "克蘭斯頓" -#~ msgid "" -#~ "If you can find a system to analyze this you may find something of " -#~ "interest." -#~ msgstr "如果你可以找到個系統解讀它,你會得到很多有趣的東西。" +#~ msgid "Crawford" +#~ msgstr "克勞福德" -#~ msgid "" -#~ "Using this item will, if loaded with gas, cause it to turn on, making a " -#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." -#~ msgstr "" -#~ "小心使用這個裝滿瓦斯的東西,因為啟動時會產生大量噪音,威力強大,無法握緊但" -#~ "動作緩慢的敲擊武器。" +#~ msgid "Cromwell" +#~ msgstr "克倫威爾" -#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." -#~ msgstr "煮沸酸雨後得到的產品,千萬不能喝。" +#~ msgid "Croydon" +#~ msgstr "克羅伊登" -#~ msgid ".308 caliber retool" -#~ msgstr ".308口徑重製工具" +#~ msgid "Crystal" +#~ msgstr "水晶" -#~ msgid ".223 caliber retool" -#~ msgstr ".223口徑重製工具" +#~ msgid "Cumberland" +#~ msgstr "坎伯蘭" -#~ msgid "4.6mm caliber retool" -#~ msgstr "4.6mm口徑重製工具" +#~ msgid "Cummington" +#~ msgstr "坎明尼頓" -#~ msgid "5.7mm caliber retool" -#~ msgstr "5.7mm口徑重製工具" +#~ msgid "Cushing" +#~ msgstr "庫欣" -#~ msgid ".22 caliber retool" -#~ msgstr ".22口徑重製工具" +#~ msgid "Cutler" +#~ msgstr "卡特勒" -#~ msgid "9mm caliber retool" -#~ msgstr "9mm口徑重製工具" +#~ msgid "Cyr Plantation" +#~ msgstr "希爾森林" -#~ msgid "You cannot remove mount point while something is attached to it." -#~ msgstr "你不能拆除這個零件,因為上面還有其他東西。" +#~ msgid "Dallas Plantation" +#~ msgstr "達拉斯森林" -#~ msgid "Choose wheel to use as replacement: " -#~ msgstr "選擇你想換上的輪子: " +#~ msgid "Dalton" +#~ msgstr "道爾頓" -#~ msgid "" -#~ "Whoa. Whoa. Hey. This game requires a minimum terminal size of %dx%d. " -#~ "I'm\n" -#~ "sorry if your graphical terminal emulator went with the woefully-" -#~ "diminutive\n" -#~ "%dx%d as its default size, but that just won't work here. Now stretch " -#~ "the\n" -#~ "window until you've got it at the right size (or bigger).\n" -#~ msgstr "" -#~ "兄弟!!這個遊戲需要至少 %dx%d 的畫面大小才可以玩喔,\n" -#~ "如果你的顯示卡達不到%dx%d的需求,是不能遊玩的。\n" -#~ "你必須更新你的顯示卡到這個解析度或以上,這個遊戲才能\n" -#~ "順利執行。\n" +#~ msgid "Damariscotta" +#~ msgstr "達馬瑞斯哥塔" -#~ msgid "" -#~ "A small metalworking crucible. Used in some metalworking fabrication " -#~ "recipes." -#~ msgstr "一個進行鑄鐵作業時的小坩鍋。能在鑄鐵時派上用場。" +#~ msgid "Danbury" +#~ msgstr "丹伯里" -#~ msgid ".45 caliber retool" -#~ msgstr ".45口徑重製工具" +#~ msgid "Danby" +#~ msgstr "丹比" -#~ msgid "" -#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " -#~ "does less damage and is less accurate. Stands a good chance of remaining " -#~ "intact once fired." -#~ msgstr "" -#~ "由木頭刻成並削尖的十字弓箭。它比鋼製十字弓箭要輕,但只能造成較輕微的傷害同" -#~ "時準確度也較差。發射後有有很好的機率能重新使用。" +#~ msgid "Danforth" +#~ msgstr "丹福思" -#~ msgid "" -#~ "This chemistry set stored in a bag contains some glass containers, some " -#~ "metal wire and safety glasses. It might be used to craft some chems if " -#~ "you're so inclined." -#~ msgstr "化學藥劑套組裝著許多玻璃罐裝的化學物質。能夠用來製作一些化學物品。" +#~ msgid "Danvers" +#~ msgstr "丹佛斯" -#~ msgid "A plastic mold which can be used to craft items made of plastic." -#~ msgstr "一個能用來製作許多塑膠製品的模具。" +#~ msgid "Danville" +#~ msgstr "丹維爾" -#~ msgid "" -#~ "Designed during World War II by the Soviet Union, the popularity of the " -#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " -#~ "rifle round. However, due to its lack of yaw, this round deals less " -#~ "damage than most." -#~ msgstr "" -#~ "7.62x39mm彈是由蘇聯於第二次世界大戰中所設計。由於使用這種彈藥的AK-47步槍與" -#~ "SKS步槍的風行,7.62x39mm步槍彈的人氣也隨之廣為流傳。但必須注意的是因為這種" -#~ "彈種缺乏滾轉的特性,使其的傷害會低於大部分其他彈種。" +#~ msgid "Darien" +#~ msgstr "達里恩" -#~ msgid "" -#~ "Your entire body may resonate at very high power, creating a short-range " -#~ "shockwave. While it will not too much damage to flexible creatures, " -#~ "stiff items such as walls, doors, and even robots will be severely " -#~ "damaged." -#~ msgstr "" -#~ "你的身體能產生高能共振,發出短距的衝擊波。衝擊波對生物影響不大,但對堅固的" -#~ "物體如牆壁、門,甚至機器人都將造成嚴重的損壞。" +#~ msgid "Dartmouth" +#~ msgstr "達特茅斯" -#~ msgid "Pitch the tent" -#~ msgstr "搭帳篷" +#~ msgid "Dayton" +#~ msgstr "代頓" -#~ msgid " and stunning it" -#~ msgstr " 並震暈了" +#~ msgid "Deblois" +#~ msgstr "達比路斯" -#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" -#~ msgstr "你 %s 的 %s 撞上了 %s,造成 %d 傷害 %s!" +#~ msgid "Dedham" +#~ msgstr "達德漢" -#~ msgid "Fuel usage (safe): " -#~ msgstr "油耗 (安全): " +#~ msgid "Deep River" +#~ msgstr "深河" -#~ msgid " lack" -#~ msgstr "缺少" +#~ msgid "Deer Isle" +#~ msgstr "鹿島" -#~ msgid "enough" -#~ msgstr "足夠" +#~ msgid "Deerfield" +#~ msgstr "迪爾菲爾德" -#~ msgid "Wheels: " -#~ msgstr "輪胎: " +#~ msgid "Deering" +#~ msgstr "迪爾林" -#~ msgid "Mass: lbs" -#~ msgstr "重量: lbs" +#~ msgid "Denmark" +#~ msgstr "丹麥" -#~ msgid "Mass: kg" -#~ msgstr "重量: kg" +#~ msgid "Dennis" +#~ msgstr "丹尼斯" -#~ msgid "Accel.: mph/t" -#~ msgstr "加速: mph/t" +#~ msgid "Dennistown" +#~ msgstr "丹尼斯鎮" -#~ msgid "Accel.: Kmh/t" -#~ msgstr "加速: Kmh/t" +#~ msgid "Dennysville" +#~ msgstr "丹尼斯維爾" -#~ msgid "You need a hose to siphon water." -#~ msgstr "你需要一根管子來抽取水." +#~ msgid "Derby" +#~ msgstr "德比" -#~ msgid "hose" -#~ msgstr "管子" +#~ msgid "Derry" +#~ msgstr "德里" -#~ msgid "You need a hose to siphon fuel." -#~ msgstr "你需要一根管子來抽取汽油." +#~ msgid "Detroit" +#~ msgstr "底特律" -#~ msgid "You need %s." -#~ msgstr "你需要 %s." +#~ msgid "Dexter" +#~ msgstr "德克斯特" -#~ msgid "You need level %d skill in mechanics." -#~ msgstr "你需要達到等級 %d 的機械技能。" +#~ msgid "Dighton" +#~ msgstr "戴頓" -#~ msgid "You need a powered welder to repair." -#~ msgstr "你需要一把有電的電焊機才能維修。" +#~ msgid "Dixfield" +#~ msgstr "迪克斯菲爾德" -#~ msgid "The %s triggers a boobytrap!" -#~ msgstr "%s 觸發了詭雷!" +#~ msgid "Dixmont" +#~ msgstr "迪克斯蒙" -#~ msgid "Triggered a boobytrap." -#~ msgstr "觸發了詭雷。" +#~ msgid "Dorchester" +#~ msgstr "多切斯特" -#~ msgid "You trigger a boobytrap!" -#~ msgstr "你觸發了詭雷!" +#~ msgid "Dorset" +#~ msgstr "多塞特" -#~ msgid "The %s steps on a landmine!" -#~ msgstr "%s 踩到了地雷!" +#~ msgid "Douglas" +#~ msgstr "道格拉斯" -#~ msgid "boobytrap" -#~ msgstr "詭雷" +#~ msgid "Dover" +#~ msgstr "多佛爾" -#~ msgid "" -#~ "If true, shift the view toward the selected item if it is outside of your " -#~ "current viewport." -#~ msgstr "設定為 是,若檢視的物品超出畫面範圍,將會移動畫面到該物品位置。" +#~ msgid "Dover-Foxcroft" +#~ msgstr "多佛-福克斯克羅夫特" -#~ msgid "Default: %f - Min: %f, Max %f" -#~ msgstr "預設值: %f - 最小: %f, 最大 %f" +#~ msgid "Dracut" +#~ msgstr "德拉卡特" -#~ msgid "Default: %d - Min: %d, Max %d" -#~ msgstr "預設值: 否 %d - 最小: %d, 最大 %d" +#~ msgid "Dresden" +#~ msgstr "德累斯頓" -#~ msgid "I am looking for a master to train my fighting techniques." -#~ msgstr "我正在尋找能夠訓練我戰鬥技巧的大師。" +#~ msgid "Drew Plantation" +#~ msgstr "德魯森林" -#~ msgid "I am a wandering master of " -#~ msgstr "我是流浪中的大師, " +#~ msgid "Dublin" +#~ msgstr "都柏林" -#~ msgid "" -#~ "A human body, but with its limbs, neck, and\n" -#~ "hair impossibly twisted." -#~ msgstr "" -#~ "有著人的身體,但是四肢,頸部,以及頭髮卻是不可思議的扭曲形狀。(參見伊藤潤" -#~ "二-阿彌殼斷層之怪)" +#~ msgid "Dudley" +#~ msgstr "達德利" -#~ msgid "A large snail, with an oddly human face." -#~ msgstr "一支大蝸牛,殼上有著詭異的人臉。(參見伊藤潤二-蛞蝓少女)" +#~ msgid "Dummer" +#~ msgstr "達默" -#~ msgid "" -#~ "A cute wiggling nose, cotton tail, and\n" -#~ "delicious flesh." -#~ msgstr "會擺動鼻子尾巴的可愛生物,也是美味的肉。" +#~ msgid "Dummerston" +#~ msgstr "達默斯頓" -#~ msgid " but do no damage." -#~ msgstr " 但沒有造成傷害。" +#~ msgid "Dunbarton" +#~ msgstr "鄧巴頓" -#~ msgid "%1$s whack %4$s" -#~ msgstr "%1$s 重擊 %4$s" +#~ msgid "Dunstable" +#~ msgstr "鄧斯特布爾" -#~ msgid "%1$s nicks %4$s" -#~ msgstr "%1$s 劃中 %4$s" +#~ msgid "Durham" +#~ msgstr "達勒姆" -#~ msgid "%1$s nick %4$s" -#~ msgstr "%1$s 劃中 %4$s" +#~ msgid "Duxbury" +#~ msgstr "達克斯伯里" -#~ msgid "%1$s cuts %4$s" -#~ msgstr "%1$s 砍劈 %4$s" +#~ msgid "Dyer Brook" +#~ msgstr "代爾布魯克" -#~ msgid "%1$s pokes %4$s" -#~ msgstr "%1$s 戳中了 %4$s" +#~ msgid "Eagle Lake" +#~ msgstr "鷹湖" -#~ msgid "%1$s poke %4$s" -#~ msgstr "%1$s 戳中了 %4$s" +#~ msgid "East Bridgewater" +#~ msgstr "東布里奇沃特" -#~ msgid "%1$s stabs %4$s" -#~ msgstr "%1$s 刺中了 %4$s" +#~ msgid "East Brookfield" +#~ msgstr "東布魯克菲爾德" -#~ msgid "%1$s jabs %2$s %3$s at %4$s" -#~ msgstr "%1$s 戳中 %2$s %3$s 的 %4$s" +#~ msgid "East Granby" +#~ msgstr "東格蘭比" -#~ msgid "%1$s jab %2$s %3$s at %4$s" -#~ msgstr "%1$s 戳中 %2$s %3$s 的 %4$s" +#~ msgid "East Greenwich" +#~ msgstr "東格林尼治" -#~ msgid "%1$s sweeps %2$s %3$s at %4$s" -#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" +#~ msgid "East Haddam" +#~ msgstr "東哈丹姆" -#~ msgid "%1$s sweep %2$s %3$s at %4$s" -#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" +#~ msgid "East Hampton" +#~ msgstr "東漢普頓" -#~ msgid "%s slaps %s with %s tentacle!" -#~ msgstr "%s 鞭打 %s 利用 %s 觸手!" +#~ msgid "East Hartford" +#~ msgstr "東哈特福" -#~ msgid "%s slap %s with %s tentacle!" -#~ msgstr "%s 鞭打 %s 利用 %s 觸手!" +#~ msgid "East Haven" +#~ msgstr "東港" -#~ msgid "%s hits %s with %s tail!" -#~ msgstr "%s 擊中 %s 利用 %s 尾!" +#~ msgid "East Kingston" +#~ msgstr "東金士頓" -#~ msgid "%s hit %s with %s tail!" -#~ msgstr "%s 擊中 %s 利用 %s 尾!" +#~ msgid "East Longmeadow" +#~ msgstr "東朗梅多" -#~ msgid "%s stings %s with %s tail!" -#~ msgstr "%s 刺中 %s 利用 %s 尾!" +#~ msgid "East Lyme" +#~ msgstr "東萊姆" -#~ msgid "%s stabs %s with %s pointed horns!" -#~ msgstr "%s 刺中 %s 利用 %s 尖角!" +#~ msgid "East Machias" +#~ msgstr "東馬柴厄斯" -#~ msgid "%s stab %s with %s pointed horns!" -#~ msgstr "%s 刺中 %s 利用 %s 尖角!" +#~ msgid "East Millinocket" +#~ msgstr "東米利諾基特" -#~ msgid "%s headbutts %s with %s curled horns!" -#~ msgstr "%s 頭錘 %s 利用 %s 彎角!" +#~ msgid "East Montpelier" +#~ msgstr "東蒙彼利埃" -#~ msgid "%s headbutt %s with %s curled horns!" -#~ msgstr "%s 頭錘 %s 利用 %s 彎角!" +#~ msgid "East Providence" +#~ msgstr "東普羅維登斯" -#~ msgid "%s headbutts %s with %s horns!" -#~ msgstr "%s 頭錘 %s 利用 %s 角!" +#~ msgid "East Windsor" +#~ msgstr "東溫莎" -#~ msgid "%s headbutt %s with %s horns!" -#~ msgstr "%s 頭錘 %s 利用 %s 角!" +#~ msgid "Eastbrook" +#~ msgstr "伊斯特布魯克" -#~ msgid "%s kicks %s with %s hooves!" -#~ msgstr "%s 踢中 %s 利用 %s 蹄!" +#~ msgid "Eastford" +#~ msgstr "伊斯特福德" -#~ msgid "%s kick %s with %s hooves!" -#~ msgstr "%s 踢中 %s 用 %s 蹄!" +#~ msgid "Eastham" +#~ msgstr "伊斯坦" -#~ msgid "%s peck %s!" -#~ msgstr "%s 啄中 %s!" +#~ msgid "Easthampton" +#~ msgstr "伊斯特漢普頓" -#~ msgid "Stinger Strike!" -#~ msgstr "毒刺突擊!" +#~ msgid "Easton" +#~ msgstr "伊斯頓" -#~ msgid "Tail whip! Viper Combo Intiated!" -#~ msgstr "啪啪!毒龍連技!" +#~ msgid "Eastport" +#~ msgstr "東港" -#~ msgid "Your injured arms prevent a viper strike!" -#~ msgstr "你受傷的手臂無法使用毒龍鑽!" +#~ msgid "Eaton" +#~ msgstr "伊頓" -#~ msgid "You drain %s body heat!" -#~ msgstr "你吸取 %s 體熱!" +#~ msgid "Eddington" +#~ msgstr "愛丁頓" -#~ msgid "%s's" -#~ msgstr "%s的" +#~ msgid "Eden" +#~ msgstr "伊甸" -#~ msgid "the %s's" -#~ msgstr "%s的" +#~ msgid "Edgartown" +#~ msgstr "埃德加敦" -#~ msgid "you" -#~ msgstr "你" +#~ msgid "Edgecomb" +#~ msgstr "艾克莫" -#~ msgid "%s's" -#~ msgstr "%s 的" +#~ msgid "Edinburg" +#~ msgstr "愛丁堡" -#~ msgid "You disarm %s." -#~ msgstr "你解除了 %s。" +#~ msgid "Edmunds" +#~ msgstr "埃德蒙茲" -#~ msgid "You throw %s." -#~ msgstr "你投擲 %s。" +#~ msgid "Effingham" +#~ msgstr "埃芬漢" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Egremont" +#~ msgstr "埃格蒙特" -#~ msgid "Counter-attack!" -#~ msgstr "反擊!" +#~ msgid "Eliot" +#~ msgstr "愛略特" -#~ msgid "%s breaks the grab!" -#~ msgstr "%s 掙脫了束縛!" +#~ msgid "Ellington" +#~ msgstr "埃林頓" -#~ msgid "%s break the grab!" -#~ msgstr "%s 掙脫了束縛!" +#~ msgid "Ellsworth" +#~ msgstr "埃爾斯沃思" -#~ msgid "your %s" -#~ msgstr "你的 %s" +#~ msgid "Elmore" +#~ msgstr "埃爾莫爾" -#~ msgid "the %s" -#~ msgstr "%s" +#~ msgid "Embden" +#~ msgstr "埃柏登" -#~ msgid "%1$s hits %4$s" -#~ msgstr "%1$s 擊中了 %4$s" +#~ msgid "Enfield" +#~ msgstr "恩菲爾德" -#~ msgid "%1$s hit %4$s" -#~ msgstr "%1$s 擊中了 %4$s" +#~ msgid "Enosburg" +#~ msgstr "愛諾斯堡" -#~ msgid "your" -#~ msgstr "你的" +#~ msgid "Epping" +#~ msgstr "埃平" -#~ msgid "his" -#~ msgstr "他的" +#~ msgid "Epsom" +#~ msgstr "埃皮森" -#~ msgid "her" -#~ msgstr "她的" +#~ msgid "Errol" +#~ msgstr "埃羅爾" -#~ msgid "Your" -#~ msgstr "你的" +#~ msgid "Erving" +#~ msgstr "歐文" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Essex" +#~ msgstr "埃塞克斯" -#~ msgid "You" -#~ msgstr "你" +#~ msgid "Etna" +#~ msgstr "埃特納" -#~ msgid "%s" -#~ msgstr "%s" +#~ msgid "Eustis" +#~ msgstr "尤斯蒂斯" -#~ msgid "ker-rash!" -#~ msgstr "咔-啦!" +#~ msgid "Everett" +#~ msgstr "埃弗雷特" -#~ msgid "whack!" -#~ msgstr "嘩!" +#~ msgid "Exeter" +#~ msgstr "埃克塞特" -#~ msgid "wham!" -#~ msgstr "嘩!" +#~ msgid "Fair Haven" +#~ msgstr "費爾黑文" -#~ msgid "whunk!" -#~ msgstr "咻!" +#~ msgid "Fairfax" +#~ msgstr "費爾法克斯" -#~ msgid "" -#~ "You were on your way to collect your check, when your pimp tried to kill " -#~ "you. You wish that it wasn't a common occurence. You start with a skirt, " -#~ "tank top, a pair of high heels, your stash, and a strong crack addiction." -#~ msgstr "" -#~ "你正在前往收皮肉錢的路上,結果馬伕變成殭屍差點吃了你。你只希望這只是個" -#~ "案。\r\n" -#~ "你一開始穿著裙子,細肩帶上衣以及一對高跟鞋。" +#~ msgid "Fairfield" +#~ msgstr "費爾菲爾德" -#~ msgid "" -#~ "Your flexible outlook on law has ensured your survival, but now what? You " -#~ "start with cargo pants, a hoodie, \"sundries\", and one additional level " -#~ "of melee." -#~ msgstr "" -#~ "你'有彈性'的法律觀念讓你在末日生存到現在,現在該怎麼繼續呢?你一開始擁有工" -#~ "作褲, 連帽衫, 雜物, 以及近戰技能 +1 。" +#~ msgid "Fairhaven" +#~ msgstr "費爾海文" -#~ msgid "" -#~ "Although you never got your driver's license, you've always loved cars. " -#~ "You start with a wrench, a toolbelt, and some car-related reading " -#~ "material." -#~ msgstr "" -#~ "儘管你連駕照都沒考到,你還是很喜歡折騰車子。\r\n" -#~ "身為一個汽車維修員,隨身帶著扳手, 工具腰帶, 還有一些車輛知識相關的書籍都是" -#~ "很合邏輯的。" +#~ msgid "Fairlee" +#~ msgstr "費爾里" -#~ msgid "York" -#~ msgstr "紐約" +#~ msgid "Fall River" +#~ msgstr "福爾里弗" -#~ msgid "Yarmouth" -#~ msgstr "雅默斯" +#~ msgid "Falmouth" +#~ msgstr "法爾茅斯" -#~ msgid "Wrentham" -#~ msgstr "倫瑟姆" +#~ msgid "Farmingdale" +#~ msgstr "法明戴爾" -#~ msgid "Worthington" -#~ msgstr "沃辛頓" +#~ msgid "Farmington" +#~ msgstr "法明頓" -#~ msgid "Worcester" -#~ msgstr "伍斯特" +#~ msgid "Fayette" +#~ msgstr "費耶特" -#~ msgid "Woonsocket" -#~ msgstr "文索基特" +#~ msgid "Fayston" +#~ msgstr "費耶斯頓" -#~ msgid "Woolwich" -#~ msgstr "伍爾維奇" +#~ msgid "Ferrisburg" +#~ msgstr "費瑞斯堡" -#~ msgid "Woodville" -#~ msgstr "伍德維爾" +#~ msgid "Fitchburg" +#~ msgstr "菲奇堡" -#~ msgid "Woodstock" -#~ msgstr "伍德斯托克" +#~ msgid "Fitzwilliam" +#~ msgstr "菲茨威廉" -#~ msgid "Woodland" -#~ msgstr "伍德蘭" +#~ msgid "Fletcher" +#~ msgstr "弗萊徹" -#~ msgid "Woodford" -#~ msgstr "伍德福德" +#~ msgid "Florida" +#~ msgstr "佛羅里達" -#~ msgid "Woodbury" -#~ msgstr "伍德伯里" +#~ msgid "Fomer towns:" +#~ msgstr "舊市鎮:" -#~ msgid "Woodbridge" -#~ msgstr "伍德布里奇" +#~ msgid "Forest City" +#~ msgstr "森林城市" -#~ msgid "Wolfeboro" -#~ msgstr "沃夫波洛" +#~ msgid "Fort Fairfield" +#~ msgstr "費爾菲爾德堡" -#~ msgid "Wolcott" -#~ msgstr "沃爾科特" +#~ msgid "Fort Kent" +#~ msgstr "肯特堡" -#~ msgid "Woburn" -#~ msgstr "沃本" +#~ msgid "Foxborough" +#~ msgstr "福克斯堡" -#~ msgid "Wiscasset" -#~ msgstr "威斯凱薩特" +#~ msgid "Framingham" +#~ msgstr "弗雷明漢" -#~ msgid "Winthrop" -#~ msgstr "溫斯洛普" +#~ msgid "Francestown" +#~ msgstr "弗蘭希斯鎮" -#~ msgid "Winterville Plantation" -#~ msgstr "溫特維爾森林" +#~ msgid "Franconia" +#~ msgstr "弗蘭肯" -#~ msgid "Winterport" -#~ msgstr "溫特波特" +#~ msgid "Frankfort" +#~ msgstr "法蘭克福" -#~ msgid "Winter Harbor" -#~ msgstr "冬港" +#~ msgid "Franklin" +#~ msgstr "富蘭克林" -#~ msgid "Winslow" -#~ msgstr "溫斯洛" +#~ msgid "Freedom" +#~ msgstr "費登" -#~ msgid "Winooski" -#~ msgstr "威努斯基" +#~ msgid "Freeman" +#~ msgstr "費曼" -#~ msgid "Winn" -#~ msgstr "威恩" +#~ msgid "Freeport" +#~ msgstr "自由港" -#~ msgid "Winhall" -#~ msgstr "溫荷" +#~ msgid "Freetown" +#~ msgstr "弗里敦" -#~ msgid "Windsor Locks" -#~ msgstr "溫莎洛克斯" +#~ msgid "Fremont" +#~ msgstr "弗里蒙特" -#~ msgid "Windsor" -#~ msgstr "溫莎" +#~ msgid "Frenchboro" +#~ msgstr "弗里曲波羅" -#~ msgid "Windham" -#~ msgstr "溫德姆" +#~ msgid "Frenchville" +#~ msgstr "弗里曲維爾" -#~ msgid "Winchester" -#~ msgstr "溫徹斯特" +#~ msgid "Friendship" +#~ msgstr "友誼市" -#~ msgid "Winchendon" -#~ msgstr "威其頓" +#~ msgid "Frye Island" +#~ msgstr "弗萊島" -#~ msgid "Wilton" -#~ msgstr "威爾頓" +#~ msgid "Fryeburg" +#~ msgstr "弗賴堡" -#~ msgid "Wilmot" -#~ msgstr "威爾莫特" +#~ msgid "Gardiner" +#~ msgstr "嘉丁納" -#~ msgid "Wilmington" -#~ msgstr "威爾明頓" +#~ msgid "Gardner" +#~ msgstr "加德納" -#~ msgid "Williston" -#~ msgstr "威利斯頓" +#~ msgid "Garfield Plantation" +#~ msgstr "加菲爾德森林" -#~ msgid "Willington" -#~ msgstr "威靈頓" +#~ msgid "Garland" +#~ msgstr "加蘭" -#~ msgid "Willimantic" -#~ msgstr "威利曼蒂克" +#~ msgid "Georgetown" +#~ msgstr "喬治城" -#~ msgid "Williamstown" -#~ msgstr "威廉斯鎮" +#~ msgid "Georgia" +#~ msgstr "喬治亞" -#~ msgid "Williamsburg" -#~ msgstr "威廉斯堡" +#~ msgid "Gilead" +#~ msgstr "吉利德" -#~ msgid "Wilbraham" -#~ msgstr "惠爾布拉漢" +#~ msgid "Gilford" +#~ msgstr "吉爾福特" -#~ msgid "Whitneyville" -#~ msgstr "惠特尼維爾" +#~ msgid "Gill" +#~ msgstr "吉爾" -#~ msgid "Whitman" -#~ msgstr "惠特曼" +#~ msgid "Gilmanton" +#~ msgstr "吉爾曼頓" -#~ msgid "Whitingham" -#~ msgstr "惠廷漢" +#~ msgid "Gilsum" +#~ msgstr "吉爾森" -#~ msgid "Whiting" -#~ msgstr "惠廷" +#~ msgid "Glastenbury" +#~ msgstr "格拉斯坦伯裡" -#~ msgid "Whitefield" -#~ msgstr "懷特菲爾德" +#~ msgid "Glastonbury" +#~ msgstr "格拉斯頓伯裡" -#~ msgid "Wheelock" -#~ msgstr "會德豐" +#~ msgid "Glenburn" +#~ msgstr "格倫本" -#~ msgid "Whately" -#~ msgstr "惠特利" +#~ msgid "Glenwood Plantation" +#~ msgstr "格倫伍德森林" -#~ msgid "Weymouth" -#~ msgstr "韋茅斯" +#~ msgid "Glocester" +#~ msgstr "格羅切斯特" -#~ msgid "Weybridge" -#~ msgstr "韋布里奇" +#~ msgid "Gloucester" +#~ msgstr "格洛斯特" -#~ msgid "Wethersfield" -#~ msgstr "韋瑟斯" +#~ msgid "Glover" +#~ msgstr "格洛弗" -#~ msgid "Westwood" -#~ msgstr "維斯特伍德" +#~ msgid "Goffstown" +#~ msgstr "高佛斯鎮" -#~ msgid "Westport" -#~ msgstr "西港" +#~ msgid "Gorham" +#~ msgstr "哥爾罕" -#~ msgid "Weston" -#~ msgstr "韋斯頓" +#~ msgid "Goshen" +#~ msgstr "歌珊" -#~ msgid "Westmoreland" -#~ msgstr "威斯特摩蘭" +#~ msgid "Gosnold" +#~ msgstr "戈斯諾爾德" -#~ msgid "Westmore" -#~ msgstr "威斯特莫爾" +#~ msgid "Gouldsboro" +#~ msgstr "古爾茲伯勒" -#~ msgid "Westminster" -#~ msgstr "威斯敏斯特" +#~ msgid "Grafton" +#~ msgstr "格拉夫頓" -#~ msgid "Westmanland" -#~ msgstr "維斯特曼蘭特" +#~ msgid "Granby" +#~ msgstr "格蘭比" -#~ msgid "Westhampton" -#~ msgstr "維斯特漢普敦" +#~ msgid "Grand Isle" +#~ msgstr "格蘭德艾爾" -#~ msgid "Westford" -#~ msgstr "威斯特福德" +#~ msgid "Grand Lake Stream" +#~ msgstr "格蘭德萊克" -#~ msgid "Westfield" -#~ msgstr "韋斯特菲爾德" +#~ msgid "Grantham" +#~ msgstr "格蘭瑟姆" -#~ msgid "Westerly" -#~ msgstr "威斯特里" +#~ msgid "Granville" +#~ msgstr "格蘭維爾" -#~ msgid "Westbrook" -#~ msgstr "威斯布魯克" +#~ msgid "Great Barrington" +#~ msgstr "格利巴陵頓" -#~ msgid "Westborough" -#~ msgstr "韋斯特伯勒" +#~ msgid "Great Pond" +#~ msgstr "大塘" -#~ msgid "West Windsor" -#~ msgstr "西溫莎" +#~ msgid "Greenbush" +#~ msgstr "格林布許" -#~ msgid "West Warwick" -#~ msgstr "西沃里克" +#~ msgid "Greene" +#~ msgstr "格林" -#~ msgid "West Tisbury" -#~ msgstr "西蒂斯伯里" +#~ msgid "Greenfield" +#~ msgstr "格林菲爾德" -#~ msgid "West Stockbridge" -#~ msgstr "西斯托克布里奇" +#~ msgid "Greenland" +#~ msgstr "格陵蘭" -#~ msgid "West Springfield" -#~ msgstr "西斯普林菲爾德" +#~ msgid "Greensboro" +#~ msgstr "格林斯伯勒" -#~ msgid "West Rutland" -#~ msgstr "西拉特蘭" +#~ msgid "Greenville" +#~ msgstr "格林維爾" -#~ msgid "West Paris" -#~ msgstr "巴黎西部" +#~ msgid "Greenwich" +#~ msgstr "格林威治" -#~ msgid "West Newbury" -#~ msgstr "西紐伯里" +#~ msgid "Greenwood" +#~ msgstr "格林伍德" -#~ msgid "West Haven" -#~ msgstr "西黑文" +#~ msgid "Griswold" +#~ msgstr "格里斯沃爾德" -#~ msgid "West Hartford" -#~ msgstr "西哈特福德" +#~ msgid "Groton" +#~ msgstr "格羅頓" -#~ msgid "West Greenwich" -#~ msgstr "西格林威治" +#~ msgid "Groveland" +#~ msgstr "格羅夫蘭" -#~ msgid "West Gardiner" -#~ msgstr "西加德納" +#~ msgid "Guildhall" +#~ msgstr "市政廳" -#~ msgid "West Forks" -#~ msgstr "西福克斯" +#~ msgid "Guilford" +#~ msgstr "吉爾福特" -#~ msgid "West Fairlee" -#~ msgstr "西費爾里" +#~ msgid "Haddam" +#~ msgstr "哈丹姆" -#~ msgid "West Brookfield" -#~ msgstr "西布魯克菲爾德" +#~ msgid "Hadley" +#~ msgstr "哈德利" -#~ msgid "West Bridgewater" -#~ msgstr "西布里奇沃特" +#~ msgid "Halifax" +#~ msgstr "哈利法克斯" -#~ msgid "West Boylston" -#~ msgstr "西波以斯敦" +#~ msgid "Hallowell" +#~ msgstr "哈洛韋爾" -#~ msgid "West Bath" -#~ msgstr "西巴斯" +#~ msgid "Hamden" +#~ msgstr "哈姆登" -#~ msgid "Wesley" -#~ msgstr "韋斯利" +#~ msgid "Hamilton" +#~ msgstr "漢密爾頓" -#~ msgid "Wentworth" -#~ msgstr "溫特沃斯" +#~ msgid "Hamlin" +#~ msgstr "哈姆林" -#~ msgid "Wenham" -#~ msgstr "韋納姆" +#~ msgid "Hammond" +#~ msgstr "哈蒙德" -#~ msgid "Wendell" -#~ msgstr "溫德爾" +#~ msgid "Hampden" +#~ msgstr "漢普登" -#~ msgid "Wells" -#~ msgstr "韋爾斯" +#~ msgid "Hampstead" +#~ msgstr "漢普斯特德" -#~ msgid "Wellington" -#~ msgstr "惠靈頓" +#~ msgid "Hampton" +#~ msgstr "漢普頓" -#~ msgid "Wellfleet" -#~ msgstr "韋爾弗利特" +#~ msgid "Hampton Falls" +#~ msgstr "漢普頓瀑布" -#~ msgid "Wellesley" -#~ msgstr "韋爾斯利" +#~ msgid "Hancock" +#~ msgstr "漢考克" -#~ msgid "Weld" -#~ msgstr "韋爾德" +#~ msgid "Hanover" +#~ msgstr "漢諾威" -#~ msgid "Webster Plantation" -#~ msgstr "韋伯斯特森林" +#~ msgid "Hanson" +#~ msgstr "漢森" -#~ msgid "Webster" -#~ msgstr "韋伯斯特" +#~ msgid "Hardwick" +#~ msgstr "哈德威克" -#~ msgid "Weathersfield" -#~ msgstr "維德斯菲爾德" +#~ msgid "Harmony" +#~ msgstr "哈蒙尼" -#~ msgid "Weare" -#~ msgstr "威爾" +#~ msgid "Harpswell" +#~ msgstr "哈普斯威爾" -#~ msgid "Wayne" -#~ msgstr "韋恩" +#~ msgid "Harrington" +#~ msgstr "哈靈頓" -#~ msgid "Wayland" -#~ msgstr "韋蘭" +#~ msgid "Harrison" +#~ msgstr "哈里森" -#~ msgid "Waterville Valley" -#~ msgstr "沃特維爾谷" +#~ msgid "Harrisville" +#~ msgstr "哈里斯維爾" -#~ msgid "Waterville" -#~ msgstr "沃特維爾" +#~ msgid "Hart's Location" +#~ msgstr "赫德之位" -#~ msgid "Watertown" -#~ msgstr "水城" +#~ msgid "Hartford" +#~ msgstr "哈特福" -#~ msgid "Waterford" -#~ msgstr "沃特福德" +#~ msgid "Hartland" +#~ msgstr "哈特蘭" -#~ msgid "Waterbury" -#~ msgstr "沃特伯里" +#~ msgid "Harvard" +#~ msgstr "哈佛" -#~ msgid "Waterboro" -#~ msgstr "沃特波羅" +#~ msgid "Harwich" +#~ msgstr "哈威奇" -#~ msgid "Washburn" -#~ msgstr "沃什本" +#~ msgid "Harwinton" +#~ msgstr "哈溫頓" -#~ msgid "Warwick" -#~ msgstr "華威" +#~ msgid "Hatfield" +#~ msgstr "哈特菲爾德" -#~ msgid "Warren" -#~ msgstr "沃倫" +#~ msgid "Haverhill" +#~ msgstr "哈福希爾" -#~ msgid "Warner" -#~ msgstr "華納" +#~ msgid "Hawley" +#~ msgstr "霍利" -#~ msgid "Wareham" -#~ msgstr "韋勒姆" +#~ msgid "Haynesville" +#~ msgstr "海恩斯維爾" -#~ msgid "Ware" -#~ msgstr "韋爾" +#~ msgid "Heath" +#~ msgstr "希思" -#~ msgid "Wardsboro" -#~ msgstr "沃德斯波羅" +#~ msgid "Hebron" +#~ msgstr "希伯倫" -#~ msgid "Waltham" -#~ msgstr "沃爾瑟姆" +#~ msgid "Henniker" +#~ msgstr "漢尼克" -#~ msgid "Walpole" -#~ msgstr "沃波爾" +#~ msgid "Hermon" +#~ msgstr "黑門" -#~ msgid "Wallingford" -#~ msgstr "瓦林福德" +#~ msgid "Hersey" +#~ msgstr "赫西" -#~ msgid "Wallagrass" -#~ msgstr "沃拉葛雷斯" +#~ msgid "Highgate" +#~ msgstr "高門" -#~ msgid "Wales" -#~ msgstr "威爾士" +#~ msgid "Highland Plantation" +#~ msgstr "高地森林" -#~ msgid "Waldoboro" -#~ msgstr "沃爾多波羅" +#~ msgid "Hillsborough" +#~ msgstr "希爾斯堡" -#~ msgid "Waldo" -#~ msgstr "沃爾多" +#~ msgid "Hinesburg" +#~ msgstr "海因斯堡" -#~ msgid "Walden" -#~ msgstr "沃爾登" +#~ msgid "Hingham" +#~ msgstr "欣厄姆" -#~ msgid "Wakefield" -#~ msgstr "韋克菲爾德" +#~ msgid "Hinsdale" +#~ msgstr "欣斯戴爾" -#~ msgid "Waitsfield" -#~ msgstr "韋茨菲爾德" +#~ msgid "Hiram" +#~ msgstr "希蘭" -#~ msgid "Waite" -#~ msgstr "韋特" +#~ msgid "Hodgdon" +#~ msgstr "霍奇登" -#~ msgid "Wade" -#~ msgstr "韋德" +#~ msgid "Holbrook" +#~ msgstr "霍爾布魯克" -#~ msgid "Voluntown" -#~ msgstr "沃倫特敦" +#~ msgid "Holden" +#~ msgstr "霍頓" -#~ msgid "Vinalhaven" -#~ msgstr "維諾黑文" +#~ msgid "Holderness" +#~ msgstr "霍爾德內斯" -#~ msgid "Vienna" -#~ msgstr "維也納" +#~ msgid "Holland" +#~ msgstr "荷蘭" -#~ msgid "Victory" -#~ msgstr "維克多里" +#~ msgid "Hollis" +#~ msgstr "霍利斯" -#~ msgid "Vershire" -#~ msgstr "維西爾" +#~ msgid "Holliston" +#~ msgstr "霍利斯頓" -#~ msgid "Verona Island" -#~ msgstr "維羅納島" +#~ msgid "Holyoke" +#~ msgstr "霍利奧克" -#~ msgid "Vernon" -#~ msgstr "弗農" +#~ msgid "Hooksett" +#~ msgstr "霍克賽特" -#~ msgid "Vergennes" -#~ msgstr "弗金斯" +#~ msgid "Hope" +#~ msgstr "霍普" -#~ msgid "Veazie" -#~ msgstr "維濟" +#~ msgid "Hopedale" +#~ msgstr "霍普戴勒" -#~ msgid "Vassalboro" -#~ msgstr "瓦薩波羅" +#~ msgid "Hopkinton" +#~ msgstr "霍普金頓" -#~ msgid "Vanceboro" -#~ msgstr "凡斯波羅" +#~ msgid "Houlton" +#~ msgstr "霍爾頓" -#~ msgid "Van Buren" -#~ msgstr "範布倫" +#~ msgid "Howland" +#~ msgstr "霍蘭德" -#~ msgid "Uxbridge" -#~ msgstr "阿克斯布里奇" +#~ msgid "Hubbardston" +#~ msgstr "霍巴德斯頓" -#~ msgid "Upton" -#~ msgstr "厄普頓" +#~ msgid "Hubbardton" +#~ msgstr "霍巴德頓" -#~ msgid "Unity" -#~ msgstr "尤你蒂" +#~ msgid "Hudson" +#~ msgstr "哈德森" -#~ msgid "Union" -#~ msgstr "尤你恩" +#~ msgid "Hull" +#~ msgstr "霍爾" -#~ msgid "Underhill" -#~ msgstr "昂德希爾" +#~ msgid "Huntington" +#~ msgstr "杭廷頓" -#~ msgid "Tyringham" -#~ msgstr "蒂林厄姆" +#~ msgid "Hurricane Isle" +#~ msgstr "颶風島" -#~ msgid "Tyngsborough" -#~ msgstr "蒂斯堡" +#~ msgid "Hyde Park" +#~ msgstr "海德公園" -#~ msgid "Tunbridge" -#~ msgstr "滕布里奇" +#~ msgid "Industry" +#~ msgstr "工業" -#~ msgid "Tuftonboro" -#~ msgstr "特魯菲伯羅" +#~ msgid "Ipswich" +#~ msgstr "伊普斯維奇" -#~ msgid "Truro" -#~ msgstr "特魯羅" +#~ msgid "Ira" +#~ msgstr "艾拉" -#~ msgid "Trumbull" -#~ msgstr "特朗布爾" +#~ msgid "Irasburg" +#~ msgstr "艾拉斯堡" -#~ msgid "Troy" -#~ msgstr "特洛伊" +#~ msgid "Island Falls" +#~ msgstr "瀑布島" -#~ msgid "Trescott" -#~ msgstr "特倫思科特" +#~ msgid "Isle La Motte" +#~ msgstr "拉蒙特島" -#~ msgid "Trenton" -#~ msgstr "特倫頓" +#~ msgid "Isle au Haut" +#~ msgstr "愛華特島" -#~ msgid "Tremont" -#~ msgstr "特里蒙特" +#~ msgid "Islesboro" +#~ msgstr "艾蘭斯伯羅" -#~ msgid "Townshend" -#~ msgstr "湯森漢德" +#~ msgid "Jackman" +#~ msgstr "傑克曼" -#~ msgid "Townsend" -#~ msgstr "湯森德" +#~ msgid "Jaffrey" +#~ msgstr "傑佛瑞" -#~ msgid "Torrington" -#~ msgstr "托靈頓" +#~ msgid "Jamaica" +#~ msgstr "牙買加" -#~ msgid "Topsham" -#~ msgstr "托普瑟姆" +#~ msgid "Jamestown" +#~ msgstr "詹姆斯敦" -#~ msgid "Topsfield" -#~ msgstr "托普斯費爾德" +#~ msgid "Jay" +#~ msgstr "傑伊" -#~ msgid "Tolland" -#~ msgstr "多爾蘭" +#~ msgid "Jefferson" +#~ msgstr "傑佛遜" -#~ msgid "Tiverton" -#~ msgstr "蒂弗頓" +#~ msgid "Jericho" +#~ msgstr "傑里科" -#~ msgid "Tisbury" -#~ msgstr "蒂斯伯里" +#~ msgid "Johnston" +#~ msgstr "約翰斯頓" -#~ msgid "Tinmouth" -#~ msgstr "蒂茂斯" +#~ msgid "Jonesboro" +#~ msgstr "瓊斯伯勒" -#~ msgid "Tilton" -#~ msgstr "蒂爾頓" +#~ msgid "Jonesport" +#~ msgstr "瓊斯港" -#~ msgid "Thornton" -#~ msgstr "桑頓" +#~ msgid "Keene" +#~ msgstr "基恩" -#~ msgid "Thorndike" -#~ msgstr "桑戴克" +#~ msgid "Kenduskeag" +#~ msgstr "肯德斯凱" -#~ msgid "Thomaston" -#~ msgstr "托馬斯頓" +#~ msgid "Kennebunk" +#~ msgstr "肯納邦克" -#~ msgid "Thetford" -#~ msgstr "塞特福德" +#~ msgid "Kennebunkport" +#~ msgstr "肯納邦克港" -#~ msgid "The Forks" -#~ msgstr "福克斯" +#~ msgid "Kensington" +#~ msgstr "肯辛頓" -#~ msgid "Tewksbury" -#~ msgstr "圖克斯伯里" +#~ msgid "Kent" +#~ msgstr "肯特" -#~ msgid "Templeton" -#~ msgstr "鄧普頓" +#~ msgid "Killingly" +#~ msgstr "基靈" -#~ msgid "Temple" -#~ msgstr "鄧普" +#~ msgid "Killington" +#~ msgstr "基靈頓" -#~ msgid "Taunton" -#~ msgstr "湯頓" +#~ msgid "Killingworth" +#~ msgstr "基靈沃斯" -#~ msgid "Tamworth" -#~ msgstr "塔姆沃思" +#~ msgid "Kingfield" +#~ msgstr "金菲爾德" -#~ msgid "Talmadge" -#~ msgstr "泰爾馬奇" +#~ msgid "Kingman" +#~ msgstr "金曼" -#~ msgid "Sweden" -#~ msgstr "瑞典" +#~ msgid "Kingsbury Plantation" +#~ msgstr "金斯伯里森林" -#~ msgid "Swanzey" -#~ msgstr "斯旺西" +#~ msgid "Kingston" +#~ msgstr "金士頓" -#~ msgid "Swanville" -#~ msgstr "斯旺維爾" +#~ msgid "Kirby" +#~ msgstr "柯比" -#~ msgid "Swanton" -#~ msgstr "斯旺頓" +#~ msgid "Kittery" +#~ msgstr "基特里" -#~ msgid "Swansea" -#~ msgstr "斯旺西" +#~ msgid "Knox" +#~ msgstr "諾克斯" -#~ msgid "Swans Island" -#~ msgstr "天鵝島" +#~ msgid "Laconia" +#~ msgstr "拉科尼亞" -#~ msgid "Swampscott" -#~ msgstr "斯旺普思科特" +#~ msgid "Lagrange" +#~ msgstr "拉格朗日" -#~ msgid "Sutton" -#~ msgstr "薩頓" +#~ msgid "Lake View Plantation" +#~ msgstr "湖景森林" -#~ msgid "Surry" -#~ msgstr "薩里" +#~ msgid "Lakeville" +#~ msgstr "萊克維爾" -#~ msgid "Surrey" -#~ msgstr "薩瑞" +#~ msgid "Lamoine" +#~ msgstr "拉蒙尼" -#~ msgid "Sunderland" -#~ msgstr "桑德蘭" +#~ msgid "Lancaster" +#~ msgstr "蘭開斯特" -#~ msgid "Sunapee" -#~ msgstr "桑納皮" +#~ msgid "Landaff" +#~ msgstr "蘭大福" -#~ msgid "Sumner" -#~ msgstr "薩姆納" +#~ msgid "Landgrove" +#~ msgstr "蘭德括福" -#~ msgid "Sullivan" -#~ msgstr "沙利文" +#~ msgid "Lanesborough" +#~ msgstr "蘭斯伯瑞" -#~ msgid "Sugar Hill" -#~ msgstr "糖山" +#~ msgid "Langdon" +#~ msgstr "蘭登" -#~ msgid "Suffield" -#~ msgstr "薩菲爾德" +#~ msgid "Lawrence" +#~ msgstr "勞倫斯" -#~ msgid "Sudbury" -#~ msgstr "薩德伯里" +#~ msgid "Lebanon" +#~ msgstr "黎巴嫩" -#~ msgid "Sturbridge" -#~ msgstr "斯特布里奇" +#~ msgid "Ledyard" +#~ msgstr "萊德亞德" -#~ msgid "Strong" -#~ msgstr "斯特朗" +#~ msgid "Leeds" +#~ msgstr "利茲" -#~ msgid "Stratton" -#~ msgstr "斯特拉頓" +#~ msgid "Leicester" +#~ msgstr "萊切斯特" -#~ msgid "Stratham" -#~ msgstr "斯特拉漢" +#~ msgid "Lemington" +#~ msgstr "萊明頓" -#~ msgid "Stratford" -#~ msgstr "斯特拉特福" +#~ msgid "Lempster" +#~ msgstr "萊普斯特" -#~ msgid "Strafford" -#~ msgstr "斯特拉福德" +#~ msgid "Lenox" +#~ msgstr "萊諾克斯" -#~ msgid "Stowe" -#~ msgstr "斯托" +#~ msgid "Leominster" +#~ msgstr "利奧明斯特" -#~ msgid "Stow" -#~ msgstr "斯托" +#~ msgid "Levant" +#~ msgstr "黎凡特" -#~ msgid "Stoughton" -#~ msgstr "斯托頓" +#~ msgid "Leverett" +#~ msgstr "萊弗里特" -#~ msgid "Stonington" -#~ msgstr "斯托寧頓" +#~ msgid "" +#~ "You're a high school drop-out with one goal in mind: to join the " +#~ "military. You finally got in, and now it's hell on Earth in cataclysmic " +#~ "proportions. You start out with some military gear, and a level in " +#~ "survival and firearms." +#~ msgstr "" +#~ "你高中輟學後心中就只有一個目標: 從軍 。你如願成為軍人,而現在正出現地球的" +#~ "大災難。你一開始便擁有一些軍用裝備, 以及基礎的 生存 與 槍械 技能。別擔心," +#~ "你身上沒有國防布。" -#~ msgid "Stoneham" -#~ msgstr "斯托納姆" +#~ msgid "" +#~ "Everyone at work knew you as the person who always had a cigarette or two " +#~ "in hand. Now, you're down to a single pack, and you hope you find more " +#~ "soon. You start out with a strong nicotine addiction, and 10 cigarettes." +#~ msgstr "" +#~ "你工作地方的每個人都知道你這個人總是嘴上叼著一根或兩根煙. 現在末日時期你降" +#~ "到一天只抽一包, 而你期望可以找到更多香煙. 你一開始便有很深的尼古丁上癮症狀" +#~ "以及10根香煙." -#~ msgid "Stoddard" -#~ msgstr "斯托達德" +#~ msgid "" +#~ "You lived on the streets your whole life because you would rather have a " +#~ "bottle of whiskey than a roof over your head. You start with a strong " +#~ "alcohol addiction and a pair of pants." +#~ msgstr "" +#~ "你的一生都流落街頭, 因為你覺得買房子還不如拿去買酒喝. 你一開始便有嚴重的酒" +#~ "精上癮症狀以及一條褲子." -#~ msgid "Stockton Springs" -#~ msgstr "斯托克頓泉" +#~ msgid "" +#~ "You've traveled for a living, sightseeing here and there, and living off " +#~ "your parents' trust fund. But now they're gone, and the only thing " +#~ "between you and death is the open road and your backpack." +#~ msgstr "" +#~ "你生存的意義是旅行,四處觀光,有你父母的信託基金讓你生活寬裕。但這些已經是" +#~ "過去式了,你和你的背包就是你現在生存的關鍵。" -#~ msgid "Stockholm" -#~ msgstr "斯德哥爾摩" +#~ msgid "" +#~ "You were one of those guys who watched one too many survivalist shows. " +#~ "You start with a backpack, a blazer, and some survival skills." +#~ msgstr "" +#~ "你就像是那些看了太多生存節目的人一樣. 你開始便有背包, 外套, 以及一些生存" +#~ "技能." -#~ msgid "Stockbridge" -#~ msgstr "斯托克布里奇" +#~ msgid "" +#~ "You used to work for some small-time business owner doing minor " +#~ "electrical work, and you just so happened to be working on an evac " +#~ "shelter when the cataclysm struck. You start with a level in electronics, " +#~ "and a tool belt." +#~ msgstr "" +#~ "你平常都承包一些企業有關電力的小案子, 而大災變爆發時你正好在避難所工作. 你" +#~ "一開始便有基本的電子學, 以及工具腰帶." -#~ msgid "Stewartstown" -#~ msgstr "斯圖爾茨敦" +#~ msgid "" +#~ "You were in the middle of a nice shower when the cataclysm struck! You " +#~ "start buck naked." +#~ msgstr "你洗澡洗一半就爆發大災變! 你全身光溜溜的逃生!" -#~ msgid "Steuben" -#~ msgstr "斯圖本" +#~ msgid "" +#~ "You spent most of your life on a Harley, and it's only natural you spend " +#~ "the rest of it riding one. You start with some biker clothes." +#~ msgstr "" +#~ "你大半日子都在哈雷上度過, 只有在機車上你才能感受生命的意義. 你一開始便有一" +#~ "些騎士的衣物." -#~ msgid "Stetson" -#~ msgstr "斯泰森" +#~ msgid "" +#~ "You used to be a ballroom dancer before the cataclysm, and now you use " +#~ "your skills to save your life. You start with a tuxedo and a level in " +#~ "dodging." +#~ msgstr "" +#~ "在大災變前你是舞廳的舞者, 而你利用你的技巧來自救. 你一開始便有燕尾服及基本" +#~ "閃避技能." -#~ msgid "Sterling" -#~ msgstr "斯特林" +#~ msgid "" +#~ "You worked for a small-time security company guarding local businesses. " +#~ "You start with a security outfit and a flashlight." +#~ msgstr "你在當地的一個小公司擔任保全. 你一開始便有保全制服及手電筒." -#~ msgid "Starksboro" -#~ msgstr "史塔克伯羅" +#~ msgid "" +#~ "You've always loved tinkering with stuff. You start with a tool belt, and " +#~ "know a little bit about mechanics, tailoring, electronics, and carpentry." +#~ msgstr "" +#~ "你總是喜歡自己動手折騰一些東西. 你一開始擁有工具腰帶, 以及一些機械, 裁縫, " +#~ "電子, 木工的技能." -#~ msgid "Starks" -#~ msgstr "史塔克斯" +#~ msgid "" +#~ "You've worked the streets since you were a kid, and now you use your " +#~ "street skills to survive. You start with a Glock 19 and some of your " +#~ "\"goods\", but no bullets." +#~ msgstr "" +#~ "你從小就在街頭工作。所以你知道怎麼運用你的技能來生存。你一開始帶著 沒子彈" +#~ "的格洛克19手槍,以及一些 \"好料\" 。" -#~ msgid "Stark" -#~ msgstr "史塔克" +#~ msgid "" +#~ "You were about to marry your bride before the cataclysm, now you spend " +#~ "you days searching for her." +#~ msgstr "你在大災變前才正要娶你的新娘, 而你現在正找尋著她." -#~ msgid "Stannard" -#~ msgstr "斯坦納德" +#~ msgid "" +#~ "Before the Apocalypse, you turned to Heroin to soothe your many " +#~ "problems.\n" +#~ "Now, your habit is your only comfort and your only drive." +#~ msgstr "" +#~ "在大災變之前, 你吸食海洛因來逃避你的問題.\n" +#~ "現在,你的毒癮是你唯一的安慰。" -#~ msgid "Standish" -#~ msgstr "斯坦迪什" +#~ msgid "" +#~ "You haven't seen this much blood since the war. The whole world's gone " +#~ "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay " +#~ "for what they've done. You start with a cane and your pocketwatch." +#~ msgstr "" +#~ "你在戰爭中也沒看過這麼血腥的狀況。整個世界都瘋了! 他們吃了你的孫子! 他奶奶" +#~ "的熊,你會讓他們付出代價的。你開始時帶著 手杖 以及你的 懷錶 。" -#~ msgid "Stamford" -#~ msgstr "斯坦福" +#~ msgid "" +#~ "Being a paramedic put you in a bad spot when it all ended. You had to " +#~ "fight your way out of a hospital full of infected to get to the shelter. " +#~ "You start with a few related tools and some skill in first aid." +#~ msgstr "" +#~ "在末日時當一個醫護兵真是一個糟糕的狀況。你必須在滿是感染的醫院找到自己的出" +#~ "路,直到逃離至避難所。你開始時擁有相關工具以及一些 急救 技能。" -#~ msgid "Stafford" -#~ msgstr "斯塔福德" +#~ msgid "firearms" +#~ msgstr "槍械" -#~ msgid "Stacyville" -#~ msgstr "史黛西維爾" +#~ msgid "OTD" +#~ msgstr "消息" -#~ msgid "St. Johnsbury" -#~ msgstr "聖約翰伯里" +#~ msgid "ew Game" +#~ msgstr "新遊戲" -#~ msgid "St. George" -#~ msgstr "聖喬治" +#~ msgid "oad" +#~ msgstr "讀取" -#~ msgid "St. Francis" -#~ msgstr "聖弗朗西斯" +#~ msgid "pecial" +#~ msgstr "特殊" -#~ msgid "St. Albans" -#~ msgstr "聖奧爾本斯" +#~ msgid "ptions" +#~ msgstr "選項" -#~ msgid "St. Agatha" -#~ msgstr "聖愛葛莎" +#~ msgid "elp" +#~ msgstr "說明" -#~ msgid "Springfield" -#~ msgstr "斯普林菲爾德" +#~ msgid "redits" +#~ msgstr "製作名單" -#~ msgid "Sprague" -#~ msgstr "斯普拉格" +#~ msgid "uit" +#~ msgstr "離開" -#~ msgid "Spencer" -#~ msgstr "斯賓塞" +#~ msgid "ustom Character" +#~ msgstr "自定角色" -#~ msgid "Southwick" -#~ msgstr "索斯威克" +#~ msgid "

reset Character" +#~ msgstr "

模板角色" -#~ msgid "Southwest Harbor" -#~ msgstr "西南港" +#~ msgid "andom Character" +#~ msgstr "隨機角色" -#~ msgid "Southport" -#~ msgstr "紹斯波特" +#~ msgid "Play ow!" +#~ msgstr "立刻玩!" -#~ msgid "Southington" -#~ msgstr "索辛頓" +#~ msgid "metal screeching!" +#~ msgstr "金屬嘎嘎聲!" -#~ msgid "Southbury" -#~ msgstr "紹斯伯里" +#~ msgid "clang!" +#~ msgstr "鐺!" -#~ msgid "Southbridge" -#~ msgstr "南布里奇" +#~ msgid "porcelain breaking!" +#~ msgstr "瓷器破碎聲!" -#~ msgid "Southborough" -#~ msgstr "紹斯伯勒" +#~ msgid "whump!" +#~ msgstr "呼!" -#~ msgid "Southampton" -#~ msgstr "南安普敦" +#~ msgid "brush." +#~ msgstr "唰唰聲." -#~ msgid "South Windsor" -#~ msgstr "南溫莎" +#~ msgid "%s's %s" +#~ msgstr "%s 的 %s" -#~ msgid "South Thomaston" -#~ msgstr "南托馬斯頓" +#~ msgid "%1$s cut %4$s" +#~ msgstr "%1$s 砍劈 %4$s" -#~ msgid "South Portland" -#~ msgstr "南波特蘭" +#~ msgid "%1$s whacks %4$s" +#~ msgstr "%1$s 重擊 %4$s" -#~ msgid "South Kingstown" -#~ msgstr "南金斯敦" +#~ msgid " for %d damage." +#~ msgstr " 造成 %d 傷害。" -#~ msgid "South Hero" -#~ msgstr "南希羅" +#~ msgid "The %s's corpse melts into a pool of acid." +#~ msgstr "%s 的屍體溶化成了一灘酸液。" -#~ msgid "South Hampton" -#~ msgstr "南漢普頓" +#~ msgid "a boomer explodes!" +#~ msgstr "嘔吐者爆炸了!" -#~ msgid "South Hadley" -#~ msgstr "南哈德利" +#~ msgid "It disintegrates!" +#~ msgstr "它崩解了!" -#~ msgid "South Burlington" -#~ msgstr "南伯靈頓" +#~ msgid "You feel terrible for killing %s!" +#~ msgstr "殺了 %s 讓你感覺很糟!" -#~ msgid "South Bristol" -#~ msgstr "南布里斯托爾" +#~ msgid "The %s splatters into tiny, dead pieces." +#~ msgstr "%s 四散成了屍體碎片。" -#~ msgid "South Berwick" -#~ msgstr "南貝里克" +#~ msgid "The %s splits!" +#~ msgstr "%s 分裂!" -#~ msgid "Sorrento" -#~ msgstr "索倫托" +#~ msgid "The %s melts away!" +#~ msgstr "%s 融化了!" -#~ msgid "Somerville" -#~ msgstr "薩默維爾" +#~ msgid "a smoker explodes!" +#~ msgstr "煙霧殭屍爆炸了!" -#~ msgid "Somersworth" -#~ msgstr "薩默沃斯" +#~ msgid "Your %s is destroyed! GAME OVER!" +#~ msgstr "你的 %s 被摧毀! 遊戲結束!" -#~ msgid "Somerset" -#~ msgstr "薩默塞特" +#~ msgid "A small woodland animal." +#~ msgstr "小型森林動物" -#~ msgid "Somers" -#~ msgstr "薩默斯" +#~ msgid "A large buck, fast-moving and strong." +#~ msgstr "大型哺乳類動物,移動快速且強壯。" -#~ msgid "Solon" -#~ msgstr "梭倫" +#~ msgid "A buck of the largest deer species." +#~ msgstr "最大型的鹿種" -#~ msgid "Smyrna" -#~ msgstr "士麥那" +#~ msgid "A grey wolf. A vicious and fast pack hunter." +#~ msgstr "一頭灰狼。惡毒的獵食性動物。" -#~ msgid "Smithfield" -#~ msgstr "史密斯菲爾德" +#~ msgid "" +#~ "An eastern coyote, also called tweed wolf. It is an hybrid of grey wolves " +#~ "and the smaller western coyotes." +#~ msgstr "" +#~ "郊狼,也叫草原狼、北美小狼,是犬科犬屬的一種,與狼是近親。郊狼產於北美大陸" +#~ "的廣大地區,北起阿拉斯加、南到巴拿馬。歐洲探險家最初是在美國西南部發現這種" +#~ "動物的。郊狼一般單獨獵食,偶爾也會組成小型的群體。平均壽命為6-10年。" -#~ msgid "Skowhegan" -#~ msgstr "思科西根" +#~ msgid "An american black bear. Remember, only YOU can prevent forest fires." +#~ msgstr "" +#~ "熊,是一種雜食性大型哺乳類,屬於食肉目犬形亞目熊科,現存進化關係最近的物種" +#~ "是鰭足類和犬科。現在地球上有八種熊,廣泛分布北半球和南半球的一部分,如亞" +#~ "洲、歐洲、美洲和北極。 常見的特徵是身軀龐大、四肢粗壯有力、長鼻子、厚毛" +#~ "髮、短尾、跖行足、每隻腳爪上有五個彎曲鋒利不能回縮的爪子。" -#~ msgid "Simsbury" -#~ msgstr "錫姆斯伯里" +#~ msgid "A vicious and fast hunter." +#~ msgstr "" +#~ "美洲獅是種棲息於北美洲、中美洲、甚至南美洲的食肉目貓科動物。 美洲獅分類上" +#~ "屬美洲金貓屬。美洲獅在跳躍方面有著驚人的「天賦」,它輕輕一跳,便能跳到6—7" +#~ "米以外,更厲害的一躍可達40英呎,高達13英呎。" -#~ msgid "Sidney" -#~ msgstr "西德尼" +#~ msgid "A medium-sized domesticated dog, gone feral." +#~ msgstr "中型大小訓養過的狗,變得有野性了。" -#~ msgid "Shutesbury" -#~ msgstr "肖茲伯里" +#~ msgid "A small domesticated cat, gone feral." +#~ msgstr "小型訓養過的貓,變得有野性了。" -#~ msgid "Shrewsbury" -#~ msgstr "什魯斯伯里" +#~ msgid "" +#~ "The size of a large cat, this pulsating mass\n" +#~ "of glistening white flesh turns your stomach." +#~ msgstr "" +#~ "與大貓的尺寸相仿,這有脈動的白色\n" +#~ "血肉讓你覺得噁心。" -#~ msgid "Shoreham" -#~ msgstr "索爾海姆" +#~ msgid "" +#~ "A red ant the size of a crocodile. It is\n" +#~ "covered in chitinous armor, and has a pair of\n" +#~ "vicious mandibles." +#~ msgstr "" +#~ "與鱷魚尺寸相仿的紅蟻。\n" +#~ "全身覆蓋甲殼護甲,並有\n" +#~ "一對有毒的下顎。" -#~ msgid "Shirley" -#~ msgstr "雪莉" +#~ msgid "" +#~ "Darker in color than the other ants, this\n" +#~ "more aggresive variety has even larger\n" +#~ "mandibles." +#~ msgstr "" +#~ "顏色比其他螞蟻深,\n" +#~ "這個更具侵略性的品種有著\n" +#~ "更大的下顎。" -#~ msgid "Sherman" -#~ msgstr "謝爾曼" +#~ msgid "" +#~ "This ant has a long, bloated thorax, bulging\n" +#~ "with hundreds of small ant eggs. It moves\n" +#~ "slowly, tending to nearby eggs and laying\n" +#~ "still more." +#~ msgstr "" +#~ "這種螞蟻有一個長而臃腫的胸腔,懷著\n" +#~ "數以百計的小螞蟻卵。移動很緩慢並且\n" +#~ "會產下許多的卵。" -#~ msgid "Sherborn" -#~ msgstr "謝爾本" +#~ msgid "fungal insect" +#~ msgstr "真菌蟲" -#~ msgid "Shelton" -#~ msgstr "謝爾頓" +#~ msgid "" +#~ "This insect is pale gray in color, its\n" +#~ "chitin weakened by the fungus sprouting\n" +#~ "from every joint on its body." +#~ msgstr "" +#~ "這個蟲是灰色的,其全身\n" +#~ "甲殼因為被真菌寄生所以\n" +#~ "變得薄弱。" -#~ msgid "Sheldon" -#~ msgstr "謝爾頓" +#~ msgid "" +#~ "A large housefly the size of a small dog.\n" +#~ "It buzzes around incessantly." +#~ msgstr "" +#~ "一支蒼蠅有著小狗的大小。\n" +#~ "嗡嗡作響的不停飛舞。" -#~ msgid "Shelburne" -#~ msgstr "謝爾本" +#~ msgid "" +#~ "A honey bee the size of a small dog. It\n" +#~ "buzzes angrily through the air, dagger-\n" +#~ "sized sting pointed forward." +#~ msgstr "" +#~ "一支蜜蜂有著小狗的大小。\n" +#~ "在空中憤怒的嗡嗡飛舞,\n" +#~ "匕首大小的毒針指著前方。" -#~ msgid "Sheffield" -#~ msgstr "謝菲爾德" +#~ msgid "" +#~ "An evil-looking, slender-bodied wasp with\n" +#~ "a vicious sting on its abdomen." +#~ msgstr "" +#~ "有著邪惡、瘦長外表的黃蜂,\n" +#~ "腹部帶著劇毒的刺針。" -#~ msgid "Sharon" -#~ msgstr "夏隆" +#~ msgid "" +#~ "A hideous slithering beast with a tri-\n" +#~ "sectional mouth that opens to reveal\n" +#~ "hundreds of writhing tongues. Most of its\n" +#~ "enormous body is hidden underground." +#~ msgstr "" +#~ "一個恐怖的滑行怪物。有著三向裂口\n" +#~ "與數以百計的捲動舌。它龐大的身軀\n" +#~ "大部分都隱藏在地底。" -#~ msgid "Shapleigh" -#~ msgstr "沙布雷" +#~ msgid "" +#~ "Half of this monster is emerging from a\n" +#~ "hole in the ground. It looks like a huge\n" +#~ "earthworm, but the end has split into a\n" +#~ "large, fanged mouth." +#~ msgstr "" +#~ "這怪物的一半身軀露出在地洞之外。\n" +#~ "看起來像是個巨大的蚯蚓,但是前段\n" +#~ "已經特化成了一個有大型獠牙的嘴。" -#~ msgid "Shaftsbury" -#~ msgstr "沙夫茨伯里" +#~ msgid "A portion of a giant worm that is still alive." +#~ msgstr "巨蟲的部分身軀,而且還活著。" -#~ msgid "Seymour" -#~ msgstr "西摩爾" +#~ msgid "" +#~ "A human body, stumbling slowly forward on\n" +#~ "uncertain legs, possessed with an unstoppable\n" +#~ "rage." +#~ msgstr "" +#~ "人的身體,跌跌撞撞的緩慢前進,\n" +#~ "無法遏止他往前吃人的慾望。" -#~ msgid "Seekonk" -#~ msgstr "錫康克" +#~ msgid "" +#~ "A human body, encapsulated in tough riot\n" +#~ "armour, this zombie was clearly a cop gearing\n" +#~ "up to fight the infection." +#~ msgstr "" +#~ "人的身體裝在堅固的鎮暴護具中,\n" +#~ "這個殭屍生前明顯是個敬業的警察。" -#~ msgid "Sedgwick" -#~ msgstr "塞奇威克" +#~ msgid "" +#~ "This zombie's jaw has been torn off, leaving\n" +#~ "a gaping hole from mid-neck up." +#~ msgstr "" +#~ "這個僵屍的下顎已經被撕裂了,\n" +#~ "在頸部中央開了一個大洞。" -#~ msgid "Seboeis Plantation" -#~ msgstr "錫波伊斯森林" +#~ msgid "" +#~ "This zombie's mouth is deformed into a round\n" +#~ "spitter, and its body throbs with a dense\n" +#~ "yellow fluid." +#~ msgstr "" +#~ "這個殭屍的嘴巴退化成了噴管,\n" +#~ "身體中流動著濃稠的黃色液體。" -#~ msgid "Sebec" -#~ msgstr "錫比克" +#~ msgid "" +#~ "This zombie's flesh is pale blue, and it\n" +#~ "occasionally crackles with small bolts of\n" +#~ "lightning." +#~ msgstr "" +#~ "這個殭屍的肉體是藍色的,\n" +#~ "並且三不五時就發出電流聲。" -#~ msgid "Sebago" -#~ msgstr "錫巴勾" +#~ msgid "" +#~ "This zombie emits a constant haze of\n" +#~ "thick, obfuscating smoke." +#~ msgstr "這個殭屍會產生不定大小的濃煙。" -#~ msgid "Searsport" -#~ msgstr "錫爾斯港" +#~ msgid "" +#~ "This zombie's hands and feet are\n" +#~ "webbed, and it is clad in swimwear." +#~ msgstr "" +#~ "這個殭屍的手掌與腳掌都有蹼\n" +#~ "並且穿著泳裝。" -#~ msgid "Searsmont" -#~ msgstr "錫爾斯蒙特" +#~ msgid "" +#~ "This deformed, sinewy canine stays close to\n" +#~ "the ground, loping forward faster than most\n" +#~ "humans ever could." +#~ msgstr "" +#~ "這個強而有力的畸形生物向前的\n" +#~ "追擊速度比一般的人類更快。" -#~ msgid "Searsburg" -#~ msgstr "錫爾斯堡" +#~ msgid "" +#~ "This zombie seems to have slightly longer\n" +#~ "than ordinary arms, and constantly gropes\n" +#~ "at its surroundings as it moves." +#~ msgstr "" +#~ "這個殭屍有著比一般人長的手臂\n" +#~ "當他移動時手臂會纏繞在他自己\n" +#~ "身體四周,小心別被抓住。" -#~ msgid "Seabrook" -#~ msgstr "錫布魯克" +#~ msgid "master zombie" +#~ msgstr "殭屍王" -#~ msgid "Scotland" -#~ msgstr "蘇格蘭" +#~ msgid "child zombie" +#~ msgstr "殭屍小孩" -#~ msgid "Scituate" -#~ msgstr "錫楚埃特" +#~ msgid "" +#~ "A plant that grows as high as your head,\n" +#~ "with one thick, bark-coated stalk\n" +#~ "supporting a flower-like head with a sharp\n" +#~ "sting within." +#~ msgstr "" +#~ "一株植物與你的身高差不多,\n" +#~ "有著厚實,齒狀的莖\n" +#~ "頂部有著花狀的頭部以及\n" +#~ "尖刺。" -#~ msgid "Scarborough" -#~ msgstr "士嘉堡" +#~ msgid "young triffid" +#~ msgstr "小食人樹" -#~ msgid "Savoy" -#~ msgstr "薩沃伊" +#~ msgid "" +#~ "A small triffid, only a few feet tall. It\n" +#~ "has not yet developed bark, but its sting\n" +#~ "is still sharp and deadly." +#~ msgstr "" +#~ "一株小型的食人樹,只有幾呎高。\n" +#~ "莖齒的部份還沒發育完全,但是很\n" +#~ "刺且鋒利,被咬到還是很致命。" -#~ msgid "Saugus" -#~ msgstr "索格斯" +#~ msgid "queen triffid" +#~ msgstr "王后食人樹" -#~ msgid "Sangerville" -#~ msgstr "桑格維爾" +#~ msgid "young fungaloid" +#~ msgstr "小食人蕈" -#~ msgid "Sanford" -#~ msgstr "桑福德" +#~ msgid "spore" +#~ msgstr "孢子" -#~ msgid "Sandy River Plantation" -#~ msgstr "姍蒂河森林" +#~ msgid "web spider" +#~ msgstr "網蛛" -#~ msgid "Sandwich" -#~ msgstr "桑威治" +#~ msgid "Snake" +#~ msgstr "蛇形拳" -#~ msgid "Sandown" -#~ msgstr "桑當" +#~ msgid "Toad" +#~ msgstr "蛤蟆毒" -#~ msgid "Sandisfield" -#~ msgstr "桑地斯菲爾德" +#~ msgid "You cannot save a template with unused points!" +#~ msgstr "你不能在點數沒用完的狀況下把角色存成模板!" -#~ msgid "Sandgate" -#~ msgstr "桑蓋特" +#~ msgid "Use Celsius" +#~ msgstr "溫度格式" -#~ msgid "Sanbornton" -#~ msgstr "聖伯敦" +#~ msgid "Use Metric Speeds" +#~ msgstr "速度格式" -#~ msgid "Salisbury" -#~ msgstr "索爾茲伯里" +#~ msgid "Switch between Km/h and mph." +#~ msgstr "於 Km/h 及 mph 間切換。" -#~ msgid "Salem" -#~ msgstr "塞勒姆" +#~ msgid "Use Metric Weights" +#~ msgstr "重量格式" -#~ msgid "Saint John Plantation" -#~ msgstr "聖約翰森林" +#~ msgid "" +#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." +#~ msgstr "" +#~ "假如設為 是 , Y/N 的提示會變成大小寫敏感,只輸入小寫的 y 及 n 是不會被接" +#~ "受的。" -#~ msgid "Saco" -#~ msgstr "索科" +#~ msgid "No Bright Backgrounds" +#~ msgstr "無亮色背景" -#~ msgid "Sabattus" -#~ msgstr "賽巴德斯" +#~ msgid "" +#~ "If true, bright backgrounds are not used--some consoles are not " +#~ "compatible." +#~ msgstr "設為 是 的話,亮色背景將不會被使用(某些機器不相容)。" -#~ msgid "Ryegate" -#~ msgstr "瑞伊蓋特" +#~ msgid "24 Hour Time" +#~ msgstr "時間格式" -#~ msgid "Rye" -#~ msgstr "瑞伊" +#~ msgid "Snap to Target" +#~ msgstr "自動瞄準目標" -#~ msgid "Rutland" -#~ msgstr "拉特蘭" +#~ msgid "Auto-Safemode on by default" +#~ msgstr "預設開啟自動安全模式" -#~ msgid "Rupert" -#~ msgstr "魯珀特" +#~ msgid "Periodically Autosave" +#~ msgstr "定時自動存檔" -#~ msgid "Rumney" -#~ msgstr "拉姆尼" +#~ msgid "Skill Rust" +#~ msgstr "技能衰減" -#~ msgid "Rumford" -#~ msgstr "拉姆福德" +#~ msgid "Delete World" +#~ msgstr "死亡後刪除世界" -#~ msgid "Royalton" -#~ msgstr "羅亞爾頓" +#~ msgid "Delete world upon player death." +#~ msgstr "只要玩家一死亡後就刪除世界。" -#~ msgid "Royalston" -#~ msgstr "羅亞爾斯頓" +#~ msgid "Hide Mouse Cursor" +#~ msgstr "隱藏滑鼠指標" -#~ msgid "Roxbury" -#~ msgstr "羅克斯伯里" +#~ msgid "Enable item Auto Pickup" +#~ msgstr "啟用物品自動撿取" -#~ msgid "Rowley" -#~ msgstr "羅利" +#~ msgid "Auto Pickup 0 Vol light items" +#~ msgstr "自動撿取 0 體積重量物品" -#~ msgid "Rowe" -#~ msgstr "羅維" +#~ msgid "Auto Pickup Safemode" +#~ msgstr "自動撿取的安全模式" -#~ msgid "Roque Bluffs" -#~ msgstr "羅克布拉福" +#~ msgid "Use Tiles" +#~ msgstr "使用圖形畫面" -#~ msgid "Rome" -#~ msgstr "羅馬" +#~ msgid "" +#~ "If true, replaces some TTF rendered text with Tiles. Only applicable on " +#~ "SDL builds. Requires restart." +#~ msgstr "" +#~ "設置為 是,將會顯示圖形畫面而非符號畫面。只有在 SDL 版本才能使用。必須重新" +#~ "啟動遊戲。" -#~ msgid "Rollinsford" -#~ msgstr "羅林斯福德" +#~ msgid "0 - Center map on character" +#~ msgstr "0 - 角色居中" -#~ msgid "Rocky Hill" -#~ msgstr "洛基山" +#~ msgid "/ - Search " +#~ msgstr "/ - 搜尋 " -#~ msgid "Rockport" -#~ msgstr "羅克波特" +#~ msgid "N - Add/Edit a note " +#~ msgstr "N - 增加/編輯 註記 " -#~ msgid "Rockland" -#~ msgstr "羅克蘭" +#~ msgid "D - Delete a note " +#~ msgstr "D - 刪除註記 " -#~ msgid "Rockingham" -#~ msgstr "羅金厄姆" +#~ msgid "L - List notes " +#~ msgstr "L - 註記列表 " -#~ msgid "Rochester" -#~ msgstr "羅切斯特" +#~ msgid "Esc or q - Return to game " +#~ msgstr "Esc 或 q - 返回遊戲 " -#~ msgid "Robbinston" -#~ msgstr "羅賓斯頓" +#~ msgid "ENCUMBERANCE AND WARMTH" +#~ msgstr "累贅和保暖" -#~ msgid "Ripton" -#~ msgstr "里普敦" +#~ msgid "" +#~ "Head encumberance has no effect; it simply limits how much you can put on." +#~ msgstr "頭部累贅度沒有影響; 僅僅限制你能穿上的東西." -#~ msgid "Ripley" -#~ msgstr "里普利" +#~ msgid "" +#~ "Your %s already has 4 mods installed! To remove the mods,press 'U' while " +#~ "wielding the unloaded gun." +#~ msgstr "" +#~ "你的 %s 已經安裝了 4 個模組! 要移除模組,手持未裝填的槍械接著按 'U' ." -#~ msgid "Rindge" -#~ msgstr "瑞恩奇" +#~ msgid " +Dodge" +#~ msgstr " +閃避" -#~ msgid "Ridgefield" -#~ msgstr "里奇菲爾德" +#~ msgid " +Attack" +#~ msgstr " +攻擊" -#~ msgid "Richmond" -#~ msgstr "里士滿" +#~ msgid " +Damage" +#~ msgstr " +傷害" -#~ msgid "Richford" -#~ msgstr "里奇福德" +#~ msgid "Safe speed: Km/h" +#~ msgstr "安全速度: Km/h" -#~ msgid "Revere" -#~ msgstr "瑞佛爾" +#~ msgid "Top speed: Km/h" +#~ msgstr "最高速度: Km/h" -#~ msgid "Rehoboth" -#~ msgstr "雷霍伯斯" +#~ msgid "Safe speed: mph" +#~ msgstr "安全速度: mph" -#~ msgid "Reed Plantation" -#~ msgstr "瑞德森林" +#~ msgid "Top speed: mph" +#~ msgstr "最高速度: mph" -#~ msgid "Readsboro" -#~ msgstr "瑞斯保羅" +#~ msgid "Your raincoat protects you from the acidic drizzle." +#~ msgstr "你的雨衣保護你不被酸雨傷害。" -#~ msgid "Reading" -#~ msgstr "瑞丁" +#~ msgid "Contruct" +#~ msgstr "建設" -#~ msgid "Readfield" -#~ msgstr "雷德菲爾德" +#~ msgid "" +#~ "Many important items can be very hard to find, or will cost a great deal " +#~ "of\n" +#~ "money to trade for. Fortunately, it is possible to craft a wide variety " +#~ "of\n" +#~ "goods with the proper tools, materials, and training.\n" +#~ "\n" +#~ "Some recipes require a set of tools. These are not used up when " +#~ "crafting,\n" +#~ "so you can keep your tool set. All recipes require one or more " +#~ "ingredients.\n" +#~ "These ARE used up in crafting.\n" +#~ "\n" +#~ "%sThere are five categories; Weapons, Food, \n" +#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" +#~ "no skill to create, the majority require you to have some knowledge:\n" +#~ "\n" +#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" +#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" +#~ "at higher levels, you have an understanding of chemistry and can make\n" +#~ "chemical weapons and beneficial elixirs.\n" +#~ "->Electronics skill lets you make a wide variety of tools with intricate " +#~ "uses.\n" +#~ "->Tailoring skill is used to create basic clothing, and later tough " +#~ "armor.\n" +#~ "\n" +#~ "In addition to the primary crafting skills, other skills may be " +#~ "necessary\n" +#~ "to create certain items. Traps skill, Firearms skill, and First Aid " +#~ "skill\n" +#~ "are all required for certain items." +#~ msgstr "" +#~ "許多重要的物品難以被發掘,或是需要付出相當大的金錢才能購得。還好,\n" +#~ "透過正確的工具以及適當的零件、物質以及訓練就能夠製作出來。\n" +#~ "\n" +#~ "某些配方需要一組工具。這些工具不會被消耗,所以你可以保存你的工具組\n" +#~ "。所有的配方都需要消耗一或多個元件,才能進行物品製作。\n" +#~ "\n" +#~ "%s總共有五種類別;武器,食物,\n" +#~ "電子,護具,以及雜項。少部分的物品不需要技能就能夠製造,\n" +#~ "其餘的都需要你有某些知識才能製作:\n" +#~ "\n" +#~ "->機械技能用於製造武器,陷阱,以及一些工具。\n" +#~ "->烹飪技能在低等級時只能用於製作美味食物的配方;\n" +#~ "而高等級時,你能夠理解化學並製作化學武器以及藥劑。\n" +#~ "->電子技能讓你製作用途複雜的各式電子工具。\n" +#~ "->裁縫技能用於製作基本的衣物到堅固的護具。\n" +#~ "\n" +#~ "除了主要的製作相關技能,其他技能在製作特定物品時也可能用到。陷阱\n" +#~ "技能,槍械技能,以及急救技能,都在製作特定物品時會用到。" -#~ msgid "Raynham" -#~ msgstr "雷納姆" +#~ msgid "" +#~ "While sleeping in dangerous territory, it may be wise to set traps to " +#~ "ward\n" +#~ "off unwanted intrusions. There are a few traps to be found in the world,\n" +#~ "most notably bubblewrap (which will make a loud noise if stepped on, " +#~ "helping\n" +#~ "to wake you up) and bear traps (which make noise AND damage and trap " +#~ "anything\n" +#~ "that steps on them). Others need to be crafted; this requires the Traps " +#~ "skill\n" +#~ "and possibly Mechanics.\n" +#~ "\n" +#~ "To set a trap, simply use the item%s and choose a direction; the trap\n" +#~ "will be placed on an adjacent tile. Some traps may require additional " +#~ "tools,\n" +#~ "like a shovel, to be set. Once set, a trap will remain in place until\n" +#~ "stepped on or disarmed.\n" +#~ "\n" +#~ "To disarm a trap, examine%s the space it is on. Your success depends\n" +#~ "upon your Traps skill and Dexterity. If you succeed, the trap is removed\n" +#~ "and replaced by some or all of its constituent parts; however, if you " +#~ "fail,\n" +#~ "there is a chance that you will set off the trap, suffering the " +#~ "consequences.\n" +#~ "\n" +#~ "Many traps are fully or partially hidden. Your ability to detect traps " +#~ "is\n" +#~ "entirely dependent upon your Perception. Should you stumble into a trap, " +#~ "you\n" +#~ "may have a chance to avoid it, depending on your Dodge skill." +#~ msgstr "" +#~ "當在危險的地區進行睡眠時,設置陷阱來抵禦未知的入侵者才是明智的作法。\n" +#~ "遊戲世界中能夠找到一些陷阱,最常見的就是泡泡紙(當踩到時會發出明顯聲\n" +#~ "響,讓你醒來)以及捕獸夾(會發出聲響以及傷害踩上的任何東西)。其餘的\n" +#~ "就需要透過製作物品的方式才能取得;需要陷阱技能或是一些機械技能。\n" +#~ "\n" +#~ "要設置陷阱,只要使用物品 %s 以及選取方向;陷阱就會定位在相鄰格\n" +#~ "子上。某些陷阱可能需要額外的工具,例如鏟子,才能被設置。只要設置好,\n" +#~ "陷阱就會一直是啟動的直到被觸發或是被解除。\n" +#~ "\n" +#~ "要解除陷阱,%s檢視有陷阱的那格子。你的成功機率仰賴你的陷阱技能以及敏\n" +#~ "捷。假如你成功了,陷阱就會被移除,留下陷阱的零件;然而,若是你失敗了\n" +#~ ",將會有機率造成陷阱觸發,造成痛苦的後果。\n" +#~ "\n" +#~ "許多陷阱都是完全或部分隱藏的。你偵測陷阱的能力完全仰賴於感知的屬性。\n" +#~ "你若是踏入一個陷阱則是需要閃避技能才能有機會躲開。" -#~ msgid "Raymond" -#~ msgstr "雷蒙德" +#~ msgid "centipede style" +#~ msgstr "蜈蚣毒" -#~ msgid "Rangeley Plantation" -#~ msgstr "雷格列森林" +#~ msgid "%1$s swiftly hits %4$s" +#~ msgstr "%1$s 迅速擊中 %4$s" -#~ msgid "Rangeley" -#~ msgstr "雷格列" +#~ msgid "scorpion style" +#~ msgstr "蠍毒" -#~ msgid "Randolph" -#~ msgstr "蘭多夫" +#~ msgid "%1$s strike %4$s with spincer fist" +#~ msgstr "%1$s 使出鉗形拳擊中 %4$s" -#~ msgid "Quincy" -#~ msgstr "昆西" +#~ msgid "%1$s strikes %4$s with spincer fist" +#~ msgstr "%1$s 使出鉗形拳擊中 %4$s" -#~ msgid "Putney" -#~ msgstr "普特尼" +#~ msgid "" +#~ "One of the Five Deadly Venoms. Lizard Style focuses on using walls to " +#~ "one's\n" +#~ "advantage. Moving alongside a wall will make you run up along it, giving " +#~ "you\n" +#~ "a large to-hit bonus. Standing by a wall allows you to use it to boost " +#~ "dodge." +#~ msgstr "" +#~ "五毒的其中一式。壁虎毒注重使用牆壁來做為優勢。\n" +#~ "沿著牆壁能夠讓你在上面移動,並且大大提昇命中\n" +#~ "率。還能夠獲得閃避加成。" -#~ msgid "Putnam" -#~ msgstr "普特南" +#~ msgid "lizard style" +#~ msgstr "壁虎毒" -#~ msgid "Provincetown" -#~ msgstr "普維斯鎮" +#~ msgid "toad style" +#~ msgstr "蛤蟆毒" -#~ msgid "Providence" -#~ msgstr "普羅維登斯" +#~ msgid "zui quan" +#~ msgstr "醉拳" -#~ msgid "Prospect" -#~ msgstr "普羅斯貝" +#~ msgid "7: %s" +#~ msgstr "7: %s" -#~ msgid "Proctor" -#~ msgstr "普羅克特" +#~ msgid "8: Exit" +#~ msgstr "8: 退出" -#~ msgid "Princeton" -#~ msgstr "普林斯頓" +#~ msgid "Stop Bleeding" +#~ msgstr "止血中" -#~ msgid "Preston" -#~ msgstr "普雷斯頓" +#~ msgid "You stopped the bleeding." +#~ msgstr "你已經止血了。" -#~ msgid "Presque Isle" -#~ msgstr "普雷斯克島" +#~ msgid "Clean Wound" +#~ msgstr "清潔傷口" -#~ msgid "Prescott" -#~ msgstr "普雷斯科特" +#~ msgid "You clean the bite wound." +#~ msgstr "你清潔了咬傷。" -#~ msgid "Prentiss" -#~ msgstr "普倫蒂斯" +#~ msgid "You disinfect the bite wound." +#~ msgstr "你把咬傷消毒了。" -#~ msgid "Pownal" -#~ msgstr "波內爾" +#~ msgid "You set the bubblewrap on the ground, ready to be popped." +#~ msgstr "你在地上設置了泡泡紙,踩到就會有剝剝聲。" -#~ msgid "Poultney" -#~ msgstr "保羅特尼" +#~ msgid "A padded coat with deep pockets. Very warm." +#~ msgstr "一件加上內裡的大衣,有許多深口袋。非常保暖。" -#~ msgid "Portsmouth" -#~ msgstr "普茲茅斯" +#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." +#~ msgstr "一件沉重的棉外套。很累贅,但是保暖且有許多口袋。" -#~ msgid "Portland" -#~ msgstr "波特蘭" +#~ msgid "" +#~ "A misshapen human arm, eating this would be pretty disgusting and cause " +#~ "your DNA to mutate." +#~ msgstr "一隻畸形的人類手臂,吃下這個會非常噁心,並且會造成你的基因變異。" -#~ msgid "Porter" -#~ msgstr "波特" +#~ msgid "" +#~ "A malformed human leg, this would be gross to eat, and cause mutations." +#~ msgstr "一隻畸形的人類大腿,吃下這個會非常反胃,並且會造成你產生突變。" -#~ msgid "Portage Lake" -#~ msgstr "波蒂奇湖" +#~ msgid "" +#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." +#~ msgstr "一顆跟棒球一樣大的螞蟻蛋。含有豐富的營養,但是很噁。" -#~ msgid "Pomfret" -#~ msgstr "波福瑞特" +#~ msgid "This white flour is useful for baking." +#~ msgstr "這個白色麵粉在烘焙時很有用。" -#~ msgid "Poland" -#~ msgstr "波蘭" +#~ msgid "canned apple slices" +#~ msgstr "蘋果片罐頭" -#~ msgid "Plympton" -#~ msgstr "普林頓" +#~ msgid "" +#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " +#~ "color." +#~ msgstr "保存在密封玻璃瓶中的蘋果。糊糊的並且賣相不好。" -#~ msgid "Plymouth" -#~ msgstr "普利茅斯" +#~ msgid "apple slices" +#~ msgstr "蘋果片" -#~ msgid "Pleasant Ridge Plantation" -#~ msgstr "逸嶺森林" +#~ msgid "" +#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" +#~ msgstr "泡在糖漿裡的蘋果切片,保持了外觀的新鮮度。" -#~ msgid "Plaistow" -#~ msgstr "普萊斯敦" +#~ msgid "Bright pink chewing gum. Sugary, sweet and bad for your teeth." +#~ msgstr "亮粉紅色的口香糖。甜滋滋會蛀壞你的牙齒。" -#~ msgid "Plainville" -#~ msgstr "普萊恩維爾" +#~ msgid "" +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire." +#~ msgstr "" +#~ "在使用許多東西時會用到打火機,例如香煙,或是點燃某些東西,類似汽油彈。你也" +#~ "能使用打火機來點燃附近的物品。" -#~ msgid "Plainfield" -#~ msgstr "普蘭菲爾德" +#~ msgid "" +#~ "Matches must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use matches to light " +#~ "nearby items on fire." +#~ msgstr "" +#~ "在使用許多東西時會用到火柴,例如香煙,或是點燃某些東西,類似汽油彈。你也能" +#~ "使用火柴來點燃附近的物品。" -#~ msgid "Pittston" -#~ msgstr "皮茨頓" +#~ msgid "" +#~ "A fire drill is a simple item for firestarting, made from two pieces of " +#~ "wood and some string. Although it is constructed out of simple materials, " +#~ "it's slow and rather difficult to get a fire started with this tool." +#~ msgstr "" +#~ "鑽火器是個用來生火的簡單物品,利用兩片木材及一些線來製作。雖然製作很簡單," +#~ "但是生火的難度高,而且速度很慢。" -#~ msgid "Pittsford" -#~ msgstr "皮茨福德" +#~ msgid "" +#~ "Thin paper strips intended for the rolling of cigarettes. Could also be " +#~ "used to make cartridges for a cap and ball revolver." +#~ msgstr "一張用來卷香煙的薄紙。同時也能用來卷入火藥來當做左輪的裝藥。" -#~ msgid "Pittsfield" -#~ msgstr "皮茨菲爾德" +#~ msgid "A simple hand-powered stone quern." +#~ msgstr "一個簡單的人力石磨" -#~ msgid "Pittsburg" -#~ msgstr "匹茲堡" +#~ msgid "" +#~ "Use a sewing kit on an article of clothing to attempt to repair or " +#~ "reinforce that clothing. This uses your tailoring skill." +#~ msgstr "使用針線包能夠修復或強化服裝。需要一定的 裁縫 技能。" -#~ msgid "Piermont" -#~ msgstr "皮耶蒙特" +#~ msgid "" +#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." +#~ msgstr "使用剪刀可以裁剪棉製的物品成布條。" -#~ msgid "Phippsburg" -#~ msgstr "菲普斯堡" +#~ msgid "Use a fire extinguisher to put out adjacent fires." +#~ msgstr "使用滅火器能夠撲滅附近的火勢。" -#~ msgid "Phillipston" -#~ msgstr "菲利普斯頓" +#~ msgid "" +#~ "With enough electronics skill, you could attach this to your devices to " +#~ "increase their battery capacity." +#~ msgstr "" +#~ "只要有足夠的 電子 技能,你就能夠把這個模組加到你想要增加最大電量的裝置上。" -#~ msgid "Petersham" -#~ msgstr "彼得舍姆" +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. Use it to turn it on." +#~ msgstr "" +#~ "一個小型的汽油燈。不能夠提供大量照明,但是能夠維持長時間。使用它來開啟。" -#~ msgid "Peterborough" -#~ msgstr "彼得伯勒" +#~ msgid "" +#~ "A small gasoline powered lantern. It does not provide much light, but it " +#~ "lasts a long time. It is turned on. Use it to turn it off." +#~ msgstr "" +#~ "一個小型的汽油燈。不能夠提供大量照明,但是能夠維持長時間。使用它來關閉。" -#~ msgid "Peru" -#~ msgstr "秘魯" +#~ msgid "" +#~ "Using this flashlight will turn it on, assuming it is charged with " +#~ "batteries. A turned-on flashlight will provide light during the night or " +#~ "while underground." +#~ msgstr "" +#~ "若是電池還有電的話,使用這個手電筒就能讓他開啟。一個開啟的手電筒能夠在夜晚" +#~ "或是洞穴中提供照明。" -#~ msgid "Perkins" -#~ msgstr "帕金斯" +#~ msgid "" +#~ "This flashlight is turned on, and continually draining its batteries. It " +#~ "provides light during the night or while underground. Use it to turn it " +#~ "off." +#~ msgstr "" +#~ "這個手電筒已經開啟,並且持續消耗電力。一個開啟的手電筒能夠在夜晚或是洞穴中" +#~ "提供照明。使用它來關閉。" -#~ msgid "Perham" -#~ msgstr "佩勒姆" +#~ msgid "" +#~ "A burnt-out lightstrip. You could disassemble this to recover the " +#~ "amplifier circuit." +#~ msgstr "一個用完的燈條。你能夠把這個東西拆解成功率放大器。" -#~ msgid "Pepperell" -#~ msgstr "佩波羅爾" +#~ msgid "" +#~ "A light-emitting circuit wired directly to some batteries. Once " +#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " +#~ "batteries die, you'll need to scrap it to recover the components that are " +#~ "reusable." +#~ msgstr "" +#~ "透過電源直接供電的發光電路。只要啟動了就能提供每3電力25小時的照明。當電池" +#~ "耗盡,你就只能拆解物品來回收。" -#~ msgid "Penobscot" -#~ msgstr "佩諾斯科特" +#~ msgid "" +#~ "A light-emitting circuit wired directly to some batteries. Provides a " +#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " +#~ "die, you'll need to scrap it to recover the components that are reusable." +#~ msgstr "" +#~ "透過電源直接供電的發光電路。提供微弱的光源,提供每3電力25小時的照明。當電" +#~ "池耗盡,你就只能拆解物品來回收。" -#~ msgid "Pembroke" -#~ msgstr "彭布羅克" +#~ msgid "" +#~ "A small blue light glowstick, bend it to break the glass cylinder inside " +#~ "and start the reaction to produce a very small amount of light." +#~ msgstr "" +#~ "一根會發小藍光的螢光棒,折它就能夠讓裡面的化合物產生化學變化並開始發光,提" +#~ "供些許的照明。" -#~ msgid "Pelham" -#~ msgstr "佩勒漢" +#~ msgid "" +#~ "A small heating element. Indispensable for cooking and chemistry. Try not " +#~ "to burn yourself." +#~ msgstr "一個小型的加熱元件。是烹飪及化學不可或卻的。小心別燙到了。" -#~ msgid "Peacham" -#~ msgstr "皮查姆" +#~ msgid "bubblewrap" +#~ msgstr "泡泡紙" -#~ msgid "Peabody" -#~ msgstr "皮博迪" +#~ msgid "" +#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " +#~ "creating a trap that will ensnare and damage anything that steps on it. " +#~ "If you are carrying a shovel, you will have the option of burying it." +#~ msgstr "" +#~ "加載彈簧機制的鋼顎。使用方法是設置在地面,作為誘捕及傷害踩上的獵物的陷阱。" +#~ "假如你有鏟子,你還可以把它埋藏起來增加隱蔽性。" -#~ msgid "Paxton" -#~ msgstr "帕克斯頓" +#~ msgid "A tool for welding metal pieces together. Useful for construction." +#~ msgstr "這個工具用於把金屬焊在一起。對於進行建設很有用。" -#~ msgid "Pawtucket" -#~ msgstr "柏德基" +#~ msgid "" +#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " +#~ "precision strike in the hands of the skilled." +#~ msgstr "" +#~ "一把小又異常銳利的刀,常用在手術中。在熟手中能夠使用他小而尖銳的刀刃使用穿" +#~ "刺攻擊。" -#~ msgid "Pawlet" -#~ msgstr "鮑萊特" +#~ msgid "This huge iron knife makes an excellent melee weapon." +#~ msgstr "這把大鐵刀是絕佳的近戰武器。" -#~ msgid "Patten" -#~ msgstr "潘登" +#~ msgid "" +#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " +#~ "effective against armor." +#~ msgstr "" +#~ "一把來自日本的稀有刀劍。能夠對未武裝的目標造成致命傷害,對付穿戴護具的目標" +#~ "也很有效。" -#~ msgid "Passadumkeag" -#~ msgstr "帕斯當坎" +#~ msgid "" +#~ "People love fire, and people love katanas, so why not put them together? " +#~ "The gas burners attached to this blade can really turn up the heat on " +#~ "your foes." +#~ msgstr "" +#~ "人們都喜歡火,也喜歡武士刀,那麼乾脆合在一起好了!? 把噴燈裝上這把刀產生的" +#~ "高溫就能讓你的敵人吱吱叫了!" -#~ msgid "Parsonsfield" -#~ msgstr "帕森斯菲爾德" +#~ msgid "" +#~ "A katana that glows with the fury and heat of the SUN! Well, okay it's " +#~ "not THAT hot, but getting hit with it still stings like the dickens." +#~ msgstr "" +#~ "一把發散著烈日般熱度的武士刀!好吧,其實沒有那麼燙,但是被砍到還是會讓人吱" +#~ "吱叫的。" -#~ msgid "Parkman" -#~ msgstr "帕克曼" +#~ msgid "" +#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " +#~ "Called 'broad' to contrast with the slimmer rapiers." +#~ msgstr "" +#~ "一把仿 16 , 17, 18 世紀的古劍,會稱為 '闊' 是因為刀身比一般的劍寬了許多。" -#~ msgid "Paris" -#~ msgstr "巴黎" +#~ msgid "A huge two-handed sword from Germany. Packs a real whallop." +#~ msgstr "一把雙手持的巨劍,源自於德國。" -#~ msgid "Panton" -#~ msgstr "潘頓" +#~ msgid "" +#~ "Designed for combat, and deadly in the right hands. Can be used to " +#~ "butcher corpses." +#~ msgstr "一把用來戰鬥的刀。能夠屠宰屍體。" -#~ msgid "Palmyra" -#~ msgstr "巴爾米拉" +#~ msgid "" +#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " +#~ "quickly opening locks." +#~ msgstr "一組由堅硬鋼片製成的鎖匠工具,能夠安靜迅速的撬開鎖。" -#~ msgid "Palmer" -#~ msgstr "帕爾默" +#~ msgid "" +#~ "An improvised easy breaking picklock made from scrap metal, needs " +#~ "MacGyver like skills to open locks, it's light material lessens chances " +#~ "of alarms being set off." +#~ msgstr "" +#~ "一組用廢金屬手工製成的簡易開鎖工具,需要有馬蓋先的神級技巧才能開鎖,其輕量" +#~ "的材質減少警報觸發的機率。" -#~ msgid "Palermo" -#~ msgstr "巴勒莫" +#~ msgid "sealed jar of canned apple" +#~ msgstr "密封罐的罐頭蘋果" -#~ msgid "Oxford" -#~ msgstr "牛津" +#~ msgid "" +#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." +#~ msgstr "一個密封玻璃罐裡面有切片蘋果。使用它來開封享用。" -#~ msgid "Oxbow" -#~ msgstr "奧克斯博" +#~ msgid "" +#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " +#~ "enjoy." +#~ msgstr "裝在塑膠袋中的真空保存蘋果片。使用它來開封享用。" -#~ msgid "Owls Head" -#~ msgstr "貓頭鷹頭" +#~ msgid "" +#~ "A fine glass tube with a bulb on the end, used in partaking of certain " +#~ "illicit substances." +#~ msgstr "一根尾端是球狀的玻璃管,用來吸食一些非法物質的器具。" -#~ msgid "Otisfield" -#~ msgstr "奧蒂斯菲爾德" +#~ msgid "" +#~ "A hand-blown glass pipe of the type most commonly used to smoke " +#~ "hallucinatory plants." +#~ msgstr "一個手工製的玻璃管,可用來抽一些會產生幻覺的植物(大麻?)" -#~ msgid "Otis" -#~ msgstr "奧蒂斯" +#~ msgid "" +#~ "A hand-carved wooden smoking pipe designed to facilitate consumption of " +#~ "fire cured tobacco leaves." +#~ msgstr "一個手工雕刻的木製煙管,用來促進菸草工業發展的器具。" -#~ msgid "Ossipee" -#~ msgstr "奧西皮" +#~ msgid "" +#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " +#~ "stimulant when you inject yourself with it." +#~ msgstr "" +#~ "一根裝滿了可注射一次腎上腺素的針筒。在注射後可以提供強大的腎上腺素。" -#~ msgid "Osborn" -#~ msgstr "奧斯本" +#~ msgid "You're just generally quick! You get a 10%% bonus to action points." +#~ msgstr "你的個性就是急!你獲得 10%% 的行動點數加成。" -#~ msgid "Orwell" -#~ msgstr "奧威爾" +#~ msgid "" +#~ "You used to work at the home depot, and you did a lot of home renovations " +#~ "yourself. You start with steel toe boots, a tool belt, a hammer, and a " +#~ "level in construction." +#~ msgstr "" +#~ "你之前在特力屋上班,你做過很多房屋裝修的工作。你開始便擁有鋼頭鞋、工具腰" +#~ "帶、鐵鎚、以及基本的建設技能。" -#~ msgid "Orrington" -#~ msgstr "奧靈頓" +#~ msgid "" +#~ "You were a high school student until the teachers literally tried to pick " +#~ "your brains. You start with a backpack and a zombie survival guide." +#~ msgstr "" +#~ "你是個高中學生,直到你的老師變成殭屍差點把你的腦袋吃了。你開始便有一個背" +#~ "包,以及一本末日求生指南." -#~ msgid "Orono" -#~ msgstr "奧羅諾" +#~ msgid "" +#~ "Your overall skill in using firearms. With higher levels, this general " +#~ "experience increases accuracy with any gun, but is secondary to practice " +#~ "with the type of gun in question." +#~ msgstr "" +#~ "你使用槍械的整體技能。提高此技能等級能夠提昇任何槍械的命中率,但是不包含操" +#~ "作個別槍械的技巧。" -#~ msgid "Orneville" -#~ msgstr "奧爾維爾" +#~ msgid "whump." +#~ msgstr "呼。" -#~ msgid "Orleans" -#~ msgstr "奧爾良" +#~ msgid " throws %s." +#~ msgstr " 投擲 %s." -#~ msgid "Orland" -#~ msgstr "奧蘭德" +#~ msgid " disarms %s." +#~ msgstr " 解除 %s." -#~ msgid "Orient" -#~ msgstr "奧連特" +#~ msgid " drains %s body heat!" +#~ msgstr " 吸取 %s 體熱!" -#~ msgid "Orford" -#~ msgstr "奧福德" +#~ msgid "You step on some bubblewrap!" +#~ msgstr "你踩到了泡泡紙!" -#~ msgid "Orange" -#~ msgstr "奧蘭治" +#~ msgid "Stepped on bubblewrap." +#~ msgstr "踩上了泡泡紙。" -#~ msgid "Old Town" -#~ msgstr "舊城區" +#~ msgid "Your raincoat protects you from the acid rain." +#~ msgstr "你的雨衣保護了你不被酸雨傷害。" -#~ msgid "Old Saybrook" -#~ msgstr "老塞布魯克" +#~ msgid "Cleaned the bite wound." +#~ msgstr "清理了咬傷。" -#~ msgid "Old Orchard Beach" -#~ msgstr "老果園海灘" +#~ msgid "Sterilized the infection... this time." +#~ msgstr "消毒了感染..." -#~ msgid "Old Lyme" -#~ msgstr "老萊姆" +#~ msgid "You wake up to the ringing of an alarm-clock." +#~ msgstr "你因為鬧鐘響而醒來。" -#~ msgid "Ogunquit" -#~ msgstr "奧甘奎特" +#~ msgid "Fill a container?" +#~ msgstr "裝滿容器?" -#~ msgid "Oakland" -#~ msgstr "奧克蘭" +#~ msgid "There's no vehicle to grab there!" +#~ msgstr "那裡沒有車輛可以抓取!" -#~ msgid "Oakham" -#~ msgstr "奧克姆" +#~ msgid "Put the dog food" +#~ msgstr "放下狗食" -#~ msgid "Oakfield" -#~ msgstr "奧克菲爾德" +#~ msgid "Light" +#~ msgstr "點燃" -#~ msgid "Oak Bluffs" -#~ msgstr "奧克布洛福" +#~ msgid "Pry" +#~ msgstr "撬" -#~ msgid "Nottingham" -#~ msgstr "諾丁漢" +#~ msgid "You don't have enough batteries!" +#~ msgstr "電池不夠啦!" -#~ msgid "Norwood" -#~ msgstr "諾伍德" +#~ msgid "You don't have enough battery power to purify all the water." +#~ msgstr "你沒有足夠的電力來淨化全部的水。" -#~ msgid "Norwich" -#~ msgstr "諾維奇" +#~ msgid "You add a %s location to your map." +#~ msgstr "你在地圖上標記%s地點" -#~ msgid "Norwell" -#~ msgstr "樂威" +#~ msgid "It's %d squares to the %s" +#~ msgstr "還有 %d 格到達 %s" -#~ msgid "Norway" -#~ msgstr "挪威" +#~ msgid "You can't find a hospital near your location." +#~ msgstr "你的位置附近沒有醫院。" -#~ msgid "Norwalk" -#~ msgstr "諾沃克" +#~ msgid "Use your pick lock" +#~ msgstr "使用你的開鎖工具" -#~ msgid "Norton" -#~ msgstr "諾頓" +#~ msgid "The door swings open..." +#~ msgstr "門緩緩的開啟..." -#~ msgid "Northwood" -#~ msgstr "諾斯伍德" +#~ msgid "Siphon from" +#~ msgstr "抽取自" -#~ msgid "Northumberland" -#~ msgstr "諾森伯蘭" +#~ msgid "Drill" +#~ msgstr "鑽洞" -#~ msgid "Northport" -#~ msgstr "諾斯波特" +#~ msgid "Place trap" +#~ msgstr "放置陷阱" -#~ msgid "Northfield" -#~ msgstr "諾斯菲爾德" +#~ msgid "You set the boobytrap up and activate the grenade." +#~ msgstr "你用手榴彈布置了詭雷" -#~ msgid "Northbridge" -#~ msgstr "北布里其" +#~ msgid "Bury the landmine?" +#~ msgstr "埋下地雷嗎?" -#~ msgid "Northborough" -#~ msgstr "諾斯伯勒" +#~ msgid "You bury the landmine." +#~ msgstr "你埋下了地雷." -#~ msgid "Northampton" -#~ msgstr "北安普頓" +#~ msgid "You set the landmine." +#~ msgstr "你設置了地雷." -#~ msgid "North Yarmouth" -#~ msgstr "北亞茂斯" +#~ msgid "Place the turret" +#~ msgstr "放置槍塔" -#~ msgid "North Stonington" -#~ msgstr "北斯通寧頓" +#~ msgid "Your tazer crackles in the air." +#~ msgstr "你的電擊棒發出滋滋聲" -#~ msgid "North Smithfield" -#~ msgstr "北史密斯菲爾德" +#~ msgid "You %4$s the %1$s into %2$i %3$s." +#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." +#~ msgstr[0] "你%4$s %1$s 成 %2$i %3$s。" -#~ msgid "North Reading" -#~ msgstr "北雷丁" +#~ msgid "Cut up metal" +#~ msgstr "切割金屬" -#~ msgid "North Providence" -#~ msgstr "北普羅維登斯" +#~ msgid "" +#~ "You neatly sever all of the veins\n" +#~ "and arteries in your body. Oh wait,\n" +#~ "Never mind." +#~ msgstr "" +#~ "你俐落的切斷你體內的所有動靜脈,\n" +#~ "喔,我的老天~\n" +#~ "當我沒說。" -#~ msgid "North Kingstown" -#~ msgstr "北金斯敦" +#~ msgid "You managed to stop the bleeding." +#~ msgstr "你把流血止住了。" -#~ msgid "North Hero" -#~ msgstr "北希洛" +#~ msgid "You couldn't stop the bleeding." +#~ msgstr "你止不住血" -#~ msgid "North Haven" -#~ msgstr "北哈芬" +#~ msgid "That isn't knife!" +#~ msgstr "這不是刀子!" -#~ msgid "North Hampton" -#~ msgstr "北漢普頓" +#~ msgid "" +#~ "Compact Bionics Module developed at DoubleTech Industries as a " +#~ "replacement for the highly successful CBM: Power Storage. Increases you " +#~ "power capacity by 10 units." +#~ msgstr "" +#~ "DoubleTech工業開發的整合生化插件模組,這個型號是 CBM: 能量儲存室 的下一" +#~ "代。能夠增加你的能量儲存量 10 單位。" -#~ msgid "North Canaan" -#~ msgstr "北迦南" +#~ msgid "long underwear" +#~ msgstr "連身內衣褲" -#~ msgid "North Brookfield" -#~ msgstr "北布魯克菲爾德" +#~ msgid "" +#~ "A long cotton dress. Difficult to move in and lacks any storage space." +#~ msgstr "一件棉質長洋裝。很難移動,並且也沒有任何儲物空間。" -#~ msgid "North Branford" -#~ msgstr "北布蘭福德" +#~ msgid "" +#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " +#~ "will provide excellent protection against ambient radiation." +#~ msgstr "" +#~ "處理危險物品時的裝束。雖然很龐大又累贅,但穿上後能夠很有效的抵抗輻射。" -#~ msgid "North Berwick" -#~ msgstr "北貝里克" +#~ msgid "plate mail" +#~ msgstr "金屬板甲" -#~ msgid "North Attleborough" -#~ msgstr "北阿特巴路" +#~ msgid "A thin cotton jacket. Good for brisk weather." +#~ msgstr "一件棉製的薄外套。很適合在稍涼的天氣穿。" -#~ msgid "North Andover" -#~ msgstr "北安多弗" +#~ msgid "A thin pair of leather gloves. Good for doing manual labor." +#~ msgstr "一對薄的皮手套。適合在作事的時候使用。" -#~ msgid "North Adams" -#~ msgstr "北亞當斯" +#~ msgid "A bit cumbersome to wear, but provides some storage" +#~ msgstr "帶著時有點累贅,但是提供了一些儲物空間。" -#~ msgid "Norridgewock" -#~ msgstr "諾里居沃克" +#~ msgid "" +#~ "A badge that detects radiation dosage sealed in a radiation-blocking " +#~ "bag. Activate to remove from the bag." +#~ msgstr "能夠檢測輻射的徽章,封存在防輻射的袋子中。使用它來從袋子拿出。" -#~ msgid "Norfolk" -#~ msgstr "諾福克" +#~ msgid "plate armor boots" +#~ msgstr "鋼板護甲靴" -#~ msgid "Nobleboro" -#~ msgstr "紐波伯羅" +#~ msgid "plate armor gauntlets" +#~ msgstr "鋼板護甲手套" -#~ msgid "Newtown" -#~ msgstr "新鎮" +#~ msgid "light plate mail" +#~ msgstr "輕鋼板盔甲" -#~ msgid "Newton" -#~ msgstr "牛頓" +#~ msgid "An ornamental suit of armor." +#~ msgstr "一套觀賞用的盔甲。" -#~ msgid "Newry" -#~ msgstr "紐維" +#~ msgid "" +#~ "A medieval helmet that provides excellent protection to head, with a Y " +#~ "shaped opening for the face." +#~ msgstr "一頂中世紀的頭盔能夠對於頭部提供絕佳的防護,臉部有Y型的開口。" -#~ msgid "Newport" -#~ msgstr "新港" +#~ msgid "" +#~ "A tool used to drive nails into wood or other material. It could also be " +#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." +#~ msgstr "" +#~ "一個用於木工或一些工程的工具,能裝填鐵釘。也能夠被當成一個特殊的武器,練習" +#~ "之後能提昇你的手槍技能達到 1。" -#~ msgid "Newmarket" -#~ msgstr "紐馬基特" +#~ msgid "" +#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " +#~ "damage. It could be used to practice your rifle skill up to level 1." +#~ msgstr "" +#~ "孩童間受歡迎的玩具槍。命中率雖然不低,可是BB彈幾乎無法造成傷害。能夠用這把" +#~ "槍把你的步槍技能練到1。" -#~ msgid "Newington" -#~ msgstr "紐因頓" +#~ msgid "" +#~ "A leather sling, it is easy to use and accurate, but pebbles do little " +#~ "damage. Pebbles are used as ammunition." +#~ msgstr "" +#~ "一個皮製的投石器,很易用又準確,但是小石子只能造成一點點傷害。這個武器的彈" +#~ "藥是小石子。" -#~ msgid "Newfields" -#~ msgstr "紐菲爾德斯" +#~ msgid "A tough sinew cut from a corpse, useable as thread." +#~ msgstr "從屍體取得堅韌的筋,可當做縫線。" -#~ msgid "Newfield" -#~ msgstr "紐菲爾德" +#~ msgid "" +#~ "A brass-jacketed .22 calibre round with superior penetration capacity." +#~ msgstr "外表包覆全金屬的.22口徑子彈,有著相對較高的穿透力。" -#~ msgid "Newfane" -#~ msgstr "努凡" +#~ msgid "" +#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " +#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " +#~ "round. It is nearly silent, but is so weak as to be nearly useless." +#~ msgstr "" +#~ ".22CB是.22口徑子彈的一種變形。它只有非常小量的高壓瓦斯而基本上沒有任何火" +#~ "藥,使它成為一種亞音速子彈。射擊時幾乎沒有聲音,但貧弱的威力使其幾乎沒有什" +#~ "麼用途。" -#~ msgid "Newcastle" -#~ msgstr "紐卡斯爾" +#~ msgid "" +#~ "9 millimeter parabellum is generally regarded as the most popular handgun " +#~ "cartridge, used by the majority of US police forces. It is also a very " +#~ "popular round in sub-machine guns." +#~ msgstr "" +#~ "9釐米帕拉彈被公認為最受歡迎的手槍子彈,被美國警方所廣泛使用。這子彈同時也" +#~ "是衝鋒槍子彈的熱門選擇。" -#~ msgid "Newburyport" -#~ msgstr "紐伯里波特" +#~ msgid "" +#~ "This small caliber pistol round offers quite good armor penetration at " +#~ "the cost of slightly less damage. It is rarely used outside of the " +#~ "Chinese army." +#~ msgstr "" +#~ "這種小型手槍子彈以較低的傷害為代價換取到相當不錯的穿甲能力。這種彈種通常不" +#~ "會在中國軍隊以外的地方看到。" -#~ msgid "Newbury" -#~ msgstr "紐伯里" +#~ msgid "" +#~ "A brass-jacketed variant of the .40 Smith & Wesson round. This increases " +#~ "penetration slightly at the cost of reduced expansion." +#~ msgstr "" +#~ "外表包覆全金屬的.40史密斯威森彈。藉由犧牲其彈頭擴張性所帶來的抑止力,其在" +#~ "穿透力上能稍微有所提升。" -#~ msgid "Newburgh" -#~ msgstr "紐堡" +#~ msgid "" +#~ "The .454 Casull round a very powerful revolver round capable of killing " +#~ "Huge game like Elephants with ease, it's designed to be used with the " +#~ "Taurus Raging Bull." +#~ msgstr "" +#~ ".454卡蘇爾是非常強大的左輪彈種,它能夠輕易地殺死像是大象之類的巨大獵物。它" +#~ "被設計用於蠻牛左輪手槍 。" -#~ msgid "Newark" -#~ msgstr "紐瓦克" +#~ msgid "" +#~ "The .500 S&W Magnum round the World's most powerful handgun round " +#~ "recently developed by Smith and Wesson together with the revolutionary " +#~ "S&W 500 Revolver, it has enough power to kill anything with ease." +#~ msgstr "" +#~ ".500 S&W 麥格農是由史密斯與威森兩人與他們革命性的500型左輪手槍所一同開發出" +#~ "的彈種。這全世界最強大的子彈能夠輕易地殺掉任何生物。" -#~ msgid "New Vineyard" -#~ msgstr "新葡萄園" +#~ msgid "" +#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " +#~ "feet of concrete." +#~ msgstr "" +#~ "一個 60mm的高爆反坦克砲彈。能夠炸穿厚達2英吋的混凝土。(明明物品名稱是 " +#~ "66mm ...)" -#~ msgid "New Sweden" -#~ msgstr "新瑞典" +#~ msgid "Primer from a small caliber round." +#~ msgstr "小手槍子彈的底火。" -#~ msgid "New Shoreham" -#~ msgstr "新肖勒姆" +#~ msgid "" +#~ "Will you be able to place the arrow right into bull's eye? It is not that " +#~ "easy, but once you know how it's done, you will have a lot of fun with " +#~ "archery." +#~ msgstr "" +#~ "你有辦法將箭射中紅心嗎?這並不簡單,但如果你知道怎麼做,你將從中獲得不少樂" +#~ "趣。" -#~ msgid "New Sharon" -#~ msgstr "新夏隆" +#~ msgid "Basic Sword & Sorcery." +#~ msgstr "劍與巫術。" -#~ msgid "New Salem" -#~ msgstr "新塞勒姆" +#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." +#~ msgstr "別喝。這東西加了氨水後會產生毒氣。" -#~ msgid "New Portland" -#~ msgstr "新波特蘭" +#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." +#~ msgstr "別喝。這東西加了漂白水後會產生毒氣。" -#~ msgid "New Milford" -#~ msgstr "新米爾福德" +#~ msgid "carrot" +#~ msgstr "紅蘿蔔" -#~ msgid "New Marlborough" -#~ msgstr "新馬爾堡" +#~ msgid "cooked spaghetti" +#~ msgstr "煮熟的麵條" -#~ msgid "New London" -#~ msgstr "新倫敦" +#~ msgid "Canned beans. A staple for hobos." +#~ msgstr "罐頭豆子。流浪漢的主食。" -#~ msgid "New Limerick" -#~ msgstr "新利默里克" +#~ msgid "Yuck, not very tasty, but it is quite filling." +#~ msgstr "噁,不是很好吃,至少還飽的。" -#~ msgid "New Ipswich" -#~ msgstr "新伊普斯維奇" +#~ msgid "sardines" +#~ msgstr "沙丁魚罐頭" -#~ msgid "New Haven" -#~ msgstr "紐黑文" +#~ msgid "tuna fish" +#~ msgstr "金槍魚罐頭" -#~ msgid "New Hartford" -#~ msgstr "新哈特福德" +#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." +#~ msgstr "超噁。還是留著等快餓死再考慮吃吧。" -#~ msgid "New Hampton" -#~ msgstr "新漢普頓" +#~ msgid "" +#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " +#~ "emergency." +#~ msgstr "一塊大蜂蠟。不好吃也不營養,緊急的時候可以吃吃。" -#~ msgid "New Gloucester" -#~ msgstr "新格洛斯特" +#~ msgid "" +#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " +#~ "all sorts of afflictions." +#~ msgstr "一大塊蠟,充滿了褐黑色的蜂蜜。可用於治療各種病症。" -#~ msgid "New Fairfield" -#~ msgstr "新法爾菲爾德" +#~ msgid "" +#~ "A deformed human fetus, eating this would be very nasty, and cause your " +#~ "DNA to mutate." +#~ msgstr "一個畸形的人類胚胎,吃這個將會非常噁心,也會讓你的基因突變。" -#~ msgid "New Durham" -#~ msgstr "新達勒姆" +#~ msgid "" +#~ "Antibacterial medication designed to prevent or stop the spread of " +#~ "infection, in exchange for making future infections harder to stop or " +#~ "prevent." +#~ msgstr "預防或制止感染的抗菌藥物,使用後會讓未來的感染更難阻止或防範。" -#~ msgid "New Castle" -#~ msgstr "新卡斯爾" +#~ msgid "" +#~ "Use a hammer, with nails and two by fours in your inventory, to board up " +#~ "adjacent doors and windows." +#~ msgstr "使用鐵鎚、鐵釘與2x4木材 就能夠加固門窗。" -#~ msgid "New Canada" -#~ msgstr "新加拿大" +#~ msgid "" +#~ "Using this radio turns it on. It will pick up any nearby signals being " +#~ "broadcast and play them audibly." +#~ msgstr "使用這個無線電就能開啟電源。將會捕捉任何附近的廣播訊號並播出聲音。" -#~ msgid "New Canaan" -#~ msgstr "新迦南" +#~ msgid "" +#~ "This radio is turned on, and continually draining its batteries. It is " +#~ "playing the broadcast being sent from any nearby radio towers." +#~ msgstr "" +#~ "這個無線電已經開啟電源,將會持續的消耗電力。將會從附近的廣播電塔捕捉任何訊" +#~ "號並播放。" -#~ msgid "New Britain" -#~ msgstr "新不列顛" +#~ msgid "" +#~ "A string of numbers to access the elevator in the hazardous waste " +#~ "sarcophagus." +#~ msgstr "一串代碼,能夠用來存取危險廢物堆放場石棺裡的電梯。" -#~ msgid "New Braintree" -#~ msgstr "新布倫特里" +#~ msgid "" +#~ "This device was constructed by 'enhancing' a radio with some amplifier " +#~ "circuits. It's completely lost its ability to pick up a station, but it's " +#~ "nice and loud now. Could be useful to distract zombies." +#~ msgstr "" +#~ "這個裝置是個原本是要加上一些放大迴路成為\"強化\"的無線電。結果完全失去了他" +#~ "該有的功能,變成了一個只會發出噪音的裝置。還是可以用來吸引殭屍啦。" -#~ msgid "New Boston" -#~ msgstr "新波士頓" +#~ msgid "" +#~ "A road map. Use it to read points of interest, including, but not limited " +#~ "to, location(s) of hospital(s) nearby." +#~ msgstr "" +#~ "一份公路地圖。使用這個物品來記錄一些興趣點到地圖上,可能會發現一些新地點或" +#~ "是醫院。" -#~ msgid "New Bedford" -#~ msgstr "新貝德福德" +#~ msgid "" +#~ "A prying tool. Use it to open locked doors without destroying them, or to " +#~ "lift manhole covers." +#~ msgstr "" +#~ "戰慄時空遊戲中主角高登弗里曼手持的神器。用這個物品能夠在不破壞的前提下撬開" +#~ "鎖住的門,或是移開人孔蓋。" -#~ msgid "New Ashford" -#~ msgstr "新阿什福德" +#~ msgid "" +#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " +#~ "pile of dirt." +#~ msgstr "一件農地用具。使用這個工具能夠翻動耕地的土。" -#~ msgid "Needham" -#~ msgstr "尼德漢" +#~ msgid "A digging tool. Use it to dig pits adjacent to your location." +#~ msgstr "一件挖掘工具。使用這個工具能夠在你相鄰的格子挖坑。" -#~ msgid "Naugatuck" -#~ msgstr "諾格塔克" +#~ msgid "A listening tool. Use it to listen to things. Closely." +#~ msgstr "一件醫用工具。靠近物體並使用來進行聆聽。" -#~ msgid "Natick" -#~ msgstr "納提克" +#~ msgid "" +#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " +#~ "a vehicle." +#~ msgstr "" +#~ "一條有彈性的橡膠軟管。能夠在製作物品,從車輛油桶抽取汽油時能發揮用途。" -#~ msgid "Nashville Plantation" -#~ msgstr "納什維爾森林" +#~ msgid "" +#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " +#~ "the ground, creating a trap that will warn you with noise when something " +#~ "steps on it." +#~ msgstr "" +#~ "一張塑膠紙上面佈滿空氣小泡泡。在地面上設置後能夠成為警報陷阱,當有東西踩上" +#~ "後會發出聲響。" -#~ msgid "Nashua" -#~ msgstr "納舒厄" +#~ msgid "" +#~ "Several pieces of wood, nailed together, with nails sticking straight up. " +#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." +#~ msgstr "" +#~ "由木板與豎立的鐵釘合成的陷阱。假如有粗心的獵物踩上去,腳掌就會被刺穿。" -#~ msgid "Narragansett" -#~ msgstr "納拉甘西特" +#~ msgid "" +#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " +#~ "Requires a young tree nearby. Effective at trapping and killing some " +#~ "small animals." +#~ msgstr "" +#~ "簡易陷阱工具箱,含有一個活結和繩套觸發器。需要附近有小樹。能夠有效的困住和" +#~ "殺死小動物。" -#~ msgid "Naples" -#~ msgstr "那不勒斯" +#~ msgid "" +#~ "A tool for measuring radiation. Using it will prompt you to choose " +#~ "whether to scan yourself or the terrain, or to turn it on, which will " +#~ "provide continuous feedback on ambient radiation." +#~ msgstr "" +#~ "一個用於測量輻射的工具。使用時會詢問你要掃描自己或是地面,或是開啟,能夠持" +#~ "續的偵測環境中的輻射。" -#~ msgid "Nantucket" -#~ msgstr "楠塔基特" +#~ msgid "" +#~ "A tool for measuring radiation. It is in continuous scan mode, and will " +#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " +#~ "it allows you to turn it off, or scan yourself or the ground." +#~ msgstr "" +#~ "一個用於測量輻射的工具。正處於持續偵測模式,當偵測到環境輻射時會發出響聲。" +#~ "使用它能夠進行關閉、掃描自己或掃描地面。" -#~ msgid "Nahant" -#~ msgstr "納哈特" +#~ msgid "" +#~ "Use this item to pull the pin, turning it into an active grenade. You " +#~ "will then have five turns before it explodes; throwing it would be a good " +#~ "idea." +#~ msgstr "" +#~ "使用這個物品時會拉開插梢,變成啟動中手榴彈。你必須在5回合內投出否則會傷到" +#~ "自己。" -#~ msgid "Mount Washington" -#~ msgstr "華盛頓山" +#~ msgid "" +#~ "This grenade is active, and will explode any second now. Better throw it!" +#~ msgstr "這個手榴彈已經啟動,有可能在任何時間爆炸。你最好趕快投擲出去!" -#~ msgid "Mount Vernon" -#~ msgstr "弗農山" +#~ msgid "" +#~ "Use this item to pull the pin, turning it into an active flashbang. You " +#~ "will then have five turns before it detonates with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ msgstr "" +#~ "使用這個物品時會拉開插梢,變成啟動中閃光彈。5回合內會炸開,其附近的所有生" +#~ "物將會被強光與聲響所致盲、失聰與混亂。" -#~ msgid "Mount Tabor" -#~ msgstr "塔博爾山" +#~ msgid "" +#~ "This flashbang is active, and will soon detonate with intense light and " +#~ "sound, blinding, deafening and disorienting anyone nearby." +#~ msgstr "" +#~ "這個閃光彈已經啟動,很快的就會炸開,其附近的所有生物將會被強光與聲響所致" +#~ "盲、失聰與混亂。" -#~ msgid "Mount Holly" -#~ msgstr "霍利山" +#~ msgid "" +#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " +#~ "will then have three turns before it detonates, creating an EMP field " +#~ "that damages robots and drains bionic energy." +#~ msgstr "" +#~ "使用這個物品時會拉開插梢,變成啟動中電磁脈衝手榴彈。3回合內會炸開,產生電" +#~ "磁脈衝的力場,將會傷害附近的所有機器人以及吸取生化插件能量。" -#~ msgid "Mount Desert" -#~ msgstr "沙漠山" +#~ msgid "" +#~ "This EMP grenade is active, and will shortly detonate, creating a large " +#~ "EMP field that damages robots and drains bionic energy." +#~ msgstr "" +#~ "這個電磁脈衝手榴彈已經啟動,很快的就會炸開,產生電磁脈衝的力場,將會傷害附" +#~ "近的所有機器人以及吸取生化插件能量。" -#~ msgid "Mount Chase" -#~ msgstr "蔡斯山" +#~ msgid "" +#~ "This is a highly modified EMP grenade, designed to scramble robots' " +#~ "control chips, rather than destroy them. This converts the robot to your " +#~ "side for a short time, before the backup systems kick in." +#~ msgstr "" +#~ "這是一個高度改造的電磁脈衝手榴彈,能夠干擾機器人的控制晶片,而非摧毀。在其" +#~ "備份系統回復前,會變成你的友軍。" -#~ msgid "Moultonborough" -#~ msgstr "莫頓堡" +#~ msgid "" +#~ "Use this item to pull the pin. Five turns after you do that, it will " +#~ "begin to expel a highly toxic gas for several turns. This gas damages and " +#~ "slows those who enter it, as well as obscuring vision and scent." +#~ msgstr "" +#~ "使用這個物品時會拉開插梢。5回合內會炸開,產生劇毒性的瓦斯。吸入氣體的生物" +#~ "將會受到傷害與緩慢效果,同時也會影響視線與嗅覺。" -#~ msgid "Moscow" -#~ msgstr "莫斯科" +#~ msgid "active teargas" +#~ msgstr "啟動中催淚彈" -#~ msgid "Morristown" -#~ msgstr "莫里斯敦" +#~ msgid "" +#~ "This canister of teargas has had its pin removed, indicating that it is " +#~ "(or will shortly be) expelling highly toxic gas." +#~ msgstr "這個催淚彈的插梢已被拔出,將會產生劇毒性的瓦斯。" -#~ msgid "Morrill" -#~ msgstr "莫里爾" +#~ msgid "" +#~ "Use this item to pull the pin. Five turns after you do that, it will " +#~ "begin to expel a thick black smoke. This smoke will slow those who enter " +#~ "it, as well as obscuring vision and scent." +#~ msgstr "" +#~ "使用這個物品時會拉開插梢。5回合後會產生濃厚的黑色煙霧。能夠讓身處其中的生" +#~ "物行動緩慢,同時也會影響視力與嗅覺。" -#~ msgid "Moro Plantation" -#~ msgstr "摩洛森林" +#~ msgid "" +#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " +#~ "the rag; you will, of course, need a lighter in your inventory to do " +#~ "this. After lighting it, throw it to cause fires." +#~ msgstr "" +#~ "一罐裝有可燃性液體的瓶子,瓶口塞有布條。使用這個物品將會點燃;當然你要有個" +#~ "打火機才能點。點燃後,投擲出去會產生火焰。" -#~ msgid "Moretown" -#~ msgstr "摩爾鎮" +#~ msgid "" +#~ "A glass vial, split into two chambers. The divider is removable, which " +#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " +#~ "happens if you throw the vial) they will spill out as a pool of potent " +#~ "acid." +#~ msgstr "" +#~ "一個有兩個艙室的玻璃小瓶。若是分隔插梢拔出後,會讓兩個艙室的化學液體開始混" +#~ "合作用。若混合物暴露在空氣中(當你投擲出小瓶)將會開始成為強酸性的液體。" -#~ msgid "Moose River" -#~ msgstr "穆斯河" +#~ msgid "" +#~ "A glass vial, with two chemicals mixing inside. If this mixture is " +#~ "exposed to air (as happens if you throw the vial), they will spill out as " +#~ "a pool of potent acid." +#~ msgstr "" +#~ "一個有玻璃小瓶,內有由兩種化學物質混合的液體。若混合物暴露在空氣中(當你投" +#~ "擲出小瓶)將會開始成為強酸性的液體。" -#~ msgid "Montville" -#~ msgstr "蒙特維爾" +#~ msgid "" +#~ "Several sticks of explosives with a fuse attached. Use this item to light " +#~ "the fuse; you will, of course, need a lighter in your inventory to do " +#~ "this. Shortly after lighting the fuse, this item will explode, so get " +#~ "away!" +#~ msgstr "" +#~ "加上了引線連結的數根炸藥。使用這個物品將會點燃引線;當然你需要個打火機在你" +#~ "的物品欄才能點。當引線很快的燒完後,這個物品將會爆炸,所以快逃!" -#~ msgid "Montpelier" -#~ msgstr "蒙彼利埃" +#~ msgid "" +#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " +#~ "now." +#~ msgstr "這個炸藥的引線已經點燃並嘶嘶作響。將會隨時被引爆。" -#~ msgid "Monticello" -#~ msgstr "蒙蒂塞洛" +#~ msgid "" +#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " +#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " +#~ "they will begin to explode, so throw them quickly!" +#~ msgstr "" +#~ "一包裝有25發鞭炮及引線的物品。使用這個物品將會點燃;當然你要有個打火機。當" +#~ "點燃後不久將會開始爆炸,所以趕快投擲出去!" -#~ msgid "Montgomery" -#~ msgstr "蒙哥馬利" +#~ msgid "" +#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " +#~ "them quickly before the start to explode." +#~ msgstr "" +#~ "一包裝有25發鞭炮及引線的物品。這個物品已點燃;不久將會爆炸,趕快投擲出去!" -#~ msgid "Monterey" -#~ msgstr "蒙特利" +#~ msgid "" +#~ "A firecracker with a short fuse. Use this item to light the fuse; you " +#~ "will need a lighter of course. Shortly after you light the fuse it will " +#~ "explode, so throw it quickly!" +#~ msgstr "" +#~ "有個短引線的鞭炮。使用這個物品將會點燃;當然你要有個打火機。當點燃後不久將" +#~ "會開始爆炸,所以趕快投擲出去!" -#~ msgid "Montague" -#~ msgstr "蒙塔古" +#~ msgid "" +#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " +#~ "before it explodes." +#~ msgstr "這鞭炮已點燃引線嘶嘶作響;不久將會爆炸,趕快投擲出去!" -#~ msgid "Mont Vernon" -#~ msgstr "弗農山" +#~ msgid "" +#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " +#~ "air. They are covered with whirring blades and attack by throwing " +#~ "themselves against their target. Use this item to activate the manhack." +#~ msgstr "" +#~ "一架未啟動的鋸鳥。鋸鳥是一種拳頭大的機器人,能夠在空中飛。攻擊目標的方式是" +#~ "直接撞擊敵人,用其身上佈滿嗡嗡旋轉的刀片造成傷害。使用這個物品就能啟動鋸" +#~ "鳥。" -#~ msgid "Monson" -#~ msgstr "蒙森" +#~ msgid "" +#~ "An inactive turret. Using this item involves turning it on and placing it " +#~ "on the ground, where it will attach itself. The turret will then identify " +#~ "you as a friendly, and attack all enemies with an SMG." +#~ msgstr "" +#~ "未啟動的槍塔。使用這個物品並將他放置在地上會自動組裝,他將會用衝鋒槍自動攻" +#~ "擊附近的所有敵人。且不會攻擊你。" -#~ msgid "Monroe" -#~ msgstr "門羅" +#~ msgid "" +#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " +#~ "from the floor, making it easier to sleep" +#~ msgstr "一張緊密卷曲的睡墊。可以讓你跟地板有所阻隔,更容易入睡。" -#~ msgid "Monmouth" -#~ msgstr "蒙默思" +#~ msgid "" +#~ "This huge iron knife has been modified with a fuel tank, insulated " +#~ "handguard and ignition system. When filled with gasoline, a system of " +#~ "torches heats the blade, burning your target." +#~ msgstr "" +#~ "這把大鐵刀被改造成連接了一個油桶,並且絕緣劍柄中有著點火機制。當加滿汽油" +#~ "後,火炬系統將會加熱整支刀子,灼燒你的目標。" -#~ msgid "Monkton" -#~ msgstr "芒克頓" +#~ msgid "" +#~ "This huge iron knife has been modified with a fuel tank, insulated " +#~ "handguard and ignition system. The blade is glowing with heat, making it " +#~ "a great plant scorcher and nightlight." +#~ msgstr "" +#~ "這把大鐵刀被改造成連接了一個油桶,並且絕緣劍柄中有著點火機制。這把刀正在發" +#~ "出他的熱度,讓他成為夜晚中最強大一根火炬。" -#~ msgid "Monhegan" -#~ msgstr "蒙黑根" +#~ msgid "" +#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " +#~ "Though large and heavy compared to other spears, its accuracy and damage " +#~ "are unparalled." +#~ msgstr "" +#~ "一個中世紀的武器由木桿連結鐵刺製成。透過其超群的重量,其精度和損壞無與倫" +#~ "比。" -#~ msgid "Minot" -#~ msgstr "邁諾特" +#~ msgid "" +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. Light it up and show those heathen zombies " +#~ "who's Lord around here." +#~ msgstr "" +#~ "結合了黑暗時代的兩項經典-闊劍和火炬的組合。把它油門催下去,讓那些異教徒殭" +#~ "屍知道誰是老大。" -#~ msgid "Milton" -#~ msgstr "米爾頓" +#~ msgid "" +#~ "A combination of two Dark-Age conflict-resolution classics, the " +#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " +#~ "eat it's heart out." +#~ msgstr "" +#~ "結合了黑暗時代的兩項經典-闊劍和火炬的組合。這把劍正產生高熱。神劍一出誰與" +#~ "爭鋒。" -#~ msgid "Milo" -#~ msgstr "米洛" +#~ msgid "" +#~ "A large blade that has had a portion of the handle wrapped in duct tape, " +#~ "making it easier to wield as a rough machete." +#~ msgstr "一把大刀刃,握把是用大力膠帶纏的。讓它可以被輕易的揮動。" -#~ msgid "Millville" -#~ msgstr "米爾維爾" +#~ msgid "" +#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " +#~ "built into the insulated hilt. When filled with gasoline, the blade can " +#~ "be made scorching hot to singe enemies and light your way." +#~ msgstr "" +#~ "一把加掛了燃料管的大刀,絕緣劍柄中有著小燃料槽與點火機制。當加滿了汽油後," +#~ "這把刀能夠產生高熱燒灼敵人或是當做照明的用途。" -#~ msgid "Millis" -#~ msgstr "米利斯" +#~ msgid "" +#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " +#~ "built into the insulated hilt. The blade is glowing brightly." +#~ msgstr "" +#~ "一把加掛了燃料管的大刀,絕緣劍柄中有著小燃料槽與點火機制。這把刀正在發出明" +#~ "亮的光芒。" -#~ msgid "Millinocket" -#~ msgstr "米利諾基特" +#~ msgid "" +#~ "A large blade attached to a long stick. Could do a considerable amount of " +#~ "damage." +#~ msgstr "一把大刀刃連接在長棍子上。能夠用來造成對手可觀的傷害。" -#~ msgid "Millbury" -#~ msgstr "米爾伯里" +#~ msgid "" +#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " +#~ "corpses." +#~ msgstr "" +#~ "一把銳利的刀子。能夠作為近戰武器是不合格的,但是至少還能用來屠宰屍體。" -#~ msgid "Milford" -#~ msgstr "米爾福德" +#~ msgid "" +#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " +#~ "butchering corpses." +#~ msgstr "" +#~ "一把銳利又沈重的刀子。能夠作為良好的近戰武器,也是用來屠宰屍體的最佳物品。" -#~ msgid "Milbridge" -#~ msgstr "米爾橋" +#~ msgid "" +#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " +#~ "container beneath it to collect water when it rains." +#~ msgstr "" +#~ "一個能夠用來收集雨水的漏斗。在室外 (a)使用 後並且在下方放個容器就能夠收集" +#~ "雨水。" -#~ msgid "Milan" -#~ msgstr "米蘭" +#~ msgid "" +#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " +#~ "outside and place a container beneath it to collect water when it rains." +#~ msgstr "" +#~ "一小型粗製的漏斗可用來收集雨水。在室外 (a)使用 後並且在下方放個容器就能夠" +#~ "收集雨水。" -#~ msgid "Middletown Springs" -#~ msgstr "米德爾敦泉" +#~ msgid "A tool used for disassembling firearm ammunition." +#~ msgstr "一個用來拆解槍械子彈的工具。" -#~ msgid "Middletown" -#~ msgstr "米德爾敦" +#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." +#~ msgstr "一根木材被削成繩套陷阱的觸發裝置" -#~ msgid "Middleton" -#~ msgstr "米德爾頓" +#~ msgid "A large steel pickaxe, strike the earth!" +#~ msgstr "一把鋼製十字鎬,挖吧!" -#~ msgid "Middlesex" -#~ msgstr "米德爾塞克斯" +#~ msgid "Rag, useful in crafting and possibly stopping bleeding" +#~ msgstr "布條,在製作物品與止血時很有用。" -#~ msgid "Middlefield" -#~ msgstr "米德爾菲爾德" +#~ msgid "A piece of kevlar. Can be used to repair kevlar items" +#~ msgstr "一塊凱夫勒纖維板。能夠用於修復凱夫勒纖維製物品。" -#~ msgid "Middlebury" -#~ msgstr "米德爾伯里" +#~ msgid "" +#~ "A sharp needle made from a bone. It would be useful for making rough " +#~ "clothing and items" +#~ msgstr "用骨頭製成的銳利針頭。製作粗糙的服裝和物品時很有用。" -#~ msgid "Middleborough" -#~ msgstr "米德爾堡" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. Usable only " +#~ "once." +#~ msgstr "一個暖暖包,可以用來熱敷或是加熱食物。只能用一次。" -#~ msgid "Mexico" -#~ msgstr "墨西哥" +#~ msgid "" +#~ "A heatpack, used to treat sports injuries and heat food. This one has " +#~ "been used already and is now useless." +#~ msgstr "一個暖暖包,可以用來熱敷或是加熱食物。這個是已經被用過的廢物。" -#~ msgid "Methuen" -#~ msgstr "梅休因" +#~ msgid "" +#~ "A sealed glass jar containing some meat. Activate to open and enjoy." +#~ msgstr "一個密封玻璃罐裝著一些肉。使用它來開啟享用。" -#~ msgid "Merrimack" -#~ msgstr "梅里麥克" +#~ msgid "" +#~ "A sealed glass jar containing human meat. Activate to open and enjoy." +#~ msgstr "一個密封玻璃罐裝著一些人肉。使用它來開啟享用。" -#~ msgid "Merrimac" -#~ msgstr "梅里馬克" +#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." +#~ msgstr "一個密封玻璃罐裝著一些蔬菜。使用它來開啟享用。" -#~ msgid "Merrill" -#~ msgstr "梅里爾" +#~ msgid "" +#~ "A sealed glass jar containing a pickled vegetable. Activate to open and " +#~ "enjoy." +#~ msgstr "一個密封玻璃罐裝著一些醃漬過的蔬菜。使用它來開啟享用。" -#~ msgid "Meriden" -#~ msgstr "梅里登" +#~ msgid "" +#~ "A sealed glass jar containing pickled meat. Activate to open and enjoy." +#~ msgstr "一個密封玻璃罐裝著一些醃漬過的肉。使用它來開啟享用。" -#~ msgid "Meredith" -#~ msgstr "梅雷迪思" +#~ msgid "" +#~ "A sealed glass jar containing pickled human flesh. Activate to open. You " +#~ "might even enjoy it." +#~ msgstr "一個密封玻璃罐裝著一些醃漬過的人肉。使用它來開啟享用。" -#~ msgid "Mercer" -#~ msgstr "默瑟" +#~ msgid "A fluffy towel, can be used to dry yourself." +#~ msgstr "蓬鬆的毛巾,可以用來擦乾自己的身體。" -#~ msgid "Mendon" -#~ msgstr "梅頓" +#~ msgid "A bicycle folded into a relatively portable package." +#~ msgstr "一輛能折疊成便利攜帶的自行車。" -#~ msgid "Melrose" -#~ msgstr "梅爾羅斯" +#~ msgid "" +#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " +#~ "metal, and complete disregard for personal safety. Not as efficient as a " +#~ "factory welder, but it will serve in a pinch." +#~ msgstr "" +#~ "這個電焊機用成捆的銅線,廢鐵製成,完全無視人身安全。效率不如正常電焊機高," +#~ "聊勝於無。" -#~ msgid "Medway" -#~ msgstr "梅德韋" +#~ msgid "" +#~ "A portable electric metalworking forge, powered by standard batteries. " +#~ "Combined with the right tools, you can use this for metalworking." +#~ msgstr "" +#~ "一個能鑄鐵的攜帶式鍛造爐,透過標準電池供電。只要跟正確的工具一起使用,你就" +#~ "能用這個東西來進行鑄造。" -#~ msgid "Medford" -#~ msgstr "梅德福" +#~ msgid "" +#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " +#~ "cooking or in metalworking fabrication recipes." +#~ msgstr "鋼製長鉗。勉強可作為近戰武器,通常是在烹飪或是鑄造時會用到。" -#~ msgid "Medfield" -#~ msgstr "梅德菲爾德" +#~ msgid "" +#~ "A lighter must be carried to use various drugs, like cigarettes, or to " +#~ "light things like molotov cocktails. You can also use a lighter to light " +#~ "nearby items on fire. This one features a flip top cover and can be " +#~ "refueled when empty." +#~ msgstr "" +#~ "多種藥物,以及香煙,汽油彈的好朋友。你同時也能用打火機來點燃附近的物品。這" +#~ "個打火機有著能夠重新充填燃料的設計。" -#~ msgid "Meddybemps" -#~ msgstr "梅蒂" +#~ msgid "" +#~ "A portable charcoal fired metalworking forge. Combined with the right " +#~ "tools, you can use this for metalworking." +#~ msgstr "" +#~ "一個燒木炭能鑄鐵的攜帶式鍛造爐。只要跟正確的工具一起使用,你就能用這個東西" +#~ "來進行鑄造。" -#~ msgid "Mechanic Falls" -#~ msgstr "麥克尼瀑布" +#~ msgid "" +#~ "You can manage to find space for anything! You can carry 40%% more volume." +#~ msgstr "你能夠更有效率的整理你的背包!你能夠多騰出 40%% 的儲物空間。" -#~ msgid "Maynard" -#~ msgstr "梅納德" +#~ msgid "Aaliyah" +#~ msgstr "Aaliyah" -#~ msgid "Maxfield" -#~ msgstr "麥克斯菲爾德" +#~ msgid "Aaron" +#~ msgstr "Aaron" -#~ msgid "Mattawamkeag" -#~ msgstr "馬塔哇" +#~ msgid "Abigail" +#~ msgstr "Abigail" -#~ msgid "Mattapoisett" -#~ msgstr "馬塔波意斯" +#~ msgid "Adam" +#~ msgstr "Adam" -#~ msgid "Mattamiscontis" -#~ msgstr "馬森明康地斯" +#~ msgid "Adams" +#~ msgstr "Adams" -#~ msgid "Matinicus Isle" -#~ msgstr "馬丁尼克斯島" +#~ msgid "Addison" +#~ msgstr "Addison" -#~ msgid "Mashpee" -#~ msgstr "馬什皮" +#~ msgid "Adrian" +#~ msgstr "Adrian" -#~ msgid "Masardis" -#~ msgstr "瑪莎迪斯" +#~ msgid "Aidan" +#~ msgstr "Aidan" -#~ msgid "Marshfield" -#~ msgstr "馬什菲爾德" +#~ msgid "Aiden" +#~ msgstr "Aiden" -#~ msgid "Mars Hill" -#~ msgstr "火星山" +#~ msgid "Aizawa" +#~ msgstr "Aizawa" -#~ msgid "Marlow" -#~ msgstr "馬洛" +#~ msgid "Akiko" +#~ msgstr "Akiko" -#~ msgid "Marlborough" -#~ msgstr "馬爾堡" +#~ msgid "Alex" +#~ msgstr "Alex" -#~ msgid "Marlboro" -#~ msgstr "萬寶路" +#~ msgid "Alexa" +#~ msgstr "Alexa" -#~ msgid "Marion" -#~ msgstr "馬里昂" +#~ msgid "Alexander" +#~ msgstr "Alexander" -#~ msgid "Mariaville" -#~ msgstr "瑪利亞韋爾" +#~ msgid "Alexandra" +#~ msgstr "Alexandra" -#~ msgid "Marblehead" -#~ msgstr "馬布爾黑德" +#~ msgid "Alexis" +#~ msgstr "Alexis" -#~ msgid "Mapleton" -#~ msgstr "梅普爾頓" +#~ msgid "Allen" +#~ msgstr "Allen" -#~ msgid "Mansfield" -#~ msgstr "曼斯菲爾德" +#~ msgid "Allison" +#~ msgstr "Allison" -#~ msgid "Manchester-by-the-Sea" -#~ msgstr "曼徹斯特沿海" +#~ msgid "Alyssa" +#~ msgstr "Alyssa" -#~ msgid "Manchester" -#~ msgstr "曼徹斯特" +#~ msgid "Amelia" +#~ msgstr "Amelia" -#~ msgid "Malden" -#~ msgstr "馬爾登" +#~ msgid "Anderson" +#~ msgstr "Anderson" -#~ msgid "Maidstone" -#~ msgstr "梅德斯通" +#~ msgid "Andrea" +#~ msgstr "Andrea" -#~ msgid "Magalloway Plantation" -#~ msgstr "馬戈洛威森林" +#~ msgid "Andrew" +#~ msgstr "Andrew" -#~ msgid "Madrid" -#~ msgstr "馬德里" +#~ msgid "Angel" +#~ msgstr "Angel" -#~ msgid "Madbury" -#~ msgstr "馬德伯里" +#~ msgid "Angelina" +#~ msgstr "Angelina" -#~ msgid "Madawaska" -#~ msgstr "馬達沃斯卡" +#~ msgid "Anna" +#~ msgstr "Anna" -#~ msgid "Macwahoc Plantation" -#~ msgstr "麥克華霍克森林" +#~ msgid "Anthony" +#~ msgstr "Anthony" -#~ msgid "Machiasport" -#~ msgstr "馬柴厄斯港" +#~ msgid "Ariana" +#~ msgstr "Ariana" -#~ msgid "Machias" -#~ msgstr "馬柴厄斯" +#~ msgid "Arianna" +#~ msgstr "Arianna" -#~ msgid "Lynnfield" -#~ msgstr "林恩菲爾德" +#~ msgid "Ashley" +#~ msgstr "Ashley" -#~ msgid "Lynn" -#~ msgstr "林恩" +#~ msgid "Aubrey" +#~ msgstr "Aubrey" -#~ msgid "Lyndon" -#~ msgstr "林登" +#~ msgid "Audrey" +#~ msgstr "Audrey" -#~ msgid "Lyndeborough" -#~ msgstr "利德堡" +#~ msgid "Austin" +#~ msgstr "Austin" -#~ msgid "Lyme" -#~ msgstr "萊姆" +#~ msgid "Autumn" +#~ msgstr "Autumn" -#~ msgid "Lyman" -#~ msgstr "萊曼" +#~ msgid "Ava" +#~ msgstr "Ava" -#~ msgid "Lunenburg" -#~ msgstr "盧嫩堡" +#~ msgid "Avery" +#~ msgstr "Avery" -#~ msgid "Ludlow" -#~ msgstr "勒德洛" +#~ msgid "Ayden" +#~ msgstr "Ayden" -#~ msgid "Lubec" -#~ msgstr "洛貝克" +#~ msgid "Bailey" +#~ msgstr "Bailey" -#~ msgid "Lowell" -#~ msgstr "洛厄爾" +#~ msgid "Baker" +#~ msgstr "Baker" -#~ msgid "Lovell" -#~ msgstr "洛弗爾" +#~ msgid "Barnes" +#~ msgstr "Barnes" -#~ msgid "Loudon" -#~ msgstr "勞登" +#~ msgid "Bell" +#~ msgstr "Bell" -#~ msgid "Longmeadow" -#~ msgstr "朗梅" +#~ msgid "Benjamin" +#~ msgstr "Benjamin" -#~ msgid "Long Island" -#~ msgstr "長島" +#~ msgid "Bennett" +#~ msgstr "Bennett" -#~ msgid "Londonderry" -#~ msgstr "倫敦德里" +#~ msgid "Blake" +#~ msgstr "Blake" -#~ msgid "Livermore Falls" -#~ msgstr "利弗莫爾瀑布" +#~ msgid "Brady" +#~ msgstr "Brady" -#~ msgid "Livermore" -#~ msgstr "利弗莫爾" +#~ msgid "Brandon" +#~ msgstr "Brandon" -#~ msgid "Littleton" -#~ msgstr "利特爾頓" +#~ msgid "Brayden" +#~ msgstr "Brayden" -#~ msgid "Little Compton" -#~ msgstr "小坎頓" +#~ msgid "Brian" +#~ msgstr "Brian" -#~ msgid "Litchfield" -#~ msgstr "利奇菲爾德" +#~ msgid "Brianna" +#~ msgstr "Brianna" -#~ msgid "Lisbon" -#~ msgstr "里斯本" +#~ msgid "Brody" +#~ msgstr "Brody" -#~ msgid "Linneus" -#~ msgstr "林奈" +#~ msgid "Brooke" +#~ msgstr "Brooke" -#~ msgid "Lincolnville" -#~ msgstr "林肯維爾" +#~ msgid "Brooklyn" +#~ msgstr "Brooklyn" -#~ msgid "Lincoln Plantation" -#~ msgstr "林肯森林" +#~ msgid "Brooks" +#~ msgstr "Brooks" -#~ msgid "Lincoln" -#~ msgstr "林肯" +#~ msgid "Brown" +#~ msgstr "Brown" -#~ msgid "Limington" -#~ msgstr "利明頓" +#~ msgid "Bryan" +#~ msgstr "Bryan" -#~ msgid "Limestone" -#~ msgstr "灰石" +#~ msgid "Bryant" +#~ msgstr "Bryant" -#~ msgid "Limerick" -#~ msgstr "利默里克" +#~ msgid "Butler" +#~ msgstr "Butler" -#~ msgid "Liberty" -#~ msgstr "自由市" +#~ msgid "Caden" +#~ msgstr "Caden" -#~ msgid "Leyden" -#~ msgstr "雷登" +#~ msgid "Caleb" +#~ msgstr "Caleb" -#~ msgid "Lexington" -#~ msgstr "萊克星頓" +#~ msgid "Cameron" +#~ msgstr "Cameron" -#~ msgid "Lewiston" -#~ msgstr "路易斯頓" +#~ msgid "Camilla" +#~ msgstr "Camilla" -#~ msgid "Zoey" -#~ msgstr "Zoey" +#~ msgid "Campbell" +#~ msgstr "Campbell" -#~ msgid "Zoe" -#~ msgstr "Zoe" +#~ msgid "Carlos" +#~ msgstr "Carlos" -#~ msgid "Zachary" -#~ msgstr "Zachary" +#~ msgid "Caroline" +#~ msgstr "Caroline" -#~ msgid "Yuki" -#~ msgstr "Yuki" +#~ msgid "Carson" +#~ msgstr "Carson" -#~ msgid "Young" -#~ msgstr "Young" +#~ msgid "Carter" +#~ msgstr "Carter" -#~ msgid "Xavier" -#~ msgstr "Xavier" +#~ msgid "Charles" +#~ msgstr "Charles" -#~ msgid "Wyatt" -#~ msgstr "Wyatt" +#~ msgid "Charlotte" +#~ msgstr "Charlotte" -#~ msgid "Wright" -#~ msgstr "Wright" +#~ msgid "Chase" +#~ msgstr "Chase" -#~ msgid "Wood" -#~ msgstr "Wood" +#~ msgid "Chloe" +#~ msgstr "Chloe" -#~ msgid "Wilson" -#~ msgstr "Wilson" +#~ msgid "Christian" +#~ msgstr "Christian" -#~ msgid "Williams" -#~ msgstr "Williams" +#~ msgid "Christopher" +#~ msgstr "Christopher" -#~ msgid "William" -#~ msgstr "William" +#~ msgid "Claire" +#~ msgstr "Claire" -#~ msgid "West" -#~ msgstr "West" +#~ msgid "Clark" +#~ msgstr "Clark" -#~ msgid "White" -#~ msgstr "White" +#~ msgid "Cole" +#~ msgstr "Cole" -#~ msgid "Watson" -#~ msgstr "Watson" +#~ msgid "Coleman" +#~ msgstr "Coleman" -#~ msgid "Washington" -#~ msgstr "Washington" +#~ msgid "Collins" +#~ msgstr "Collins" -#~ msgid "Ward" -#~ msgstr "Ward" +#~ msgid "Colton" +#~ msgstr "Colton" -#~ msgid "Walker" -#~ msgstr "Walker" +#~ msgid "Connor" +#~ msgstr "Connor" -#~ msgid "Victoria" -#~ msgstr "Victoria" +#~ msgid "Cook" +#~ msgstr "Cook" -#~ msgid "Vanessa" -#~ msgstr "Vanessa" +#~ msgid "Cooper" +#~ msgstr "Cooper" -#~ msgid "Van Wilde" -#~ msgstr "Van Wilde" +#~ msgid "Cox" +#~ msgstr "Cox" -#~ msgid "Valeria" -#~ msgstr "Valeria" +#~ msgid "Daisuki" +#~ msgstr "Daisuki" -#~ msgid "Tyler" -#~ msgstr "Tyler" +#~ msgid "Daniel" +#~ msgstr "Daniel" -#~ msgid "Turner" -#~ msgstr "Turner" +#~ msgid "David" +#~ msgstr "David" -#~ msgid "Tristan" -#~ msgstr "Tristan" +#~ msgid "Davis" +#~ msgstr "Davis" -#~ msgid "Trinity" -#~ msgstr "Trinity" +#~ msgid "Destiny" +#~ msgstr "Destiny" -#~ msgid "Torres" -#~ msgstr "Torres" +#~ msgid "Diaz" +#~ msgstr "Diaz" -#~ msgid "Thompson" -#~ msgstr "Thompson" +#~ msgid "Diego" +#~ msgstr "Diego" -#~ msgid "Thomas" -#~ msgstr "Thomas" +#~ msgid "Dominic" +#~ msgstr "Dominic" -#~ msgid "Taylor" -#~ msgstr "Taylor" +#~ msgid "Dylan" +#~ msgstr "Dylan" -#~ msgid "Takeuchi" -#~ msgstr "Takeuchi" +#~ msgid "Eben" +#~ msgstr "Eben" -#~ msgid "Sydney" -#~ msgstr "Sydney" +#~ msgid "Edwards" +#~ msgstr "Edwards" -#~ msgid "Stewart" -#~ msgstr "Stewart" +#~ msgid "Eli" +#~ msgstr "Eli" -#~ msgid "Sophie" -#~ msgstr "Sophie" +#~ msgid "Elijah" +#~ msgstr "Elijah" -#~ msgid "Sofia" -#~ msgstr "Sofia" +#~ msgid "Elizabeth" +#~ msgstr "Elizabeth" -#~ msgid "Smith" -#~ msgstr "Smith" +#~ msgid "Ella" +#~ msgstr "Ella" -#~ msgid "Simmons" -#~ msgstr "Simmons" +#~ msgid "Emily" +#~ msgstr "Emily" -#~ msgid "Sean" -#~ msgstr "Sean" +#~ msgid "Emma" +#~ msgstr "Emma" -#~ msgid "Scott" -#~ msgstr "Scott" +#~ msgid "Eric" +#~ msgstr "Eric" -#~ msgid "Savannah" -#~ msgstr "Savannah" +#~ msgid "Ethan" +#~ msgstr "Ethan" -#~ msgid "Sarah" -#~ msgstr "Sarah" +#~ msgid "Evan" +#~ msgstr "Evan" -#~ msgid "Sara" -#~ msgstr "Sara" +#~ msgid "Evans" +#~ msgstr "Evans" -#~ msgid "Sanders" -#~ msgstr "Sanders" +#~ msgid "Evelyn" +#~ msgstr "Evelyn" -#~ msgid "Sanchez" -#~ msgstr "Sanchez" +#~ msgid "Faith" +#~ msgstr "Faith" -#~ msgid "Samuel" -#~ msgstr "Samuel" +#~ msgid "Flores" +#~ msgstr "Flores" -#~ msgid "Samantha" -#~ msgstr "Samantha" +#~ msgid "Foster" +#~ msgstr "Foster" -#~ msgid "Sabastian" -#~ msgstr "Sabastian" +#~ msgid "Gabriel" +#~ msgstr "Gabriel" -#~ msgid "Ryan" -#~ msgstr "Ryan" +#~ msgid "Gabriella" +#~ msgstr "Gabriella" -#~ msgid "Russell" -#~ msgstr "Russell" +#~ msgid "Gabrielle" +#~ msgstr "Gabrielle" -#~ msgid "Ross" -#~ msgstr "Ross" +#~ msgid "Garcia" +#~ msgstr "Garcia" -#~ msgid "Rogers" -#~ msgstr "Rogers" +#~ msgid "Gavin" +#~ msgstr "Gavin" -#~ msgid "Rodriguez" -#~ msgstr "Rodriguez" +#~ msgid "Gendo" +#~ msgstr "Gendo" -#~ msgid "Robinson" -#~ msgstr "Robinson" +#~ msgid "Genesis" +#~ msgstr "Genesis" -#~ msgid "Roberts" -#~ msgstr "Roberts" +#~ msgid "Gianna" +#~ msgstr "Gianna" -#~ msgid "Robert" -#~ msgstr "Robert" +#~ msgid "Gonzales" +#~ msgstr "Gonzales" -#~ msgid "Rivera" -#~ msgstr "Rivera" +#~ msgid "Gonzalez" +#~ msgstr "Gonzalez" -#~ msgid "Riley" -#~ msgstr "Riley" +#~ msgid "Grace" +#~ msgstr "Grace" -#~ msgid "Richardson" -#~ msgstr "Richardson" +#~ msgid "Gracie" +#~ msgstr "Gracie" -#~ msgid "Reed" -#~ msgstr "Reed" +#~ msgid "Gray" +#~ msgstr "Gray" -#~ msgid "Ramirez" -#~ msgstr "Ramirez" +#~ msgid "Green" +#~ msgstr "Green" -#~ msgid "Rachel" -#~ msgstr "Rachel" +#~ msgid "Griffin" +#~ msgstr "Griffin" -#~ msgid "Price" -#~ msgstr "Price" +#~ msgid "Hailey" +#~ msgstr "Hailey" -#~ msgid "Powell" -#~ msgstr "Powell" +#~ msgid "Hall" +#~ msgstr "Hall" -#~ msgid "Phillips" -#~ msgstr "Phillips" +#~ msgid "Hannah" +#~ msgstr "Hannah" -#~ msgid "Peterson" -#~ msgstr "Peterson" +#~ msgid "Harris" +#~ msgstr "Harris" -#~ msgid "Perry" -#~ msgstr "Perry" +#~ msgid "Hayden" +#~ msgstr "Hayden" -#~ msgid "Perez" -#~ msgstr "Perez" +#~ msgid "Hayes" +#~ msgstr "Hayes" -#~ msgid "Payton" -#~ msgstr "Payton" +#~ msgid "Heather" +#~ msgstr "Heather" -#~ msgid "Patterson" -#~ msgstr "Patterson" +#~ msgid "Henderson" +#~ msgstr "Henderson" -#~ msgid "Parker" -#~ msgstr "Parker" +#~ msgid "Henry" +#~ msgstr "Henry" -#~ msgid "Paige" -#~ msgstr "Paige" +#~ msgid "Hernandez" +#~ msgstr "Hernandez" -#~ msgid "Owen" -#~ msgstr "Owen" +#~ msgid "Hikari" +#~ msgstr "Hikari" -#~ msgid "Olivia" -#~ msgstr "Olivia" +#~ msgid "Hill" +#~ msgstr "Hill" -#~ msgid "Nuku" -#~ msgstr "Nuku" +#~ msgid "Howard" +#~ msgstr "Howard" -#~ msgid "Noah" -#~ msgstr "Noah" +#~ msgid "Hughes" +#~ msgstr "Hughes" -#~ msgid "Nicholas" -#~ msgstr "Nicholas" +#~ msgid "Hunter" +#~ msgstr "Hunter" -#~ msgid "Nevaeh" -#~ msgstr "Nevaeh" +#~ msgid "Ian" +#~ msgstr "Ian" -#~ msgid "Nelson" -#~ msgstr "Nelson" +#~ msgid "Isaac" +#~ msgstr "Isaac" -#~ msgid "Natsuki" -#~ msgstr "Natsuki" +#~ msgid "Isabel" +#~ msgstr "Isabel" -#~ msgid "Nathaniel" -#~ msgstr "Nathaniel" +#~ msgid "Isabella" +#~ msgstr "Isabella" -#~ msgid "Nathan" -#~ msgstr "Nathan" +#~ msgid "Isabelle" +#~ msgstr "Isabelle" -#~ msgid "Natalie" -#~ msgstr "Natalie" +#~ msgid "Isaiah" +#~ msgstr "Isaiah" -#~ msgid "Nakiya" -#~ msgstr "Nakiya" +#~ msgid "Jack" +#~ msgstr "Jack" -#~ msgid "Murphy" -#~ msgstr "Murphy" +#~ msgid "Jackson" +#~ msgstr "Jackson" -#~ msgid "Morris" -#~ msgstr "Morris" +#~ msgid "Jacob" +#~ msgstr "Jacob" -#~ msgid "Morgan" -#~ msgstr "Morgan" +#~ msgid "Jaden" +#~ msgstr "Jaden" -#~ msgid "Moore" -#~ msgstr "Moore" +#~ msgid "James" +#~ msgstr "James" -#~ msgid "Mitchell" -#~ msgstr "Mitchell" +#~ msgid "Jasmine" +#~ msgstr "Jasmine" -#~ msgid "Miller" -#~ msgstr "Miller" +#~ msgid "Jason" +#~ msgstr "Jason" -#~ msgid "Michael" -#~ msgstr "Michael" +#~ msgid "Jayden" +#~ msgstr "Jayden" -#~ msgid "Mia" -#~ msgstr "Mia" +#~ msgid "Jen" +#~ msgstr "Jen" -#~ msgid "Melanie" -#~ msgstr "Melanie" +#~ msgid "Jenkins" +#~ msgstr "Jenkins" -#~ msgid "Megan" -#~ msgstr "Megan" +#~ msgid "Jennifer" +#~ msgstr "Jennifer" -#~ msgid "Maya" -#~ msgstr "Maya" +#~ msgid "Jeremiah" +#~ msgstr "Jeremiah" -#~ msgid "Matthew" -#~ msgstr "Matthew" +#~ msgid "Jessica" +#~ msgstr "Jessica" -#~ msgid "Mason" -#~ msgstr "Mason" +#~ msgid "Jessie" +#~ msgstr "Jessie" -#~ msgid "Mary" -#~ msgstr "Mary" +#~ msgid "Jesus" +#~ msgstr "Jesus" -#~ msgid "Martinez" -#~ msgstr "Martinez" +#~ msgid "Jocelyn" +#~ msgstr "Jocelyn" -#~ msgid "Martin" -#~ msgstr "Martin" +#~ msgid "John" +#~ msgstr "John" -#~ msgid "Mariah" -#~ msgstr "Mariah" +#~ msgid "Johnson" +#~ msgstr "Johnson" -#~ msgid "Maria" -#~ msgstr "Maria" +#~ msgid "Jonathan" +#~ msgstr "Jonathan" -#~ msgid "Makayla" -#~ msgstr "Makayla" +#~ msgid "Jones" +#~ msgstr "Jones" -#~ msgid "Madison" -#~ msgstr "Madison" +#~ msgid "Jordan" +#~ msgstr "Jordan" -#~ msgid "Madelyn" -#~ msgstr "Madelyn" +#~ msgid "Jose" +#~ msgstr "Jose" -#~ msgid "Madeline" -#~ msgstr "Madeline" +#~ msgid "Joseph" +#~ msgstr "Joseph" -#~ msgid "Luke" -#~ msgstr "Luke" +#~ msgid "Joshua" +#~ msgstr "Joshua" -#~ msgid "Luis" -#~ msgstr "Luis" +#~ msgid "Josiah" +#~ msgstr "Josiah" -#~ msgid "Lucas" -#~ msgstr "Lucas" +#~ msgid "Juan" +#~ msgstr "Juan" -#~ msgid "Lopez" -#~ msgstr "Lopez" +#~ msgid "Julia" +#~ msgstr "Julia" -#~ msgid "Long" -#~ msgstr "Long" +#~ msgid "Julian" +#~ msgstr "Julian" -#~ msgid "Logan" -#~ msgstr "Logan" +#~ msgid "Justin" +#~ msgstr "Justin" -#~ msgid "Lily" -#~ msgstr "Lily" +#~ msgid "Kaden" +#~ msgstr "Kaden" -#~ msgid "Lillian" -#~ msgstr "Lillian" +#~ msgid "Kaiko" +#~ msgstr "Kaiko" -#~ msgid "Liam" -#~ msgstr "Liam" +#~ msgid "Kaitlin" +#~ msgstr "Kaitlin" -#~ msgid "Lewis" -#~ msgstr "Lewis" +#~ msgid "Katelyn" +#~ msgstr "Katelyn" -#~ msgid "Lee" -#~ msgstr "Lee" +#~ msgid "Katie" +#~ msgstr "Katie" -#~ msgid "Leah" -#~ msgstr "Leah" +#~ msgid "Kayla" +#~ msgstr "Kayla" -#~ msgid "Layla" -#~ msgstr "Layla" +#~ msgid "Kaylee" +#~ msgstr "Kaylee" -#~ msgid "Lauren" -#~ msgstr "Lauren" +#~ msgid "Keita" +#~ msgstr "Keita" -#~ msgid "Landon" -#~ msgstr "Landon" +#~ msgid "Kelly" +#~ msgstr "Kelly" -#~ msgid "Kyosuki" -#~ msgstr "Kyosuki" +#~ msgid "Kevin" +#~ msgstr "Kevin" -#~ msgid "Kylie" -#~ msgstr "Kylie" +#~ msgid "Kim" +#~ msgstr "Kim" -#~ msgid "Kira" -#~ msgstr "Kira" +#~ msgid "Kimberly" +#~ msgstr "Kimberly" #~ msgid "King" #~ msgstr "King" -#~ msgid "Kimberly" -#~ msgstr "Kimberly" +#~ msgid "Kira" +#~ msgstr "Kira" -#~ msgid "Kim" -#~ msgstr "Kim" +#~ msgid "Kylie" +#~ msgstr "Kylie" -#~ msgid "Kevin" -#~ msgstr "Kevin" +#~ msgid "Kyosuki" +#~ msgstr "Kyosuki" -#~ msgid "Kelly" -#~ msgstr "Kelly" +#~ msgid "Landon" +#~ msgstr "Landon" -#~ msgid "Keita" -#~ msgstr "Keita" +#~ msgid "Lauren" +#~ msgstr "Lauren" -#~ msgid "Kaylee" -#~ msgstr "Kaylee" +#~ msgid "Layla" +#~ msgstr "Layla" -#~ msgid "Kayla" -#~ msgstr "Kayla" +#~ msgid "Leah" +#~ msgstr "Leah" -#~ msgid "Katie" -#~ msgstr "Katie" +#~ msgid "Lee" +#~ msgstr "Lee" -#~ msgid "Katelyn" -#~ msgstr "Katelyn" +#~ msgid "Lewis" +#~ msgstr "Lewis" -#~ msgid "Kaitlin" -#~ msgstr "Kaitlin" +#~ msgid "Liam" +#~ msgstr "Liam" -#~ msgid "Kaiko" -#~ msgstr "Kaiko" +#~ msgid "Lillian" +#~ msgstr "Lillian" -#~ msgid "Kaden" -#~ msgstr "Kaden" +#~ msgid "Lily" +#~ msgstr "Lily" -#~ msgid "Justin" -#~ msgstr "Justin" +#~ msgid "Logan" +#~ msgstr "Logan" -#~ msgid "Julian" -#~ msgstr "Julian" +#~ msgid "Long" +#~ msgstr "Long" -#~ msgid "Julia" -#~ msgstr "Julia" +#~ msgid "Lopez" +#~ msgstr "Lopez" -#~ msgid "Juan" -#~ msgstr "Juan" +#~ msgid "Lucas" +#~ msgstr "Lucas" -#~ msgid "Josiah" -#~ msgstr "Josiah" +#~ msgid "Luis" +#~ msgstr "Luis" -#~ msgid "Joshua" -#~ msgstr "Joshua" +#~ msgid "Luke" +#~ msgstr "Luke" -#~ msgid "Joseph" -#~ msgstr "Joseph" +#~ msgid "Madeline" +#~ msgstr "Madeline" -#~ msgid "Jose" -#~ msgstr "Jose" +#~ msgid "Madelyn" +#~ msgstr "Madelyn" -#~ msgid "Jordan" -#~ msgstr "Jordan" +#~ msgid "Madison" +#~ msgstr "Madison" -#~ msgid "Jones" -#~ msgstr "Jones" +#~ msgid "Makayla" +#~ msgstr "Makayla" -#~ msgid "Jonathan" -#~ msgstr "Jonathan" +#~ msgid "Maria" +#~ msgstr "Maria" -#~ msgid "Johnson" -#~ msgstr "Johnson" +#~ msgid "Mariah" +#~ msgstr "Mariah" -#~ msgid "John" -#~ msgstr "John" +#~ msgid "Martin" +#~ msgstr "Martin" -#~ msgid "Jocelyn" -#~ msgstr "Jocelyn" +#~ msgid "Martinez" +#~ msgstr "Martinez" -#~ msgid "Jesus" -#~ msgstr "Jesus" +#~ msgid "Mary" +#~ msgstr "Mary" -#~ msgid "Jessie" -#~ msgstr "Jessie" +#~ msgid "Mason" +#~ msgstr "Mason" -#~ msgid "Jessica" -#~ msgstr "Jessica" +#~ msgid "Matthew" +#~ msgstr "Matthew" -#~ msgid "Jeremiah" -#~ msgstr "Jeremiah" +#~ msgid "Maya" +#~ msgstr "Maya" -#~ msgid "Jennifer" -#~ msgstr "Jennifer" +#~ msgid "Megan" +#~ msgstr "Megan" -#~ msgid "Jenkins" -#~ msgstr "Jenkins" +#~ msgid "Melanie" +#~ msgstr "Melanie" -#~ msgid "Jen" -#~ msgstr "Jen" +#~ msgid "Mia" +#~ msgstr "Mia" -#~ msgid "Jayden" -#~ msgstr "Jayden" +#~ msgid "Michael" +#~ msgstr "Michael" -#~ msgid "Jason" -#~ msgstr "Jason" +#~ msgid "Miller" +#~ msgstr "Miller" -#~ msgid "Jasmine" -#~ msgstr "Jasmine" +#~ msgid "Mitchell" +#~ msgstr "Mitchell" -#~ msgid "James" -#~ msgstr "James" +#~ msgid "Moore" +#~ msgstr "Moore" -#~ msgid "Jaden" -#~ msgstr "Jaden" +#~ msgid "Morgan" +#~ msgstr "Morgan" -#~ msgid "Jacob" -#~ msgstr "Jacob" +#~ msgid "Morris" +#~ msgstr "Morris" -#~ msgid "Jackson" -#~ msgstr "Jackson" +#~ msgid "Murphy" +#~ msgstr "Murphy" -#~ msgid "Jack" -#~ msgstr "Jack" +#~ msgid "Nakiya" +#~ msgstr "Nakiya" -#~ msgid "Isaiah" -#~ msgstr "Isaiah" +#~ msgid "Natalie" +#~ msgstr "Natalie" -#~ msgid "Isabelle" -#~ msgstr "Isabelle" +#~ msgid "Nathan" +#~ msgstr "Nathan" -#~ msgid "Isabella" -#~ msgstr "Isabella" +#~ msgid "Nathaniel" +#~ msgstr "Nathaniel" -#~ msgid "Isabel" -#~ msgstr "Isabel" +#~ msgid "Natsuki" +#~ msgstr "Natsuki" -#~ msgid "Isaac" -#~ msgstr "Isaac" +#~ msgid "Nelson" +#~ msgstr "Nelson" -#~ msgid "Ian" -#~ msgstr "Ian" +#~ msgid "Nevaeh" +#~ msgstr "Nevaeh" -#~ msgid "Hunter" -#~ msgstr "Hunter" +#~ msgid "Nicholas" +#~ msgstr "Nicholas" -#~ msgid "Hughes" -#~ msgstr "Hughes" +#~ msgid "Noah" +#~ msgstr "Noah" -#~ msgid "Howard" -#~ msgstr "Howard" +#~ msgid "Nuku" +#~ msgstr "Nuku" -#~ msgid "Hill" -#~ msgstr "Hill" +#~ msgid "Olivia" +#~ msgstr "Olivia" -#~ msgid "Hikari" -#~ msgstr "Hikari" +#~ msgid "Owen" +#~ msgstr "Owen" -#~ msgid "Hernandez" -#~ msgstr "Hernandez" +#~ msgid "Paige" +#~ msgstr "Paige" -#~ msgid "Henry" -#~ msgstr "Henry" +#~ msgid "Parker" +#~ msgstr "Parker" -#~ msgid "Henderson" -#~ msgstr "Henderson" +#~ msgid "Patterson" +#~ msgstr "Patterson" -#~ msgid "Heather" -#~ msgstr "Heather" +#~ msgid "Payton" +#~ msgstr "Payton" -#~ msgid "Hayes" -#~ msgstr "Hayes" +#~ msgid "Perez" +#~ msgstr "Perez" -#~ msgid "Hayden" -#~ msgstr "Hayden" +#~ msgid "Perry" +#~ msgstr "Perry" -#~ msgid "Harris" -#~ msgstr "Harris" +#~ msgid "Peterson" +#~ msgstr "Peterson" -#~ msgid "Hannah" -#~ msgstr "Hannah" +#~ msgid "Phillips" +#~ msgstr "Phillips" -#~ msgid "Hall" -#~ msgstr "Hall" +#~ msgid "Powell" +#~ msgstr "Powell" -#~ msgid "Hailey" -#~ msgstr "Hailey" +#~ msgid "Price" +#~ msgstr "Price" -#~ msgid "Griffin" -#~ msgstr "Griffin" +#~ msgid "Rachel" +#~ msgstr "Rachel" -#~ msgid "Green" -#~ msgstr "Green" +#~ msgid "Ramirez" +#~ msgstr "Ramirez" -#~ msgid "Gray" -#~ msgstr "Gray" +#~ msgid "Reed" +#~ msgstr "Reed" -#~ msgid "Gracie" -#~ msgstr "Gracie" +#~ msgid "Richardson" +#~ msgstr "Richardson" -#~ msgid "Grace" -#~ msgstr "Grace" +#~ msgid "Riley" +#~ msgstr "Riley" -#~ msgid "Gonzalez" -#~ msgstr "Gonzalez" +#~ msgid "Rivera" +#~ msgstr "Rivera" -#~ msgid "Gonzales" -#~ msgstr "Gonzales" +#~ msgid "Robert" +#~ msgstr "Robert" -#~ msgid "Gianna" -#~ msgstr "Gianna" +#~ msgid "Roberts" +#~ msgstr "Roberts" -#~ msgid "Genesis" -#~ msgstr "Genesis" +#~ msgid "Robinson" +#~ msgstr "Robinson" -#~ msgid "Gendo" -#~ msgstr "Gendo" +#~ msgid "Rodriguez" +#~ msgstr "Rodriguez" -#~ msgid "Gavin" -#~ msgstr "Gavin" +#~ msgid "Rogers" +#~ msgstr "Rogers" -#~ msgid "Garcia" -#~ msgstr "Garcia" +#~ msgid "Ross" +#~ msgstr "Ross" -#~ msgid "Gabrielle" -#~ msgstr "Gabrielle" +#~ msgid "Russell" +#~ msgstr "Russell" -#~ msgid "Gabriella" -#~ msgstr "Gabriella" +#~ msgid "Ryan" +#~ msgstr "Ryan" -#~ msgid "Gabriel" -#~ msgstr "Gabriel" +#~ msgid "Sabastian" +#~ msgstr "Sabastian" -#~ msgid "Foster" -#~ msgstr "Foster" +#~ msgid "Samantha" +#~ msgstr "Samantha" -#~ msgid "Flores" -#~ msgstr "Flores" +#~ msgid "Samuel" +#~ msgstr "Samuel" -#~ msgid "Faith" -#~ msgstr "Faith" +#~ msgid "Sanchez" +#~ msgstr "Sanchez" -#~ msgid "Evelyn" -#~ msgstr "Evelyn" +#~ msgid "Sanders" +#~ msgstr "Sanders" -#~ msgid "Evans" -#~ msgstr "Evans" +#~ msgid "Sara" +#~ msgstr "Sara" -#~ msgid "Evan" -#~ msgstr "Evan" +#~ msgid "Sarah" +#~ msgstr "Sarah" -#~ msgid "Ethan" -#~ msgstr "Ethan" +#~ msgid "Savannah" +#~ msgstr "Savannah" -#~ msgid "Eric" -#~ msgstr "Eric" +#~ msgid "Scott" +#~ msgstr "Scott" -#~ msgid "Emma" -#~ msgstr "Emma" +#~ msgid "Sean" +#~ msgstr "Sean" -#~ msgid "Emily" -#~ msgstr "Emily" +#~ msgid "Simmons" +#~ msgstr "Simmons" -#~ msgid "Ella" -#~ msgstr "Ella" +#~ msgid "Smith" +#~ msgstr "Smith" -#~ msgid "Elizabeth" -#~ msgstr "Elizabeth" +#~ msgid "Sofia" +#~ msgstr "Sofia" -#~ msgid "Elijah" -#~ msgstr "Elijah" +#~ msgid "Sophie" +#~ msgstr "Sophie" -#~ msgid "Eli" -#~ msgstr "Eli" +#~ msgid "Stewart" +#~ msgstr "Stewart" -#~ msgid "Edwards" -#~ msgstr "Edwards" +#~ msgid "Sydney" +#~ msgstr "Sydney" -#~ msgid "Eben" -#~ msgstr "Eben" +#~ msgid "Takeuchi" +#~ msgstr "Takeuchi" -#~ msgid "Dylan" -#~ msgstr "Dylan" +#~ msgid "Taylor" +#~ msgstr "Taylor" -#~ msgid "Dominic" -#~ msgstr "Dominic" +#~ msgid "Thomas" +#~ msgstr "Thomas" -#~ msgid "Diego" -#~ msgstr "Diego" +#~ msgid "Thompson" +#~ msgstr "Thompson" -#~ msgid "Diaz" -#~ msgstr "Diaz" +#~ msgid "Torres" +#~ msgstr "Torres" -#~ msgid "Destiny" -#~ msgstr "Destiny" +#~ msgid "Trinity" +#~ msgstr "Trinity" -#~ msgid "Davis" -#~ msgstr "Davis" +#~ msgid "Tristan" +#~ msgstr "Tristan" -#~ msgid "David" -#~ msgstr "David" +#~ msgid "Turner" +#~ msgstr "Turner" -#~ msgid "Daniel" -#~ msgstr "Daniel" +#~ msgid "Tyler" +#~ msgstr "Tyler" -#~ msgid "Daisuki" -#~ msgstr "Daisuki" +#~ msgid "Valeria" +#~ msgstr "Valeria" -#~ msgid "Cox" -#~ msgstr "Cox" +#~ msgid "Van Wilde" +#~ msgstr "Van Wilde" -#~ msgid "Cooper" -#~ msgstr "Cooper" +#~ msgid "Vanessa" +#~ msgstr "Vanessa" -#~ msgid "Cook" -#~ msgstr "Cook" +#~ msgid "Victoria" +#~ msgstr "Victoria" -#~ msgid "Connor" -#~ msgstr "Connor" +#~ msgid "Walker" +#~ msgstr "Walker" -#~ msgid "Colton" -#~ msgstr "Colton" +#~ msgid "Ward" +#~ msgstr "Ward" -#~ msgid "Collins" -#~ msgstr "Collins" +#~ msgid "Washington" +#~ msgstr "Washington" -#~ msgid "Coleman" -#~ msgstr "Coleman" +#~ msgid "Watson" +#~ msgstr "Watson" -#~ msgid "Cole" -#~ msgstr "Cole" +#~ msgid "White" +#~ msgstr "White" -#~ msgid "Clark" -#~ msgstr "Clark" +#~ msgid "West" +#~ msgstr "West" -#~ msgid "Claire" -#~ msgstr "Claire" +#~ msgid "William" +#~ msgstr "William" -#~ msgid "Christopher" -#~ msgstr "Christopher" +#~ msgid "Williams" +#~ msgstr "Williams" -#~ msgid "Christian" -#~ msgstr "Christian" +#~ msgid "Wilson" +#~ msgstr "Wilson" -#~ msgid "Chloe" -#~ msgstr "Chloe" +#~ msgid "Wood" +#~ msgstr "Wood" -#~ msgid "Chase" -#~ msgstr "Chase" +#~ msgid "Wright" +#~ msgstr "Wright" -#~ msgid "Charlotte" -#~ msgstr "Charlotte" +#~ msgid "Wyatt" +#~ msgstr "Wyatt" -#~ msgid "Charles" -#~ msgstr "Charles" +#~ msgid "Xavier" +#~ msgstr "Xavier" -#~ msgid "Carter" -#~ msgstr "Carter" +#~ msgid "Young" +#~ msgstr "Young" -#~ msgid "Carson" -#~ msgstr "Carson" +#~ msgid "Yuki" +#~ msgstr "Yuki" -#~ msgid "Caroline" -#~ msgstr "Caroline" +#~ msgid "Zachary" +#~ msgstr "Zachary" -#~ msgid "Carlos" -#~ msgstr "Carlos" +#~ msgid "Zoe" +#~ msgstr "Zoe" -#~ msgid "Campbell" -#~ msgstr "Campbell" +#~ msgid "Zoey" +#~ msgstr "Zoey" -#~ msgid "Camilla" -#~ msgstr "Camilla" +#~ msgid "Lewiston" +#~ msgstr "路易斯頓" -#~ msgid "Cameron" -#~ msgstr "Cameron" +#~ msgid "Lexington" +#~ msgstr "萊克星頓" -#~ msgid "Caleb" -#~ msgstr "Caleb" +#~ msgid "Leyden" +#~ msgstr "雷登" -#~ msgid "Caden" -#~ msgstr "Caden" +#~ msgid "Liberty" +#~ msgstr "自由市" -#~ msgid "Butler" -#~ msgstr "Butler" +#~ msgid "Limerick" +#~ msgstr "利默里克" -#~ msgid "Bryant" -#~ msgstr "Bryant" +#~ msgid "Limestone" +#~ msgstr "灰石" -#~ msgid "Bryan" -#~ msgstr "Bryan" +#~ msgid "Limington" +#~ msgstr "利明頓" -#~ msgid "Brown" -#~ msgstr "Brown" +#~ msgid "Lincoln" +#~ msgstr "林肯" -#~ msgid "Brooks" -#~ msgstr "Brooks" +#~ msgid "Lincoln Plantation" +#~ msgstr "林肯森林" -#~ msgid "Brooklyn" -#~ msgstr "Brooklyn" +#~ msgid "Lincolnville" +#~ msgstr "林肯維爾" -#~ msgid "Brooke" -#~ msgstr "Brooke" +#~ msgid "Linneus" +#~ msgstr "林奈" -#~ msgid "Brody" -#~ msgstr "Brody" +#~ msgid "Lisbon" +#~ msgstr "里斯本" -#~ msgid "Brianna" -#~ msgstr "Brianna" +#~ msgid "Litchfield" +#~ msgstr "利奇菲爾德" -#~ msgid "Brian" -#~ msgstr "Brian" +#~ msgid "Little Compton" +#~ msgstr "小坎頓" -#~ msgid "Brayden" -#~ msgstr "Brayden" +#~ msgid "Littleton" +#~ msgstr "利特爾頓" -#~ msgid "Brandon" -#~ msgstr "Brandon" +#~ msgid "Livermore" +#~ msgstr "利弗莫爾" -#~ msgid "Brady" -#~ msgstr "Brady" +#~ msgid "Livermore Falls" +#~ msgstr "利弗莫爾瀑布" -#~ msgid "Blake" -#~ msgstr "Blake" +#~ msgid "Londonderry" +#~ msgstr "倫敦德里" -#~ msgid "Bennett" -#~ msgstr "Bennett" +#~ msgid "Long Island" +#~ msgstr "長島" -#~ msgid "Benjamin" -#~ msgstr "Benjamin" +#~ msgid "Longmeadow" +#~ msgstr "朗梅" -#~ msgid "Bell" -#~ msgstr "Bell" +#~ msgid "Loudon" +#~ msgstr "勞登" -#~ msgid "Barnes" -#~ msgstr "Barnes" +#~ msgid "Lovell" +#~ msgstr "洛弗爾" -#~ msgid "Baker" -#~ msgstr "Baker" +#~ msgid "Lowell" +#~ msgstr "洛厄爾" -#~ msgid "Bailey" -#~ msgstr "Bailey" +#~ msgid "Lubec" +#~ msgstr "洛貝克" -#~ msgid "Ayden" -#~ msgstr "Ayden" +#~ msgid "Ludlow" +#~ msgstr "勒德洛" -#~ msgid "Avery" -#~ msgstr "Avery" +#~ msgid "Lunenburg" +#~ msgstr "盧嫩堡" -#~ msgid "Ava" -#~ msgstr "Ava" +#~ msgid "Lyman" +#~ msgstr "萊曼" -#~ msgid "Autumn" -#~ msgstr "Autumn" +#~ msgid "Lyme" +#~ msgstr "萊姆" -#~ msgid "Austin" -#~ msgstr "Austin" +#~ msgid "Lyndeborough" +#~ msgstr "利德堡" -#~ msgid "Audrey" -#~ msgstr "Audrey" +#~ msgid "Lyndon" +#~ msgstr "林登" -#~ msgid "Aubrey" -#~ msgstr "Aubrey" +#~ msgid "Lynn" +#~ msgstr "林恩" -#~ msgid "Ashley" -#~ msgstr "Ashley" +#~ msgid "Lynnfield" +#~ msgstr "林恩菲爾德" -#~ msgid "Arianna" -#~ msgstr "Arianna" +#~ msgid "Machias" +#~ msgstr "馬柴厄斯" -#~ msgid "Ariana" -#~ msgstr "Ariana" +#~ msgid "Machiasport" +#~ msgstr "馬柴厄斯港" -#~ msgid "Anthony" -#~ msgstr "Anthony" +#~ msgid "Macwahoc Plantation" +#~ msgstr "麥克華霍克森林" -#~ msgid "Anna" -#~ msgstr "Anna" +#~ msgid "Madawaska" +#~ msgstr "馬達沃斯卡" -#~ msgid "Angelina" -#~ msgstr "Angelina" +#~ msgid "Madbury" +#~ msgstr "馬德伯里" -#~ msgid "Angel" -#~ msgstr "Angel" +#~ msgid "Madrid" +#~ msgstr "馬德里" -#~ msgid "Andrew" -#~ msgstr "Andrew" +#~ msgid "Magalloway Plantation" +#~ msgstr "馬戈洛威森林" -#~ msgid "Andrea" -#~ msgstr "Andrea" +#~ msgid "Maidstone" +#~ msgstr "梅德斯通" -#~ msgid "Anderson" -#~ msgstr "Anderson" +#~ msgid "Malden" +#~ msgstr "馬爾登" -#~ msgid "Amelia" -#~ msgstr "Amelia" +#~ msgid "Manchester" +#~ msgstr "曼徹斯特" -#~ msgid "Alyssa" -#~ msgstr "Alyssa" +#~ msgid "Manchester-by-the-Sea" +#~ msgstr "曼徹斯特沿海" -#~ msgid "Allison" -#~ msgstr "Allison" +#~ msgid "Mansfield" +#~ msgstr "曼斯菲爾德" -#~ msgid "Allen" -#~ msgstr "Allen" +#~ msgid "Mapleton" +#~ msgstr "梅普爾頓" -#~ msgid "Alexis" -#~ msgstr "Alexis" +#~ msgid "Marblehead" +#~ msgstr "馬布爾黑德" -#~ msgid "Alexandra" -#~ msgstr "Alexandra" +#~ msgid "Mariaville" +#~ msgstr "瑪利亞韋爾" -#~ msgid "Alexander" -#~ msgstr "Alexander" +#~ msgid "Marion" +#~ msgstr "馬里昂" -#~ msgid "Alexa" -#~ msgstr "Alexa" +#~ msgid "Marlboro" +#~ msgstr "萬寶路" -#~ msgid "Alex" -#~ msgstr "Alex" +#~ msgid "Marlborough" +#~ msgstr "馬爾堡" -#~ msgid "Akiko" -#~ msgstr "Akiko" +#~ msgid "Marlow" +#~ msgstr "馬洛" -#~ msgid "Aizawa" -#~ msgstr "Aizawa" +#~ msgid "Mars Hill" +#~ msgstr "火星山" -#~ msgid "Aiden" -#~ msgstr "Aiden" +#~ msgid "Marshfield" +#~ msgstr "馬什菲爾德" -#~ msgid "Aidan" -#~ msgstr "Aidan" +#~ msgid "Masardis" +#~ msgstr "瑪莎迪斯" -#~ msgid "Adrian" -#~ msgstr "Adrian" +#~ msgid "Mashpee" +#~ msgstr "馬什皮" -#~ msgid "Addison" -#~ msgstr "Addison" +#~ msgid "Matinicus Isle" +#~ msgstr "馬丁尼克斯島" -#~ msgid "Adams" -#~ msgstr "Adams" +#~ msgid "Mattamiscontis" +#~ msgstr "馬森明康地斯" -#~ msgid "Adam" -#~ msgstr "Adam" +#~ msgid "Mattapoisett" +#~ msgstr "馬塔波意斯" -#~ msgid "Abigail" -#~ msgstr "Abigail" +#~ msgid "Mattawamkeag" +#~ msgstr "馬塔哇" -#~ msgid "Aaron" -#~ msgstr "Aaron" +#~ msgid "Maxfield" +#~ msgstr "麥克斯菲爾德" -#~ msgid "Aaliyah" -#~ msgstr "Aaliyah" +#~ msgid "Maynard" +#~ msgstr "梅納德" -#~ msgid "" -#~ "You can manage to find space for anything! You can carry 40%% more volume." -#~ msgstr "你能夠更有效率的整理你的背包!你能夠多騰出 40%% 的儲物空間。" +#~ msgid "Mechanic Falls" +#~ msgstr "麥克尼瀑布" -#~ msgid "" -#~ "A portable charcoal fired metalworking forge. Combined with the right " -#~ "tools, you can use this for metalworking." -#~ msgstr "" -#~ "一個燒木炭能鑄鐵的攜帶式鍛造爐。只要跟正確的工具一起使用,你就能用這個東西" -#~ "來進行鑄造。" +#~ msgid "Meddybemps" +#~ msgstr "梅蒂" -#~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire. This one features a flip top cover and can be " -#~ "refueled when empty." -#~ msgstr "" -#~ "多種藥物,以及香煙,汽油彈的好朋友。你同時也能用打火機來點燃附近的物品。這" -#~ "個打火機有著能夠重新充填燃料的設計。" +#~ msgid "Medfield" +#~ msgstr "梅德菲爾德" -#~ msgid "" -#~ "Long, steel tongs. Makes an okay melee weapon, and is commonly used for " -#~ "cooking or in metalworking fabrication recipes." -#~ msgstr "鋼製長鉗。勉強可作為近戰武器,通常是在烹飪或是鑄造時會用到。" +#~ msgid "Medford" +#~ msgstr "梅德福" + +#~ msgid "Medway" +#~ msgstr "梅德韋" -#~ msgid "" -#~ "A portable electric metalworking forge, powered by standard batteries. " -#~ "Combined with the right tools, you can use this for metalworking." -#~ msgstr "" -#~ "一個能鑄鐵的攜帶式鍛造爐,透過標準電池供電。只要跟正確的工具一起使用,你就" -#~ "能用這個東西來進行鑄造。" +#~ msgid "Melrose" +#~ msgstr "梅爾羅斯" -#~ msgid "" -#~ "This crude welder has been fashioned from a bundle of copper wire, scrap " -#~ "metal, and complete disregard for personal safety. Not as efficient as a " -#~ "factory welder, but it will serve in a pinch." -#~ msgstr "" -#~ "這個電焊機用成捆的銅線,廢鐵製成,完全無視人身安全。效率不如正常電焊機高," -#~ "聊勝於無。" +#~ msgid "Mendon" +#~ msgstr "梅頓" -#~ msgid "A bicycle folded into a relatively portable package." -#~ msgstr "一輛能折疊成便利攜帶的自行車。" +#~ msgid "Mercer" +#~ msgstr "默瑟" -#~ msgid "A fluffy towel, can be used to dry yourself." -#~ msgstr "蓬鬆的毛巾,可以用來擦乾自己的身體。" +#~ msgid "Meredith" +#~ msgstr "梅雷迪思" -#~ msgid "" -#~ "A sealed glass jar containing pickled human flesh. Activate to open. You " -#~ "might even enjoy it." -#~ msgstr "一個密封玻璃罐裝著一些醃漬過的人肉。使用它來開啟享用。" +#~ msgid "Meriden" +#~ msgstr "梅里登" -#~ msgid "" -#~ "A sealed glass jar containing pickled meat. Activate to open and enjoy." -#~ msgstr "一個密封玻璃罐裝著一些醃漬過的肉。使用它來開啟享用。" +#~ msgid "Merrill" +#~ msgstr "梅里爾" -#~ msgid "" -#~ "A sealed glass jar containing a pickled vegetable. Activate to open and " -#~ "enjoy." -#~ msgstr "一個密封玻璃罐裝著一些醃漬過的蔬菜。使用它來開啟享用。" +#~ msgid "Merrimac" +#~ msgstr "梅里馬克" -#~ msgid "A sealed glass jar containing veggy. Activate to open and enjoy." -#~ msgstr "一個密封玻璃罐裝著一些蔬菜。使用它來開啟享用。" +#~ msgid "Merrimack" +#~ msgstr "梅里麥克" -#~ msgid "" -#~ "A sealed glass jar containing human meat. Activate to open and enjoy." -#~ msgstr "一個密封玻璃罐裝著一些人肉。使用它來開啟享用。" +#~ msgid "Methuen" +#~ msgstr "梅休因" -#~ msgid "" -#~ "A sealed glass jar containing some meat. Activate to open and enjoy." -#~ msgstr "一個密封玻璃罐裝著一些肉。使用它來開啟享用。" +#~ msgid "Mexico" +#~ msgstr "墨西哥" -#~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. This one has " -#~ "been used already and is now useless." -#~ msgstr "一個暖暖包,可以用來熱敷或是加熱食物。這個是已經被用過的廢物。" +#~ msgid "Middleborough" +#~ msgstr "米德爾堡" -#~ msgid "" -#~ "A heatpack, used to treat sports injuries and heat food. Usable only " -#~ "once." -#~ msgstr "一個暖暖包,可以用來熱敷或是加熱食物。只能用一次。" +#~ msgid "Middlebury" +#~ msgstr "米德爾伯里" -#~ msgid "" -#~ "A sharp needle made from a bone. It would be useful for making rough " -#~ "clothing and items" -#~ msgstr "用骨頭製成的銳利針頭。製作粗糙的服裝和物品時很有用。" +#~ msgid "Middlefield" +#~ msgstr "米德爾菲爾德" -#~ msgid "A piece of kevlar. Can be used to repair kevlar items" -#~ msgstr "一塊凱夫勒纖維板。能夠用於修復凱夫勒纖維製物品。" +#~ msgid "Middlesex" +#~ msgstr "米德爾塞克斯" -#~ msgid "Rag, useful in crafting and possibly stopping bleeding" -#~ msgstr "布條,在製作物品與止血時很有用。" +#~ msgid "Middleton" +#~ msgstr "米德爾頓" -#~ msgid "A large steel pickaxe, strike the earth!" -#~ msgstr "一把鋼製十字鎬,挖吧!" +#~ msgid "Middletown" +#~ msgstr "米德爾敦" -#~ msgid "A stick that has been cut into a trigger mechanism for a snare trap." -#~ msgstr "一根木材被削成繩套陷阱的觸發裝置" +#~ msgid "Middletown Springs" +#~ msgstr "米德爾敦泉" -#~ msgid "A tool used for disassembling firearm ammunition." -#~ msgstr "一個用來拆解槍械子彈的工具。" +#~ msgid "Milan" +#~ msgstr "米蘭" -#~ msgid "" -#~ "A small, makeshift funnel used to collect rainwater. (a)ctivate it " -#~ "outside and place a container beneath it to collect water when it rains." -#~ msgstr "" -#~ "一小型粗製的漏斗可用來收集雨水。在室外 (a)使用 後並且在下方放個容器就能夠" -#~ "收集雨水。" +#~ msgid "Milbridge" +#~ msgstr "米爾橋" -#~ msgid "" -#~ "A funnel used to collect rainwater. (a)ctivate it outside and place a " -#~ "container beneath it to collect water when it rains." -#~ msgstr "" -#~ "一個能夠用來收集雨水的漏斗。在室外 (a)使用 後並且在下方放個容器就能夠收集" -#~ "雨水。" +#~ msgid "Milford" +#~ msgstr "米爾福德" -#~ msgid "" -#~ "A sharp, heavy knife. Makes a good melee weapon, and is the best item for " -#~ "butchering corpses." -#~ msgstr "" -#~ "一把銳利又沈重的刀子。能夠作為良好的近戰武器,也是用來屠宰屍體的最佳物品。" +#~ msgid "Millbury" +#~ msgstr "米爾伯里" -#~ msgid "" -#~ "A sharp knife. Makes a poor melee weapon, but is decent at butchering " -#~ "corpses." -#~ msgstr "" -#~ "一把銳利的刀子。能夠作為近戰武器是不合格的,但是至少還能用來屠宰屍體。" +#~ msgid "Millinocket" +#~ msgstr "米利諾基特" -#~ msgid "" -#~ "A large blade attached to a long stick. Could do a considerable amount of " -#~ "damage." -#~ msgstr "一把大刀刃連接在長棍子上。能夠用來造成對手可觀的傷害。" +#~ msgid "Millis" +#~ msgstr "米利斯" -#~ msgid "" -#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " -#~ "built into the insulated hilt. The blade is glowing brightly." -#~ msgstr "" -#~ "一把加掛了燃料管的大刀,絕緣劍柄中有著小燃料槽與點火機制。這把刀正在發出明" -#~ "亮的光芒。" +#~ msgid "Millville" +#~ msgstr "米爾維爾" -#~ msgid "" -#~ "A large blade with a fuel pipe on the side, and a small tank and igniter " -#~ "built into the insulated hilt. When filled with gasoline, the blade can " -#~ "be made scorching hot to singe enemies and light your way." -#~ msgstr "" -#~ "一把加掛了燃料管的大刀,絕緣劍柄中有著小燃料槽與點火機制。當加滿了汽油後," -#~ "這把刀能夠產生高熱燒灼敵人或是當做照明的用途。" +#~ msgid "Milo" +#~ msgstr "米洛" -#~ msgid "" -#~ "A large blade that has had a portion of the handle wrapped in duct tape, " -#~ "making it easier to wield as a rough machete." -#~ msgstr "一把大刀刃,握把是用大力膠帶纏的。讓它可以被輕易的揮動。" +#~ msgid "Milton" +#~ msgstr "米爾頓" -#~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. The blade is glowing with heat. Excalibur can " -#~ "eat it's heart out." -#~ msgstr "" -#~ "結合了黑暗時代的兩項經典-闊劍和火炬的組合。這把劍正產生高熱。神劍一出誰與" -#~ "爭鋒。" +#~ msgid "Minot" +#~ msgstr "邁諾特" -#~ msgid "" -#~ "A combination of two Dark-Age conflict-resolution classics, the " -#~ "broadsword and the torch. Light it up and show those heathen zombies " -#~ "who's Lord around here." -#~ msgstr "" -#~ "結合了黑暗時代的兩項經典-闊劍和火炬的組合。把它油門催下去,讓那些異教徒殭" -#~ "屍知道誰是老大。" +#~ msgid "Monhegan" +#~ msgstr "蒙黑根" -#~ msgid "" -#~ "A medieval weapon consisting of a wood shaft, tipped with an iron spike. " -#~ "Though large and heavy compared to other spears, its accuracy and damage " -#~ "are unparalled." -#~ msgstr "" -#~ "一個中世紀的武器由木桿連結鐵刺製成。透過其超群的重量,其精度和損壞無與倫" -#~ "比。" +#~ msgid "Monkton" +#~ msgstr "芒克頓" -#~ msgid "" -#~ "This huge iron knife has been modified with a fuel tank, insulated " -#~ "handguard and ignition system. The blade is glowing with heat, making it " -#~ "a great plant scorcher and nightlight." -#~ msgstr "" -#~ "這把大鐵刀被改造成連接了一個油桶,並且絕緣劍柄中有著點火機制。這把刀正在發" -#~ "出他的熱度,讓他成為夜晚中最強大一根火炬。" +#~ msgid "Monmouth" +#~ msgstr "蒙默思" -#~ msgid "" -#~ "This huge iron knife has been modified with a fuel tank, insulated " -#~ "handguard and ignition system. When filled with gasoline, a system of " -#~ "torches heats the blade, burning your target." -#~ msgstr "" -#~ "這把大鐵刀被改造成連接了一個油桶,並且絕緣劍柄中有著點火機制。當加滿汽油" -#~ "後,火炬系統將會加熱整支刀子,灼燒你的目標。" +#~ msgid "Monroe" +#~ msgstr "門羅" -#~ msgid "" -#~ "A sheet of foam which can be rolled tightly for storage. Insulates you " -#~ "from the floor, making it easier to sleep" -#~ msgstr "一張緊密卷曲的睡墊。可以讓你跟地板有所阻隔,更容易入睡。" +#~ msgid "Monson" +#~ msgstr "蒙森" -#~ msgid "" -#~ "An inactive turret. Using this item involves turning it on and placing it " -#~ "on the ground, where it will attach itself. The turret will then identify " -#~ "you as a friendly, and attack all enemies with an SMG." -#~ msgstr "" -#~ "未啟動的槍塔。使用這個物品並將他放置在地上會自動組裝,他將會用衝鋒槍自動攻" -#~ "擊附近的所有敵人。且不會攻擊你。" +#~ msgid "Mont Vernon" +#~ msgstr "弗農山" -#~ msgid "" -#~ "An inactive manhack. Manhacks are fist-sized robots that fly through the " -#~ "air. They are covered with whirring blades and attack by throwing " -#~ "themselves against their target. Use this item to activate the manhack." -#~ msgstr "" -#~ "一架未啟動的鋸鳥。鋸鳥是一種拳頭大的機器人,能夠在空中飛。攻擊目標的方式是" -#~ "直接撞擊敵人,用其身上佈滿嗡嗡旋轉的刀片造成傷害。使用這個物品就能啟動鋸" -#~ "鳥。" +#~ msgid "Montague" +#~ msgstr "蒙塔古" -#~ msgid "" -#~ "A firecracker that has been lit, the fuse is hissing. Throw it quickly " -#~ "before it explodes." -#~ msgstr "這鞭炮已點燃引線嘶嘶作響;不久將會爆炸,趕快投擲出去!" +#~ msgid "Monterey" +#~ msgstr "蒙特利" -#~ msgid "" -#~ "A firecracker with a short fuse. Use this item to light the fuse; you " -#~ "will need a lighter of course. Shortly after you light the fuse it will " -#~ "explode, so throw it quickly!" -#~ msgstr "" -#~ "有個短引線的鞭炮。使用這個物品將會點燃;當然你要有個打火機。當點燃後不久將" -#~ "會開始爆炸,所以趕快投擲出去!" +#~ msgid "Montgomery" +#~ msgstr "蒙哥馬利" -#~ msgid "" -#~ "A pack of 25 firecrackers that has been lit, the fuse is hissing. Throw " -#~ "them quickly before the start to explode." -#~ msgstr "" -#~ "一包裝有25發鞭炮及引線的物品。這個物品已點燃;不久將會爆炸,趕快投擲出去!" +#~ msgid "Monticello" +#~ msgstr "蒙蒂塞洛" -#~ msgid "" -#~ "A pack of 25 firecrackers with a starter fuse. Use this item to light the " -#~ "fuse; you will need a lighter of course. Shortly after you light the fuse " -#~ "they will begin to explode, so throw them quickly!" -#~ msgstr "" -#~ "一包裝有25發鞭炮及引線的物品。使用這個物品將會點燃;當然你要有個打火機。當" -#~ "點燃後不久將會開始爆炸,所以趕快投擲出去!" +#~ msgid "Montpelier" +#~ msgstr "蒙彼利埃" -#~ msgid "" -#~ "The fuse on this dynamite is lit and hissing. It'll explode any moment " -#~ "now." -#~ msgstr "這個炸藥的引線已經點燃並嘶嘶作響。將會隨時被引爆。" +#~ msgid "Montville" +#~ msgstr "蒙特維爾" -#~ msgid "" -#~ "Several sticks of explosives with a fuse attached. Use this item to light " -#~ "the fuse; you will, of course, need a lighter in your inventory to do " -#~ "this. Shortly after lighting the fuse, this item will explode, so get " -#~ "away!" -#~ msgstr "" -#~ "加上了引線連結的數根炸藥。使用這個物品將會點燃引線;當然你需要個打火機在你" -#~ "的物品欄才能點。當引線很快的燒完後,這個物品將會爆炸,所以快逃!" +#~ msgid "Moose River" +#~ msgstr "穆斯河" -#~ msgid "" -#~ "A glass vial, with two chemicals mixing inside. If this mixture is " -#~ "exposed to air (as happens if you throw the vial), they will spill out as " -#~ "a pool of potent acid." -#~ msgstr "" -#~ "一個有玻璃小瓶,內有由兩種化學物質混合的液體。若混合物暴露在空氣中(當你投" -#~ "擲出小瓶)將會開始成為強酸性的液體。" +#~ msgid "Moretown" +#~ msgstr "摩爾鎮" -#~ msgid "" -#~ "A glass vial, split into two chambers. The divider is removable, which " -#~ "will cause the chemicals to mix. If this mixture is exposed to air (as " -#~ "happens if you throw the vial) they will spill out as a pool of potent " -#~ "acid." -#~ msgstr "" -#~ "一個有兩個艙室的玻璃小瓶。若是分隔插梢拔出後,會讓兩個艙室的化學液體開始混" -#~ "合作用。若混合物暴露在空氣中(當你投擲出小瓶)將會開始成為強酸性的液體。" +#~ msgid "Moro Plantation" +#~ msgstr "摩洛森林" -#~ msgid "" -#~ "A bottle of flammable liquid with a rag inserted. Use this item to light " -#~ "the rag; you will, of course, need a lighter in your inventory to do " -#~ "this. After lighting it, throw it to cause fires." -#~ msgstr "" -#~ "一罐裝有可燃性液體的瓶子,瓶口塞有布條。使用這個物品將會點燃;當然你要有個" -#~ "打火機才能點。點燃後,投擲出去會產生火焰。" +#~ msgid "Morrill" +#~ msgstr "莫里爾" -#~ msgid "" -#~ "Use this item to pull the pin. Five turns after you do that, it will " -#~ "begin to expel a thick black smoke. This smoke will slow those who enter " -#~ "it, as well as obscuring vision and scent." -#~ msgstr "" -#~ "使用這個物品時會拉開插梢。5回合後會產生濃厚的黑色煙霧。能夠讓身處其中的生" -#~ "物行動緩慢,同時也會影響視力與嗅覺。" +#~ msgid "Morristown" +#~ msgstr "莫里斯敦" -#~ msgid "" -#~ "This canister of teargas has had its pin removed, indicating that it is " -#~ "(or will shortly be) expelling highly toxic gas." -#~ msgstr "這個催淚彈的插梢已被拔出,將會產生劇毒性的瓦斯。" +#~ msgid "Moscow" +#~ msgstr "莫斯科" -#~ msgid "active teargas" -#~ msgstr "啟動中催淚彈" +#~ msgid "Moultonborough" +#~ msgstr "莫頓堡" -#~ msgid "" -#~ "Use this item to pull the pin. Five turns after you do that, it will " -#~ "begin to expel a highly toxic gas for several turns. This gas damages and " -#~ "slows those who enter it, as well as obscuring vision and scent." -#~ msgstr "" -#~ "使用這個物品時會拉開插梢。5回合內會炸開,產生劇毒性的瓦斯。吸入氣體的生物" -#~ "將會受到傷害與緩慢效果,同時也會影響視線與嗅覺。" +#~ msgid "Mount Chase" +#~ msgstr "蔡斯山" -#~ msgid "" -#~ "This is a highly modified EMP grenade, designed to scramble robots' " -#~ "control chips, rather than destroy them. This converts the robot to your " -#~ "side for a short time, before the backup systems kick in." -#~ msgstr "" -#~ "這是一個高度改造的電磁脈衝手榴彈,能夠干擾機器人的控制晶片,而非摧毀。在其" -#~ "備份系統回復前,會變成你的友軍。" +#~ msgid "Mount Desert" +#~ msgstr "沙漠山" -#~ msgid "" -#~ "This EMP grenade is active, and will shortly detonate, creating a large " -#~ "EMP field that damages robots and drains bionic energy." -#~ msgstr "" -#~ "這個電磁脈衝手榴彈已經啟動,很快的就會炸開,產生電磁脈衝的力場,將會傷害附" -#~ "近的所有機器人以及吸取生化插件能量。" +#~ msgid "Mount Holly" +#~ msgstr "霍利山" -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active EMP grenade. You " -#~ "will then have three turns before it detonates, creating an EMP field " -#~ "that damages robots and drains bionic energy." -#~ msgstr "" -#~ "使用這個物品時會拉開插梢,變成啟動中電磁脈衝手榴彈。3回合內會炸開,產生電" -#~ "磁脈衝的力場,將會傷害附近的所有機器人以及吸取生化插件能量。" +#~ msgid "Mount Tabor" +#~ msgstr "塔博爾山" -#~ msgid "" -#~ "This flashbang is active, and will soon detonate with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." -#~ msgstr "" -#~ "這個閃光彈已經啟動,很快的就會炸開,其附近的所有生物將會被強光與聲響所致" -#~ "盲、失聰與混亂。" +#~ msgid "Mount Vernon" +#~ msgstr "弗農山" -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active flashbang. You " -#~ "will then have five turns before it detonates with intense light and " -#~ "sound, blinding, deafening and disorienting anyone nearby." -#~ msgstr "" -#~ "使用這個物品時會拉開插梢,變成啟動中閃光彈。5回合內會炸開,其附近的所有生" -#~ "物將會被強光與聲響所致盲、失聰與混亂。" +#~ msgid "Mount Washington" +#~ msgstr "華盛頓山" -#~ msgid "" -#~ "This grenade is active, and will explode any second now. Better throw it!" -#~ msgstr "這個手榴彈已經啟動,有可能在任何時間爆炸。你最好趕快投擲出去!" +#~ msgid "Nahant" +#~ msgstr "納哈特" -#~ msgid "" -#~ "Use this item to pull the pin, turning it into an active grenade. You " -#~ "will then have five turns before it explodes; throwing it would be a good " -#~ "idea." -#~ msgstr "" -#~ "使用這個物品時會拉開插梢,變成啟動中手榴彈。你必須在5回合內投出否則會傷到" -#~ "自己。" +#~ msgid "Nantucket" +#~ msgstr "楠塔基特" -#~ msgid "" -#~ "A tool for measuring radiation. It is in continuous scan mode, and will " -#~ "produce quiet clicking sounds in the presence of ambient radiation. Using " -#~ "it allows you to turn it off, or scan yourself or the ground." -#~ msgstr "" -#~ "一個用於測量輻射的工具。正處於持續偵測模式,當偵測到環境輻射時會發出響聲。" -#~ "使用它能夠進行關閉、掃描自己或掃描地面。" +#~ msgid "Naples" +#~ msgstr "那不勒斯" -#~ msgid "" -#~ "A tool for measuring radiation. Using it will prompt you to choose " -#~ "whether to scan yourself or the terrain, or to turn it on, which will " -#~ "provide continuous feedback on ambient radiation." -#~ msgstr "" -#~ "一個用於測量輻射的工具。使用時會詢問你要掃描自己或是地面,或是開啟,能夠持" -#~ "續的偵測環境中的輻射。" +#~ msgid "Narragansett" +#~ msgstr "納拉甘西特" -#~ msgid "" -#~ "A kit for a simple trap consisting of a string noose and a snare trigger. " -#~ "Requires a young tree nearby. Effective at trapping and killing some " -#~ "small animals." -#~ msgstr "" -#~ "簡易陷阱工具箱,含有一個活結和繩套觸發器。需要附近有小樹。能夠有效的困住和" -#~ "殺死小動物。" +#~ msgid "Nashua" +#~ msgstr "納舒厄" -#~ msgid "" -#~ "Several pieces of wood, nailed together, with nails sticking straight up. " -#~ "If an unsuspecting victim steps on it, they'll get nails through the foot." -#~ msgstr "" -#~ "由木板與豎立的鐵釘合成的陷阱。假如有粗心的獵物踩上去,腳掌就會被刺穿。" +#~ msgid "Nashville Plantation" +#~ msgstr "納什維爾森林" -#~ msgid "" -#~ "A sheet of plastic covered with air-filled bubbles. Use it to set it on " -#~ "the ground, creating a trap that will warn you with noise when something " -#~ "steps on it." -#~ msgstr "" -#~ "一張塑膠紙上面佈滿空氣小泡泡。在地面上設置後能夠成為警報陷阱,當有東西踩上" -#~ "後會發出聲響。" +#~ msgid "Natick" +#~ msgstr "納提克" -#~ msgid "" -#~ "A flexible rubber hose. Can be used for crafting, or siphoning fuel from " -#~ "a vehicle." -#~ msgstr "" -#~ "一條有彈性的橡膠軟管。能夠在製作物品,從車輛油桶抽取汽油時能發揮用途。" +#~ msgid "Naugatuck" +#~ msgstr "諾格塔克" -#~ msgid "A listening tool. Use it to listen to things. Closely." -#~ msgstr "一件醫用工具。靠近物體並使用來進行聆聽。" +#~ msgid "Needham" +#~ msgstr "尼德漢" -#~ msgid "A digging tool. Use it to dig pits adjacent to your location." -#~ msgstr "一件挖掘工具。使用這個工具能夠在你相鄰的格子挖坑。" +#~ msgid "New Ashford" +#~ msgstr "新阿什福德" -#~ msgid "" -#~ "A farming implement. Use it to turn tillable land into a slow-to-cross " -#~ "pile of dirt." -#~ msgstr "一件農地用具。使用這個工具能夠翻動耕地的土。" +#~ msgid "New Bedford" +#~ msgstr "新貝德福德" -#~ msgid "" -#~ "A prying tool. Use it to open locked doors without destroying them, or to " -#~ "lift manhole covers." -#~ msgstr "" -#~ "戰慄時空遊戲中主角高登弗里曼手持的神器。用這個物品能夠在不破壞的前提下撬開" -#~ "鎖住的門,或是移開人孔蓋。" +#~ msgid "New Boston" +#~ msgstr "新波士頓" -#~ msgid "" -#~ "A road map. Use it to read points of interest, including, but not limited " -#~ "to, location(s) of hospital(s) nearby." -#~ msgstr "" -#~ "一份公路地圖。使用這個物品來記錄一些興趣點到地圖上,可能會發現一些新地點或" -#~ "是醫院。" +#~ msgid "New Braintree" +#~ msgstr "新布倫特里" -#~ msgid "" -#~ "This device was constructed by 'enhancing' a radio with some amplifier " -#~ "circuits. It's completely lost its ability to pick up a station, but it's " -#~ "nice and loud now. Could be useful to distract zombies." -#~ msgstr "" -#~ "這個裝置是個原本是要加上一些放大迴路成為\"強化\"的無線電。結果完全失去了他" -#~ "該有的功能,變成了一個只會發出噪音的裝置。還是可以用來吸引殭屍啦。" +#~ msgid "New Britain" +#~ msgstr "新不列顛" -#~ msgid "" -#~ "A string of numbers to access the elevator in the hazardous waste " -#~ "sarcophagus." -#~ msgstr "一串代碼,能夠用來存取危險廢物堆放場石棺裡的電梯。" +#~ msgid "New Canaan" +#~ msgstr "新迦南" -#~ msgid "" -#~ "This radio is turned on, and continually draining its batteries. It is " -#~ "playing the broadcast being sent from any nearby radio towers." -#~ msgstr "" -#~ "這個無線電已經開啟電源,將會持續的消耗電力。將會從附近的廣播電塔捕捉任何訊" -#~ "號並播放。" +#~ msgid "New Canada" +#~ msgstr "新加拿大" -#~ msgid "" -#~ "Using this radio turns it on. It will pick up any nearby signals being " -#~ "broadcast and play them audibly." -#~ msgstr "使用這個無線電就能開啟電源。將會捕捉任何附近的廣播訊號並播出聲音。" +#~ msgid "New Castle" +#~ msgstr "新卡斯爾" -#~ msgid "" -#~ "Use a hammer, with nails and two by fours in your inventory, to board up " -#~ "adjacent doors and windows." -#~ msgstr "使用鐵鎚、鐵釘與2x4木材 就能夠加固門窗。" +#~ msgid "New Durham" +#~ msgstr "新達勒姆" -#~ msgid "" -#~ "Antibacterial medication designed to prevent or stop the spread of " -#~ "infection, in exchange for making future infections harder to stop or " -#~ "prevent." -#~ msgstr "預防或制止感染的抗菌藥物,使用後會讓未來的感染更難阻止或防範。" +#~ msgid "New Fairfield" +#~ msgstr "新法爾菲爾德" -#~ msgid "" -#~ "A deformed human fetus, eating this would be very nasty, and cause your " -#~ "DNA to mutate." -#~ msgstr "一個畸形的人類胚胎,吃這個將會非常噁心,也會讓你的基因突變。" +#~ msgid "New Gloucester" +#~ msgstr "新格洛斯特" + +#~ msgid "New Hampton" +#~ msgstr "新漢普頓" -#~ msgid "" -#~ "A large chunk of wax, filled with dense, dark honey. Useful for curing " -#~ "all sorts of afflictions." -#~ msgstr "一大塊蠟,充滿了褐黑色的蜂蜜。可用於治療各種病症。" +#~ msgid "New Hartford" +#~ msgstr "新哈特福德" -#~ msgid "" -#~ "A large chunk of beeswax. Not very tasty or nourishing, but ok in an " -#~ "emergency." -#~ msgstr "一塊大蜂蠟。不好吃也不營養,緊急的時候可以吃吃。" +#~ msgid "New Haven" +#~ msgstr "紐黑文" -#~ msgid "Blech, so gross. Save it for when you're about to die of starvation." -#~ msgstr "超噁。還是留著等快餓死再考慮吃吧。" +#~ msgid "New Ipswich" +#~ msgstr "新伊普斯維奇" -#~ msgid "tuna fish" -#~ msgstr "金槍魚罐頭" +#~ msgid "New Limerick" +#~ msgstr "新利默里克" -#~ msgid "sardines" -#~ msgstr "沙丁魚罐頭" +#~ msgid "New London" +#~ msgstr "新倫敦" -#~ msgid "Yuck, not very tasty, but it is quite filling." -#~ msgstr "噁,不是很好吃,至少還飽的。" +#~ msgid "New Marlborough" +#~ msgstr "新馬爾堡" -#~ msgid "Canned beans. A staple for hobos." -#~ msgstr "罐頭豆子。流浪漢的主食。" +#~ msgid "New Milford" +#~ msgstr "新米爾福德" -#~ msgid "cooked spaghetti" -#~ msgstr "煮熟的麵條" +#~ msgid "New Portland" +#~ msgstr "新波特蘭" -#~ msgid "carrot" -#~ msgstr "紅蘿蔔" +#~ msgid "New Salem" +#~ msgstr "新塞勒姆" -#~ msgid "Don't drink it. Mixing it with bleach produces toxic gas." -#~ msgstr "別喝。這東西加了漂白水後會產生毒氣。" +#~ msgid "New Sharon" +#~ msgstr "新夏隆" -#~ msgid "Don't drink it. Mixing it with ammonia produces toxic gas." -#~ msgstr "別喝。這東西加了氨水後會產生毒氣。" +#~ msgid "New Shoreham" +#~ msgstr "新肖勒姆" -#~ msgid "Basic Sword & Sorcery." -#~ msgstr "劍與巫術。" +#~ msgid "New Sweden" +#~ msgstr "新瑞典" -#~ msgid "" -#~ "Will you be able to place the arrow right into bull's eye? It is not that " -#~ "easy, but once you know how it's done, you will have a lot of fun with " -#~ "archery." -#~ msgstr "" -#~ "你有辦法將箭射中紅心嗎?這並不簡單,但如果你知道怎麼做,你將從中獲得不少樂" -#~ "趣。" +#~ msgid "New Vineyard" +#~ msgstr "新葡萄園" -#~ msgid "Primer from a small caliber round." -#~ msgstr "小手槍子彈的底火。" +#~ msgid "Newark" +#~ msgstr "紐瓦克" -#~ msgid "" -#~ "A 60mm High Explosive Anti Tank round. They can blow through up to two " -#~ "feet of concrete." -#~ msgstr "" -#~ "一個 60mm的高爆反坦克砲彈。能夠炸穿厚達2英吋的混凝土。(明明物品名稱是 " -#~ "66mm ...)" +#~ msgid "Newburgh" +#~ msgstr "紐堡" -#~ msgid "" -#~ "The .500 S&W Magnum round the World's most powerful handgun round " -#~ "recently developed by Smith and Wesson together with the revolutionary " -#~ "S&W 500 Revolver, it has enough power to kill anything with ease." -#~ msgstr "" -#~ ".500 S&W 麥格農是由史密斯與威森兩人與他們革命性的500型左輪手槍所一同開發出" -#~ "的彈種。這全世界最強大的子彈能夠輕易地殺掉任何生物。" +#~ msgid "Newbury" +#~ msgstr "紐伯里" -#~ msgid "" -#~ "The .454 Casull round a very powerful revolver round capable of killing " -#~ "Huge game like Elephants with ease, it's designed to be used with the " -#~ "Taurus Raging Bull." -#~ msgstr "" -#~ ".454卡蘇爾是非常強大的左輪彈種,它能夠輕易地殺死像是大象之類的巨大獵物。它" -#~ "被設計用於蠻牛左輪手槍 。" +#~ msgid "Newburyport" +#~ msgstr "紐伯里波特" -#~ msgid "" -#~ "A brass-jacketed variant of the .40 Smith & Wesson round. This increases " -#~ "penetration slightly at the cost of reduced expansion." -#~ msgstr "" -#~ "外表包覆全金屬的.40史密斯威森彈。藉由犧牲其彈頭擴張性所帶來的抑止力,其在" -#~ "穿透力上能稍微有所提升。" +#~ msgid "Newcastle" +#~ msgstr "紐卡斯爾" -#~ msgid "" -#~ "This small caliber pistol round offers quite good armor penetration at " -#~ "the cost of slightly less damage. It is rarely used outside of the " -#~ "Chinese army." -#~ msgstr "" -#~ "這種小型手槍子彈以較低的傷害為代價換取到相當不錯的穿甲能力。這種彈種通常不" -#~ "會在中國軍隊以外的地方看到。" +#~ msgid "Newfane" +#~ msgstr "努凡" -#~ msgid "" -#~ "9 millimeter parabellum is generally regarded as the most popular handgun " -#~ "cartridge, used by the majority of US police forces. It is also a very " -#~ "popular round in sub-machine guns." -#~ msgstr "" -#~ "9釐米帕拉彈被公認為最受歡迎的手槍子彈,被美國警方所廣泛使用。這子彈同時也" -#~ "是衝鋒槍子彈的熱門選擇。" +#~ msgid "Newfield" +#~ msgstr "紐菲爾德" -#~ msgid "" -#~ "Conical Ball .22 is a variety of .22 ammunition with a very small " -#~ "propellant charge, generally with no gunpowder, resulting in a subsonic " -#~ "round. It is nearly silent, but is so weak as to be nearly useless." -#~ msgstr "" -#~ ".22CB是.22口徑子彈的一種變形。它只有非常小量的高壓瓦斯而基本上沒有任何火" -#~ "藥,使它成為一種亞音速子彈。射擊時幾乎沒有聲音,但貧弱的威力使其幾乎沒有什" -#~ "麼用途。" +#~ msgid "Newfields" +#~ msgstr "紐菲爾德斯" -#~ msgid "" -#~ "A brass-jacketed .22 calibre round with superior penetration capacity." -#~ msgstr "外表包覆全金屬的.22口徑子彈,有著相對較高的穿透力。" +#~ msgid "Newington" +#~ msgstr "紐因頓" -#~ msgid "A tough sinew cut from a corpse, useable as thread." -#~ msgstr "從屍體取得堅韌的筋,可當做縫線。" +#~ msgid "Newmarket" +#~ msgstr "紐馬基特" -#~ msgid "" -#~ "A leather sling, it is easy to use and accurate, but pebbles do little " -#~ "damage. Pebbles are used as ammunition." -#~ msgstr "" -#~ "一個皮製的投石器,很易用又準確,但是小石子只能造成一點點傷害。這個武器的彈" -#~ "藥是小石子。" +#~ msgid "Newport" +#~ msgstr "新港" -#~ msgid "" -#~ "Popular among children. It's fairly accurate, but BBs deal nearly no " -#~ "damage. It could be used to practice your rifle skill up to level 1." -#~ msgstr "" -#~ "孩童間受歡迎的玩具槍。命中率雖然不低,可是BB彈幾乎無法造成傷害。能夠用這把" -#~ "槍把你的步槍技能練到1。" +#~ msgid "Newry" +#~ msgstr "紐維" -#~ msgid "" -#~ "A tool used to drive nails into wood or other material. It could also be " -#~ "used as a ad-hoc weapon, or to practice your handgun skill up to level 1." -#~ msgstr "" -#~ "一個用於木工或一些工程的工具,能裝填鐵釘。也能夠被當成一個特殊的武器,練習" -#~ "之後能提昇你的手槍技能達到 1。" +#~ msgid "Newton" +#~ msgstr "牛頓" -#~ msgid "" -#~ "A medieval helmet that provides excellent protection to head, with a Y " -#~ "shaped opening for the face." -#~ msgstr "一頂中世紀的頭盔能夠對於頭部提供絕佳的防護,臉部有Y型的開口。" +#~ msgid "Newtown" +#~ msgstr "新鎮" -#~ msgid "An ornamental suit of armor." -#~ msgstr "一套觀賞用的盔甲。" +#~ msgid "Nobleboro" +#~ msgstr "紐波伯羅" -#~ msgid "light plate mail" -#~ msgstr "輕鋼板盔甲" +#~ msgid "Norfolk" +#~ msgstr "諾福克" -#~ msgid "plate armor gauntlets" -#~ msgstr "鋼板護甲手套" +#~ msgid "Norridgewock" +#~ msgstr "諾里居沃克" -#~ msgid "plate armor boots" -#~ msgstr "鋼板護甲靴" +#~ msgid "North Adams" +#~ msgstr "北亞當斯" -#~ msgid "" -#~ "A badge that detects radiation dosage sealed in a radiation-blocking " -#~ "bag. Activate to remove from the bag." -#~ msgstr "能夠檢測輻射的徽章,封存在防輻射的袋子中。使用它來從袋子拿出。" +#~ msgid "North Andover" +#~ msgstr "北安多弗" -#~ msgid "A bit cumbersome to wear, but provides some storage" -#~ msgstr "帶著時有點累贅,但是提供了一些儲物空間。" +#~ msgid "North Attleborough" +#~ msgstr "北阿特巴路" -#~ msgid "A thin pair of leather gloves. Good for doing manual labor." -#~ msgstr "一對薄的皮手套。適合在作事的時候使用。" +#~ msgid "North Berwick" +#~ msgstr "北貝里克" -#~ msgid "A thin cotton jacket. Good for brisk weather." -#~ msgstr "一件棉製的薄外套。很適合在稍涼的天氣穿。" +#~ msgid "North Branford" +#~ msgstr "北布蘭福德" -#~ msgid "plate mail" -#~ msgstr "金屬板甲" +#~ msgid "North Brookfield" +#~ msgstr "北布魯克菲爾德" -#~ msgid "" -#~ "A hazardous materials suit. Though quite bulky and cumbersome, wearing it " -#~ "will provide excellent protection against ambient radiation." -#~ msgstr "" -#~ "處理危險物品時的裝束。雖然很龐大又累贅,但穿上後能夠很有效的抵抗輻射。" +#~ msgid "North Canaan" +#~ msgstr "北迦南" -#~ msgid "" -#~ "A long cotton dress. Difficult to move in and lacks any storage space." -#~ msgstr "一件棉質長洋裝。很難移動,並且也沒有任何儲物空間。" +#~ msgid "North Hampton" +#~ msgstr "北漢普頓" -#~ msgid "long underwear" -#~ msgstr "連身內衣褲" +#~ msgid "North Haven" +#~ msgstr "北哈芬" -#~ msgid "" -#~ "Compact Bionics Module developed at DoubleTech Industries as a " -#~ "replacement for the highly successful CBM: Power Storage. Increases you " -#~ "power capacity by 10 units." -#~ msgstr "" -#~ "DoubleTech工業開發的整合生化插件模組,這個型號是 CBM: 能量儲存室 的下一" -#~ "代。能夠增加你的能量儲存量 10 單位。" +#~ msgid "North Hero" +#~ msgstr "北希洛" -#~ msgid "That isn't knife!" -#~ msgstr "這不是刀子!" +#~ msgid "North Kingstown" +#~ msgstr "北金斯敦" -#~ msgid "You couldn't stop the bleeding." -#~ msgstr "你止不住血" +#~ msgid "North Providence" +#~ msgstr "北普羅維登斯" -#~ msgid "You managed to stop the bleeding." -#~ msgstr "你把流血止住了。" +#~ msgid "North Reading" +#~ msgstr "北雷丁" -#~ msgid "" -#~ "You neatly sever all of the veins\n" -#~ "and arteries in your body. Oh wait,\n" -#~ "Never mind." -#~ msgstr "" -#~ "你俐落的切斷你體內的所有動靜脈,\n" -#~ "喔,我的老天~\n" -#~ "當我沒說。" +#~ msgid "North Smithfield" +#~ msgstr "北史密斯菲爾德" -#~ msgid "Cut up metal" -#~ msgstr "切割金屬" +#~ msgid "North Stonington" +#~ msgstr "北斯通寧頓" -#~ msgid "You %4$s the %1$s into %2$i %3$s." -#~ msgid_plural "You %4$s the %1$s into %2$i %3$ss." -#~ msgstr[0] "你%4$s %1$s 成 %2$i %3$s。" +#~ msgid "North Yarmouth" +#~ msgstr "北亞茂斯" -#~ msgid "Your tazer crackles in the air." -#~ msgstr "你的電擊棒發出滋滋聲" +#~ msgid "Northampton" +#~ msgstr "北安普頓" -#~ msgid "Place the turret" -#~ msgstr "放置槍塔" +#~ msgid "Northborough" +#~ msgstr "諾斯伯勒" -#~ msgid "You set the landmine." -#~ msgstr "你設置了地雷." +#~ msgid "Northbridge" +#~ msgstr "北布里其" -#~ msgid "You bury the landmine." -#~ msgstr "你埋下了地雷." +#~ msgid "Northfield" +#~ msgstr "諾斯菲爾德" -#~ msgid "Bury the landmine?" -#~ msgstr "埋下地雷嗎?" +#~ msgid "Northport" +#~ msgstr "諾斯波特" -#~ msgid "You set the boobytrap up and activate the grenade." -#~ msgstr "你用手榴彈布置了詭雷" +#~ msgid "Northumberland" +#~ msgstr "諾森伯蘭" -#~ msgid "Place trap" -#~ msgstr "放置陷阱" +#~ msgid "Northwood" +#~ msgstr "諾斯伍德" -#~ msgid "Drill" -#~ msgstr "鑽洞" +#~ msgid "Norton" +#~ msgstr "諾頓" -#~ msgid "Siphon from" -#~ msgstr "抽取自" +#~ msgid "Norwalk" +#~ msgstr "諾沃克" -#~ msgid "The door swings open..." -#~ msgstr "門緩緩的開啟..." +#~ msgid "Norway" +#~ msgstr "挪威" -#~ msgid "Use your pick lock" -#~ msgstr "使用你的開鎖工具" +#~ msgid "Norwell" +#~ msgstr "樂威" -#~ msgid "You can't find a hospital near your location." -#~ msgstr "你的位置附近沒有醫院。" +#~ msgid "Norwich" +#~ msgstr "諾維奇" -#~ msgid "It's %d squares to the %s" -#~ msgstr "還有 %d 格到達 %s" +#~ msgid "Norwood" +#~ msgstr "諾伍德" -#~ msgid "You add a %s location to your map." -#~ msgstr "你在地圖上標記%s地點" +#~ msgid "Nottingham" +#~ msgstr "諾丁漢" -#~ msgid "You don't have enough battery power to purify all the water." -#~ msgstr "你沒有足夠的電力來淨化全部的水。" +#~ msgid "Oak Bluffs" +#~ msgstr "奧克布洛福" -#~ msgid "You don't have enough batteries!" -#~ msgstr "電池不夠啦!" +#~ msgid "Oakfield" +#~ msgstr "奧克菲爾德" -#~ msgid "Pry" -#~ msgstr "撬" +#~ msgid "Oakham" +#~ msgstr "奧克姆" -#~ msgid "Light" -#~ msgstr "點燃" +#~ msgid "Oakland" +#~ msgstr "奧克蘭" -#~ msgid "Put the dog food" -#~ msgstr "放下狗食" +#~ msgid "Ogunquit" +#~ msgstr "奧甘奎特" -#~ msgid "There's no vehicle to grab there!" -#~ msgstr "那裡沒有車輛可以抓取!" +#~ msgid "Old Lyme" +#~ msgstr "老萊姆" -#~ msgid "Fill a container?" -#~ msgstr "裝滿容器?" +#~ msgid "Old Orchard Beach" +#~ msgstr "老果園海灘" -#~ msgid "You wake up to the ringing of an alarm-clock." -#~ msgstr "你因為鬧鐘響而醒來。" +#~ msgid "Old Saybrook" +#~ msgstr "老塞布魯克" -#~ msgid "Sterilized the infection... this time." -#~ msgstr "消毒了感染..." +#~ msgid "Old Town" +#~ msgstr "舊城區" -#~ msgid "Cleaned the bite wound." -#~ msgstr "清理了咬傷。" +#~ msgid "Orange" +#~ msgstr "奧蘭治" -#~ msgid "Your raincoat protects you from the acid rain." -#~ msgstr "你的雨衣保護了你不被酸雨傷害。" +#~ msgid "Orford" +#~ msgstr "奧福德" -#~ msgid "Stepped on bubblewrap." -#~ msgstr "踩上了泡泡紙。" +#~ msgid "Orient" +#~ msgstr "奧連特" -#~ msgid "You step on some bubblewrap!" -#~ msgstr "你踩到了泡泡紙!" +#~ msgid "Orland" +#~ msgstr "奧蘭德" -#~ msgid " drains %s body heat!" -#~ msgstr " 吸取 %s 體熱!" +#~ msgid "Orleans" +#~ msgstr "奧爾良" -#~ msgid " disarms %s." -#~ msgstr " 解除 %s." +#~ msgid "Orneville" +#~ msgstr "奧爾維爾" -#~ msgid " throws %s." -#~ msgstr " 投擲 %s." +#~ msgid "Orono" +#~ msgstr "奧羅諾" -#~ msgid "whump." -#~ msgstr "呼。" +#~ msgid "Orrington" +#~ msgstr "奧靈頓" -#~ msgid "" -#~ "Your overall skill in using firearms. With higher levels, this general " -#~ "experience increases accuracy with any gun, but is secondary to practice " -#~ "with the type of gun in question." -#~ msgstr "" -#~ "你使用槍械的整體技能。提高此技能等級能夠提昇任何槍械的命中率,但是不包含操" -#~ "作個別槍械的技巧。" +#~ msgid "Orwell" +#~ msgstr "奧威爾" -#~ msgid "" -#~ "You were a high school student until the teachers literally tried to pick " -#~ "your brains. You start with a backpack and a zombie survival guide." -#~ msgstr "" -#~ "你是個高中學生,直到你的老師變成殭屍差點把你的腦袋吃了。你開始便有一個背" -#~ "包,以及一本末日求生指南." +#~ msgid "Osborn" +#~ msgstr "奧斯本" -#~ msgid "" -#~ "You used to work at the home depot, and you did a lot of home renovations " -#~ "yourself. You start with steel toe boots, a tool belt, a hammer, and a " -#~ "level in construction." -#~ msgstr "" -#~ "你之前在特力屋上班,你做過很多房屋裝修的工作。你開始便擁有鋼頭鞋、工具腰" -#~ "帶、鐵鎚、以及基本的建設技能。" +#~ msgid "Ossipee" +#~ msgstr "奧西皮" -#~ msgid "You're just generally quick! You get a 10%% bonus to action points." -#~ msgstr "你的個性就是急!你獲得 10%% 的行動點數加成。" +#~ msgid "Otis" +#~ msgstr "奧蒂斯" -#~ msgid "" -#~ "A syringe filled with one shot of adrenaline. It serves as a powerful " -#~ "stimulant when you inject yourself with it." -#~ msgstr "" -#~ "一根裝滿了可注射一次腎上腺素的針筒。在注射後可以提供強大的腎上腺素。" +#~ msgid "Otisfield" +#~ msgstr "奧蒂斯菲爾德" -#~ msgid "" -#~ "A hand-carved wooden smoking pipe designed to facilitate consumption of " -#~ "fire cured tobacco leaves." -#~ msgstr "一個手工雕刻的木製煙管,用來促進菸草工業發展的器具。" +#~ msgid "Owls Head" +#~ msgstr "貓頭鷹頭" -#~ msgid "" -#~ "A hand-blown glass pipe of the type most commonly used to smoke " -#~ "hallucinatory plants." -#~ msgstr "一個手工製的玻璃管,可用來抽一些會產生幻覺的植物(大麻?)" +#~ msgid "Oxbow" +#~ msgstr "奧克斯博" -#~ msgid "" -#~ "A fine glass tube with a bulb on the end, used in partaking of certain " -#~ "illicit substances." -#~ msgstr "一根尾端是球狀的玻璃管,用來吸食一些非法物質的器具。" +#~ msgid "Oxford" +#~ msgstr "牛津" -#~ msgid "" -#~ "Vacuum packed apple slices in plastic packaging.. Activate to open and " -#~ "enjoy." -#~ msgstr "裝在塑膠袋中的真空保存蘋果片。使用它來開封享用。" +#~ msgid "Palermo" +#~ msgstr "巴勒莫" -#~ msgid "" -#~ "A sealed glass jar containing a sliced apple. Activate to open and enjoy." -#~ msgstr "一個密封玻璃罐裡面有切片蘋果。使用它來開封享用。" +#~ msgid "Palmer" +#~ msgstr "帕爾默" -#~ msgid "sealed jar of canned apple" -#~ msgstr "密封罐的罐頭蘋果" +#~ msgid "Palmyra" +#~ msgstr "巴爾米拉" -#~ msgid "" -#~ "An improvised easy breaking picklock made from scrap metal, needs " -#~ "MacGyver like skills to open locks, it's light material lessens chances " -#~ "of alarms being set off." -#~ msgstr "" -#~ "一組用廢金屬手工製成的簡易開鎖工具,需要有馬蓋先的神級技巧才能開鎖,其輕量" -#~ "的材質減少警報觸發的機率。" +#~ msgid "Panton" +#~ msgstr "潘頓" -#~ msgid "" -#~ "A Locksmith's set of sturdy steel picklocks, essential for silently and " -#~ "quickly opening locks." -#~ msgstr "一組由堅硬鋼片製成的鎖匠工具,能夠安靜迅速的撬開鎖。" +#~ msgid "Paris" +#~ msgstr "巴黎" -#~ msgid "" -#~ "Designed for combat, and deadly in the right hands. Can be used to " -#~ "butcher corpses." -#~ msgstr "一把用來戰鬥的刀。能夠屠宰屍體。" +#~ msgid "Parkman" +#~ msgstr "帕克曼" -#~ msgid "A huge two-handed sword from Germany. Packs a real whallop." -#~ msgstr "一把雙手持的巨劍,源自於德國。" +#~ msgid "Parsonsfield" +#~ msgstr "帕森斯菲爾德" -#~ msgid "" -#~ "An early modern sword seeing use in the 16th, 17th and 18th centuries. " -#~ "Called 'broad' to contrast with the slimmer rapiers." -#~ msgstr "" -#~ "一把仿 16 , 17, 18 世紀的古劍,會稱為 '闊' 是因為刀身比一般的劍寬了許多。" +#~ msgid "Passadumkeag" +#~ msgstr "帕斯當坎" -#~ msgid "" -#~ "A katana that glows with the fury and heat of the SUN! Well, okay it's " -#~ "not THAT hot, but getting hit with it still stings like the dickens." -#~ msgstr "" -#~ "一把發散著烈日般熱度的武士刀!好吧,其實沒有那麼燙,但是被砍到還是會讓人吱" -#~ "吱叫的。" +#~ msgid "Patten" +#~ msgstr "潘登" -#~ msgid "" -#~ "People love fire, and people love katanas, so why not put them together? " -#~ "The gas burners attached to this blade can really turn up the heat on " -#~ "your foes." -#~ msgstr "" -#~ "人們都喜歡火,也喜歡武士刀,那麼乾脆合在一起好了!? 把噴燈裝上這把刀產生的" -#~ "高溫就能讓你的敵人吱吱叫了!" +#~ msgid "Pawlet" +#~ msgstr "鮑萊特" -#~ msgid "" -#~ "A rare sword from Japan. Deadly against unarmored targets, and still very " -#~ "effective against armor." -#~ msgstr "" -#~ "一把來自日本的稀有刀劍。能夠對未武裝的目標造成致命傷害,對付穿戴護具的目標" -#~ "也很有效。" +#~ msgid "Pawtucket" +#~ msgstr "柏德基" -#~ msgid "This huge iron knife makes an excellent melee weapon." -#~ msgstr "這把大鐵刀是絕佳的近戰武器。" +#~ msgid "Paxton" +#~ msgstr "帕克斯頓" -#~ msgid "" -#~ "A small, very sharp knife, used in surgery. Its small tip allows for a " -#~ "precision strike in the hands of the skilled." -#~ msgstr "" -#~ "一把小又異常銳利的刀,常用在手術中。在熟手中能夠使用他小而尖銳的刀刃使用穿" -#~ "刺攻擊。" +#~ msgid "Peabody" +#~ msgstr "皮博迪" -#~ msgid "A tool for welding metal pieces together. Useful for construction." -#~ msgstr "這個工具用於把金屬焊在一起。對於進行建設很有用。" +#~ msgid "Peacham" +#~ msgstr "皮查姆" -#~ msgid "" -#~ "A spring-loaded pair of steel jaws. Use it to set it on the ground, " -#~ "creating a trap that will ensnare and damage anything that steps on it. " -#~ "If you are carrying a shovel, you will have the option of burying it." -#~ msgstr "" -#~ "加載彈簧機制的鋼顎。使用方法是設置在地面,作為誘捕及傷害踩上的獵物的陷阱。" -#~ "假如你有鏟子,你還可以把它埋藏起來增加隱蔽性。" +#~ msgid "Pelham" +#~ msgstr "佩勒漢" -#~ msgid "bubblewrap" -#~ msgstr "泡泡紙" +#~ msgid "Pembroke" +#~ msgstr "彭布羅克" -#~ msgid "" -#~ "A small heating element. Indispensable for cooking and chemistry. Try not " -#~ "to burn yourself." -#~ msgstr "一個小型的加熱元件。是烹飪及化學不可或卻的。小心別燙到了。" +#~ msgid "Penobscot" +#~ msgstr "佩諾斯科特" -#~ msgid "" -#~ "A small blue light glowstick, bend it to break the glass cylinder inside " -#~ "and start the reaction to produce a very small amount of light." -#~ msgstr "" -#~ "一根會發小藍光的螢光棒,折它就能夠讓裡面的化合物產生化學變化並開始發光,提" -#~ "供些許的照明。" +#~ msgid "Pepperell" +#~ msgstr "佩波羅爾" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Provides a " -#~ "weak light, lasting 25 hours per 3 (battery) charges. When the batteries " -#~ "die, you'll need to scrap it to recover the components that are reusable." -#~ msgstr "" -#~ "透過電源直接供電的發光電路。提供微弱的光源,提供每3電力25小時的照明。當電" -#~ "池耗盡,你就只能拆解物品來回收。" +#~ msgid "Perham" +#~ msgstr "佩勒姆" -#~ msgid "" -#~ "A light-emitting circuit wired directly to some batteries. Once " -#~ "activated, provides 25 hours of light per 3 (battery) charges. When the " -#~ "batteries die, you'll need to scrap it to recover the components that are " -#~ "reusable." -#~ msgstr "" -#~ "透過電源直接供電的發光電路。只要啟動了就能提供每3電力25小時的照明。當電池" -#~ "耗盡,你就只能拆解物品來回收。" +#~ msgid "Perkins" +#~ msgstr "帕金斯" -#~ msgid "" -#~ "A burnt-out lightstrip. You could disassemble this to recover the " -#~ "amplifier circuit." -#~ msgstr "一個用完的燈條。你能夠把這個東西拆解成功率放大器。" +#~ msgid "Peru" +#~ msgstr "秘魯" -#~ msgid "" -#~ "This flashlight is turned on, and continually draining its batteries. It " -#~ "provides light during the night or while underground. Use it to turn it " -#~ "off." -#~ msgstr "" -#~ "這個手電筒已經開啟,並且持續消耗電力。一個開啟的手電筒能夠在夜晚或是洞穴中" -#~ "提供照明。使用它來關閉。" +#~ msgid "Peterborough" +#~ msgstr "彼得伯勒" -#~ msgid "" -#~ "Using this flashlight will turn it on, assuming it is charged with " -#~ "batteries. A turned-on flashlight will provide light during the night or " -#~ "while underground." -#~ msgstr "" -#~ "若是電池還有電的話,使用這個手電筒就能讓他開啟。一個開啟的手電筒能夠在夜晚" -#~ "或是洞穴中提供照明。" +#~ msgid "Petersham" +#~ msgstr "彼得舍姆" -#~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. It is turned on. Use it to turn it off." -#~ msgstr "" -#~ "一個小型的汽油燈。不能夠提供大量照明,但是能夠維持長時間。使用它來關閉。" +#~ msgid "Phillipston" +#~ msgstr "菲利普斯頓" -#~ msgid "" -#~ "A small gasoline powered lantern. It does not provide much light, but it " -#~ "lasts a long time. Use it to turn it on." -#~ msgstr "" -#~ "一個小型的汽油燈。不能夠提供大量照明,但是能夠維持長時間。使用它來開啟。" +#~ msgid "Phippsburg" +#~ msgstr "菲普斯堡" -#~ msgid "" -#~ "With enough electronics skill, you could attach this to your devices to " -#~ "increase their battery capacity." -#~ msgstr "" -#~ "只要有足夠的 電子 技能,你就能夠把這個模組加到你想要增加最大電量的裝置上。" +#~ msgid "Piermont" +#~ msgstr "皮耶蒙特" -#~ msgid "Use a fire extinguisher to put out adjacent fires." -#~ msgstr "使用滅火器能夠撲滅附近的火勢。" +#~ msgid "Pittsburg" +#~ msgstr "匹茲堡" -#~ msgid "" -#~ "Use scissors to cut items made from cotton (mostly clothing) into rags." -#~ msgstr "使用剪刀可以裁剪棉製的物品成布條。" +#~ msgid "Pittsfield" +#~ msgstr "皮茨菲爾德" -#~ msgid "" -#~ "Use a sewing kit on an article of clothing to attempt to repair or " -#~ "reinforce that clothing. This uses your tailoring skill." -#~ msgstr "使用針線包能夠修復或強化服裝。需要一定的 裁縫 技能。" +#~ msgid "Pittsford" +#~ msgstr "皮茨福德" -#~ msgid "A simple hand-powered stone quern." -#~ msgstr "一個簡單的人力石磨" +#~ msgid "Pittston" +#~ msgstr "皮茨頓" -#~ msgid "" -#~ "Thin paper strips intended for the rolling of cigarettes. Could also be " -#~ "used to make cartridges for a cap and ball revolver." -#~ msgstr "一張用來卷香煙的薄紙。同時也能用來卷入火藥來當做左輪的裝藥。" +#~ msgid "Plainfield" +#~ msgstr "普蘭菲爾德" -#~ msgid "" -#~ "A fire drill is a simple item for firestarting, made from two pieces of " -#~ "wood and some string. Although it is constructed out of simple materials, " -#~ "it's slow and rather difficult to get a fire started with this tool." -#~ msgstr "" -#~ "鑽火器是個用來生火的簡單物品,利用兩片木材及一些線來製作。雖然製作很簡單," -#~ "但是生火的難度高,而且速度很慢。" +#~ msgid "Plainville" +#~ msgstr "普萊恩維爾" -#~ msgid "" -#~ "Matches must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use matches to light " -#~ "nearby items on fire." -#~ msgstr "" -#~ "在使用許多東西時會用到火柴,例如香煙,或是點燃某些東西,類似汽油彈。你也能" -#~ "使用火柴來點燃附近的物品。" +#~ msgid "Plaistow" +#~ msgstr "普萊斯敦" -#~ msgid "" -#~ "A lighter must be carried to use various drugs, like cigarettes, or to " -#~ "light things like molotov cocktails. You can also use a lighter to light " -#~ "nearby items on fire." -#~ msgstr "" -#~ "在使用許多東西時會用到打火機,例如香煙,或是點燃某些東西,類似汽油彈。你也" -#~ "能使用打火機來點燃附近的物品。" +#~ msgid "Pleasant Ridge Plantation" +#~ msgstr "逸嶺森林" -#~ msgid "Bright pink chewing gum. Sugary, sweet and bad for your teeth." -#~ msgstr "亮粉紅色的口香糖。甜滋滋會蛀壞你的牙齒。" +#~ msgid "Plymouth" +#~ msgstr "普利茅斯" -#~ msgid "" -#~ "Apple slices soaked in a sugar syrup, to preserve freshness and appearance" -#~ msgstr "泡在糖漿裡的蘋果切片,保持了外觀的新鮮度。" +#~ msgid "Plympton" +#~ msgstr "普林頓" -#~ msgid "apple slices" -#~ msgstr "蘋果片" +#~ msgid "Poland" +#~ msgstr "波蘭" -#~ msgid "" -#~ "Sealed glass jar containing preserved apples. Bland, mushy and losing " -#~ "color." -#~ msgstr "保存在密封玻璃瓶中的蘋果。糊糊的並且賣相不好。" +#~ msgid "Pomfret" +#~ msgstr "波福瑞特" -#~ msgid "canned apple slices" -#~ msgstr "蘋果片罐頭" +#~ msgid "Portage Lake" +#~ msgstr "波蒂奇湖" -#~ msgid "This white flour is useful for baking." -#~ msgstr "這個白色麵粉在烘焙時很有用。" +#~ msgid "Porter" +#~ msgstr "波特" -#~ msgid "" -#~ "A large ant egg, the size of a softball. Extremely nutritious, but gross." -#~ msgstr "一顆跟棒球一樣大的螞蟻蛋。含有豐富的營養,但是很噁。" +#~ msgid "Portland" +#~ msgstr "波特蘭" -#~ msgid "" -#~ "A malformed human leg, this would be gross to eat, and cause mutations." -#~ msgstr "一隻畸形的人類大腿,吃下這個會非常反胃,並且會造成你產生突變。" +#~ msgid "Portsmouth" +#~ msgstr "普茲茅斯" -#~ msgid "" -#~ "A misshapen human arm, eating this would be pretty disgusting and cause " -#~ "your DNA to mutate." -#~ msgstr "一隻畸形的人類手臂,吃下這個會非常噁心,並且會造成你的基因變異。" +#~ msgid "Poultney" +#~ msgstr "保羅特尼" -#~ msgid "A heavy cotton coat. Cumbersome, but warm and with deep pockets." -#~ msgstr "一件沉重的棉外套。很累贅,但是保暖且有許多口袋。" +#~ msgid "Pownal" +#~ msgstr "波內爾" -#~ msgid "A padded coat with deep pockets. Very warm." -#~ msgstr "一件加上內裡的大衣,有許多深口袋。非常保暖。" +#~ msgid "Prentiss" +#~ msgstr "普倫蒂斯" -#~ msgid "You set the bubblewrap on the ground, ready to be popped." -#~ msgstr "你在地上設置了泡泡紙,踩到就會有剝剝聲。" +#~ msgid "Prescott" +#~ msgstr "普雷斯科特" -#~ msgid "You disinfect the bite wound." -#~ msgstr "你把咬傷消毒了。" +#~ msgid "Presque Isle" +#~ msgstr "普雷斯克島" -#~ msgid "You clean the bite wound." -#~ msgstr "你清潔了咬傷。" +#~ msgid "Preston" +#~ msgstr "普雷斯頓" -#~ msgid "Clean Wound" -#~ msgstr "清潔傷口" +#~ msgid "Princeton" +#~ msgstr "普林斯頓" -#~ msgid "You stopped the bleeding." -#~ msgstr "你已經止血了。" +#~ msgid "Proctor" +#~ msgstr "普羅克特" -#~ msgid "Stop Bleeding" -#~ msgstr "止血中" +#~ msgid "Prospect" +#~ msgstr "普羅斯貝" -#~ msgid "8: Exit" -#~ msgstr "8: 退出" +#~ msgid "Providence" +#~ msgstr "普羅維登斯" -#~ msgid "7: %s" -#~ msgstr "7: %s" +#~ msgid "Provincetown" +#~ msgstr "普維斯鎮" -#~ msgid "%1$s stumbles and leers at %4$s" -#~ msgstr "%1$s 醉醺醺地搖晃在 %4$s 面前" +#~ msgid "Putnam" +#~ msgstr "普特南" -#~ msgid "%1$s stumble and leer at %4$s" -#~ msgstr "%1$s 醉醺醺地搖晃在 %4$s 面前" +#~ msgid "Putney" +#~ msgstr "普特尼" -#~ msgid "zui quan" -#~ msgstr "醉拳" +#~ msgid "Quincy" +#~ msgstr "昆西" -#~ msgid "toad style" -#~ msgstr "蛤蟆毒" +#~ msgid "Randolph" +#~ msgstr "蘭多夫" -#~ msgid "lizard style" -#~ msgstr "壁虎毒" +#~ msgid "Rangeley" +#~ msgstr "雷格列" -#~ msgid "" -#~ "One of the Five Deadly Venoms. Lizard Style focuses on using walls to " -#~ "one's\n" -#~ "advantage. Moving alongside a wall will make you run up along it, giving " -#~ "you\n" -#~ "a large to-hit bonus. Standing by a wall allows you to use it to boost " -#~ "dodge." -#~ msgstr "" -#~ "五毒的其中一式。壁虎毒注重使用牆壁來做為優勢。\n" -#~ "沿著牆壁能夠讓你在上面移動,並且大大提昇命中\n" -#~ "率。還能夠獲得閃避加成。" +#~ msgid "Rangeley Plantation" +#~ msgstr "雷格列森林" -#~ msgid "%1$s strikes %4$s with spincer fist" -#~ msgstr "%1$s 使出鉗形拳擊中 %4$s" +#~ msgid "Raymond" +#~ msgstr "雷蒙德" -#~ msgid "%1$s strike %4$s with spincer fist" -#~ msgstr "%1$s 使出鉗形拳擊中 %4$s" +#~ msgid "Raynham" +#~ msgstr "雷納姆" -#~ msgid "scorpion style" -#~ msgstr "蠍毒" +#~ msgid "Readfield" +#~ msgstr "雷德菲爾德" -#~ msgid "viper style" -#~ msgstr "蛇毒" +#~ msgid "Reading" +#~ msgstr "瑞丁" -#~ msgid "%1$s swiftly hits %4$s" -#~ msgstr "%1$s 迅速擊中 %4$s" +#~ msgid "Readsboro" +#~ msgstr "瑞斯保羅" -#~ msgid "%1$s swiftly hit %4$s" -#~ msgstr "%1$s 迅速擊中 %4$s" +#~ msgid "Reed Plantation" +#~ msgstr "瑞德森林" -#~ msgid "centipede style" -#~ msgstr "蜈蚣毒" +#~ msgid "Rehoboth" +#~ msgstr "雷霍伯斯" -#~ msgid "" -#~ "While sleeping in dangerous territory, it may be wise to set traps to " -#~ "ward\n" -#~ "off unwanted intrusions. There are a few traps to be found in the world,\n" -#~ "most notably bubblewrap (which will make a loud noise if stepped on, " -#~ "helping\n" -#~ "to wake you up) and bear traps (which make noise AND damage and trap " -#~ "anything\n" -#~ "that steps on them). Others need to be crafted; this requires the Traps " -#~ "skill\n" -#~ "and possibly Mechanics.\n" -#~ "\n" -#~ "To set a trap, simply use the item%s and choose a direction; the trap\n" -#~ "will be placed on an adjacent tile. Some traps may require additional " -#~ "tools,\n" -#~ "like a shovel, to be set. Once set, a trap will remain in place until\n" -#~ "stepped on or disarmed.\n" -#~ "\n" -#~ "To disarm a trap, examine%s the space it is on. Your success depends\n" -#~ "upon your Traps skill and Dexterity. If you succeed, the trap is removed\n" -#~ "and replaced by some or all of its constituent parts; however, if you " -#~ "fail,\n" -#~ "there is a chance that you will set off the trap, suffering the " -#~ "consequences.\n" -#~ "\n" -#~ "Many traps are fully or partially hidden. Your ability to detect traps " -#~ "is\n" -#~ "entirely dependent upon your Perception. Should you stumble into a trap, " -#~ "you\n" -#~ "may have a chance to avoid it, depending on your Dodge skill." -#~ msgstr "" -#~ "當在危險的地區進行睡眠時,設置陷阱來抵禦未知的入侵者才是明智的作法。\n" -#~ "遊戲世界中能夠找到一些陷阱,最常見的就是泡泡紙(當踩到時會發出明顯聲\n" -#~ "響,讓你醒來)以及捕獸夾(會發出聲響以及傷害踩上的任何東西)。其餘的\n" -#~ "就需要透過製作物品的方式才能取得;需要陷阱技能或是一些機械技能。\n" -#~ "\n" -#~ "要設置陷阱,只要使用物品 %s 以及選取方向;陷阱就會定位在相鄰格\n" -#~ "子上。某些陷阱可能需要額外的工具,例如鏟子,才能被設置。只要設置好,\n" -#~ "陷阱就會一直是啟動的直到被觸發或是被解除。\n" -#~ "\n" -#~ "要解除陷阱,%s檢視有陷阱的那格子。你的成功機率仰賴你的陷阱技能以及敏\n" -#~ "捷。假如你成功了,陷阱就會被移除,留下陷阱的零件;然而,若是你失敗了\n" -#~ ",將會有機率造成陷阱觸發,造成痛苦的後果。\n" -#~ "\n" -#~ "許多陷阱都是完全或部分隱藏的。你偵測陷阱的能力完全仰賴於感知的屬性。\n" -#~ "你若是踏入一個陷阱則是需要閃避技能才能有機會躲開。" +#~ msgid "Revere" +#~ msgstr "瑞佛爾" -#~ msgid "" -#~ "Many important items can be very hard to find, or will cost a great deal " -#~ "of\n" -#~ "money to trade for. Fortunately, it is possible to craft a wide variety " -#~ "of\n" -#~ "goods with the proper tools, materials, and training.\n" -#~ "\n" -#~ "Some recipes require a set of tools. These are not used up when " -#~ "crafting,\n" -#~ "so you can keep your tool set. All recipes require one or more " -#~ "ingredients.\n" -#~ "These ARE used up in crafting.\n" -#~ "\n" -#~ "%sThere are five categories; Weapons, Food, \n" -#~ "Electronics, Armor, and Miscellaneous. While a few items require\n" -#~ "no skill to create, the majority require you to have some knowledge:\n" -#~ "\n" -#~ "->Mechanic skill is used for weapons, traps, and a few tools.\n" -#~ "->Cooking skill, at low levels, is used for making tasty recipes; \n" -#~ "at higher levels, you have an understanding of chemistry and can make\n" -#~ "chemical weapons and beneficial elixirs.\n" -#~ "->Electronics skill lets you make a wide variety of tools with intricate " -#~ "uses.\n" -#~ "->Tailoring skill is used to create basic clothing, and later tough " -#~ "armor.\n" -#~ "\n" -#~ "In addition to the primary crafting skills, other skills may be " -#~ "necessary\n" -#~ "to create certain items. Traps skill, Firearms skill, and First Aid " -#~ "skill\n" -#~ "are all required for certain items." -#~ msgstr "" -#~ "許多重要的物品難以被發掘,或是需要付出相當大的金錢才能購得。還好,\n" -#~ "透過正確的工具以及適當的零件、物質以及訓練就能夠製作出來。\n" -#~ "\n" -#~ "某些配方需要一組工具。這些工具不會被消耗,所以你可以保存你的工具組\n" -#~ "。所有的配方都需要消耗一或多個元件,才能進行物品製作。\n" -#~ "\n" -#~ "%s總共有五種類別;武器,食物,\n" -#~ "電子,護具,以及雜項。少部分的物品不需要技能就能夠製造,\n" -#~ "其餘的都需要你有某些知識才能製作:\n" -#~ "\n" -#~ "->機械技能用於製造武器,陷阱,以及一些工具。\n" -#~ "->烹飪技能在低等級時只能用於製作美味食物的配方;\n" -#~ "而高等級時,你能夠理解化學並製作化學武器以及藥劑。\n" -#~ "->電子技能讓你製作用途複雜的各式電子工具。\n" -#~ "->裁縫技能用於製作基本的衣物到堅固的護具。\n" -#~ "\n" -#~ "除了主要的製作相關技能,其他技能在製作特定物品時也可能用到。陷阱\n" -#~ "技能,槍械技能,以及急救技能,都在製作特定物品時會用到。" +#~ msgid "Richford" +#~ msgstr "里奇福德" -#~ msgid "Contruct" -#~ msgstr "建設" +#~ msgid "Richmond" +#~ msgstr "里士滿" -#~ msgid "Your raincoat protects you from the acidic drizzle." -#~ msgstr "你的雨衣保護你不被酸雨傷害。" +#~ msgid "Ridgefield" +#~ msgstr "里奇菲爾德" -#~ msgid "Top speed: mph" -#~ msgstr "最高速度: mph" +#~ msgid "Rindge" +#~ msgstr "瑞恩奇" -#~ msgid "Safe speed: mph" -#~ msgstr "安全速度: mph" +#~ msgid "Ripley" +#~ msgstr "里普利" -#~ msgid "Top speed: Km/h" -#~ msgstr "最高速度: Km/h" +#~ msgid "Ripton" +#~ msgstr "里普敦" -#~ msgid "Safe speed: Km/h" -#~ msgstr "安全速度: Km/h" +#~ msgid "Robbinston" +#~ msgstr "羅賓斯頓" -#~ msgid " +Damage" -#~ msgstr " +傷害" +#~ msgid "Rochester" +#~ msgstr "羅切斯特" -#~ msgid " +Attack" -#~ msgstr " +攻擊" +#~ msgid "Rockingham" +#~ msgstr "羅金厄姆" -#~ msgid " +Dodge" -#~ msgstr " +閃避" +#~ msgid "Rockland" +#~ msgstr "羅克蘭" -#~ msgid "" -#~ "Your %s already has 4 mods installed! To remove the mods,press 'U' while " -#~ "wielding the unloaded gun." -#~ msgstr "" -#~ "你的 %s 已經安裝了 4 個模組! 要移除模組,手持未裝填的槍械接著按 'U' ." +#~ msgid "Rockport" +#~ msgstr "羅克波特" -#~ msgid "" -#~ "Head encumberance has no effect; it simply limits how much you can put on." -#~ msgstr "頭部累贅度沒有影響; 僅僅限制你能穿上的東西." +#~ msgid "Rocky Hill" +#~ msgstr "洛基山" -#~ msgid "ENCUMBERANCE AND WARMTH" -#~ msgstr "累贅和保暖" +#~ msgid "Rollinsford" +#~ msgstr "羅林斯福德" -#~ msgid "Esc or q - Return to game " -#~ msgstr "Esc 或 q - 返回遊戲 " +#~ msgid "Rome" +#~ msgstr "羅馬" -#~ msgid "L - List notes " -#~ msgstr "L - 註記列表 " +#~ msgid "Roque Bluffs" +#~ msgstr "羅克布拉福" -#~ msgid "D - Delete a note " -#~ msgstr "D - 刪除註記 " +#~ msgid "Rowe" +#~ msgstr "羅維" -#~ msgid "N - Add/Edit a note " -#~ msgstr "N - 增加/編輯 註記 " +#~ msgid "Rowley" +#~ msgstr "羅利" -#~ msgid "/ - Search " -#~ msgstr "/ - 搜尋 " +#~ msgid "Roxbury" +#~ msgstr "羅克斯伯里" -#~ msgid "0 - Center map on character" -#~ msgstr "0 - 角色居中" +#~ msgid "Royalston" +#~ msgstr "羅亞爾斯頓" -#~ msgid "" -#~ "If true, replaces some TTF rendered text with Tiles. Only applicable on " -#~ "SDL builds. Requires restart." -#~ msgstr "" -#~ "設置為 是,將會顯示圖形畫面而非符號畫面。只有在 SDL 版本才能使用。必須重新" -#~ "啟動遊戲。" +#~ msgid "Royalton" +#~ msgstr "羅亞爾頓" -#~ msgid "Use Tiles" -#~ msgstr "使用圖形畫面" +#~ msgid "Rumford" +#~ msgstr "拉姆福德" -#~ msgid "Auto Pickup Safemode" -#~ msgstr "自動撿取的安全模式" +#~ msgid "Rumney" +#~ msgstr "拉姆尼" -#~ msgid "Auto Pickup 0 Vol light items" -#~ msgstr "自動撿取 0 體積重量物品" +#~ msgid "Rupert" +#~ msgstr "魯珀特" -#~ msgid "Enable item Auto Pickup" -#~ msgstr "啟用物品自動撿取" +#~ msgid "Rutland" +#~ msgstr "拉特蘭" -#~ msgid "Hide Mouse Cursor" -#~ msgstr "隱藏滑鼠指標" +#~ msgid "Rye" +#~ msgstr "瑞伊" -#~ msgid "Delete world upon player death." -#~ msgstr "只要玩家一死亡後就刪除世界。" +#~ msgid "Ryegate" +#~ msgstr "瑞伊蓋特" -#~ msgid "Delete World" -#~ msgstr "死亡後刪除世界" +#~ msgid "Sabattus" +#~ msgstr "賽巴德斯" -#~ msgid "Skill Rust" -#~ msgstr "技能衰減" +#~ msgid "Saco" +#~ msgstr "索科" -#~ msgid "Periodically Autosave" -#~ msgstr "定時自動存檔" +#~ msgid "Saint John Plantation" +#~ msgstr "聖約翰森林" -#~ msgid "Auto-Safemode on by default" -#~ msgstr "預設開啟自動安全模式" +#~ msgid "Salem" +#~ msgstr "塞勒姆" -#~ msgid "Snap to Target" -#~ msgstr "自動瞄準目標" +#~ msgid "Salisbury" +#~ msgstr "索爾茲伯里" -#~ msgid "24 Hour Time" -#~ msgstr "時間格式" +#~ msgid "Sanbornton" +#~ msgstr "聖伯敦" -#~ msgid "" -#~ "If true, bright backgrounds are not used--some consoles are not " -#~ "compatible." -#~ msgstr "設為 是 的話,亮色背景將不會被使用(某些機器不相容)。" +#~ msgid "Sandgate" +#~ msgstr "桑蓋特" -#~ msgid "No Bright Backgrounds" -#~ msgstr "無亮色背景" +#~ msgid "Sandisfield" +#~ msgstr "桑地斯菲爾德" -#~ msgid "" -#~ "If true, Y/N prompts are case- sensitive and y and n are not accepted." -#~ msgstr "" -#~ "假如設為 是 , Y/N 的提示會變成大小寫敏感,只輸入小寫的 y 及 n 是不會被接" -#~ "受的。" +#~ msgid "Sandown" +#~ msgstr "桑當" -#~ msgid "Use Metric Weights" -#~ msgstr "重量格式" +#~ msgid "Sandwich" +#~ msgstr "桑威治" -#~ msgid "Switch between Km/h and mph." -#~ msgstr "於 Km/h 及 mph 間切換。" +#~ msgid "Sandy River Plantation" +#~ msgstr "姍蒂河森林" -#~ msgid "Use Metric Speeds" -#~ msgstr "速度格式" +#~ msgid "Sanford" +#~ msgstr "桑福德" -#~ msgid "Use Celsius" -#~ msgstr "溫度格式" +#~ msgid "Sangerville" +#~ msgstr "桑格維爾" -#~ msgid "You cannot save a template with unused points!" -#~ msgstr "你不能在點數沒用完的狀況下把角色存成模板!" +#~ msgid "Saugus" +#~ msgstr "索格斯" -#~ msgid "Toad" -#~ msgstr "蛤蟆毒" +#~ msgid "Savoy" +#~ msgstr "薩沃伊" -#~ msgid "Viper" -#~ msgstr "蛇毒" +#~ msgid "Scarborough" +#~ msgstr "士嘉堡" -#~ msgid "Snake" -#~ msgstr "蛇形拳" +#~ msgid "Scituate" +#~ msgstr "錫楚埃特" -#~ msgid "Crane" -#~ msgstr "鶴形拳" +#~ msgid "Scotland" +#~ msgstr "蘇格蘭" -#~ msgid "web spider" -#~ msgstr "網蛛" +#~ msgid "Seabrook" +#~ msgstr "錫布魯克" -#~ msgid "spore" -#~ msgstr "孢子" +#~ msgid "Searsburg" +#~ msgstr "錫爾斯堡" -#~ msgid "young fungaloid" -#~ msgstr "小食人蕈" +#~ msgid "Searsmont" +#~ msgstr "錫爾斯蒙特" -#~ msgid "queen triffid" -#~ msgstr "王后食人樹" +#~ msgid "Searsport" +#~ msgstr "錫爾斯港" -#~ msgid "" -#~ "A small triffid, only a few feet tall. It\n" -#~ "has not yet developed bark, but its sting\n" -#~ "is still sharp and deadly." -#~ msgstr "" -#~ "一株小型的食人樹,只有幾呎高。\n" -#~ "莖齒的部份還沒發育完全,但是很\n" -#~ "刺且鋒利,被咬到還是很致命。" +#~ msgid "Sebago" +#~ msgstr "錫巴勾" -#~ msgid "young triffid" -#~ msgstr "小食人樹" +#~ msgid "Sebec" +#~ msgstr "錫比克" -#~ msgid "" -#~ "A plant that grows as high as your head,\n" -#~ "with one thick, bark-coated stalk\n" -#~ "supporting a flower-like head with a sharp\n" -#~ "sting within." -#~ msgstr "" -#~ "一株植物與你的身高差不多,\n" -#~ "有著厚實,齒狀的莖\n" -#~ "頂部有著花狀的頭部以及\n" -#~ "尖刺。" +#~ msgid "Seboeis Plantation" +#~ msgstr "錫波伊斯森林" -#~ msgid "child zombie" -#~ msgstr "殭屍小孩" +#~ msgid "Sedgwick" +#~ msgstr "塞奇威克" -#~ msgid "master zombie" -#~ msgstr "殭屍王" +#~ msgid "Seekonk" +#~ msgstr "錫康克" -#~ msgid "" -#~ "This zombie seems to have slightly longer\n" -#~ "than ordinary arms, and constantly gropes\n" -#~ "at its surroundings as it moves." -#~ msgstr "" -#~ "這個殭屍有著比一般人長的手臂\n" -#~ "當他移動時手臂會纏繞在他自己\n" -#~ "身體四周,小心別被抓住。" +#~ msgid "Seymour" +#~ msgstr "西摩爾" -#~ msgid "" -#~ "This deformed, sinewy canine stays close to\n" -#~ "the ground, loping forward faster than most\n" -#~ "humans ever could." -#~ msgstr "" -#~ "這個強而有力的畸形生物向前的\n" -#~ "追擊速度比一般的人類更快。" +#~ msgid "Shaftsbury" +#~ msgstr "沙夫茨伯里" -#~ msgid "" -#~ "This zombie's hands and feet are\n" -#~ "webbed, and it is clad in swimwear." -#~ msgstr "" -#~ "這個殭屍的手掌與腳掌都有蹼\n" -#~ "並且穿著泳裝。" +#~ msgid "Shapleigh" +#~ msgstr "沙布雷" -#~ msgid "" -#~ "This zombie emits a constant haze of\n" -#~ "thick, obfuscating smoke." -#~ msgstr "這個殭屍會產生不定大小的濃煙。" +#~ msgid "Sharon" +#~ msgstr "夏隆" -#~ msgid "" -#~ "This zombie's flesh is pale blue, and it\n" -#~ "occasionally crackles with small bolts of\n" -#~ "lightning." -#~ msgstr "" -#~ "這個殭屍的肉體是藍色的,\n" -#~ "並且三不五時就發出電流聲。" +#~ msgid "Sheffield" +#~ msgstr "謝菲爾德" -#~ msgid "" -#~ "This zombie's mouth is deformed into a round\n" -#~ "spitter, and its body throbs with a dense\n" -#~ "yellow fluid." -#~ msgstr "" -#~ "這個殭屍的嘴巴退化成了噴管,\n" -#~ "身體中流動著濃稠的黃色液體。" +#~ msgid "Shelburne" +#~ msgstr "謝爾本" -#~ msgid "" -#~ "This zombie's jaw has been torn off, leaving\n" -#~ "a gaping hole from mid-neck up." -#~ msgstr "" -#~ "這個僵屍的下顎已經被撕裂了,\n" -#~ "在頸部中央開了一個大洞。" +#~ msgid "Sheldon" +#~ msgstr "謝爾頓" -#~ msgid "" -#~ "A human body, encapsulated in tough riot\n" -#~ "armour, this zombie was clearly a cop gearing\n" -#~ "up to fight the infection." -#~ msgstr "" -#~ "人的身體裝在堅固的鎮暴護具中,\n" -#~ "這個殭屍生前明顯是個敬業的警察。" +#~ msgid "Shelton" +#~ msgstr "謝爾頓" -#~ msgid "" -#~ "A human body, stumbling slowly forward on\n" -#~ "uncertain legs, possessed with an unstoppable\n" -#~ "rage." -#~ msgstr "" -#~ "人的身體,跌跌撞撞的緩慢前進,\n" -#~ "無法遏止他往前吃人的慾望。" +#~ msgid "Sherborn" +#~ msgstr "謝爾本" -#~ msgid "A portion of a giant worm that is still alive." -#~ msgstr "巨蟲的部分身軀,而且還活著。" +#~ msgid "Sherman" +#~ msgstr "謝爾曼" -#~ msgid "" -#~ "Half of this monster is emerging from a\n" -#~ "hole in the ground. It looks like a huge\n" -#~ "earthworm, but the end has split into a\n" -#~ "large, fanged mouth." -#~ msgstr "" -#~ "這怪物的一半身軀露出在地洞之外。\n" -#~ "看起來像是個巨大的蚯蚓,但是前段\n" -#~ "已經特化成了一個有大型獠牙的嘴。" +#~ msgid "Shirley" +#~ msgstr "雪莉" -#~ msgid "" -#~ "A hideous slithering beast with a tri-\n" -#~ "sectional mouth that opens to reveal\n" -#~ "hundreds of writhing tongues. Most of its\n" -#~ "enormous body is hidden underground." -#~ msgstr "" -#~ "一個恐怖的滑行怪物。有著三向裂口\n" -#~ "與數以百計的捲動舌。它龐大的身軀\n" -#~ "大部分都隱藏在地底。" +#~ msgid "Shoreham" +#~ msgstr "索爾海姆" -#~ msgid "" -#~ "An evil-looking, slender-bodied wasp with\n" -#~ "a vicious sting on its abdomen." -#~ msgstr "" -#~ "有著邪惡、瘦長外表的黃蜂,\n" -#~ "腹部帶著劇毒的刺針。" +#~ msgid "Shrewsbury" +#~ msgstr "什魯斯伯里" -#~ msgid "" -#~ "A honey bee the size of a small dog. It\n" -#~ "buzzes angrily through the air, dagger-\n" -#~ "sized sting pointed forward." -#~ msgstr "" -#~ "一支蜜蜂有著小狗的大小。\n" -#~ "在空中憤怒的嗡嗡飛舞,\n" -#~ "匕首大小的毒針指著前方。" +#~ msgid "Shutesbury" +#~ msgstr "肖茲伯里" -#~ msgid "" -#~ "A large housefly the size of a small dog.\n" -#~ "It buzzes around incessantly." -#~ msgstr "" -#~ "一支蒼蠅有著小狗的大小。\n" -#~ "嗡嗡作響的不停飛舞。" +#~ msgid "Sidney" +#~ msgstr "西德尼" -#~ msgid "" -#~ "This insect is pale gray in color, its\n" -#~ "chitin weakened by the fungus sprouting\n" -#~ "from every joint on its body." -#~ msgstr "" -#~ "這個蟲是灰色的,其全身\n" -#~ "甲殼因為被真菌寄生所以\n" -#~ "變得薄弱。" +#~ msgid "Simsbury" +#~ msgstr "錫姆斯伯里" -#~ msgid "fungal insect" -#~ msgstr "真菌蟲" +#~ msgid "Skowhegan" +#~ msgstr "思科西根" -#~ msgid "" -#~ "This ant has a long, bloated thorax, bulging\n" -#~ "with hundreds of small ant eggs. It moves\n" -#~ "slowly, tending to nearby eggs and laying\n" -#~ "still more." -#~ msgstr "" -#~ "這種螞蟻有一個長而臃腫的胸腔,懷著\n" -#~ "數以百計的小螞蟻卵。移動很緩慢並且\n" -#~ "會產下許多的卵。" +#~ msgid "Smithfield" +#~ msgstr "史密斯菲爾德" -#~ msgid "" -#~ "Darker in color than the other ants, this\n" -#~ "more aggresive variety has even larger\n" -#~ "mandibles." -#~ msgstr "" -#~ "顏色比其他螞蟻深,\n" -#~ "這個更具侵略性的品種有著\n" -#~ "更大的下顎。" +#~ msgid "Smyrna" +#~ msgstr "士麥那" -#~ msgid "" -#~ "A red ant the size of a crocodile. It is\n" -#~ "covered in chitinous armor, and has a pair of\n" -#~ "vicious mandibles." -#~ msgstr "" -#~ "與鱷魚尺寸相仿的紅蟻。\n" -#~ "全身覆蓋甲殼護甲,並有\n" -#~ "一對有毒的下顎。" +#~ msgid "Solon" +#~ msgstr "梭倫" -#~ msgid "" -#~ "The size of a large cat, this pulsating mass\n" -#~ "of glistening white flesh turns your stomach." -#~ msgstr "" -#~ "與大貓的尺寸相仿,這有脈動的白色\n" -#~ "血肉讓你覺得噁心。" +#~ msgid "Somers" +#~ msgstr "薩默斯" -#~ msgid "A small domesticated cat, gone feral." -#~ msgstr "小型訓養過的貓,變得有野性了。" +#~ msgid "Somerset" +#~ msgstr "薩默塞特" -#~ msgid "A medium-sized domesticated dog, gone feral." -#~ msgstr "中型大小訓養過的狗,變得有野性了。" +#~ msgid "Somersworth" +#~ msgstr "薩默沃斯" -#~ msgid "A vicious and fast hunter." -#~ msgstr "" -#~ "美洲獅是種棲息於北美洲、中美洲、甚至南美洲的食肉目貓科動物。 美洲獅分類上" -#~ "屬美洲金貓屬。美洲獅在跳躍方面有著驚人的「天賦」,它輕輕一跳,便能跳到6—7" -#~ "米以外,更厲害的一躍可達40英呎,高達13英呎。" +#~ msgid "Somerville" +#~ msgstr "薩默維爾" -#~ msgid "An american black bear. Remember, only YOU can prevent forest fires." -#~ msgstr "" -#~ "熊,是一種雜食性大型哺乳類,屬於食肉目犬形亞目熊科,現存進化關係最近的物種" -#~ "是鰭足類和犬科。現在地球上有八種熊,廣泛分布北半球和南半球的一部分,如亞" -#~ "洲、歐洲、美洲和北極。 常見的特徵是身軀龐大、四肢粗壯有力、長鼻子、厚毛" -#~ "髮、短尾、跖行足、每隻腳爪上有五個彎曲鋒利不能回縮的爪子。" +#~ msgid "Sorrento" +#~ msgstr "索倫托" -#~ msgid "" -#~ "An eastern coyote, also called tweed wolf. It is an hybrid of grey wolves " -#~ "and the smaller western coyotes." -#~ msgstr "" -#~ "郊狼,也叫草原狼、北美小狼,是犬科犬屬的一種,與狼是近親。郊狼產於北美大陸" -#~ "的廣大地區,北起阿拉斯加、南到巴拿馬。歐洲探險家最初是在美國西南部發現這種" -#~ "動物的。郊狼一般單獨獵食,偶爾也會組成小型的群體。平均壽命為6-10年。" +#~ msgid "South Berwick" +#~ msgstr "南貝里克" -#~ msgid "A grey wolf. A vicious and fast pack hunter." -#~ msgstr "一頭灰狼。惡毒的獵食性動物。" +#~ msgid "South Bristol" +#~ msgstr "南布里斯托爾" -#~ msgid "A buck of the largest deer species." -#~ msgstr "最大型的鹿種" +#~ msgid "South Burlington" +#~ msgstr "南伯靈頓" -#~ msgid "A large buck, fast-moving and strong." -#~ msgstr "大型哺乳類動物,移動快速且強壯。" +#~ msgid "South Hadley" +#~ msgstr "南哈德利" -#~ msgid "A small woodland animal." -#~ msgstr "小型森林動物" +#~ msgid "South Hampton" +#~ msgstr "南漢普頓" -#~ msgid "Your %s is destroyed! GAME OVER!" -#~ msgstr "你的 %s 被摧毀! 遊戲結束!" +#~ msgid "South Hero" +#~ msgstr "南希羅" -#~ msgid "a smoker explodes!" -#~ msgstr "煙霧殭屍爆炸了!" +#~ msgid "South Kingstown" +#~ msgstr "南金斯敦" -#~ msgid "The %s melts away!" -#~ msgstr "%s 融化了!" +#~ msgid "South Portland" +#~ msgstr "南波特蘭" -#~ msgid "The %s splits!" -#~ msgstr "%s 分裂!" +#~ msgid "South Thomaston" +#~ msgstr "南托馬斯頓" -#~ msgid "The %s splatters into tiny, dead pieces." -#~ msgstr "%s 四散成了屍體碎片。" +#~ msgid "South Windsor" +#~ msgstr "南溫莎" -#~ msgid "You feel terrible for killing %s!" -#~ msgstr "殺了 %s 讓你感覺很糟!" +#~ msgid "Southampton" +#~ msgstr "南安普敦" -#~ msgid "It disintegrates!" -#~ msgstr "它崩解了!" +#~ msgid "Southborough" +#~ msgstr "紹斯伯勒" -#~ msgid "a boomer explodes!" -#~ msgstr "嘔吐者爆炸了!" +#~ msgid "Southbridge" +#~ msgstr "南布里奇" -#~ msgid "The %s's corpse melts into a pool of acid." -#~ msgstr "%s 的屍體溶化成了一灘酸液。" +#~ msgid "Southbury" +#~ msgstr "紹斯伯里" -#~ msgid " for %d damage." -#~ msgstr " 造成 %d 傷害。" +#~ msgid "Southington" +#~ msgstr "索辛頓" -#~ msgid "%1$s whacks %4$s" -#~ msgstr "%1$s 重擊 %4$s" +#~ msgid "Southport" +#~ msgstr "紹斯波特" -#~ msgid "%1$s cut %4$s" -#~ msgstr "%1$s 砍劈 %4$s" +#~ msgid "Southwest Harbor" +#~ msgstr "西南港" -#~ msgid "%s's %s" -#~ msgstr "%s 的 %s" +#~ msgid "Southwick" +#~ msgstr "索斯威克" -#~ msgid "brush." -#~ msgstr "唰唰聲." +#~ msgid "Spencer" +#~ msgstr "斯賓塞" -#~ msgid "whump!" -#~ msgstr "呼!" +#~ msgid "Sprague" +#~ msgstr "斯普拉格" -#~ msgid "porcelain breaking!" -#~ msgstr "瓷器破碎聲!" +#~ msgid "Springfield" +#~ msgstr "斯普林菲爾德" -#~ msgid "clang!" -#~ msgstr "鐺!" +#~ msgid "St. Agatha" +#~ msgstr "聖愛葛莎" -#~ msgid "metal screeching!" -#~ msgstr "金屬嘎嘎聲!" +#~ msgid "St. Albans" +#~ msgstr "聖奧爾本斯" -#~ msgid "Play ow!" -#~ msgstr "立刻玩!" +#~ msgid "St. Francis" +#~ msgstr "聖弗朗西斯" -#~ msgid "andom Character" -#~ msgstr "隨機角色" +#~ msgid "St. George" +#~ msgstr "聖喬治" -#~ msgid "

reset Character" -#~ msgstr "

模板角色" +#~ msgid "St. Johnsbury" +#~ msgstr "聖約翰伯里" -#~ msgid "ustom Character" -#~ msgstr "自定角色" +#~ msgid "Stacyville" +#~ msgstr "史黛西維爾" -#~ msgid "uit" -#~ msgstr "離開" +#~ msgid "Stafford" +#~ msgstr "斯塔福德" -#~ msgid "redits" -#~ msgstr "製作名單" +#~ msgid "Stamford" +#~ msgstr "斯坦福" -#~ msgid "elp" -#~ msgstr "說明" +#~ msgid "Standish" +#~ msgstr "斯坦迪什" -#~ msgid "ptions" -#~ msgstr "選項" +#~ msgid "Stannard" +#~ msgstr "斯坦納德" -#~ msgid "pecial" -#~ msgstr "特殊" +#~ msgid "Stark" +#~ msgstr "史塔克" -#~ msgid "oad" -#~ msgstr "讀取" +#~ msgid "Starks" +#~ msgstr "史塔克斯" -#~ msgid "ew Game" -#~ msgstr "新遊戲" +#~ msgid "Starksboro" +#~ msgstr "史塔克伯羅" -#~ msgid "OTD" -#~ msgstr "消息" +#~ msgid "Sterling" +#~ msgstr "斯特林" -#~ msgid "firearms" -#~ msgstr "槍械" +#~ msgid "Stetson" +#~ msgstr "斯泰森" -#~ msgid "" -#~ "Being a paramedic put you in a bad spot when it all ended. You had to " -#~ "fight your way out of a hospital full of infected to get to the shelter. " -#~ "You start with a few related tools and some skill in first aid." -#~ msgstr "" -#~ "在末日時當一個醫護兵真是一個糟糕的狀況。你必須在滿是感染的醫院找到自己的出" -#~ "路,直到逃離至避難所。你開始時擁有相關工具以及一些 急救 技能。" +#~ msgid "Steuben" +#~ msgstr "斯圖本" -#~ msgid "" -#~ "You haven't seen this much blood since the war. The whole world's gone " -#~ "crazy! They ate your grandkids! But dagnabbit, you'll make them all pay " -#~ "for what they've done. You start with a cane and your pocketwatch." -#~ msgstr "" -#~ "你在戰爭中也沒看過這麼血腥的狀況。整個世界都瘋了! 他們吃了你的孫子! 他奶奶" -#~ "的熊,你會讓他們付出代價的。你開始時帶著 手杖 以及你的 懷錶 。" +#~ msgid "Stewartstown" +#~ msgstr "斯圖爾茨敦" -#~ msgid "" -#~ "Before the Apocalypse, you turned to Heroin to soothe your many " -#~ "problems.\n" -#~ "Now, your habit is your only comfort and your only drive." -#~ msgstr "" -#~ "在大災變之前, 你吸食海洛因來逃避你的問題.\n" -#~ "現在,你的毒癮是你唯一的安慰。" +#~ msgid "Stockbridge" +#~ msgstr "斯托克布里奇" -#~ msgid "" -#~ "You were about to marry your bride before the cataclysm, now you spend " -#~ "you days searching for her." -#~ msgstr "你在大災變前才正要娶你的新娘, 而你現在正找尋著她." +#~ msgid "Stockholm" +#~ msgstr "斯德哥爾摩" -#~ msgid "" -#~ "You've worked the streets since you were a kid, and now you use your " -#~ "street skills to survive. You start with a Glock 19 and some of your " -#~ "\"goods\", but no bullets." -#~ msgstr "" -#~ "你從小就在街頭工作。所以你知道怎麼運用你的技能來生存。你一開始帶著 沒子彈" -#~ "的格洛克19手槍,以及一些 \"好料\" 。" +#~ msgid "Stockton Springs" +#~ msgstr "斯托克頓泉" -#~ msgid "" -#~ "You've always loved tinkering with stuff. You start with a tool belt, and " -#~ "know a little bit about mechanics, tailoring, electronics, and carpentry." -#~ msgstr "" -#~ "你總是喜歡自己動手折騰一些東西. 你一開始擁有工具腰帶, 以及一些機械, 裁縫, " -#~ "電子, 木工的技能." +#~ msgid "Stoddard" +#~ msgstr "斯托達德" -#~ msgid "" -#~ "You worked for a small-time security company guarding local businesses. " -#~ "You start with a security outfit and a flashlight." -#~ msgstr "你在當地的一個小公司擔任保全. 你一開始便有保全制服及手電筒." +#~ msgid "Stoneham" +#~ msgstr "斯托納姆" -#~ msgid "" -#~ "You used to be a ballroom dancer before the cataclysm, and now you use " -#~ "your skills to save your life. You start with a tuxedo and a level in " -#~ "dodging." -#~ msgstr "" -#~ "在大災變前你是舞廳的舞者, 而你利用你的技巧來自救. 你一開始便有燕尾服及基本" -#~ "閃避技能." +#~ msgid "Stonington" +#~ msgstr "斯托寧頓" -#~ msgid "" -#~ "You spent most of your life on a Harley, and it's only natural you spend " -#~ "the rest of it riding one. You start with some biker clothes." -#~ msgstr "" -#~ "你大半日子都在哈雷上度過, 只有在機車上你才能感受生命的意義. 你一開始便有一" -#~ "些騎士的衣物." +#~ msgid "Stoughton" +#~ msgstr "斯托頓" -#~ msgid "" -#~ "You were in the middle of a nice shower when the cataclysm struck! You " -#~ "start buck naked." -#~ msgstr "你洗澡洗一半就爆發大災變! 你全身光溜溜的逃生!" +#~ msgid "Stow" +#~ msgstr "斯托" -#~ msgid "" -#~ "You used to work for some small-time business owner doing minor " -#~ "electrical work, and you just so happened to be working on an evac " -#~ "shelter when the cataclysm struck. You start with a level in electronics, " -#~ "and a tool belt." -#~ msgstr "" -#~ "你平常都承包一些企業有關電力的小案子, 而大災變爆發時你正好在避難所工作. 你" -#~ "一開始便有基本的電子學, 以及工具腰帶." +#~ msgid "Stowe" +#~ msgstr "斯托" -#~ msgid "" -#~ "You were one of those guys who watched one too many survivalist shows. " -#~ "You start with a backpack, a blazer, and some survival skills." -#~ msgstr "" -#~ "你就像是那些看了太多生存節目的人一樣. 你開始便有背包, 外套, 以及一些生存" -#~ "技能." +#~ msgid "Strafford" +#~ msgstr "斯特拉福德" -#~ msgid "" -#~ "You've traveled for a living, sightseeing here and there, and living off " -#~ "your parents' trust fund. But now they're gone, and the only thing " -#~ "between you and death is the open road and your backpack." -#~ msgstr "" -#~ "你生存的意義是旅行,四處觀光,有你父母的信託基金讓你生活寬裕。但這些已經是" -#~ "過去式了,你和你的背包就是你現在生存的關鍵。" +#~ msgid "Stratford" +#~ msgstr "斯特拉特福" -#~ msgid "" -#~ "You lived on the streets your whole life because you would rather have a " -#~ "bottle of whiskey than a roof over your head. You start with a strong " -#~ "alcohol addiction and a pair of pants." -#~ msgstr "" -#~ "你的一生都流落街頭, 因為你覺得買房子還不如拿去買酒喝. 你一開始便有嚴重的酒" -#~ "精上癮症狀以及一條褲子." +#~ msgid "Stratham" +#~ msgstr "斯特拉漢" -#~ msgid "" -#~ "Everyone at work knew you as the person who always had a cigarette or two " -#~ "in hand. Now, you're down to a single pack, and you hope you find more " -#~ "soon. You start out with a strong nicotine addiction, and 10 cigarettes." -#~ msgstr "" -#~ "你工作地方的每個人都知道你這個人總是嘴上叼著一根或兩根煙. 現在末日時期你降" -#~ "到一天只抽一包, 而你期望可以找到更多香煙. 你一開始便有很深的尼古丁上癮症狀" -#~ "以及10根香煙." +#~ msgid "Stratton" +#~ msgstr "斯特拉頓" -#~ msgid "" -#~ "You're a high school drop-out with one goal in mind: to join the " -#~ "military. You finally got in, and now it's hell on Earth in cataclysmic " -#~ "proportions. You start out with some military gear, and a level in " -#~ "survival and firearms." -#~ msgstr "" -#~ "你高中輟學後心中就只有一個目標: 從軍 。你如願成為軍人,而現在正出現地球的" -#~ "大災難。你一開始便擁有一些軍用裝備, 以及基礎的 生存 與 槍械 技能。別擔心," -#~ "你身上沒有國防布。" +#~ msgid "Strong" +#~ msgstr "斯特朗" -#~ msgid "Leverett" -#~ msgstr "萊弗里特" +#~ msgid "Sturbridge" +#~ msgstr "斯特布里奇" -#~ msgid "Levant" -#~ msgstr "黎凡特" +#~ msgid "Sudbury" +#~ msgstr "薩德伯里" -#~ msgid "Leominster" -#~ msgstr "利奧明斯特" +#~ msgid "Suffield" +#~ msgstr "薩菲爾德" -#~ msgid "Lenox" -#~ msgstr "萊諾克斯" +#~ msgid "Sugar Hill" +#~ msgstr "糖山" -#~ msgid "Lempster" -#~ msgstr "萊普斯特" +#~ msgid "Sullivan" +#~ msgstr "沙利文" -#~ msgid "Lemington" -#~ msgstr "萊明頓" +#~ msgid "Sumner" +#~ msgstr "薩姆納" -#~ msgid "Leicester" -#~ msgstr "萊切斯特" +#~ msgid "Sunapee" +#~ msgstr "桑納皮" -#~ msgid "Leeds" -#~ msgstr "利茲" +#~ msgid "Sunderland" +#~ msgstr "桑德蘭" -#~ msgid "Ledyard" -#~ msgstr "萊德亞德" +#~ msgid "Surrey" +#~ msgstr "薩瑞" -#~ msgid "Lebanon" -#~ msgstr "黎巴嫩" +#~ msgid "Surry" +#~ msgstr "薩里" -#~ msgid "Lawrence" -#~ msgstr "勞倫斯" +#~ msgid "Sutton" +#~ msgstr "薩頓" -#~ msgid "Langdon" -#~ msgstr "蘭登" +#~ msgid "Swampscott" +#~ msgstr "斯旺普思科特" -#~ msgid "Lanesborough" -#~ msgstr "蘭斯伯瑞" +#~ msgid "Swans Island" +#~ msgstr "天鵝島" -#~ msgid "Landgrove" -#~ msgstr "蘭德括福" +#~ msgid "Swansea" +#~ msgstr "斯旺西" -#~ msgid "Landaff" -#~ msgstr "蘭大福" +#~ msgid "Swanton" +#~ msgstr "斯旺頓" -#~ msgid "Lancaster" -#~ msgstr "蘭開斯特" +#~ msgid "Swanville" +#~ msgstr "斯旺維爾" -#~ msgid "Lamoine" -#~ msgstr "拉蒙尼" +#~ msgid "Swanzey" +#~ msgstr "斯旺西" -#~ msgid "Lakeville" -#~ msgstr "萊克維爾" +#~ msgid "Sweden" +#~ msgstr "瑞典" -#~ msgid "Lake View Plantation" -#~ msgstr "湖景森林" +#~ msgid "Talmadge" +#~ msgstr "泰爾馬奇" -#~ msgid "Lagrange" -#~ msgstr "拉格朗日" +#~ msgid "Tamworth" +#~ msgstr "塔姆沃思" -#~ msgid "Laconia" -#~ msgstr "拉科尼亞" +#~ msgid "Taunton" +#~ msgstr "湯頓" -#~ msgid "Knox" -#~ msgstr "諾克斯" +#~ msgid "Temple" +#~ msgstr "鄧普" -#~ msgid "Kittery" -#~ msgstr "基特里" +#~ msgid "Templeton" +#~ msgstr "鄧普頓" -#~ msgid "Kirby" -#~ msgstr "柯比" +#~ msgid "Tewksbury" +#~ msgstr "圖克斯伯里" -#~ msgid "Kingston" -#~ msgstr "金士頓" +#~ msgid "The Forks" +#~ msgstr "福克斯" -#~ msgid "Kingsbury Plantation" -#~ msgstr "金斯伯里森林" +#~ msgid "Thetford" +#~ msgstr "塞特福德" -#~ msgid "Kingman" -#~ msgstr "金曼" +#~ msgid "Thomaston" +#~ msgstr "托馬斯頓" -#~ msgid "Kingfield" -#~ msgstr "金菲爾德" +#~ msgid "Thorndike" +#~ msgstr "桑戴克" -#~ msgid "Killingworth" -#~ msgstr "基靈沃斯" +#~ msgid "Thornton" +#~ msgstr "桑頓" -#~ msgid "Killington" -#~ msgstr "基靈頓" +#~ msgid "Tilton" +#~ msgstr "蒂爾頓" -#~ msgid "Killingly" -#~ msgstr "基靈" +#~ msgid "Tinmouth" +#~ msgstr "蒂茂斯" -#~ msgid "Kent" -#~ msgstr "肯特" +#~ msgid "Tisbury" +#~ msgstr "蒂斯伯里" -#~ msgid "Kensington" -#~ msgstr "肯辛頓" +#~ msgid "Tiverton" +#~ msgstr "蒂弗頓" -#~ msgid "Kennebunkport" -#~ msgstr "肯納邦克港" +#~ msgid "Tolland" +#~ msgstr "多爾蘭" -#~ msgid "Kennebunk" -#~ msgstr "肯納邦克" +#~ msgid "Topsfield" +#~ msgstr "托普斯費爾德" -#~ msgid "Kenduskeag" -#~ msgstr "肯德斯凱" +#~ msgid "Topsham" +#~ msgstr "托普瑟姆" -#~ msgid "Keene" -#~ msgstr "基恩" +#~ msgid "Torrington" +#~ msgstr "托靈頓" -#~ msgid "Jonesport" -#~ msgstr "瓊斯港" +#~ msgid "Townsend" +#~ msgstr "湯森德" -#~ msgid "Jonesboro" -#~ msgstr "瓊斯伯勒" +#~ msgid "Townshend" +#~ msgstr "湯森漢德" -#~ msgid "Johnston" -#~ msgstr "約翰斯頓" +#~ msgid "Tremont" +#~ msgstr "特里蒙特" -#~ msgid "Jericho" -#~ msgstr "傑里科" +#~ msgid "Trenton" +#~ msgstr "特倫頓" -#~ msgid "Jefferson" -#~ msgstr "傑佛遜" +#~ msgid "Trescott" +#~ msgstr "特倫思科特" -#~ msgid "Jay" -#~ msgstr "傑伊" +#~ msgid "Troy" +#~ msgstr "特洛伊" -#~ msgid "Jamestown" -#~ msgstr "詹姆斯敦" +#~ msgid "Trumbull" +#~ msgstr "特朗布爾" -#~ msgid "Jamaica" -#~ msgstr "牙買加" +#~ msgid "Truro" +#~ msgstr "特魯羅" -#~ msgid "Jaffrey" -#~ msgstr "傑佛瑞" +#~ msgid "Tuftonboro" +#~ msgstr "特魯菲伯羅" -#~ msgid "Jackman" -#~ msgstr "傑克曼" +#~ msgid "Tunbridge" +#~ msgstr "滕布里奇" -#~ msgid "Islesboro" -#~ msgstr "艾蘭斯伯羅" +#~ msgid "Tyngsborough" +#~ msgstr "蒂斯堡" -#~ msgid "Isle au Haut" -#~ msgstr "愛華特島" +#~ msgid "Tyringham" +#~ msgstr "蒂林厄姆" -#~ msgid "Isle La Motte" -#~ msgstr "拉蒙特島" +#~ msgid "Underhill" +#~ msgstr "昂德希爾" -#~ msgid "Island Falls" -#~ msgstr "瀑布島" +#~ msgid "Union" +#~ msgstr "尤你恩" -#~ msgid "Irasburg" -#~ msgstr "艾拉斯堡" +#~ msgid "Unity" +#~ msgstr "尤你蒂" -#~ msgid "Ira" -#~ msgstr "艾拉" +#~ msgid "Upton" +#~ msgstr "厄普頓" -#~ msgid "Ipswich" -#~ msgstr "伊普斯維奇" +#~ msgid "Uxbridge" +#~ msgstr "阿克斯布里奇" -#~ msgid "Industry" -#~ msgstr "工業" +#~ msgid "Van Buren" +#~ msgstr "範布倫" -#~ msgid "Hyde Park" -#~ msgstr "海德公園" +#~ msgid "Vanceboro" +#~ msgstr "凡斯波羅" -#~ msgid "Hurricane Isle" -#~ msgstr "颶風島" +#~ msgid "Vassalboro" +#~ msgstr "瓦薩波羅" -#~ msgid "Huntington" -#~ msgstr "杭廷頓" +#~ msgid "Veazie" +#~ msgstr "維濟" -#~ msgid "Hull" -#~ msgstr "霍爾" +#~ msgid "Vergennes" +#~ msgstr "弗金斯" -#~ msgid "Hudson" -#~ msgstr "哈德森" +#~ msgid "Vernon" +#~ msgstr "弗農" -#~ msgid "Hubbardton" -#~ msgstr "霍巴德頓" +#~ msgid "Verona Island" +#~ msgstr "維羅納島" -#~ msgid "Hubbardston" -#~ msgstr "霍巴德斯頓" +#~ msgid "Vershire" +#~ msgstr "維西爾" -#~ msgid "Howland" -#~ msgstr "霍蘭德" +#~ msgid "Victory" +#~ msgstr "維克多里" -#~ msgid "Houlton" -#~ msgstr "霍爾頓" +#~ msgid "Vienna" +#~ msgstr "維也納" -#~ msgid "Hopkinton" -#~ msgstr "霍普金頓" +#~ msgid "Vinalhaven" +#~ msgstr "維諾黑文" -#~ msgid "Hopedale" -#~ msgstr "霍普戴勒" +#~ msgid "Voluntown" +#~ msgstr "沃倫特敦" -#~ msgid "Hope" -#~ msgstr "霍普" +#~ msgid "Wade" +#~ msgstr "韋德" -#~ msgid "Hooksett" -#~ msgstr "霍克賽特" +#~ msgid "Waite" +#~ msgstr "韋特" -#~ msgid "Holyoke" -#~ msgstr "霍利奧克" +#~ msgid "Waitsfield" +#~ msgstr "韋茨菲爾德" -#~ msgid "Holliston" -#~ msgstr "霍利斯頓" +#~ msgid "Wakefield" +#~ msgstr "韋克菲爾德" -#~ msgid "Hollis" -#~ msgstr "霍利斯" +#~ msgid "Walden" +#~ msgstr "沃爾登" -#~ msgid "Holland" -#~ msgstr "荷蘭" +#~ msgid "Waldo" +#~ msgstr "沃爾多" -#~ msgid "Holderness" -#~ msgstr "霍爾德內斯" +#~ msgid "Waldoboro" +#~ msgstr "沃爾多波羅" -#~ msgid "Holden" -#~ msgstr "霍頓" +#~ msgid "Wales" +#~ msgstr "威爾士" -#~ msgid "Holbrook" -#~ msgstr "霍爾布魯克" +#~ msgid "Wallagrass" +#~ msgstr "沃拉葛雷斯" -#~ msgid "Hodgdon" -#~ msgstr "霍奇登" +#~ msgid "Wallingford" +#~ msgstr "瓦林福德" -#~ msgid "Hiram" -#~ msgstr "希蘭" +#~ msgid "Walpole" +#~ msgstr "沃波爾" -#~ msgid "Hinsdale" -#~ msgstr "欣斯戴爾" +#~ msgid "Waltham" +#~ msgstr "沃爾瑟姆" -#~ msgid "Hingham" -#~ msgstr "欣厄姆" +#~ msgid "Wardsboro" +#~ msgstr "沃德斯波羅" -#~ msgid "Hinesburg" -#~ msgstr "海因斯堡" +#~ msgid "Ware" +#~ msgstr "韋爾" -#~ msgid "Hillsborough" -#~ msgstr "希爾斯堡" +#~ msgid "Wareham" +#~ msgstr "韋勒姆" -#~ msgid "Highland Plantation" -#~ msgstr "高地森林" +#~ msgid "Warner" +#~ msgstr "華納" -#~ msgid "Highgate" -#~ msgstr "高門" +#~ msgid "Warren" +#~ msgstr "沃倫" -#~ msgid "Hersey" -#~ msgstr "赫西" +#~ msgid "Warwick" +#~ msgstr "華威" -#~ msgid "Hermon" -#~ msgstr "黑門" +#~ msgid "Washburn" +#~ msgstr "沃什本" -#~ msgid "Henniker" -#~ msgstr "漢尼克" +#~ msgid "Waterboro" +#~ msgstr "沃特波羅" -#~ msgid "Hebron" -#~ msgstr "希伯倫" +#~ msgid "Waterbury" +#~ msgstr "沃特伯里" -#~ msgid "Heath" -#~ msgstr "希思" +#~ msgid "Waterford" +#~ msgstr "沃特福德" -#~ msgid "Haynesville" -#~ msgstr "海恩斯維爾" +#~ msgid "Watertown" +#~ msgstr "水城" -#~ msgid "Hawley" -#~ msgstr "霍利" +#~ msgid "Waterville" +#~ msgstr "沃特維爾" -#~ msgid "Haverhill" -#~ msgstr "哈福希爾" +#~ msgid "Waterville Valley" +#~ msgstr "沃特維爾谷" -#~ msgid "Hatfield" -#~ msgstr "哈特菲爾德" +#~ msgid "Wayland" +#~ msgstr "韋蘭" -#~ msgid "Harwinton" -#~ msgstr "哈溫頓" +#~ msgid "Wayne" +#~ msgstr "韋恩" -#~ msgid "Harwich" -#~ msgstr "哈威奇" +#~ msgid "Weare" +#~ msgstr "威爾" -#~ msgid "Harvard" -#~ msgstr "哈佛" +#~ msgid "Weathersfield" +#~ msgstr "維德斯菲爾德" -#~ msgid "Hartland" -#~ msgstr "哈特蘭" +#~ msgid "Webster" +#~ msgstr "韋伯斯特" -#~ msgid "Hartford" -#~ msgstr "哈特福" +#~ msgid "Webster Plantation" +#~ msgstr "韋伯斯特森林" -#~ msgid "Hart's Location" -#~ msgstr "赫德之位" +#~ msgid "Weld" +#~ msgstr "韋爾德" -#~ msgid "Harrisville" -#~ msgstr "哈里斯維爾" +#~ msgid "Wellesley" +#~ msgstr "韋爾斯利" -#~ msgid "Harrison" -#~ msgstr "哈里森" +#~ msgid "Wellfleet" +#~ msgstr "韋爾弗利特" -#~ msgid "Harrington" -#~ msgstr "哈靈頓" +#~ msgid "Wellington" +#~ msgstr "惠靈頓" -#~ msgid "Harpswell" -#~ msgstr "哈普斯威爾" +#~ msgid "Wells" +#~ msgstr "韋爾斯" -#~ msgid "Harmony" -#~ msgstr "哈蒙尼" +#~ msgid "Wendell" +#~ msgstr "溫德爾" + +#~ msgid "Wenham" +#~ msgstr "韋納姆" + +#~ msgid "Wentworth" +#~ msgstr "溫特沃斯" -#~ msgid "Hardwick" -#~ msgstr "哈德威克" +#~ msgid "Wesley" +#~ msgstr "韋斯利" -#~ msgid "Hanson" -#~ msgstr "漢森" +#~ msgid "West Bath" +#~ msgstr "西巴斯" -#~ msgid "Hanover" -#~ msgstr "漢諾威" +#~ msgid "West Boylston" +#~ msgstr "西波以斯敦" -#~ msgid "Hancock" -#~ msgstr "漢考克" +#~ msgid "West Bridgewater" +#~ msgstr "西布里奇沃特" -#~ msgid "Hampton Falls" -#~ msgstr "漢普頓瀑布" +#~ msgid "West Brookfield" +#~ msgstr "西布魯克菲爾德" -#~ msgid "Hampton" -#~ msgstr "漢普頓" +#~ msgid "West Fairlee" +#~ msgstr "西費爾里" -#~ msgid "Hampstead" -#~ msgstr "漢普斯特德" +#~ msgid "West Forks" +#~ msgstr "西福克斯" -#~ msgid "Hampden" -#~ msgstr "漢普登" +#~ msgid "West Gardiner" +#~ msgstr "西加德納" -#~ msgid "Hammond" -#~ msgstr "哈蒙德" +#~ msgid "West Greenwich" +#~ msgstr "西格林威治" -#~ msgid "Hamlin" -#~ msgstr "哈姆林" +#~ msgid "West Hartford" +#~ msgstr "西哈特福德" -#~ msgid "Hamilton" -#~ msgstr "漢密爾頓" +#~ msgid "West Haven" +#~ msgstr "西黑文" -#~ msgid "Hamden" -#~ msgstr "哈姆登" +#~ msgid "West Newbury" +#~ msgstr "西紐伯里" -#~ msgid "Hallowell" -#~ msgstr "哈洛韋爾" +#~ msgid "West Paris" +#~ msgstr "巴黎西部" -#~ msgid "Halifax" -#~ msgstr "哈利法克斯" +#~ msgid "West Rutland" +#~ msgstr "西拉特蘭" -#~ msgid "Hadley" -#~ msgstr "哈德利" +#~ msgid "West Springfield" +#~ msgstr "西斯普林菲爾德" -#~ msgid "Haddam" -#~ msgstr "哈丹姆" +#~ msgid "West Stockbridge" +#~ msgstr "西斯托克布里奇" -#~ msgid "Guilford" -#~ msgstr "吉爾福特" +#~ msgid "West Tisbury" +#~ msgstr "西蒂斯伯里" -#~ msgid "Guildhall" -#~ msgstr "市政廳" +#~ msgid "West Warwick" +#~ msgstr "西沃里克" -#~ msgid "Groveland" -#~ msgstr "格羅夫蘭" +#~ msgid "West Windsor" +#~ msgstr "西溫莎" -#~ msgid "Groton" -#~ msgstr "格羅頓" +#~ msgid "Westborough" +#~ msgstr "韋斯特伯勒" -#~ msgid "Griswold" -#~ msgstr "格里斯沃爾德" +#~ msgid "Westbrook" +#~ msgstr "威斯布魯克" -#~ msgid "Greenwood" -#~ msgstr "格林伍德" +#~ msgid "Westerly" +#~ msgstr "威斯特里" -#~ msgid "Greenwich" -#~ msgstr "格林威治" +#~ msgid "Westfield" +#~ msgstr "韋斯特菲爾德" -#~ msgid "Greenville" -#~ msgstr "格林維爾" +#~ msgid "Westford" +#~ msgstr "威斯特福德" -#~ msgid "Greensboro" -#~ msgstr "格林斯伯勒" +#~ msgid "Westhampton" +#~ msgstr "維斯特漢普敦" -#~ msgid "Greenland" -#~ msgstr "格陵蘭" +#~ msgid "Westmanland" +#~ msgstr "維斯特曼蘭特" -#~ msgid "Greenfield" -#~ msgstr "格林菲爾德" +#~ msgid "Westminster" +#~ msgstr "威斯敏斯特" -#~ msgid "Greene" -#~ msgstr "格林" +#~ msgid "Westmore" +#~ msgstr "威斯特莫爾" -#~ msgid "Greenbush" -#~ msgstr "格林布許" +#~ msgid "Westmoreland" +#~ msgstr "威斯特摩蘭" -#~ msgid "Great Pond" -#~ msgstr "大塘" +#~ msgid "Weston" +#~ msgstr "韋斯頓" -#~ msgid "Great Barrington" -#~ msgstr "格利巴陵頓" +#~ msgid "Westport" +#~ msgstr "西港" -#~ msgid "Granville" -#~ msgstr "格蘭維爾" +#~ msgid "Westwood" +#~ msgstr "維斯特伍德" -#~ msgid "Grantham" -#~ msgstr "格蘭瑟姆" +#~ msgid "Wethersfield" +#~ msgstr "韋瑟斯" -#~ msgid "Grand Lake Stream" -#~ msgstr "格蘭德萊克" +#~ msgid "Weybridge" +#~ msgstr "韋布里奇" -#~ msgid "Grand Isle" -#~ msgstr "格蘭德艾爾" +#~ msgid "Weymouth" +#~ msgstr "韋茅斯" -#~ msgid "Granby" -#~ msgstr "格蘭比" +#~ msgid "Whately" +#~ msgstr "惠特利" -#~ msgid "Grafton" -#~ msgstr "格拉夫頓" +#~ msgid "Wheelock" +#~ msgstr "會德豐" -#~ msgid "Gouldsboro" -#~ msgstr "古爾茲伯勒" +#~ msgid "Whitefield" +#~ msgstr "懷特菲爾德" -#~ msgid "Gosnold" -#~ msgstr "戈斯諾爾德" +#~ msgid "Whiting" +#~ msgstr "惠廷" -#~ msgid "Goshen" -#~ msgstr "歌珊" +#~ msgid "Whitingham" +#~ msgstr "惠廷漢" -#~ msgid "Gorham" -#~ msgstr "哥爾罕" +#~ msgid "Whitman" +#~ msgstr "惠特曼" -#~ msgid "Goffstown" -#~ msgstr "高佛斯鎮" +#~ msgid "Whitneyville" +#~ msgstr "惠特尼維爾" -#~ msgid "Glover" -#~ msgstr "格洛弗" +#~ msgid "Wilbraham" +#~ msgstr "惠爾布拉漢" -#~ msgid "Gloucester" -#~ msgstr "格洛斯特" +#~ msgid "Williamsburg" +#~ msgstr "威廉斯堡" -#~ msgid "Glocester" -#~ msgstr "格羅切斯特" +#~ msgid "Williamstown" +#~ msgstr "威廉斯鎮" -#~ msgid "Glenwood Plantation" -#~ msgstr "格倫伍德森林" +#~ msgid "Willimantic" +#~ msgstr "威利曼蒂克" -#~ msgid "Glenburn" -#~ msgstr "格倫本" +#~ msgid "Willington" +#~ msgstr "威靈頓" -#~ msgid "Glastonbury" -#~ msgstr "格拉斯頓伯裡" +#~ msgid "Williston" +#~ msgstr "威利斯頓" -#~ msgid "Glastenbury" -#~ msgstr "格拉斯坦伯裡" +#~ msgid "Wilmington" +#~ msgstr "威爾明頓" -#~ msgid "Gilsum" -#~ msgstr "吉爾森" +#~ msgid "Wilmot" +#~ msgstr "威爾莫特" -#~ msgid "Gilmanton" -#~ msgstr "吉爾曼頓" +#~ msgid "Wilton" +#~ msgstr "威爾頓" -#~ msgid "Gill" -#~ msgstr "吉爾" +#~ msgid "Winchendon" +#~ msgstr "威其頓" -#~ msgid "Gilford" -#~ msgstr "吉爾福特" +#~ msgid "Winchester" +#~ msgstr "溫徹斯特" -#~ msgid "Gilead" -#~ msgstr "吉利德" +#~ msgid "Windham" +#~ msgstr "溫德姆" -#~ msgid "Georgia" -#~ msgstr "喬治亞" +#~ msgid "Windsor" +#~ msgstr "溫莎" -#~ msgid "Georgetown" -#~ msgstr "喬治城" +#~ msgid "Windsor Locks" +#~ msgstr "溫莎洛克斯" -#~ msgid "Garland" -#~ msgstr "加蘭" +#~ msgid "Winhall" +#~ msgstr "溫荷" -#~ msgid "Garfield Plantation" -#~ msgstr "加菲爾德森林" +#~ msgid "Winn" +#~ msgstr "威恩" -#~ msgid "Gardner" -#~ msgstr "加德納" +#~ msgid "Winooski" +#~ msgstr "威努斯基" -#~ msgid "Gardiner" -#~ msgstr "嘉丁納" +#~ msgid "Winslow" +#~ msgstr "溫斯洛" -#~ msgid "Fryeburg" -#~ msgstr "弗賴堡" +#~ msgid "Winter Harbor" +#~ msgstr "冬港" -#~ msgid "Frye Island" -#~ msgstr "弗萊島" +#~ msgid "Winterport" +#~ msgstr "溫特波特" -#~ msgid "Friendship" -#~ msgstr "友誼市" +#~ msgid "Winterville Plantation" +#~ msgstr "溫特維爾森林" -#~ msgid "Frenchville" -#~ msgstr "弗里曲維爾" +#~ msgid "Winthrop" +#~ msgstr "溫斯洛普" -#~ msgid "Frenchboro" -#~ msgstr "弗里曲波羅" +#~ msgid "Wiscasset" +#~ msgstr "威斯凱薩特" -#~ msgid "Fremont" -#~ msgstr "弗里蒙特" +#~ msgid "Woburn" +#~ msgstr "沃本" -#~ msgid "Freetown" -#~ msgstr "弗里敦" +#~ msgid "Wolcott" +#~ msgstr "沃爾科特" -#~ msgid "Freeport" -#~ msgstr "自由港" +#~ msgid "Wolfeboro" +#~ msgstr "沃夫波洛" -#~ msgid "Freeman" -#~ msgstr "費曼" +#~ msgid "Woodbridge" +#~ msgstr "伍德布里奇" -#~ msgid "Freedom" -#~ msgstr "費登" +#~ msgid "Woodbury" +#~ msgstr "伍德伯里" -#~ msgid "Franklin" -#~ msgstr "富蘭克林" +#~ msgid "Woodford" +#~ msgstr "伍德福德" -#~ msgid "Frankfort" -#~ msgstr "法蘭克福" +#~ msgid "Woodland" +#~ msgstr "伍德蘭" -#~ msgid "Franconia" -#~ msgstr "弗蘭肯" +#~ msgid "Woodstock" +#~ msgstr "伍德斯托克" -#~ msgid "Francestown" -#~ msgstr "弗蘭希斯鎮" +#~ msgid "Woodville" +#~ msgstr "伍德維爾" -#~ msgid "Framingham" -#~ msgstr "弗雷明漢" +#~ msgid "Woolwich" +#~ msgstr "伍爾維奇" -#~ msgid "Foxborough" -#~ msgstr "福克斯堡" +#~ msgid "Woonsocket" +#~ msgstr "文索基特" -#~ msgid "Fort Kent" -#~ msgstr "肯特堡" +#~ msgid "Worcester" +#~ msgstr "伍斯特" -#~ msgid "Fort Fairfield" -#~ msgstr "費爾菲爾德堡" +#~ msgid "Worthington" +#~ msgstr "沃辛頓" -#~ msgid "Forest City" -#~ msgstr "森林城市" +#~ msgid "Wrentham" +#~ msgstr "倫瑟姆" -#~ msgid "Fomer towns:" -#~ msgstr "舊市鎮:" +#~ msgid "Yarmouth" +#~ msgstr "雅默斯" -#~ msgid "Florida" -#~ msgstr "佛羅里達" +#~ msgid "York" +#~ msgstr "紐約" -#~ msgid "Fletcher" -#~ msgstr "弗萊徹" +#~ msgid "" +#~ "Although you never got your driver's license, you've always loved cars. " +#~ "You start with a wrench, a toolbelt, and some car-related reading " +#~ "material." +#~ msgstr "" +#~ "儘管你連駕照都沒考到,你還是很喜歡折騰車子。\r\n" +#~ "身為一個汽車維修員,隨身帶著扳手, 工具腰帶, 還有一些車輛知識相關的書籍都是" +#~ "很合邏輯的。" -#~ msgid "Fitzwilliam" -#~ msgstr "菲茨威廉" +#~ msgid "" +#~ "Your flexible outlook on law has ensured your survival, but now what? You " +#~ "start with cargo pants, a hoodie, \"sundries\", and one additional level " +#~ "of melee." +#~ msgstr "" +#~ "你'有彈性'的法律觀念讓你在末日生存到現在,現在該怎麼繼續呢?你一開始擁有工" +#~ "作褲, 連帽衫, 雜物, 以及近戰技能 +1 。" -#~ msgid "Fitchburg" -#~ msgstr "菲奇堡" +#~ msgid "" +#~ "You were on your way to collect your check, when your pimp tried to kill " +#~ "you. You wish that it wasn't a common occurence. You start with a skirt, " +#~ "tank top, a pair of high heels, your stash, and a strong crack addiction." +#~ msgstr "" +#~ "你正在前往收皮肉錢的路上,結果馬伕變成殭屍差點吃了你。你只希望這只是個" +#~ "案。\r\n" +#~ "你一開始穿著裙子,細肩帶上衣以及一對高跟鞋。" -#~ msgid "Ferrisburg" -#~ msgstr "費瑞斯堡" +#~ msgid "whunk!" +#~ msgstr "咻!" -#~ msgid "Fayston" -#~ msgstr "費耶斯頓" +#~ msgid "wham!" +#~ msgstr "嘩!" -#~ msgid "Fayette" -#~ msgstr "費耶特" +#~ msgid "whack!" +#~ msgstr "嘩!" -#~ msgid "Farmington" -#~ msgstr "法明頓" +#~ msgid "ker-rash!" +#~ msgstr "咔-啦!" -#~ msgid "Farmingdale" -#~ msgstr "法明戴爾" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Falmouth" -#~ msgstr "法爾茅斯" +#~ msgid "You" +#~ msgstr "你" -#~ msgid "Fall River" -#~ msgstr "福爾里弗" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Fairlee" -#~ msgstr "費爾里" +#~ msgid "Your" +#~ msgstr "你的" -#~ msgid "Fairhaven" -#~ msgstr "費爾海文" +#~ msgid "her" +#~ msgstr "她的" -#~ msgid "Fairfield" -#~ msgstr "費爾菲爾德" +#~ msgid "his" +#~ msgstr "他的" -#~ msgid "Fairfax" -#~ msgstr "費爾法克斯" +#~ msgid "your" +#~ msgstr "你的" -#~ msgid "Fair Haven" -#~ msgstr "費爾黑文" +#~ msgid "%1$s hit %4$s" +#~ msgstr "%1$s 擊中了 %4$s" -#~ msgid "Exeter" -#~ msgstr "埃克塞特" +#~ msgid "%1$s hits %4$s" +#~ msgstr "%1$s 擊中了 %4$s" -#~ msgid "Everett" -#~ msgstr "埃弗雷特" +#~ msgid "the %s" +#~ msgstr "%s" -#~ msgid "Eustis" -#~ msgstr "尤斯蒂斯" +#~ msgid "your %s" +#~ msgstr "你的 %s" -#~ msgid "Etna" -#~ msgstr "埃特納" +#~ msgid "%s break the grab!" +#~ msgstr "%s 掙脫了束縛!" -#~ msgid "Essex" -#~ msgstr "埃塞克斯" +#~ msgid "%s breaks the grab!" +#~ msgstr "%s 掙脫了束縛!" -#~ msgid "Erving" -#~ msgstr "歐文" +#~ msgid "Counter-attack!" +#~ msgstr "反擊!" -#~ msgid "Errol" -#~ msgstr "埃羅爾" +#~ msgid "%s" +#~ msgstr "%s" -#~ msgid "Epsom" -#~ msgstr "埃皮森" +#~ msgid "You throw %s." +#~ msgstr "你投擲 %s。" -#~ msgid "Epping" -#~ msgstr "埃平" +#~ msgid "You disarm %s." +#~ msgstr "你解除了 %s。" -#~ msgid "Enosburg" -#~ msgstr "愛諾斯堡" +#~ msgid "%s's" +#~ msgstr "%s 的" -#~ msgid "Enfield" -#~ msgstr "恩菲爾德" +#~ msgid "you" +#~ msgstr "你" -#~ msgid "Embden" -#~ msgstr "埃柏登" +#~ msgid "the %s's" +#~ msgstr "%s的" -#~ msgid "Elmore" -#~ msgstr "埃爾莫爾" +#~ msgid "%s's" +#~ msgstr "%s的" -#~ msgid "Ellsworth" -#~ msgstr "埃爾斯沃思" +#~ msgid "You drain %s body heat!" +#~ msgstr "你吸取 %s 體熱!" -#~ msgid "Ellington" -#~ msgstr "埃林頓" +#~ msgid "Tail whip! Viper Combo Intiated!" +#~ msgstr "啪啪!毒龍連技!" -#~ msgid "Eliot" -#~ msgstr "愛略特" +#~ msgid "%s peck %s!" +#~ msgstr "%s 啄中 %s!" -#~ msgid "Egremont" -#~ msgstr "埃格蒙特" +#~ msgid "%s kick %s with %s hooves!" +#~ msgstr "%s 踢中 %s 用 %s 蹄!" -#~ msgid "Effingham" -#~ msgstr "埃芬漢" +#~ msgid "%s kicks %s with %s hooves!" +#~ msgstr "%s 踢中 %s 利用 %s 蹄!" -#~ msgid "Edmunds" -#~ msgstr "埃德蒙茲" +#~ msgid "%s headbutt %s with %s horns!" +#~ msgstr "%s 頭錘 %s 利用 %s 角!" -#~ msgid "Edinburg" -#~ msgstr "愛丁堡" +#~ msgid "%s headbutts %s with %s horns!" +#~ msgstr "%s 頭錘 %s 利用 %s 角!" -#~ msgid "Edgecomb" -#~ msgstr "艾克莫" +#~ msgid "%s headbutt %s with %s curled horns!" +#~ msgstr "%s 頭錘 %s 利用 %s 彎角!" -#~ msgid "Edgartown" -#~ msgstr "埃德加敦" +#~ msgid "%s headbutts %s with %s curled horns!" +#~ msgstr "%s 頭錘 %s 利用 %s 彎角!" -#~ msgid "Eden" -#~ msgstr "伊甸" +#~ msgid "%s stab %s with %s pointed horns!" +#~ msgstr "%s 刺中 %s 利用 %s 尖角!" -#~ msgid "Eddington" -#~ msgstr "愛丁頓" +#~ msgid "%s stabs %s with %s pointed horns!" +#~ msgstr "%s 刺中 %s 利用 %s 尖角!" -#~ msgid "Eaton" -#~ msgstr "伊頓" +#~ msgid "%s stings %s with %s tail!" +#~ msgstr "%s 刺中 %s 利用 %s 尾!" -#~ msgid "Eastport" -#~ msgstr "東港" +#~ msgid "%s hit %s with %s tail!" +#~ msgstr "%s 擊中 %s 利用 %s 尾!" -#~ msgid "Easton" -#~ msgstr "伊斯頓" +#~ msgid "%s hits %s with %s tail!" +#~ msgstr "%s 擊中 %s 利用 %s 尾!" -#~ msgid "Easthampton" -#~ msgstr "伊斯特漢普頓" +#~ msgid "%s slap %s with %s tentacle!" +#~ msgstr "%s 鞭打 %s 利用 %s 觸手!" -#~ msgid "Eastham" -#~ msgstr "伊斯坦" +#~ msgid "%s slaps %s with %s tentacle!" +#~ msgstr "%s 鞭打 %s 利用 %s 觸手!" -#~ msgid "Eastford" -#~ msgstr "伊斯特福德" +#~ msgid "%1$s sweep %2$s %3$s at %4$s" +#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" -#~ msgid "Eastbrook" -#~ msgstr "伊斯特布魯克" +#~ msgid "%1$s sweeps %2$s %3$s at %4$s" +#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" -#~ msgid "East Windsor" -#~ msgstr "東溫莎" +#~ msgid "%1$s jab %2$s %3$s at %4$s" +#~ msgstr "%1$s 戳中 %2$s %3$s 的 %4$s" -#~ msgid "East Providence" -#~ msgstr "東普羅維登斯" +#~ msgid "%1$s jabs %2$s %3$s at %4$s" +#~ msgstr "%1$s 戳中 %2$s %3$s 的 %4$s" -#~ msgid "East Montpelier" -#~ msgstr "東蒙彼利埃" +#~ msgid "%1$s stabs %4$s" +#~ msgstr "%1$s 刺中了 %4$s" -#~ msgid "East Millinocket" -#~ msgstr "東米利諾基特" +#~ msgid "%1$s poke %4$s" +#~ msgstr "%1$s 戳中了 %4$s" -#~ msgid "East Machias" -#~ msgstr "東馬柴厄斯" +#~ msgid "%1$s pokes %4$s" +#~ msgstr "%1$s 戳中了 %4$s" -#~ msgid "East Lyme" -#~ msgstr "東萊姆" +#~ msgid "%1$s cuts %4$s" +#~ msgstr "%1$s 砍劈 %4$s" -#~ msgid "East Longmeadow" -#~ msgstr "東朗梅多" +#~ msgid "%1$s nick %4$s" +#~ msgstr "%1$s 劃中 %4$s" -#~ msgid "East Kingston" -#~ msgstr "東金士頓" +#~ msgid "%1$s nicks %4$s" +#~ msgstr "%1$s 劃中 %4$s" -#~ msgid "East Haven" -#~ msgstr "東港" +#~ msgid "%1$s whack %4$s" +#~ msgstr "%1$s 重擊 %4$s" -#~ msgid "East Hartford" -#~ msgstr "東哈特福" +#~ msgid " but do no damage." +#~ msgstr " 但沒有造成傷害。" -#~ msgid "East Hampton" -#~ msgstr "東漢普頓" +#~ msgid "" +#~ "A cute wiggling nose, cotton tail, and\n" +#~ "delicious flesh." +#~ msgstr "會擺動鼻子尾巴的可愛生物,也是美味的肉。" -#~ msgid "East Haddam" -#~ msgstr "東哈丹姆" +#~ msgid "A large snail, with an oddly human face." +#~ msgstr "一支大蝸牛,殼上有著詭異的人臉。(參見伊藤潤二-蛞蝓少女)" -#~ msgid "East Greenwich" -#~ msgstr "東格林尼治" +#~ msgid "" +#~ "A human body, but with its limbs, neck, and\n" +#~ "hair impossibly twisted." +#~ msgstr "" +#~ "有著人的身體,但是四肢,頸部,以及頭髮卻是不可思議的扭曲形狀。(參見伊藤潤" +#~ "二-阿彌殼斷層之怪)" -#~ msgid "East Granby" -#~ msgstr "東格蘭比" +#~ msgid "I am a wandering master of " +#~ msgstr "我是流浪中的大師, " -#~ msgid "East Brookfield" -#~ msgstr "東布魯克菲爾德" +#~ msgid "I am looking for a master to train my fighting techniques." +#~ msgstr "我正在尋找能夠訓練我戰鬥技巧的大師。" -#~ msgid "East Bridgewater" -#~ msgstr "東布里奇沃特" +#~ msgid "Default: %d - Min: %d, Max %d" +#~ msgstr "預設值: 否 %d - 最小: %d, 最大 %d" -#~ msgid "Eagle Lake" -#~ msgstr "鷹湖" +#~ msgid "Default: %f - Min: %f, Max %f" +#~ msgstr "預設值: %f - 最小: %f, 最大 %f" -#~ msgid "Dyer Brook" -#~ msgstr "代爾布魯克" +#~ msgid "" +#~ "If true, shift the view toward the selected item if it is outside of your " +#~ "current viewport." +#~ msgstr "設定為 是,若檢視的物品超出畫面範圍,將會移動畫面到該物品位置。" -#~ msgid "Duxbury" -#~ msgstr "達克斯伯里" +#~ msgid "boobytrap" +#~ msgstr "詭雷" -#~ msgid "Durham" -#~ msgstr "達勒姆" +#~ msgid "The %s steps on a landmine!" +#~ msgstr "%s 踩到了地雷!" -#~ msgid "Dunstable" -#~ msgstr "鄧斯特布爾" +#~ msgid "You trigger a boobytrap!" +#~ msgstr "你觸發了詭雷!" -#~ msgid "Dunbarton" -#~ msgstr "鄧巴頓" +#~ msgid "Triggered a boobytrap." +#~ msgstr "觸發了詭雷。" -#~ msgid "Dummerston" -#~ msgstr "達默斯頓" +#~ msgid "The %s triggers a boobytrap!" +#~ msgstr "%s 觸發了詭雷!" -#~ msgid "Dummer" -#~ msgstr "達默" +#~ msgid "You need a powered welder to repair." +#~ msgstr "你需要一把有電的電焊機才能維修。" -#~ msgid "Dudley" -#~ msgstr "達德利" +#~ msgid "You need level %d skill in mechanics." +#~ msgstr "你需要達到等級 %d 的機械技能。" -#~ msgid "Dublin" -#~ msgstr "都柏林" +#~ msgid "You need a hose to siphon fuel." +#~ msgstr "你需要一根管子來抽取汽油." -#~ msgid "Drew Plantation" -#~ msgstr "德魯森林" +#~ msgid "hose" +#~ msgstr "管子" -#~ msgid "Dresden" -#~ msgstr "德累斯頓" +#~ msgid "You need a hose to siphon water." +#~ msgstr "你需要一根管子來抽取水." -#~ msgid "Dracut" -#~ msgstr "德拉卡特" +#~ msgid "Accel.: Kmh/t" +#~ msgstr "加速: Kmh/t" -#~ msgid "Dover-Foxcroft" -#~ msgstr "多佛-福克斯克羅夫特" +#~ msgid "Accel.: mph/t" +#~ msgstr "加速: mph/t" -#~ msgid "Dover" -#~ msgstr "多佛爾" +#~ msgid "Mass: kg" +#~ msgstr "重量: kg" -#~ msgid "Douglas" -#~ msgstr "道格拉斯" +#~ msgid "Mass: lbs" +#~ msgstr "重量: lbs" -#~ msgid "Dorset" -#~ msgstr "多塞特" +#~ msgid "Wheels: " +#~ msgstr "輪胎: " -#~ msgid "Dorchester" -#~ msgstr "多切斯特" +#~ msgid "enough" +#~ msgstr "足夠" -#~ msgid "Dixmont" -#~ msgstr "迪克斯蒙" +#~ msgid " lack" +#~ msgstr "缺少" -#~ msgid "Dixfield" -#~ msgstr "迪克斯菲爾德" +#~ msgid "Fuel usage (safe): " +#~ msgstr "油耗 (安全): " -#~ msgid "Dighton" -#~ msgstr "戴頓" +#~ msgid "Your %s's %s rams into %s, inflicting %d damage%s!" +#~ msgstr "你 %s 的 %s 撞上了 %s,造成 %d 傷害 %s!" -#~ msgid "Dexter" -#~ msgstr "德克斯特" +#~ msgid " and stunning it" +#~ msgstr " 並震暈了" -#~ msgid "Detroit" -#~ msgstr "底特律" +#~ msgid "Pitch the tent" +#~ msgstr "搭帳篷" -#~ msgid "Derry" -#~ msgstr "德里" +#~ msgid "" +#~ "Your entire body may resonate at very high power, creating a short-range " +#~ "shockwave. While it will not too much damage to flexible creatures, " +#~ "stiff items such as walls, doors, and even robots will be severely " +#~ "damaged." +#~ msgstr "" +#~ "你的身體能產生高能共振,發出短距的衝擊波。衝擊波對生物影響不大,但對堅固的" +#~ "物體如牆壁、門,甚至機器人都將造成嚴重的損壞。" -#~ msgid "Derby" -#~ msgstr "德比" +#~ msgid "" +#~ "Designed during World War II by the Soviet Union, the popularity of the " +#~ "AK-47 and the SKS contributed to the widespread adaption of the 7.62x39mm " +#~ "rifle round. However, due to its lack of yaw, this round deals less " +#~ "damage than most." +#~ msgstr "" +#~ "7.62x39mm彈是由蘇聯於第二次世界大戰中所設計。由於使用這種彈藥的AK-47步槍與" +#~ "SKS步槍的風行,7.62x39mm步槍彈的人氣也隨之廣為流傳。但必須注意的是因為這種" +#~ "彈種缺乏滾轉的特性,使其的傷害會低於大部分其他彈種。" -#~ msgid "Dennysville" -#~ msgstr "丹尼斯維爾" +#~ msgid "A plastic mold which can be used to craft items made of plastic." +#~ msgstr "一個能用來製作許多塑膠製品的模具。" -#~ msgid "Dennistown" -#~ msgstr "丹尼斯鎮" +#~ msgid "" +#~ "This chemistry set stored in a bag contains some glass containers, some " +#~ "metal wire and safety glasses. It might be used to craft some chems if " +#~ "you're so inclined." +#~ msgstr "化學藥劑套組裝著許多玻璃罐裝的化學物質。能夠用來製作一些化學物品。" -#~ msgid "Dennis" -#~ msgstr "丹尼斯" +#~ msgid "" +#~ "A sharpened bolt carved from wood. It's lighter than a steel bolt, but " +#~ "does less damage and is less accurate. Stands a good chance of remaining " +#~ "intact once fired." +#~ msgstr "" +#~ "由木頭刻成並削尖的十字弓箭。它比鋼製十字弓箭要輕,但只能造成較輕微的傷害同" +#~ "時準確度也較差。發射後有有很好的機率能重新使用。" -#~ msgid "Denmark" -#~ msgstr "丹麥" +#~ msgid ".45 caliber retool" +#~ msgstr ".45口徑重製工具" -#~ msgid "Deering" -#~ msgstr "迪爾林" +#~ msgid "" +#~ "A small metalworking crucible. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "一個進行鑄鐵作業時的小坩鍋。能在鑄鐵時派上用場。" -#~ msgid "Deerfield" -#~ msgstr "迪爾菲爾德" +#~ msgid "" +#~ "Whoa. Whoa. Hey. This game requires a minimum terminal size of %dx%d. " +#~ "I'm\n" +#~ "sorry if your graphical terminal emulator went with the woefully-" +#~ "diminutive\n" +#~ "%dx%d as its default size, but that just won't work here. Now stretch " +#~ "the\n" +#~ "window until you've got it at the right size (or bigger).\n" +#~ msgstr "" +#~ "兄弟!!這個遊戲需要至少 %dx%d 的畫面大小才可以玩喔,\n" +#~ "如果你的顯示卡達不到%dx%d的需求,是不能遊玩的。\n" +#~ "你必須更新你的顯示卡到這個解析度或以上,這個遊戲才能\n" +#~ "順利執行。\n" -#~ msgid "Deer Isle" -#~ msgstr "鹿島" +#~ msgid "Choose wheel to use as replacement: " +#~ msgstr "選擇你想換上的輪子: " -#~ msgid "Deep River" -#~ msgstr "深河" +#~ msgid "You cannot remove mount point while something is attached to it." +#~ msgstr "你不能拆除這個零件,因為上面還有其他東西。" -#~ msgid "Dedham" -#~ msgstr "達德漢" +#~ msgid "9mm caliber retool" +#~ msgstr "9mm口徑重製工具" -#~ msgid "Deblois" -#~ msgstr "達比路斯" +#~ msgid ".22 caliber retool" +#~ msgstr ".22口徑重製工具" -#~ msgid "Dayton" -#~ msgstr "代頓" +#~ msgid "5.7mm caliber retool" +#~ msgstr "5.7mm口徑重製工具" -#~ msgid "Dartmouth" -#~ msgstr "達特茅斯" +#~ msgid "4.6mm caliber retool" +#~ msgstr "4.6mm口徑重製工具" -#~ msgid "Darien" -#~ msgstr "達里恩" +#~ msgid ".223 caliber retool" +#~ msgstr ".223口徑重製工具" -#~ msgid "Danville" -#~ msgstr "丹維爾" +#~ msgid ".308 caliber retool" +#~ msgstr ".308口徑重製工具" -#~ msgid "Danvers" -#~ msgstr "丹佛斯" +#~ msgid "Concentrated acid from an acid rainstorm. Don't drink it." +#~ msgstr "煮沸酸雨後得到的產品,千萬不能喝。" -#~ msgid "Danforth" -#~ msgstr "丹福思" +#~ msgid "" +#~ "Using this item will, if loaded with gas, cause it to turn on, making a " +#~ "very powerful, but slow, unwieldy, and noisy, melee weapon." +#~ msgstr "" +#~ "小心使用這個裝滿瓦斯的東西,因為啟動時會產生大量噪音,威力強大,無法握緊但" +#~ "動作緩慢的敲擊武器。" -#~ msgid "Danby" -#~ msgstr "丹比" +#~ msgid "" +#~ "If you can find a system to analyze this you may find something of " +#~ "interest." +#~ msgstr "如果你可以找到個系統解讀它,你會得到很多有趣的東西。" -#~ msgid "Danbury" -#~ msgstr "丹伯里" +#~ msgid "" +#~ "An antenna designed to pick up signals better when pointed at the source." +#~ msgstr "當天線對準訊號元的時候會有更好的收訊效果。" -#~ msgid "Damariscotta" -#~ msgstr "達馬瑞斯哥塔" +#~ msgid "" +#~ "A powdered antihemorrhagic compound which reacts with blood to " +#~ "immediately form a gel-like substance which stops bleeding." +#~ msgstr "當它與傷口的血液作用,會形成膠狀物阻止更多的出血。" -#~ msgid "Dalton" -#~ msgstr "道爾頓" +#~ msgid "" +#~ "A piece of metal that can get very hot. Necessary for electronics " +#~ "crafting. You could also use it to cauterize wounds, if you had to." +#~ msgstr "可以產生高溫的金屬裝置,用來焊接金屬,必要時也可以用於消毒傷口。" -#~ msgid "Dallas Plantation" -#~ msgstr "達拉斯森林" +#~ msgid "" +#~ "Using this item on a container full of water will purify the water. Water " +#~ "taken from uncertain sources like a river may be dirty." +#~ msgstr "" +#~ "在裝滿水的容器上使用這個物品能進行淨水。自不穩定地區(像是河流)所取來的水可" +#~ "能會不太乾淨。" -#~ msgid "Cyr Plantation" -#~ msgstr "希爾森林" +#~ msgid "" +#~ "Using this allows you to send out a signal; either a general SOS, or if " +#~ "you are in contact with a faction, to send a direct call to them." +#~ msgstr "使用該裝置可以讓你發送求救信號(SOS),或是讓你與某些派系聯繫。" -#~ msgid "Cutler" -#~ msgstr "卡特勒" +#~ msgid "" +#~ "A section of a pipe filled with explosive materials. Use this item to " +#~ "light the fuse, which gives you 3 turns before it detonates. You will " +#~ "need a lighter. It is somewhat unreliable, and may fail to detonate." +#~ msgstr "" +#~ "一段鐵管裡面塞滿高爆物質。使用這個物品會點燃它的引信,讓它在三回合後爆炸。" +#~ "要使用這物品你會需要一個打火機。要注意的是這炸彈並不可靠,偶而可能會引爆失" +#~ "敗。" -#~ msgid "Cushing" -#~ msgstr "庫欣" +#~ msgid "" +#~ "An arcane device, powered by plutonium fuel cells. Using it will cause " +#~ "you to teleport a short distance away." +#~ msgstr "一個神秘的裝置,由鈽電池供電。使用它會讓你進行短距離瞬間移動。" -#~ msgid "Cummington" -#~ msgstr "坎明尼頓" +#~ msgid "" +#~ "\"Warning: contains highly toxic and corrosive materials. Contents may be " +#~ "sentient. Open at your own risk.\"" +#~ msgstr "" +#~ "\"警告: 有毒且腐蝕性極強的材料。內容物可能是有感覺的生物。打開風險自負。\"" -#~ msgid "Cumberland" -#~ msgstr "坎伯蘭" +#~ msgid "" +#~ "This jackhammer runs on gasoline. Use it (if loaded) to blast a hole in " +#~ "adjacent solid terrain." +#~ msgstr "這個電鑽已經啟動了,而且不停地消耗汽油。你可以用它在地面上鑽個洞。" -#~ msgid "Crystal" -#~ msgstr "水晶" +#~ msgid "" +#~ "A kit for a simple trap consisting of a rope noose and a snare trigger. " +#~ "Requires a tree nearby. Effective at trapping monsters." +#~ msgstr "" +#~ "這個陷阱包含一個繩索套與聯接繩,同時需要一棵樹才可以設置。當生物通過時,啟" +#~ "動的陷阱會困住它們。" -#~ msgid "Croydon" -#~ msgstr "克羅伊登" +#~ msgid "A human skull with strange etchings covering it." +#~ msgstr "一個人類頭骨,其上有許多不明的蝕刻符號" -#~ msgid "Cromwell" -#~ msgstr "克倫威爾" +#~ msgid "" +#~ "A portable games console in working condition, with a backlit screen " +#~ "allowing you to play in the dark. You can use it to play it for a little " +#~ "while, but this requires batteries." +#~ msgstr "" +#~ "運作良好的掌上型遊樂器,有背光的螢幕讓你可以在黑暗中遊玩,但是需要電池。" -#~ msgid "Crawford" -#~ msgstr "克勞福德" +#~ msgid "" +#~ "A military style fold up cot, not quite as comfortable as a bed but much " +#~ "better than slumming it on the ground." +#~ msgstr "軍用行軍床,不比床舒服,但也比睡在地上好多了。" -#~ msgid "Cranston" -#~ msgstr "克蘭斯頓" +#~ msgid "A crude explosive device triggered by a piece of string." +#~ msgstr "由繩子啟動的土製爆炸裝置" -#~ msgid "Cranberry Isles" -#~ msgstr "蔓越莓群島" +#~ msgid "" +#~ "A tool for drawing blood, including a vacuum-sealed test tube for holding " +#~ "the sample. Use this tool to draw blood, either from yourself or from a " +#~ "corpse you are standing on." +#~ msgstr "一個真空的採血裝置,用它來採集你自己或是屍體的血液。" -#~ msgid "Craftsbury" -#~ msgstr "荂夫斯貝里" +#~ msgid "" +#~ "A small whistle. When used, it produces a high tone that causes nearby " +#~ "friendly dogs to either follow you closely and stop attacking, or start " +#~ "attacking enemies if they are currently docile." +#~ msgstr "利用吹響的高頻音效,對小狗下達命令。" -#~ msgid "Coventry" -#~ msgstr "科芬特里" +#~ msgid "A simple wood pole made deadlier by the blade tied to it." +#~ msgstr "一個木柄用布料連接了一把刀子。" -#~ msgid "Cornwall" -#~ msgstr "康沃爾" +#~ msgid "" +#~ "Preferred weapon of gentlemen and swashbucklers. Light and quick, it " +#~ "makes any battle a stylish battle." +#~ msgstr "適合紳士與劍客決鬥的武器。輕巧易使,讓任何戰鬥都變的十分高雅。" -#~ msgid "Cornville" -#~ msgstr "康維爾" +#~ msgid "" +#~ "A large stick, wrapped in gasoline soaked rags. When lit, produces a fair " +#~ "amount of light" +#~ msgstr "一大塊吸飽汽油的布料,點燃它可以產生不少光源。" -#~ msgid "Cornish" -#~ msgstr "科尼什" +#~ msgid "A small tent, just big enough to fit a person comfortably." +#~ msgstr "剛好容納一個人的小帳篷" -#~ msgid "Corinth" -#~ msgstr "科林斯" +#~ msgid "A sturdy saw, useful for cutting through metal objects." +#~ msgstr "一把堅固的鋸子,適合用來切割金屬物品。" -#~ msgid "Corinna" -#~ msgstr "科林那" +#~ msgid "" +#~ "A large two-handed axe. Makes a good melee weapon, but is a bit slow." +#~ msgstr "雙手巨斧,良好的揮擊武器,但是不太好使。" -#~ msgid "Coplin Plantation" -#~ msgstr "科普林森林" +#~ msgid "A flimsy saw, useful for cutting through wood objects." +#~ msgstr "一把脆弱的鋸子,適合切割木頭材質物品。" -#~ msgid "Conway" -#~ msgstr "康威" +#~ msgid "" +#~ "A large stick, wrapped in gasoline soaked rags. This is burning, " +#~ "producing plenty of light" +#~ msgstr "一個纏繞吸飽汽油布塊的木棍,正在燃燒而且產生大量光源。" -#~ msgid "Concord" -#~ msgstr "康科爾" +#~ msgid "" +#~ "Highly explosive, use with caution. Comes with a small timer. It's armed " +#~ "and ticking!" +#~ msgstr "" +#~ "流言終結者:只要出問題,C4都能搞定。小心使用,強效爆炸威力。倒數計時器已啟" +#~ "動。" -#~ msgid "Columbia Falls" -#~ msgstr "哥倫比亞瀑布" +#~ msgid "Highly explosive, use with caution! Armed with a small timer." +#~ msgstr "" +#~ "流言終結者:只要出問題,C4都能搞定。小心使用,強效爆炸威力。內建倒數計時" +#~ "器。" -#~ msgid "Columbia" -#~ msgstr "哥倫比亞" +#~ msgid "" +#~ "A machete is attached laterally to a motor, with a tripwire controlling " +#~ "its throttle. When the tripwire is pulled, the blade is swung around with " +#~ "great force. The trap forms a 3x3 area of effect." +#~ msgstr "" +#~ "開山刀連接在馬達上,而絆索控制著馬達油門,當絆索被觸發,強力的馬達會帶動開" +#~ "山刀旋轉撕砍,形成一格3乘3區域的殺傷範圍。" -#~ msgid "Colrain" -#~ msgstr "科爾瑞" +#~ msgid "" +#~ "A simple tripwire is attached to the trigger of a loaded sawn-off " +#~ "shotgun. When pulled, the shotgun fires. Two rounds are used; the first " +#~ "time the trigger is pulled, one or two may be used." +#~ msgstr "" +#~ "一個簡單的絆索連接到一個上膛削短型散彈槍 的扳機。當一被拉動,散彈槍就會發" +#~ "射。一次使用兩發子彈,一次觸發會使用一發或兩發子彈。" -#~ msgid "Colebrook" -#~ msgstr "科爾布魯克" +#~ msgid "" +#~ "A tripwire trap must be placed across a doorway or other thin passage. " +#~ "Its purpose is to trip up bypassers, causing them to stumble and possibly " +#~ "hurt themselves minorly." +#~ msgstr "" +#~ "絆索陷阱必須被布置在門口或其他狹小的通道。當目標經過時將被絆倒並可能造成些" +#~ "許傷害。" -#~ msgid "Colchester" -#~ msgstr "科爾切斯特" +#~ msgid "" +#~ "A simple tripwire is attached to the trigger of a loaded crossbow. When " +#~ "pulled, the crossbow fires. Only a single round can be used, after which " +#~ "the trap is disabled." +#~ msgstr "" +#~ "一個簡單的絆索連接到一個上膛十字弓的扳機。當一被拉動,十字弓就會發射。一次" +#~ "只能射出一發箭,之後這陷阱就失效了。" -#~ msgid "Cohasset" -#~ msgstr "科哈塞特" +#~ msgid "An anti-personnel mine that is triggered when stepped upon." +#~ msgstr "一個反人員地雷,當踩上就會爆炸。" -#~ msgid "Codyville Plantation" -#~ msgstr "寇地維爾森林" +#~ msgid "" +#~ "A large, brown spider, which moves quickly\n" +#~ "and aggresively." +#~ msgstr "" +#~ "一個大型的,快速移動的褐色蜘蛛\n" +#~ "侵略地。" -#~ msgid "Clinton" -#~ msgstr "克靈頓" +#~ msgid "An unwieldy mop. Good for cleaning up spills." +#~ msgstr "適合打掃家裡或是清除打翻的液體" -#~ msgid "Clifton" -#~ msgstr "克里夫頓" +#~ msgid "" +#~ "A huge curved two-handed sword from Japan. Surprisingly light for its " +#~ "size." +#~ msgstr "日本傳來的巨大雙手曲劍。相較其大小非常的輕。" -#~ msgid "Clarksville" -#~ msgstr "克拉克斯維爾" +#~ msgid "" +#~ "An amalgamation of putrid human and animal\n" +#~ "parts that have become fused in this golem\n" +#~ "of flesh. The eyes of all the heads dart\n" +#~ "rapidly and the mouths scream or groan." +#~ msgstr "" +#~ "許多腐爛的人類和動物融合成噁心的形體\n" +#~ "上面的所有頭顱會快速的眨眼而嘴巴會發\n" +#~ "出尖叫與呻吟。" -#~ msgid "Clarksburg" -#~ msgstr "克拉克斯堡" +#~ msgid "%1$s clobbers %4$s" +#~ msgstr "%1$s 痛打 %4$s" -#~ msgid "Clarendon" -#~ msgstr "克萊爾登" +#~ msgid "%1$s clobber %4$s" +#~ msgstr "%1$s 痛打 %4$s" -#~ msgid "Claremont" -#~ msgstr "克萊蒙特" +#~ msgid "%1$s hacks %4$s" +#~ msgstr "%1$s 劈中 %4$s" -#~ msgid "Chittenden" -#~ msgstr "齊坦丹縣" +#~ msgid "%1$s hack %4$s" +#~ msgstr "%1$s 劈中 %4$s" -#~ msgid "China" -#~ msgstr "中國" +#~ msgid "%1$s slice %4$s" +#~ msgstr "%1$s 砍中 %4$s" -#~ msgid "Chilmark" -#~ msgstr "奇瑪克" +#~ msgid "%1$s slices %4$s" +#~ msgstr "%1$s 砍中 %4$s" -#~ msgid "Chicopee" -#~ msgstr "奇科皮" +#~ msgid "" +#~ "A large pair of bolt cutters, you could use them to cut padlocks or heavy " +#~ "gauge wire." +#~ msgstr "一把大型的剪線鉗,可以用它來剪斷掛鎖或鐵絲網." -#~ msgid "Chichester" -#~ msgstr "奇切斯特" +#~ msgid "" +#~ "A Philips-head screwdriver, important for almost all electronics crafting " +#~ "and most mechanics crafting." +#~ msgstr "十字螺絲起子,重要的是它可以應付大部分的電子及機械類物品的製造." -#~ msgid "Chesterville" -#~ msgstr "切斯特維爾" +#~ msgid "" +#~ "A still, useful for the distillation of alcohol and other, more curious " +#~ "substances." +#~ msgstr "一個蒸餾器,可以用來釀酒." -#~ msgid "Chesterfield" -#~ msgstr "切斯特菲爾德" +#~ msgid "" +#~ "A small hand press for hand loading firearm ammunition. Comes with " +#~ "everything you need to start hand loading." +#~ msgstr "一個小型的手壓模具,讓你可以手工組裝槍枝的子彈。" -#~ msgid "Chester" -#~ msgstr "切斯特" +#~ msgid "You are already wielding nothing." +#~ msgstr "你手上已經沒有拿東西了。" -#~ msgid "Cheshire" -#~ msgstr "柴郡" +#~ msgid "" +#~ "A portable heat sealer unit with an air pump, for vacuum packing of food." +#~ msgstr "攜帶型熱塑封口機,配有空氣幫浦,可將食物真空密封保存。" -#~ msgid "Cherryfield" -#~ msgstr "切里菲爾德" +#~ msgid "" +#~ "Vacuum packed meat slices in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "真空封存於袋內的肉片,可以打開它並且食用。" -#~ msgid "Chelsea" -#~ msgstr "切爾西" +#~ msgid "%1$s slams %2$s %3$s against %4$s" +#~ msgstr "%1$s 揮舞 %2$s %3$s 擊飛了 %4$s" -#~ msgid "Chelmsford" -#~ msgstr "切姆斯福德" +#~ msgid "%1$s slam %2$s %3$s against %4$s" +#~ msgstr "%1$s 揮舞 %2$s %3$s 擊飛了 %4$s" -#~ msgid "Chebeague Island" -#~ msgstr "楚別克島" +#~ msgid "Critical! " +#~ msgstr "爆擊! " -#~ msgid "Chatham" -#~ msgstr "查塔姆" +#~ msgid "%1$s batter %4$s" +#~ msgstr "%1$s 敲中 %4$s" -#~ msgid "Charlton" -#~ msgstr "查爾頓" +#~ msgid "%1$s batters %4$s" +#~ msgstr "%1$s 敲中 %4$s" -#~ msgid "Charlestown" -#~ msgstr "查爾斯鎮" +#~ msgid "" +#~ "A 8-foot-tall robot that walks on three long\n" +#~ "legs. It has a pair of spiked tentacles, as\n" +#~ "well as a flamethrower mounted on its head." +#~ msgstr "" +#~ "一個有著三隻長腳的8英尺高機器人。\n" +#~ "它有一對尖刺手臂,\n" +#~ "在其頭部還有一個火焰噴射器。" -#~ msgid "Charleston" -#~ msgstr "查爾斯頓" +#~ msgid "tripod robot" +#~ msgstr "三腳機器人" -#~ msgid "Charlemont" -#~ msgstr "查理蒙特" +#~ msgid "The %s disappears! Was it in your head?" +#~ msgstr "%s 不見了!是幻覺嗎?" -#~ msgid "Chapman" -#~ msgstr "查普曼" +#~ msgid "Rats swarm from nowhere to avenge the %s." +#~ msgstr "鼠群從四周竄出對 %s 復仇。" -#~ msgid "Chaplin" -#~ msgstr "卓別林" +#~ msgid "A talking doll for children, luckily it still works." +#~ msgstr "一個小孩玩的會說話玩偶,還好還沒壞。" -#~ msgid "Central Falls" -#~ msgstr "森特瀑" +#~ msgid "" +#~ "There is only the space where an object should be, but isn't. No item " +#~ "template of this type exists." +#~ msgstr "" +#~ "那裡是唯一一個物件應出現的地方,但並沒有。沒有該類型的物品模板存在。" -#~ msgid "Centerville" -#~ msgstr "森特維爾" +#~ msgid "" +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time. This candle is lit." +#~ msgstr "" +#~ "一根粗蠟燭,雖然提供不了多少光亮,但可以持續燃燒很長一段時間。(燃燒中)" -#~ msgid "Center Harbor" -#~ msgstr "森特港" +#~ msgid "" +#~ "A thick candle, doesn't provide very much light, but it can burn for " +#~ "quite a long time." +#~ msgstr "一根粗蠟燭,雖然提供不了多少光亮,但可以持續燃燒很長一段時間。" -#~ msgid "Cavendish" -#~ msgstr "卡文迪許" +#~ msgid "A rare and arcane device, covered in alien markings." +#~ msgstr "一個罕見且神秘的設備,表面滿是外星符號。" -#~ msgid "Caswell" -#~ msgstr "卡斯威爾" +#~ msgid "" +#~ "A combination lock box, breaking inside would destroy anything of value." +#~ msgstr "一個有著密碼鎖的箱子,強行打開會毀掉裡面有價值的東西。" -#~ msgid "Castleton" -#~ msgstr "卡斯爾頓" +#~ msgid "" +#~ "A small multipurpose electronic device. Can be loaded with a variety of " +#~ "apps, providing all kinds of functionality." +#~ msgstr "一個多功能電子裝置,可以安裝各種不同功能的應用程式。" -#~ msgid "Castle Hill" -#~ msgstr "城堡山" +#~ msgid "" +#~ "A small multipurpose electronic device. This PDA has its flashlight app " +#~ "on, and is providing light." +#~ msgstr "一個多功能電子裝置,它裝有手電筒應用程式,可以發出光源。" -#~ msgid "Castine" -#~ msgstr "卡斯廷" +#~ msgid "" +#~ "A spray can, filled with paint. Use this tool to make graffiti on the " +#~ "floor." +#~ msgstr "一個裝著顏料的噴漆罐,用它在地面隨便塗鴉。" -#~ msgid "Casco" -#~ msgstr "卡斯科" +#~ msgid "A piece of plastic. Not much use except to repair plastic items" +#~ msgstr "一小片塑膠,除了拿來修理塑膠物品外沒什麼用途。" -#~ msgid "Cary Plantation" -#~ msgstr "卡里森林" +#~ msgid "" +#~ "A small shelter, made of sticks and skins. (a)ctivate it to place. This " +#~ "shelter has been damaged, and needs repairs." +#~ msgstr "小型避難所,用木棍跟毛皮搭設,按(a)設置。該裝置受損,需要修復。" -#~ msgid "Carver" -#~ msgstr "卡弗" +#~ msgid "A small shelter, made of sticks and skins. (a)ctivate it to place." +#~ msgstr "小型避難所,用木棍跟毛皮搭設,按(a)設置。" -#~ msgid "Carthage" -#~ msgstr "迦太基" +#~ msgid "" +#~ "A large stick, with the end carved into a blade for digging. Can be used " +#~ "to dig shallow pits, but not deep ones." +#~ msgstr "一根尾端為了挖掘而削成刀片狀的大棒,可以用來挖淺坑。" -#~ msgid "Carroll Plantation" -#~ msgstr "卡洛爾森林" +#~ msgid ", and level " +#~ msgstr ", 以及等級 " -#~ msgid "Carroll" -#~ msgstr "卡洛爾" +#~ msgid "Needs " +#~ msgstr "需要 " -#~ msgid "Carrabassett Valley" -#~ msgstr "卡勒巴西特谷" +#~ msgid " to install parts." +#~ msgstr " 來裝上零件" -#~ msgid "Carmel" -#~ msgstr "卡梅爾" +#~ msgid "" +#~ "After firing your gun, you will probably notice a Recoil alert in the " +#~ "lower\n" +#~ "right. Generally speaking, the more damaging the ammo, the worse the " +#~ "recoil.\n" +#~ "Recoil severely reduces your chance to hit, but you can eliminate recoil " +#~ "by\n" +#~ "pausing ('.') for a turn or moving normally. High strength reduces " +#~ "recoil,\n" +#~ "so weak characters might want to stick to .22 or 9mm guns." +#~ msgstr "" +#~ "開了槍以後,你可能有注意到右下方的後座力警示\n" +#~ "一般來說,威力越大的子彈,後座力越強\n" +#~ "這會嚴重的影響你的命中率,你可以按下 ('.')\n" +#~ "結束一回合或是往旁邊移動來回復正常\n" +#~ "力量值夠高的話可以減少後座力,\n" +#~ "如果你不夠壯的話還是回去用.22 或 9釐米的槍吧" -#~ msgid "Carlisle" -#~ msgstr "卡萊爾" +#~ msgid "Choose new part to install here: " +#~ msgstr "選擇要新換上的零件: " -#~ msgid "Caribou" -#~ msgstr "卡里布" +#~ msgid "" +#~ "It's dark down here! Without a source of light, you'll be limited to " +#~ "seeing\n" +#~ "only one space in any direction. You'll encounter darkness while " +#~ "underground\n" +#~ "or at night. Press '<' to go back upstairs, and look around for a " +#~ "flashlight." +#~ msgstr "" +#~ "這裡一片漆黑!少了光源你只能看到\n" +#~ "周圍一格的範圍,只要是在地鐵或是晚上都是這樣\n" +#~ "按下 '<' 鍵回到樓上,去找把手電筒吧" -#~ msgid "Caratunk" -#~ msgstr "卡拉籐克" +#~ msgid "" +#~ "It's dark down here! Fortunately, you have a flashlight. Press 'a' and " +#~ "then\n" +#~ "select your flashlight to turn it on." +#~ msgstr "" +#~ "這裡一片漆黑!不過幸好你有帶著手電筒 ,按下'a' 鍵 然後選擇你的手電筒來開啟" +#~ "他" -#~ msgid "Cape Elizabeth" -#~ msgstr "開普敦伊麗莎白" +#~ msgid "" +#~ "That yellow > next to you is a staircase leading down. To go downtairs, " +#~ "step\n" +#~ "onto the staircase and press the '>' key. Similarly, a yellow < is " +#~ "stairs\n" +#~ "leading up, and can be followed with the '<' key." +#~ msgstr "" +#~ "在你身旁的黃色>符號代表向下的樓梯,站在符號上 \n" +#~ "按下 '>'即可下樓,同理<符號代表往高一層的樓梯\n" +#~ "按下 '<'即可上樓" -#~ msgid "Canton" -#~ msgstr "坎頓" +#~ msgid " You also need level " +#~ msgstr " 你還需要等級 " -#~ msgid "Canterbury" -#~ msgstr "坎特伯里" +#~ msgid "" +#~ "Once you have a loaded gun wielded, you can fire it. Press the 'f' key " +#~ "to\n" +#~ "fire a single shot. With many guns, you can fire a burst by pressing " +#~ "'F'.\n" +#~ "You'll automatically target the last monster you shot at, or the closest\n" +#~ "monster to you. You can change your target with the movement keys, or " +#~ "cycle\n" +#~ "through monsters with '<' and '>'. To fire, press 'f' or '.'; to cancel, " +#~ "hit\n" +#~ "the escape key." +#~ msgstr "" +#~ "槍上好子彈以後就可以發射了,按下 'f' 鍵來單發射擊\n" +#~ "有許多種槍能夠按下 'F' 鍵來進行連發射擊。\n" +#~ "你會自動瞄準上一次射擊的目標或是離你最近的敵人。\n" +#~ "你可以按下移動鍵來切換目標或是 '<' 跟 '>' 切換不同敵人,\n" +#~ "按下 'f' 或是 '.' 來射擊;按下 esc 鍵可取消射擊。" -#~ msgid "Candia" -#~ msgstr "坎地亞" +#~ msgid "" +#~ "To use a gun, first wield it with the 'w' key. Next you need to reload " +#~ "using\n" +#~ "the 'r' key, assuming you have the proper ammo. If you wish to unload " +#~ "your\n" +#~ "gun, possibly to change ammunition types, press 'U'." +#~ msgstr "" +#~ "在使用槍之前,你需要先按下 'w' 鍵來進行手持動作,\n" +#~ "假設你有帶相對應的子彈的話使用 'r' 鍵來進行裝填子彈。\n" +#~ "你可以按下 'U' 鍵來卸下彈夾以換上不同的類型的子彈。" -#~ msgid "Canaan" -#~ msgstr "迦南" +#~ msgid "" +#~ "You just activated a grenade! You probably want to throw it. To throw " +#~ "an\n" +#~ "item, press 't' and then select the item to throw. The maximum range " +#~ "depends\n" +#~ "on your strength and the object's weight and size. Throwing isn't very " +#~ "good\n" +#~ "in most combat situations, but if you've got some fire power..." +#~ msgstr "" +#~ "你剛拉下了手榴彈的插梢!你最好趕快投擲出去。\n" +#~ "按下 't' 來選取物品進行投擲。\n" +#~ "投擲的最遠距離取決於你的力量和物品的重量及大小。\n" +#~ "投擲物品的動作在大部分的戰鬥中起不了什麼太大的作用,\n" +#~ "除非你帶的是燃燒武器..." -#~ msgid "Campton" -#~ msgstr "坎普頓" +#~ msgid "" +#~ "You just drank a bottle of water, reducing your thirst level and reducing " +#~ "the\n" +#~ "water level in the bottle. You'll probably want to drop empty bottles,\n" +#~ "or you might want to save them to refill from a water source later." +#~ msgstr "" +#~ "你剛喝了一瓶水,止了些渴也讓瓶中的水減少了。\n" +#~ "你可以選擇丟掉空瓶,或是留著拿來裝水。" -#~ msgid "Camden" -#~ msgstr "坎登" +#~ msgid "" +#~ "That drug you just took is a painkiller. Painkillers are very important " +#~ "to\n" +#~ "keep on hand, as pain both penalizes your stats and makes you slower. " +#~ "Be\n" +#~ "careful, as the stronger painkillers can make you woozy, and some are " +#~ "even\n" +#~ "addictive." +#~ msgstr "" +#~ "你剛剛吞下去的是止痛藥,身上隨時帶著止痛藥是重要的,\n" +#~ "因為受傷不但會降低能力值還會減緩你的移動速度。\n" +#~ "不過要注意,藥效太強的止痛藥會讓你頭暈目眩,\n" +#~ "還有可能會上癮。" -#~ msgid "Cambridge" -#~ msgstr "劍橋" +#~ msgid "" +#~ "Hitting a monster will stun it briefly, allowing you to escape or get in\n" +#~ "another attack. Your dexterity and melee skills are used to determine\n" +#~ "whether an attack hits, while strength affects damage." +#~ msgstr "" +#~ "擊中敵人時會短暫的震暈它,讓你有空檔可以逃離或是繼續追擊。\n" +#~ "你的敏捷和近戰能力決定攻擊的命中率,\n" +#~ "而力量則會影響傷害大小。" -#~ msgid "Calais" -#~ msgstr "加萊" +#~ msgid "powered welder" +#~ msgstr "有電的電焊機" -#~ msgid "Cabot" -#~ msgstr "卡博特" +#~ msgid " and a " +#~ msgstr " 與 " -#~ msgid "Byron" -#~ msgstr "拜倫" +#~ msgid "You need a " +#~ msgstr "你需要 " -#~ msgid "Buxton" -#~ msgstr "巴克斯頓" +#~ msgid "" +#~ "~ is a terrain symbol that indicates water. From a water source like " +#~ "this,\n" +#~ "you can fill any containers you might have. Step onto the water, then " +#~ "press\n" +#~ "the pickup key (',' or 'g'), then select a watertight container to put " +#~ "the\n" +#~ "water into." +#~ msgstr "" +#~ "~ 是一個代表含水的地形符號,\n" +#~ "類似這樣的水源你可以拿容器裝水,站在水上面\n" +#~ "按下 (',' 或是 'g') 鍵來選擇一個水密容器裝水" -#~ msgid "Burrillville" -#~ msgstr "伯瑞維爾" +#~ msgid ", a " +#~ msgstr ", " -#~ msgid "Burnham" -#~ msgstr "伯納姆" +#~ msgid "You also need a wrench and %s to replace broken one." +#~ msgstr "你還需要一把扳手和 %s 才能把壞掉的換掉" -#~ msgid "Burlington" -#~ msgstr "伯靈頓" +#~ msgid "" +#~ "An extremely powerful weapon--essentially a hand-held nuclear bomb. Use " +#~ "it to activate the timer. Ten turns later it will explode, leaving behind " +#~ "a radioactive crater. The explosion is large enough to take out a house." +#~ msgstr "" +#~ "一個威力極強的炸彈--算是一種手持核武。使用計時器來啟動,將在第十回合後引" +#~ "爆,炸出一個放射性彈坑。爆炸範圍足以夷平一棟房子。" -#~ msgid "Burke" -#~ msgstr "伯克" +#~ msgid "A sealed glass jar containing kompot. Activate to open and enjoy." +#~ msgstr "一瓶未開封的水果蜜餞,使用它來打開並享用吧。" -#~ msgid "Bucksport" -#~ msgstr "巴克斯波特" +#~ msgid "" +#~ "This miniature nuclear bomb has a light blinking on the side, showing " +#~ "that it will soon explode. You should probably get far away from it." +#~ msgstr "這個迷你核彈的指示燈不停地在閃爍,看起來就快爆炸了,趕快跑吧。" -#~ msgid "Buckland" -#~ msgstr "巴克蘭" +#~ msgid "" +#~ "A stone with spirals all over it, and holes around its perimeter. Though " +#~ "it is fairly large, it weighs next to nothing. Air seems to gather around " +#~ "it." +#~ msgstr "" +#~ "一顆佈滿螺旋紋路與孔洞的石頭。雖然體積很大,但是重量卻很輕。空氣似乎圍著" +#~ "它。" -#~ msgid "Buckfield" -#~ msgstr "巴克菲爾德" +#~ msgid "" +#~ "An advanced version of the unified power supply, or UPS. This device has " +#~ "been significantly redesigned to provide better efficiency as well as to " +#~ "consume plutonium fuel cells rather than batteries." +#~ msgstr "" +#~ "一個高階版的統一規格不斷電系統。重新設計的規格讓它可以更有效率的使用鈽元" +#~ "素,而不是傳統電池。" -#~ msgid "Brunswick" -#~ msgstr "布朗斯維克" +#~ msgid "" +#~ "A sharpened stone affixed to a stick, works passably well as an axe but " +#~ "really can't compare to a proper axe." +#~ msgstr "" +#~ "一把綁著鋒利石刀的木棍,讓它有類似斧頭的功能,但與真正的斧頭還差的遠。" -#~ msgid "Brownville" -#~ msgstr "布朗寧菲爾" +#~ msgid "" +#~ "A unified power supply, or UPS, is a device developed jointly by military " +#~ "and scientific interests for use in combat and the field. The UPS is " +#~ "designed to power armor and some guns, but drains batteries quickly." +#~ msgstr "" +#~ "一個統一規格的不斷電系統,由軍方與科學家共同開發適用於戰場的設備,設計用來" +#~ "提供電能給動力裝甲與某些槍械,但缺點是耗電迅速。" -#~ msgid "Brownington" -#~ msgstr "布朗寧頓" +#~ msgid "" +#~ "A flattened stone affixed to a stick, works passably well as a shovel but " +#~ "really can't compare to a real shovel." +#~ msgstr "一根木棍連結一石片,功能類似鏟子,但與真正的鏟子差太多。" -#~ msgid "Brownfield" -#~ msgstr "布朗菲爾德" +#~ msgid "" +#~ "A rock affixed to a stick, functions adequately as a hammer, but really " +#~ "can't compare to a proper hammer." +#~ msgstr "一把綁著石頭的木棍,讓它有類似鐵鎚的功能,但與真正的鐵鎚還差的遠。" -#~ msgid "Brookton" -#~ msgstr "布羅克頓" +#~ msgid "" +#~ "A large stand with slots in the side. (a)ctivate it and place it " +#~ "somewhere then set fires in it with no risk of spreading." +#~ msgstr "" +#~ "一個周邊有通風口的架子。(a)使用它來放置到地上,能夠在上面安全的生火。" -#~ msgid "Brooksville" -#~ msgstr "布魯克斯維爾" +#~ msgid "" +#~ "A King Size(tm) industrial strength permanent marker, about halfway " +#~ "between a typical marker and a can of spray paint in size." +#~ msgstr "King Size工業製造的奇異筆,大小介於傳統奇異筆與噴機罐之間。" -#~ msgid "Brookline" -#~ msgstr "布魯克賴" +#~ msgid "" +#~ "A short, stout metalworking chisel. Used in some metalworking fabrication " +#~ "recipes." +#~ msgstr "一根短而粗的鐵工鑿子。可用在鑄造物品時的工具。" -#~ msgid "Brooklin" -#~ msgstr "布魯克林" +#~ msgid "" +#~ "A bottle filled with match heads and equipped with a fuse. Use this item " +#~ "to light the fuse; you will, of course, need a lighter in your inventory " +#~ "to do this. After lighting it, throw it to cause fires." +#~ msgstr "" +#~ "一個裝滿了火柴頭的瓶子,並且在瓶口加了引線。使用這個物品以點燃它;當然你需" +#~ "要有個打火機在物品欄。點燃之後,可投擲出去造成火災。" -#~ msgid "Brookfield" -#~ msgstr "布魯克菲爾德" +#~ msgid "" +#~ "A bottle filled with match heads and equipped with a fuse. This one has " +#~ "been lit, and its fuse is rapidly burning down." +#~ msgstr "" +#~ "一個裝滿了火柴頭的瓶子,並且在瓶口加了引線。已經被點燃,且引線很快地燃燒。" -#~ msgid "Brockton" -#~ msgstr "布魯克頓" +#~ msgid "Bread and turkey, that's it." +#~ msgstr "麵包加上肉,就是這樣。" -#~ msgid "Bristol" -#~ msgstr "布里斯托爾" +#~ msgid "To change a wheel you need a " +#~ msgstr "要更換輪胎你需要 " -#~ msgid "Brimfield" -#~ msgstr "布林菲爾德" +#~ msgid " to remove parts." +#~ msgstr "可移除零件。" -#~ msgid "Brighton Plantation" -#~ msgstr "布萊頓森林" +#~ msgid "K mass: " +#~ msgstr "K 質量: " -#~ msgid "Brighton" -#~ msgstr "布萊頓" +#~ msgid "K dynamics: " +#~ msgstr "K 動力: " -#~ msgid "Bridport" -#~ msgstr "布里德波特" +#~ msgid " skill in mechanics to install additional engine." +#~ msgstr "機械技能能夠安裝額外的引擎。" -#~ msgid "Bridgton" -#~ msgstr "布里奇頓" +#~ msgid " skill in mechanics." +#~ msgstr " 機械技能。" -#~ msgid "Bridgewater" -#~ msgstr "布里奇沃特" +#~ msgid "" +#~ "The bottoms of your feet are strongly padded. You receive no movement " +#~ "penalty for not wearing shoes, and even receive a 10%% bonus when running " +#~ "barefoot. Slightly decreases wet penalties." +#~ msgstr "" +#~ "你的腳掌增生成厚厚的角質墊。你不穿鞋也不會有任何移動懲罰,赤腳甚至還能得" +#~ "到 10%% 的移動加成。稍微提昇防水能力。" -#~ msgid "Bridgeport" -#~ msgstr "布里奇波特" +#~ msgid "" +#~ "Your legs have transformed into six tentacles. This decreases your speed " +#~ "on land by 20%%, but makes your movement silent. However, they also " +#~ "increase your swimming speed. Somewhat decreases wet penalties." +#~ msgstr "" +#~ "你的腿變形成了 6 根觸手。減少了你在陸地的移動速度 20%%,但是卻是無聲移動。" +#~ "還能增加你的游泳速度,也稍微增加防水能力。" -#~ msgid "Brewster" -#~ msgstr "布魯斯特" +#~ msgid "" +#~ "The item you just picked up is a tool! To activate a tool, press 'a'. " +#~ "Some\n" +#~ "tools have a set charge, which can be reloaded once depleted. Other are\n" +#~ "single-use items, and still others are reusable." +#~ msgstr "" +#~ "你剛撿起來的是一個工具!按下 'a' 鍵來使用它。\n" +#~ "有些工具有使用次數,重新裝載後可以再次使用。\n" +#~ "而其他工具不是一次性就是無限次數的。" -#~ msgid "Brewer" -#~ msgstr "布魯爾" +#~ msgid "" +#~ "A set of swages and dies for metalsmithing. Used in some metalworking " +#~ "fabrication recipes." +#~ msgstr "一組鍛造時使用的型鐵與模具。常使用於一些冶煉製造的配方上。" -#~ msgid "Brentwood" -#~ msgstr "布倫特伍德" +#~ msgid "" +#~ "You just stepped on a space with one or more items. If you wish to pick " +#~ "it\n" +#~ "up, press ',' or 'g'." +#~ msgstr "你現在腳下有個道具,按下 ',' 或是 'g' 來撿起它。" -#~ msgid "Bremen" -#~ msgstr "不來梅" +#~ msgid "" +#~ "That drug you just took placed an effect on you. To check your effects,\n" +#~ "press '@'. Most only last a short while, while others, like chronic " +#~ "disease,\n" +#~ "last until cured by some other means." +#~ msgstr "" +#~ "你剛吃下去的藥起了作用。按下 '@' 來檢視。\n" +#~ "大部分症狀都會在短時間內治癒,不過有少數慢性疾病\n" +#~ "會一直維持到你用其他方法治療為止。" -#~ msgid "Brattleboro" -#~ msgstr "伯瑞特波羅" +#~ msgid "A decent sized piece of cotton designed for medical purposes." +#~ msgstr "一片尺寸適中的醫療用棉布。" -#~ msgid "Branford" -#~ msgstr "布蘭福德" +#~ msgid "Wagon" +#~ msgstr "拖車" -#~ msgid "Braintree" -#~ msgstr "布倫特里" +#~ msgid "%s sinks %s fangs into %s!" +#~ msgstr "%s 的 %s 撩牙刺入 %s!" -#~ msgid "Bradley" -#~ msgstr "布拉德利" +#~ msgid "%s slice %s with %s mandibles!" +#~ msgstr "%s 嘶咬 %s 利用 %s 下顎!" -#~ msgid "Bradford" -#~ msgstr "布拉德福德" +#~ msgid "%s sink %s fangs into %s!" +#~ msgstr "%s 的 %s 撩牙刺入 %s!" -#~ msgid "Bozrah" -#~ msgstr "波斯拉" +#~ msgid "%s sting %s with %s tail!" +#~ msgstr "%s 刺 %s 利用 %s 尾巴!" -#~ msgid "Boylston" -#~ msgstr "斯頓" +#~ msgid "%s butts %s with %s antlers!" +#~ msgstr "%s 撞擊 %s 利用 %s 角!" -#~ msgid "Boxford" -#~ msgstr "博克斯福德" +#~ msgid "%s slices %s with %s mandibles!" +#~ msgstr "%s 嘶咬 %s 利用 %s 下顎!" -#~ msgid "Boxborough" -#~ msgstr "博克斯伯勒" +#~ msgid "%s butt %s with %s antlers!" +#~ msgstr "%s 撞擊 %s 利用 %s 角!" -#~ msgid "Bowerbank" -#~ msgstr "鮑爾班克" +#~ msgid "%1$s impale %4$s" +#~ msgstr "%1$s 刺擊 %4$s" -#~ msgid "Bowdoinham" -#~ msgstr "鮑登漢" +#~ msgid "%1$s pierce %4$s" +#~ msgstr "%1$s 刺中 %4$s" -#~ msgid "Bowdoin" -#~ msgstr "鮑登" +#~ msgid "%1$s impales %4$s" +#~ msgstr "%1$s 刺擊 %4$s" -#~ msgid "Bow" -#~ msgstr "布羅" +#~ msgid "%1$s stab %4$s" +#~ msgstr "%1$s 戳中 %4$s" -#~ msgid "Bourne" -#~ msgstr "波恩" +#~ msgid "%1$s pierces %4$s" +#~ msgstr "%1$s 刺中 %4$s" -#~ msgid "Boston" -#~ msgstr "波士頓" +#~ msgid "%1$s wraps %2$s %3$s around %4$s" +#~ msgstr "%1$s 把 %2$s %3$s 包在 %4$s 之中" -#~ msgid "Boscawen" -#~ msgstr "博斯科恩" +#~ msgid "%1$s wrap %2$s %3$s around %4$s" +#~ msgstr "%1$s 把 %2$s %3$s 包在 %4$s 之中" -#~ msgid "Boothbay Harbor" -#~ msgstr "布斯灣" +#~ msgid "%1$s uses %2$s %3$s to toss %4$s" +#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" -#~ msgid "Boothbay" -#~ msgstr "布斯" +#~ msgid "%1$s use %2$s %3$s to toss %4$s" +#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" -#~ msgid "Bolton" -#~ msgstr "波頓" +#~ msgid "The %s sinks its ovipositor into you!" +#~ msgstr "%s 在你身上產卵了!" -#~ msgid "Blue Hill" -#~ msgstr "藍山" +#~ msgid "You trigger a landmine!" +#~ msgstr "你觸發了地雷!" -#~ msgid "Bloomfield" -#~ msgstr "布盧姆菲爾德" +#~ msgid "%1$s swing %2$s %3$s wide at %4$s" +#~ msgstr "%1$s 大力揮動 %2$s %3$s 朝著 %4$s" -#~ msgid "Blandford" -#~ msgstr "布蘭福德" +#~ msgid "%1$s swings %2$s %3$s wide at %4$s" +#~ msgstr "%1$s 大力揮動 %2$s %3$s 朝著 %4$s" -#~ msgid "Blanchard" -#~ msgstr "布蘭查德" +#~ msgid "" +#~ "A black blob of viscous goo that oozes\n" +#~ "across the ground like a mass of living\n" +#~ "oil." +#~ msgstr "" +#~ "一個黑色的黏液球體,\n" +#~ "像是個活體生物,橫行\n" +#~ "在路上。" -#~ msgid "Blaine" -#~ msgstr "布萊恩" +#~ msgid "" +#~ "A wispy spore, about the size of a fist,\n" +#~ "wafting on the breeze." +#~ msgstr "" +#~ "約拳頭大小的孢子束,\n" +#~ "隨著風飄動。" -#~ msgid "Blackstone" -#~ msgstr "黑石" +#~ msgid "%s %s" +#~ msgstr "%s %s" -#~ msgid "Bingham" -#~ msgstr "賓漢" +#~ msgid "" +#~ "That brown '+' next to you is a closed door. To open it, either simply " +#~ "walk\n" +#~ "into it, or press 'o' and then a movement key." +#~ msgstr "" +#~ "你身旁的棕色 '+' 符號代表一扇闔上的門\n" +#~ "直接走過去或是按下字母 'o' 配合方向鍵來開啟。" -#~ msgid "Billerica" -#~ msgstr "比爾里卡" +#~ msgid "" +#~ "The nearby { is a display rack, and the blue background indicates that " +#~ "there\n" +#~ "are items there. If you examine the square by pressing 'e', you can pick " +#~ "up\n" +#~ "items without moving to the square." +#~ msgstr "" +#~ "附近的 { 符號為展示架,而藍色背景指的是有物品在這。若是你按下'e'來\n" +#~ "檢視該格子,你就能夠在不移動到該格子上的情況下撿取物品。\n" +#~ "(xap)" -#~ msgid "Biddeford" -#~ msgstr "畢德佛" +#~ msgid "" +#~ "To see what the symbols around you mean, press ';'. You'll be able to " +#~ "scroll\n" +#~ "around and get information on the terrain, monsters, and items in the " +#~ "world\n" +#~ "around you." +#~ msgstr "" +#~ "要了解各符號代表的意義,按下';'。你將能夠四處捲動,並了解地形地物的\n" +#~ "各種資訊,包括各種在你周圍的怪物與物品。\n" +#~ "(xap)" -#~ msgid "Beverly" -#~ msgstr "比佛利" +#~ msgid "" +#~ "The '@' character in the center of the screen represents you. To move, " +#~ "you\n" +#~ "can use the numpad, the vikeys (hjklyubn), or the arrow keys. To have " +#~ "your\n" +#~ "character wait in place, press '.'" +#~ msgstr "" +#~ "在畫面中央的'@'符號代表玩家你。要移動,你能夠使用九宮數字鍵、hjklyubn\n" +#~ "、或是方向鍵。要讓你的角色在原地等待,按下'.'\n" +#~ "(xap)" -#~ msgid "Bethlehem" -#~ msgstr "伯利恆" +#~ msgid "" +#~ "Welcome to the Cataclysm tutorial! As you play, pop-ups like this one " +#~ "will\n" +#~ "appear to guide you through the basic game actions. Pressing spacebar " +#~ "will\n" +#~ "close the pop-up." +#~ msgstr "" +#~ "歡迎來到大災變的教學模式!當你遊玩的時候,類似這個彈出訊息\n" +#~ "將會指導你進行基本的遊戲操作。按下 空白鍵 將會關閉這個彈出\n" +#~ "訊息。(xap)" -#~ msgid "Bethel" -#~ msgstr "伯特利" +#~ msgid "" +#~ "You can smash through windows by pressing 's' and then a movement key. " +#~ "A\n" +#~ "smashed window takes a long time to climb through, and it's possible to " +#~ "hurt\n" +#~ "yourself on the broken glass, but it's a good last-ditch escape route. " +#~ "You\n" +#~ "can smash through other things, too; use the ';' command and look for " +#~ "things\n" +#~ "that are \"Smashable.\"" +#~ msgstr "" +#~ "你能夠利用's'加上方向鍵來砸壞窗戶來通過障礙。一個被砸壞的窗戶將會\n" +#~ "需要較長的時間才能爬過去,並且還有可能讓你被碎片刺傷,但這總是一\n" +#~ "個良好的脫逃方法。你也能夠砸爛其他東西;使用';'的指令並查看哪些東\n" +#~ "西是'可砸毀'的。\n" +#~ "(xap)" -#~ msgid "Bethany" -#~ msgstr "貝瑟尼" +#~ msgid "" +#~ "Most monsters will have to smash their way through a closed door. If a " +#~ "door\n" +#~ "is locked or stuck, you can smash it by pressing 's' and then a movement " +#~ "key." +#~ msgstr "" +#~ "大部分的怪物都必須要破壞關閉的門才能通過。若是門被鎖住或是卡住,\n" +#~ "你能夠利用's'選擇方向來砸爛該門。\n" +#~ "(xap)" -#~ msgid "Berwick" -#~ msgstr "伯威克" +#~ msgid "" +#~ "You can close an opened door by pressing 'c' and then a movement key. " +#~ "Closing\n" +#~ "doors behind you can often slow down throngs of monsters greatly." +#~ msgstr "" +#~ "你能夠藉由按下'c'並選方向,來關閉開啟的門。把你身後的門關起來能夠大幅\n" +#~ "地拖慢怪物的進擊速度。\n" +#~ "(xap)" -#~ msgid "Bernardston" -#~ msgstr "貝爾納茨頓" +#~ msgid "" +#~ "The Examine command is useful for grabbing items off window frames, " +#~ "around\n" +#~ "corners, etc. It's also used for interacting with a few terrain types.\n" +#~ "Interactive terrain is usually designated with a '6' symbol." +#~ msgstr "" +#~ "檢視指令在撿取於任何地形的物品時非常有用。同時也能夠與許多地形狀況\n" +#~ "進行互動。能夠互動的地形通常標示為 '6' 的符號。\n" +#~ "(xap)" -#~ msgid "Berlin" -#~ msgstr "柏林" +#~ msgid "" +#~ "You don't have space in your inventory to store the item you just tried " +#~ "to\n" +#~ "pick up. You need to wear something with storage space, like a backpace " +#~ "or\n" +#~ "cargo pants, to gain more storage space." +#~ msgstr "" +#~ "你的物品欄沒有足夠的儲物空間來儲存你要撿取的物品。你需要穿戴上\n" +#~ "有提供儲物空間的東西才能增加空間,像是背包或是工作褲。\n" +#~ "(xap)" -#~ msgid "Berkshire" -#~ msgstr "伯克希爾" +#~ msgid "" +#~ "The item you just picked up has been wielded as a weapon automatically. " +#~ "This\n" +#~ "happened because you do not have space in your inventory to stash the " +#~ "item,\n" +#~ "and so you must carry it in your hand. To expand your inventory space, " +#~ "try\n" +#~ "wearing clothing with a lot of storage space, like a backpack, or cargo " +#~ "pants." +#~ msgstr "" +#~ "你剛撿取的物品被自動手持作為武器了。會發生這種狀況通常代表你的物品\n" +#~ "欄沒有足夠的儲物空間能夠收藏該物品,所以你必須用雙手拿著。要拓展儲\n" +#~ "物空間,試著穿上有許多儲物空間的衣物,類似背包,或是工作褲。\n" +#~ "(xap)" -#~ msgid "Berkley" -#~ msgstr "伯克利" +#~ msgid "" +#~ "The item you just picked up has been wielded as a weapon automatically. " +#~ "This\n" +#~ "happened because it is a good melee weapon, and you were empty-handed. " +#~ "This\n" +#~ "usually is faster than than picking it up, then wielding it." +#~ msgstr "" +#~ "你剛撿取的物品被自動手持作為武器了。這是因為該物品是好的近戰武器,而你\n" +#~ "是空手的。這樣動作會比撿取東西再從物品欄進行手持動作要快的多。\n" +#~ "(xap)" -#~ msgid "Benton" -#~ msgstr "班頓" +#~ msgid "" +#~ "The item you just picked up went into your inventory, the shared storage\n" +#~ "space of all the clothing you're wearing. To view your inventory, press " +#~ "'i'.\n" +#~ "You can then press the letter of any item to get more information about " +#~ "it." +#~ msgstr "" +#~ "你剛撿取的物品被放入你的物品欄了,你身上所有的衣物會結算為一個總\n" +#~ "儲物空間。要查看你的物品欄,按下'i'。你能夠按下物品所代表的字母來\n" +#~ "查看相關的資訊。\n" +#~ "(xap)" -#~ msgid "Benson" -#~ msgstr "本森" +#~ msgid "" +#~ "The item you just picked up is a type of clothing! To wear clothing, " +#~ "press\n" +#~ "W and then select an item. To take off clothing, press T, or simply take " +#~ "it\n" +#~ "off and drop it in one action by pressing d." +#~ msgstr "" +#~ "你剛撿取的物品是一種衣物!要穿戴衣物,按下'W'並選擇物品。要脫下\n" +#~ "衣物,按下'T',或是簡單的按下'd'來把該物品脫下並丟棄在地上。\n" +#~ "(xap)" -#~ msgid "Bennington" -#~ msgstr "班寧頓" +#~ msgid "" +#~ "The item you just picked up is a good weapon! To wield a weapon, press " +#~ "w,\n" +#~ "then pick what to wield. To wield nothing, either drop your weapon with " +#~ "d,\n" +#~ "or press 'w-' to put it away. A zombie has spawned nearby. To attack " +#~ "it,\n" +#~ "simply move into it." +#~ msgstr "" +#~ "你剛撿取的物品是很好的武器!要手持武器,按下'w',並選取要手持的物品\n" +#~ "。要變為徒手狀態,可以用'd'來丟棄武器,或是'w-'來收起。有殭屍在附近\n" +#~ "要攻擊的話只要朝著其方向移動即可。\n" +#~ "(xap)" -#~ msgid "Benedicta" -#~ msgstr "貝內迪克塔" +#~ msgid "" +#~ "The item you just picked up is a comestible! To eat a comestible, press " +#~ "'E'.\n" +#~ "Comestibles are items you can use up, like food, drink, pills, etc. " +#~ "Most\n" +#~ "food expires eventually, so be careful. Some comestibles, especially " +#~ "drugs,\n" +#~ "can cause subtle, long-term effects." +#~ msgstr "" +#~ "你剛撿取的物品是可食用的!要把食物吃下,按下'E'。可食用的\n" +#~ "物品諸如食物,飲料,藥物,等等。大部分的食物最後都會腐敗\n" +#~ ",所以要注意。某些可食用物品,特別是藥物,會造成一些微妙\n" +#~ "或是長期的影響。(xap)" -#~ msgid "Belvidere" -#~ msgstr "貝爾維迪爾" +#~ msgid "" +#~ "The item you just picked up is a firearm! Guns are very powerful weapons " +#~ "but\n" +#~ "they require ammunition. Firearms have many special attributes. Most\n" +#~ "modify the damage done by their ammunition. They also have dispersion, " +#~ "which\n" +#~ "affects their chance to hit. Some guns are semi-automatic, while others " +#~ "can\n" +#~ "fire a burst. Some firearms (mainly bows and other muscle-powered " +#~ "weapons)\n" +#~ "have a range, which is added on top of the ammo's range when firing." +#~ msgstr "" +#~ "你剛撿取的物品是槍械!槍是非常強力的武器但是需要彈藥。槍械有許多特別\n" +#~ "的屬性。大部分都是由裝填的彈藥來決定傷害能力。同時也有分散的屬性,來\n" +#~ "決定武器的命中率。某些槍有半自動射擊模式,能夠進行連發射擊。某些槍械\n" +#~ "(主要是弓箭以及要出力的武器)有距離限制,決定了彈藥射擊時的有效距離。\n" +#~ "(xap)" -#~ msgid "Belmont" -#~ msgstr "貝爾蒙特" +#~ msgid "" +#~ "The item you just picked up is ammunition, used with a gun. It has many\n" +#~ "special attributes. The damage value is the maximum done on a standard " +#~ "hit;\n" +#~ "a critical hit or headshot will do much more damage. Some monsters or " +#~ "NPCs\n" +#~ "will wear armor which reduces the damage from gunfire; a high Armor-" +#~ "pierce\n" +#~ "value will reduce this effect. The Range is the maximum range the ammo " +#~ "can\n" +#~ "achieve, and the dispersion affects its chance to hit." +#~ msgstr "" +#~ "你剛撿取的物品是彈藥,使用於槍械上。有許多不同種類的屬性。\n" +#~ "傷害屬性指的是正常命中時的數值;爆擊命中或是爆頭將能造成更\n" +#~ "大的傷害。某些怪物或是NPC會穿戴護甲來降低遭受的傷害;高穿\n" +#~ "甲屬性數值能夠降低護甲的影響。距離屬性指的是彈藥的有效距離\n" +#~ ",而分散屬性影響了命中率。(xap)" -#~ msgid "Bellingham" -#~ msgstr "柏林罕" +#~ msgid "crunch." +#~ msgstr "咔啦。" -#~ msgid "Belgrade" -#~ msgstr "貝爾格萊德" +#~ msgid "plunk." +#~ msgstr "啪。" -#~ msgid "Belfast" -#~ msgstr "貝爾法斯特" +#~ msgid "crak" +#~ msgstr "喀" -#~ msgid "Belchertown" -#~ msgstr "貝爾徹鎮" +#~ msgid "Stepped on a lane mine." +#~ msgstr "踩到了地雷" -#~ msgid "Bedford" -#~ msgstr "貝德福德" +#~ msgid "%1$s assumes a %2$s stance." +#~ msgstr "%1$s 站在 %2$s 的立場。" -#~ msgid "Beddington" -#~ msgstr "貝丁頓" +#~ msgid "It looks manly.\n" +#~ msgstr "它看起來很 man。\n" -#~ msgid "Becket" -#~ msgstr "貝克特" +#~ msgid "It looks girly.\n" +#~ msgstr "它看起來很娘。\n" -#~ msgid "Beaver Cove" -#~ msgstr "海狸灣" +#~ msgid "" +#~ "Vacuum packed veggy chunks in plastic packaging. Activate to open and " +#~ "enjoy." +#~ msgstr "抽真空的塑膠蔬菜包,使用它來打開享用吧。" -#~ msgid "Beals" -#~ msgstr "比爾斯" +#~ msgid "black widow" +#~ msgstr "黑寡婦" -#~ msgid "Beacon Falls" -#~ msgstr "倍根瀑" +#~ msgid "sewer fish" +#~ msgstr "下水道的魚" -#~ msgid "Bath" -#~ msgstr "巴斯" +#~ msgid "C.H.U.D." +#~ msgstr "C.H.U.D." -#~ msgid "Barton" -#~ msgstr "巴頓" +#~ msgid "" +#~ "Cannibalistic Humanoid Underground Dweller.\n" +#~ "A human, turned pale and mad from years in\n" +#~ "the subways." +#~ msgstr "" +#~ "Cannibalistic Humanoid Underground Dweller (寄居地下的食人者)。\n" +#~ "一個住在地下道多年而蒼白發瘋的人。" -#~ msgid "Bartlett" -#~ msgstr "巴特利特" +#~ msgid "" +#~ "A horrifying child zombie, you feel\n" +#~ "a twinge of remorse looking at it." +#~ msgstr "" +#~ "一個可怕的殭屍小孩子,\n" +#~ "看著它你會感到深深的自責。" -#~ msgid "Barrington" -#~ msgstr "巴林頓" +#~ msgid "" +#~ "Strawberries left to ferment with a few other choice ingredients offer up " +#~ "a surprisingly platable mixture; you barely even have to force yourself " +#~ "to drink it after the first few gulps." +#~ msgstr "" +#~ "發酵過的草莓混合許多種配料合成的驚奇口感雞尾酒;你根本不用強迫自己就能自然" +#~ "的喝光光。" -#~ msgid "Barre" -#~ msgstr "巴雷" +#~ msgid "" +#~ "A cordless drill with a selection of drill bits. The charger base " +#~ "contains a battery draining attachment so the drill can be charged in " +#~ "lieu of mains power." +#~ msgstr "" +#~ "一個充電式的電鑽包含許多種類的鑽頭。充電的元件有著能從一般電池充電的機能。" -#~ msgid "Barnstead" -#~ msgstr "巴恩斯德" +#~ msgid "" +#~ "An enormously heavy block of oddly shaped steel with a chisel-like " +#~ "projection set into the corner. Used in most metalworking fabrication " +#~ "recipes." +#~ msgstr "" +#~ "形狀奇特如鋼鑿子般的極沉重鋼鐵。大部分用在進行鑄鐵相關的物品製作時。" -#~ msgid "Barnstable" -#~ msgstr "巴恩斯特布爾" +#~ msgid "" +#~ "This is an advertisement for Robert's Universal Robotics brand law " +#~ "enforcement robots. It shows a picture of tripod robot incinerating a mob " +#~ "of looters and stepping over charred and smoking corpses. The caption " +#~ "reads: \"Built to Protect. Programmed to Serve.\"" +#~ msgstr "" +#~ "這是全能機器牌機械執法者的廣告。上面有著三腳機器人燃燒暴徒並走過其冒煙屍體" +#~ "的圖案。標題寫著: \"建造保護。編程服務。\"" -#~ msgid "Barnet" -#~ msgstr "巴尼特" +#~ msgid "" +#~ "A sluglike creature, eight feet long and the width of a refrigerator, " +#~ "it's black body glistens as it oozes it's way along the ground. Eye " +#~ "stalks occassionally push their way out of the oily mass and look around." +#~ msgstr "" +#~ "像是鼻涕蟲的生物,8呎長而寬度就像冰箱一樣,黑色的軀體會產生黏液並在地上留" +#~ "下拖痕。眼睛則會隨著前進時伸縮並環顧四周。" -#~ msgid "Barnard" -#~ msgstr "巴納德" +#~ msgid "" +#~ "A hideous beast of a zombie, bulging with\n" +#~ "distended muscles on both arms and legs." +#~ msgstr "" +#~ "一個可怕的野獸殭屍,雙臂與雙腿都\n" +#~ "有著膨脹的肌肉。" -#~ msgid "Barkhamsted" -#~ msgstr "巴克漢士德" +#~ msgid "" +#~ "A zombie that has somehow grown to the size of\n" +#~ "6 men, with arms as wide as a trash can." +#~ msgstr "" +#~ "一個不知為何能長到6人高的巨大殭屍,\n" +#~ "手臂跟大垃圾桶一樣粗。" -#~ msgid "Baring Plantation" -#~ msgstr "巴靈" +#~ msgid "" +#~ "A diseased zombie. Fungus sprouts from its\n" +#~ "mouth and eyes, and thick gray mold grows all\n" +#~ "over its translucent flesh." +#~ msgstr "" +#~ "一個帶菌的殭屍。真菌佈滿了他的嘴和眼,\n" +#~ "並且在其半透明的軀體上長了厚厚的灰黴。" -#~ msgid "Bar Harbor" -#~ msgstr "巴爾港" +#~ msgid "" +#~ "A bloated zombie sagging with fat. It emits a\n" +#~ "horrible odor, and putrid, pink sludge drips\n" +#~ "from its mouth." +#~ msgstr "" +#~ "脂肪臃腫下垂的肥胖殭屍。散發出可怕的\n" +#~ "腐爛氣味,粉紅色的粘液從它的嘴滴下。" -#~ msgid "Bangor" -#~ msgstr "班戈" +#~ msgid "" +#~ "A bloated zombie that is coated with slimy\n" +#~ "gray mold. Its flesh is translucent and gray,\n" +#~ "and it dribbles a gray sludge from its mouth." +#~ msgstr "" +#~ "一個肥胖的殭屍,皮膚佈滿粘糊的灰黴。\n" +#~ "血肉呈現灰色半透明的,嘴掛著一團灰色\n" +#~ "的污泥。" -#~ msgid "Bancroft" -#~ msgstr "班克羅夫特" +#~ msgid "" +#~ "A skeleton picked clean of all but a few\n" +#~ "rotten scraps of flesh, somehow still in\n" +#~ "motion." +#~ msgstr "" +#~ "一具血肉被挑空後的骷髏,還黏著一\n" +#~ "些腐爛的肉在上面,不知道為什麼還\n" +#~ "能動。" -#~ msgid "Baltimore" -#~ msgstr "巴爾的摩" +#~ msgid "" +#~ "A zombie with jet black skin and glowing red\n" +#~ "eyes. As you look at it, you're gripped by a\n" +#~ "feeling of dread and terror." +#~ msgstr "" +#~ "這殭屍有漆黑的皮膚和發出紅光的眼睛。\n" +#~ "當你看著它時,恐懼和害怕的感覺浮上你\n" +#~ "的心頭。" -#~ msgid "Baldwin" -#~ msgstr "鮑德溫" +#~ msgid "" +#~ "This zombie was clearly a soldier before.\n" +#~ "Its tattered armor gives it strong defense,\n" +#~ "and it is much more physically fit than\n" +#~ "most zombies." +#~ msgstr "" +#~ "這殭屍很明顯生前是個軍人。破爛的護甲\n" +#~ "讓他提昇了許多防護能力,而體格也比大\n" +#~ "多數殭屍更強壯。" -#~ msgid "Bakersfield" -#~ msgstr "貝克斯菲爾德" +#~ msgid "" +#~ "A zombie wearing a tattered lab coat and\n" +#~ "some sort of utility belt. It looks weaker\n" +#~ "than most zombies, but more resourceful too." +#~ msgstr "" +#~ "這殭屍穿著破爛的白色大衣和某種工具腰帶。\n" +#~ "它看起來比大多數殭屍弱,但是更聰明。" -#~ msgid "Baileyville" -#~ msgstr "貝利村" +#~ msgid "" +#~ "This zombie seems to have a cloud of black\n" +#~ "dust surrounding it. It also seems to have\n" +#~ "a better grasp of movement than most..." +#~ msgstr "" +#~ "這殭屍的周圍似乎圍繞著黑色的煙塵,\n" +#~ "而它的運動能力似乎也比一般的殭屍強\n" +#~ "上非常多..." -#~ msgid "Ayer" -#~ msgstr "艾爾" +#~ msgid "" +#~ "Hundreds of bee stings have given this zombie\n" +#~ "a thick covering of scar tissue, it will be\n" +#~ "much harder to damage than an ordinary zombie\n" +#~ "but moves a bit slower" +#~ msgstr "" +#~ "數以百記的蜂刺讓這殭屍出現厚厚的疤痕角質,\n" +#~ "儘管他移動速度較慢,但要打倒他會比打倒一般\n" +#~ "殭屍更困難。" -#~ msgid "Avon" -#~ msgstr "雅文" +#~ msgid "" +#~ "A thick stalk, rooted to the ground.\n" +#~ "It rapidly sprouts thorny vines in all\n" +#~ "directions." +#~ msgstr "" +#~ "厚實的植物莖紮根到地面。\n" +#~ "有棘刺的藤蔓往四面八方迅速生長。" -#~ msgid "Aurora" -#~ msgstr "奧羅拉" +#~ msgid "creeping vine" +#~ msgstr "變種藤蔓莖" -#~ msgid "Augusta" -#~ msgstr "奧古斯塔" +#~ msgid "" +#~ "A thorny vine. It twists wildly as\n" +#~ "it grows, spreading rapidly." +#~ msgstr "" +#~ "厚實的植物莖。因為生長的速度快\n" +#~ "而瘋狂的扭曲纏繞。" -#~ msgid "Auburn" -#~ msgstr "奧本" +#~ msgid "" +#~ "A thick stalk topped with a purple\n" +#~ "flower. The flower's petals are closed,\n" +#~ "and pulsate ominously." +#~ msgstr "" +#~ "厚實的莖上有紫色的花。\n" +#~ "花瓣是閉合的,並且有令人不安的搏動" -#~ msgid "Attleboro" -#~ msgstr "阿特爾伯勒" +#~ msgid "" +#~ "This appears to be a mass of vines, moving\n" +#~ "with surprising speed. It is so thick and\n" +#~ "tangled that you cannot see what lies in\n" +#~ "the middle." +#~ msgstr "" +#~ "以驚人的速度移動的籐蔓,因為籐蔓\n" +#~ "厚重而糾結,讓你看不出中心有什麼\n" +#~ "。" -#~ msgid "Atkinson" -#~ msgstr "阿特金森" +#~ msgid "vinebeast" +#~ msgstr "藤蔓獸" -#~ msgid "Athol" -#~ msgstr "阿瑟爾" +#~ msgid "The root walls begin to crumble around you." +#~ msgstr "植根牆開始在你周圍崩毀。" -#~ msgid "Athens" -#~ msgstr "雅典" +#~ msgid "" +#~ "A knot of roots that looks bizarrely like a\n" +#~ "heart. It beats slowly with sap, powering\n" +#~ "the root walls around it." +#~ msgstr "" +#~ "一個看起來很詭異的心臟樣貌的東西。\n" +#~ "它緩慢的搏動,並供給能量給予圍繞在\n" +#~ "其上的植根牆。" -#~ msgid "Ashland" -#~ msgstr "亞甚蘭" +#~ msgid "" +#~ "An adjustable wrench. Makes a decent melee weapon, and is used in many " +#~ "mechanics crafting recipes." +#~ msgstr "" +#~ "一個可調整的扳手. 非常適合當武器用,而且可以應用在許多機械製造的配方上." -#~ msgid "Ashford" -#~ msgstr "阿什福德" +#~ msgid "" +#~ "A high-powered stun gun. Use this item to attempt to electrocute an " +#~ "adjacent enemy, damaging and temporarily paralyzing them. Because the " +#~ "shock can actually jump through the air, it is difficult to miss." +#~ msgstr "" +#~ "威力強大的電擊槍,用它可電暈或癱瘓敵人。電流還能通過空氣傳導,所以很難失" +#~ "手。" -#~ msgid "Ashfield" -#~ msgstr "艾士菲" +#~ msgid "beef jerky" +#~ msgstr "醃肉" -#~ msgid "Ashby" -#~ msgstr "阿什比" +#~ msgid "molebot" +#~ msgstr "地鼠機器人" -#~ msgid "Ashburnham" -#~ msgstr "阿什波漢" +#~ msgid "" +#~ "A 10-foot-tall, heavily-armored robot that\n" +#~ "walks on a pair of legs with the knees\n" +#~ "facing backwards. It's armed with a\n" +#~ "nasty-looking machine gun." +#~ msgstr "" +#~ "10呎高的重裝甲雙足機器人,而膝蓋部分\n" +#~ "是像鳥一樣往後折的。裝配了看起來很威\n" +#~ "猛的機關槍。" -#~ msgid "Arundel" -#~ msgstr "阿倫德爾" +#~ msgid "tankbot" +#~ msgstr "坦克機器人" -#~ msgid "Arrowsic" -#~ msgstr "阿羅錫克" +#~ msgid "" +#~ "This fearsome robot is essentially an\n" +#~ "autonomous tank. It moves surprisingly fast\n" +#~ "on its treads, and is armed with a variety of\n" +#~ "deadly weapons." +#~ msgstr "" +#~ "這個可怕的機器人是有自主意識的坦克。它能\n" +#~ "利用其履帶出奇快速的移動,並且裝配了大量\n" +#~ "的致命武器。" -#~ msgid "Arlington" -#~ msgstr "阿靈頓" +#~ msgid "" +#~ "A snake-shaped robot that tunnels through the\n" +#~ "ground slowly. When it emerges from the\n" +#~ "ground it can attack with its large, spike-\n" +#~ "covered head." +#~ msgstr "" +#~ "一種能鑽地的蛇形機器人。當他衝出地表時能夠\n" +#~ "使用其頭上的巨大尖刺進行攻擊。" -#~ msgid "Argyle" -#~ msgstr "亞皆" +#~ msgid "" +#~ "Your precious generator, noisily humming\n" +#~ "away. Defend it at all costs!" +#~ msgstr "" +#~ "你最珍惜的發電機,發出嗡嗡的噪音。\n" +#~ "不惜代價保護它!" -#~ msgid "Aquinnah" -#~ msgstr "阿基那" +#~ msgid "" +#~ "A large green fish, it's mouth lined with\n" +#~ "three rows of razor-sharp teeth." +#~ msgstr "" +#~ "一種綠色且巨大的魚\n" +#~ "嘴裡長了三排鋒利的牙齒" -#~ msgid "Appleton" -#~ msgstr "阿普爾頓" +#~ msgid "" +#~ "A yellow spider the size of a dog. It lives\n" +#~ "in webs, waiting for prey to become\n" +#~ "entangled before pouncing and biting." +#~ msgstr "" +#~ "一種體型跟狗一樣的黃色蜘蛛.\n" +#~ "生活在網中,等待獵物被糾纏住後\n" +#~ "撲上前猛咬." -#~ msgid "Antrim" -#~ msgstr "安特里姆" +#~ msgid "" +#~ "A dog's body with a mass of ropy, black\n" +#~ "tentacles extending from its head." +#~ msgstr "" +#~ "有著黏稠身體的狗,黑色\n" +#~ "的觸手從頭部延伸出來。" -#~ msgid "Ansonia" -#~ msgstr "安索尼亞" +#~ msgid "Amigara horror" +#~ msgstr "阿彌殼怪" -#~ msgid "Anson" -#~ msgstr "安生" +#~ msgid "" +#~ "A spindly body, standing at least 15 feet\n" +#~ "tall. It looks vaguely human, but its face is\n" +#~ "grotesquely stretched out, and its limbs are\n" +#~ "distorted to the point of being tentacles." +#~ msgstr "" +#~ "有著細長的身體,至少約15英尺高\n" +#~ "。它看起來像人,但其四肢卻錯位\n" +#~ "扭曲的伸出,像是觸鬚一樣。" -#~ msgid "Andover" -#~ msgstr "安多弗" +#~ msgid "" +#~ "A pale white fungus, one meaty gray stalk\n" +#~ "supporting a bloom at the top. A few\n" +#~ "tendrils extend from the base, allowing\n" +#~ "mobility and a weak attack." +#~ msgstr "" +#~ "一株白色的真菌,肉質的灰色秸稈上面並\n" +#~ "綻放著菌傘。根部長了一些卷鬚,讓它能\n" +#~ "夠活動並且進行微弱的攻擊。" -#~ msgid "Amity" -#~ msgstr "阿默帝" +#~ msgid "" +#~ "A fungal tendril just a couple feet tall. Its\n" +#~ "exterior is hardened into a leathery bark and\n" +#~ "covered in thorns; it also moves faster than\n" +#~ "full-grown fungaloids." +#~ msgstr "" +#~ "僅有幾英尺高的真菌卷鬚。其表皮為硬化\n" +#~ "的荊棘樹皮,移動速度比完全成熟的真菌\n" +#~ "快。" -#~ msgid "Amherst" -#~ msgstr "阿默斯特" +#~ msgid "" +#~ "A veritable wall of fungus, grown as a\n" +#~ "natural defense by the fungal spire. It\n" +#~ "looks very tough, and spews spores at an\n" +#~ "alarming rate." +#~ msgstr "" +#~ "由真菌尖頂增長而成的自然防壁。\n" +#~ "看起來非常堅固,並且以驚人速度\n" +#~ "噴出孢子。" -#~ msgid "Amesbury" -#~ msgstr "艾姆斯伯里" +#~ msgid "" +#~ "An enormous fungal spire, towering 30 feet\n" +#~ "above the ground. It pulsates slowly,\n" +#~ "continuously growing new defenses." +#~ msgstr "" +#~ "在地面之上的一個高達30英尺的\n" +#~ "巨大真菌尖塔,它慢慢的搏動,\n" +#~ "並不斷增長。" -#~ msgid "Alton" -#~ msgstr "奧爾頓" +#~ msgid "" +#~ "A relatively humanoid mutant with purple\n" +#~ "hair and a grapefruit-sized bloodshot eye." +#~ msgstr "" +#~ "一個突變種人形,有著紫色的毛髮\n" +#~ "與有如柚子大佈滿血絲的獨眼。" -#~ msgid "Alstead" -#~ msgstr "歐斯典" +#~ msgid "one-eyed mutant" +#~ msgstr "變種獨眼人" -#~ msgid "Alna" -#~ msgstr "歐那" +#~ msgid "crawler mutant" +#~ msgstr "變種爬行者" -#~ msgid "Allenstown" -#~ msgstr "亞倫鎮" +#~ msgid "" +#~ "Two or three humans fused together somehow,\n" +#~ "slowly dragging their thick-hided, hideous\n" +#~ "body across the ground." +#~ msgstr "" +#~ "兩到三個人融合在一起的形體,\n" +#~ "緩慢的在地面拖行著他們的厚皮\n" +#~ "與猙獰的軀體。" -#~ msgid "Allagash" -#~ msgstr "阿拉加什" +#~ msgid "" +#~ "A large snake, turned pale yellow from its\n" +#~ "underground life." +#~ msgstr "因地底生活而變成黃色的巨大蛇類。" -#~ msgid "Alfred" -#~ msgstr "阿爾弗雷德" +#~ msgid "" +#~ "A large, mangey rat with red eyes. It\n" +#~ "scampers quickly across the ground, squeaking\n" +#~ "hungrily." +#~ msgstr "" +#~ "一著有著紅色眼睛的巨大癩皮老鼠。\n" +#~ "在地面上快速的嗅探,飢渴的發出吱\n" +#~ "吱聲。" -#~ msgid "Alford" -#~ msgstr "奧爾福德" +#~ msgid "" +#~ "A group of several rats, their tails\n" +#~ "knotted together in a filthy mass. A wave\n" +#~ "of nausea washes over you in its presence." +#~ msgstr "" +#~ "數十隻老鼠組成的團體,尾巴被混亂的\n" +#~ "打結在一起。你看到的時候湧上一股噁\n" +#~ "心的感覺。" -#~ msgid "Alexandria" -#~ msgstr "亞歷安德拉" +#~ msgid "" +#~ "An enormous mosquito, fluttering erratically,\n" +#~ "its face dominated by a long, spear-tipped\n" +#~ "proboscis." +#~ msgstr "" +#~ "一隻飛舞的巨大蚊子,臉部是長型並帶有\n" +#~ "長矛狀的口器。" -#~ msgid "Alburg" -#~ msgstr "阿爾堡" +#~ msgid "" +#~ "A ferocious airborne predator, flying swiftly\n" +#~ "through the air, its mouth a cluster of fangs." +#~ msgstr "" +#~ "兇猛的空降捕食者,能在空中快速飛行,\n" +#~ "嘴巴是一組銳利的獠牙。" -#~ msgid "Albion" -#~ msgstr "阿爾比恩" +#~ msgid "" +#~ "A meter-long centipede, moving swiftly on\n" +#~ "dozens of thin legs, a pair of venomous\n" +#~ "pincers attached to its head." +#~ msgstr "" +#~ "一米長的蜈蚣,能利用數隻小腳迅速移動,\n" +#~ "一對毒鉗連接在它的頭部。" -#~ msgid "Albany" -#~ msgstr "奧爾巴尼" +#~ msgid "" +#~ "A thick-skinned green frog. It eyes you\n" +#~ "much as you imagine it might eye an insect." +#~ msgstr "" +#~ "一隻綠色厚皮的青蛙。它把你當做\n" +#~ "蟲子,就像你把它當作蟲子一樣。" -#~ msgid "Agawam" -#~ msgstr "阿格瓦姆" +#~ msgid "" +#~ "A gigantic slug, the size of a small car.\n" +#~ "It moves slowly, dribbling acidic goo from\n" +#~ "its fang-lined mouth." +#~ msgstr "" +#~ "一條巨大化的毛蟲,尺寸就像小汽車一樣。\n" +#~ "它移動緩慢,口器中盤帶著酸性黏液。" -#~ msgid "Acworth" -#~ msgstr "阿克沃斯" +#~ msgid "" +#~ "A fat, white grub the size of your foot, with\n" +#~ "a set of mandibles that look more suited for\n" +#~ "digging than fighting." +#~ msgstr "" +#~ "一隻肥胖的白色蟲子,大約你腳的大小,\n" +#~ "有著一對適合挖掘而非戰鬥的口器。" -#~ msgid "Acushnet" -#~ msgstr "Acushnet" +#~ msgid "" +#~ "A wasp-like flying insect, smaller than most\n" +#~ "mutated wasps. It does not looke very\n" +#~ "threatening, but has a large ovipositor in\n" +#~ "place of a sting." +#~ msgstr "" +#~ "一隻類似黃蜂的飛行昆蟲,比大部分的變種\n" +#~ "黃蜂小。看起來不是很有威脅性,但是其蜂\n" +#~ "刺中有產卵器。" -#~ msgid "Acton" -#~ msgstr "阿克頓" +#~ msgid "" +#~ "A small, almost cute-looking spider. It\n" +#~ "leaps so quickly that it almost appears to\n" +#~ "instantaneously move from one place to\n" +#~ "another." +#~ msgstr "" +#~ "一隻小型可愛外貌的蜘蛛。它跳躍的速\n" +#~ "度快到就像是從一個地方瞬間移動到另\n" +#~ "一個地方。" -#~ msgid "Abington" -#~ msgstr "亞賓頓" +#~ msgid "trap door spider" +#~ msgstr "活板門蛛" -#~ msgid "Abbot" -#~ msgstr "亞培" +#~ msgid "" +#~ "A large spider with a bulbous thorax. It\n" +#~ "creates a subterranean nest and lies in\n" +#~ "wait for prey to fall in and become trapped\n" +#~ "in its webs." +#~ msgstr "" +#~ "有著球狀胸腔的大蜘蛛。它會製作一個地下陷阱\n" +#~ "並潛伏著等待獵物掉下並困在網中。" -#~ msgid "Kyle" -#~ msgstr "凱爾" +#~ msgid "" +#~ "A spider with a characteristic red\n" +#~ "hourglass on its black carapace. It is\n" +#~ "known for its highly toxic venom." +#~ msgstr "" +#~ "一隻蜘蛛,黑色的腹部有著紅色的\n" +#~ "沙漏狀斑記。其劇毒性相當有名。" #~ msgid "" -#~ "You are cold-blooded and rely on heat to keep moving. Your lose 1%% of " -#~ "your speed for every 2 degrees below 65 F." +#~ "A huge, black worm, its flesh glistening\n" +#~ "with an acidic, blue slime. It has a gaping\n" +#~ "round mouth lined with dagger-like teeth." #~ msgstr "" -#~ "你的血液是冷的,需要熱度才能讓你移動。在 65 F (19C) 溫度以下,每低於 2 度" -#~ "就會降低你的速度 1%% 。" +#~ "一隻巨大的黑色蟲狀怪,血肉中閃爍著酸\n" +#~ "性藍色的黏液。其口器圍繞著一圈像匕首\n" +#~ "的牙齒。" #~ msgid "" -#~ "Your muscle response is highly dependent on ambient temperatures. You " -#~ "lose 1%% of your speed for every 3 degrees below 65 F." +#~ "An amorphous black creature which seems to\n" +#~ "sprout tentacles rapidly." #~ msgstr "" -#~ "環境溫度的高低大量反應在你的肌肉上。在 65 F (19C) 溫度以下,每低於 3 度就" -#~ "會降低你的速度 1%% 。" +#~ "一種無定形的黑色生物,其伸出的觸手迅速\n" +#~ "的扭動著。" + +#~ msgid "Thing" +#~ msgstr "那東西" #~ msgid "" -#~ "Your muscle response is dependent on ambient temperatures. You lose 1%% " -#~ "of your speed for every 5 degrees below 65 F." +#~ "A twisting spot in the air, with some kind\n" +#~ "of morphing mass at its center." #~ msgstr "" -#~ "環境溫度的高低反應在你的肌肉上。在 65 F (19C) 溫度以下,每低於 5 度就會降" -#~ "低你的速度 1%% 。" +#~ "空氣中的一個氣流扭曲點,有某種東西\n" +#~ "在其中心點。" #~ msgid "" -#~ "You feel very sluggish when not in direct sunlight. You suffer a 5%% drop " -#~ "in speed when in shade, and a 10%% drop in speed when in the dark." +#~ "An amorphous mass of twisting black flesh\n" +#~ "that flies through the air swiftly." #~ msgstr "" -#~ "你若是沒有受到陽光照射就會覺得異常虛弱。你若是在陰影下會降低 5%% 的速度, " -#~ "在黑暗中降低 10%% 的速度。" +#~ "一個不定型的黑色扭曲肉塊,在空中快速\n" +#~ "的飛行。" -#~ msgid "Your muscles are very slow to move. You run 30%% slower." -#~ msgstr "你的肌肉運動速度非常緩慢。奔跑速度下降 30%%。" +#~ msgid "" +#~ "A ropy, worm-like creature that flies on\n" +#~ "bat-like wings. Its form continually\n" +#~ "shifts and changes, twitching and\n" +#~ "writhing." +#~ msgstr "" +#~ "一支黏稠,蠕蟲狀生物,有著用來飛行\n" +#~ "的蝙蝠狀翅膀。它的形狀不斷的轉變並\n" +#~ "抽搐扭動著。" -#~ msgid "Your muscles are quite slow to move. You run 20%% slower." -#~ msgstr "你的肌肉運動速度相當緩慢。奔跑速度下降 20%%。" +#~ msgid "Mi-go" +#~ msgstr "米戈" -#~ msgid "Your muscles are generally slow to move. You run 10%% slower." -#~ msgstr "你的肌肉變得移動緩慢。你奔跑速度下降 10%%。" +#~ msgid "" +#~ "A pinkish, fungoid crustacean-like\n" +#~ "creature with numerous pairs of clawed\n" +#~ "appendages and a head covered with waving\n" +#~ "antennae." +#~ msgstr "" +#~ "一個粉紅色的真菌甲殼類生物,有\n" +#~ "著無數的附肢爪,頭部長了許多觸\n" +#~ "角。" #~ msgid "" -#~ "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is " -#~ "very light as a result, enabling you to run and attack 20%% faster, but " -#~ "also frail; you can carry 40%% less, and bashing attacks injure you more." +#~ "An eyeball the size of an easy chair and\n" +#~ "covered in rolling blue flames. It floats\n" +#~ "through the air." #~ msgstr "" -#~ "你有禽骨綜合症 - 你的骨頭幾乎是空心的。由於你的身體很輕,讓你能夠提昇 20%" -#~ "% 的攻擊速度,同時也有缺點;你的負重能力降低到 40%%,並且鈍擊攻擊讓你受到" -#~ "的傷害更大。" +#~ "一個椅子大小的眼球,覆蓋著滾燙的\n" +#~ "藍色火焰。並漂浮在空中。" #~ msgid "" -#~ "Your legs are extremely limber and fast-moving. You run 30%% faster on " -#~ "flat surfaces." -#~ msgstr "你的腿很有彈性並且可以動得很快。你在平地的跑步速度提升 30%% 。" +#~ "This looks like a human body, but its\n" +#~ "flesh is snow-white and its face has no\n" +#~ "features save for a perfectly round\n" +#~ "mouth." +#~ msgstr "" +#~ "看起來像是人類的軀體,但是血肉是\n" +#~ "雪白色的,且臉部沒有五官,只有一\n" +#~ "張大嘴。" #~ msgid "" -#~ "Your bones are very light. This enables you to run and attack 10%% " -#~ "faster, but also reduces your carrying weight by 20%% and makes bashing " -#~ "attacks hurt a little more." +#~ "A fist-sized robot that flies swiftly through\n" +#~ "the air. It's covered with whirring blades\n" +#~ "and has one small, glowing red eye." #~ msgstr "" -#~ "你的骨頭很輕。讓你能夠奔跑及攻擊速度得到 10%% 的加成,但是會讓你減少 20%% " -#~ "的負重,另外鈍擊也會讓你傷害加大。" +#~ "一種飛在空中拳頭大小的機器人\n" +#~ "身上覆蓋著旋轉的刀片\n" +#~ "有著一顆發光的紅眼." #~ msgid "" -#~ "Your whole body can't take much abuse. Its maximum HP is 75%% points " -#~ "lower than usual. Stacks with Glass Jaw. Not for casuals." +#~ "An enormous white flatworm writhing\n" +#~ "beneath the earth. Poking from the\n" +#~ "ground is a bulbous head dominated by a\n" +#~ "pink mouth, lined with rows of fangs." #~ msgstr "" -#~ "你的全身無法遭受太多傷害。全身降低了 75%% 的HP。搭配玻璃下巴簡直極品爆弱。" +#~ "一個巨大的白色扁形蟲在地底下扭動著。\n" +#~ "會利用球狀的頭與肉色的獠牙口從地底竄\n" +#~ "出," #~ msgid "" -#~ "Your head can't take much abuse. Its maximum HP is 20%% lower than usual." -#~ msgstr "你的頭部無法受到太大的傷害。頭部比一般人少了 20%% 的HP。" +#~ "A strange, immobile pink goo. It seems to\n" +#~ "be breathing slowly." +#~ msgstr "" +#~ "一個奇異的固定粉紅色肉塊。它似乎會\n" +#~ "緩慢的呼吸。" #~ msgid "" -#~ "You simply can not carry as much as people with a similar strength could. " -#~ "Your maximum weight carried is reduced by 35%%." -#~ msgstr "你就是沒法像一般人一樣搬運這麼多東西。你的最大負重量減少 35%% 。" +#~ "A strange dark area in the area. It whispers\n" +#~ "softly as it moves." +#~ msgstr "" +#~ "奇怪的一塊陰影。它會在移動時\n" +#~ "發出耳語。" -#~ msgid "" -#~ "You are a pupil of the Venom Clan. You start with one of the five deadly " -#~ "venoms: Centipede, Viper, Scorpion, Lizard, or Toad." -#~ msgstr "你是五毒教的門徒。你一開始便能從五毒中任選一個招式。" +#~ msgid "A large snake, translucent black." +#~ msgstr "一條巨大的蛇,呈現半透明的黑色。" -#~ msgid "Venom Mob Protege" -#~ msgstr "五毒教徒" +#~ msgid "" +#~ "This poor victim was sliced open and bled to\n" +#~ "death long ago. Yet, chained down it thrashes\n" +#~ "in eternal misery from its tortures." +#~ msgstr "" +#~ "這個可憐的受害者在不久前死亡,呈現被切開\n" +#~ "的狀態。並且被鐵鍊拴著,象徵永恆的痛苦。" #~ msgid "" -#~ "You have studied the arts of the Shaolin monks. You start with one of the " -#~ "five animal fighting styles: Tiger, Crane, Leopard, Snake, or Dragon." -#~ msgstr "你跟少林寺方丈學過少林功夫。你一開始便能從五形拳中任選一個招式。" +#~ "Slender and terrifying, this gigantic man lacks\n" +#~ "any skin yet moves swiftly and gracefully without\n" +#~ "it. Wings of flesh protrude uselessly from his\n" +#~ "back and a third eye dominates his forehead." +#~ msgstr "" +#~ "一個巨大、修長而可怕的人,沒有任何皮膚在\n" +#~ "其肌肉上。從他的背後長出肉質的翅膀,並且\n" +#~ "在額頭上有著第三隻眼。" -#~ msgid "Shaolin Adept" -#~ msgstr "少林功夫好耶" +#~ msgid "secubot" +#~ msgstr "保全機器人" #~ msgid "" -#~ "At some point in the past you had a bionic upgrade installed in your " -#~ "body. You start the game with a power system, and one random bionic " -#~ "enhancement." +#~ "A boxy robot about four feet high. It moves\n" +#~ "slowly on a set of treads, and is armed with\n" +#~ "a large machine gun type weapon. It is\n" +#~ "heavily armored." #~ msgstr "" -#~ "基於某些理由,你已經有生化插件安裝在你的身體之中。你開始遊戲時便擁有能量儲" -#~ "存系統,以及隨機的生化插件。" +#~ "一個四四方方的四英尺高的機器人。靠著\n" +#~ "一組履帶緩慢的移動,並配備了一把大機\n" +#~ "槍。它有著重裝甲。" -#~ msgid "Android" -#~ msgstr "生化人" +#~ msgid "Gozu" +#~ msgstr "牛頭人" #~ msgid "" -#~ "Covering your body in clothing typical for the opposite gender makes you " -#~ "feel better." -#~ msgstr "穿上異性的服裝能夠讓你感覺良好。" - -#~ msgid "Cross-Dresser" -#~ msgstr "變裝癖" +#~ "A beast with the body of a slightly-overweight\n" +#~ "man and the head of a cow. It walks slowly,\n" +#~ "milky white drool dripping from its mouth,\n" +#~ "wearing only a pair of white underwear." +#~ msgstr "" +#~ "有著稍微過重的人類身形,而頭部是牛頭。\n" +#~ "它移動緩慢,乳白色的唾液從他的嘴巴流下\n" +#~ ",只穿著一副白色的內衣。\n" +#~ "(日本電影:牛頭 Gozu)" #~ msgid "" -#~ "It takes a lot to bring you down! You get a 20%% bonus to all hit points." -#~ msgstr "想打倒你要付出更多代價!你獲得 20%% 的HP加成。" +#~ "An eldritch creature, shuffling\n" +#~ "along, its hands twitching so\n" +#~ "fast they appear as nothing but\n" +#~ "blurs." +#~ msgstr "" +#~ "一個怪異的生物,一直隨機變換,\n" +#~ "其手掌抽搐的速度快到讓你看不見\n" +#~ "實體。" #~ msgid "" -#~ "You can run more quickly than most, resulting in a 15%% speed bonus on " -#~ "sure footing." -#~ msgstr "你能跑的比一般人快,得到 15%% 的速度加成。" +#~ "A robot with an insectoid design, about\n" +#~ "the size of a small dog. It skitters\n" +#~ "quickly across the ground, two electric\n" +#~ "prods at the ready." +#~ msgstr "" +#~ "一個昆蟲外型的機器人,約小狗的大小\n" +#~ "。它快速的掠過地面,並且有電子探測\n" +#~ "觸鬚。" -#~ msgid "vacuum-packed apple slices" -#~ msgstr "真空包裝的蘋果片" +#~ msgid "" +#~ "A blue-painted robot that moves quickly on a\n" +#~ "set of three omniwheels. It has a nightstick\n" +#~ "readied, and appears to be well-armored." +#~ msgstr "" +#~ "一個藍色外漆的機器人,能夠利用其微型三\n" +#~ "輪進行快速移動。它有一個警棍,並且有良\n" +#~ "好的裝甲。" -#~ msgid "A small pocket knife, not great for combat, but better than nothing." -#~ msgstr "一把小摺疊刀, 不適合戰鬥, 但聊勝於無." +#~ msgid "copbot" +#~ msgstr "警察機器人" -#~ msgid "MRE - beef" -#~ msgstr "軍用口糧 - 牛肉" +#~ msgid "gelatinous blob" +#~ msgstr "凝膠球" #~ msgid "" -#~ "A 40mm grenade with a small explosion and a high number of damaging " -#~ "fragments." -#~ msgstr "爆炸時會產生大量致命破片的 40mm 榴彈。" - -#~ msgid "A 40mm grenade with a concussive explosion." -#~ msgstr "有震撼爆炸的 40mm 榴彈。" +#~ "A shapeless blob the size of a cow. It\n" +#~ "oozes slowly across the ground, small\n" +#~ "chunks falling off of its sides." +#~ msgstr "" +#~ "一顆無暇的球狀物體,約牛的大小。\n" +#~ "它緩慢的在地面上滾動。並且會從其\n" +#~ "上掉落小小的塊狀物體。" #~ msgid "" -#~ "Powerful heatsinks supermaterials are woven into your flesh. While " -#~ "powered, this system will prevent heat damage up to 2000 degrees " -#~ "fahrenheit. Note that this does not affect your internal temperature." +#~ "A small humanoid, the size of a dog, with\n" +#~ "twisted red flesh and a distended neck. It\n" +#~ "scampers across the ground, panting and\n" +#~ "grunting." #~ msgstr "" -#~ "你的皮膚埋入了強大的超導散熱片。當有能量時,這個系統能夠防止你受到熱傷害," -#~ "最高可到 2000華氏度。而且不會影響到你的體溫。" +#~ "一個小型機器人,尺寸像狗一樣,纏繞著\n" +#~ "紅色的血肉與漲大的脖子。它會在地上到\n" +#~ "處跑,喘氣,發出呼嚕聲。" #~ msgid "" -#~ "Inside your body is a fleet of tiny dormant robots. Once charged from " -#~ "your energy banks, they will flit about your body, repairing any damage." +#~ "An insane individual with many bloody holes\n" +#~ "on the sides of their shaved head. Some form\n" +#~ "of lobotomy has left it with a partially re-\n" +#~ "animated brain." #~ msgstr "" -#~ "你的身體有一組處於休眠中的奈米級機器人。當經由你的能量庫充電後,他們將會到" -#~ "達你身體的每個部分修復傷害。" +#~ "一個瘋狂的人,他們剃光頭的兩側有許多血洞。\n" +#~ "已被進行某種形式的前腦葉白質切除術,與某部\n" +#~ "分的腦子分離。" #~ msgid "" -#~ "Your memory has been enhanced with small quantum storage drives. Any " -#~ "time you start to forget a skill, you have a chance at retaining all " -#~ "knowledge, at the cost of a small amount of poweron." +#~ "A pale white man with a physically flawless athletic\n" +#~ "body and shaved head. His eyes are completely black\n" +#~ "as bloody tears pour forth from them." #~ msgstr "" -#~ "你的記憶能力藉由植入量子硬碟得到增強。當你只要開始技能衰減時,將有可能透過" -#~ "消耗些許能量來保留全部的知識。" - -#~ msgid "Put up the shelter" -#~ msgstr "架設帳篷" - -#~ msgid "%1$s uses dragon strike on %4$s" -#~ msgstr "%1$s 對 %4$s 使用神龍破" - -#~ msgid "%1$s use dragon strike on %4$s" -#~ msgstr "%1$s 對 %4$s 使用神龍破" - -#~ msgid "dragon style" -#~ msgstr "龍形拳" - -#~ msgid "%1$s writhes free from %4$s" -#~ msgstr "%1$s 空翻過 %4$s" - -#~ msgid "%1$s writhe free from %4$s" -#~ msgstr "%1$s 空翻過 %4$s" - -#~ msgid "%1$s snakebites %4$s" -#~ msgstr "%1$s 蛇形刁手 %4$s" - -#~ msgid "%1$s snakebite %4$s" -#~ msgstr "%1$s 蛇形刁手 %4$s" - -#~ msgid "snake style" -#~ msgstr "蛇形拳" - -#~ msgid "%1$s strikes %4$s with leopard fist" -#~ msgstr "%1$s 對 %4$s 使用豹拳" - -#~ msgid "%1$s strike %4$s with leopard fist" -#~ msgstr "%1$s 對 %4$s 使用豹拳" - -#~ msgid "%1$s swiftly jabs %4$s" -#~ msgstr "%1$s 跳刺 %4$s" - -#~ msgid "%1$s swiftly jab %4$s" -#~ msgstr "%1$s 跳刺 %4$s" - -#~ msgid "%1$s hand-pecks %4$s" -#~ msgstr "%1$s 手啄 %4$s" - -#~ msgid "%1$s hand-peck %4$s" -#~ msgstr "%1$s 手啄 %4$s" - -#~ msgid "crane style" -#~ msgstr "鶴形拳" - -#~ msgid "tiger style" -#~ msgstr "虎形拳" - -#~ msgid "%1$s brutally kicks %4$s" -#~ msgstr "%1$s 殘暴的踢 %4$s" - -#~ msgid "%1$s brutally kick %4$s" -#~ msgstr "%1$s 殘暴的踢 %4$s" - -#~ msgid "taekwondo" -#~ msgstr "跆拳道" +#~ "一個完美身形的純白色人,頭髮是剃光的。\n" +#~ "它的眼睛是完全黑色,並且有血液的眼淚從\n" +#~ "中流出。" #~ msgid "" -#~ "Taekwondo is the national sport of Korea, and was used by the South " -#~ "Korean\n" -#~ "army in the 20th century. Focused on kicks and punches, it also includes\n" -#~ "strength training; your blocks absorb extra damage the stronger you are." +#~ "A roughly spherical robot that hovers about\n" +#~ "five feet of the ground. Its front side is\n" +#~ "dominated by a huge eye and a flash bulb.\n" +#~ "Frequently used for reconaissance." #~ msgstr "" -#~ "跆拳道是韓國的國家運動,曾於20世紀用於南韓陸軍的訓練。\n" -#~ "注重於踢擊與拳擊的技巧,同時也包含了力量的訓練。\n" -#~ "你格擋時能夠依照你的力量屬性,吸收額外的傷害。" - -#~ msgid "ninjutsu" -#~ msgstr "忍術" +#~ "一個懸浮在約五呎空中的球形機器人。它的\n" +#~ "前面有著碩大的眼睛與閃爍的燈。常作為偵\n" +#~ "查的用途。" #~ msgid "" -#~ "Ninjutsu is a martial art and set of tactics used by ninja in feudal " -#~ "Japan.\n" -#~ "It focuses on rapid, precise, silent strikes. Ninjutsu is entirely " -#~ "silent.\n" -#~ "It also provides small combat bonuses the turn after moving a tile." +#~ "A utility robot designed for hazardous\n" +#~ "conditions. Its only means to stop intruders\n" +#~ "appears to involve thrashing around one of its\n" +#~ "multiple legs." #~ msgstr "" -#~ "忍術是封建時代的日本忍者使用的一套武術及一系列戰術。\n" -#~ "它注重於快速、精準、無聲的突擊。忍術是完全無聲的。\n" -#~ "它也能夠在每走一步時提供些微的戰鬥加成。" - -#~ msgid "%1$s power-kicks %4$s" -#~ msgstr "%1$s 對 %4$s 強力踢擊" - -#~ msgid "%1$s power-kick %4$s" -#~ msgstr "%1$s 對 %4$s 強力踢擊" - -#~ msgid "%1$s slaps %4$s" -#~ msgstr "%1$s 對 %4$s 甩巴掌" - -#~ msgid "%1$s slap %4$s" -#~ msgstr "%1$s 對 %4$s 甩巴掌" +#~ "一個設計於各種危險環境活動的機器人。\n" +#~ "它只能用它多條腿的其中之一來阻擋入侵\n" +#~ "者。" -#~ msgid "muay thai" -#~ msgstr "泰拳" +#~ msgid "hazmatbot" +#~ msgstr "災害處理機器人" #~ msgid "" -#~ "Also referred to as the \"Art of 8 Limbs,\" Muay Thai is a popular " -#~ "fighting\n" -#~ "technique from Thailand that uses powerful strikes. It does extra damage\n" -#~ "against large or strong opponents." +#~ "You just put on an article of clothing that provides ample storage " +#~ "space.\n" +#~ "This will allow you to carry much more stuff, but be aware that there is " +#~ "also\n" +#~ "a limit on the weight you can carry which depends on strength. The item " +#~ "you\n" +#~ "put on also encumbered your torso. This will make combat a little more\n" +#~ "difficult. To check encumberance, press @." #~ msgstr "" -#~ "泰拳是一門受歡迎的戰鬥技巧,在泰國當地被稱作\"八肢的藝術\",\n" -#~ "以強大的攻擊能力著稱。此武術能夠對大型或更強的敵人造成額外\n" -#~ "的傷害。" - -#~ msgid "%1$s counter-attacks %4$s" -#~ msgstr "%1$s 反擊 %4$s" - -#~ msgid "%1$s counter-attack %4$s" -#~ msgstr "%1$s 反擊 %4$s" - -#~ msgid "%1$s jabs %4$s" -#~ msgstr "%1$s 衝撞 %4$s" - -#~ msgid "%1$s jab %4$s" -#~ msgstr "%1$s 衝撞 %4$s" - -#~ msgid "krav maga" -#~ msgstr "以色列格鬥術" +#~ "你剛把一件能提供儲物空間的衣物穿上了。這樣能讓你容納更多的東西,\n" +#~ "但是要小心你攜帶物品時也受到負重限制,這部份是由力量屬性所決定。\n" +#~ "你穿戴上的這件物品同時也會讓你的軀幹造成累贅。會讓戰鬥時稍微增加\n" +#~ "難度。要檢視累贅度,按下@。" #~ msgid "" -#~ "Originating in Israel, Krav Maga is based on taking down an enemy quickly " +#~ "You just put on an article of clothing that provides physical " +#~ "protection.\n" +#~ "There are two types of damage that clothing defends against, bashing, " #~ "and\n" -#~ "effectively. It focuses on applicable attacks rather than showy or " -#~ "complex\n" -#~ "moves. Popular among police and armed forces everywhere." +#~ "cutting. Most monsters deal bashing damage, but cutting is often the " +#~ "more\n" +#~ "deadly of the two. Bullets are considered cutting damage." #~ msgstr "" -#~ "起源於以色列,以色列格鬥術的基本上是以有效率的方式\n" -#~ "迅速打倒敵人,它注重實用的攻擊,而非花俏或複雜的\n" -#~ "招式.在警察和武裝部隊中被廣泛的運用." - -#~ msgid "%1$s spin-kicks %4$s" -#~ msgstr "%1$s 迴旋踢 %4$s" - -#~ msgid "%1$s spin-kick %4$s" -#~ msgstr "%1$s 迴旋踢 %4$s" - -#~ msgid "%1$s spins and hits %4$s" -#~ msgstr "%1$s 迴旋並擊中 %4$s" - -#~ msgid "%1$s spin and hit %4$s" -#~ msgstr "%1$s 迴旋並擊中 %4$s" - -#~ msgid "%1$s low kicks %4$s" -#~ msgstr "%1$s 下段踢 %4$s" - -#~ msgid "%1$s low kick %4$s" -#~ msgstr "%1$s 下段踢 %4$s" - -#~ msgid "%1$s bluffs %4$s" -#~ msgstr "%1$s 對 %4$s 虛張聲勢" - -#~ msgid "%1$s bluff %4$s" -#~ msgstr "%1$s 對 %4$s 虛張聲勢" - -#~ msgid "capoeira" -#~ msgstr "巴西戰舞" +#~ "你剛把一件能提供物理保護的衣物穿上了。衣物能夠抵禦兩種形態的攻擊,\n" +#~ "鈍擊,與砍劈。大部分的怪物都使用鈍擊傷害,但砍劈造成的傷害較大。子\n" +#~ "彈也視為砍劈傷害。" #~ msgid "" -#~ "A dance-like style with its roots in Brazilian slavery, capoeira is " -#~ "focused\n" -#~ "on fluid movement and sweeping kicks. Moving a tile will boost attack " -#~ "and\n" -#~ "dodge; attacking boosts dodge, and dodging boosts attack." +#~ "You just put on an article of clothing that protects against the " +#~ "environment.\n" +#~ "The most common and imporant are respiratory devices, which will protect " +#~ "you\n" +#~ "against smoke, air-born toxins or organisms, and other common hazards.\n" +#~ "However, they also make it a little harder to breath when running, so " +#~ "you'll\n" +#~ "move more slowly. To check encumberance, press @." #~ msgstr "" -#~ "源自於巴西的一種類舞蹈武術,巴西戰舞注重於流暢的走位及掃踢。\n" -#~ "每走一步都能獲得攻擊與閃避加成;閃避成功也能得到攻擊加成。" - -#~ msgid "%1$s strikes %4$s" -#~ msgstr "%1$s 攻擊 %4$s" - -#~ msgid "%1$s strike %4$s" -#~ msgstr "%1$s 攻擊 %4$s" - -#~ msgid "tai chi" -#~ msgstr "太極拳" +#~ "你剛剛把能夠對抗環境因素的衣物穿戴上了。最常見和最重要的就是呼吸設備\n" +#~ "了,能夠讓你對抗煙塵、空氣中的毒素或微生物以及常見的災害。然而,同時\n" +#~ "也會讓你在奔跑時稍微增加難度,讓你速度變慢。要檢查累贅度,按下@。" #~ msgid "" -#~ "Though tai chi is often seen as a form of mental and physical exercise, " -#~ "it is\n" -#~ "a legitimate martial art, focused on self-defense. Its ability to absorb " -#~ "the\n" -#~ "force of an attack makes your Perception decrease damage further on a " -#~ "block." +#~ "If you press 'i' and then the letter of your weapon, you'll see its " +#~ "combat\n" +#~ "stats. Bashing damage ignores most armor, but varies greatly and " +#~ "requires\n" +#~ "strength. Cutting damage is a fixed amount, but is blocked by armor. " +#~ "The\n" +#~ "To-hit bonus affects your chances of hitting. The amount of time it takes " +#~ "to\n" +#~ "swing your melee weapon depends on both its size and weight; small, " +#~ "compact\n" +#~ "weapons are the fastest." #~ msgstr "" -#~ "太極拳是一種對心靈及身體進行修煉的武術,\n" -#~ "是一種合法的門派,重視自我防禦。它能夠吸\n" -#~ "收攻擊的力道,感知越高,傷害減少的越多。" - -#~ msgid "%1$s grabs %4$s" -#~ msgstr "%1$s 擒拿 %4$s" - -#~ msgid "%1$s grab %4$s" -#~ msgstr "%1$s 擒拿 %4$s" - -#~ msgid "judo" -#~ msgstr "柔道" +#~ "假如你按下'i'並選擇你的武器,你就能夠看到該武器的戰鬥數值。鈍擊傷害\n" +#~ "能忽略護甲保護,但都受到力量屬性限制傷害的大部分能力。砍劈傷害則是\n" +#~ "固定的數值,但是會被護甲影響。命中加成影響你擊中的機率。近戰武器的\n" +#~ "大小與重量則會影響揮動時耗費的時間;小而實在的武器速度是最快的。" #~ msgid "" -#~ "Judo is a martial art that focuses on grabs and throws, both defensive " -#~ "and\n" -#~ "offensive. It also focuses on recovering from throws; while using judo, " -#~ "you\n" -#~ "will not lose any turns to being thrown or knocked down." +#~ "Taking damage often causes pain. Small amounts of pain are tolerable, " +#~ "but as\n" +#~ "it gets worse your stats will drop and you will move much slower. To " +#~ "reduce\n" +#~ "pain, take painkillers like codeine, or simply wait it out." #~ msgstr "" -#~ "柔道是一項重視擒拿與投擲的武術,不分防禦及進攻。\n" -#~ "同時也注重從被投擲時快速恢復;當使用柔道時,你將\n" -#~ "不會被擊倒。" - -#~ msgid "%1$s disarms %4$s" -#~ msgstr "%1$s 繳械了 %4$s" - -#~ msgid "%1$s disarm %4$s" -#~ msgstr "%1$s 繳械了 %4$s" +#~ "受到傷害通常會造成疼痛。小數值的疼痛能夠被忍受,但是隨著數值的增加\n" +#~ "你各種屬性受到的影響也就越大。要減少疼痛,服用止痛藥,類似可待因,\n" +#~ "就能簡單的把疼痛降低。" -#~ msgid "%1$s throws %4$s" -#~ msgstr "%1$s 摔出 %4$s" +#~ msgid "" +#~ "When you kill a monster it will often leave behind a corpse. Corpses can " +#~ "be\n" +#~ "important sources of food, but you must Butcher them by standing on the\n" +#~ "corpse and pressing 'B'. You'll need a bladed weapon in your inventory,\n" +#~ "preferably a small, very sharp one. An unskilled butcher may only get a " +#~ "few\n" +#~ "pieces of meat, or none at all. Note that many monsters, such as " +#~ "zombies,\n" +#~ "leave tainted meat, unsuitable for consumption." +#~ msgstr "" +#~ "當你殺害了怪物通常會流下屍體。屍體有時是重要的食物來源,但是你必須\n" +#~ "先站在屍體上按下'B'來進行屠宰。你必須在物品欄中有刀刃的武器,最好是\n" +#~ "小而尖銳的。一個沒技巧的屠宰可能只能得到少量的肉,甚至完全沒有。注\n" +#~ "意,許多的怪物,像是殭屍,會留下感染的肉,這是不適合食用的。" -#~ msgid "%1$s throw %4$s" -#~ msgstr "%1$s 摔出 %4$s" +#~ msgid "" +#~ "You just placed a trap. Traps are permanent until set off, and can be " +#~ "an\n" +#~ "important defensive tactic, particularly when sleeping in unsafe " +#~ "territory.\n" +#~ "Try stepping on that _ -- don't worry, it's a harmless bubblewrap trap." +#~ msgstr "" +#~ "你剛剛放置了陷阱。陷阱是一種一旦設置了就會永久處於待觸發狀態的重\n" +#~ "要防禦機制,特別是當你要在不安全的地區進行睡眠時。試試看踩到 _ 的\n" +#~ "符號上 -- 別擔心,那只是無害的泡泡紙陷阱。" -#~ msgid "%1$s feints at %4$s" -#~ msgstr "%1$s 對 %4$s 使用虛擊。" +#~ msgid "" +#~ "You're carrying more volume than you have storage for, which means you " +#~ "are\n" +#~ "carrying some stuff in the crook of your arm or in some other awkward " +#~ "manner.\n" +#~ "While overloaded like this, you will suffer SEVERE encumberment " +#~ "penalties,\n" +#~ "making combat dangerous. Either drop an item, or possibly wield " +#~ "something--\n" +#~ "the object you are wielding does not take up inventory space." +#~ msgstr "" +#~ "你正攜帶著超出你儲物空間體積的狀態,也就是代表你正使用手臂用奇怪的方式\n" +#~ "帶著東西。當你像這樣子超載,你將會受到許多的累贅懲罰,讓戰鬥時陷入危險\n" +#~ "狀態。你可以選擇丟棄物品,或是手持該物品--你手持的物品不會計算在物品欄的\n" +#~ "儲物空間中。" -#~ msgid "%1$s feint at %4$s" -#~ msgstr "%1$s 對 %4$s 使用虛擊。" +#~ msgid ". Requires Unarmed Skill of " +#~ msgstr ". 需要徒手技能達到 " -#~ msgid "aikido" -#~ msgstr "合氣道" +#~ msgid "" +#~ "A small, very sharp knife. Causes decent damage but is difficult to hit " +#~ "with. Its small tip allows for a precision strike in the hands of the " +#~ "skilled. It is too small to butcher corpses with." +#~ msgstr "" +#~ "小且鋒利的美工刀,具有良好的殺傷力但是很難命中物體,細小的刀尖很適合高手對" +#~ "付頭部區域。X-Acto美工刀不適合切割屍體或獵物,因為實在太小把了。" -#~ msgid "%1$s karate chops %4$s" -#~ msgstr "%1$s 用手刀劈 %4$s" +#~ msgid "" +#~ "An M72 LAW, packed in its storage form. (a)ctivate it to pop it out and " +#~ "make it ready to fire. Once activated, it cannot be repacked." +#~ msgstr "M72 66火箭彈,按(a)可以啟動它並且準備發射,一但啟動就不能解除了。" -#~ msgid "%1$s karate chop %4$s" -#~ msgstr "%1$s 用手刀劈 %4$s" +#~ msgid "" +#~ "A very large triffid, with a particularly\n" +#~ "vicious sting and thick bark. As it\n" +#~ "moves, plant matter drops off its body\n" +#~ "and immediately takes root." +#~ msgstr "" +#~ "一個非常大的食人樹,有著劇毒\n" +#~ "的刺及齒莖。隨著它的移動,會\n" +#~ "散佈立即紮根的種子。" -#~ msgid "%1$s blocks %4$s" -#~ msgstr "%1$s 格擋 %4$s" +#~ msgid "Bandage" +#~ msgstr "繃帶" -#~ msgid "%1$s block %4$s" -#~ msgstr "%1$s 格擋 %4$s" +#~ msgid "Disinfectant" +#~ msgstr "消毒" -#~ msgid "%1$s quickly punches %4$s" -#~ msgstr "%1$s 快速的出拳打 %4$s" +#~ msgid "" +#~ "A bow with wheels that fires high velocity arrows. Weaker people can use " +#~ "compound bows more easily. Arrows fired from this weapon have a good " +#~ "chance of remaining intact for re-use. It requires 8 strength to fire" +#~ msgstr "" +#~ "帶有滑輪的弓箭,力量小的人可以用它輕鬆發射複合材質弓箭,射出的弓箭也可以有" +#~ "較高的機率重複使用。它需要8點力量才能使用。" -#~ msgid "%1$s quickly punch %4$s" -#~ msgstr "%1$s 快速的出拳打 %4$s" +#~ msgid "" +#~ "A six-foot wooden bow that fires feathered arrows. This takes a fair " +#~ "amount of strength to draw. Arrows fired from this weapon have a good " +#~ "chance of remaining intact for re-use. It requires 10 strength to fire" +#~ msgstr "" +#~ "一把六呎長的木弓,以羽毛弓箭為彈藥,它需要不少力量拉滿弓,射出的弓箭有較高" +#~ "的機率重複使用。它需要10點力量才能使用。" -#~ msgid "karate" -#~ msgstr "空手道" +#~ msgid "bow-like_object" +#~ msgstr "像弓的東西" #~ msgid "" -#~ "Karate is a popular martial art, originating from Japan. It focuses on\n" -#~ "rapid, precise attacks, blocks, and fluid movement. A successful hit " -#~ "allows\n" -#~ "you an extra dodge and two extra blocks on the following round." +#~ "An object that looks like a bow from afar, but closer inspection will " +#~ "reveal its simple nature. This is a bow someone with absolutely no " +#~ "knowledge of bows would make. Solely based on popular depictions from " +#~ "movies and video games, this object merely tries to look and act like a " +#~ "bow, nothing more." #~ msgstr "" -#~ "空手道是來自於日本的有名流派。其專注\n" -#~ "於快速精準的攻擊阻擋及靈活的走位。攻擊\n" -#~ "命中能讓你能夠增加額外的閃避及格擋。" +#~ "一個看起來像弓的東西,但仔細一看卻又不像。這是由新手嘗試模仿電影或電動製造" +#~ "的弓,除了外型與功能有點像,與真正的弓差太多了。" -#~ msgid "A common hydraulic jack, used when changing tires." -#~ msgstr "一個常見的液壓千斤頂,通常在換輪胎時會用到。" +#~ msgid "10kg bow" +#~ msgstr "10公斤弓" -#~ msgid "Error: Item Missing." -#~ msgstr "錯誤: 找不到物品。" +#~ msgid "" +#~ "Made using the most rudimentary knowledge of bows, this short and weak " +#~ "bow is just enough to take down small game in a shot or two." +#~ msgstr "" +#~ "用基礎知識造出來的弓,十分的短且無攻擊能力,只能拿來打打遊樂場的射箭遊戲。" -#~ msgid "MODS/BIONICS" -#~ msgstr "模組/生化插件" +#~ msgid "20kg_bow" +#~ msgstr "20公斤弓" -#~ msgid "MEDICINE/DRUGS" -#~ msgstr "藥物" +#~ msgid "" +#~ "A bow with a semi-powerful draw. Its relatively low draw weight gives a " +#~ "good draw speed, as well as precision for lack of strain on the user when " +#~ "the bow is fully drawn." +#~ msgstr "" +#~ "一把中等磅數的弓。它的輕量磅數相對讓你拉弓更為快速,不過即使是拉到最滿還是" +#~ "缺乏張力而欠缺準度。" -#~ msgid "Wield item: Press - to choose a style" -#~ msgstr "手持物品: 按 - 選擇招式" +#~ msgid "30kg bow" +#~ msgstr "30公斤弓" -#~ msgid "Butcher the %s corpse?" -#~ msgstr "屠宰 %s 的屍體?" +#~ msgid "" +#~ "With a draw weight slightly above what professional users use, this bow " +#~ "can take down medium game, and even large game with enough skill." +#~ msgstr "" +#~ "拉弓力量略高於職業使用者的弓,這把弓能輕易的贏下中型比賽,只要有足夠技巧要" +#~ "贏大型比賽也是可能的。" -#~ msgid "You need a charged UPS." -#~ msgstr "你需要有電的UPS。" +#~ msgid "30kg bow compound" +#~ msgstr "30公斤複合弓" -#~ msgid "Drop" -#~ msgstr "丟棄到" +#~ msgid "" +#~ "A bow that uses a set of pulleys to take the strain off the user when a " +#~ "bow is fully drawn to provide better accuracy. This does not mean however " +#~ "that the draw weight on these must be less than a bow with similar draw " +#~ "weight." +#~ msgstr "" +#~ "一把帶有滑輪的複合弓,可以減少使用者拉滿弓時的負擔以增加精準度。但不代表拉" +#~ "弓的磅數會比相似的弓低。" -#~ msgid "Refill vehicle" -#~ msgstr "車輛加油" +#~ msgid "40kg bow" +#~ msgstr "40公斤弓" -#~ msgid "Have a drink?" -#~ msgstr "喝下?" +#~ msgid "" +#~ "A bow with a draw strength rarely seen in modern day. The bow's power is " +#~ "akin to those of big game hunters in the safari. However, due to its draw " +#~ "weight, the draw time is slower, and the strain of the draw hinders " +#~ "accuracy." +#~ msgstr "" +#~ "在現代很少見到需要如此拉弓力量的弓。這把弓的力量是用於在野外狩獵的大型比賽" +#~ "居多。因為拉弓力量大,所以拉滿的時間也較長,也容易造成準確度不高的情形。" -#~ msgid "You dont see any items around you!" -#~ msgstr "你周圍都沒有東西!" +#~ msgid "50kg bow" +#~ msgstr "50公斤弓" -#~ msgid "Peek" -#~ msgstr "窺" +#~ msgid "" +#~ "Among the most distinctive things about this bow are the curled arms that " +#~ "turn away from the archer at the ends. Due to high workmanship, the high " +#~ "draw weight is much more efficiently transferred into throwing the arrow. " +#~ "The strain does however put a great deal of strain onto the user, " +#~ "lowering both accuracy and rate of fire." +#~ msgstr "" +#~ "關於這把弓其中最有特色的就是末端向外彎曲的弓臂。由於高做工的高拉伸重量,更" +#~ "有效地轉移動能到箭矢上。但也由於需要耗費使用者大量的力量,所以降低了準度與" +#~ "連射速度。" -#~ msgid "Examine" -#~ msgstr "檢視" +#~ msgid "65kg bow" +#~ msgstr "65公斤弓" -#~ msgid "Control vehicle" -#~ msgstr "控制車輛" +#~ msgid "" +#~ "The massive frame of this weapon belies its monstrous power and a draw " +#~ "weight at the edge of human capability. The immense strain that this bow " +#~ "puts on the user comes at a drastic cost of accuracy and rate of fire, " +#~ "but the power and range rewarded is unparalleled." +#~ msgstr "" +#~ "要拉動這件大型武器的力量已經在人類能力的極限了。雖然巨大的拉弓力量讓使用者" +#~ "降低許多準度與連射速度,但是得到的是無與倫比的攻擊力量與射擊距離。" -#~ msgid " where? (Direction button)" -#~ msgstr " 哪邊? (方向鍵)" +#~ msgid "Revive zombies" +#~ msgstr "殭屍復活" -#~ msgid "The corpse is now thoroughly pulped." -#~ msgstr "這屍體變成徹底的肉醬了" +#~ msgid "Allow zombies to revive after a certain amount of time." +#~ msgstr "允許殭屍在一段時間後復活" -#~ msgid "You damage the %s!" -#~ msgstr "你對 %s 造成傷害!" +#~ msgid "Sort Crafting menu" +#~ msgstr "製作物品選單排序" -#~ msgid "You greatly damage the %s!" -#~ msgstr "你對 %s 造成大量傷害!" +#~ msgid "" +#~ "If true, the crafting menus will display recipes that you can craft " +#~ "before other recipes" +#~ msgstr "設定為 True ,製作選單將會把你能製作的物品優先排在前面。" -#~ msgid "You swing at the corpse." -#~ msgid_plural "You swing at the corpses." -#~ msgstr[0] "你進行虐屍。" +#~ msgid "It is too dark to plant anything now." +#~ msgstr "光線太暗無法種植。" -#~ msgid "Smash" -#~ msgstr "砸" +#~ msgid "smash" +#~ msgstr "敲擊" -#~ msgid "Close" -#~ msgstr "關閉" +#, fuzzy +#~ msgid "24 hour time" +#~ msgstr "時間格式" -#~ msgid "Open" -#~ msgstr "開啟" +#, fuzzy +#~ msgid "%1$s sweep-kicks %4$s" +#~ msgstr "%1$s 迴旋踢 %4$s" -#~ msgid "Martial arts gained." -#~ msgstr "武術習得." +#, fuzzy +#~ msgid "%1$s side-kicks %4$s" +#~ msgstr "%1$s 迴旋踢 %4$s" -#~ msgid "%s Stop %s?" -#~ msgstr "%s 停止 %s?" +#, fuzzy +#~ msgid "%1$s surprise attack %4$s" +#~ msgstr "%1$s 反擊 %4$s" -#~ msgid "%s Stop %s? (Y)es, (N)o, (I)gnore further distractions and finish." -#~ msgstr "%s 停止 %s? (Y)是, (N)否, (I)忽略所有提示並專心完成." +#, fuzzy +#~ msgid "%1$s flying knees %4$s" +#~ msgstr "%1$s 砍中 %4$s" -#~ msgid "training" -#~ msgstr "訓練" +#, fuzzy +#~ msgid "%1$s elbows %4$s" +#~ msgstr "%1$s 摔出 %4$s" -#~ msgid "pumping gas" -#~ msgstr "抽取汽油" +#, fuzzy +#~ msgid "%1$s elbow %4$s" +#~ msgstr "%1$s 摔出 %4$s" -#~ msgid "foraging" -#~ msgstr "覓食" +#, fuzzy +#~ msgid "%1$s uses %2$s %3$s to sweep %4$s" +#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" -#~ msgid "disassembly" -#~ msgstr "拆解" +#, fuzzy +#~ msgid "%1$s use %2$s %3$s to sweep %4$s" +#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" -#~ msgid "butchering" -#~ msgstr "屠宰中" +#, fuzzy +#~ msgid "%1$s uses %2$s %3$s to wrap up %4$s" +#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" -#~ msgid "waiting" -#~ msgstr "等待中" +#, fuzzy +#~ msgid "%1$s use %2$s %3$s to wrap up %4$s" +#~ msgstr "%1$s 使用 %2$s %3$s 來投擲 %4$s" -#~ msgid "reloading" -#~ msgstr "裝填中" +#, fuzzy +#~ msgid "%1$s quickly strikes with %2$s %3$s at %4$s" +#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" -#~ msgid "reading" -#~ msgstr "閱讀中" +#, fuzzy +#~ msgid "%1$s quickly strike with %2$s %3$s at %4$s" +#~ msgstr "%1$s 揮中 %2$s %3$s 的 %4$s" -#~ msgid "playing" -#~ msgstr "播放中" +#, fuzzy +#~ msgid "Very Heavily Bleeding " +#~ msgstr "高溫度依賴症" -#~ msgid "crafting" -#~ msgstr "製作物品中" +#, fuzzy +#~ msgid "Cart" +#~ msgstr "高爾夫球車" -#~ msgid "whatever" -#~ msgstr "算了" +#, fuzzy +#~ msgid "Enter new cart name:" +#~ msgstr "輸入新的車輛名稱:" -#~ msgid "You learn %s." -#~ msgstr "你學習 %s." +#, fuzzy +#~ msgid "Start cart construction" +#~ msgstr "開始建設車輛" -#~ msgid "Study %s?" -#~ msgstr "鑽研 %s?" +#~ msgid "" +#~ "Choose the tileset you want to use. Only applicable on SDL builds. " +#~ "Requires restart." +#~ msgstr "選擇你想要使用的圖像包。只有SDL版本才有用。必須重新啟動遊戲。" -#~ msgid "You haven't had anything to drink in 2 days!" -#~ msgstr "你兩天沒喝水了!" +#~ msgctxt "Main Menu" +#~ msgid "eset" +#~ msgstr "重置" -#~ msgid "4 days... no water.." -#~ msgstr "四天了... 都沒水喝..." +#~ msgid "" +#~ "An eastern timber rattlesnake, one of New England's most poisonous snakes." +#~ msgstr "一隻東部的森林響尾蛇,新英格蘭地區最毒的蛇之一。" -#~ msgid "You haven't eaten in over a week!" -#~ msgstr "你一整個星期沒進食了!" +#~ msgid "A small, omnivorous marsupial native to North America." +#~ msgstr "一隻小型的雜食性有袋動物,原產於北美。" -#~ msgid "The sludge is thick and sticky." -#~ msgstr "污泥黏稠." +#~ msgid "" +#~ "A small mammal native to North America, distinctive for its dexterous " +#~ "paws and facial markings." +#~ msgstr "一種小型哺乳動物,原產於北美,其靈巧的爪子和臉部標記為其特色。" -#~ msgid "Your bite wound feels swollen and painful." -#~ msgstr "你被咬傷的地方變得腫脹和疼痛." +#, fuzzy +#~ msgid "" +#~ "A plant that grows as high as your head,\n" +#~ "with one thick, bark-coated stalk\n" +#~ "supporting a flower-like head with a paralyzing\n" +#~ "sting within." +#~ msgstr "" +#~ "一株植物與你的身高差不多,\n" +#~ "有著厚實,齒狀的莖\n" +#~ "頂部有著花狀的頭部以及\n" +#~ "尖刺。" -#~ msgid "Your bite wound really hurts." -#~ msgstr "你被咬傷的地方很痛." +#~ msgid "" +#~ "A massive, mutated freshwater shellfish,\n" +#~ "resembling a humongous lobster." +#~ msgstr "一個龐大的突變甲殼魚類,像是一個巨大的龍蝦。" #~ msgid "" -#~ "Strength - 1; Intelligence - 2\n" -#~ "You stop to scratch yourself frequently; high intelligence helps you " -#~ "resist\n" -#~ "this urge." -#~ msgstr "" -#~ "力量 - 1; 智力 - 2\n" -#~ "你不時停下來開始抓癢; 高的智力能讓你抵抗\n" -#~ "這種狀況." +#~ "A large and colorful game bird native to the forests of North America." +#~ msgstr "一隻大而多彩的鳥,原產於北美的森林。" +#, fuzzy #~ msgid "" -#~ "Speed -40%\n" -#~ "You can feel the tiny spores sinking directly into your flesh." +#~ "Small metal objects covered with many sharp points. If an unsuspecting " +#~ "victim steps on it, they'll get a spine through the foot." #~ msgstr "" -#~ "速度 -40%\n" -#~ "你可以感受到有微小孢子正潛入你的血肉之中." +#~ "由木板與豎立的鐵釘合成的陷阱。假如有粗心的獵物踩上去,腳掌就會被刺穿。" -#~ msgid "Pus Filled Wound" -#~ msgstr "充滿膿液的傷口" +#~ msgid "RPG-7 Ammo" +#~ msgstr "RPG-7彈藥" -#~ msgid "Painful Infected Wound" -#~ msgstr "疼痛的感染傷口" +#~ msgid "Lumpy white soup made of clams and potatoes." +#~ msgstr "使用蛤蜊與馬鈴薯做成的白色濃湯。" -#~ msgid "Infected Wound" -#~ msgstr "感染的咬傷" +#~ msgid "An empty hull from a 5x50mm flechette round." +#~ msgstr "一個空的5x50mm鋼鏢彈彈殼。" -#~ msgid "Painful Bite Wound" -#~ msgstr "疼痛的咬傷" +#~ msgid "Ammunition for the RPG-7." +#~ msgstr "RPG-7的專用彈藥。" -#~ msgid "Bite Wound" -#~ msgstr "咬傷" +#~ msgid "A very loud horn, usually found on large trucks like semis." +#~ msgstr "很大聲的喇叭,通常會用在類似貨櫃車上。" -#~ msgid "Bugs Under Skin" -#~ msgstr "皮下寄生蟲" +#~ msgid "" +#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. Light it, and the " +#~ "ball game will REALLY heat up." +#~ msgstr "一根堅硬的球棒,裹著汽油浸濕的布條。點燃它,讓球賽變得更加火熱吧!" -#~ msgid "Bleeding" -#~ msgstr "流血" +#~ msgid "" +#~ "A sturdy wood bat, wrapped in gasoline-soaked rags. It is burning " +#~ "brightly, and makes it much easier to see the baselines at night games " +#~ "(It also makes the umpire FAR more likely to call a ball instead of a " +#~ "strike)." +#~ msgstr "" +#~ "一根堅硬的球棒,裹著汽油浸濕的布條。它已經點燃並發亮,讓你更容易看清楚夜晚" +#~ "中的壘包(這也讓裁判更容易判壞球)。" -#~ msgid "Spores" -#~ msgstr "孢子" +#~ msgid "" +#~ "A stout collapsible spade commonly used by military forces and favored by " +#~ "hikers." +#~ msgstr "一個可折疊的粗壯鐵鍬常用於軍隊和受到遠足者的愛用。" -#~ msgid "You feel feverish and nauseous, your wound has begun to turn green." -#~ msgstr "你覺得發燒,噁心,你的傷口已經開始變綠" +#~ msgid "A simple bulb horn, found on many bicycles. Honk honk." +#~ msgstr "簡單的球狀喇叭,許多腳踏車上都有裝。叭噗叭噗。" -#~ msgid "%s starts scratching herself all over!" -#~ msgstr "%s 開始對著全身拼命抓癢!" +#~ msgid "" +#~ "A shell filled with tiny steel darts. Extremely damaging, plus the spread " +#~ "makes it very accurate at short range. Slices through most forms of armor " +#~ "with ease." +#~ msgstr "" +#~ "一個裝滿了小鋼鏢的散彈。能造成極大傷害,在近距離非常準。能夠割開大部分形式" +#~ "的裝甲。" -#~ msgid "%s starts scratching himself all over!" -#~ msgstr "%s 開始對著全身拼命抓癢!" +#~ msgid "" +#~ "A portable charcoal smoker. Good for weekend barbecuing and preserving " +#~ "meat with smoke." +#~ msgstr "一個攜帶式的碳烤爐。適合假日出遊烤肉。" -#~ msgid "You start scratching yourself all over!" -#~ msgstr "你開始對著全身拼命抓癢!" +#~ msgid "" +#~ "A pipe whose ends have been bent and hammered flat to resemble a crowbar." +#~ msgstr "一跟末端被彎折並敲平的鐵管,能當做撬棍使用。" -#~ msgid "Contracted the infection." -#~ msgstr "受到感染。" +#~ msgid "A handful of large, purple plums. It is good for your digestion." +#~ msgstr "手掌大小的紫色李子。有助於消化。" -#~ msgid "There's bugs crawling under your skin!" -#~ msgstr "有蟲在你的皮膚底下爬!" +#~ msgid "" +#~ "A dry and tasteless bread product capable of remaining edible without " +#~ "spoilage for vast lengths of time." +#~ msgstr "乾而無味的麵包,能夠拉長不變質的時間。" -#~ msgid "You disassemble the item into its components." -#~ msgstr "你把這個物品拆解成數個元件." +#~ msgid "A car horn meant to be attached to a car's electrical system." +#~ msgstr "連接在汽車電子系統的汽車喇叭。" -#~ msgid "Can't move furniture there! Choose a direction with open floor." -#~ msgstr "無法把家具移到那! 選擇有開闊地的方向." +#, fuzzy +#~ msgid "" +#~ "A bedroll made of pelts which can be rolled up for transport. Insulates " +#~ "you from the floor, making it easier to sleep" +#~ msgstr "一張緊密卷曲的睡墊。可以讓你跟地板有所阻隔,更容易入睡。" -#~ msgid "Press a direction for the furniture to move (. to cancel):" -#~ msgstr "按下要把家具移動的方向 (按 . 取消):" +#~ msgid " misses!" +#~ msgstr " 未命中!" -#~ msgid "You're not strong enough!" -#~ msgstr "你不夠強壯!" +#~ msgid " barely misses!" +#~ msgstr " 差點沒命中!" -#~ msgid "Activate your bio lockpick" -#~ msgstr "啟動你的生化開鎖器" +#~ msgid "l, 6, or right arrow" +#~ msgstr "l, 6, 或右方向鍵" -#~ msgid "create an EMP" -#~ msgstr "產生電磁脈衝" +#~ msgid "j/k, 8/2, or arrows" +#~ msgstr "j/k, 8/2, 或方向鍵" -#~ msgid "Start a fire" -#~ msgstr "生了火" +#~ msgid "h, 4, or left arrow" +#~ msgstr "h, 4, 或左方向鍵" -#~ msgid "Too many itens" -#~ msgstr "太多物品" +#~ msgid "(Press spacebar to toggle)" +#~ msgstr "按空白鍵切換" -#~ msgid "You have a craving for crack." -#~ msgstr "你對快克上癮了。" +#~ msgid " select a statistic." +#~ msgstr " 選擇屬性." -#~ msgid "You have a craving for cocaine." -#~ msgstr "你對古柯鹼上癮了。" +#~ msgctxt "Main Menu" +#~ msgid "oad" +#~ msgstr "讀取" -#~ msgid "You have a speed craving." -#~ msgstr "你對興奮劑上癮了。" +#~ msgctxt "Main Menu" +#~ msgid "elp" +#~ msgstr "說明" -#~ msgid "You have a craving." -#~ msgstr "你出現上癮症狀。" +#~ msgid "" +#~ "Your body has bionics worth millions payed by public taxes. The " +#~ "government employed you as a spy: you have night vision, an alarm and a " +#~ "hacking module powered by your own metabolism." +#~ msgstr "" +#~ "你的身體裝有由納稅人提供的百萬等級生化插件。政府指派你進行間諜活動:你擁有" +#~ "植入式夜視儀、警報系統、以及手指駭客,由電池系統所供電。" -#~ msgid "You have an opiate craving." -#~ msgstr "你藥物上癮了。" +#~ msgid "" +#~ "You were on your way to collect your check, when your pimp tried to kill " +#~ "you. You wish that it wasn't a common occurence. You start with the last " +#~ "of your stash and a strong crack addiction." +#~ msgstr "" +#~ "你正在前往收皮肉錢的路上,結果馬伕變成殭屍差點吃了你。你只希望這只是個案。" +#~ "你一開始只剩下一點點能安撫你強烈快克成癮的毒品了。" -#~ msgid "You have an alcohol craving." -#~ msgstr "你酒精上癮了。" +#~ msgid "" +#~ "Before the Apocalypse, you turned to Heroin to soothe your many problems. " +#~ "Now, your habit is your only comfort and your only drive." +#~ msgstr "" +#~ "在大災變之前,你吸食海洛因來逃避你的問題。現在,你的毒癮是你唯一的安慰。" -#~ msgid "You have a caffeine craving." -#~ msgstr "你咖啡因上癮了。" +#~ msgid "Hardcore" +#~ msgstr "玻璃娃娃" -#~ msgid "You have a nicotine craving." -#~ msgstr "你尼古丁的癮頭犯了。" +#~ msgid "" +#~ "There's no room in your inventory for the %s, and you can't unwield your " +#~ "%s." +#~ msgstr "你的物品欄放不下 %s ,所以你無法把手中的 %s 收回。" + +#~ msgid "Monster Spotted!" +#~ msgstr "發現怪物!" + +#~ msgid "Normal" +#~ msgstr "正常" diff --git a/lang/update_pot.sh b/lang/update_pot.sh index ae4db32989730..85fb3cb6ad79a 100755 --- a/lang/update_pot.sh +++ b/lang/update_pot.sh @@ -17,7 +17,24 @@ fi if python lang/extract_json_strings.py then # update cataclysm-dda.pot - xgettext -d cataclysm-dda -F -c~ -o lang/po/cataclysm-dda.pot --keyword=_ --keyword=pgettext:1c,2 *.cpp *.h lang/json/*.py + xgettext --default-domain="cataclysm-dda" \ + --sort-by-file \ + --add-comments="~" \ + --output="lang/po/cataclysm-dda.pot" \ + --keyword="_" \ + --keyword="pgettext:1c,2" \ + src/*.cpp src/*.h lang/json/*.py + # Fix msgfmt errors + if [ "`head -n1 lang/po/cataclysm-dda.pot`" == "# SOME DESCRIPTIVE TITLE." ] + then + package="cataclysm-dda" + version=$(grep '^VERSION *= *' Makefile | tr -d [:space:] | cut -f 2 -d '=') + pot_file="lang/po/cataclysm-dda.pot" + sed -e "1,6d" \ + -e "s/^\"Project-Id-Version:.*\"$/\"Project-Id-Version: $package $version\\\n\"/1" \ + -e "/\"Plural-Forms:.*\"$/d" $pot_file > $pot_file.temp + mv $pot_file.temp $pot_file + fi else echo 'UPDATE ABORTED' cd $oldpwd diff --git a/lua/autoexec.lua b/lua/autoexec.lua new file mode 100644 index 0000000000000..d03b229a52ef8 --- /dev/null +++ b/lua/autoexec.lua @@ -0,0 +1,47 @@ +dofile("lua/class_definitions.lua") + +function generate_metatable(name, class) + return { + __index = function(userdata, key) + local attribute = class.attributes[key] + if attribute then + return game[name.."_get_"..key](userdata) + elseif class.functions[key] then + return game[name.."_"..key] + else + error("Unknown "..name.." attribute: "..key) + end + end, + + __newindex = function(userdata, key, value) + local attribute = class.attributes[key] + if attribute then + if not attribute.writable then + error("Attempting to set read-only item attribute: "..key) + end + return game[name.."_set_"..key](userdata, value) + else + error("Unknown "..name.." attribute: "..key) + end + end, + + __gc = game.__gc + } +end + +item_metatable = generate_metatable("item", classes.item) +player_metatable = generate_metatable("player", classes.player) +uimenu_metatable = generate_metatable("uimenu", classes.uimenu) +map_metatable = generate_metatable("map", classes.map) +ter_t_metatable = generate_metatable("ter_t", classes.ter_t) +monster_metatable = generate_metatable("monster", classes.monster) + +outdated_metatable = { + __index = function(userdata, key) + error("Attempt to access outdated gamedata.") + end, + + __newindex = function(table, key, value) + error("Attempt to access outdated gamedata.") + end +} diff --git a/lua/class_definitions.lua b/lua/class_definitions.lua new file mode 100644 index 0000000000000..d7c8cc4245a45 --- /dev/null +++ b/lua/class_definitions.lua @@ -0,0 +1,250 @@ +-- Defines which attributes are exported by our C++ classes. + +classes = { + player = { + attributes = { + posx = { + type = "int", + writable = false + }, + posy = { + type = "int", + writable = false + }, + + hunger = { + type = "int", + writable = true + }, + thirst = { + type = "int", + writable = true + }, + fatigue = { + type = "int", + writable = true + }, + health = { + type = "int", + writable = false + }, + + name = { + type = "string", + writable = false + }, + + male = { + type = "bool", + writable = false + }, + + str_cur = { + type = "int", + writable = false + }, + dex_cur = { + type = "int", + writable = false + }, + int_cur = { + type = "int", + writable = false + }, + per_cur = { + type = "int", + writable = false + }, + + str_max = { + type = "int", + writable = false + }, + dex_max = { + type = "int", + writable = false + }, + int_max = { + type = "int", + writable = false + }, + per_max = { + type = "int", + writable = false + }, + + stim = { + type = "int", + writable = true + } + }, + functions = { + has_disease = { + args = { "string" }, + rval = "bool" + }, + rem_disease = { + args = { "string" }, + rval = nil + }, + add_disease = { + args = { "string", "int", "int", "int" }, + rval = nil + }, + morale_level = { + args = { }, + rval = "int" + }, + is_npc = { + args = {}, + rval = "bool" + } + } + }, + item = { + attributes = { + }, + functions = { + tname = { + args = { "game" }, + rval = "string" + }, + made_of = { + args = { "string" }, + rval = "bool" + } + } + }, + uimenu = { + attributes = { + title = { + type = "string", + writable = true + }, + selected = { + type = "int", + writable = false + } + }, + functions = { + show = { + args = {}, + rval = nil + }, + query = { + args = { "bool" }, + rval = nil + }, + addentry = { + args = { "string" }, + rval = nil + } + } + }, + map = { + attributes = { + }, + functions = { + ter = { + args = {"int", "int"}, + rval = "int" + } + } + }, + ter_t = { + attributes = { + name = { + type = "string", + writable = false + }, + movecost = { + type = "int", + writable = false + } + }, + functions = { + } + }, + monster = { + attributes = { + hp = { + type = "int", + writable = true + }, + moves = { + type = "int", + writable = true + }, + friendly = { + type = "int", + writable = true + } + }, + functions = { + name = { + args = {}, + rval = "string" + }, + attack_at = { + args = {"int", "int"}, + rval = "int" + }, + make_friendly = { + args = {}, + rval = nil + }, + posx = { + args = {}, + rval = "int" + }, + posy = { + args = {}, + rval = "int" + } + } + } + +} + +global_functions = { + add_msg = { + cpp_name = "g->add_msg", + args = { "cstring" }, + rval = nil + }, + string_input_popup = { + cpp_name = "string_input_popup", + args = { "string", "int", "string" }, + rval = "string" + }, + create_uimenu = { + cpp_name = "create_uimenu", + args = {}, + rval = "uimenu" + }, + get_terrain_type = { + cpp_name = "get_terrain_type", + args = {"int"}, + rval = "ter_t" + }, + rng = { + cpp_name = "rng", + args = {"int", "int"}, + rval = "int" + }, + distance = { + cpp_name = "rl_dist", + args = {"int", "int", "int", "int"}, + rval = "int" + }, + trig_dist = { + cpp_name = "trig_dist", + args = {"int", "int", "int", "int"}, + rval = "int" + }, + remove_item = { + cpp_name = "game_remove_item", + args = {"int", "int", "item"}, + rval = nil + } +} diff --git a/lua/generate_bindings.lua b/lua/generate_bindings.lua new file mode 100644 index 0000000000000..1a034302c800b --- /dev/null +++ b/lua/generate_bindings.lua @@ -0,0 +1,304 @@ +-- Tool to automatically generate bindings for lua. +-- The bindings are generated as C++ and lua files, which are +-- then included into the cataclysm source. + + +local br = "\n" +local tab = " " + +-- Generic helpers to generate C++ source code chunks for use in our lua binding. +--------------------------------------------------------------------------------- + +-- Convert a given type such as "int", "bool" etc to a lua type, such +-- as LUA_TNUMBER etc, needed for typechecking mostly. +function member_type_to_lua_type(member_type) + if member_type == "int" or member_type == "float" then + return "LUA_TNUMBER" + elseif member_type == "string" or member_type == "cstring" then + return "LUA_TSTRING" + elseif member_type == "bool" then + return "LUA_TBOOLEAN" + else + for name, value in pairs(classes) do + if name == member_type then + return "LUA_TUSERDATA" + end + end + end +end + +-- Convert a given type such as "string" to the corresponding C++ +-- type string, e.g. "std::string" +function member_type_to_cpp_type(member_type) + if member_type == "bool" then return "int" + elseif member_type == "cstring" then return "const char*" + elseif member_type == "string" then return "std::string" + else + for name, value in pairs(classes) do + if name == member_type then + return member_type.."*" + end + end + end + + return member_type +end + +-- Returns code to retrieve a lua value from the stack and store it into +-- a C++ variable +function retrieve_lua_value(out_variable, value_type, stack_position) + local cpp_value_type = member_type_to_cpp_type(value_type) + if value_type == "int" or value_type == "float" then + return cpp_value_type .. " "..out_variable.." = ("..cpp_value_type..") lua_tonumber(L, "..stack_position..");" + elseif value_type == "bool" then + return cpp_value_type .. " "..out_variable.." = ("..cpp_value_type..") lua_toboolean(L, "..stack_position..");" + elseif value_type == "string" or value_type == "cstring" then + return cpp_value_type .. " "..out_variable.." = ("..cpp_value_type..") lua_tostring(L, "..stack_position..");" + elseif member_type_to_lua_type(value_type) == "LUA_TUSERDATA" then + return cpp_value_type .. " "..out_variable.." = ("..cpp_value_type..") lua_touserdata(L, "..stack_position..");" + end +end + +-- Returns code to take a C++ variable of the given type and push a lua version +-- of it onto the stack. +function push_lua_value(in_variable, value_type) + local text = "" + if value_type == "int" or value_type == "float" then + text = text .. "lua_pushnumber(L, "..in_variable..");" + elseif value_type == "cstring" then + text = text .. "lua_pushstring(L, "..in_variable..");" + elseif value_type == "string" then + text = text .. "lua_pushstring(L, "..in_variable..".c_str());" + elseif value_type == "bool" then + text = text .. "lua_pushboolean(L, "..in_variable..");" + elseif member_type_to_lua_type(value_type) == "LUA_TUSERDATA" then + text = text .. "if(" .. in_variable .. " == NULL) { lua_pushnil(L); } else {" + text = text .. value_type .. "** userdata_" .. in_variable .. " = ("..value_type.."**) lua_newuserdata(L, sizeof("..value_type.."*));" + text = text .. "*userdata_" .. in_variable .. " = ("..value_type.."*)"..in_variable..";" + text = text .. 'luah_setmetatable(L, "'..value_type..'_metatable");}' + end + + return text +end + +--[[ + text = text .. indentation .. value_type .. "** userdata" .. parameter_index .. " = ("..value_type.."**) lua_newuserdata(L, sizeof("..value_type.."*));" + text = text .. indentation .. "*userdata" .. parameter_index .. " = "..in_variable..";" + text = text .. indentation .. value_type .. "parameter_in_registry_" .. parameter_index .. " = luah_store_in_registry(L, -1);"..br + text = text .. indentation .. 'luah_setmetatable(L, "'..value_type..'_metatable");'..br +function cleanup_lua_parameter(value_type, parameter_index, indentation) + local text = "" + if member_type_to_lua_type(value_type) == "LUA_TUSERDATA" then + text = text .. indentation .. "luah_remove_from_registry(L, parameter_in_registry_" .. parameter_index .. ");"..br + text = text .. indentation .. 'luah_setmetatable(L, "outdated_metatable");'..br + end + return text +end +]] + +-- Generates a getter function for a specific class and member variable. +function generate_getter(class, member_name, member_type) + local function_name = class.."_get_"..member_name + local text = "static int "..function_name.."(lua_State *L) {"..br + + text = text .. tab .. class .. "** "..class.."_instance = ("..class.."**) lua_touserdata(L, 1);\n"..br + + text = text .. tab .. "if(!"..class.."_instance) {"..br + text = text .. tab .. tab .. 'return luaL_error(L, "First argument to '..function_name..' is not a '..class..'");'..br + text = text .. tab .. "}" .. br + + text = text .. tab .. push_lua_value("(*"..class.."_instance"..")->"..member_name, member_type)..br + + text = text .. tab .. "return 1; // 1 return value"..br + text = text .. "}" .. br + + return text +end + +-- Generates a setter function for a specific class and member variable. +function generate_setter(class, member_name, member_type) + local function_name = class.."_set_"..member_name + + local text = "static int "..function_name.."(lua_State *L) {"..br + + text = text .. tab .. class .. "** "..class.."_instance = ("..class.."**) lua_touserdata(L, 1);\n"..br + + text = text .. tab .. "if(!"..class.."_instance) {"..br + text = text .. tab .. tab .. 'return luaL_error(L, "First argument to '..function_name..' is not a '..class..'");'..br + text = text .. tab .. "}" .. br + + text = text .. tab .. "luaL_checktype(L, 2, "..member_type_to_lua_type(member_type)..");"..br + + text = text .. tab .. retrieve_lua_value("value", member_type, 2) ..br + + text = text .. tab .. "(*"..class.."_instance)->"..member_name.." = value;"..br + + text = text .. tab .. "return 0; // 0 return values"..br + text = text .. "}" .. br + + return text +end + +-- Generates a function wrapper fora global function. "function_to_call" can be any string +-- that works as a "function", including expressions like "g->add_msg" +function generate_global_function_wrapper(function_name, function_to_call, args, rval) + local text = "static int "..function_name.."(lua_State *L) {"..br + + for i, arg in ipairs(args) do + text = text .. tab .. retrieve_lua_value("parameter"..i, arg, i)..br + end + + text = text .. tab + + if rval then + text = text .. member_type_to_cpp_type(rval) .. " rval = (" .. member_type_to_cpp_type(rval) .. ")" + end + + text = text .. function_to_call .. "(" + + for i, arg in ipairs(args) do + text = text .. "parameter"..i + if next(args, i) then text = text .. ", " end + end + + text = text .. ");"..br + + if rval then + text = text .. tab .. push_lua_value("rval", rval)..br + text = text .. tab .. "return 1; // 1 return values"..br + else + text = text .. tab .. "return 0; // 0 return values"..br + end + text = text .. "}"..br + + return text +end + +-- Generate a wrapper around a class function(method) that allows us to call a method of a specific +-- C++ instance by calling the method on the corresponding lua wrapper, e.g. +-- monster:name() in lua translates to monster.name() in C++ +function generate_class_function_wrapper(class, function_name, function_to_call, args, rval) + local text = "static int "..class.."_"..function_name.."(lua_State *L) {"..br + + -- retrieve the object to call the function on from the stack. + text = text .. tab .. class .. "** "..class.."_instance = ("..class.."**) lua_touserdata(L, 1);\n"..br + + text = text .. tab .. "if(!"..class.."_instance) {"..br + text = text .. tab .. tab .. 'return luaL_error(L, "First argument to '..function_name..' is not a '..class..'. Did you use foo.bar() instead of foo:bar()?");'..br + text = text .. tab .. "}" .. br + + local stack_index = 1 + for i, arg in ipairs(args) do + if arg ~= "game" then + text = text .. tab .. retrieve_lua_value("parameter"..i, arg, stack_index+1)..br + stack_index = stack_index + 1 + end + end + + text = text .. tab + + if rval then + text = text .. member_type_to_cpp_type(rval) .. " rval = " + end + + text = text .. "(*" .. class.. "_instance)->"..function_to_call .. "(" + + for i, arg in ipairs(args) do + if arg == "game" then + text = text .. "g" + else + text = text .. "parameter"..i + end + if next(args, i) then text = text .. ", " end + end + + text = text .. ");"..br + + if rval then + text = text .. tab .. push_lua_value("rval", rval)..br + text = text .. tab .. "return 1; // 1 return values"..br + else + text = text .. tab .. "return 0; // 0 return values"..br + end + text = text .. "}"..br + + return text +end + +-- Generate our C++ source file with all wrappers for accessing variables and functions from lua. +------------------------------------------------------------------------------------------------- +local cpp_output = "// This file was automatically generated by lua/generate_bindings.lua"..br + +local lua_output = "" + +dofile "class_definitions.lua" + +function generate_accessors(class, name) + -- Generate getters and setters for our player attributes. + for key, attribute in pairs(class) do + cpp_output = cpp_output .. generate_getter(name, key, attribute.type) + if attribute.writable then + cpp_output = cpp_output .. generate_setter(name, key, attribute.type) + end + end +end + + +function generate_class_function_wrappers(functions, class) + for name, func in pairs(functions) do + cpp_output = cpp_output .. generate_class_function_wrapper(class, name, name, func.args, func.rval) + end +end + +for name, value in pairs(classes) do + generate_accessors(value.attributes, name) +end + +for name, value in pairs(classes) do + generate_class_function_wrappers(value.functions, name) +end + +for name, func in pairs(global_functions) do + cpp_output = cpp_output .. generate_global_function_wrapper(name, func.cpp_name, func.args, func.rval) +end + +-- Create a lua registry with our getters and setters. +cpp_output = cpp_output .. "static const struct luaL_Reg gamelib [] = {"..br + +-- Now that the wrapper functions are implemented, we need to make them accessible to lua. +-- For this, the lua "registry" is used, which maps strings to C functions. +function generate_registry(class, name) + for key, attribute in pairs(class.attributes) do + local getter_name = name.."_get_"..key + local setter_name = name.."_set_"..key + cpp_output = cpp_output .. tab .. '{"'..getter_name..'", '..getter_name..'},'..br + if attribute.writable then + cpp_output = cpp_output .. tab .. '{"'..setter_name..'", '..setter_name..'},'..br + end + end + + for key, func in pairs(class.functions) do + local func_name = name.."_"..key + cpp_output = cpp_output .. tab .. '{"'..func_name..'", '..func_name..'},'..br + end +end + +for name, value in pairs(classes) do + generate_registry(value, name) +end + +for name, func in pairs(global_functions) do + cpp_output = cpp_output .. tab .. '{"'..name..'", '..name..'},'..br +end + +cpp_output = cpp_output .. tab .. "{NULL, NULL}"..br.."};"..br + +-- We generated our binding, now write it to a .cpp file for inclusion in +-- the main source code. +function writeFile(path,data) + local file = io.open(path,"wb") + file:write(data) + file:close() +end + +writeFile("catabindings.cpp", cpp_output) diff --git a/main.cpp b/main.cpp deleted file mode 100644 index 0590896064635..0000000000000 --- a/main.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* Main Loop for cataclysm - * Linux only I guess - * But maybe not - * Who knows - */ - -#include "cursesdef.h" -#include -#include "game.h" -#include "color.h" -#include "options.h" -#include "mapbuffer.h" -#include "debug.h" -#include -#include -#include -#ifdef LOCALIZE -#include -#endif -#include "translations.h" -#if (defined OSX_SDL_FW) -#include "SDL.h" -#elif (defined OSX_SDL_LIBS) -#include "SDL/SDL.h" -#endif - -void exit_handler(int s); - -#ifdef USE_WINMAIN -int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) -{ - int argc = __argc; - char **argv = __argv; -#else -int main(int argc, char *argv[]) -{ -#endif -#ifdef ENABLE_LOGGING - setupDebug(); -#endif - int seed = time(NULL); - -// set locale to system default - setlocale(LC_ALL, ""); -#ifdef LOCALIZE - bindtextdomain("cataclysm-dda", "lang/mo"); - bind_textdomain_codeset("cataclysm-dda", "UTF-8"); - textdomain("cataclysm-dda"); -#endif - -//args: world seeding only. - argc--; argv++; - while (argc){ - if(std::string(argv[0]) == "--seed"){ - argc--; argv++; - if(argc){ - seed = djb2_hash((unsigned char*)argv[0]); - argc--; argv++; - } - } - else // ignore unknown args. - argc--; argv++; - } - -// ncurses stuff - initOptions(); - load_options(); // For getting size options - initscr(); // Initialize ncurses - #ifdef SDLTILES - init_tiles(); - #endif // SDLTILES - noecho(); // Don't echo keypresses - cbreak(); // C-style breaks (e.g. ^C to SIGINT) - keypad(stdscr, true); // Numpad is numbers - init_colors(); // See color.cpp -// curs_set(0); // Invisible cursor - set_escdelay(10); // Make escape actually responsive - - std::srand(seed); - - bool quit_game = false; - g = new game; - g->init_data(); - if(g->game_error()) - exit_handler(-999); - g->init_ui(); - MAPBUFFER.set_game(g); - if(g->game_error()) - exit_handler(-999); - - curs_set(0); // Invisible cursor here, because MAPBUFFER.load() is crash-prone - - #if (!(defined _WIN32 || defined WINDOWS)) - struct sigaction sigIntHandler; - sigIntHandler.sa_handler = exit_handler; - sigemptyset(&sigIntHandler.sa_mask); - sigIntHandler.sa_flags = 0; - sigaction(SIGINT, &sigIntHandler, NULL); - #endif - - do { - if(!g->opening_screen()) { - quit_game = true; - } - while (!g->do_turn()) ; - if (g->game_quit() || g->game_error()) - quit_game = true; - } while (!quit_game); - - - exit_handler(-999); - - return 0; -} - -void exit_handler(int s) { - if (s != 2 || query_yn(_("Really Quit? All unsaved changes will be lost."))) { - erase(); // Clear screen - endwin(); // End ncurses - #if (defined _WIN32 || defined WINDOWS) - system("cls"); // Tell the terminal to clear itself - system("color 07"); - #else - system("clear"); // Tell the terminal to clear itself - #endif - - if(g != NULL) { - if(g->game_error()) { - delete g; - exit(1); - } else { - delete g; - exit(0); - } - } - exit(0); - } -} diff --git a/mapgen.cpp b/mapgen.cpp deleted file mode 100644 index 517b7b4477efc..0000000000000 --- a/mapgen.cpp +++ /dev/null @@ -1,14448 +0,0 @@ -#include "map.h" -#include "omdata.h" -#include "mapitems.h" -#include "output.h" -#include "game.h" -#include "rng.h" -#include "line.h" -#include "debug.h" -#include "options.h" -#include "item_factory.h" -#include "building_generation.h" -#include "mapgenformat.h" -#include "overmapbuffer.h" -#include "enums.h" -#include "monstergenerator.h" - -#include -#include -#include - -#ifndef sgn -#define sgn(x) (((x) < 0) ? -1 : 1) -#endif - -#define dbg(x) dout((DebugLevel)(x),D_MAP_GEN) << __FILE__ << ":" << __LINE__ << ": " - -#define MON_RADIUS 3 - -enum room_type { - room_null, - room_closet, - room_lobby, - room_chemistry, - room_teleport, - room_goo, - room_cloning, - room_vivisect, - room_bionics, - room_dorm, - room_living, - room_bathroom, - room_kitchen, - room_bedroom, - room_backyard, - room_study, - room_mine_shaft, - room_mine_office, - room_mine_storage, - room_mine_fuel, - room_mine_housing, - room_bunker_bots, - room_bunker_launcher, - room_bunker_rifles, - room_bunker_grenades, - room_bunker_armor, - room_mansion_courtyard, - room_mansion_entry, - room_mansion_bedroom, - room_mansion_library, - room_mansion_kitchen, - room_mansion_dining, - room_mansion_game, - room_mansion_pool, - room_mansion_study, - room_mansion_bathroom, - room_mansion_gallery, - room_split -}; - -bool connects_to(oter_id there, int dir_from_here); -void house_room(map *m, room_type type, int x1, int y1, int x2, int y2); -void science_room(map *m, int x1, int y1, int x2, int y2, int rotate); -void set_science_room(map *m, int x1, int y1, bool faces_right, int turn); -void silo_rooms(map *m); -void build_mine_room(map *m, room_type type, int x1, int y1, int x2, int y2); -map_extra random_map_extra(map_extras); - -room_type pick_mansion_room(int x1, int y1, int x2, int y2); -void build_mansion_room(map *m, room_type type, int x1, int y1, int x2, int y2); -void mansion_room(map *m, int x1, int y1, int x2, int y2); // pick & build - -void line(map *m, ter_id type, int x1, int y1, int x2, int y2); -void line_furn(map *m, furn_id type, int x1, int y1, int x2, int y2); -void fill_background(map *m, ter_id type); -void fill_background(map *m, ter_id (*f)()); -void square(map *m, ter_id type, int x1, int y1, int x2, int y2); -void square(map *m, ter_id (*f)(), int x1, int y1, int x2, int y2); -void square_furn(map *m, furn_id type, int x1, int y1, int x2, int y2); -void rough_circle(map *m, ter_id type, int x, int y, int rad); -void add_corpse(game *g, map *m, int x, int y); - -void map::generate(game *g, overmap *om, const int x, const int y, const int z, const int turn) -{ - dbg(D_INFO) << "map::generate( g["<active_item_count = 0; - grid[i]->field_count = 0; - grid[i]->turn_last_touched = turn; - grid[i]->temperature = 0; - grid[i]->comp = computer(); - grid[i]->camp = basecamp(); - for (int x = 0; x < SEEX; x++) { - for (int y = 0; y < SEEY; y++) { - grid[i]->ter[x][y] = t_null; - grid[i]->frn[x][y] = f_null; - grid[i]->trp[x][y] = tr_null; - grid[i]->rad[x][y] = 0; - grid[i]->graf[x][y] = graffiti(); - } - } - } - - oter_id terrain_type, t_north, t_neast, t_east, t_seast, t_south, - t_nwest, t_west, t_swest, t_above; - unsigned zones = 0; - int overx = x / 2; - int overy = y / 2; - if ( x >= OMAPX * 2 || x < 0 || y >= OMAPY * 2 || y < 0) { - dbg(D_INFO) << "map::generate: In section 1"; - - // This happens when we're at the very edge of the overmap, and are generating - // terrain for the adjacent overmap. - int sx = 0, sy = 0; - overx = (x % (OMAPX * 2)) / 2; - if (x >= OMAPX * 2) { - sx = 1; - } - if (x < 0) { - sx = -1; - overx = (OMAPX * 2 + x) / 2; - } - overy = (y % (OMAPY * 2)) / 2; - if (y >= OMAPY * 2) { - sy = 1; - } - if (y < 0) { - overy = (OMAPY * 2 + y) / 2; - sy = -1; - } - overmap tmp = overmap_buffer.get(g, om->pos().x + sx, om->pos().y + sy); - terrain_type = tmp.ter(overx, overy, z); - //zones = tmp.zones(overx, overy); - t_above = tmp.ter(overx, overy, z + 1); - - if (overy - 1 >= 0) { - t_north = tmp.ter(overx, overy - 1, z); - } else { - t_north = om->ter(overx, OMAPY - 1, z); - } - - if (overy - 1 >= 0 && overx + 1 < OMAPX) { - t_neast = tmp.ter(overx + 1, overy - 1, z); - } else if (overy - 1 >= 0) { - t_neast = om->ter(0, overy - 1, z); - } else if (overx + 1 < OMAPX) { - t_neast = om->ter(overx + 1, OMAPY - 1, z); - } else { - t_neast = om->ter(0, OMAPY - 1, z); - } - - if (overx + 1 < OMAPX) { - t_east = tmp.ter(overx + 1, overy, z); - } else { - t_east = om->ter(0, overy, z); - } - - if (overy + 1 < OMAPY && overx + 1 < OMAPX) { - t_seast = tmp.ter(overx + 1, overy + 1, z); - } else if (overy + 1 < OMAPY) { - t_seast = om->ter(0, overy + 1, z); - } else if (overx + 1 < OMAPX) { - t_seast = om->ter(overx + 1, 0, z); - } else { - t_seast = om->ter(0, 0, z); - } - - if (overy + 1 < OMAPY) { - t_south = tmp.ter(overx, overy + 1, z); - } else { - t_south = om->ter(overx, 0, z); - } - - if (overy - 1 >= 0 && overx - 1 >= 0) { - t_nwest = tmp.ter(overx - 1, overy - 1, z); - } else if (overy - 1 >= 0) { - t_nwest = om->ter(OMAPX - 1, overy - 1, z); - } else if (overx - 1 >= 0) { - t_nwest = om->ter(overx - 1, OMAPY - 1, z); - } else { - t_nwest = om->ter(OMAPX - 1, OMAPY - 1, z); - } - - if (overx - 1 >= 0) { - t_west = tmp.ter(overx - 1, overy, z); - } else { - t_west = om->ter(OMAPX - 1, overy, z); - } - - if (overy + 1 < OMAPY && overx - 1 >= 0) { - t_swest = tmp.ter(overx - 1, overy + 1, z); - } else if (overy + 1 < OMAPY) { - t_swest = om->ter(OMAPX - 1, overy + 1, z); - } else if (overx - 1 >= 0) { - t_swest = om->ter(overx - 1, 0, z); - } else { - t_swest = om->ter(OMAPX - 1, 0, z); - } - - } else { - dbg(D_INFO) << "map::generate: In section 2"; - - t_above = om->ter(overx, overy, z + 1); - terrain_type = om->ter(overx, overy, z); - - if (overy - 1 >= 0) { - t_north = om->ter(overx, overy - 1, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y - 1); - t_north = tmp.ter(overx, OMAPY - 1, z); - } - - if (overy - 1 >= 0 && overx + 1 < OMAPX) { - t_neast = om->ter(overx + 1, overy - 1, z); - } else if (overy - 1 >= 0) { - overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y - 1); - t_neast = tmp.ter(0, overy - 1, z); - } else if (overx + 1 < OMAPX) { - overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y); - t_neast = tmp.ter(overx + 1, OMAPY - 1, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y - 1); - t_neast = tmp.ter(0, OMAPY - 1, z); - } - - if (overx + 1 < OMAPX) { - t_east = om->ter(overx + 1, overy, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y); - t_east = tmp.ter(0, overy, z); - } - - if (overy + 1 < OMAPY && overx + 1 < OMAPX) { - t_seast = om->ter(overx + 1, overy + 1, z); - } else if (overy + 1 < OMAPY) { - overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y + 1); - t_seast = tmp.ter(0, overy + 1, z); - } else if (overx + 1 < OMAPX) { - overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y); - t_seast = tmp.ter(overx + 1, 0, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y + 1); - t_seast = tmp.ter(0, 0, z); - } - - if (overy + 1 < OMAPY) { - t_south = om->ter(overx, overy + 1, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y + 1); - t_south = tmp.ter(overx, 0, z); - } - - if (overy - 1 >= 0 && overx - 1 >= 0) { - t_nwest = om->ter(overx - 1, overy - 1, z); - } else if (overy - 1 >= 0) { - overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y - 1); - t_nwest = tmp.ter(OMAPX - 1, overy - 1, z); - } else if (overx - 1 >= 0) { - overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y); - t_nwest = tmp.ter(overx - 1, OMAPY - 1, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y - 1); - t_nwest = tmp.ter(OMAPX - 1, OMAPY - 1, z); - } - - if (overx - 1 >= 0) { - t_west = om->ter(overx - 1, overy, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y); - t_west = tmp.ter(OMAPX - 1, overy, z); - } - - if (overy + 1 < OMAPY && overx - 1 >= 0) { - t_swest = om->ter(overx - 1, overy + 1, z); - } else if (overy + 1 < OMAPY) { - overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y + 1); - t_swest = tmp.ter(OMAPX - 1, overy + 1, z); - } else if (overx - 1 >= 0) { - overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y); - t_swest = tmp.ter(overx - 1, 0, z); - } else { - overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y + 1); - t_swest = tmp.ter(OMAPX - 1, 0, z); - } - } - - // This attempts to scale density of zombies inversely with distance from the nearest city. - // In other words, make city centers dense and perimiters sparse. - float density = 0.0; - for (int i = overx-MON_RADIUS; i <= overx+MON_RADIUS; i++) { - for (int j = overy-MON_RADIUS; j <= overy+MON_RADIUS; j++) { - density += oterlist[om->ter(i,j,z)].mondensity; - } - } - density = density/100; - - draw_map(terrain_type, t_north, t_east, t_south, t_west, t_neast, t_seast, t_nwest, t_swest, - t_above, turn, g, density, z); - - if ( one_in( oterlist[terrain_type].embellishments.chance )) { - add_extra( random_map_extra( oterlist[terrain_type].embellishments ), g); - } - - post_process(g, zones); - - // Okay, we know who are neighbors are. Let's draw! - // And finally save used submaps and delete the rest. - for (int i = 0; i < my_MAPSIZE; i++) { - for (int j = 0; j < my_MAPSIZE; j++) { - dbg(D_INFO) << "map::generate: submap ("< lw && i < rw && j > tw && j < bw) - ter_set(i, j, t_floor); - else - ter_set(i, j, grass_or_dirt()); - if (i >= lw && i <= rw && (j == tw || j == bw)) //placing north and south walls - ter_set(i, j, t_wall_h); - if ((i == lw || i == rw) && j > tw && j < bw /*actual_house_height*/) //placing west (lw) and east walls - ter_set(i, j, t_wall_v); - } - } - switch(rng(1, 3)) { - case 1: // Quadrants, essentially - mw = rng(lw + 5, rw - 5); - cw = tw + rng(4, 7); - house_room(this, room_living, mw, tw, rw, cw); - house_room(this, room_kitchen, lw, tw, mw, cw); - ter_set(mw, rng(tw + 2, cw - 2), (one_in(3) ? t_door_c : t_floor)); - rn = rng(lw + 1, mw - 2); - ter_set(rn , tw, t_window_domestic); - ter_set(rn + 1, tw, t_window_domestic); - rn = rng(mw + 1, rw - 2); - ter_set(rn , tw, t_window_domestic); - ter_set(rn + 1, tw, t_window_domestic); - rn = rng(lw + 3, rw - 3); // Bottom part mw - if (rn <= lw + 5) { - // Bedroom on right, bathroom on left - house_room(this, room_bedroom, rn, cw, rw, bw); - - // Put door between bedroom and living - ter_set(rng(rw - 1, rn > mw ? rn + 1 : mw + 1), cw, t_door_c); - - if (bw - cw >= 10 && rn - lw >= 6) { - // All fits, placing bathroom and 2nd bedroom - house_room(this, room_bathroom, lw, bw - 5, rn, bw); - house_room(this, room_bedroom, lw, cw, rn, bw - 5); - - // Put door between bathroom and bedroom - ter_set(rn, rng(bw - 4, bw - 1), t_door_c); - - if (one_in(3)) { - // Put door between 2nd bedroom and 1st bedroom - ter_set(rn, rng(cw + 1, bw - 6), t_door_c); - } else { - // ...Otherwise, between 2nd bedroom and kitchen - ter_set(rng(lw + 1, rn > mw ? mw - 1 : rn - 1), cw, t_door_c); - } - } else if (bw - cw > 4) { - // Too big for a bathroom, not big enough for 2nd bedroom - // Make it a bathroom anyway, but give the excess space back to - // the kitchen. - house_room(this, room_bathroom, lw, bw - 4, rn, bw); - for (int i = lw + 1; i < mw && i < rn; i++) - ter_set(i, cw, t_floor); - - // Put door between excess space and bathroom - ter_set(rng(lw + 1, rn - 1), bw - 4, t_door_c); - - // Put door between excess space and bedroom - ter_set(rn, rng(cw + 1, bw - 5), t_door_c); - } else { - // Small enough to be a bathroom; make it one. - house_room(this, room_bathroom, lw, cw, rn, bw); - - if (one_in(5)) { - // Put door between batroom and kitchen with low chance - ter_set(rng(lw + 1, rn > mw ? mw - 1 : rn - 1), cw, t_door_c); - } else { - // ...Otherwise, between bathroom and bedroom - ter_set(rn, rng(cw + 1, bw - 1), t_door_c); - } - } - // Point on bedroom wall, for window - rn = rng(rn + 2, rw - 2); - } else { - // Bedroom on left, bathroom on right - house_room(this, room_bedroom, lw, cw, rn, bw); - - // Put door between bedroom and kitchen - ter_set(rng(lw + 1, rn > mw ? mw - 1 : rn - 1), cw, t_door_c); - - if (bw - cw >= 10 && rw - rn >= 6) { - // All fits, placing bathroom and 2nd bedroom - house_room(this, room_bathroom, rn, bw - 5, rw, bw); - house_room(this, room_bedroom, rn, cw, rw, bw - 5); - - // Put door between bathroom and bedroom - ter_set(rn, rng(bw - 4, bw - 1), t_door_c); - - if (one_in(3)) { - // Put door between 2nd bedroom and 1st bedroom - ter_set(rn, rng(cw + 1, bw - 6), t_door_c); - } else { - // ...Otherwise, between 2nd bedroom and living - ter_set(rng(rw - 1, rn > mw ? rn + 1 : mw + 1), cw, t_door_c); - } - } else if (bw - cw > 4) { - // Too big for a bathroom, not big enough for 2nd bedroom - // Make it a bathroom anyway, but give the excess space back to - // the living. - house_room(this, room_bathroom, rn, bw - 4, rw, bw); - for (int i = rw - 1; i > rn && i > mw; i--) - ter_set(i, cw, t_floor); - - // Put door between excess space and bathroom - ter_set(rng(rw - 1, rn + 1), bw - 4, t_door_c); - - // Put door between excess space and bedroom - ter_set(rn, rng(cw + 1, bw - 5), t_door_c); - } else { - // Small enough to be a bathroom; make it one. - house_room(this, room_bathroom, rn, cw, rw, bw); - - if (one_in(5)) { - // Put door between bathroom and living with low chance - ter_set(rng(rw - 1, rn > mw ? rn + 1 : mw + 1), cw, t_door_c); - } else { - // ...Otherwise, between bathroom and bedroom - ter_set(rn, rng(cw + 1, bw - 1), t_door_c); - } - } - // Point on bedroom wall, for window - rn = rng(lw + 2, rn - 2); - } - ter_set(rn , bw, t_window_domestic); - ter_set(rn + 1, bw, t_window_domestic); - if (!one_in(3) && rw < SEEX * 2 - 1) { // Potential side windows - rn = rng(tw + 2, bw - 6); - ter_set(rw, rn , t_window_domestic); - ter_set(rw, rn + 4, t_window_domestic); - } - if (!one_in(3) && lw > 0) { // Potential side windows - rn = rng(tw + 2, bw - 6); - ter_set(lw, rn , t_window_domestic); - ter_set(lw, rn + 4, t_window_domestic); - } - if (one_in(2)) { // Placement of the main door - ter_set(rng(lw + 2, mw - 1), tw, (one_in(6) ? t_door_c : t_door_locked)); - if (one_in(5)) // Placement of side door - ter_set(rw, rng(tw + 2, cw - 2), (one_in(6) ? t_door_c : t_door_locked)); - } else { - ter_set(rng(mw + 1, rw - 2), tw, (one_in(6) ? t_door_c : t_door_locked)); - if (one_in(5)) - ter_set(lw, rng(tw + 2, cw - 2), (one_in(6) ? t_door_c : t_door_locked)); - } - break; - - case 2: // Old-style; simple; - //Modified by Jovan in 28 Aug 2013 - //Long narrow living room in front, big kitchen and HUGE bedroom - bw = SEEX*2-2; - cw = tw + rng(3, 6); - mw = rng(lw + 7, rw - 4); - //int actual_house_height=bw-rng(4,6); - //in some rare cases some rooms (especially kitchen and living room) may get rather small - if ((tw<=3)&&( abs((actual_house_height-3)-cw)>=3 ) ) { - //everything is fine - house_room(this, room_backyard, lw, actual_house_height+1, rw, bw); - //door from bedroom to backyard - ter_set((lw+mw)/2, actual_house_height, t_door_c); - } else { //using old layout - actual_house_height = bw_old; - } - // Plop down the rooms - house_room(this, room_living, lw, tw, rw, cw); - house_room(this, room_kitchen, mw, cw, rw, actual_house_height - 3); - house_room(this, room_bedroom, lw, cw, mw, actual_house_height ); //making bedroom smaller - house_room(this, room_bathroom, mw, actual_house_height - 3, rw, actual_house_height); - -// Space between kitchen & living room: - rn = rng(mw + 1, rw - 3); - ter_set(rn , cw, t_floor); - ter_set(rn + 1, cw, t_floor); -// Front windows - rn = rng(2, 5); - ter_set(lw + rn , tw, t_window_domestic); - ter_set(lw + rn + 1, tw, t_window_domestic); - ter_set(rw - rn , tw, t_window_domestic); - ter_set(rw - rn + 1, tw, t_window_domestic); -// Front door - ter_set(rng(lw + 4, rw - 4), tw, (one_in(6) ? t_door_c : t_door_locked)); - if (one_in(3)) { // Kitchen windows - rn = rng(cw + 1, actual_house_height - 5); - ter_set(rw, rn , t_window_domestic); - ter_set(rw, rn + 1, t_window_domestic); - } - if (one_in(3)) { // Bedroom windows - rn = rng(cw + 1, actual_house_height - 2); - ter_set(lw, rn , t_window_domestic); - ter_set(lw, rn + 1, t_window_domestic); - } -// Door to bedroom - if (one_in(4)) - ter_set(rng(lw + 1, mw - 1), cw, t_door_c); - else - ter_set(mw, rng(cw + 3, actual_house_height - 4), t_door_c); -// Door to bathrom - if (one_in(4)) - ter_set(mw, actual_house_height - 1, t_door_c); - else - ter_set(rng(mw + 2, rw - 2), actual_house_height - 3, t_door_c); -// Back windows - rn = rng(lw + 1, mw - 2); - ter_set(rn , actual_house_height, t_window_domestic); - ter_set(rn + 1, actual_house_height, t_window_domestic); - rn = rng(mw + 1, rw - 1); - ter_set(rn, actual_house_height, t_window_domestic); - break; - - case 3: // Long center hallway, kitchen, living room and office - mw = int((lw + rw) / 2); - cw = bw - rng(5, 7); -// Hallway doors and windows - ter_set(mw , tw, (one_in(6) ? t_door_c : t_door_locked)); - if (one_in(4)) { - ter_set(mw - 1, tw, t_window_domestic); - ter_set(mw + 1, tw, t_window_domestic); - } - for (int i = tw + 1; i < cw; i++) { // Hallway walls - ter_set(mw - 2, i, t_wall_v); - ter_set(mw + 2, i, t_wall_v); - } - if (one_in(2)) { // Front rooms are kitchen or living room - house_room(this, room_living, lw, tw, mw - 2, cw); - house_room(this, room_kitchen, mw + 2, tw, rw, cw); - } else { - house_room(this, room_kitchen, lw, tw, mw - 2, cw); - house_room(this, room_living, mw + 2, tw, rw, cw); - } -// Front windows - rn = rng(lw + 1, mw - 4); - ter_set(rn , tw, t_window_domestic); - ter_set(rn + 1, tw, t_window_domestic); - rn = rng(mw + 3, rw - 2); - ter_set(rn , tw, t_window_domestic); - ter_set(rn + 1, tw, t_window_domestic); - if (one_in(3) && lw > 0) { // Side windows? - rn = rng(tw + 1, cw - 2); - ter_set(lw, rn , t_window_domestic); - ter_set(lw, rn + 1, t_window_domestic); - } - if (one_in(3) && rw < SEEX * 2 - 1) { // Side windows? - rn = rng(tw + 1, cw - 2); - ter_set(rw, rn , t_window_domestic); - ter_set(rw, rn + 1, t_window_domestic); - } - if (one_in(2)) { // Bottom rooms are bedroom or bathroom - //bathroom to the left (eastern wall), study to the right - //house_room(this, room_bedroom, lw, cw, rw - 3, bw); - house_room(this, room_bedroom, mw-2, cw, rw-3, bw); - house_room(this, room_bathroom, rw - 3, cw, rw, bw); - house_room(this, room_study, lw, cw, mw-2, bw); - //===Study Room Furniture== - ter_set(mw-2, (bw+cw)/2, t_door_o); - furn_set(lw+1, cw+1, f_chair); - furn_set(lw+1, cw+2, f_table); - ter_set(lw+1, cw+3, t_console_broken); - furn_set(lw+3, bw-1, f_bookcase); - place_items("magazines", 30, lw+3, bw-1, lw+3, bw-1, false, 0); - place_items("novels", 40, lw+3, bw-1, lw+3, bw-1, false, 0); - place_items("alcohol", 20, lw+3, bw-1, lw+3, bw-1, false, 0); - place_items("manuals", 30, lw+3, bw-1, lw+3, bw-1, false, 0); - //========================= - ter_set(rng(lw + 2, mw - 3), cw, t_door_c); - if (one_in(4)) - ter_set(rng(rw - 2, rw - 1), cw, t_door_c); - else - ter_set(rw - 3, rng(cw + 2, bw - 2), t_door_c); - rn = rng(mw, rw - 5); //bedroom windows - ter_set(rn , bw, t_window_domestic); - ter_set(rn + 1, bw, t_window_domestic); - ter_set(rng(lw+2, mw-3), bw, t_window_domestic); //study window - - if (one_in(4)) - ter_set(rng(rw - 2, rw - 1), bw, t_window_domestic); - else - ter(rw, rng(cw + 1, bw - 1)); - } else { //bathroom to the right - house_room(this, room_bathroom, lw, cw, lw + 3, bw); - //house_room(this, room_bedroom, lw + 3, cw, rw, bw); - house_room(this, room_bedroom, lw+3, cw, mw+2, bw); - house_room(this, room_study, mw+2, cw, rw, bw); - //===Study Room Furniture== - ter_set(mw+2, (bw+cw)/2, t_door_c); - furn_set(rw-1, cw+1, f_chair); - furn_set(rw-1, cw+2, f_table); - ter_set(rw-1, cw+3, t_console_broken); - furn_set(rw-3, bw-1, f_bookcase); - place_items("magazines", 40, rw-3, bw-1, rw-3, bw-1, false, 0); - place_items("novels", 40, rw-3, bw-1, rw-3, bw-1, false, 0); - place_items("alcohol", 20, rw-3, bw-1, rw-3, bw-1, false, 0); - place_items("manuals", 20, rw-3, bw-1, rw-3, bw-1, false, 0); - //========================= - - if (one_in(4)) - ter_set(rng(lw + 1, lw + 2), cw, t_door_c); - else - ter_set(lw + 3, rng(cw + 2, bw - 2), t_door_c); - rn = rng(lw + 4, mw); //bedroom windows - ter_set(rn , bw, t_window_domestic); - ter_set(rn + 1, bw, t_window_domestic); - ter_set(rng(mw+3, rw-1), bw, t_window_domestic); //study window - if (one_in(4)) - ter_set(rng(lw + 1, lw + 2), bw, t_window_domestic); - else - ter(lw, rng(cw + 1, bw - 1)); - } -// Doors off the sides of the hallway - ter_set(mw - 2, rng(tw + 3, cw - 3), t_door_c); - ter_set(mw + 2, rng(tw + 3, cw - 3), t_door_c); - ter_set(mw, cw, t_door_c); - break; - } // Done with the various house structures - - if (rng(2, 7) < tw) { // Big front yard has a chance for a fence - for (int i = lw; i <= rw; i++) - ter_set(i, 0, t_fence_h); - for (int i = 1; i < tw; i++) { - ter_set(lw, i, t_fence_v); - ter_set(rw, i, t_fence_v); - } - int hole = rng(SEEX - 3, SEEX + 2); - ter_set(hole, 0, t_dirt); - ter_set(hole + 1, 0, t_dirt); - if (one_in(tw)) { - ter_set(hole - 1, 1, t_tree_young); - ter_set(hole + 2, 1, t_tree_young); - } - } - - if (terrain_type >= ot_house_base_north && - terrain_type <= ot_house_base_west) { - int attempts = 20; - do { - rn = rng(lw + 1, rw - 1); - attempts--; - } while (ter(rn, actual_house_height - 1) != t_floor && attempts); - if( ter(rn, actual_house_height - 1) == t_floor && attempts ) { - ter_set(rn, actual_house_height - 1, t_stairs_down); - } - } - if (one_in(100)) { // Houses have a 1 in 100 chance of wasps! - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (ter(i, j) == t_door_c || ter(i, j) == t_door_locked) - ter_set(i, j, t_door_frame); - if (ter(i, j) == t_window_domestic && !one_in(3)) - ter_set(i, j, t_window_frame); - if ((ter(i, j) == t_wall_h || ter(i, j) == t_wall_v) && one_in(8)) - ter_set(i, j, t_paper); - } - } - int num_pods = rng(8, 12); - for (int i = 0; i < num_pods; i++) { - int podx = rng(1, SEEX * 2 - 2), pody = rng(1, SEEY * 2 - 2); - int nonx = 0, nony = 0; - while (nonx == 0 && nony == 0) { - nonx = rng(-1, 1); - nony = rng(-1, 1); - } - for (int x = -1; x <= 1; x++) { - for (int y = -1; y <= 1; y++) { - if ((x != nonx || y != nony) && (x != 0 || y != 0)) - ter_set(podx + x, pody + y, t_paper); - } - } - add_spawn("mon_wasp", 1, podx, pody); - } - place_items("rare", 70, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, turn); - - } else if (one_in(150)) { // No wasps; black widows? - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (ter(i, j) == t_floor) { - if (one_in(15)) { - add_spawn("mon_spider_widow_giant", rng(1, 2), i, j); - for (int x = i - 1; x <= i + 1; x++) { - for (int y = j - 1; y <= j + 1; y++) { - if (ter(x, y) == t_floor) - add_field(NULL, x, y, fd_web, rng(2, 3)); - } - } - } else if (move_cost(i, j) > 0 && one_in(5)) - add_field(NULL, x, y, fd_web, 1); - } - } - } - place_items("rare", 60, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, turn); - } else { // Just boring old zombies - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - } - - if (terrain_type == ot_house_east || terrain_type == ot_house_base_east) - rotate(1); - if (terrain_type == ot_house_south || terrain_type == ot_house_base_south) - rotate(2); - if (terrain_type == ot_house_west || terrain_type == ot_house_base_west) - rotate(3); - break; - - case ot_s_lot: - mapgen_parking_lot(this, terrain_type, facing_data, turn); - break; - - case ot_pool: - mapgen_pool(this); - break; - - case ot_park: - mapgen_park(this); - break; - - case ot_s_gas_north: - case ot_s_gas_east: - case ot_s_gas_south: - case ot_s_gas_west: - mapgen_gas_station(this, terrain_type, turn, density); - break; - - case ot_s_pharm_north: - case ot_s_pharm_east: - case ot_s_pharm_south: - case ot_s_pharm_west: - tw = rng(0, 4); - bw = SEEY * 2 - rng(1, 5); - mw = bw - rng(3, 4); // Top of the storage room - lw = rng(0, 4); - rw = SEEX * 2 - rng(1, 5); - cw = rng(13, rw - 5); // Left side of the storage room - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j == tw && ((i > lw + 2 && i < lw + 6) || (i > rw - 6 && i < rw - 2))) - ter_set(i, j, t_window); - else if ((j == tw && (i == lw + 8 || i == lw + 9)) || - (i == cw && j == mw + 1)) - ter_set(i, j, t_door_c); - else if (((j == tw || j == bw) && i >= lw && i <= rw) || - (j == mw && i >= cw && i < rw)) - ter_set(i, j, t_wall_h); - else if (((i == lw || i == rw) && j > tw && j < bw) || - (i == cw && j > mw && j < bw)) - ter_set(i, j, t_wall_v); - else if (((i == lw + 8 || i == lw + 9 || i == rw - 4 || i == rw - 3) && - j > tw + 3 && j < mw - 2) || - (j == bw - 1 && i > lw + 1 && i < cw - 1)) - set(i, j, t_floor, f_rack); - else if ((i == lw + 1 && j > tw + 8 && j < mw - 1) || - (j == mw - 1 && i > cw + 1 && i < rw)) - set(i, j, t_floor, f_glass_fridge); - else if ((j == mw && i > lw + 1 && i < cw) || - (j == tw + 6 && i > lw + 1 && i < lw + 6) || - (i == lw + 5 && j > tw && j < tw + 7)) - set(i, j, t_floor, f_counter); - else if (i > lw && i < rw && j > tw && j < bw) - ter_set(i, j, t_floor); - else - ter_set(i, j, grass_or_dirt()); - } - } - - { - int num_carts = rng(0, 5); - for( int i = 0; i < num_carts; i++ ) { - add_vehicle (g, "shopping_cart", rng(lw, cw), rng(tw, mw), 90); - } - } - - if (one_in(3)) - place_items("snacks", 74, lw + 8, tw + 4, lw + 8, mw - 3, false, 0); - else if (one_in(4)) - place_items("cleaning", 74, lw + 8, tw + 4, lw + 8, mw - 3, false, 0); - else - place_items("magazines", 74, lw + 8, tw + 4, lw + 8, mw - 3, false, 0); - if (one_in(5)) - place_items("softdrugs", 84, lw + 9, tw + 4, lw + 9, mw - 3, false, 0); - else if (one_in(4)) - place_items("cleaning", 74, lw + 9, tw + 4, lw + 9, mw - 3, false, 0); - else - place_items("snacks", 74, lw + 9, tw + 4, lw + 9, mw - 3, false, 0); - if (one_in(5)) - place_items("softdrugs", 84, rw - 4, tw + 4, rw - 4, mw - 3, false, 0); - else - place_items("snacks", 74, rw - 4, tw + 4, rw - 4, mw - 3, false, 0); - if (one_in(3)) - place_items("snacks", 70, rw - 3, tw + 4, rw - 3, mw - 3, false, 0); - else - place_items("softdrugs", 80, rw - 3, tw + 4, rw - 3, mw - 3, false, 0); - place_items("fridgesnacks", 74, lw + 1, tw + 9, lw + 1, mw - 2, false, 0); - place_items("fridgesnacks", 74, cw + 2, mw - 1, rw - 1, mw - 1, false, 0); - place_items("harddrugs", 88, lw + 2, bw - 1, cw - 2, bw - 1, false, 0); - place_items("behindcounter", 78, lw + 1, tw + 1, lw + 4, tw + 5, false, 0); - if (terrain_type == ot_s_pharm_east) - rotate(1); - if (terrain_type == ot_s_pharm_south) - rotate(2); - if (terrain_type == ot_s_pharm_west) - rotate(3); - place_spawns(g, "GROUP_PHARM", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - -case ot_office_cubical_north: -case ot_office_cubical_east: -case ot_office_cubical_south: -case ot_office_cubical_west: { -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - sss \n\ - ^sss^ \n\ - |---|-D|------|--|---| \n\ - |cdx|..|xdccxl|.^|cxc| \n\ - |.h....|.h..h......hd| \n\ - |---|..|------|..|---| \n\ - |xdl|....h..hd|..|xdc| \n\ - |ch....|dxcccx|....h.| \n\ - |---|..|------|..|---| \n\ - |xcc|...^cclc....|cdx| \n\ - |dh................hc| \n\ - |-------......|------| \n\ - |e.....+......|n.xdc.| \n\ - |S.....|----..|h.ch..| \n\ - |-+|-+-|......+.....^| \n\ - |..|..S|..hc..|------| \n\ - |l.|..T|cccc..|......| \n\ - |--|---|......|.htth.| \n\ - |^hhh..+......+.htth.| \n\ - |o.....|......|.htth.| \n\ - |o.dx..|--++--|.htth.| \n\ - |o.h...|$$ss$$|......| \n\ - |-wwww-| ss |-wwww-| \n\ - ss \n", - mapf::basic_bind("x $ ^ . - | # t + = D w T S e o h c d l s n", t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_null), - mapf::basic_bind("x $ ^ . - | # t + = D w T S e o h c d l s n", f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null, f_safe_l)); - place_items("fridge", 50, 2, 12, 2, 13, false, 0); - place_items("cleaning", 50, 2, 15, 3, 16, false, 0); - place_items("office", 80, 11, 7, 13, 7, false, 0); - place_items("office", 80, 10, 3, 12, 3, false, 0); - place_items("cubical_office", 60, 2, 3, 3, 3, false, 0); - place_items("cubical_office", 60, 3, 6, 4, 6, false, 0); - place_items("cubical_office", 60, 3, 9, 4, 9, false, 0); - place_items("cubical_office", 60, 21, 3, 21, 4, false, 0); - place_items("cubical_office", 60, 20, 6, 21, 6, false, 0); - place_items("cubical_office", 60, 19, 9, 20, 9, false, 0); - place_items("cubical_office", 60, 18, 17, 19, 20, false, 0); - place_items("novels", 70, 2, 19, 2, 21, false, 0); - { - int num_chairs = rng(0, 6); - for( int i = 0; i < num_chairs; i++ ) { - add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); - } - } - if (terrain_type == ot_office_cubical_east) - rotate(3); - if (terrain_type == ot_office_cubical_north) - rotate(2); - if (terrain_type == ot_office_cubical_west) - rotate(1); - } break; - -case ot_apartments_con_tower_1_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - |------|-|-|-|---|...\n\ - |.dBBd.+r|u+..eSc|...\n\ - w..BB..|-|-|....c|...\n\ - w......|STb|....O|...\n\ - |oo....+..b|..ccc|^..\n\ - |--|-+-|-+-|..hhh|...\n\ - RssX.............|...\n\ - Rssw.............D...\n\ - Rssw..A....A..|+-|...\n\ - Rss|...FFF...^|.r|...\n\ - |------|-|-|--|--|...\n\ - |.dBBd.+r|u+..eSc|...\n\ - w..BB..|-|-|....c|...\n\ - w......|STb|....O|...\n\ - |.d....+..b|..ccc|...\n\ - |--|-+-|-+-|....^|...\n\ - RssX...A.........|...\n\ - Rssw.............D...\n\ - Rssw.........o|+-|...\n\ - Rss|..A.FFF..o|.r|...\n\ - |--|--ww---ww-|--|w-G\n\ - ss\n\ - ss\n\ - ss\n", - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_north == ot_apartments_con_tower_1 && t_west == ot_apartments_con_tower_1) - rotate(3); - else if (t_north == ot_apartments_con_tower_1 && t_east == ot_apartments_con_tower_1) - rotate(0); - else if (t_south == ot_apartments_con_tower_1 && t_east == ot_apartments_con_tower_1) - rotate(1); - else if (t_west == ot_apartments_con_tower_1 && t_south == ot_apartments_con_tower_1) - rotate(2); -}break; - -case ot_apartments_con_tower_1:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_apartments_con_tower_1_entrance && t_east == ot_apartments_con_tower_1) || (t_north == ot_apartments_con_tower_1 && t_east == ot_apartments_con_tower_1_entrance) - || (t_west == ot_apartments_con_tower_1 && t_north == ot_apartments_con_tower_1_entrance) || (t_south == ot_apartments_con_tower_1 && t_west == ot_apartments_con_tower_1_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |------|-|-|ww---| \n\ - |.dBBd.+r|u+..eSc|-w-\n\ - w..BB..|-|-|....c|...\n\ - w.h....|STb|....O|.hc\n\ - |cxc...+..b|..ccc|cxc\n\ - |--|-+-|-+-|.....|-ww\n\ - RssX.............|^..\n\ - Rssw..F..........D...\n\ - Rssw..F.......|+-|...\n\ - Rss|..F...FFF^|.r|...\n\ - |------|-|-|--|--|...\n\ - |.dBBd.+r|u+..eSc|...\n\ - w..BB..|-|-|....c|...\n\ - w......|STb|....O|...\n\ - |od....+..b|..ccc|...\n\ - |--|-+-|-+-|...hh|...\n\ - RssX.............|...\n\ - Rssw.............D...\n\ - Rssw..A.....F.|+-|...\n\ - Rss|.....FFFF^|.r|...\n\ - |------------||--|...\n\ - |############|EEE=...\n\ - |############|EEx=...\n", - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_west == ot_apartments_con_tower_1_entrance) - rotate(1); - if (t_north == ot_apartments_con_tower_1_entrance) - rotate(2); - if (t_east == ot_apartments_con_tower_1_entrance) - rotate(3); - } - - else if ((t_west == ot_apartments_con_tower_1_entrance && t_north == ot_apartments_con_tower_1) || (t_north == ot_apartments_con_tower_1_entrance && t_east == ot_apartments_con_tower_1) - || (t_west == ot_apartments_con_tower_1 && t_south == ot_apartments_con_tower_1_entrance) || (t_south == ot_apartments_con_tower_1 && t_east == ot_apartments_con_tower_1_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -...|---|-|-|-|------| \n\ -...|cSe..+u|r+.dBBd.| \n\ -...|c....|-|-|..BB..w \n\ -...|O....|bTS|......w \n\ -...|ccc..|b..+....d.| \n\ -...|.....|-+-|-+-|--| \n\ -...|.............+ssR \n\ -...D.............wssR \n\ -...|-+|...htth...wssR \n\ -...|r.|^..htth.oo|ssR \n\ -...|--|--|-|-|------| \n\ -...|cSe..+u|r+.dBBd.| \n\ -..^|c....|-|-|..BB..w \n\ -...|O....|bTS|......w \n\ -...|ccc..|b..+....d.| \n\ -...|.....|-+-|-+-|--| \n\ -...|.............+ssR \n\ -...D...........A.wssR \n\ -...|-+|..A...h...wssR \n\ -...|r.|o....cxc.^|ssR \n\ -G-w|--|-ww---ww--|--| \n\ -ss \n\ -ss \n\ -ss \n", - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_north == ot_apartments_con_tower_1_entrance) - rotate(1); - if (t_east == ot_apartments_con_tower_1_entrance) - rotate(2); - if (t_south == ot_apartments_con_tower_1_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |---ww|-|-|------| \n\ --w-|cSe..+u|r+.dBBd.| \n\ -..l|c....|-|-|..BB..w \n\ -..l|O....|bTS|......w \n\ -...|ccc..|b..+....d.| \n\ --D-|.hh..|-+-|-+-|--| \n\ -...|.............XssR \n\ -...D.............wssR \n\ -...|-+|..........wssR \n\ -...|r.|oo.FFFF..^|ssR \n\ -...|--|--|-|-|------| \n\ -...|cSe..+u|r+.dBBd.| \n\ -...|c....|-|-|..BB..w \n\ -...|O....|bTS|......w \n\ -...|ccc..|b..+....d.| \n\ -..^|h.h..|-+-|-+-|--| \n\ -...|.............XssR \n\ -...D......A......wssR \n\ -...|-+|..........wssR \n\ -...|r.|^....FFF.o|ssR \n\ -...|--||------------| \n\ -...=xEE|############| \n\ -...=EEE|############| \n", - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker) - place_items("office", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_west == ot_apartments_con_tower_1 && t_north == ot_apartments_con_tower_1){ - rotate(1);} - else if (t_east == ot_apartments_con_tower_1 && t_north == ot_apartments_con_tower_1){ - rotate(2);} - else if (t_east == ot_apartments_con_tower_1 && t_south == ot_apartments_con_tower_1){ - rotate(3);} - } - }break; - -case ot_apartments_mod_tower_1_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - w.htth..FFFF..eSc|....\n\ - w...............O|....\n\ - |-X|..........ccc|....\n\ - Rss|-+----|o...h.|....\n\ - Rss|...BBd|o....A|....\n\ - Rssw...BB.|^.....|....\n\ - Rssw...h..|--|...D....\n\ - Rss|..cxc.+.r|-+-|....\n\ - ||--|+|----|--|r..|....\n\ - |b....|bTS.+..|---|....\n\ - |b.T.S|b...|..+..u|....\n\ - |-----|-+|-|..|---|....\n\ - |.dBBd...+r|...eSc|....\n\ - w..BB....|-|.....O|....\n\ - |.....h..+.....ccc|....\n\ - |--|.cxc.|........D....\n\ - |-www-|o.tt....|....\n\ - Rsssss|.......F|....\n\ - RsssssX..A..FFF|-w-G\n\ - |aaaaa|----ww--| ss\n\ - ss\n\ - ss\n\ - ss\n\ - ss\n", - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_north == ot_apartments_mod_tower_1 && t_west == ot_apartments_mod_tower_1) - rotate(3); - else if (t_north == ot_apartments_mod_tower_1 && t_east == ot_apartments_mod_tower_1) - rotate(0); - else if (t_south == ot_apartments_mod_tower_1 && t_east == ot_apartments_mod_tower_1) - rotate(1); - else if (t_west == ot_apartments_mod_tower_1 && t_south == ot_apartments_mod_tower_1) - rotate(2); -}break; - -case ot_apartments_mod_tower_1:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_apartments_mod_tower_1_entrance && t_east == ot_apartments_mod_tower_1) || (t_north == ot_apartments_mod_tower_1 && t_east == ot_apartments_mod_tower_1_entrance) - || (t_west == ot_apartments_mod_tower_1 && t_north == ot_apartments_mod_tower_1_entrance) || (t_south == ot_apartments_mod_tower_1 && t_west == ot_apartments_mod_tower_1_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |----ww----| \n\ - |dBB....oddw \n\ - |--|.BB.......w \n\ - |r.+..........| \n\ - |--|-----+--|+|--| \n\ - RsswFFFF...^|.STb| \n\ - Rssw........+...b|-w\n\ - RssX........|--|-|EE\n\ - Rss|c.htth...oo|r|EE\n\ - Rss|e.htth.....+.|xE\n\ - |-----|c.........A|-|-=\n\ - |..BBd|cOS........|....\n\ - w..BB.|--|+|......D....\n\ - |d....+.r|u|^....t|....\n\ - |r...||--|-|------|....\n\ - w....|STb|u|...e.S|....\n\ - |....+..b|.+.....c|....\n\ - |--|+|-+-|-|.....O|....\n\ - RssX.....A....cccc|....\n\ - Rssw.........h.hh.|....\n\ - Rssw..............D....\n\ - Rss|..ooo.FFFF...^|....\n\ - R|-|--------------|....\n", - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_west == ot_apartments_mod_tower_1_entrance) - rotate(1); - if (t_north == ot_apartments_mod_tower_1_entrance) - rotate(2); - if (t_east == ot_apartments_mod_tower_1_entrance) - rotate(3); - } - - else if ((t_west == ot_apartments_mod_tower_1_entrance && t_north == ot_apartments_mod_tower_1) || (t_north == ot_apartments_mod_tower_1_entrance && t_east == ot_apartments_con_tower_1) - || (t_west == ot_apartments_mod_tower_1 && t_south == ot_apartments_mod_tower_1_entrance) || (t_south == ot_apartments_mod_tower_1 && t_east == ot_apartments_mod_tower_1_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -....|cSe.u.htth...oo.w \n\ -....|O.....htth......w \n\ -....|ccc..........|X-| \n\ -....|......|----+-|ssR \n\ -....|.....A|dBB...|ssR \n\ -....|.....^|.BB...wssR \n\ -....D...|--|......wssR \n\ -....|-+-|r.+......|ssR \n\ -....|..r|--|----|+|--|| \n\ -....|---|..+.STb|....b| \n\ -....|u..+..|...b|S.T.b| \n\ -....|---|..|-|+-|-----| \n\ -....|cSe...|r+..d.BBd.| \n\ -....|O.....|-|....BB..w \n\ -....|ccc.....+........| \n\ -....D.......A|....o|--| \n\ -....|........|-www-| \n\ -....|t.......wsssssR \n\ -G-w-|t...FFF.XsssssR \n\ -ss |--ww----|aaaaa| \n\ -ss \n\ -ss \n\ -ss \n\ -ss \n", - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_north == ot_apartments_mod_tower_1_entrance) - rotate(1); - if (t_east == ot_apartments_mod_tower_1_entrance) - rotate(2); - if (t_south == ot_apartments_mod_tower_1_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |----ww----| \n\ - wcxc....BBd| \n\ - w.h.....BB.|--| \n\ - |..........+.r| \n\ - |--|+|--+-----|--| \n\ - |bTS.|...FFFF.wssR \n\ -w-|b...+........wssR \n\ -EE|-|--|........XssR \n\ -EE|r|..........c|ssR \n\ -EE|.+..........e|ssR \n\ -=-|-|..hh......c|-----| \n\ -....|..tt....SOc|dBB..| \n\ -....D..tt..|+|--|.BB..w \n\ -....|..hh.^|u|r.+....d| \n\ -....|------|-|--||...r| \n\ -....|S.e..^|u|bTS|....w \n\ -....|c.....+.|b..+....| \n\ -....|O.....|-|-+-|+|--| \n\ -....|cccc...oo..A..XssR \n\ -....|.h.h..........wssR \n\ -....D..............wssR \n\ -....|^....A..FFFF..|ssR \n\ -....|--------------|-|R \n", - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), - mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker) - place_items("office", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_dresser) - place_items("dresser", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack){ - place_items("dresser", 30, i, j, i, j, false, 0); - place_items("jackets", 60, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_cupboard){ - place_items("cleaning", 50, i, j, i, j, false, 0); - place_items("home_hw", 30, i, j, i, j, false, 0); - place_items("cannedfood", 50, i, j, i, j, false, 0); - place_items("pasta", 50, i, j, i, j, false, 0);} - else if (this->furn(i,j) == f_bookcase){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("novels", 40, i, j, i, j, false, 0); - place_items("alcohol", 30, i, j, i, j, false, 0); - place_items("manuals", 20, i, j, i, j, false, 0);} - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else - add_spawn("mon_zombie", rng(1,8), 15, 10); - if (t_west == ot_apartments_mod_tower_1 && t_north == ot_apartments_mod_tower_1){ - rotate(1);} - else if (t_east == ot_apartments_mod_tower_1 && t_north == ot_apartments_mod_tower_1){ - rotate(2);} - else if (t_east == ot_apartments_mod_tower_1 && t_south == ot_apartments_mod_tower_1){ - rotate(3);} - } - }break; - -case ot_office_tower_1_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -ss%|....+...|...|EEED...\n\ -ss%|----|...|...|EEx|...\n\ -ss%Vcdc^|...|-+-|---|...\n\ -ss%Vch..+...............\n\ -ss%V....|...............\n\ -ss%|----|-|-+--ccc--|...\n\ -ss%|..C..C|.....h..r|-+-\n\ -sss=......+..h.....r|...\n\ -ss%|r..CC.|.ddd....r|T.S\n\ -ss%|------|---------|---\n\ -ss%|####################\n\ -ss%|#|------||------|###\n\ -ss%|#|......||......|###\n\ -ss%|||......||......|###\n\ -ss%||x......||......||##\n\ -ss%|||......||......x|##\n\ -ss%|#|......||......||##\n\ -ss%|#|......||......|###\n\ -ss%|#|XXXXXX||XXXXXX|###\n\ -ss%|-|__,,__||__,,__|---\n\ -ss%% x_,,,,_ __,,__ %%\n\ -ss __,,__ _,,,,_ \n\ -ssssss__,,__ss__,,__ssss\n\ -ssssss______ss______ssss\n", - mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("office", 75, 4, 2, 6, 2, false, 0); - place_items("office", 75, 19, 6, 19, 6, false, 0); - place_items("office", 75, 12, 8, 14, 8, false, 0); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 12, 3, density); - else { - if (x_in_y(1,2)){add_spawn("mon_zombie", 2, 15, 7);} - if (x_in_y(1,2)){add_spawn("mon_zombie", rng(1,8), 22, 1);} - if (x_in_y(1,2)){add_spawn("mon_zombie_cop", 1, 22, 4);} - } - { - int num_chairs = rng(0, 6); - for( int i = 0; i < num_chairs; i++ ) { - add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); - } - } - if (t_north == ot_office_tower_1 && t_west == ot_office_tower_1) - rotate(3); - else if (t_north == ot_office_tower_1 && t_east == ot_office_tower_1) - rotate(0); - else if (t_south == ot_office_tower_1 && t_east == ot_office_tower_1) - rotate(1); - else if (t_west == ot_office_tower_1 && t_south == ot_office_tower_1) - rotate(2); -}break; - -case ot_office_tower_1:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_office_tower_1_entrance && t_east == ot_office_tower_1) || (t_north == ot_office_tower_1 && t_east == ot_office_tower_1_entrance) || (t_west == ot_office_tower_1 && t_north == ot_office_tower_1_entrance) || - (t_south == ot_office_tower_1 && t_west == ot_office_tower_1_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -ss \n\ -ss%%%%%%%%%%%%%%%%%%%%%%\n\ -ss%|-HH-|-HH-|-HH-|HH|--\n\ -ss%Vdcxl|dxdl|lddx|..|.S\n\ -ss%Vdh..|dh..|..hd|..+..\n\ -ss%|-..-|-..-|-..-|..|--\n\ -ss%V.................|.T\n\ -ss%V.................|..\n\ -ss%|-..-|-..-|-..-|..|--\n\ -ss%V.h..|..hd|..hd|..|..\n\ -ss%Vdxdl|^dxd|.xdd|..G..\n\ -ss%|----|----|----|..G..\n\ -ss%|llll|..htth......|..\n\ -ss%V.................|..\n\ -ss%V.ddd..........|+-|..\n\ -ss%|..hd|.hh.ceocc|.l|..\n\ -ss%|----|---------|--|..\n\ -ss%Vcdcl|...............\n\ -ss%V.h..+...............\n\ -ss%V...^|...|---|---|...\n\ -ss%|----|...|.R>|EEE|...\n\ -ss%|rrrr|...|.R.|EEED...\n", - mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, t_stairs_down, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 2, 8, density); - else { - add_spawn("mon_zombie", rng(0,5), 15, 7); - if (x_in_y(1,1)){add_spawn("mon_zombie", 2, 5, 20);} - } - place_items("office", 75, 4, 23, 7, 23, false, 0); - place_items("office", 75, 4, 19, 7, 19, false, 0); - place_items("office", 75, 4, 14, 7, 14, false, 0); - place_items("office", 75, 5, 16, 7, 16, false, 0); - place_items("fridge", 80, 14, 17, 14, 17, false, 0); - place_items("cleaning", 75, 19, 17, 20, 17, false, 0); - place_items("cubical_office", 75, 6, 12, 7, 12, false, 0); - place_items("cubical_office", 75, 12, 11, 12, 12, false, 0); - place_items("cubical_office", 75, 16, 11, 17, 12, false, 0); - place_items("cubical_office", 75, 4, 5, 5, 5, false, 0); - place_items("cubical_office", 75, 11, 5, 12, 5, false, 0); - place_items("cubical_office", 75, 14, 5, 16, 5, false, 0); - { - int num_chairs = rng(0, 6); - for( int i = 0; i < num_chairs; i++ ) { - add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); - } - } - if (t_west == ot_office_tower_1_entrance) - rotate(1); - if (t_north == ot_office_tower_1_entrance) - rotate(2); - if (t_east == ot_office_tower_1_entrance) - rotate(3); - } - - else if ((t_west == ot_office_tower_1_entrance && t_north == ot_office_tower_1) || (t_north == ot_office_tower_1_entrance && t_east == ot_office_tower_1) || (t_west == ot_office_tower_1 && t_south == ot_office_tower_1_entrance) || - (t_south == ot_office_tower_1 && t_east == ot_office_tower_1_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -...DEEE|...|..|-----|%ss\n\ -...|EEE|...|..|^...lV%ss\n\ -...|---|-+-|......hdV%ss\n\ -...........G..|..dddV%ss\n\ -...........G..|-----|%ss\n\ -.......|---|..|...ddV%ss\n\ -|+-|...|...+......hdV%ss\n\ -|.l|...|rr.|.^|l...dV%ss\n\ -|--|...|---|--|-----|%ss\n\ -|...........c.......V%ss\n\ -|.......cxh.c.#####.Vsss\n\ -|.......ccccc.......Gsss\n\ -|...................Gsss\n\ -|...................Vsss\n\ -|#..................Gsss\n\ -|#..................Gsss\n\ -|#..................Vsss\n\ -|#............#####.V%ss\n\ -|...................|%ss\n\ ---HHHHHGGHHGGHHHHH--|%ss\n\ -%%%%% ssssssss %%%%%%%ss\n\ - ssssssss ss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("office", 75, 19, 1, 19, 3, false, 0); - place_items("office", 75, 17, 3, 18, 3, false, 0); - place_items("office", 90, 8, 7, 9, 7, false, 0); - place_items("cubical_office", 75, 19, 5, 19, 7, false, 0); - place_items("cleaning", 80, 1, 7, 2, 7, false, 0); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 14, 10, density); - else { - add_spawn("mon_zombie", rng(0,15), 14, 10); - if (x_in_y(1,2)){add_spawn("mon_zombie_cop", 2, 10, 10);} - } - { - int num_chairs = rng(0, 6); - for( int i = 0; i < num_chairs; i++ ) { - add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); - } - } - if (t_north == ot_office_tower_1_entrance) - rotate(1); - if (t_east == ot_office_tower_1_entrance) - rotate(2); - if (t_south == ot_office_tower_1_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ - ss\n\ -%%%%%%%%%%%%%%%%%%%%%%ss\n\ ---|---|--HHHH-HHHH--|%ss\n\ -.T|..l|............^|%ss\n\ -..|-+-|...hhhhhhh...V%ss\n\ ---|...G...ttttttt...V%ss\n\ -.S|...G...ttttttt...V%ss\n\ -..+...|...hhhhhhh...V%ss\n\ ---|...|.............|%ss\n\ -..|...|-------------|%ss\n\ -..G....|l.......dxd^|%ss\n\ -..G....G...h....dh..V%ss\n\ -..|....|............V%ss\n\ -..|....|------|llccc|%ss\n\ -..|...........|-----|%ss\n\ -..|...........|...ddV%ss\n\ -..|----|---|......hdV%ss\n\ -.......+...|..|l...dV%ss\n\ -.......|rrr|..|-----|%ss\n\ -...|---|---|..|l.dddV%ss\n\ -...|xEE|.R>|......hdV%ss\n\ -...DEEE|.R.|..|.....V%ss\n", - mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, t_stairs_down, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(18, 15, "record_accounting", 0); - place_items("cleaning", 75, 3, 5, 5, 5, false, 0); - place_items("office", 75, 10, 7, 16, 8, false, 0); - place_items("cubical_office", 75, 15, 15, 19, 15, false, 0); - place_items("cubical_office", 75, 16, 12, 16, 13, false, 0); - place_items("cubical_office", 75, 17, 19, 19, 19, false, 0); - place_items("office", 75, 17, 21, 19, 21, false, 0); - place_items("office", 75, 16, 11, 17, 12, false, 0); - place_items("cleaning", 75, 8, 20, 10, 20, false, 0); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 9, 15, density); - else { - add_spawn("mon_zombie", rng(0,5), 9, 15); - } - { - int num_chairs = rng(0, 6); - for( int i = 0; i < num_chairs; i++ ) { - add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); - } - } - if (t_west == ot_office_tower_1 && t_north == ot_office_tower_1){ - rotate(1);} - else if (t_east == ot_office_tower_1 && t_north == ot_office_tower_1){ - rotate(2);} - else if (t_east == ot_office_tower_1 && t_south == ot_office_tower_1){ - rotate(3);} - } - }break; - -case ot_office_tower_b_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -sss|........|...|EEED___\n\ -sss|........|...|EEx|___\n\ -sss|........|-+-|---|HHG\n\ -sss|....................\n\ -sss|....................\n\ -sss|....................\n\ -sss|....................\n\ -sss|....,,......,,......\n\ -sss|...,,,,.....,,......\n\ -sss|....,,.....,,,,..xS.\n\ -sss|....,,......,,...SS.\n\ -sss|-|XXXXXX||XXXXXX|---\n\ -sss|s|EEEEEE||EEEEEE|sss\n\ -sss|||EEEEEE||EEEEEE|sss\n\ -sss||xEEEEEE||EEEEEE||ss\n\ -sss|||EEEEEE||EEEEEEx|ss\n\ -sss|s|EEEEEE||EEEEEE||ss\n\ -sss|s|EEEEEE||EEEEEE|sss\n\ -sss|s|------||------|sss\n\ -sss|--------------------\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", t_elevator, t_rock, t_stairs_down, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, f_null, f_null, f_null, f_null, f_bench, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - else { - add_spawn("mon_zombie", rng(0,5), SEEX * 2 - 1, SEEX * 2 - 1); - } - if (t_north == ot_office_tower_b && t_west == ot_office_tower_b) - rotate(3); - else if (t_north == ot_office_tower_b && t_east == ot_office_tower_b) - rotate(0); - else if (t_south == ot_office_tower_b && t_east == ot_office_tower_b) - rotate(1); - else if (t_west == ot_office_tower_b && t_south == ot_office_tower_b) - rotate(2); -}break; - -case ot_office_tower_b:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_office_tower_b_entrance && t_east == ot_office_tower_b) || (t_north == ot_office_tower_b && t_east == ot_office_tower_b_entrance) || (t_west == ot_office_tower_b && t_north == ot_office_tower_b_entrance) || - (t_south == ot_office_tower_b && t_west == ot_office_tower_b_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -sss|--------------------\n\ -sss|,.....,.....,.....,S\n\ -sss|,.....,.....,.....,S\n\ -sss|,.....,.....,.....,S\n\ -sss|,.....,.....,.....,S\n\ -sss|,.....,.....,.....,S\n\ -sss|,.....,.....,.....,S\n\ -sss|....................\n\ -sss|....................\n\ -sss|....................\n\ -sss|....................\n\ -sss|....................\n\ -sss|....................\n\ -sss|...,,...,....,....,S\n\ -sss|..,,,,..,....,....,S\n\ -sss|...,,...,....,....,S\n\ -sss|...,,...,....,....,S\n\ -sss|........,....,....,S\n\ -sss|........,....,....,S\n\ -sss|........|---|---|HHG\n\ -sss|........|.R<|EEE|___\n\ -sss|........|.R.|EEED___\n", - mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", t_elevator, t_rock, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, f_null, f_null, f_null, f_bench, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - else { - add_spawn("mon_zombie", rng(0,5), SEEX * 2 - 1, SEEX * 2 - 1); - } - if (t_west == ot_office_tower_b_entrance){ - rotate(1); - if (x_in_y(1,5)){add_vehicle (g, "car", 17, 7, 180);} - if (x_in_y(1,3)){add_vehicle (g, "motorcycle", 17, 13, 180);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 17, 19, 180);} - } - else if (t_north == ot_office_tower_b_entrance){ - rotate(2); - if (x_in_y(1,5)){add_vehicle (g, "car", 10, 17, 270);} - if (x_in_y(1,3)){add_vehicle (g, "motorcycle", 4, 18, 270);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 16, 17, 270);} - } - else if (t_east == ot_office_tower_b_entrance){ - rotate(3); - if (x_in_y(1,5)){add_vehicle (g, "car", 6, 4, 0);} - if (x_in_y(1,3)){add_vehicle (g, "motorcycle", 6, 10, 180);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 6, 16, 0);} - - } - else{ - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 7, 6, 90);} - if (x_in_y(1,5)){add_vehicle (g, "car", 14, 6, 90);} - if (x_in_y(1,3)){add_vehicle (g, "motorcycle", 19, 6, 90);} - } - } - - else if ((t_west == ot_office_tower_b_entrance && t_north == ot_office_tower_b) || (t_north == ot_office_tower_b_entrance && t_east == ot_office_tower_b) || (t_west == ot_office_tower_b && t_south == ot_office_tower_b_entrance) || - (t_south == ot_office_tower_b && t_east == ot_office_tower_b_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -___DEEE|...|...,,...|sss\n\ -___|EEE|...|..,,,,..|sss\n\ -GHH|---|-+-|...,,...|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -|...................|sss\n\ -|...................|sss\n\ -|,.....,.....,.....,|sss\n\ -|,.....,.....,.....,|sss\n\ -|,.....,.....,.....,|sss\n\ -|,.....,.....,.....,|sss\n\ -|,.....,.....,.....,|sss\n\ -|,.....,.....,.....,|sss\n\ -|-------------------|sss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", t_elevator, t_rock, t_stairs_down, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, f_null, f_null, f_null, f_null, f_bench, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - else { - add_spawn("mon_zombie", rng(0,5), SEEX * 2 - 1, SEEX * 2 - 1); - } - if (t_north == ot_office_tower_b_entrance){ - rotate(1); - if (x_in_y(1,5)){add_vehicle (g, "car", 8, 15, 0);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 7, 10, 180);} - if (x_in_y(1,3)){add_vehicle (g, "beetle", 7, 3, 0);} - } - else if (t_east == ot_office_tower_b_entrance){ - rotate(2); - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 7, 7, 270);} - if (x_in_y(1,5)){add_vehicle (g, "car", 13, 8, 90);} - if (x_in_y(1,3)){add_vehicle (g, "beetle", 20, 7, 90);} - } - else if (t_south == ot_office_tower_b_entrance){ - rotate(3); - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 16, 7, 0);} - if (x_in_y(1,5)){add_vehicle (g, "car", 15, 13, 180);} - if (x_in_y(1,3)){add_vehicle (g, "beetle", 15, 20, 180);} - } - else{ - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 16, 16, 90);} - if (x_in_y(1,5)){add_vehicle (g, "car", 9, 15, 270);} - if (x_in_y(1,3)){add_vehicle (g, "beetle", 4, 16, 270);} - } - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ ---------------------|sss\n\ -S,.....,.....,.....,|sss\n\ -S,.....,.....,.....,|sss\n\ -S,.....,.....,.....,|sss\n\ -S,.....,.....,.....,|sss\n\ -S,.....,.....,.....,|sss\n\ -S,.....,.....,.....,|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -....................|sss\n\ -S,....,....,........|sss\n\ -S,....,....,........|sss\n\ -S,....,....,........|sss\n\ -S,....,....,........|sss\n\ -S,....,....,........|sss\n\ -S,....,....,........|sss\n\ -GHH|---|---|........|sss\n\ -___|xEE|.R<|........|sss\n\ -___DEEE|.R.|...,,...|sss\n", - mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", t_elevator, t_rock, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, f_null, f_null, f_null, f_bench, f_null, f_null, f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - else { - add_spawn("mon_zombie", rng(0,5), SEEX * 2 - 1, SEEX * 2 - 1); - } - if (t_west == ot_office_tower_b && t_north == ot_office_tower_b){ - rotate(1); - if (x_in_y(1,5)){add_vehicle (g, "cube_van", 17, 4, 180);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 17, 10, 180);} - if (x_in_y(1,3)){add_vehicle (g, "car", 17, 17, 180);} - } - else if (t_east == ot_office_tower_b && t_north == ot_office_tower_b){ - rotate(2); - if (x_in_y(1,5)){add_vehicle (g, "cube_van", 6, 17, 270);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 12, 17, 270);} - if (x_in_y(1,3)){add_vehicle (g, "car", 18, 17, 270);} - } - else if (t_east == ot_office_tower_b && t_south == ot_office_tower_b){ - rotate(3); - if (x_in_y(1,5)){add_vehicle (g, "cube_van", 6, 6, 0);} - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 6, 13, 0);} - if (x_in_y(1,3)){add_vehicle (g, "car", 5, 19, 180);} - } - else{ - if (x_in_y(1,5)){add_vehicle (g, "flatbed_truck", 16, 6, 90);} - if (x_in_y(1,5)){add_vehicle (g, "cube_van", 10, 6, 90);} - if (x_in_y(1,3)){add_vehicle (g, "car", 4, 6, 90);} - } - } - }break; - -case ot_church_north: -case ot_church_east: -case ot_church_south: -case ot_church_west:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if (one_in(2)){ - //New England or Country style, single centered steeple low clear windows - mapf::formatted_set_simple(this, 0, 0, -"\ - ^^^^^^ \n\ - |---|--------| \n\ - ||dh.|.6ooo.ll|| \n\ - |l...+.........Dsss \n\ - ^^|--+-|------+--|^^s \n\ - ^||..............||^s \n\ - w.......tt.......w s \n\ - |................| s \n\ - ^w................w^s \n\ - ^|.######..######.|^s \n\ - ^w................w^s \n\ - ^|.######..######.|^s \n\ - w................w s \n\ - |.######..######.| s \n\ - ^w................w^s \n\ - ^|.######..######.|^s \n\ - ^|................|^s \n\ - |-w|----..----|w-| s \n\ - ^^|ll|....|ST|^^ s \n\ - ^|.......+..|^ s \n\ - |----++-|--| s \n\ - O ss O s \n\ - ^^ ss ^^ s \n\ - ^^ ss ^^ s \n", - mapf::basic_bind("O 6 ^ . - | # t + = D w T S e o h c d l s", t_column, t_console, t_shrub, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("O 6 ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(9, 6, "brazier", 0); - spawn_item(14, 6, "brazier", 0); - place_items("church", 40, 5, 5, 8, 16, false, 0); - place_items("church", 40, 5, 5, 8, 16, false, 0); - place_items("church", 85, 12, 2, 14, 2, false, 0); - place_items("office", 60, 6, 2, 8, 3, false, 0); - place_items("jackets", 85, 7, 18, 8, 18, false, 0); - tmpcomp = add_computer(11, 2, _("Church Bells 1.2"), 0); - tmpcomp->add_option(_("Gathering Toll"), COMPACT_TOLL, 0); - tmpcomp->add_option(_("Wedding Toll"), COMPACT_TOLL, 0); - tmpcomp->add_option(_("Funeral Toll"), COMPACT_TOLL, 0); - } - else { - //Gothic Style, unreachable high stained glass windows, stone construction - mapf::formatted_set_simple(this, 0, 0, -"\ - $$ W W $$ \n\ - $$ WWWWGVBBVGWWWW $$ \n\ - W..h.cccc.h..W \n\ - WWVWWR..........RWWBWW \n\ -WW#.#.R....cc....R.#.#WW\n\ - G#.#.R..........R.#.#V \n\ - V#.#.Rrrrr..rrrrR.#.#B \n\ -WW#..................#WW\n\ - WW+WW#####..#####WW+WW \n\ -ssss V............B ssss\n\ -s WW#####..#####WW s\n\ -s $ WW............WW $ s\n\ -s $ G#####..#####V $ s\n\ -s $ B............G $ s\n\ -s $ WW#####..#####WW $ s\n\ -s $ WW............WW $ s\n\ -s V####....####B s\n\ -s WWWW--|--gg-----WWWW s\n\ -s WllWTS|.....lll.W..W s\n\ -s W..+..+.........+..W s\n\ -s W..WWWWWW++WWWWWW6.W s\n\ -s W.CWW$$WWssWW$$WW..W s\n\ -s WWWWW ss WWWWW s\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("C V G B W R r 6 $ . - | # t + g T S h c l s", t_floor, t_window_stained_red, t_window_stained_green, t_window_stained_blue, t_rock, t_railing_v, t_railing_h, t_console, t_shrub, t_rock_floor, t_wall_h, t_wall_v, t_rock_floor, t_rock_floor, t_door_c, t_door_glass_c, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor, t_sidewalk), - mapf::basic_bind("C V G B W R r 6 $ . - | # t + g T S h c l s", f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_toilet, f_sink, f_chair, f_counter, f_locker, f_null)); - spawn_item(8, 4, "brazier", 0); - spawn_item(15, 4, "brazier", 0); - place_items("church", 70, 6, 7, 17, 16, false, 0); - place_items("church", 70, 6, 7, 17, 16, false, 0); - place_items("church", 60, 6, 7, 17, 16, false, 0); - place_items("cleaning", 60, 3, 18, 4, 21, false, 0); - place_items("jackets", 85, 14, 18, 16, 18, false, 0); - tmpcomp = add_computer(19, 20, _("Church Bells 1.2"), 0); - tmpcomp->add_option(_("Gathering Toll"), COMPACT_TOLL, 0); - tmpcomp->add_option(_("Wedding Toll"), COMPACT_TOLL, 0); - tmpcomp->add_option(_("Funeral Toll"), COMPACT_TOLL, 0); - } - if (terrain_type == ot_church_east) - rotate(3); - if (terrain_type == ot_church_north) - rotate(2); - if (terrain_type == ot_church_west) - rotate(1); - } break; - -case ot_cathedral_1_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -ss ##...........\n\ -ss ##bbbb...bbbb\n\ -ss #...........\n\ -ss wbbbb...bbbb\n\ -ss w...........\n\ -ss wbbbb...bbbb\n\ -ss #...........\n\ -ss ##bbbb...bbbb\n\ -ss ##...........\n\ -ss #bbb....bbbb\n\ -ss w...........\n\ -ss #####GG###HH\n\ -ss w>R.....#...\n\ -ss ########...........\n\ -ss #......#...........\n\ -ss w......#.lllcc.....\n\ -ss #......###ww####++#\n\ -ss w......# ##sss\n\ -ss #......# ssss\n\ -ss ###ww### ssss\n\ -ss ssss\n\ -ss ssss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bench) - place_items("church", 10, i, j, i, j, false, 0); - if (this->furn(i,j) == f_locker) - place_items("jackets", 60, i, j, i, j, false, 0); - if (this->ter(i,j) == t_window_stained_red){ - if (one_in(3)) { - ter_set(i,j,t_window_stained_blue); - } else if (one_in(3)) { - ter_set(i,j,t_window_stained_green); - } - } - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); - } - if (t_north == ot_cathedral_1 && t_west == ot_cathedral_1) - rotate(3); - else if (t_north == ot_cathedral_1 && t_east == ot_cathedral_1) - rotate(0); - else if (t_south == ot_cathedral_1 && t_east == ot_cathedral_1) - rotate(1); - else if (t_west == ot_cathedral_1 && t_south == ot_cathedral_1) - rotate(2); -}break; - -case ot_cathedral_1:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_cathedral_1_entrance && t_east == ot_cathedral_1) || (t_north == ot_cathedral_1 && t_east == ot_cathedral_1_entrance) || (t_west == ot_cathedral_1 && t_north == ot_cathedral_1_entrance) || - (t_south == ot_cathedral_1 && t_west == ot_cathedral_1_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ - ## \n\ - ###wwww\n\ - ##....tt\n\ - ##.......\n\ - w..h.....\n\ - ###.....ttt\n\ - w..........\n\ - ## ###R.........\n\ - ####www#..rrrrrrrr..\n\ - ###...................\n\ - #...C.................\n\ - ##......bbbbbbb...bbbbb\n\ - w.....................\n\ - w..bbbbbbbbbbb...bbbbb\n\ - w.....................\n\ - ##..bbbbbbbbbbb...bbbbb\n\ - #.....................\n\ - ###...................\n\ - #####+##............\n\ - ##sss##bbbb...bbbb\n\ -sssssssssss>#...........\n\ -sssssssssssswbbbb...bbbb\n\ -ss w...........\n\ -ss #bbbb...bbbb\n", - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(20, 2, "brazier", 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bench) - place_items("church", 10, i, j, i, j, false, 0); - if (this->furn(i,j) == f_locker) - place_items("jackets", 60, i, j, i, j, false, 0); - if (this->ter(i,j) == t_window_stained_red){ - if (one_in(3)) { - ter_set(i,j,t_window_stained_blue); - } else if (one_in(3)) { - ter_set(i,j,t_window_stained_green); - } - } - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); - } - if (t_west == ot_cathedral_1_entrance) - rotate(1); - if (t_north == ot_cathedral_1_entrance) - rotate(2); - if (t_east == ot_cathedral_1_entrance) - rotate(3); - } - - else if ((t_west == ot_cathedral_1_entrance && t_north == ot_cathedral_1) || (t_north == ot_cathedral_1_entrance && t_east == ot_cathedral_1) || (t_west == ot_cathedral_1 && t_south == ot_cathedral_1_entrance) || - (t_south == ot_cathedral_1 && t_east == ot_cathedral_1_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -..........## ss\n\ -bbb...bbbb## ss\n\ -..........# ss\n\ -bbb...bbbbw ss\n\ -..........w ss\n\ -bbb...bbbbw ss\n\ -..........# ss\n\ -bbb...bbbb## ss\n\ -..........## ss\n\ -bbb....bbb# ss\n\ -..........w ss\n\ -H###GG##### ss\n\ -..#.....R>w ss\n\ -..........######## ss\n\ -..........#......# ss\n\ -...ccccc..#......w ss\n\ -++####ww###......# ss\n\ -ss## #......w ss\n\ -sss #......# ss\n\ -sss ###ww### ss\n\ -sss ss\n\ -sss ss\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bench) - place_items("church", 10, i, j, i, j, false, 0); - if (this->furn(i,j) == f_locker) - place_items("jackets", 60, i, j, i, j, false, 0); - if (this->ter(i,j) == t_window_stained_red){ - if (one_in(3)) { - ter_set(i,j,t_window_stained_blue); - } else if (one_in(3)) { - ter_set(i,j,t_window_stained_green); - } - } - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); - } - if (t_north == ot_cathedral_1_entrance) - rotate(1); - if (t_east == ot_cathedral_1_entrance) - rotate(2); - if (t_south == ot_cathedral_1_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ - ## \n\ -www### \n\ -t....## \n\ -......## \n\ -....h..w \n\ -tt.....### \n\ -.........w \n\ -........R### ## \n\ -.rrrrrrrr..#www#### \n\ -..................### \n\ -................C...# \n\ -bbbb...bbbbbbb......## \n\ -....................w \n\ -bbbb...bbbbbbbbbbb..w \n\ -....................w \n\ -bbbb...bbbbbbbbbbb..## \n\ -....................# \n\ -..................### \n\ -...........##+##### \n\ -bbb...bbbb##sss## \n\ -..........#>ssssssssssss\n\ -bbb...bbbbwsssssssssssss\n\ -..........w ss\n\ -bbb...bbbb# ss\n", - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(2, 2, "brazier", 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bench) - place_items("church", 10, i, j, i, j, false, 0); - if (this->ter(i,j) == t_window_stained_red){ - if (one_in(3)) { - ter_set(i,j,t_window_stained_blue); - } else if (one_in(3)) { - ter_set(i,j,t_window_stained_green); - } - } - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); - } - if (t_west == ot_cathedral_1 && t_north == ot_cathedral_1){ - rotate(1);} - else if (t_east == ot_cathedral_1 && t_north == ot_cathedral_1){ - rotate(2);} - else if (t_east == ot_cathedral_1 && t_south == ot_cathedral_1){ - rotate(3);} - } - }break; - - case ot_cathedral_b_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -############|+|+|+|..|..\n\ -############|T|T|T|..|..\n\ -############|-|-|-|--|..\n\ -############|......d.|..\n\ -############|hdhd..dh|..\n\ -############|........|..\n\ -############|hdhd....+..\n\ -############|........|..\n\ -############|hdhd....|..\n\ -############|--------|..\n\ -############|..^tt^.....\n\ -############|...........\n\ -############|<..........\n\ -############|--D-|-+-ccc\n\ -############|l...|......\n\ -############|l..r|...ddd\n\ -############|l..r|....hd\n\ -############|----|------\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n", - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, f_null, f_null, f_null, f_null, f_null, f_null, f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, f_counter, f_desk, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("school", 50, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack) - place_items("cleaning", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack) - place_items("cleaning", 50, i, j, i, j, false, 0); - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); - } - if (t_north == ot_cathedral_b && t_west == ot_cathedral_b) - rotate(3); - else if (t_north == ot_cathedral_b && t_east == ot_cathedral_b) - rotate(0); - else if (t_south == ot_cathedral_b && t_east == ot_cathedral_b) - rotate(1); - else if (t_west == ot_cathedral_b && t_south == ot_cathedral_b) - rotate(2); -}break; - -case ot_cathedral_b:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_cathedral_b_entrance && t_east == ot_cathedral_b) || (t_north == ot_cathedral_b && t_east == ot_cathedral_b_entrance) || (t_west == ot_cathedral_b && t_north == ot_cathedral_b_entrance) || - (t_south == ot_cathedral_b && t_west == ot_cathedral_b_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -########################\n\ -####################____\n\ -###################__o__\n\ -###################_____\n\ -###################__o__\n\ -################________\n\ -################________\n\ -#######|---|______o___o_\n\ -#######|rrr|____________\n\ -#######|...D____________\n\ -######||-+-|------------\n\ -######|c....c.hhh.......\n\ -######|S....c.....C..C..\n\ -######|c....c...........\n\ -######|O....c.....C..C..\n\ -######|O....|...........\n\ -######|e....+.htth......\n\ -######|e...r|.htth......\n\ -######|---|-|.htth..ht..\n\ -##########|<+........t..\n\ -##########|-|--------|..\n\ -############|..S.S.S.|..\n\ -############|........+..\n", - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, f_null, f_null, f_null, f_null, f_null, f_null, f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, f_counter, f_desk, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_fridge) - place_items("fridge", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_oven) - place_items("oven", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_table) - place_items("fridgesnacks", 40, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_rack) - place_items("cannedfood", 40, i, j, i, j, false, 0); - } - } - add_spawn("mon_blank", rng(1,3), 23, 5); - if (t_west == ot_cathedral_b_entrance) - rotate(1); - else if (t_north == ot_cathedral_b_entrance) - rotate(2); - else if (t_east == ot_cathedral_b_entrance) - rotate(3); - } - - else if ((t_west == ot_cathedral_b_entrance && t_north == ot_cathedral_b) || (t_north == ot_cathedral_b_entrance && t_east == ot_cathedral_b) || (t_west == ot_cathedral_b && t_south == ot_cathedral_b_entrance) || - (t_south == ot_cathedral_b && t_east == ot_cathedral_b_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -.|..|+|D|+|#############\n\ -.|..|T|T|T|#############\n\ -.|--|-|-|-|#############\n\ -.|........|#############\n\ -.|..htth..|#############\n\ -.|..htth..|#############\n\ -.+..htth..|#############\n\ -.|..htth..|#############\n\ -.|........|#############\n\ -.|--------|#############\n\ -...hhh...^|#############\n\ -..........|#############\n\ -.........<|#############\n\ -cc-|-D----|#############\n\ -...|^..dxd|#############\n\ -...+....hd|#############\n\ -.ll|l.....|#############\n\ ----|------|#############\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n", - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, f_null, f_null, f_null, f_null, f_null, f_null, f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, f_counter, f_desk, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("office", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_locker) - place_items("office", 70, i, j, i, j, false, 0); - if (this->furn(i,j) == f_table) - place_items("office", 30, i, j, i, j, false, 0); - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); - } - if (t_north == ot_cathedral_b_entrance) - rotate(1); - else if (t_east == ot_cathedral_b_entrance) - rotate(2); - else if (t_south == ot_cathedral_b_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -########################\n\ -____####################\n\ -t_o__###################\n\ -_____###################\n\ -__o__###################\n\ -________################\n\ -________################\n\ -_o___o______############\n\ -____________############\n\ -____________############\n\ -----------|---|#########\n\ -..........|htt|#########\n\ -C..C..C...|.tt|#########\n\ -..........D.tt|#########\n\ -C..C..C...D.tt|#########\n\ -..........|.tt|#########\n\ -C..C..C...|hhh|#########\n\ -..........|hhh|#########\n\ -..........|-|-|#########\n\ -....hh....+<|###########\n\ -.|--------|-|###########\n\ -.|.S.S.S..|#############\n\ -.+........|#############\n", - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, f_null, f_null, f_null, f_null, f_null, f_null, f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(0, 3, "small_relic", 0); - add_spawn("mon_blank", rng(1,3), 0, 5); - if (t_west == ot_cathedral_b && t_north == ot_cathedral_b) - rotate(1); - else if (t_east == ot_cathedral_b && t_north == ot_cathedral_b) - rotate(2); - else if (t_east == ot_cathedral_b && t_south == ot_cathedral_b) - rotate(3); - } - }break; - - case ot_s_grocery_north: - case ot_s_grocery_east: - case ot_s_grocery_south: - case ot_s_grocery_west: - fill_background(this, &grass_or_dirt); - square(this, t_floor, 3, 3, SEEX * 2 - 4, SEEX * 2 - 4); - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j == 2 && ((i > 4 && i < 8) || (i > 15 && i < 19))) - ter_set(i, j, t_window); - else if ((j == 2 && (i == 11 || i == 12)) || (i == 6 && j == 20)) - ter_set(i, j, t_door_c); - else if (((j == 2 || j == SEEY * 2 - 3) && i > 1 && i < SEEX * 2 - 2) || - (j == 18 && i > 2 && i < 7)) - ter_set(i, j, t_wall_h); - else if (((i == 2 || i == SEEX * 2 - 3) && j > 2 && j < SEEY * 2 - 3) || - (i == 6 && j == 19)) - ter_set(i, j, t_wall_v); - else if (j > 4 && j < 8) { - if (i == 5 || i == 9 || i == 13 || i == 17) - set(i, j, t_floor, f_counter); - else if (i == 8 || i == 12 || i == 16 || i == 20) - set(i, j, t_floor, f_rack); - else if (i > 2 && i < SEEX * 2 - 3) - ter_set(i, j, t_floor); - else - ter_set(i, j, grass_or_dirt()); - } else if ((j == 7 && (i == 3 || i == 4)) || - ((j == 11 || j == 14) && (i == 18 || i == 19)) || - ((j > 9 && j < 16) && (i == 6 || i == 7 || i == 10 || - i == 11 || i == 14 || i == 15 || - i == 20))) - set(i, j, t_floor, f_rack); - else if ((j == 18 && i > 15 && i < 21) || (j == 19 && i == 16)) - set(i, j, t_floor, f_counter); - else if ((i == 3 && j > 9 && j < 16) || - (j == 20 && ((i > 7 && i < 15) || (i > 18 && i < 21)))) - set(i, j, t_floor, f_glass_fridge); - else if (i > 2 && i < SEEX * 2 - 3 && j > 2 && j < SEEY * 2 - 3) - ter_set(i, j, t_floor); - else - ter_set(i, j, grass_or_dirt()); - } - } - - { - int num_carts = rng(0, 5); - for( int i = 0; i < num_carts; i++ ) { - add_vehicle (g, "shopping_cart", rng(3, 21), rng(3, 21), 90); - } - } - - place_items("fridgesnacks", 65, 3, 10, 3, 15, false, 0); - place_items("fridge", 70, 8, 20, 14, 20, false, 0); - place_items("fridge", 50, 19, 20, 20, 20, false, 0); - place_items("softdrugs", 55, 6, 10, 6, 15, false, 0); - place_items("cleaning", 88, 7, 10, 7, 15, false, 0); - place_items("kitchen", 75, 10, 10, 10, 15, false, 0); - place_items("snacks", 78, 11, 10, 11, 15, false, 0); - place_items("cannedfood", 80, 14, 10, 14, 15, false, 0); - place_items("pasta", 74, 15, 10, 15, 15, false, 0); - place_items("produce", 60, 20, 10, 20, 15, false, 0); - place_items("produce", 50, 18, 11, 19, 11, false, 0); - place_items("produce", 50, 18, 10, 20, 15, false, 0); - for (int i = 8; i < 21; i +=4) { // Checkout snacks & magazines - place_items("snacks", 50, i, 5, i, 6, false, 0); - place_items("magazines", 70, i, 7, i, 7, false, 0); - } - if (terrain_type == ot_s_grocery_east) - rotate(1); - if (terrain_type == ot_s_grocery_south) - rotate(2); - if (terrain_type == ot_s_grocery_west) - rotate(3); - place_spawns(g, "GROUP_GROCERY", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_hardware_north: - case ot_s_hardware_east: - case ot_s_hardware_south: - case ot_s_hardware_west: - fill_background(this, &grass_or_dirt); - square(this, t_floor, 3, 3, SEEX * 2 - 4, SEEX * 2 - 4); - rn = 0; // No back door -// if (!one_in(3)) -// rn = 1; // Old-style back door - if (!one_in(6)) - rn = 2; // Paved back area - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j == 3 && ((i > 5 && i < 9) || (i > 14 && i < 18))) - ter_set(i, j, t_window); - else if ((j == 3 && i > 1 && i < SEEX * 2 - 2) || - (j == 15 && i > 1 && i < 14) || - (j == SEEY * 2 - 3 && i > 12 && i < SEEX * 2 - 2)) - ter_set(i, j, t_wall_h); - else if ((i == 2 && j > 3 && j < 15) || - (i == SEEX * 2 - 3 && j > 3 && j < SEEY * 2 - 3) || - (i == 13 && j > 15 && j < SEEY * 2 - 3)) - ter_set(i, j, t_wall_v); - else if ((i > 3 && i < 10 && j == 6) || (i == 9 && j > 3 && j < 7)) - set(i, j, t_floor, f_counter); - else if (((i == 3 || i == 6 || i == 7 || i == 10 || i == 11) && - j > 8 && j < 15) || - (i == SEEX * 2 - 4 && j > 3 && j < SEEX * 2 - 4) || - (i > 14 && i < 18 && - (j == 8 || j == 9 || j == 12 || j == 13)) || - (j == SEEY * 2 - 4 && i > 13 && i < SEEX * 2 - 4) || - (i > 15 && i < 18 && j > 15 && j < 18) || - (i == 9 && j == 7)) - set(i, j, t_floor, f_rack); - else if ((i > 2 && i < SEEX * 2 - 3 && j > 3 && j < 15) || - (i > 13 && i < SEEX * 2 - 3 && j > 14 && j < SEEY * 2 - 3)) - ter_set(i, j, t_floor); - else if (rn == 2 && i > 1 && i < 13 && j > 15 && j < SEEY * 2 - 3) - ter_set(i, j, t_pavement); - else - ter_set(i, j, grass_or_dirt()); - } - } - ter_set(rng(10, 13), 3, t_door_c); - if (rn > 0) - ter_set(13, rng(16, 19), (one_in(3) ? t_door_c : t_door_locked)); - if (rn == 2) { - if (one_in(5)) - place_gas_pump(rng(4, 10), 16, rng(500, 5000)); - else ter_set(rng(4, 10), 16, t_recycler); - if (one_in(3)) { // Place a dumpster - int startx = rng(2, 11), starty = rng(18, 19); - if (startx == 11) - starty = 18; - bool hori = (starty == 18 ? false : true); - for (int i = startx; i <= startx + (hori ? 3 : 2); i++) { - for (int j = starty; j <= starty + (hori ? 2 : 3); j++) - furn_set(i, j, f_dumpster); - } - if (hori) - place_items("trash", 30, startx, starty, startx+3, starty+2, false, 0); - else - place_items("trash", 30, startx, starty, startx+2, starty+3, false, 0); - } - place_items("road", 30, 2, 16, 12, SEEY * 2 - 3, false, 0); - } - - place_items("magazines", 70, 9, 7, 9, 7, false, 0); - if (one_in(4)) - place_items("snacks", 70, 9, 7, 9, 7, false, 0); - - if (!one_in(3)) - place_items("hardware", 80, 3, 9, 3, 14, false, 0); - else if (!one_in(3)) - place_items("tools", 80, 3, 9, 3, 14, false, 0); - else - place_items("bigtools", 80, 3, 9, 3, 14, false, 0); - - if (!one_in(3)) - place_items("hardware", 80, 6, 9, 6, 14, false, 0); - else if (!one_in(3)) - place_items("tools", 80, 6, 9, 6, 14, false, 0); - else - place_items("bigtools", 80, 6, 9, 6, 14, false, 0); - - if (!one_in(4)) - place_items("tools", 80, 7, 9, 7, 14, false, 0); - else if (one_in(4)) - place_items("mischw", 80, 7, 9, 7, 14, false, 0); - else - place_items("hardware", 80, 7, 9, 7, 14, false, 0); - if (!one_in(4)) - place_items("tools", 80, 10, 9, 10, 14, false, 0); - else if (one_in(4)) - place_items("mischw", 80, 10, 9, 10, 14, false, 0); - else - place_items("hardware", 80, 10, 9, 10, 14, false, 0); - - if (!one_in(3)) - place_items("bigtools", 75, 11, 9, 11, 14, false, 0); - else if (one_in(2)) - place_items("cleaning", 75, 11, 9, 11, 14, false, 0); - else - place_items("tools", 75, 11, 9, 11, 14, false, 0); - if (one_in(2)) - place_items("cleaning", 65, 15, 8, 17, 8, false, 0); - else - place_items("snacks", 65, 15, 8, 17, 8, false, 0); - if (one_in(4)) - place_items("hardware", 74, 15, 9, 17, 9, false, 0); - else - place_items("cleaning", 74, 15, 9, 17, 9, false, 0); - if (one_in(4)) - place_items("hardware", 74, 15, 12, 17, 12, false, 0); - else - place_items("cleaning", 74, 15, 12, 17, 12, false, 0); - place_items("mischw", 90, 20, 4, 20, 19, false, 0); - { - int num_carts = rng(1, 3); - for( int i = 0; i < num_carts; i++ ) { - add_vehicle (g, "wheelbarrow", rng(4, 19), rng(3, 11), 90, -1, -1, false); - } - } - if (terrain_type == ot_s_hardware_east) - rotate(1); - if (terrain_type == ot_s_hardware_south) - rotate(2); - if (terrain_type == ot_s_hardware_west) - rotate(3); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_electronics_north: - case ot_s_electronics_east: - case ot_s_electronics_south: - case ot_s_electronics_west: - fill_background(this, &grass_or_dirt); - square(this, t_floor, 4, 4, SEEX * 2 - 4, SEEY * 2 - 4); - line(this, t_wall_v, 3, 4, 3, SEEY * 2 - 4); - line(this, t_wall_v, SEEX * 2 - 3, 4, SEEX * 2 - 3, SEEY * 2 - 4); - line(this, t_wall_h, 3, 3, SEEX * 2 - 3, 3); - line(this, t_wall_h, 3, SEEY * 2 - 3, SEEX * 2 - 3, SEEY * 2 - 3); - ter_set(13, 3, t_door_c); - line(this, t_window, 10, 3, 11, 3); - line(this, t_window, 16, 3, 18, 3); - line(this, t_window, SEEX * 2 - 3, 9, SEEX * 2 - 3, 11); - line(this, t_window, SEEX * 2 - 3, 14, SEEX * 2 - 3, 16); - line_furn(this, f_counter, 4, SEEY * 2 - 4, SEEX * 2 - 4, SEEY * 2 - 4); - line_furn(this, f_counter, 4, SEEY * 2 - 5, 4, SEEY * 2 - 9); - line_furn(this, f_counter, SEEX * 2 - 4, SEEY * 2 - 5, SEEX * 2 - 4, SEEY * 2 - 9); - line_furn(this, f_counter, SEEX * 2 - 7, 4, SEEX * 2 - 7, 6); - line_furn(this, f_counter, SEEX * 2 - 7, 7, SEEX * 2 - 5, 7); - line_furn(this, f_rack, 9, SEEY * 2 - 5, 9, SEEY * 2 - 9); - line_furn(this, f_rack, SEEX * 2 - 9, SEEY * 2 - 5, SEEX * 2 - 9, SEEY * 2 - 9); - line_furn(this, f_rack, 4, 4, 4, SEEY * 2 - 10); - line_furn(this, f_rack, 5, 4, 8, 4); - place_items("consumer_electronics", 85, 4, SEEY * 2 - 4, SEEX * 2 - 4, - SEEY * 2 - 4, false, turn - 50); - place_items("consumer_electronics", 85, 4, SEEY * 2 - 5, 4, SEEY * 2 - 9, - false, turn - 50); - place_items("consumer_electronics", 85, SEEX * 2 - 4, SEEY * 2 - 5, - SEEX * 2 - 4, SEEY * 2 - 9, false, turn - 50); - place_items("consumer_electronics", 85, 9, SEEY * 2 - 5, 9, SEEY * 2 - 9, - false, turn - 50); - place_items("consumer_electronics", 85, SEEX * 2 - 9, SEEY * 2 - 5, - SEEX * 2 - 9, SEEY * 2 - 9, false, turn - 50); - place_items("consumer_electronics", 85, 4, 4, 4, SEEY * 2 - 10, false, - turn - 50); - place_items("consumer_electronics", 85, 5, 4, 8, 4, false, turn - 50); - if (terrain_type == ot_s_electronics_east) - rotate(1); - if (terrain_type == ot_s_electronics_south) - rotate(2); - if (terrain_type == ot_s_electronics_west) - rotate(3); - place_spawns(g, "GROUP_ELECTRO", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_sports_north: - case ot_s_sports_east: - case ot_s_sports_south: - case ot_s_sports_west: - lw = rng(0, 3); - rw = SEEX * 2 - 1 - rng(0, 3); - tw = rng(3, 10); - bw = SEEY * 2 - 1 - rng(0, 3); - cw = bw - rng(3, 5); - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (((j == tw || j == bw) && i >= lw && i <= rw) || - (j == cw && i > lw && i < rw)) - ter_set(i, j, t_wall_h); - else if ((i == lw || i == rw) && j > tw && j < bw) - ter_set(i, j, t_wall_v); - else if ((j == cw - 1 && i > lw && i < rw - 4) || - (j < cw - 3 && j > tw && (i == lw + 1 || i == rw - 1))) - set(i, j, t_floor, f_rack); - else if (j == cw - 3 && i > lw && i < rw - 4) - set(i, j, t_floor, f_counter); - else if (j > tw && j < bw && i > lw && i < rw) - ter_set(i, j, t_floor); - else if (tw >= 6 && j >= tw - 6 && j < tw && i >= lw && i <= rw) { - if ((i - lw) % 4 == 0) - ter_set(i, j, t_pavement_y); - else - ter_set(i, j, t_pavement); - } else - ter_set(i, j, grass_or_dirt()); - } - } - rn = rng(tw + 2, cw - 6); - for (int i = lw + 3; i <= rw - 5; i += 4) { - if (cw - 6 > tw + 1) { - furn_set(i , rn + 1, f_rack); - furn_set(i , rn , f_rack); - furn_set(i + 1, rn + 1, f_rack); - furn_set(i + 1, rn , f_rack); - place_items("camping", 86, i, rn, i + 1, rn + 1, false, 0); - } else if (cw - 5 > tw + 1) { - furn_set(i , cw - 5, f_rack); - furn_set(i + 1, cw - 5, f_rack); - place_items("camping", 80, i, cw - 5, i + 1, cw - 5, false, 0); - } - } - ter_set(rw - rng(2, 3), cw, t_door_c); - rn = rng(2, 4); - for (int i = lw + 2; i <= lw + 2 + rn; i++) - ter_set(i, tw, t_window); - for (int i = rw - 2; i >= rw - 2 - rn; i--) - ter_set(i, tw, t_window); - ter_set(rng(lw + 3 + rn, rw - 3 - rn), tw, t_door_c); - if (one_in(4)) - ter_set(rng(lw + 2, rw - 2), bw, t_door_locked); - place_items("allsporting", 90, lw + 1, cw - 1, rw - 5, cw - 1, false, 0); - place_items("sports", 82, lw + 1, tw + 1, lw + 1, cw - 4, false, 0); - place_items("sports", 82, rw - 1, tw + 1, rw - 1, cw - 4, false, 0); - if (!one_in(4)) - place_items("allsporting", 92, lw + 1, cw + 1, rw - 1, bw - 1, false, 0); - - if (terrain_type == ot_s_sports_east) - rotate(1); - if (terrain_type == ot_s_sports_south) - rotate(2); - if (terrain_type == ot_s_sports_west) - rotate(3); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_liquor_north: - case ot_s_liquor_east: - case ot_s_liquor_south: - case ot_s_liquor_west: - fill_background(this, &grass_or_dirt); - square(this, t_pavement, 3, 13, SEEX*2-4, SEEY*2-1); - square(this, t_floor, 3, 2, SEEX*2-4, 12); - mapf::formatted_set_simple(this, 3, 2, -"\ ---:------------:--\n\ -|# ##### c |\n\ -|# ## c |\n\ -|# ## ## ccc |\n\ -|# ## ## |\n\ -|# ## &|\n\ -| ##### &|\n\ -|---- ##### &|\n\ -| | &|\n\ -| | &&&|\n\ -------------------\n", - mapf::basic_bind("- | :", t_wall_h, t_wall_v, t_window), - mapf::basic_bind("# c &", f_rack, f_counter, f_glass_fridge)); - square_furn(this, f_dumpster, 5, 13, 7, 14); - square_furn(this, f_dumpster, SEEX*2-6, 15, SEEX*2-5, 17); - - ter_set(rng(13, 15), 2, t_door_c); - ter_set(rng(4, 6), 9, t_door_c); - ter_set(rng(9, 16), 12, t_door_c); - - place_items("alcohol", 96, 4, 3, 4, 7, false, 0); - place_items("alcohol", 96, 7, 3, 11, 3, false, 0); - place_items("alcohol", 96, 7, 4, 8, 7, false, 0); - place_items("alcohol", 96, 11, 8, 15, 9, false, 0); - place_items("snacks", 85, 11, 5, 12, 6, false, 0); - place_items("fridgesnacks", 90, 19, 7, 19, 10, false, 0); - place_items("fridgesnacks", 90, 17, 11, 19, 11, false, 0); - place_items("behindcounter", 80, 17, 3, 19, 4, false, 0); - place_items("trash", 30, 5, 14, 7, 14, false, 0); - place_items("trash", 30, 18, 15, 18, 17, false, 0); - - { - int num_carts = rng(0, 3); - for( int i = 0; i < num_carts; i++ ) { - add_vehicle (g, "shopping_cart", rng(4, 19), rng(3, 11), 90); - } - } - - if (terrain_type == ot_s_liquor_east) - rotate(1); - if (terrain_type == ot_s_liquor_south) - rotate(2); - if (terrain_type == ot_s_liquor_west) - rotate(3); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_gun_north: - case ot_s_gun_east: - case ot_s_gun_south: - case ot_s_gun_west: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i == 2 || i == SEEX * 2 - 3) && j > 6 && j < SEEY * 2 - 1) - ter_set(i, j, t_wall_v); - else if ((i == 8 && j > 6 && j < 13) || - (j == 16 && (i == 5 || i == 8 || i == 11 || i == 14 || i == 17))) - set(i, j, t_floor, f_counter); - else if ((j == 6 && ((i > 4 && i < 8) || (i > 15 && i < 19)))) - ter_set(i, j, t_window); - else if ((j == 14 && i > 3 && i < 15)) - ter_set(i, j, t_wall_glass_h); - else if (j == 16 && i == SEEX * 2 - 4) - ter_set(i, j, t_door_c); - else if (((j == 6 || j == SEEY * 2 - 1) && i > 1 && i < SEEX * 2 - 2) || - ((j == 16 || j == 14) && i > 2 && i < SEEX * 2 - 3)) - ter_set(i, j, t_wall_h); - else if (((i == 3 || i == SEEX * 2 - 4) && j > 6 && j < 14) || - ((j > 8 && j < 12) && (i == 12 || i == 13 || i == 16)) || - (j == 13 && i > 15 && i < SEEX * 2 - 4)) - set(i, j, t_floor, f_rack); - else if (i > 2 && i < SEEX * 2 - 3 && j > 6 && j < SEEY * 2 - 1) - ter_set(i, j, t_floor); - else if ((j > 0 && j < 6 && - (i == 2 || i == 6 || i == 10 || i == 17 || i == SEEX * 2 - 3))) - ter_set(i, j, t_pavement_y); - else if (j < 6 && i > 1 && i < SEEX * 2 - 2) - ter_set(i, j, t_pavement); - else - ter_set(i, j, grass_or_dirt()); - } - } - ter_set(rng(11, 14), 6, t_door_c); - ter_set(rng(5, 14), 14, t_door_c); - place_items("pistols", 70, 12, 9, 13, 11, false, 0); - place_items("shotguns", 60, 16, 9, 16, 11, false, 0); - place_items("rifles", 80, 20, 7, 20, 12, false, 0); - place_items("smg", 25, 3, 7, 3, 8, false, 0); - place_items("assault", 18, 3, 9, 3, 10, false, 0); - place_items("ammo", 93, 3, 11, 3, 13, false, 0); - place_items("allguns", 12, 5, 16, 17, 16, false, 0); - place_items("gunxtras", 67, 16, 13, 19, 13, false, 0); - if (terrain_type == ot_s_gun_east) - rotate(1); - if (terrain_type == ot_s_gun_south) - rotate(2); - if (terrain_type == ot_s_gun_west) - rotate(3); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_clothes_north: - case ot_s_clothes_east: - case ot_s_clothes_south: - case ot_s_clothes_west: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j == 2 && (i == 11 || i == 12)) - ter_set(i, j, t_door_glass_c); - else if (j == 2 && i > 3 && i < SEEX * 2 - 4) - ter_set(i, j, t_wall_glass_h); - else if (((j == 2 || j == SEEY * 2 - 2) && i > 1 && i < SEEX * 2 - 2) || - (j == 4 && i > 12 && i < SEEX * 2 - 3) || - (j == 17 && i > 2 && i < 12) || - (j == 20 && i > 2 && i < 11)) - ter_set(i, j, t_wall_h); - else if (((i == 2 || i == SEEX * 2 - 3) && j > 1 && j < SEEY * 2 - 1) || - (i == 11 && (j == 18 || j == 20 || j == 21)) || - (j == 21 && (i == 5 || i == 8))) - ter_set(i, j, t_wall_v); - else if ((i == 16 && j > 4 && j < 9) || - (j == 8 && (i == 17 || i == 18)) || - (j == 18 && i > 2 && i < 11)) - set(i, j, t_floor, f_counter); - else if ((i == 3 && j > 4 && j < 13) || - (i == SEEX * 2 - 4 && j > 9 && j < 20) || - ((j == 10 || j == 11) && i > 6 && i < 13) || - ((j == 14 || j == 15) && i > 4 && i < 13) || - ((i == 15 || i == 16) && j > 10 && j < 18) || - (j == SEEY * 2 - 3 && i > 11 && i < 18)) - set(i, j, t_floor, f_rack); - else if (i > 2 && i < SEEX * 2 - 3 && j > 2 && j < SEEY * 2 - 2) - ter_set(i, j, t_floor); - else - ter_set(i, j, grass_or_dirt()); - } - } - - for (int i = 3; i <= 9; i += 3) { - if (one_in(2)) - ter_set(i, SEEY * 2 - 4, t_door_c); - else - ter_set(i + 1, SEEY * 2 - 4, t_door_c); - } - - { - int num_carts = rng(0, 5); - for( int i = 0; i < num_carts; i++ ) { - add_vehicle (g, "shopping_cart", rng(3, 16), rng(3, 21), 90); - } - } - - place_items("shoes", 70, 7, 10, 12, 10, false, 0); - place_items("pants", 88, 5, 14, 12, 14, false, 0); - place_items("shirts", 88, 7, 11, 12, 11, false, 0); - place_items("jackets", 80, 3, 5, 3, 12, false, 0); - place_items("winter", 60, 5, 15, 12, 15, false, 0); - place_items("bags", 70, 15, 11, 15, 17, false, 0); - place_items("dresser", 50, 12, 21, 17, 21, false, 0); - place_items("allclothes", 20, 3, 21, 10, 21, false, 0); - place_items("allclothes", 20, 3, 18, 10, 18, false, 0); - switch (rng(0, 2)) { - case 0: - place_items("pants", 70, 16, 11, 16, 17, false, 0); - break; - case 1: - place_items("shirts", 70, 16, 11, 16, 17, false, 0); - break; - case 2: - place_items("bags", 70, 16, 11, 16, 17, false, 0); - break; - } - switch (rng(0, 2)) { - case 0: - place_items("pants", 75, 20, 10, 20, 19, false, 0); - break; - case 1: - place_items("shirts", 75, 20, 10, 20, 19, false, 0); - break; - case 2: - place_items("jackets", 75, 20, 10, 20, 19, false, 0); - break; - } - - if (terrain_type == ot_s_clothes_east) - rotate(1); - if (terrain_type == ot_s_clothes_south) - rotate(2); - if (terrain_type == ot_s_clothes_west) - rotate(3); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_library_north: - case ot_s_library_east: - case ot_s_library_south: - case ot_s_library_west: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j == 2) { - if (i == 5 || i == 6 || i == 17 || i == 18) - ter_set(i, j, t_window_domestic); - else if (i == 11 || i == 12) - ter_set(i, j, t_door_c); - else if (i > 1 && i < SEEX * 2 - 2) - ter_set(i, j, t_wall_h); - else - ter_set(i, j, grass_or_dirt()); - } else if (j == 17 && i > 1 && i < SEEX * 2 - 2) - ter_set(i, j, t_wall_h); - else if (i == 2) { - if (j == 6 || j == 7 || j == 10 || j == 11 || j == 14 || j == 15) - ter_set(i, j, t_window_domestic); - else if (j > 1 && j < 17) - ter_set(i, j, t_wall_v); - else - ter_set(i, j, grass_or_dirt()); - } else if (i == SEEX * 2 - 3) { - if (j == 6 || j == 7) - ter_set(i, j, t_window_domestic); - else if (j > 1 && j < 17) - ter_set(i, j, t_wall_v); - else - ter_set(i, j, grass_or_dirt()); - } else if (((j == 4 || j == 5) && i > 2 && i < 10) || - ((j == 8 || j == 9 || j == 12 || j == 13 || j == 16) && - i > 2 && i < 16) || (i == 20 && j > 7 && j < 17)) - set(i, j, t_floor, f_bookcase); - else if ((i == 14 && j < 6 && j > 2) || (j == 5 && i > 14 && i < 19)) - set(i, j, t_floor, f_counter); - else if (i > 2 && i < SEEX * 2 - 3 && j > 2 && j < 17) - ter_set(i, j, t_floor); - else - ter_set(i, j, grass_or_dirt()); - } - } - if (!one_in(3)) - ter_set(18, 17, t_door_c); - place_items("magazines", 70, 3, 4, 9, 4, false, 0); - place_items("magazines", 70, 20, 8, 20, 16, false, 0); - place_items("novels", 96, 3, 5, 9, 5, false, 0); - place_items("novels", 96, 3, 8, 15, 9, false, 0); - place_items("manuals", 92, 3, 12, 15, 13, false, 0); - place_items("textbooks", 88, 3, 16, 15, 16, false, 0); - if (terrain_type == ot_s_library_east) - rotate(1); - if (terrain_type == ot_s_library_south) - rotate(2); - if (terrain_type == ot_s_library_west) - rotate(3); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - - case ot_s_restaurant_north: - case ot_s_restaurant_east: - case ot_s_restaurant_south: - case ot_s_restaurant_west: { -// Init to grass/dirt - fill_background(this, &grass_or_dirt); - ter_id doortype = (one_in(4) ? t_door_c : t_door_glass_c); - lw = rng(0, 4); - rw = rng(19, 23); - tw = rng(0, 4); - bw = rng(17, 23); -// Fill in with floor - square(this, t_floor, lw + 1, tw + 1, rw - 1, bw - 1); -// Draw the walls - line(this, t_wall_h, lw, tw, rw, tw); - line(this, t_wall_h, lw, bw, rw, bw); - line(this, t_wall_v, lw, tw + 1, lw, bw - 1); - line(this, t_wall_v, rw, tw + 1, rw, bw - 1); - -// What's the front wall look like? - switch (rng(1, 3)) { - case 1: // Door to one side - case 2: -// Mirror it? - if (one_in(2)) - ter_set(lw + 2, tw, doortype); - else - ter_set(rw - 2, tw, doortype); - break; - case 3: // Double-door in center - line(this, doortype, (lw + rw) / 2, tw, 1 + ((lw + rw) / 2), tw); - break; - } -// What type of windows? - switch (rng(1, 6)) { - case 1: // None! - break; - case 2: - case 3: // Glass walls everywhere - for (int i = lw + 1; i <= rw - 1; i++) { - if (ter(i, tw) == t_wall_h) - ter_set(i, tw, t_wall_glass_h); - } - while (!one_in(3)) { // 2 in 3 chance of having some walls too - rn = rng(1, 3); - if (ter(lw + rn, tw) == t_wall_glass_h) - ter_set(lw + rn, tw, t_wall_h); - if (ter(rw - rn, tw) == t_wall_glass_h) - ter_set(rw - rn, tw, t_wall_h); - } - break; - case 4: - case 5: - case 6: { // Just some windows - rn = rng(1, 3); - int win_width = rng(1, 3); - for (int i = rn; i <= rn + win_width; i++) { - if (ter(lw + i, tw) == t_wall_h) - ter_set(lw + i, tw, t_window); - if (ter(rw - i, tw) == t_wall_h) - ter_set(rw - i, tw, t_window); - } - } break; - } // Done building windows -// Build a kitchen - mw = rng(bw - 6, bw - 3); - cw = (one_in(3) ? rw - 3 : rw - 1); // 1 in 3 chance for corridor to back - line(this, t_wall_h, lw + 1, mw, cw, mw); - line(this, t_wall_v, cw, mw + 1, cw, bw - 1); - furn_set(lw + 1, mw + 1, f_fridge); - furn_set(lw + 2, mw + 1, f_fridge); - place_items("fridge", 80, lw + 1, mw + 1, lw + 2, mw + 1, false, 0); - line_furn(this, f_counter, lw + 3, mw + 1, cw - 1, mw + 1); - place_items("kitchen", 70, lw + 3, mw + 1, cw - 1, mw + 1, false, 0); -// Place a door to the kitchen - if (cw != rw - 1 && one_in(2)) // side door - ter_set(cw, rng(mw + 2, bw - 1), t_door_c); - else { // north-facing door - rn = rng(lw + 4, cw - 2); -// Clear the counters around the door - line(this, t_floor, rn - 1, mw + 1, rn + 1, mw + 1); - ter_set(rn, mw, t_door_c); - } -// Back door? - if (bw <= 19 || one_in(3)) { -// If we have a corridor, put it over there - if (cw == rw - 3) { -// One in two chance of a double-door - if (one_in(2)) - line(this, t_door_locked, cw + 1, bw, rw - 1, bw); - else - ter_set( rng(cw + 1, rw - 1), bw, t_door_locked); - } else // No corridor - ter_set( rng(lw + 1, rw - 1), bw, t_door_locked); - } -// Build a dining area - int table_spacing = rng(2, 4); - for (int i = lw + table_spacing + 1; i <= rw - 2 - table_spacing; - i += table_spacing + 2) { - for (int j = tw + table_spacing + 1; j <= mw - 1 - table_spacing; - j += table_spacing + 2) { - square_furn(this, f_table, i, j, i + 1, j + 1); - place_items("dining", 70, i, j, i + 1, j + 1, false, 0); - } - } -// Dumpster out back? - if (rng(18, 21) > bw) { - square(this, t_pavement, lw, bw + 1, rw, 24); - rn = rng(lw + 1, rw - 4); - square_furn(this, f_dumpster, rn, 22, rn + 2, 23); - place_items("trash", 40, rn, 22, rn + 3, 23, false, 0); - place_items("fridge", 50, rn, 22, rn + 3, 23, false, 0); - } - - if (terrain_type == ot_s_restaurant_east) - rotate(1); - if (terrain_type == ot_s_restaurant_south) - rotate(2); - if (terrain_type == ot_s_restaurant_west) - rotate(3); - } - place_spawns(g, "GROUP_GROCERY", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - break; - -case ot_s_restaurant_fast_north: -case ot_s_restaurant_fast_east: -case ot_s_restaurant_fast_south: -case ot_s_restaurant_fast_west:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - dd \n\ - ,,,,,,,,,,,,,,,,,,,, \n\ - ,_______,____________, \n\ -,________,_____________,\n\ -,________,_____________,\n\ -,________,_____________,\n\ -,_____#|----w-|-|#_____,\n\ -,_____||erle.x|T||_____,\n\ -,_____|O.....S|.S|_____,\n\ -,_____|e.ccl.c|+-|_____,\n\ -,_____w.......+..|_____,\n\ -,_____|ccccxcc|..%_____,\n\ -,,,,,,|..........+_____,\n\ -,_____|..........%_____,\n\ -,_____%.hh....hh.|_____,\n\ -,_____%.tt....tt.%_____,\n\ -,_____%.tt....tt.%_____,\n\ -,_____|.hh....hh.%_____,\n\ -,__,__|-555++555-|__,__,\n\ -,__,__#ssssssssss#_,,,_,\n\ -,__,__#hthsssshth#__,__,\n\ -,_,,,_#ssssssssss#__,__,\n\ -,__,__#### ss ####__,__,\n\ -,_____ssssssssssss_____,\n", - mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", t_floor, t_wall_glass_h, t_wall_glass_v, t_floor, t_pavement_y, t_pavement, t_floor, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_shrub, t_floor, t_door_glass_c, t_door_locked_alarm, t_door_locked, t_window_domestic, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", f_dumpster, f_null, f_null, f_oven, f_null, f_null, f_rack, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_chair, f_counter, f_locker, f_null)); - place_items("fast_food", 80, 8, 7, 8, 7, false, 0); - place_items("fast_food", 70, 7, 9, 7, 9, false, 0); - place_items("fast_food", 60, 11, 7, 11, 7, false, 0); - if (terrain_type == ot_s_restaurant_fast_east) - rotate(3); - if (terrain_type == ot_s_restaurant_fast_north) - rotate(2); - if (terrain_type == ot_s_restaurant_fast_west) - rotate(1); - }break; - -case ot_s_restaurant_coffee_north: -case ot_s_restaurant_coffee_east: -case ot_s_restaurant_coffee_south: -case ot_s_restaurant_coffee_west:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -|--------=------|--|--| \n\ -|ltSrrrrr..eOSll|T.|.T| \n\ -|...............|S.|.S| \n\ -|cccxccxccc..ccc|-D|D-| \n\ -|.....................| \n\ -|.....................| \n\ -|hh.......hth.hth.hth.| \n\ -|tt....|--555-555-555-| \n\ -|tt....%ssssssssssssssss\n\ -|hh....+ss______________\n\ -|......+ss______________\n\ -|......%ss______________\n\ -|.htth.|ss______________\n\ -|-5555-|ss,,,,,,,_______\n\ -#ssssss#ss______________\n\ -#shtths#ss______________\n\ -#sssssssss______________\n\ -#shsshssss______________\n\ -#stsstssss,,,,,,,_______\n\ -#shsshssss______________\n\ -#sssssssss______________\n\ -#shtthssss______________\n\ -#ssssss#ss______________\n\ -########ss,,,,,,,_______\n", - mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", t_floor, t_wall_glass_h, t_wall_glass_v, t_floor, t_pavement_y, t_pavement, t_floor, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_shrub, t_floor, t_door_glass_c, t_door_locked_alarm, t_door_locked, t_window_domestic, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", f_dumpster, f_null, f_null, f_oven, f_null, f_null, f_rack, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_chair, f_counter, f_locker, f_null)); - place_items("coffee_shop", 85, 4, 1, 8, 1, false, 0); - place_items("coffee_shop", 85, 11, 1, 11, 1, false, 0); - place_items("cleaning", 60, 14, 1, 15, 1, false, 0); - if (terrain_type == ot_s_restaurant_coffee_east) - rotate(3); - if (terrain_type == ot_s_restaurant_coffee_north) - rotate(2); - if (terrain_type == ot_s_restaurant_coffee_west) - rotate(1); - }break; - -//.... -case ot_shelter: { -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - square(this, t_floor, 5, 5, SEEX * 2 - 6, SEEY * 2 - 6); - mapf::formatted_set_simple(this, 4, 4, -"\ -|----:-++-:----|\n\ -|llll c 6|\n\ -| b b b c |\n\ -| b b b c |\n\ -| b b b c |\n\ -: b b b :\n\ -| |\n\ -+ >> +\n\ -+ >> +\n\ -| |\n\ -: b b b :\n\ -| b b b c |\n\ -| b b b c |\n\ -| b b b c |\n\ -| c x|\n\ -|----:-++-:----|\n", - mapf::basic_bind("- | + : 6 x >", t_wall_h, t_wall_v, t_door_c, t_window_domestic, t_console, t_console_broken, t_stairs_down), - mapf::basic_bind("b c l", f_bench, f_counter, f_locker)); - tmpcomp = add_computer(SEEX+6, 5, _("Evac shelter computer"), 0); - tmpcomp->add_option(_("Emergency Message"), COMPACT_EMERG_MESS, 0); - if(ACTIVE_WORLD_OPTIONS["BLACK_ROAD"]) { - //place zombies outside - place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], 0, 0, SEEX * 2 - 1, 3, 0.4f); - place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], 0, 4, 3, SEEX * 2 - 4, 0.4f); - place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], SEEX * 2 - 3, 4, SEEX * 2 - 1, SEEX * 2 - 4, 0.4f); - place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], 0, SEEX * 2 - 3, SEEX * 2 - 1, SEEX * 2 - 1, 0.4f); - } - } - - break; -//.... - -case ot_shelter_under: - // Make the whole area rock, then plop an open area in the center. - square(this, t_rock, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); - square(this, t_rock_floor, 6, 6, SEEX * 2 - 8, SEEY * 2 - 8); - // Create an anteroom with hte stairs and some locked doors. - ter_set(SEEX - 1, SEEY * 2 - 7, t_door_locked); - ter_set(SEEX , SEEY * 2 - 7, t_door_locked); - ter_set(SEEX - 1, SEEY * 2 - 6, t_rock_floor); - ter_set(SEEX , SEEY * 2 - 6, t_rock_floor); - ter_set(SEEX - 1, SEEY * 2 - 5, t_stairs_up); - ter_set(SEEX , SEEY * 2 - 5, t_stairs_up); - if( one_in(10) ) { - // Scatter around lots of items and some zombies. - for( int x = 0; x < 10; ++x ) { - place_items("shelter", 90, 6, 6, SEEX * 2 - 8, SEEY * 2 - 8, false, 0); - } - place_spawns(g, "GROUP_ZOMBIE", 1, 6, 6, SEEX * 2 - 8, SEEX * 2 - 8, 0.2); - } else { - // Scatter around some items. - place_items("shelter", 80, 6, 6, SEEX * 2 - 8, SEEY * 2 - 8, false, 0); - } - break; - -case ot_lmoe: - // Init to grass & dirt; - fill_background(this, &grass_or_dirt); - square(this, t_shrub, 7, 6, 16, 12); - square(this, t_rock, 10, 9, 13, 12); - square(this, t_rock_floor, 11, 10, 12, 11); - line(this, t_stairs_down, 11, 10, 12, 10); - ter_set(11, 12, t_door_metal_c); - line(this, t_tree, 9, 8, 14, 8); - line(this, t_tree, 9, 8, 9, 12); - line(this, t_tree, 14, 8, 14, 12); - square(this, t_shrub, 13, 13, 15, 14); - square(this, t_shrub, 8, 13, 10, 14); - ter_set(10, 6, t_tree_young); - ter_set(14, 6, t_tree_young); - line(this, t_tree_young, 9, 7, 10, 7); - ter_set(12, 7, t_tree_young); - ter_set(14, 7, t_tree_young); - ter_set(8, 9, t_tree_young); - line(this, t_tree_young, 7, 11, 8, 11); - line(this, t_tree_young, 15, 10, 15, 11); - ter_set(16, 12, t_tree_young); - ter_set(9, 13, t_tree_young); - ter_set(12, 13, t_tree_young); - ter_set(16, 12, t_tree_young); - line(this, t_tree_young, 14, 13, 15, 13); - ter_set(10, 14, t_tree_young); - ter_set(13, 14, t_tree_young); - break; - -case ot_lmoe_under: - fill_background(this, t_rock); - square(this, t_rock_floor, 3, 3, 20, 20); - line(this, t_stairs_up, 11, 20, 12, 20); - line(this, t_wall_metal_h, 3, 12, 20, 12); - line(this, t_wall_metal_v, 10, 12, 10, 20); - line(this, t_wall_metal_v, 13, 12, 13, 20); - line(this, t_chainfence_v, 7, 3, 7, 6); - line(this, t_chainfence_h, 3, 6, 6, 6); - line(this, t_wall_metal_v, 15, 3, 15, 10); - line(this, t_wall_metal_h, 15, 9, 20, 9); - line(this, t_wall_metal_v, 17, 10, 17, 11); - ter_set(10, 16, t_door_metal_c); - ter_set(13, 16, t_door_metal_c); - ter_set(5, 6, t_chaingate_c); - line(this, t_door_metal_c, 11, 12, 12, 12); - ter_set(17, 11, t_door_metal_c); - ter_set(15, 6, t_door_metal_c); - square(this, t_rubble, 18, 18, 20, 20); - line(this, t_rubble, 16, 20, 20, 16); - line(this, t_rubble, 17, 20, 20, 17); - line(this, t_water_sh, 15, 20, 20, 15); - //square(this, t_emergency_light_flicker, 11, 13, 12, 19); - furn_set(17, 16, f_woodstove); - furn_set(14, 13, f_chair); - furn_set(14, 18, f_chair); - square_furn(this, f_crate_c, 18, 13, 20, 14); - line_furn(this, f_crate_c, 17, 13, 19, 15); - line_furn(this, f_counter, 3, 13, 3, 20); - line_furn(this, f_counter, 3, 20, 9, 20); - line_furn(this, f_bookcase, 5, 13, 8, 13); - square_furn(this, f_table, 5, 15, 6, 17); - furn_set(7, 16, f_chair); - line_furn(this, f_rack, 3, 11, 7, 11); - line_furn(this, f_rack, 3, 9, 7, 9); - line_furn(this, f_rack, 3, 3, 6, 3); - ter_set(10, 7, t_column); - ter_set(13, 7, t_column); - line_furn(this, f_bookcase, 16, 3, 16, 5); - square_furn(this, f_bed, 19, 3, 20, 4); - furn_set(19, 7, f_chair); - furn_set(20, 7, f_desk); - line(this, t_rubble, 15, 10, 16, 10); - furn_set(19, 10, f_sink); - place_toilet(20, 11); - place_items("allguns", 80, 3, 3, 6, 3, false, 0); - place_items("ammo", 80, 3, 3, 6, 3, false, 0); - place_items("cannedfood", 90, 3, 9, 7, 9, false, 0); - place_items("survival_tools", 80, 3, 11, 7, 11, false, 0); - place_items("bags", 50, 3, 11, 7, 11, false, 0); - place_items("softdrugs", 50, 3, 11, 7, 11, false, 0); - place_items("manuals", 60, 5, 13, 8, 13, false, 0); - place_items("textbooks", 60, 5, 13, 8, 13, false, 0); - place_items("tools", 90, 5, 15, 6, 17, false, 0); - place_items("hardware", 70, 3, 13, 3, 20, false, 0); - place_items("stash_wood", 70, 3, 20, 9, 20, false, 0); - place_items("shelter", 70, 18, 13, 20, 14, false, 0); - place_items("novels", 70, 16, 3, 16, 5, false, 0); - place_items("office", 50, 20, 7, 20, 7, false, 0); - - - - //place_items(whatever, 80, 0, 0, 0, 0, false, 0); - break; - - case ot_lab: - case ot_lab_stairs: - case ot_lab_core: - ice_lab = false; - case ot_ice_lab: - case ot_ice_lab_stairs: - case ot_ice_lab_core: - if (ice_lab) { - int temperature = -20 + 30*(zlevel); - set_temperature(x, y, temperature); - } -// Check for adjacent sewers; used below - tw = 0; - rw = 0; - bw = 0; - lw = 0; - if (t_north>=ot_sewer_ns && t_north<=ot_sewer_nesw && connects_to(t_north,2)) - tw = SEEY * 2; - if (t_east >=ot_sewer_ns && t_east <=ot_sewer_nesw && connects_to(t_east, 3)) - rw = SEEX * 2; - if (t_south>=ot_sewer_ns && t_south<=ot_sewer_nesw && connects_to(t_south,0)) - bw = SEEY * 2; - if (t_west >=ot_sewer_ns && t_west <=ot_sewer_nesw && connects_to(t_west, 1)) - lw = SEEX * 2; - if (t_above == ot_null) { // We're on ground level - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i <= 1 || i >= SEEX * 2 - 2 || - (j > 1 && j < SEEY * 2 - 2 && (i == SEEX - 2 || i == SEEX + 1))) - ter_set(i, j, t_wall_v); - else if (j <= 1 || j >= SEEY * 2 - 2) - ter_set(i, j, t_wall_h); - else - ter_set(i, j, t_floor); - } - } - ter_set(SEEX - 1, 0, t_dirt); - ter_set(SEEX - 1, 1, t_door_metal_locked); - ter_set(SEEX , 0, t_dirt); - ter_set(SEEX , 1, t_door_metal_locked); - ter_set(SEEX - 2 + rng(0, 1) * 4, 0, t_card_science); - ter_set(SEEX - 2, SEEY , t_door_metal_c); - ter_set(SEEX + 1, SEEY , t_door_metal_c); - ter_set(SEEX - 2, SEEY - 1, t_door_metal_c); - ter_set(SEEX + 1, SEEY - 1, t_door_metal_c); - ter_set(SEEX - 1, SEEY * 2 - 3, t_stairs_down); - ter_set(SEEX , SEEY * 2 - 3, t_stairs_down); - science_room(this, 2 , 2, SEEX - 3 , SEEY * 2 - 3, 1); - science_room(this, SEEX + 2, 2, SEEX * 2 - 3, SEEY * 2 - 3, 3); - - add_spawn("mon_turret", 1, SEEX, 5); - - if (t_east > ot_road_null && t_east <= ot_road_nesw_manhole) - rotate(1); - else if (t_south > ot_road_null && t_south <= ot_road_nesw_manhole) - rotate(2); - else if (t_west > ot_road_null && t_west <= ot_road_nesw_manhole) - rotate(3); - } else if (tw != 0 || rw != 0 || lw != 0 || bw != 0) { // Sewers! - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - ter_set(i, j, t_rock_floor); - if (((i < lw || i > SEEX * 2 - 1 - rw) && j > SEEY - 3 && j < SEEY + 2) || - ((j < tw || j > SEEY * 2 - 1 - bw) && i > SEEX - 3 && i < SEEX + 2)) - ter_set(i, j, t_sewage); - if ((i == 0 && t_east >= ot_lab && t_east <= ot_lab_core) || - (i == 0 && t_east >= ot_ice_lab && t_east <= ot_ice_lab_core) || - i == SEEX * 2 - 1) { - if (ter(i, j) == t_sewage) - ter_set(i, j, t_bars); - else if (j == SEEY - 1 || j == SEEY) - ter_set(i, j, t_door_metal_c); - else - ter_set(i, j, t_concrete_v); - } else if ((j == 0 && t_north >= ot_lab && t_north <= ot_lab_core) || - (j == 0 && t_north >= ot_ice_lab && t_north <= ot_ice_lab_core) || - j == SEEY * 2 - 1) { - if (ter(i, j) == t_sewage) - ter_set(i, j, t_bars); - else if (i == SEEX - 1 || i == SEEX) - ter_set(i, j, t_door_metal_c); - else - ter_set(i, j, t_concrete_h); - } - } - } - } else { // We're below ground, and no sewers -// Set up the boudaries of walls (connect to adjacent lab squares) -// Are we in an ice lab? - if ( ice_lab ) { - tw = (t_north >= ot_ice_lab && t_north <= ot_ice_lab_finale) ? 0 : 2; - rw = (t_east >= ot_ice_lab && t_east <= ot_ice_lab_finale) ? 1 : 2; - bw = (t_south >= ot_ice_lab && t_south <= ot_ice_lab_finale) ? 1 : 2; - lw = (t_west >= ot_ice_lab && t_west <= ot_ice_lab_finale) ? 0 : 2; - } - else { - tw = (t_north >= ot_lab && t_north <= ot_lab_finale) ? 0 : 2; - rw = (t_east >= ot_lab && t_east <= ot_lab_finale) ? 1 : 2; - bw = (t_south >= ot_lab && t_south <= ot_lab_finale) ? 1 : 2; - lw = (t_west >= ot_lab && t_west <= ot_lab_finale) ? 0 : 2; - } - int boarders = 0; - if (tw == 0 ) boarders++; - if (rw == 1 ) boarders++; - if (bw == 1 ) boarders++; - if (lw == 0 ) boarders++; - //A lab area with only one entrance - if (boarders == 1){ - fill_background(this, t_rock_floor); - if (one_in(2)){ //armory and military barracks - mapf::formatted_set_simple(this, 0, 0, -"\ -|----------------------|\n\ -|r....................r|\n\ -|r..rr..rr....rr..rr..r|\n\ -|r..rr..rr....rr..rr..r|\n\ -|r..rr..rr....rr..rr..r|\n\ -|r..rr..rr....rr..rr..r|\n\ -|r..rr..rr....rr..rr..r|\n\ -|......................|\n\ -|......................|\n\ -|..rrrrrr..........rrr.|\n\ -|-----|----DD-|--+|--|-|\n\ -|b.ddd|.......gc..|T.|T|\n\ -|b..h.+.......g6h.|-+|+|\n\ -|l....|.......gc..|....|\n\ -|-----|.......|--D|...S|\n\ -|b....+...........|...S|\n\ -|b...l|...........|-+--|\n\ -|-----|................|\n\ -|b....+...x............|\n\ -|b...l|..|-DD-|+-|+-|+-|\n\ -|-----|..|....|.l|.l|.l|\n\ -|b....+..|6...|..|..|..|\n\ -|b...l|..|....|bb|bb|bb|\n\ -|-----|--|-..-|--|--|--|\n", - mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", t_rock_floor, t_rock_floor, t_floor, t_rock_floor, t_rock_floor, t_centrifuge, t_rock_floor, t_console, t_console_broken, t_reinforced_glass_v, t_reinforced_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor), - mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", f_bed, f_locker, f_crate_c, f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_table, f_counter, f_sink, f_toilet)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker){ - place_items("mil_surplus", 50, i, j, i, j, false, 0); - } - else if (this->furn(i,j) == f_desk){ - place_items("office", 50, i, j, i, j, false, 0); - } - else if (this->furn(i,j) == f_rack){ - if (one_in(3)) place_items("mil_surplus", 30, i, j, i, j, false, 0); - else if (one_in(2)) place_items("ammo", 30, i, j, i, j, false, 0); - else if (one_in(3)) place_items("military", 30, i, j, i, j, false, 0); - else place_items("mil_rifles", 30, i, j, i, j, false, 0); - } - } - } - computer *tmpcomp2 = NULL; - tmpcomp2 = add_computer(10, 21, _("Barracks Entrance"), 4); - tmpcomp2->add_option(_("UNLOCK ENTRANCE"), COMPACT_UNLOCK, 6); - tmpcomp = add_computer(15, 12, _("Magazine Entrance"), 6); - tmpcomp->add_option(_("UNLOCK ENTRANCE"), COMPACT_UNLOCK, 7); - if (one_in(2)) add_spawn("mon_zombie_soldier", rng(1,4), 12, 12); - } else{ //human containment - mapf::formatted_set_simple(this, 0, 0, -"\ -|----|-|----|----|-|---|\n\ -|b.T.|.|.T.b|b.T.|.|A.A|\n\ -|b...D.D...b|b...D.|..A|\n\ -|....|.|....|....|.|...|\n\ -|....|.|....|....|.|l..|\n\ -|-GG-|+|-GG-|-GG-|.|-D-|\n\ -|................+.....|\n\ -|................|--D--|\n\ -|................|...bb|\n\ -|................g.....|\n\ -|-GGGGGG-|.......g....T|\n\ -|..cc6c..g.......|.....|\n\ -|..ch.c..|-GGDGG-|-GGG-|\n\ -|........g.............|\n\ -|^.......|.............|\n\ -|-GGG+GG-|.............|\n\ -|ddd.....|.............|\n\ -|.hd.....+....|-G+GGGG-|\n\ -|........|...x|.......c|\n\ -|.......r|-DD-|l......S|\n\ -|ddd....r|...6|l......c|\n\ -|.hd....r|....|........|\n\ -|........|....|..cxcC..|\n\ -|--------|-..-|--------|\n", - mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", t_rock_floor, t_rock_floor, t_floor, t_rock_floor, t_rock_floor, t_centrifuge, t_rock_floor, t_console, t_console_broken, t_reinforced_glass_v, t_reinforced_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor), - mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", f_bed, f_locker, f_crate_c, f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_table, f_counter, f_sink, f_toilet)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker){ - place_items("science", 60, i, j, i, j, false, 0); - } - if (this->furn(i,j) == f_desk){ - place_items("office", 60, i, j, i, j, false, 0); - } - if (this->furn(i,j) == f_counter){ - place_items("office", 40, i, j, i, j, false, 0); - } - if (this->furn(i,j) == f_rack || this->furn(i,j) == f_crate_c){ - place_items("softdrugs", 40, i, j, i, j, false, 0); - place_items("harddrugs", 30, i, j, i, j, false, 0); - } - } - } - computer *tmpcomp2 = NULL; - tmpcomp2 = add_computer(13, 20, _("Prisoner Containment Entrance"), 4); - tmpcomp2->add_option(_("UNLOCK ENTRANCE"), COMPACT_UNLOCK, 4); - tmpcomp = add_computer(5, 11, _("Containment Control"), 4); - tmpcomp->add_option(_("EMERGENCY CONTAINMENT RELEASE"), COMPACT_OPEN, 5); - add_trap(19, 19, tr_dissector); - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - if (one_in(2))add_item(1, 1, body); - else add_spawn("mon_zombie_shrieker", 1, 1, 1); - if (one_in(2))add_item(9, 3, body); - else add_spawn("mon_zombie_brute", 1, 9, 3); - if (one_in(2))add_item(14, 4, body); - else add_spawn("mon_zombie_child", 1, 14, 4); - if (one_in(2))add_item(19, 9, body); - else add_spawn("mon_zombie_grabber", 1, 19, 9); - if (one_in(2)) add_spawn("mon_zombie_scientist", rng(1,2), 12, 14); - } - if (bw == 2){ - rotate(2);} - if (rw == 2){ - rotate(3);} - if (lw == 2){ - rotate(1);} - if (t_above == ot_lab_stairs || t_above == ot_ice_lab_stairs) { - int sx, sy; - do { - sx = rng(lw, SEEX * 2 - 1 - rw); - sy = rng(tw, SEEY * 2 - 1 - bw); - } while (ter(sx, sy) != t_rock_floor); - ter_set(sx, sy, t_stairs_up); - } - - if (terrain_type == ot_lab_stairs || terrain_type == ot_ice_lab_stairs) { - int sx, sy; - do { - sx = rng(lw, SEEX * 2 - 1 - rw); - sy = rng(tw, SEEY * 2 - 1 - bw); - } while (ter(sx, sy) != t_rock_floor); - ter_set(sx, sy, t_stairs_down); - } - } - else switch (rng(1, 4)) { // Pick a random lab layout - case 1: // Cross shaped - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i < lw || i > SEEX * 2 - 1 - rw) || - ((j < SEEY - 1 || j > SEEY) && (i == SEEX - 2 || i == SEEX + 1))) - ter_set(i, j, t_concrete_v); - else if ((j < tw || j > SEEY * 2 - 1 - bw) || - ((i < SEEX - 1 || i > SEEX) && (j == SEEY - 2 || j == SEEY + 1))) - ter_set(i, j, t_concrete_h); - else - ter_set(i, j, t_rock_floor); - } - } - if (t_above == ot_lab_stairs || t_above == ot_ice_lab_stairs) - ter_set(rng(SEEX - 1, SEEX), rng(SEEY - 1, SEEY), t_stairs_up); -// Top left - if (one_in(2)) { - ter_set(SEEX - 2, int(SEEY / 2), t_door_metal_c); - science_room(this, lw, tw, SEEX - 3, SEEY - 3, 1); - } else { - ter_set(int(SEEX / 2), SEEY - 2, t_door_metal_c); - science_room(this, lw, tw, SEEX - 3, SEEY - 3, 2); - } -// Top right - if (one_in(2)) { - ter_set(SEEX + 1, int(SEEY / 2), t_door_metal_c); - science_room(this, SEEX + 2, tw, SEEX * 2 - 1 - rw, SEEY - 3, 3); - } else { - ter_set(SEEX + int(SEEX / 2), SEEY - 2, t_door_metal_c); - science_room(this, SEEX + 2, tw, SEEX * 2 - 1 - rw, SEEY - 3, 2); - } -// Bottom left - if (one_in(2)) { - ter_set(int(SEEX / 2), SEEY + 1, t_door_metal_c); - science_room(this, lw, SEEY + 2, SEEX - 3, SEEY * 2 - 1 - bw, 0); - } else { - ter_set(SEEX - 2, SEEY + int(SEEY / 2), t_door_metal_c); - science_room(this, lw, SEEY + 2, SEEX - 3, SEEY * 2 - 1 - bw, 1); - } -// Bottom right - if (one_in(2)) { - ter_set(SEEX + int(SEEX / 2), SEEY + 1, t_door_metal_c); - science_room(this, SEEX +2, SEEY + 2, SEEX*2 - 1 - rw, SEEY*2 - 1 - bw, 0); - } else { - ter_set(SEEX + 1, SEEY + int(SEEY / 2), t_door_metal_c); - science_room(this, SEEX +2, SEEY + 2, SEEX*2 - 1 - rw, SEEY*2 - 1 - bw, 3); - } - if (rw == 1) { - ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); - ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); - } - if (bw == 1) { - ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); - ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); - } - if (terrain_type == ot_lab_stairs || terrain_type == ot_ice_lab_stairs) { // Stairs going down - std::vector stair_points; - if (tw != 0) { - stair_points.push_back(point(SEEX - 1, 2)); - stair_points.push_back(point(SEEX - 1, 2)); - stair_points.push_back(point(SEEX , 2)); - stair_points.push_back(point(SEEX , 2)); - } - if (rw != 1) { - stair_points.push_back(point(SEEX * 2 - 3, SEEY - 1)); - stair_points.push_back(point(SEEX * 2 - 3, SEEY - 1)); - stair_points.push_back(point(SEEX * 2 - 3, SEEY )); - stair_points.push_back(point(SEEX * 2 - 3, SEEY )); - } - if (bw != 1) { - stair_points.push_back(point(SEEX - 1, SEEY * 2 - 3)); - stair_points.push_back(point(SEEX - 1, SEEY * 2 - 3)); - stair_points.push_back(point(SEEX , SEEY * 2 - 3)); - stair_points.push_back(point(SEEX , SEEY * 2 - 3)); - } - if (lw != 0) { - stair_points.push_back(point(2, SEEY - 1)); - stair_points.push_back(point(2, SEEY - 1)); - stair_points.push_back(point(2, SEEY )); - stair_points.push_back(point(2, SEEY )); - } - stair_points.push_back(point(int(SEEX / 2) , SEEY )); - stair_points.push_back(point(int(SEEX / 2) , SEEY - 1)); - stair_points.push_back(point(int(SEEX / 2) + SEEX, SEEY )); - stair_points.push_back(point(int(SEEX / 2) + SEEX, SEEY - 1)); - stair_points.push_back(point(SEEX , int(SEEY / 2) )); - stair_points.push_back(point(SEEX + 2, int(SEEY / 2) )); - stair_points.push_back(point(SEEX , int(SEEY / 2) + SEEY)); - stair_points.push_back(point(SEEX + 2, int(SEEY / 2) + SEEY)); - rn = rng(0, stair_points.size() - 1); - ter_set(stair_points[rn].x, stair_points[rn].y, t_stairs_down); - } - - break; - - case 2: // tic-tac-toe # layout - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < lw || i > SEEX * 2 - 1 - rw || i == SEEX - 4 || i == SEEX + 3) - ter_set(i, j, t_concrete_v); - else if (j < lw || j > SEEY*2 - 1 - bw || j == SEEY - 4 || j == SEEY + 3) - ter_set(i, j, t_concrete_h); - else - ter_set(i, j, t_rock_floor); - } - } - if (t_above == ot_lab_stairs || t_above == ot_ice_lab_stairs) { - ter_set(SEEX - 1, SEEY - 1, t_stairs_up); - ter_set(SEEX , SEEY - 1, t_stairs_up); - ter_set(SEEX - 1, SEEY , t_stairs_up); - ter_set(SEEX , SEEY , t_stairs_up); - } - ter_set(SEEX - rng(0, 1), SEEY - 4, t_door_metal_c); - ter_set(SEEX - rng(0, 1), SEEY + 3, t_door_metal_c); - ter_set(SEEX - 4, SEEY + rng(0, 1), t_door_metal_c); - ter_set(SEEX + 3, SEEY + rng(0, 1), t_door_metal_c); - ter_set(SEEX - 4, int(SEEY / 2), t_door_metal_c); - ter_set(SEEX + 3, int(SEEY / 2), t_door_metal_c); - ter_set(int(SEEX / 2), SEEY - 4, t_door_metal_c); - ter_set(int(SEEX / 2), SEEY + 3, t_door_metal_c); - ter_set(SEEX + int(SEEX / 2), SEEY - 4, t_door_metal_c); - ter_set(SEEX + int(SEEX / 2), SEEY + 3, t_door_metal_c); - ter_set(SEEX - 4, SEEY + int(SEEY / 2), t_door_metal_c); - ter_set(SEEX + 3, SEEY + int(SEEY / 2), t_door_metal_c); - science_room(this, lw, tw, SEEX - 5, SEEY - 5, rng(1, 2)); - science_room(this, SEEX - 3, tw, SEEX + 2, SEEY - 5, 2); - science_room(this, SEEX + 4, tw, SEEX * 2 - 1 - rw, SEEY - 5, rng(2, 3)); - science_room(this, lw, SEEY - 3, SEEX - 5, SEEY + 2, 1); - science_room(this, SEEX + 4, SEEY - 3, SEEX * 2 - 1 - rw, SEEY + 2, 3); - science_room(this, lw, SEEY + 4, SEEX - 5, SEEY * 2 - 1 - bw, rng(0, 1)); - science_room(this, SEEX - 3, SEEY + 4, SEEX + 2, SEEY * 2 - 1 - bw, 0); - science_room(this, SEEX+4, SEEX+4, SEEX*2-1-rw, SEEY*2-1-bw, 3 * rng(0, 1)); - if (rw == 1) { - ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); - ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); - } - if (bw == 1) { - ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); - ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); - } - if (terrain_type == ot_lab_stairs || terrain_type == ot_ice_lab_stairs) - ter_set(SEEX - 3 + 5 * rng(0, 1), SEEY - 3 + 5 * rng(0, 1), t_stairs_down); - break; - - case 3: // Big room - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < lw || i >= SEEX * 2 - 1 - rw) - ter_set(i, j, t_concrete_v); - else if (j < tw || j >= SEEY * 2 - 1 - bw) - ter_set(i, j, t_concrete_h); - else - ter_set(i, j, t_rock_floor); - } - } - science_room(this, lw, tw, SEEX * 2 - 1 - rw, SEEY * 2 - 1 - bw, rng(0, 3)); - if (t_above == ot_lab_stairs || t_above == ot_ice_lab_stairs) { - int sx, sy; - do { - sx = rng(lw, SEEX * 2 - 1 - rw); - sy = rng(tw, SEEY * 2 - 1 - bw); - } while (ter(sx, sy) != t_rock_floor); - ter_set(sx, sy, t_stairs_up); - } - if (rw == 1) { - ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); - ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); - } - if (bw == 1) { - ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); - ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); - } - if (terrain_type == ot_lab_stairs || terrain_type == ot_ice_lab_stairs) { - int sx, sy; - do { - sx = rng(lw, SEEX * 2 - 1 - rw); - sy = rng(tw, SEEY * 2 - 1 - bw); - } while (ter(sx, sy) != t_rock_floor); - ter_set(sx, sy, t_stairs_down); - } - break; - - case 4: // alien containment - fill_background(this, t_rock_floor); - if (one_in(4)){ - mapf::formatted_set_simple(this, 0, 0, -"\ -.....|..|.....|........|\n\ -.....|6.|.....|..cxcC..|\n\ -.....g..g.....g.......l|\n\ -.....g..g.....g.......l|\n\ -.....D..g.....|.......S|\n\ ------|..|.....|-GG+-GG-|\n\ -.....D..g..............|\n\ -.....g..g..............|\n\ -.....g..g..............|\n\ -.....|..|-GGGG-|.......|\n\ -----||+-|,,,,,,|.......|\n\ -....+...D,,,,,,g.......+\n\ -....|-G-|,,,,,,g.......+\n\ -........|,,,,,,|.......|\n\ -........|-GGGG-|.......|\n\ -.......................|\n\ -.........cxc6cc........|\n\ -.........ch.h.c........|\n\ -.......................|\n\ -.ccxcc............ccxcc|\n\ -.c.h.c............c.h.c|\n\ -.......................|\n\ -.......................|\n\ ------------++----------|\n", - mapf::basic_bind("l A r d C h 6 x g G , . - | + D t c S", t_rock_floor, t_floor, t_rock_floor, t_rock_floor, t_centrifuge, t_rock_floor, t_console, t_console_broken, t_reinforced_glass_v, t_reinforced_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, t_rock_floor), - mapf::basic_bind("l A r d C h 6 x g G , . - | + D t c S", f_locker, f_crate_c, f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null , f_table, f_counter, f_sink)); - add_trap(19, 3, tr_dissector); - if (one_in(3)) add_spawn("mon_mi_go", 1, 12, 12); - else add_spawn("mon_zombie_brute",1 ,12,12); - if (one_in(3)) add_spawn("mon_kreck", 1, 2, 2); - if (one_in(3)) add_spawn("mon_crawler", 1, 2, 7); - if (one_in(2)) add_spawn("mon_zombie_scientist", rng(1,3), 12, 18); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_counter) - place_items("office", 30, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("science", 60, i, j, i, j, false, 0); - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - if (one_in(500) && this->ter(i,j) == t_rock_floor)add_item(i, j, body); - } - } - computer *tmpcomp2 = NULL; - tmpcomp2 = add_computer(6, 1, _("Containment Terminal"), 4); - tmpcomp2->add_option(_("EMERGENCY CONTAINMENT UNLOCK"), COMPACT_UNLOCK, 4); - tmpcomp = add_computer(12, 16, _("Containment Control"), 4); - tmpcomp->add_option(_("EMERGENCY CONTAINMENT UNLOCK"), COMPACT_UNLOCK, 4); - tmpcomp->add_option(_("EMERGENCY CLEANSE"), COMPACT_DISCONNECT, 7); - } else if (one_in(3)){ //operations or utility - mapf::formatted_set_simple(this, 0, 0, -"\ -.....|...........f.....|\n\ -.lll.|...........f.rrrr|\n\ -.....+...........H.....|\n\ -.ll..|...........fAA..r|\n\ ------|FFFF|---|..fAA..r|\n\ -.....f....|...|..f....r|\n\ -.pSp.f.PP.|.&.|..fAA..A|\n\ -.pSp.f.PP.|.x.|..fAA..A|\n\ -.....f.PP.|...|..f.....|\n\ -.....H....|-+-|..fFFHFF|\n\ -FFHFFf........f........|\n\ -.....f........f........+\n\ -.....fFFFHFFFFf........+\n\ -.......................|\n\ -.................|-G-G-|\n\ --------|.........|^....|\n\ -AA..A..D.........+.....|\n\ -AA.....D.........|..ddd|\n\ -AAA....D.........g..dh.|\n\ --------|M........g.....|\n\ -A.AA...D.........g.....|\n\ -A......D.........|dh...|\n\ -.A.AA..D.........|dxd.^|\n\ --------|---++----|-----|\n", - mapf::basic_bind("M D & P S p l H O f F A r d C h 6 x g G , . - | + D t c ^", t_gates_control_concrete, t_door_metal_locked, t_radio_tower, t_generator_broken, t_sewage_pump, t_sewage_pipe, t_floor, t_chaingate_c, t_column, t_chainfence_v, t_chainfence_h, t_floor, t_floor, t_floor, t_centrifuge, t_null, t_console, t_console_broken, t_wall_glass_v, t_wall_glass_h, t_rock_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_floor, t_floor, t_floor), - mapf::basic_bind("M D & P S p l H O f F A r d C h 6 x g G , . - | + D t c ^", f_null, f_null, f_null, f_null, f_null, f_null, f_locker, f_null, f_null, f_null, f_null, f_crate_c, f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_table, f_counter, f_indoor_plant)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_crate_c){ - if (one_in(2)) - place_items("robots", 60, i, j, i, j, false, 0); - else if (one_in(2)) - place_items("science", 60, i, j, i, j, false, 0); - else - place_items("sewage_plant", 30, i, j, i, j, false, 0); - } - else if (this->furn(i,j) == f_locker) - place_items("cleaning", 60, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_rack) - place_items("mine_equipment", 30, i, j, i, j, false, 0); - if (one_in(500) && this->ter(i,j) == t_rock_floor) add_spawn("mon_zombie", 1, i, j); - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - if (one_in(500) && this->ter(i,j) == t_rock_floor)add_item(i, j, body); - } - } - } - else if (one_in(2)){ //tribute - mapf::formatted_set_simple(this, 0, 0, -"\ -%%%%%%%%%|....|%%%%%%%%|\n\ -%|-|-|%%%|....|%%%|-|--|\n\ -%|T|T|---|....|---|T|.T|\n\ -%|.|.|EEE+....+EEE|.|..|\n\ -%|=|=|EEE+....+EEE|=|=-|\n\ -%|...|EEe|....|eEE|....|\n\ -%|...|---|....|---|....|\n\ -%|...+............+....|\n\ -%|ScS|............|cScS|\n\ --|---|............|----|\n\ -.......................|\n\ -.......................+\n\ -.................w.....+\n\ -................www....|\n\ ---GGG+GG-|....|-GGGGGG-|\n\ -ff.......|....|WWWWWWWW|\n\ -...htth..g....gWWWWWWWl|\n\ -...htth..g....gWWWcWWWl|\n\ -.........+....DWWWcWWWW|\n\ -.........g....gWWWCWWWW|\n\ -...htth..g....gWWWcWWWW|\n\ -...htth..g....gWWWWWWhd|\n\ -........^|....|rrrWWdxd|\n\ ----------|-++-|--------|\n", - mapf::basic_bind("D l H O f A r d C h 6 x g G , . - | + D t c ^ w W e E % T S =", t_door_metal_locked, t_floor, t_chaingate_c, t_column, t_floor, t_floor, t_floor, t_floor, t_centrifuge, t_floor, t_console, t_console_broken, t_reinforced_glass_v, t_reinforced_glass_h, t_rock_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_floor, t_floor, t_floor, t_water_sh, t_water_dp, t_elevator_control_off, t_elevator, t_rock, t_floor, t_floor, t_door_c), - mapf::basic_bind("D l H O f A r d C h 6 x g G , . - | + D t c ^ w W e E % T S =", f_null, f_locker, f_null, f_null, f_fridge, f_crate_c, f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_table, f_counter, f_indoor_plant, f_null, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker) - place_items("science", 60, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 50, i, j, i, j, false, 0); - if (one_in(500) && this->ter(i,j) == t_rock_floor) add_spawn("mon_zombie", 1, i, j); - } - } - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(17, 15, body); - add_item(8, 3, body); - add_item(10, 3, body); - spawn_item(18, 15, "ax", 0); - } - - else{ //analyzer - mapf::formatted_set_simple(this, 0, 0, -"\ -.......................|\n\ -.......................|\n\ -.......................|\n\ -.......................|\n\ -....|-GGGGGGGGGGG-|....|\n\ -....|.............|....|\n\ -....g.....&.&.....g....|\n\ -....g......,......g....|\n\ -....g.....&6&.....g....|\n\ -....g.............g....|\n\ -....grrr.rrrrr.rrrg....|\n\ -....gcxc..cxc..cxcg....+\n\ -....gch....h....hcg....+\n\ -....|.............|....|\n\ -....|-+|..cxc..|+-|....|\n\ -....+..g...h...g..+....|\n\ -....g..g.......g..g....|\n\ -....|..|.......|..|....|\n\ -....|-G|GGGGGGG|G-|....|\n\ -.......................|\n\ -.......................|\n\ -.......................|\n\ -.......................|\n\ ------------++----------|\n", - mapf::basic_bind("r d h 6 x g G , . - | + D t c ^ % = &", t_railing_h, t_rock_floor, t_rock_floor, t_console, t_console_broken, t_wall_glass_v, t_wall_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, t_floor, t_rock, t_door_c, t_radio_tower), - mapf::basic_bind("r d h 6 x g G , . - | + D t c ^ % = &", f_null, f_desk, f_chair, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_table, f_counter, f_indoor_plant, f_null, f_null, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_counter){ - place_items("cubical_office", 30, i, j, i, j, false, 0); - } - if (one_in(500) && this->ter(i,j) == t_rock_floor) add_spawn("mon_zombie", 1, i, j); - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - if (one_in(400) && this->ter(i,j) == t_rock_floor) add_item(i, j, body); - } - } - tmpcomp = add_computer(11, 8, _("Mk IV Algorithmic Data Analyzer"), 4); - tmpcomp->add_option(_("Run Decryption Algorithm"), COMPACT_DATA_ANAL, 4); - tmpcomp->add_option(_("Upload Data to Melchior"), COMPACT_DISCONNECT, 7); - tmpcomp->add_option(_("Access Melchior"), COMPACT_DISCONNECT, 12); - tmpcomp->add_failure(COMPFAIL_DESTROY_DATA); - } - - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < lw || i >= SEEX * 2 - rw + 1) - ter_set(i, j, t_concrete_v); - else if (j < (tw-1) || j >= SEEY * 2 - bw + 1) - ter_set(i, j, t_concrete_h); - } - } - if (t_above == ot_lab_stairs || t_above == ot_ice_lab_stairs) { - int sx, sy; - do { - sx = rng(lw, SEEX * 2 - 1 - rw); - sy = rng(tw, SEEY * 2 - 1 - bw); - } while (ter(sx, sy) != t_rock_floor); - ter_set(sx, sy, t_stairs_up); - } - if (terrain_type == ot_lab_stairs || terrain_type == ot_ice_lab_stairs) { - int sx, sy; - do { - sx = rng(lw, SEEX * 2 - 1 - rw); - sy = rng(tw, SEEY * 2 - 1 - bw); - } while (ter(sx, sy) != t_rock_floor); - ter_set(sx, sy, t_stairs_down); - } - break; - - } - } -// Ants will totally wreck up the place - tw = 0; - rw = 0; - bw = 0; - lw = 0; - if (t_north >= ot_ants_ns && t_north <=ot_ants_nesw && connects_to(t_north,2)) - tw = SEEY; - if (t_east >= ot_ants_ns && t_east <= ot_ants_nesw && connects_to(t_east, 3)) - rw = SEEX; - if (t_south >= ot_ants_ns && t_south <=ot_ants_nesw && connects_to(t_south,0)) - bw = SEEY + 1; - if (t_west >= ot_ants_ns && t_west <= ot_ants_nesw && connects_to(t_west, 1)) - lw = SEEX + 1; - if (tw != 0 || rw != 0 || bw != 0 || lw != 0) { - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i < SEEX*2 - lw && (!one_in(3) || (j > SEEY - 6 && j < SEEY + 5))) || - (i > rw && (!one_in(3) || (j > SEEY - 6 && j < SEEY + 5))) || - (j > tw && (!one_in(3) || (i > SEEX - 6 && i < SEEX + 5))) || - (j < SEEY*2 - bw && (!one_in(3) || (i > SEEX - 6 && i < SEEX + 5)))) { - if (one_in(5)) - ter_set(i, j, t_rubble); - else - ter_set(i, j, t_rock_floor); - } - } - } - } - -// Slimes pretty much wreck up the place, too, but only underground - tw = (t_north == ot_slimepit ? SEEY : 0); - rw = (t_east == ot_slimepit ? SEEX + 1 : 0); - bw = (t_south == ot_slimepit ? SEEY + 1 : 0); - lw = (t_west == ot_slimepit ? SEEX : 0); - if (tw != 0 || rw != 0 || bw != 0 || lw != 0) { - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (((j <= tw || i >= rw) && i >= j && (SEEX * 2 - 1 - i) <= j) || - ((j >= bw || i <= lw) && i <= j && (SEEY * 2 - 1 - j) <= i) ) { - if (one_in(5)) - ter_set(i, j, t_rubble); - else if (!one_in(5)) - ter_set(i, j, t_slime); - } - } - } - } - - break; - - case ot_lab_finale: - ice_lab_finale = false; - case ot_ice_lab_finale: - if ( ice_lab_finale ) { - int temperature = -20 + 30*(g->levz); - set_temperature(x, y, temperature); - - tw = (t_north >= ot_ice_lab && t_north <= ot_ice_lab_finale) ? 0 : 2; - rw = (t_east >= ot_ice_lab && t_east <= ot_ice_lab_finale) ? 1 : 2; - bw = (t_south >= ot_ice_lab && t_south <= ot_ice_lab_finale) ? 1 : 2; - lw = (t_west >= ot_ice_lab && t_west <= ot_ice_lab_finale) ? 0 : 2; - } - else { - tw = (t_north >= ot_lab && t_north <= ot_lab_finale) ? 0 : 2; - rw = (t_east >= ot_lab && t_east <= ot_lab_finale) ? 1 : 2; - bw = (t_south >= ot_lab && t_south <= ot_lab_finale) ? 1 : 2; - lw = (t_west >= ot_lab && t_west <= ot_lab_finale) ? 0 : 2; - } - -// Start by setting up a large, empty room. - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < lw || i > SEEX * 2 - 1 - rw) - ter_set(i, j, t_concrete_v); - else if (j < tw || j > SEEY * 2 - 1 - bw) - ter_set(i, j, t_concrete_h); - else - ter_set(i, j, t_floor); - } - } - if (rw == 1) { - ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); - ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); - } - if (bw == 1) { - ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); - ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); - } - - switch (rng(1, 3)) { - case 1: // Weapons testing - add_spawn("mon_secubot", 1, 6, 6); - add_spawn("mon_secubot", 1, SEEX * 2 - 7, 6); - add_spawn("mon_secubot", 1, 6, SEEY * 2 - 7); - add_spawn("mon_secubot", 1, SEEX * 2 - 7, SEEY * 2 - 7); - add_trap(SEEX - 2, SEEY - 2, tr_dissector); - add_trap(SEEX + 1, SEEY - 2, tr_dissector); - add_trap(SEEX - 2, SEEY + 1, tr_dissector); - add_trap(SEEX + 1, SEEY + 1, tr_dissector); - if (!one_in(3)) { - rn = dice(4, 3); - spawn_item(SEEX - 1, SEEY - 1, "laser_pack", 0, rn); - spawn_item(SEEX + 1, SEEY - 1, "UPS_off", 0, rn); - spawn_item(SEEX - 1, SEEY , "v29", 0); - spawn_item(SEEX + 1, SEEY , "ftk93", 0); - } else if (!one_in(3)) { - rn = dice(3, 6); - spawn_item(SEEX - 1, SEEY - 1, "mininuke", 0, rn); - spawn_item(SEEX , SEEY - 1, "mininuke", 0, rn); - spawn_item(SEEX - 1, SEEY , "mininuke", 0, rn); - spawn_item(SEEX , SEEY , "mininuke", 0, rn); - } else { - furn_set(SEEX - 2, SEEY - 1, f_rack); - furn_set(SEEX - 1, SEEY - 1, f_rack); - furn_set(SEEX , SEEY - 1, f_rack); - furn_set(SEEX + 1, SEEY - 1, f_rack); - furn_set(SEEX - 2, SEEY , f_rack); - furn_set(SEEX - 1, SEEY , f_rack); - furn_set(SEEX , SEEY , f_rack); - furn_set(SEEX + 1, SEEY , f_rack); - place_items("ammo", 96, SEEX - 2, SEEY - 1, SEEX + 1, SEEY - 1, false, 0); - place_items("allguns", 96, SEEX - 2, SEEY, SEEX + 1, SEEY, false, 0); - } - break; - - case 2: { // Netherworld access - if (!one_in(4)) { // Trapped netherworld monsters - std::string nethercreatures[10] = {"mon_flying_polyp", "mon_hunting_horror", "mon_mi_go", "mon_yugg", "mon_gelatin", - "mon_flaming_eye", "mon_kreck", "mon_gracke", "mon_blank", "mon_gozu"}; - tw = rng(SEEY + 3, SEEY + 5); - bw = tw + 4; - lw = rng(SEEX - 6, SEEX - 2); - rw = lw + 6; - for (int i = lw; i <= rw; i++) { - for (int j = tw; j <= bw; j++) { - if (j == tw || j == bw) { - if ((i - lw) % 2 == 0) - ter_set(i, j, t_concrete_h); - else - ter_set(i, j, t_reinforced_glass_h); - } else if ((i - lw) % 2 == 0) - ter_set(i, j, t_concrete_v); - else if (j == tw + 2) - ter_set(i, j, t_concrete_h); - else { // Empty space holds monsters! - std::string type = nethercreatures[(rng(0, 9))]; - add_spawn(type, 1, i, j); - } - } - } - } - tmpcomp = add_computer(SEEX, 8, _("Sub-prime contact console"), 7); - tmpcomp->add_option(_("Terminate Specimens"), COMPACT_TERMINATE, 2); - tmpcomp->add_option(_("Release Specimens"), COMPACT_RELEASE, 3); - tmpcomp->add_option(_("Toggle Portal"), COMPACT_PORTAL, 8); - tmpcomp->add_option(_("Activate Resonance Cascade"), COMPACT_CASCADE, 10); - tmpcomp->add_failure(COMPFAIL_MANHACKS); - tmpcomp->add_failure(COMPFAIL_SECUBOTS); - ter_set(SEEX - 2, 4, t_radio_tower); - ter_set(SEEX + 1, 4, t_radio_tower); - ter_set(SEEX - 2, 7, t_radio_tower); - ter_set(SEEX + 1, 7, t_radio_tower); - } break; - - case 3: // Bionics - add_spawn("mon_secubot", 1, 6, 6); - add_spawn("mon_secubot", 1, SEEX * 2 - 7, 6); - add_spawn("mon_secubot", 1, 6, SEEY * 2 - 7); - add_spawn("mon_secubot", 1, SEEX * 2 - 7, SEEY * 2 - 7); - add_trap(SEEX - 2, SEEY - 2, tr_dissector); - add_trap(SEEX + 1, SEEY - 2, tr_dissector); - add_trap(SEEX - 2, SEEY + 1, tr_dissector); - add_trap(SEEX + 1, SEEY + 1, tr_dissector); - square_furn(this, f_counter, SEEX - 1, SEEY - 1, SEEX, SEEY); - int item_count = 0; - while (item_count < 5) - { - item_count += place_items("bionics", 75, SEEX - 1, SEEY - 1, SEEX, SEEY, false, 0); - } - line(this, t_reinforced_glass_h, SEEX - 2, SEEY - 2, SEEX + 1, SEEY - 2); - line(this, t_reinforced_glass_h, SEEX - 2, SEEY + 1, SEEX + 1, SEEY + 1); - line(this, t_reinforced_glass_v, SEEX - 2, SEEY - 1, SEEX - 2, SEEY); - line(this, t_reinforced_glass_v, SEEX + 1, SEEY - 1, SEEX + 1, SEEY); - ter_set(SEEX - 3, SEEY - 3, t_console); - tmpcomp = add_computer(SEEX - 3, SEEY - 3, _("Bionic access"), 3); - tmpcomp->add_option(_("Manifest"), COMPACT_LIST_BIONICS, 0); - tmpcomp->add_option(_("Open Chambers"), COMPACT_RELEASE, 5); - tmpcomp->add_failure(COMPFAIL_MANHACKS); - tmpcomp->add_failure(COMPFAIL_SECUBOTS); - break; - } - break; - - case ot_bunker: - if (t_above == ot_null) { // We're on ground level - fill_background(this, &grass_or_dirt); - //chainlink fence that surrounds bunker - line(this, t_chainfence_v, 1, 1, 1, SEEY*2-1); - line(this, t_chainfence_v, SEEX*2-1, 1, SEEX*2-1, SEEY*2-1); - line(this, t_chainfence_h, 1, SEEY*2-1, SEEX*2-1, SEEY*2-1); - line(this, t_chainfence_h, 1, 1, SEEX*2-1, 1); - line(this, t_chaingate_l, SEEX-3, SEEY*2-1, SEEX+2, SEEY*2-1); - line(this, t_chaingate_l, 1, SEEY*2-2, 1, SEEY*2-7); - line(this, t_chaingate_l, SEEX*2-1, SEEY*2-2, SEEX*2-1, SEEY*2-7); - //watch cabin - //line(this, t_concrete_h, SEEX-6, SEEY*2-4, SEEX-4, SEEY*2-4); - ter_set(2, 13, t_concrete_h); ter_set(4, 13, t_concrete_h); ter_set(3, 13, t_door_c); - ter_set(4, 14, t_concrete_v); - ter_set(4, 15, t_concrete_v); - ter_set(1, 13, t_concrete_h); - ter_set(3, 15, t_window); - ter_set(2, 15, t_window); - ter_set(1, 14, t_reinforced_glass_v); - ter_set(1, 15, t_reinforced_glass_v); - ter_set(2, 14, t_floor); ter_set(3, 14, t_floor); furn_set(2,14, f_table); - //watch cabin 2 - ter_set(SEEX*2-2, 13, t_concrete_h); ter_set(SEEX*2-4, 13, t_concrete_h); ter_set(SEEX*2-3, 13, t_door_c); - ter_set(SEEX*2-4, 14, t_concrete_v); - ter_set(SEEX*2-4, 15, t_concrete_v); - ter_set(SEEX*2-1, 13, t_concrete_h); - ter_set(SEEX*2-3, 15, t_window); - ter_set(SEEX*2-2, 15, t_window); - ter_set(SEEX*2-1, 14, t_reinforced_glass_v); - ter_set(SEEX*2-1, 15, t_reinforced_glass_v); - ter_set(SEEX*2-2, 14, t_floor); ter_set(SEEX*2-3, 14, t_floor); furn_set(SEEX*2-2, 14, f_table); - line(this, t_wall_metal_h, 7, 7, 16, 7); - line(this, t_wall_metal_h, 8, 8, 15, 8); - line(this, t_wall_metal_h, 8, 15, 15, 15); - line(this, t_wall_metal_h, 7, 16, 10, 16); - line(this, t_wall_metal_h, 14, 16, 16, 16); - line(this, t_wall_metal_v, 7, 8, 7, 15); - line(this, t_wall_metal_v, 16, 8, 16, 15); - line(this, t_wall_metal_v, 8, 9, 8, 14); - line(this, t_wall_metal_v, 15, 9, 15, 14); - square(this, t_floor, 9, 10, 14, 14); - line(this, t_stairs_down, 11, 9, 12, 9); - line(this, t_door_metal_locked, 11, 15, 12, 15); - for (int i = 9; i <= 13; i += 2) { - line(this, t_wall_metal_h, 9, i, 10, i); - line(this, t_wall_metal_h, 13, i, 14, i); - add_spawn("mon_turret", 1, 9, i + 1); - add_spawn("mon_turret", 1, 14, i + 1); - } - ter_set(13, 16, t_card_military); - } else { // Below ground! - - fill_background(this, t_rock); - square(this, t_floor, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2); - line(this, t_wall_metal_h, 2, 8, 8, 8); - line(this, t_wall_metal_h, 15, 8, 21, 8); - line(this, t_wall_metal_h, 2, 15, 8, 15); - line(this, t_wall_metal_h, 15, 15, 21, 15); - for (int j = 2; j <= 16; j += 7) { - ter_set( 9, j , t_card_military); - ter_set(14, j , t_card_military); - ter_set( 9, j + 1, t_door_metal_locked); - ter_set(14, j + 1, t_door_metal_locked); - line(this, t_reinforced_glass_v, 9, j + 2, 9, j + 4); - line(this, t_reinforced_glass_v, 14, j + 2, 14, j + 4); - line(this, t_wall_metal_v, 9, j + 5, 9, j + 6); - line(this, t_wall_metal_v, 14, j + 5, 14, j + 6); - -// Fill rooms with items! - for (int i = 2; i <= 15; i += 13) { - items_location goods; - int size = 0; - switch (rng(1, 14)) { - case 1: - case 2: goods = "bots"; size = 85; break; - case 3: - case 4: goods = "launchers"; size = 83; break; - case 5: - case 6: goods = "mil_rifles"; size = 87; break; - case 7: - case 8: goods = "grenades"; size = 88; break; - case 9: - case 10: goods = "mil_armor"; size = 85; break; - case 11: - case 12: - case 13: goods = "mil_food"; size = 90; break; - case 14: goods = "bionics_mil"; size = 78; break; - } - place_items(goods, size, i, j, i + 6, j + 5, false, 0); - } - } - line(this, t_wall_metal_h, 1, 1, SEEX * 2 - 2, 1); - line(this, t_wall_metal_h, 1, SEEY * 2 - 2, SEEX * 2 - 2, SEEY * 2 - 2); - line(this, t_wall_metal_v, 1, 2, 1, SEEY * 2 - 3); - line(this, t_wall_metal_v, SEEX * 2 - 2, 2, SEEX * 2 - 2, SEEY * 2 - 3); - ter_set(SEEX - 1, 21, t_stairs_up); - ter_set(SEEX, 21, t_stairs_up); - } - break; - - case ot_outpost: { - fill_background(this, &grass_or_dirt); - - square(this, t_dirt, 3, 3, 20, 20); - line(this, t_chainfence_h, 2, 2, 10, 2); - line(this, t_chainfence_h, 13, 2, 21, 2); - line(this, t_chaingate_l, 11, 2, 12, 2); - line(this, t_chainfence_h, 2, 21, 10, 21); - line(this, t_chainfence_h, 13, 21, 21, 21); - line(this, t_chaingate_l, 11, 21, 12, 21); - line(this, t_chainfence_v, 2, 3, 2, 10); - line(this, t_chainfence_v, 21, 3, 21, 10); - line(this, t_chaingate_l, 2, 11, 2, 12); - line(this, t_chainfence_v, 2, 13, 2, 20); - line(this, t_chainfence_v, 21, 13, 21, 20); - line(this, t_chaingate_l, 21, 11, 21, 12); -// Place some random buildings - - bool okay = true; - while (okay) { - int buildx = rng(6, 17), buildy = rng(6, 17); - int buildwidthmax = (buildx <= 11 ? buildx - 3 : 20 - buildx), - buildheightmax = (buildy <= 11 ? buildy - 3 : 20 - buildy); - int buildwidth = rng(3, buildwidthmax), buildheight = rng(3, buildheightmax); - if (ter(buildx, buildy) != t_dirt) - okay = false; - else { - int bx1 = buildx - buildwidth, bx2 = buildx + buildwidth, - by1 = buildy - buildheight, by2 = buildy + buildheight; - square(this, t_floor, bx1, by1, bx2, by2); - line(this, t_concrete_h, bx1, by1, bx2, by1); - line(this, t_concrete_h, bx1, by2, bx2, by2); - line(this, t_concrete_v, bx1, by1, bx1, by2); - line(this, t_concrete_v, bx2, by1, bx2, by2); - switch (rng(1, 3)) { // What type of building? - case 1: // Barracks - for (int i = by1 + 1; i <= by2 - 1; i += 2) { - line_furn(this, f_bed, bx1 + 1, i, bx1 + 2, i); - line_furn(this, f_bed, bx2 - 2, i, bx2 - 1, i); - } - place_items("bedroom", 84, bx1 + 1, by1 + 1, bx2 - 1, by2 - 1, false, 0); - break; - case 2: // Armory - line_furn(this, f_counter, bx1 + 1, by1 + 1, bx2 - 1, by1 + 1); - line_furn(this, f_counter, bx1 + 1, by2 - 1, bx2 - 1, by2 - 1); - line_furn(this, f_counter, bx1 + 1, by1 + 2, bx1 + 1, by2 - 2); - line_furn(this, f_counter, bx2 - 1, by1 + 2, bx2 - 1, by2 - 2); - place_items("mil_rifles", 40, bx1+1, by1+1, bx2-1, by1+1, false, 0); - place_items("launchers", 40, bx1+1, by2-1, bx2-1, by2-1, false, 0); - place_items("grenades", 40, bx1+1, by1+2, bx1+1, by2-2, false, 0); - place_items("mil_armor", 40, bx2-1, by1+2, bx2-1, by2-2, false, 0); - break; - case 3: // Supplies - for (int i = by1 + 1; i <= by2 - 1; i += 3) { - line_furn(this, f_rack, bx1 + 2, i, bx2 - 2, i); - place_items("mil_food", 78, bx1 + 2, i, bx2 - 2, i, false, 0); - } - break; - } - std::vector doorsides; - if (bx1 > 3) - doorsides.push_back(WEST); - if (bx2 < 20) - doorsides.push_back(EAST); - if (by1 > 3) - doorsides.push_back(NORTH); - if (by2 < 20) - doorsides.push_back(SOUTH); - int doorx = 0, doory = 0; - switch (doorsides[rng(0, doorsides.size() - 1)]) { - case WEST: - doorx = bx1; - doory = rng(by1 + 1, by2 - 1); - break; - case EAST: - doorx = bx2; - doory = rng(by1 + 1, by2 - 1); - break; - case NORTH: - doorx = rng(bx1 + 1, bx2 - 1); - doory = by1; - break; - case SOUTH: - doorx = rng(bx1 + 1, bx2 - 1); - doory = by2; - break; - default: break; - } - for (int i = doorx - 1; i <= doorx + 1; i++) { - for (int j = doory - 1; j <= doory + 1; j++) { - i_clear(i, j); - if (furn(i, j) == f_bed || furn(i, j) == f_rack || furn(i, j) == f_counter) - set(i, j, t_floor, f_null); - } - } - ter_set(doorx, doory, t_door_c); - } - } -// Seal up the entrances if there's walls there - if (ter(11, 3) != t_dirt) - ter_set(11, 2, t_concrete_h); - if (ter(12, 3) != t_dirt) - ter_set(12, 2, t_concrete_h); - - if (ter(11, 20) != t_dirt) - ter_set(11, 2, t_concrete_h); - if (ter(12, 20) != t_dirt) - ter_set(12, 2, t_concrete_h); - - if (ter( 3, 11) != t_dirt) - ter_set( 2, 11, t_concrete_v); - if (ter( 3, 12) != t_dirt) - ter_set( 2, 12, t_concrete_v); - - if (ter( 3, 11) != t_dirt) - ter_set( 2, 11, t_concrete_v); - if (ter( 3, 12) != t_dirt) - ter_set( 2, 12, t_concrete_v); - -// Place turrets by (possible) entrances - add_spawn("mon_turret", 1, 3, 11); - add_spawn("mon_turret", 1, 3, 12); - add_spawn("mon_turret", 1, 20, 11); - add_spawn("mon_turret", 1, 20, 12); - add_spawn("mon_turret", 1, 11, 3); - add_spawn("mon_turret", 1, 12, 3); - add_spawn("mon_turret", 1, 11, 20); - add_spawn("mon_turret", 1, 12, 20); - -// Finally, scatter dead bodies / mil zombies - for (int i = 0; i < 20; i++) { - int rnx = rng(3, 20), rny = rng(3, 20); - if (move_cost(rnx, rny) != 0) { - if (one_in(5)) // Military zombie - add_spawn("mon_zombie_soldier", 1, rnx, rny); - else if (one_in(2)) { - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(rnx, rny, body); - place_items("launchers", 10, rnx, rny, rnx, rny, true, 0); - place_items("mil_rifles", 30, rnx, rny, rnx, rny, true, 0); - place_items("mil_armor", 70, rnx, rny, rnx, rny, true, 0); - place_items("mil_food", 40, rnx, rny, rnx, rny, true, 0); - spawn_item(rnx, rny, "id_military", 0); - } else if (one_in(20)) - rough_circle(this, t_rubble, rnx, rny, rng(3, 6)); - } - } -// Oh wait--let's also put radiation in any rubble - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - radiation(i, j) += (one_in(5) ? rng(1, 2) : 0); - if (ter(i, j) == t_rubble) - radiation(i, j) += rng(1, 3); - } - } - - } break; - - case ot_silo: - if (t_above == ot_null) { // We're on ground level - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (trig_dist(i, j, SEEX, SEEY) <= 6) - ter_set(i, j, t_metal_floor); - else - ter_set(i, j, grass_or_dirt()); - } - } - switch (rng(1, 4)) { // Placement of stairs - case 1: - lw = 3; - mw = 5; - tw = 3; - break; - case 2: - lw = 3; - mw = 5; - tw = SEEY * 2 - 4; - break; - case 3: - lw = SEEX * 2 - 7; - mw = lw; - tw = 3; - break; - case 4: - lw = SEEX * 2 - 7; - mw = lw; - tw = SEEY * 2 - 4; - break; - } - for (int i = lw; i <= lw + 2; i++) { - ter_set(i, tw , t_wall_metal_h); - ter_set(i, tw + 2, t_wall_metal_h); - } - ter_set(lw , tw + 1, t_wall_metal_v); - ter_set(lw + 1, tw + 1, t_stairs_down); - ter_set(lw + 2, tw + 1, t_wall_metal_v); - ter_set(mw , tw + 1, t_door_metal_locked); - ter_set(mw , tw + 2, t_card_military); - - } else { // We are NOT above ground. - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (trig_dist(i, j, SEEX, SEEY) > 7) - ter_set(i, j, t_rock); - else if (trig_dist(i, j, SEEX, SEEY) > 5) { - ter_set(i, j, t_metal_floor); - if (one_in(30)) - add_field(NULL, i, j, fd_nuke_gas, 2); // NULL game; no messages - } else if (trig_dist(i, j, SEEX, SEEY) == 5) { - ter_set(i, j, t_hole); - add_trap(i, j, tr_ledge); - } else - ter_set(i, j, t_missile); - } - } - silo_rooms(this); - } - break; - - case ot_silo_finale: { - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i == 5) { - if (j > 4 && j < SEEY) - ter_set(i, j, t_reinforced_glass_v); - else if (j == SEEY * 2 - 4) - ter_set(i, j, t_door_metal_c); - else - ter_set(i, j, t_rock); - } else - ter_set(i, j, t_rock_floor); - } - } - ter_set(0, 0, t_stairs_up); - tmpcomp = add_computer(4, 5, _("Missile Controls"), 8); - tmpcomp->add_option(_("Launch Missile"), COMPACT_MISS_LAUNCH, 10); - tmpcomp->add_option(_("Disarm Missile"), COMPACT_MISS_DISARM, 8); - tmpcomp->add_failure(COMPFAIL_SECUBOTS); - tmpcomp->add_failure(COMPFAIL_DAMAGE); - } break; - - case ot_temple: - case ot_temple_stairs: - if (t_above == ot_null) { // Ground floor -// TODO: More varieties? - fill_background(this, t_dirt); - square(this, t_grate, SEEX - 1, SEEY - 1, SEEX, SEEX); - ter_set(SEEX + 1, SEEY + 1, t_pedestal_temple); - } else { // Underground! Shit's about to get interesting! -// Start with all rock floor - square(this, t_rock_floor, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); -// We always start at the south and go north. -// We use (g->levx / 2 + g->levz) % 5 to guarantee that rooms don't repeat. - switch (1 + int(g->levy / 2 + g->levz) % 4) {// TODO: More varieties! - - case 1: // Flame bursts - square(this, t_rock, 0, 0, SEEX - 1, SEEY * 2 - 1); - square(this, t_rock, SEEX + 2, 0, SEEX * 2 - 1, SEEY * 2 - 1); - for (int i = 2; i < SEEY * 2 - 4; i++) { - add_field(g, SEEX , i, fd_fire_vent, rng(1, 3)); - add_field(g, SEEX + 1, i, fd_fire_vent, rng(1, 3)); - } - break; - - case 2: // Spreading water - square(this, t_water_dp, 4, 4, 5, 5); - add_spawn("mon_sewer_snake", 1, 4, 4); - - square(this, t_water_dp, SEEX * 2 - 5, 4, SEEX * 2 - 4, 6); - add_spawn("mon_sewer_snake", 1, SEEX * 2 - 5, 4); - - square(this, t_water_dp, 4, SEEY * 2 - 5, 6, SEEY * 2 - 4); - - square(this, t_water_dp, SEEX * 2 - 5, SEEY * 2 - 5, SEEX * 2 - 4, - SEEY * 2 - 4); - - square(this, t_rock, 0, SEEY * 2 - 2, SEEX - 1, SEEY * 2 - 1); - square(this, t_rock, SEEX + 2, SEEY * 2 - 2, SEEX * 2 - 1, SEEY * 2 - 1); - line(this, t_grate, SEEX, 1, SEEX + 1, 1); // To drain the water - add_trap(SEEX, SEEY * 2 - 2, tr_temple_flood); - add_trap(SEEX + 1, SEEY * 2 - 2, tr_temple_flood); - for (int y = 2; y < SEEY * 2 - 2; y++) { - for (int x = 2; x < SEEX * 2 - 2; x++) { - if (ter(x, y) == t_rock_floor && one_in(4)) - add_trap(x, y, tr_temple_flood); - } - } - break; - - case 3: { // Flipping walls puzzle - line(this, t_rock, 0, 0, SEEX - 1, 0); - line(this, t_rock, SEEX + 2, 0, SEEX * 2 - 1, 0); - line(this, t_rock, SEEX - 1, 1, SEEX - 1, 6); - line(this, t_bars, SEEX + 2, 1, SEEX + 2, 6); - ter_set(14, 1, t_switch_rg); - ter_set(15, 1, t_switch_gb); - ter_set(16, 1, t_switch_rb); - ter_set(17, 1, t_switch_even); -// Start with clear floors--then work backwards to the starting state - line(this, t_floor_red, SEEX, 1, SEEX + 1, 1); - line(this, t_floor_green, SEEX, 2, SEEX + 1, 2); - line(this, t_floor_blue, SEEX, 3, SEEX + 1, 3); - line(this, t_floor_red, SEEX, 4, SEEX + 1, 4); - line(this, t_floor_green, SEEX, 5, SEEX + 1, 5); - line(this, t_floor_blue, SEEX, 6, SEEX + 1, 6); -// Now, randomly choose actions -// Set up an actions vector so that there's not undue repetion - std::vector actions; - actions.push_back(1); - actions.push_back(2); - actions.push_back(3); - actions.push_back(4); - actions.push_back(rng(1, 3)); - while (!actions.empty()) { - int index = rng(0, actions.size() - 1); - int action = actions[index]; - actions.erase(actions.begin() + index); - for (int y = 1; y < 7; y++) { - for (int x = SEEX; x <= SEEX + 1; x++) { - switch (action) { - case 1: // Toggle RG - if (ter(x, y) == t_floor_red) - ter_set(x, y, t_rock_red); - else if (ter(x, y) == t_rock_red) - ter_set(x, y, t_floor_red); - else if (ter(x, y) == t_floor_green) - ter_set(x, y, t_rock_green); - else if (ter(x, y) == t_rock_green) - ter_set(x, y, t_floor_green); - break; - case 2: // Toggle GB - if (ter(x, y) == t_floor_blue) - ter_set(x, y, t_rock_blue); - else if (ter(x, y) == t_rock_blue) - ter_set(x, y, t_floor_blue); - else if (ter(x, y) == t_floor_green) - ter_set(x, y, t_rock_green); - else if (ter(x, y) == t_rock_green) - ter_set(x, y, t_floor_green); - break; - case 3: // Toggle RB - if (ter(x, y) == t_floor_blue) - ter_set(x, y, t_rock_blue); - else if (ter(x, y) == t_rock_blue) - ter_set(x, y, t_floor_blue); - else if (ter(x, y) == t_floor_red) - ter_set(x, y, t_rock_red); - else if (ter(x, y) == t_rock_red) - ter_set(x, y, t_floor_red); - break; - case 4: // Toggle Even - if (y % 2 == 0) { - if (ter(x, y) == t_floor_blue) - ter_set(x, y, t_rock_blue); - else if (ter(x, y) == t_rock_blue) - ter_set(x, y, t_floor_blue); - else if (ter(x, y) == t_floor_red) - ter_set(x, y, t_rock_red); - else if (ter(x, y) == t_rock_red) - ter_set(x, y, t_floor_red); - else if (ter(x, y) == t_floor_green) - ter_set(x, y, t_rock_green); - else if (ter(x, y) == t_rock_green) - ter_set(x, y, t_floor_green); - } - break; - } - } - } - } - } break; - - case 4: { // Toggling walls maze - square(this, t_rock, 0, 0, SEEX - 1, 1); - square(this, t_rock, 0, SEEY * 2 - 2, SEEX - 1, SEEY * 2 - 1); - square(this, t_rock, 0, 2, SEEX - 4, SEEY * 2 - 3); - square(this, t_rock, SEEX + 2, 0, SEEX * 2 - 1, 1); - square(this, t_rock, SEEX + 2, SEEY * 2 - 2, SEEX * 2 - 1, SEEY * 2 - 1); - square(this, t_rock, SEEX + 5, 2, SEEX * 2 - 1, SEEY * 2 - 3); - int x = rng(SEEX - 1, SEEX + 2), y = 2; - std::vector path; // Path, from end to start - while (x < SEEX - 1 || x > SEEX + 2 || y < SEEY * 2 - 2) { - path.push_back( point(x, y) ); - ter_set(x, y, ter_id( rng(t_floor_red, t_floor_blue) )); - if (y == SEEY * 2 - 2) { - if (x < SEEX - 1) - x++; - else if (x > SEEX + 2) - x--; - } else { - std::vector next; - for (int nx = x - 1; nx <= x + 1; nx++ ) { - for (int ny = y; ny <= y + 1; ny++) { - if (ter(nx, ny) == t_rock_floor) - next.push_back( point(nx, ny) ); - } - } - int index = rng(0, next.size() - 1); - x = next[index].x; - y = next[index].y; - } - } -// Now go backwards through path (start to finish), toggling any tiles that need - bool toggle_red = false, toggle_green = false, toggle_blue = false; - for (int i = path.size() - 1; i >= 0; i--) { - if (ter(path[i].x, path[i].y) == t_floor_red) { - toggle_green = !toggle_green; - if (toggle_red) - ter_set(path[i].x, path[i].y, t_rock_red); - } else if (ter(path[i].x, path[i].y) == t_floor_green) { - toggle_blue = !toggle_blue; - if (toggle_green) - ter_set(path[i].x, path[i].y, t_rock_green); - } else if (ter(path[i].x, path[i].y) == t_floor_blue) { - toggle_red = !toggle_red; - if (toggle_blue) - ter_set(path[i].x, path[i].y, t_rock_blue); - } - } -// Finally, fill in the rest with random tiles, and place toggle traps - for (int i = SEEX - 3; i <= SEEX + 4; i++) { - for (int j = 2; j <= SEEY * 2 - 2; j++) { - add_trap(i, j, tr_temple_toggle); - if (ter(i, j) == t_rock_floor) - ter_set(i, j, ter_id( rng(t_rock_red, t_floor_blue) )); - } - } - } break; - } // Done with room type switch -// Stairs down if we need them - if (terrain_type == ot_temple_stairs) - line(this, t_stairs_down, SEEX, 0, SEEX + 1, 0); -// Stairs at the south if t_above has stairs down. - if (t_above == ot_temple_stairs) - line(this, t_stairs_up, SEEX, SEEY * 2 - 1, SEEX + 1, SEEY * 2 - 1); - - } // Done with underground-only stuff - break; - - case ot_temple_finale: - fill_background(this, t_rock); - square(this, t_rock_floor, SEEX - 1, 1, SEEX + 2, 4); - square(this, t_rock_floor, SEEX, 5, SEEX + 1, SEEY * 2 - 1); - line(this, t_stairs_up, SEEX, SEEY * 2 - 1, SEEX + 1, SEEY * 2 - 1); - spawn_artifact(rng(SEEX, SEEX + 1), rng(2, 3), g->new_artifact(), 0); - spawn_artifact(rng(SEEX, SEEX + 1), rng(2, 3), g->new_artifact(), 0); - return; - - case ot_sewage_treatment: - fill_background(this, t_floor); // Set all to floor - line(this, t_wall_h, 0, 0, 23, 0); // Top wall - line(this, t_window, 1, 0, 6, 0); // Its windows - line(this, t_wall_h, 0, 23, 23, 23); // Bottom wall - line(this, t_wall_h, 1, 5, 6, 5); // Interior wall (front office) - line(this, t_wall_h, 1, 14, 6, 14); // Interior wall (equipment) - line(this, t_wall_h, 1, 20, 7, 20); // Interior wall (stairs) - line(this, t_wall_h, 14, 15, 22, 15); // Interior wall (tank) - line(this, t_wall_v, 0, 1, 0, 22); // Left wall - line(this, t_wall_v, 23, 1, 23, 22); // Right wall - line(this, t_wall_v, 7, 1, 7, 5); // Interior wall (front office) - line(this, t_wall_v, 7, 14, 7, 19); // Interior wall (stairs) - line(this, t_wall_v, 4, 15, 4, 19); // Interior wall (mid-stairs) - line(this, t_wall_v, 14, 15, 14, 20); // Interior wall (tank) - line(this, t_wall_glass_v, 7, 6, 7, 13); // Interior glass (equipment) - line(this, t_wall_glass_h, 8, 20, 13, 20); // Interior glass (flow) - line_furn(this, f_counter, 1, 3, 3, 3); // Desk (front office); - line_furn(this, f_counter, 1, 6, 1, 13); // Counter (equipment); -// Central tanks: - square(this, t_sewage, 10, 3, 13, 6); - square(this, t_sewage, 17, 3, 20, 6); - square(this, t_sewage, 10, 10, 13, 13); - square(this, t_sewage, 17, 10, 20, 13); -// Drainage tank - square(this, t_sewage, 16, 16, 21, 18); - square(this, t_grate, 18, 16, 19, 17); - line(this, t_sewage, 17, 19, 20, 19); - line(this, t_sewage, 18, 20, 19, 20); - line(this, t_sewage, 2, 21, 19, 21); - line(this, t_sewage, 2, 22, 19, 22); -// Pipes and pumps - line(this, t_sewage_pipe, 1, 15, 1, 19); - line(this, t_sewage_pump, 1, 21, 1, 22); -// Stairs down - ter_set(2, 15, t_stairs_down); -// Now place doors - ter_set(rng(2, 5), 0, t_door_c); - ter_set(rng(3, 5), 5, t_door_c); - ter_set(5, 14, t_door_c); - ter_set(7, rng(15, 17), t_door_c); - ter_set(14, rng(17, 19), t_door_c); - if (one_in(3)) // back door - ter_set(23, rng(19, 22), t_door_locked); - ter_set(4, 19, t_door_metal_locked); - ter_set(2, 19, t_console); - ter_set(6, 19, t_console); -// Computers to unlock stair room, and items - tmpcomp = add_computer(2, 19, _("EnviroCom OS v2.03"), 1); - tmpcomp->add_option(_("Unlock stairs"), COMPACT_OPEN, 0); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - - tmpcomp = add_computer(6, 19, _("EnviroCom OS v2.03"), 1); - tmpcomp->add_option(_("Unlock stairs"), COMPACT_OPEN, 0); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - place_items("sewage_plant", 80, 1, 6, 1, 13, false, 0); - - break; - - case ot_sewage_treatment_hub: // Stairs up, center of 3x3 of treatment_below - fill_background(this, t_rock_floor); -// Top & left walls; right & bottom are handled by adjacent terrain - line(this, t_wall_h, 0, 0, 23, 0); - line(this, t_wall_v, 0, 1, 0, 23); -// Top-left room - line(this, t_wall_v, 8, 1, 8, 8); - line(this, t_wall_h, 1, 9, 9, 9); - line(this, t_wall_glass_h, rng(1, 3), 9, rng(4, 7), 9); - ter_set(2, 15, t_stairs_up); - ter_set(8, 8, t_door_c); - ter_set(3, 0, t_door_c); - -// Bottom-left room - stairs and equipment - line(this, t_wall_h, 1, 14, 8, 14); - line(this, t_wall_glass_h, rng(1, 3), 14, rng(5, 8), 14); - line(this, t_wall_v, 9, 14, 9, 23); - line(this, t_wall_glass_v, 9, 16, 9, 19); - square_furn(this, f_counter, 5, 16, 6, 20); - place_items("sewage_plant", 80, 5, 16, 6, 20, false, 0); - ter_set(0, 20, t_door_c); - ter_set(9, 20, t_door_c); - -// Bottom-right room - line(this, t_wall_v, 14, 19, 14, 23); - line(this, t_wall_h, 14, 18, 19, 18); - line(this, t_wall_h, 21, 14, 23, 14); - ter_set(14, 18, t_wall_h); - ter_set(14, 20, t_door_c); - ter_set(15, 18, t_door_c); - line(this, t_wall_v, 20, 15, 20, 18); - -// Tanks and their content - for (int i = 9; i <= 16; i += 7) { - for (int j = 2; j <= 9; j += 7) { - square(this, t_rock, i, j, i + 5, j + 5); - square(this, t_sewage, i + 1, j + 1, i + 4, j + 4); - } - } - square(this, t_rock, 16, 15, 19, 17); // Wall around sewage from above - square(this, t_rock, 10, 15, 14, 17); // Extra walls for southward flow -// Flow in from north, east, and west always connects to the corresponding tank - square(this, t_sewage, 10, 0, 13, 2); // North -> NE tank - square(this, t_sewage, 21, 10, 23, 13); // East -> SE tank - square(this, t_sewage, 0, 10, 9, 13); // West -> SW tank -// Flow from south may go to SW tank or SE tank - square(this, t_sewage, 10, 16, 13, 23); - if (one_in(2)) { // To SW tank - square(this, t_sewage, 10, 14, 13, 17); -// Then, flow from above may be either to flow from south, to SE tank, or both - switch (rng(1, 5)) { - case 1: - case 2: // To flow from south - square(this, t_sewage, 14, 16, 19, 17); - line(this, t_bridge, 15, 16, 15, 17); - if (!one_in(4)) - line(this, t_wall_glass_h, 16, 18, 19, 18); // Viewing window - break; - case 3: - case 4: // To SE tank - square(this, t_sewage, 18, 14, 19, 17); - if (!one_in(4)) - line(this, t_wall_glass_v, 20, 15, 20, 17); // Viewing window - break; - case 5: // Both! - square(this, t_sewage, 14, 16, 19, 17); - square(this, t_sewage, 18, 14, 19, 17); - line(this, t_bridge, 15, 16, 15, 17); - if (!one_in(4)) - line(this, t_wall_glass_h, 16, 18, 19, 18); // Viewing window - if (!one_in(4)) - line(this, t_wall_glass_v, 20, 15, 20, 17); // Viewing window - break; - } - } else { // To SE tank, via flow from above - square(this, t_sewage, 14, 16, 19, 17); - square(this, t_sewage, 18, 14, 19, 17); - line(this, t_bridge, 15, 16, 15, 17); - if (!one_in(4)) - line(this, t_wall_glass_h, 16, 18, 19, 18); // Viewing window - if (!one_in(4)) - line(this, t_wall_glass_v, 20, 15, 20, 17); // Viewing window - } - -// Next, determine how the tanks interconnect. - rn = rng(1, 4); // Which of the 4 possible connections is missing? - if (rn != 1) { - line(this, t_sewage, 14, 4, 14, 5); - line(this, t_bridge, 15, 4, 15, 5); - line(this, t_sewage, 16, 4, 16, 5); - } - if (rn != 2) { - line(this, t_sewage, 18, 7, 19, 7); - line(this, t_bridge, 18, 8, 19, 8); - line(this, t_sewage, 18, 9, 19, 9); - } - if (rn != 3) { - line(this, t_sewage, 14, 11, 14, 12); - line(this, t_bridge, 15, 11, 15, 12); - line(this, t_sewage, 16, 11, 16, 12); - } - if (rn != 4) { - line(this, t_sewage, 11, 7, 12, 7); - line(this, t_bridge, 11, 8, 12, 8); - line(this, t_sewage, 11, 9, 12, 9); - } -// Bridge connecting bottom two rooms - line(this, t_bridge, 10, 20, 13, 20); -// Possibility of extra equipment shelves - if (!one_in(3)) { - line_furn(this, f_rack, 23, 1, 23, 4); - place_items("sewage_plant", 60, 23, 1, 23, 4, false, 0); - } - - -// Finally, choose what the top-left and bottom-right rooms do. - if (one_in(2)) { // Upper left is sampling, lower right valuable finds -// Upper left... - line(this, t_wall_h, 1, 3, 2, 3); - line(this, t_wall_h, 1, 5, 2, 5); - line(this, t_wall_h, 1, 7, 2, 7); - ter_set(1, 4, t_sewage_pump); - furn_set(2, 4, f_counter); - ter_set(1, 6, t_sewage_pump); - furn_set(2, 6, f_counter); - ter_set(1, 2, t_console); - tmpcomp = add_computer(1, 2, _("EnviroCom OS v2.03"), 0); - tmpcomp->add_option(_("Download Sewer Maps"), COMPACT_MAP_SEWER, 0); - tmpcomp->add_option(_("Divert sample"), COMPACT_SAMPLE, 3); - tmpcomp->add_failure(COMPFAIL_PUMP_EXPLODE); - tmpcomp->add_failure(COMPFAIL_PUMP_LEAK); -// Lower right... - line_furn(this, f_counter, 15, 23, 22, 23); - place_items("sewer", 65, 15, 23, 22, 23, false, 0); - line_furn(this, f_counter, 23, 15, 23, 19); - place_items("sewer", 65, 23, 15, 23, 19, false, 0); - } else { // Upper left is valuable finds, lower right is sampling -// Upper left... - line_furn(this, f_counter, 1, 1, 1, 7); - place_items("sewer", 65, 1, 1, 1, 7, false, 0); - line_furn(this, f_counter, 7, 1, 7, 7); - place_items("sewer", 65, 7, 1, 7, 7, false, 0); -// Lower right... - line(this, t_wall_v, 17, 22, 17, 23); - line(this, t_wall_v, 19, 22, 19, 23); - line(this, t_wall_v, 21, 22, 21, 23); - ter_set(18, 23, t_sewage_pump); - furn_set(18, 22, f_counter); - ter_set(20, 23, t_sewage_pump); - furn_set(20, 22, f_counter); - ter_set(16, 23, t_console); - tmpcomp = add_computer(16, 23, _("EnviroCom OS v2.03"), 0); - tmpcomp->add_option(_("Download Sewer Maps"), COMPACT_MAP_SEWER, 0); - tmpcomp->add_option(_("Divert sample"), COMPACT_SAMPLE, 3); - tmpcomp->add_failure(COMPFAIL_PUMP_EXPLODE); - tmpcomp->add_failure(COMPFAIL_PUMP_LEAK); - } - break; - - case ot_sewage_treatment_under: - fill_background(this, t_floor); - - if (t_north == ot_sewage_treatment_under || t_north == ot_sewage_treatment_hub || - (t_north >= ot_sewer_ns && t_north <= ot_sewer_nesw && - connects_to(t_north, 2))) { - if (t_north == ot_sewage_treatment_under || - t_north == ot_sewage_treatment_hub) { - line(this, t_wall_h, 0, 0, 23, 0); - ter_set(3, 0, t_door_c); - } - n_fac = 1; - square(this, t_sewage, 10, 0, 13, 13); - } - - if (t_east == ot_sewage_treatment_under || - t_east == ot_sewage_treatment_hub || - (t_east >= ot_sewer_ns && t_east <= ot_sewer_nesw && - connects_to(t_east, 3))) { - e_fac = 1; - square(this, t_sewage, 10, 10, 23, 13); - } - - if (t_south == ot_sewage_treatment_under || - t_south == ot_sewage_treatment_hub || - (t_south >= ot_sewer_ns && t_south <= ot_sewer_nesw && - connects_to(t_south, 0))) { - s_fac = 1; - square(this, t_sewage, 10, 10, 13, 23); - } - - if (t_west == ot_sewage_treatment_under || - t_west == ot_sewage_treatment_hub || - (t_west >= ot_sewer_ns && t_west <= ot_sewer_nesw && - connects_to(t_west, 1))) { - if (t_west == ot_sewage_treatment_under || - t_west == ot_sewage_treatment_hub) { - line(this, t_wall_v, 0, 1, 0, 23); - ter_set(0, 20, t_door_c); - } - w_fac = 1; - square(this, t_sewage, 0, 10, 13, 13); - } - break; - - case ot_mine_entrance: { - fill_background(this, &grass_or_dirt); - int tries = 0; - bool build_shaft = true; - do { - int x1 = rng(1, SEEX * 2 - 10), y1 = rng(1, SEEY * 2 - 10); - int x2 = x1 + rng(4, 9), y2 = y1 + rng(4, 9); - if (build_shaft) { - build_mine_room(this, room_mine_shaft, x1, y1, x2, y2); - build_shaft = false; - } else { - bool okay = true; - for (int x = x1 - 1; x <= x2 + 1 && okay; x++) { - for (int y = y1 - 1; y <= y2 + 1 && okay; y++) { - if (ter(x, y) != t_grass && ter(x, y) != t_dirt) - okay = false; - } - } - if (okay) { - room_type type = room_type( rng(room_mine_office, room_mine_housing) ); - build_mine_room(this, type, x1, y1, x2, y2); - tries = 0; - } else - tries++; - } - } while (tries < 5); - int ladderx = rng(0, SEEX * 2 - 1), laddery = rng(0, SEEY * 2 - 1); - while (ter(ladderx, laddery) != t_dirt && ter(ladderx, laddery) != t_grass) { - ladderx = rng(0, SEEX * 2 - 1); - laddery = rng(0, SEEY * 2 - 1); - } - ter_set(ladderx, laddery, t_manhole_cover); - - } break; - - case ot_mine_shaft: // Not intended to actually be inhabited! - fill_background(this, t_rock); - square(this, t_hole, SEEX - 3, SEEY - 3, SEEX + 2, SEEY + 2); - line(this, t_grate, SEEX - 3, SEEY - 4, SEEX + 2, SEEY - 4); - ter_set(SEEX - 3, SEEY - 5, t_ladder_up); - ter_set(SEEX + 2, SEEY - 5, t_ladder_down); - rotate(rng(0, 3)); - break; - - case ot_mine: - case ot_mine_down: - if (t_north >= ot_mine && t_north <= ot_mine_finale) - n_fac = (one_in(10) ? 0 : -2); - else - n_fac = 4; - if (t_east >= ot_mine && t_east <= ot_mine_finale) - e_fac = (one_in(10) ? 0 : -2); - else - e_fac = 4; - if (t_south >= ot_mine && t_south <= ot_mine_finale) - s_fac = (one_in(10) ? 0 : -2); - else - s_fac = 4; - if (t_west >= ot_mine && t_west <= ot_mine_finale) - w_fac = (one_in(10) ? 0 : -2); - else - w_fac = 4; - - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i >= w_fac + rng(0, 2) && i <= SEEX * 2 - 1 - e_fac - rng(0, 2) && - j >= n_fac + rng(0, 2) && j <= SEEY * 2 - 1 - s_fac - rng(0, 2) && - i + j >= 4 && (SEEX * 2 - i) + (SEEY * 2 - j) >= 6 ) - ter_set(i, j, t_rock_floor); - else - ter_set(i, j, t_rock); - } - } - - if (t_above == ot_mine_shaft) { // We need the entrance room - square(this, t_floor, 10, 10, 15, 15); - line(this, t_wall_h, 9, 9, 16, 9); - line(this, t_wall_h, 9, 16, 16, 16); - line(this, t_wall_v, 9, 10, 9, 15); - line(this, t_wall_v, 16, 10, 16, 15); - line(this, t_wall_h, 10, 11, 12, 11); - ter_set(10, 10, t_elevator_control); - ter_set(11, 10, t_elevator); - ter_set(10, 12, t_ladder_up); - line_furn(this, f_counter, 10, 15, 15, 15); - place_items("mine_equipment", 86, 10, 15, 15, 15, false, 0); - if (one_in(2)) - ter_set(9, 12, t_door_c); - else - ter_set(16, 12, t_door_c); - - } else { // Not an entrance; maybe some hazards! - switch( rng(0, 6) ) { - case 0: break; // Nothing! Lucky! - - case 1: { // Toxic gas - int cx = rng(9, 14), cy = rng(9, 14); - ter_set(cx, cy, t_rock); - add_field(g, cx, cy, fd_gas_vent, 1); - } break; - - case 2: { // Lava - int x1 = rng(6, SEEX), y1 = rng(6, SEEY), - x2 = rng(SEEX + 1, SEEX * 2 - 7), y2 = rng(SEEY + 1, SEEY * 2 - 7); - int num = rng(2, 4); - for (int i = 0; i < num; i++) { - int lx1 = x1 + rng(-1, 1), lx2 = x2 + rng(-1, 1), - ly1 = y1 + rng(-1, 1), ly2 = y2 + rng(-1, 1); - line(this, t_lava, lx1, ly1, lx2, ly2); - } - } break; - - case 3: { // Wrecked equipment - int x = rng(9, 14), y = rng(9, 14); - for (int i = x - 3; i < x + 3; i++) { - for (int j = y - 3; j < y + 3; j++) { - if (!one_in(4)) - ter_set(i, j, t_wreckage); - } - } - place_items("wreckage", 70, x - 3, y - 3, x + 2, y + 2, false, 0); - } break; - - case 4: { // Dead miners - int num_bodies = rng(4, 8); - for (int i = 0; i < num_bodies; i++) { - int tries = 0; - point body; - do { - body = point(-1, -1); - int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); - if (move_cost(x, y) == 2) - body = point(x, y); - else - tries++; - } while (body.x == -1 && tries < 10); - if (tries < 10) { - item miner; - miner.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(body.x, body.y, miner); - place_items("mine_equipment", 60, body.x, body.y, body.x, body.y, - false, 0); - } - } - } break; - - case 5: { // Dark worm! - int num_worms = rng(1, 5); - for (int i = 0; i < num_worms; i++) { - std::vector sides; - if (n_fac == 6) - sides.push_back(NORTH); - if (e_fac == 6) - sides.push_back(EAST); - if (s_fac == 6) - sides.push_back(SOUTH); - if (w_fac == 6) - sides.push_back(WEST); - if (sides.empty()) { - add_spawn("mon_dark_wyrm", 1, SEEX, SEEY); - i = num_worms; - } else { - direction side = sides[rng(0, sides.size() - 1)]; - point p; - switch (side) { - case NORTH: p = point(rng(1, SEEX * 2 - 2), rng(1, 5) );break; - case EAST: p = point(SEEX * 2 - rng(2, 6), rng(1, SEEY * 2 - 2));break; - case SOUTH: p = point(rng(1, SEEX * 2 - 2), SEEY * 2 - rng(2, 6));break; - case WEST: p = point(rng(1, 5) , rng(1, SEEY * 2 - 2));break; - default: break; - } - ter_set(p.x, p.y, t_rock_floor); - add_spawn("mon_dark_wyrm", 1, p.x, p.y); - } - } - } break; - - case 6: { // Spiral - int orx = rng(SEEX - 4, SEEX), ory = rng(SEEY - 4, SEEY); - line(this, t_rock, orx , ory , orx + 5, ory ); - line(this, t_rock, orx + 5, ory , orx + 5, ory + 5); - line(this, t_rock, orx + 1, ory + 5, orx + 5, ory + 5); - line(this, t_rock, orx + 1, ory + 2, orx + 1, ory + 4); - line(this, t_rock, orx + 1, ory + 2, orx + 3, ory + 2); - ter_set(orx + 3, ory + 3, t_rock); - item miner; - miner.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(orx + 2, ory + 3, miner); - place_items("mine_equipment", 60, orx + 2, ory + 3, orx + 2, ory + 3, - false, 0); - } break; - } - } - - if (terrain_type == ot_mine_down) { // Don't forget to build a slope down! - std::vector open; - if (n_fac == 4) - open.push_back(NORTH); - if (e_fac == 4) - open.push_back(EAST); - if (s_fac == 4) - open.push_back(SOUTH); - if (w_fac == 4) - open.push_back(WEST); - - if (open.empty()) { // We'll have to build it in the center - int tries = 0; - point p; - bool okay = true; - do { - p.x = rng(SEEX - 6, SEEX + 1); - p.y = rng(SEEY - 6, SEEY + 1); - okay = true; - for (int i = p.x; i <= p.x + 5 && okay; i++) { - for (int j = p.y; j <= p.y + 5 && okay; j++) { - if (ter(i, j) != t_rock_floor) - okay = false; - } - } - if (!okay) - tries++; - } while (!okay && tries < 10); - if (tries == 10) // Clear the area around the slope down - square(this, t_rock_floor, p.x, p.y, p.x + 5, p.y + 5); - square(this, t_slope_down, p.x + 1, p.y + 1, p.x + 2, p.y + 2); - - } else { // We can build against a wall - direction side = open[rng(0, open.size() - 1)]; - switch (side) { - case NORTH: - square(this, t_rock_floor, SEEX - 3, 6, SEEX + 2, SEEY); - line(this, t_slope_down, SEEX - 2, 6, SEEX + 1, 6); - break; - case EAST: - square(this, t_rock_floor, SEEX + 1, SEEY - 3, SEEX * 2 - 7, SEEY + 2); - line(this, t_slope_down, SEEX * 2 - 7, SEEY - 2, SEEX * 2 - 7, SEEY + 1); - break; - case SOUTH: - square(this, t_rock_floor, SEEX - 3, SEEY + 1, SEEX + 2, SEEY * 2 - 7); - line(this, t_slope_down, SEEX - 2, SEEY * 2 - 7, SEEX + 1, SEEY * 2 - 7); - break; - case WEST: - square(this, t_rock_floor, 6, SEEY - 3, SEEX, SEEY + 2); - line(this, t_slope_down, 6, SEEY - 2, 6, SEEY + 1); - break; - default: break; - } - } - } // Done building a slope down - - if (t_above == ot_mine_down) { // Don't forget to build a slope up! - std::vector open; - if (n_fac == 6 && ter(SEEX, 6) != t_slope_down) - open.push_back(NORTH); - if (e_fac == 6 && ter(SEEX * 2 - 7, SEEY) != t_slope_down) - open.push_back(EAST); - if (s_fac == 6 && ter(SEEX, SEEY * 2 - 7) != t_slope_down) - open.push_back(SOUTH); - if (w_fac == 6 && ter(6, SEEY) != t_slope_down) - open.push_back(WEST); - - if (open.empty()) { // We'll have to build it in the center - int tries = 0; - point p; - bool okay = true; - do { - p.x = rng(SEEX - 6, SEEX + 1); - p.y = rng(SEEY - 6, SEEY + 1); - okay = true; - for (int i = p.x; i <= p.x + 5 && okay; i++) { - for (int j = p.y; j <= p.y + 5 && okay; j++) { - if (ter(i, j) != t_rock_floor) - okay = false; - } - } - if (!okay) - tries++; - } while (!okay && tries < 10); - if (tries == 10) // Clear the area around the slope down - square(this, t_rock_floor, p.x, p.y, p.x + 5, p.y + 5); - square(this, t_slope_up, p.x + 1, p.y + 1, p.x + 2, p.y + 2); - - } else { // We can build against a wall - direction side = open[rng(0, open.size() - 1)]; - switch (side) { - case NORTH: - line(this, t_slope_up, SEEX - 2, 6, SEEX + 1, 6); - break; - case EAST: - line(this, t_slope_up, SEEX * 2 - 7, SEEY - 2, SEEX * 2 - 7, SEEY + 1); - break; - case SOUTH: - line(this, t_slope_up, SEEX - 2, SEEY * 2 - 7, SEEX + 1, SEEY * 2 - 7); - break; - case WEST: - line(this, t_slope_up, 6, SEEY - 2, 6, SEEY + 1); - break; - default: break; - } - } - } // Done building a slope up - break; - - case ot_mine_finale: { -// Set up the basic chamber - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i > rng(1, 3) && i < SEEX * 2 - rng(2, 4) && - j > rng(1, 3) && j < SEEY * 2 - rng(2, 4) ) - ter_set(i, j, t_rock_floor); - else - ter_set(i, j, t_rock); - } - } - std::vector face; // Which walls are solid, and can be a facing? -// Now draw the entrance(s) - if (t_north == ot_mine) - square(this, t_rock_floor, SEEX, 0, SEEX + 1, 3); - else - face.push_back(NORTH); - - if (t_east == ot_mine) - square(this, t_rock_floor, SEEX * 2 - 4, SEEY, SEEX * 2 - 1, SEEY + 1); - else - face.push_back(EAST); - - if (t_south == ot_mine) - square(this, t_rock_floor, SEEX, SEEY * 2 - 4, SEEX + 1, SEEY * 2 - 1); - else - face.push_back(SOUTH); - - if (t_west == ot_mine) - square(this, t_rock_floor, 0, SEEY, 3, SEEY + 1); - else - face.push_back(WEST); - -// Now, pick and generate a type of finale! - if (face.empty()) - rn = rng(1, 3); // Amigara fault is not valid - else - rn = rng(1, 4); - - switch (rn) { - case 1: { // Wyrms - int x = rng(SEEX, SEEX + 1), y = rng(SEEY, SEEY + 1); - ter_set(x, y, t_pedestal_wyrm); - spawn_item(x, y, "petrified_eye", 0); - } break; // That's it! game::examine handles the pedestal/wyrm spawns - - case 2: { // The Thing dog - item miner; - miner.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - int num_bodies = rng(4, 8); - for (int i = 0; i < num_bodies; i++) { - int x = rng(4, SEEX * 2 - 5), y = rng(4, SEEX * 2 - 5); - add_item(x, y, miner); - place_items("mine_equipment", 60, x, y, x, y, false, 0); - } - add_spawn("mon_dog_thing", 1, rng(SEEX, SEEX + 1), rng(SEEX, SEEX + 1), true); - spawn_artifact(rng(SEEX, SEEX + 1), rng(SEEY, SEEY + 1), g->new_artifact(), 0); - } break; - - case 3: { // Spiral down - line(this, t_rock, 5, 5, 5, 18); - line(this, t_rock, 5, 5, 18, 5); - line(this, t_rock, 18, 5, 18, 18); - line(this, t_rock, 8, 18, 18, 18); - line(this, t_rock, 8, 8, 8, 18); - line(this, t_rock, 8, 8, 15, 8); - line(this, t_rock, 15, 8, 15, 15); - line(this, t_rock, 10, 15, 15, 15); - line(this, t_rock, 10, 10, 10, 15); - line(this, t_rock, 10, 10, 13, 10); - line(this, t_rock, 13, 10, 13, 13); - ter_set(12, 13, t_rock); - ter_set(12, 12, t_slope_down); - ter_set(12, 11, t_slope_down); - } break; - - case 4: { // Amigara fault - direction fault = face[rng(0, face.size() - 1)]; -// Construct the fault on the appropriate face - switch (fault) { - case NORTH: - square(this, t_rock, 0, 0, SEEX * 2 - 1, 4); - line(this, t_fault, 4, 4, SEEX * 2 - 5, 4); - break; - case EAST: - square(this, t_rock, SEEX * 2 - 5, 0, SEEY * 2 - 1, SEEX * 2 - 1); - line(this, t_fault, SEEX * 2 - 5, 4, SEEX * 2 - 5, SEEY * 2 - 5); - break; - case SOUTH: - square(this, t_rock, 0, SEEY * 2 - 5, SEEX * 2 - 1, SEEY * 2 - 1); - line(this, t_fault, 4, SEEY * 2 - 5, SEEX * 2 - 5, SEEY * 2 - 5); - break; - case WEST: - square(this, t_rock, 0, 0, 4, SEEY * 2 - 1); - line(this, t_fault, 4, 4, 4, SEEY * 2 - 5); - break; - default: break; - } - - ter_set(SEEX, SEEY, t_console); - tmpcomp = add_computer(SEEX, SEEY, _("NEPowerOS"), 0); - tmpcomp->add_option(_("Read Logs"), COMPACT_AMIGARA_LOG, 0); - tmpcomp->add_option(_("Initiate Tremors"), COMPACT_AMIGARA_START, 4); - tmpcomp->add_failure(COMPFAIL_AMIGARA); - } break; - } - } break; - - case ot_spiral_hub: - fill_background(this, t_rock_floor); - line(this, t_rock, 23, 0, 23, 23); - line(this, t_rock, 2, 23, 23, 23); - line(this, t_rock, 2, 4, 2, 23); - line(this, t_rock, 2, 4, 18, 4); - line(this, t_rock, 18, 4, 18, 18); // bad - line(this, t_rock, 6, 18, 18, 18); - line(this, t_rock, 6, 7, 6, 18); - line(this, t_rock, 6, 7, 15, 7); - line(this, t_rock, 15, 7, 15, 15); - line(this, t_rock, 8, 15, 15, 15); - line(this, t_rock, 8, 9, 8, 15); - line(this, t_rock, 8, 9, 13, 9); - line(this, t_rock, 13, 9, 13, 13); - line(this, t_rock, 10, 13, 13, 13); - line(this, t_rock, 10, 11, 10, 13); - square(this, t_slope_up, 11, 11, 12, 12); - rotate(rng(0, 3)); - break; - - case ot_spiral: { - fill_background(this, t_rock_floor); - const int num_spiral = rng(1, 4); - std::list offsets; - const int spiral_width = 8; - // Divide the room into quadrants, and place a spiral origin - // at a random offset within each quadrant. - for( int x = 0; x < 2; ++x ) { - for( int y = 0; y < 2; ++y ) { - const int x_jitter = rng(0, SEEX - spiral_width); - const int y_jitter = rng(0, SEEY - spiral_width); - offsets.push_back( point((x * SEEX) + x_jitter, - (y * SEEY) + y_jitter) ); - } - } - - // Randomly place from 1 - 4 of the spirals at the chosen offsets. - for (int i = 0; i < num_spiral; i++) { - std::list::iterator chosen_point = offsets.begin(); - std::advance( chosen_point, rng(0, offsets.size() - 1) ); - const int orx = chosen_point->x; - const int ory = chosen_point->y; - offsets.erase( chosen_point ); - - line(this, t_rock, orx , ory , orx + 5, ory ); - line(this, t_rock, orx + 5, ory , orx + 5, ory + 5); - line(this, t_rock, orx + 1, ory + 5, orx + 5, ory + 5); - line(this, t_rock, orx + 1, ory + 2, orx + 1, ory + 4); - line(this, t_rock, orx + 1, ory + 2, orx + 3, ory + 2); - ter_set(orx + 3, ory + 3, t_rock); - ter_set(orx + 2, ory + 3, t_rock_floor); - place_items("spiral", 60, orx + 2, ory + 3, orx + 2, ory + 3, false, 0); - } - } break; - - case ot_radio_tower: - fill_background(this, &grass_or_dirt); - lw = rng(1, SEEX * 2 - 2); - tw = rng(1, SEEY * 2 - 2); - for (int i = lw; i < lw + 4; i++) { - for (int j = tw; j < tw + 4; j++) - ter_set(i, j, t_radio_tower); - } - rw = -1; - bw = -1; - if (lw <= 4) - rw = rng(lw + 5, 10); - else if (lw >= 16) - rw = rng(3, lw - 13); - if (tw <= 3) - bw = rng(tw + 5, 10); - else if (tw >= 16) - bw = rng(3, tw - 7); - if (rw != -1 && bw != -1) { - for (int i = rw; i < rw + 12; i++) { - for (int j = bw; j < bw + 6; j++) { - if (j == bw || j == bw + 5) - ter_set(i, j, t_wall_h); - else if (i == rw || i == rw + 11) - ter_set(i, j, t_wall_v); - else if (j == bw + 1) - set(i, j, t_floor, f_counter); - else - ter_set(i, j, t_floor); - } - } - cw = rng(rw + 2, rw + 8); - ter_set(cw, bw + 5, t_window); - ter_set(cw + 1, bw + 5, t_window); - ter_set(rng(rw + 2, rw + 8), bw + 5, t_door_c); - ter_set(rng(rw + 2, rw + 8), bw + 1, t_radio_controls); - place_items("radio", 60, rw + 1, bw + 2, rw + 10, bw + 4, true, 0); - } else // No control room... simple controls near the tower - ter_set(rng(lw, lw + 3), tw + 4, t_radio_controls); - break; - - case ot_station_radio_north: - case ot_station_radio_east: - case ot_station_radio_south: - case ot_station_radio_west: { -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); -//Eventually the northern shed will house the main breaker or generator that must be activated prior to transmitting. - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - FffffffffffffF \n\ - F____________F \n\ - |----|______&&&&__F \n\ - |....=______&&&&__F \n\ - |x.ll|______&&&&__F \n\ - |----|______&&&&__F \n\ - F____________F \n\ - |--------|__________G \n\ - |tS|eSc.r|__________F \n\ - w..+.....=__________F \n\ - |-----|..|----------| \n\ - |..doo|..|..dW..h...| \n\ - w..h..|..D.hxW.c6c..| \n\ - |a....|..|...+......| \n\ - |--+--|..|-----WWW--| \n\ - |.+.................| \n\ - |l|..............ch.| \n\ - |-|+--|--+--|....c..| \n\ - |o....|....o|--==-w-| \n\ - |o.d..|..d.o| ss \n\ - |o.h..|..h..| ss \n\ - |-www-|-www-| ss \n\ - ss \n", - mapf::basic_bind(". - | 6 a r + = D W w t S e o h c d x l F f _ & G s", t_floor, t_wall_h, t_wall_v, t_console, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_window_alarm, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_console_broken, t_floor, t_chainfence_v, t_chainfence_h, t_pavement, t_radio_tower, t_chaingate_l, t_sidewalk), - mapf::basic_bind(". - | 6 a r + = D W w t S e o h c d x l F f _ & G s", f_null, f_null, f_null, f_null, f_armchair, f_trashcan, f_null, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_null, f_locker, f_null, f_null, f_null, f_null, f_null, f_null)); - tmpcomp = add_computer(17, 13, _("Broadcasting Control"), 0); - tmpcomp->add_option(_("ERROR: SIGNAL DISCONNECT"), COMPACT_TOWER_UNRESPONSIVE, 0); - spawn_item(18, 13, "record_weather", 0); - place_items("novels", 70, 5, 12, 6, 12, false, 0); - place_items("novels", 70, 2, 21, 2, 19, false, 0); - place_items("novels", 70, 12, 19, 12, 20, false, 0); - place_items("fridge", 70, 5, 9, 7, 9, false, 0); - place_items("fridge", 20, 5, 9, 7, 9, false, 0); - place_items("fridge", 10, 5, 9, 7, 9, false, 0); - place_items("cleaning", 70, 2, 16, 2, 17, false, 0); - place_items("electronics", 80, 6, 5, 7, 5, false, 0); - if (terrain_type == ot_station_radio_east) - rotate(3); - if (terrain_type == ot_station_radio_north) - rotate(2); - if (terrain_type == ot_station_radio_west) - rotate(1); - - } break; - -case ot_public_works_entrance:{ - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - f ____________________\n\ - f ____________________\n\ - f ___________ sssss\n\ - f ___________ sssss\n\ - f ___________ |--D---\n\ - f ___________ |....|.\n\ - f ___________ |....|.\n\ - f ___________ |lttl|.\n\ - fFFF_________FFF|----|.\n\ - ___________ss|..h.|.\n\ - ___________xs|....+.\n\ - ___________sswddd.|.\n\ - ___________ssw.hd.|.\n\ - ___________ss|l...|.\n\ - ___________ss|-ww-|-\n\ - ___________sssssssss\n\ - ____________,_____,_\n\ - ____________,_____,_\n\ - ____________,_____,_\n\ - ____________,_____,_\n\ - ____________________\n\ - ____________________\n\ - ____________________\n\ - ____________________\n", - mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_floor, t_floor, t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_pool_table, f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("bigtools", 80, 18, 7, 21, 7, false, 0); - place_items("office", 80, 18, 11, 20, 11, false, 0); - place_items("office", 60, 18, 13, 18, 13, false, 0); - place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.2); - if (t_north == ot_public_works && t_west == ot_public_works) - rotate(3); - else if (t_north == ot_public_works && t_east == ot_public_works) - rotate(0); - else if (t_south == ot_public_works && t_east == ot_public_works) - rotate(1); - else if (t_west == ot_public_works && t_south == ot_public_works) - rotate(2); -}break; - -case ot_public_works:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - if ((t_south == ot_public_works_entrance && t_east == ot_public_works) || (t_north == ot_public_works && t_east == ot_public_works_entrance) || (t_west == ot_public_works && t_north == ot_public_works_entrance) || - (t_south == ot_public_works && t_west == ot_public_works_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |---------------|FFFFFF\n\ - |....rrrrrrrr...| \n\ - |r..............| _____\n\ - |r..............| _____\n\ - |r..............| _____\n\ - |r..............| _____\n\ - |r..............| _____\n\ - |r..............| _____\n\ - |...............| _____\n\ - |--___________--| _____\n\ - f ___________ _____\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n\ - f ____________________\n", - mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_floor, t_floor, t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_pool_table, f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("hardware", 85, 2, 3, 2, 8, false, 0); - place_items("hardware", 85, 6, 2, 13, 2, false, 0); - spawn_item(21, 2, "log", 0, rng(1, 3)); - spawn_item(15, 2, "pipe", 0, rng(1, 10)); - spawn_item(4, 2, "glass_sheet", 0, rng(1, 7)); - spawn_item(16, 5, "2x4", 0, rng(1, 20)); - spawn_item(16, 7, "2x4", 0, rng(1, 20)); - spawn_item(12, 2, "nail", 0); - spawn_item(13, 2, "nail", 0); - place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1); - if (t_west == ot_public_works_entrance) - rotate(1); - if (t_north == ot_public_works_entrance) - rotate(2); - if (t_east == ot_public_works_entrance) - rotate(3); - } - - else if ((t_west == ot_public_works_entrance && t_north == ot_public_works) || (t_north == ot_public_works_entrance && t_east == ot_public_works) || (t_west == ot_public_works && t_south == ot_public_works_entrance) || - (t_south == ot_public_works && t_east == ot_public_works_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -__________ f \n\ -__________ f \n\ -ss f \n\ -ss f \n\ -+----ww-ww-ww-ww--|GFf \n\ -.^|..htth.........| \n\ -..+..........PPP..w \n\ -..|..........PPP..w \n\ -..|ccecoS........^| \n\ -..|---------------| \n\ -...llllllll|cScScS| \n\ -...........|......| \n\ -...........+......| \n\ -.htth......|..|+|+| \n\ ---ww---|...|.T|T|T| \n\ -sssssss|...|--|-|-| \n\ -____sss|.........l| \n\ -____sss+...c......w \n\ -____sss+...ch...hdw \n\ -____sss|^..c...ddd| \n\ -____sss|-www--www-| \n\ -____sss \n\ -____sss \n\ -____sss \n", - mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_floor, t_floor, t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_pool_table, f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("fridge", 80, 5, 8, 5, 8, false, 0); - place_items("pool_table", 80, 13, 6, 15, 7, false, 0); - place_items("construction_worker", 90, 3, 10, 10, 10, false, 0); - place_items("office", 80, 15, 19, 17, 19, false, 0); - place_items("cleaning", 80, 17, 16, 17, 16, false, 0); - place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.3); - if (t_north == ot_public_works_entrance) - rotate(1); - if (t_east == ot_public_works_entrance) - rotate(2); - if (t_south == ot_public_works_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ -FFFFFFFFF|------------| \n\ - |..ll..rrr...| \n\ -__________............| \n\ -__________...........c| \n\ -__________...........c| \n\ -__________...........l| \n\ -__________...........l| \n\ -________ |............| \n\ -________ |..O.clc.O...| \n\ -________ |............| \n\ -__________............| \n\ -__________...........c| \n\ -__________...........c| \n\ -__________...........l| \n\ -__________...........l| \n\ -________ |......rr....| \n\ -________ |---+--------| \n\ -________ |..rrrr| f \n\ -__________s+......w f \n\ -__________ |r....r| f \n\ -__________ |r....r| f \n\ -__________ |--ww--| f \n\ -__________ f \n", - mapf::basic_bind("O P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_column, t_floor, t_floor, t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("O P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_null, f_pool_table, f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("tools", 85, 14, 18, 17, 18, false, 0); - place_items("tools", 85, 17, 20, 17, 21, false, 0); - place_items("tools", 85, 12, 20, 12, 21, false, 0); - place_items("mechanics", 85, 21, 12, 21, 15, false, 0); - place_items("mechanics", 85, 21, 4, 21, 7, false, 0); - place_items("mechanics", 85, 14, 9, 16, 9, false, 0); - place_items("electronics", 80, 16, 2, 18, 2, false, 0); - place_items("cleaning", 85, 12, 2, 13, 2, false, 0); - spawn_item(3, 2, "log", 0, rng(1, 3)); - place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1); - if (t_west == ot_public_works && t_north == ot_public_works){ - rotate(1); - if (x_in_y(2,3)){add_vehicle (g, "flatbed_truck", 2, 0, 90);} - } - else if (t_east == ot_public_works && t_north == ot_public_works){ - rotate(2); - if (x_in_y(2,3)){add_vehicle (g, "flatbed_truck", 23, 10, 270);} - } - else if (t_east == ot_public_works && t_south == ot_public_works){ - rotate(3); - if (x_in_y(2,3)){add_vehicle (g, "flatbed_truck", 10, 23, 0);} - } - else{ - if (x_in_y(2,3)){add_vehicle (g, "flatbed_truck", 0, 10, 90);} - } - } - }break; - - case ot_school_1: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - ||-------|--++----++--|\n\ - |....................|\n\ - |....................|\n\ - |..hhhhhhh..hhhhhhh..|\n\ - |....................|\n\ - |..hhhhhhh..hhhhhhh..|\n\ - |....................|\n\ - |..hhhhhhh..hhhhhhh..|\n\ - |....................|\n\ - |..hhhhhhh..hhhhhhh..|\n\ - |....................|\n\ -ss+..hhhhhhh..hhhhhhh..+\n\ -ss+....................+\n\ -ss|..hhhhhhh..hhhhhhh..|\n\ -ss|....................|\n\ -ss|---..............---|\n\ -ss|....................|\n\ -ss|..----------------..|\n\ -ss+....................|\n\ -ss|....................|\n\ -ss|--------------------|\n\ -ss \n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(20, 60), SEEX, SEEY); - if (t_north == ot_school_2) - rotate(3); - else if (t_east == ot_school_2) - rotate(0); - else if (t_south == ot_school_2) - rotate(1); - else if (t_west == ot_school_2) - rotate(2); - }break; - - case ot_school_2: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -........l|...|.h..x..w \n\ -l.......l|-+-|.h..dh.w \n\ -l.......l|...+....c..w \n\ -l.......l|...|.......| \n\ -l.......l|h..|-------|$ \n\ -l.......l|h..|.......| \n\ -l.......l|h..+....d..w \n\ -l.......l|h..|.h..dh.w \n\ -l.......l|...|....d..| \n\ -l.......l|...|------|| \n\ -.........|....#####.|$ \n\ -.........+..........+sss\n\ -.........+..........+sss\n\ -.........|ccccccc...|$ \n\ --w-+++-w-|..........w$ \n\ - sss |dd..tt.dddw$ \n\ - $sss$ |dh..tt..hdw$ \n\ - sss |d........^|$ \n\ - $sss$ |-www--www-|$ \n\ - sss $$$$$$$$$$$$ \n\ - $sss$ \n\ - sss \n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(5, 20), SEEX, SEEY); - add_spawn("mon_zombie", rng(0, 8), SEEX, SEEY); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("office", 50, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("school", 60, i, j, i, j, false, 0); - } - } - if (t_north == ot_school_5) - rotate(0); - else if (t_east == ot_school_5) - rotate(1); - else if (t_south == ot_school_5) - rotate(2); - else if (t_west == ot_school_5) - rotate(3); - }break; - - case ot_school_3: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -ssssssssssssssssssssssss\n\ -ssLLLLLLL_______LLLLLLLs\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ssLLLLLLL_______LLLLLLLs\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ssLLLLLLL_______LLLLLLLs\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ssLLLLLLL_______LLLLLLLs\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ssLLLLLLL_______LLLLLLLs\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ss_____________________s\n\ -ssLLLLLLL_______LLLLLLLs\n\ -ss$$ $$_______$$ $$s\n\ -sssssssss_______ssssssss\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 8), SEEX, SEEY); - if (t_north == ot_school_2){ - rotate(1); - if (x_in_y(1,7)){add_vehicle (g, "schoolbus", 19, 10, 0);}} - else if (t_east == ot_school_2){ - rotate(2); - if (x_in_y(1,7)){add_vehicle (g, "schoolbus", 9, 7, 0);}} - else if (t_south == ot_school_2){ - rotate(3); - if (x_in_y(1,7)){add_vehicle (g, "schoolbus", 12, 18, 180);}} - else if (t_west == ot_school_2){ - rotate(0); - if (x_in_y(1,7)){add_vehicle (g, "schoolbus", 17, 7, 0);}} - }break; - - case ot_school_4: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - w..ddd...+....|.d.d.d.d\n\ - w........|....|........\n\ - w........|....|........\n\ - wd.d.d.d.|....+..ddd...\n\ - |h.h.h.h.|....|..dh...l\n\ - |d.d.d.d.|....|--------\n\ - wh.h.h.h.|....|..ttt..l\n\ - wd.d.d.d.|....+........\n\ - wh.h.h.h.|....|.h.h.h.h\n\ - w........+....|.d.d.d.d\n\ - |l..ttt..|....|.h.h.h.h\n\ - |--------|....|.d.d.d.d\n\ - |l..hd...|....|.h.h.h.h\n\ - w..ddd...+....|.d.d.d.d\n\ - w........|....|........\n\ - w........|....|........\n\ - wd.d.d.d.|....+..ddd...\n\ - |h.h.h.h.|....|..dh...l\n\ - |d.d.d.d.|....|--------\n\ - wh.h.h.h.|.............\n\ - wd.d.d.d.|.............\n\ - wh.h.h.h.|....^ccc^ccc^\n\ - w........+.............\n\ - |l..ttt..|.............\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); - add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("school", 50, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("school", 60, i, j, i, j, false, 0); - } - } - if (t_north == ot_school_5) - rotate(3); - else if (t_east == ot_school_5) - rotate(0); - else if (t_south == ot_school_5) - rotate(1); - else if (t_west == ot_school_5) - rotate(2); - }break; - - case ot_school_5: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -|.oooooooo...o.o.o.o.|--\n\ -|............o.o.o.o.|.T\n\ -|.oooooooo...o.o.o.o.|.S\n\ -|............o.o.o.o.|+-\n\ -|.oooooooo..............\n\ -|.......................\n\ -|--------|o....o.o.o.|+-\n\ -|ch......|o....o.o.o.|.S\n\ -|cxc.....|o....o.o.o.|.T\n\ -|xxx..xxx|o..........|--\n\ -|hhh..hhh|.........ooooo\n\ -|........|.htth.........\n\ -|xxx..xxx|.htth.........\n\ -|hhh..hhh|........ccc.cc\n\ -|........|.htth...c....t\n\ -|ww-++-ww|.htth...ch....\n\ -|........|........c...hd\n\ -|........|........c..ddd\n\ -|........|-----++-------\n\ -........................\n\ -........................\n\ -........................\n\ -.........|---|-------|--\n\ -........l|l.l|^...ccl|$ \n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 15), SEEX, SEEY); - add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("school", 50, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("school", 60, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_bookcase){ - place_items("novels", 50, i, j, i, j, false, 0); - place_items("manuals", 40, i, j, i, j, false, 0); - place_items("textbooks", 30, i, j, i, j, false, 0); - } - } - } - if (t_north == ot_school_2) - rotate(2); - else if (t_east == ot_school_2) - rotate(3); - else if (t_south == ot_school_2) - rotate(0); - else if (t_west == ot_school_2) - rotate(1); - }break; - - case ot_school_6: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -|d.d.d.d.|....|.d.d.d.dw\n\ -|........|....|.h.h.h.hw\n\ -|........|....|.d.d.d.d|\n\ -|..ddd...+....|.h.h.h.h|\n\ -|l..hd...|....|.d.d.d.dw\n\ -|--------|....|........w\n\ -|l..hd...|....|........w\n\ -|..ddd...+....+..ddd...w\n\ -|........|....|..dh...l|\n\ -|........|....|--------|\n\ -|d.d.d.d.|....|..ttt..l|\n\ -|h.h.h.h.|....+........w\n\ -|d.d.d.d.|....|.h.h.h.hw\n\ -|h.h.h.h.|....|.d.d.d.dw\n\ -|d.d.d.d.|....|.h.h.h.hw\n\ -|h.h.h.h.|....|.d.d.d.d|\n\ -|........+....|.h.h.h.h|\n\ -|l..ttt..|....|.d.d.d.dw\n\ -|--------|....|........w\n\ -..............|........w\n\ -..............+..ddd...w\n\ -..............|..dh...l|\n\ ------------++-|--------|\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); - add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("school", 50, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("school", 60, i, j, i, j, false, 0); - } - } - if (t_north == ot_school_5) - rotate(1); - else if (t_east == ot_school_5) - rotate(2); - else if (t_south == ot_school_5) - rotate(3); - else if (t_west == ot_school_5) - rotate(0); - }break; - - case ot_school_7: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - |--------| |--wwww--\n\ - |l..ll..l|-++-|ccccccll\n\ - |l..ll..l|....+........\n\ - |l..ll...+....|Scc..ccS\n\ - |l......l|....|........\n\ - |-+------|....|Scc..ccS\n\ - |...hd.oo|....|........\n\ - w..ddd...+....|Scc..ccS\n\ - w........|....|........\n\ - w........|....|........\n\ - wScc..ccS|....+..ddd...\n\ - |........|....|..dh..ll\n\ - |Scc..ccS|....|--------\n\ - w........|....+........\n\ - wScc..ccS|....|....|+|+\n\ - w........|....|SSS.|T|T\n\ - w........+....|----|-|-\n\ - |l.ttt.ll|....|..ttt..l\n\ - |--------|....+........\n\ - |........+....|.h.h.h.h\n\ - |+|+|....|....|.d.d.d.d\n\ - |T|T|.SSS|....|.h.h.h.h\n\ - |-|-|----|....|.d.d.d.d\n\ - |l..hd...|....|.h.h.h.h\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); - add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("school", 50, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("chemistry", 60, i, j, i, j, false, 0); - } - } - if (t_north == ot_school_8) - rotate(3); - else if (t_east == ot_school_8) - rotate(0); - else if (t_south == ot_school_8) - rotate(1); - else if (t_west == ot_school_8) - rotate(2); - } break; - - case ot_school_8: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -| |-\n\ -|ffffffffffGffffffffff|.\n\ -w sss w.\n\ -w $$ sss $$ w.\n\ -w $$ sss $$ w.\n\ -w sss |.\n\ -| ssssssssssss+.\n\ -w sss |.\n\ -w $$ sss $$ w.\n\ -w $$ sss $$ w.\n\ -w $$ sss $$ w.\n\ -| $$ sss $$ |.\n\ -| $$ sssss $$ |-\n\ -| $$ sssssss $$ \n\ -| $$ sssssss $$ \n\ -| $$ sssOsss $$ \n\ -| $$ sssssss $$ \n\ -| $$ sssss $$ \n\ -w $$ $$ \n\ -w \n\ -w \n\ -| \n\ -|-www-wwww--wwww-www----\n\ -|....................+.l\n", - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 4), SEEX, SEEY); - add_spawn("mon_zombie", rng(0, 1), SEEX, SEEY); - place_items("cleaning", 80, 22, 23, 23, 23, false, 0); - spawn_item(12, 15, "american_flag", 0); - if (t_north == ot_school_5) - rotate(2); - else if (t_east == ot_school_5) - rotate(3); - else if (t_south == ot_school_5) - rotate(0); - else if (t_west == ot_school_5) - rotate(1); - } break; - - case ot_school_9: { - mapf::formatted_set_simple(this, 0, 0, -"\ -wwww--wwww--wwww--wwww-|\n\ -........htth.htth.htth.|\n\ -.hhhhh..htth.htth.htth.w\n\ -.ttttt..htth.htth.htth.w\n\ -.ttttt..htth...........w\n\ -.hhhhh.................w\n\ -..............ccccccc..|\n\ -.hhhhh........c........|\n\ -.ttttt.....c..c.....eee|\n\ -.ttttt...xhc..|--..----|\n\ -.hhhhh..cccc..|c......ew\n\ -..............|O..tt..cw\n\ -|--------|-++-|O..tt..cw\n\ -|........+....|O......cw\n\ -|+|+|....|....|-|--...e|\n\ -|T|T|.SSS|....+l|r+....+\n\ -|-|-|----|....|-|------|\n\ -|ll.ttt..|....+........|\n\ -w........+....|....|+|+|\n\ -wh.h.h.h.|....|SSS.|T|T|\n\ -wd.d.d.d.|....|----|-|-|\n\ -|h.h.h.h.|....|..ttt..l|\n\ -|d.d.d.d.|....+........w\n\ -|h.h.h.h.|....|.h.h.h.hw\n", - mapf::basic_bind("e r _ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_floor, t_floor, t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("e r _ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_fridge, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); - add_spawn("mon_zombie", rng(3, 10), SEEX, SEEY); - place_items("cleaning", 80, 15, 15, 15, 15, false, 0); - place_items("cannedfood", 95, 17, 15, 17, 15, false, 0); - place_items("fast_food", 95, 18, 11, 19, 12, false, 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_desk) - place_items("school", 50, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_locker) - place_items("school", 60, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_fridge) - place_items("fridge", 90, i, j, i, j, false, 0); - } - } - if (t_north == ot_school_8) - rotate(1); - else if (t_east == ot_school_8) - rotate(2); - else if (t_south == ot_school_8) - rotate(3); - else if (t_west == ot_school_8) - rotate(0); - } break; - - case ot_prison_1: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - % F |T,,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |----|------|--\n\ - % F \n\ - % F \n\ - % |--| \n\ - % |,,| \n\ - % |,,|fffffffffffffffff\n\ - % |--| \n\ - % \n\ - %%%%%%%%%%%%%%%%%%%%%%%\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - } - } - if (t_north == ot_prison_2) - rotate(3); - else if (t_east == ot_prison_2) - rotate(0); - else if (t_south == ot_prison_2) - rotate(1); - else if (t_west == ot_prison_2) - rotate(2); - }break; - - case ot_prison_2: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -,T|s________________s|T,\n\ ---|s________________s|--\n\ -bb|s________________s|bb\n\ -,,|s________________s|,,\n\ -,T|s________________s|T,\n\ ---|s________________s|--\n\ -bb|s________________s|bb\n\ -,,|ss______________ss|,,\n\ -,T| ss____________ss |T,\n\ ---| ss__________ss |--\n\ - ss________ss \n\ - ss______ss \n\ - ss______ss \n\ - ss______ss \n\ -fffffffffHHHHHHfffffffff\n\ - ______ \n\ - ______ \n\ -%%%%%%%%%______%%%%%%%%%\n\ - ______ \n\ - |-+w|FFFFFF \n\ - w,h,w______ \n\ - wdxdw______ \n\ - |www|______ \n\ - ______ \n", - mapf::basic_bind("H # E g r + = h c l w s _ o d x T b G , B - | % f F S", t_chaingate_l, t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("H # E g r + = h c l w s _ o d x T b G , B - | % f F S", f_null, f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - } - } - add_spawn("mon_eyebot", 1, rng(5,18), rng(12,18)); - if (t_north == ot_prison_5) - rotate(0); - else if (t_east == ot_prison_5) - rotate(1); - else if (t_south == ot_prison_5) - rotate(2); - else if (t_west == ot_prison_5) - rotate(3); - }break; - - case ot_prison_3: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -,,B,,,,,,B,,,T| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,,T| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,bb| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,,T| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,bb| F % \n\ ---|------|----| F % \n\ - F % \n\ - F % \n\ - |--| % \n\ - |,,| % \n\ -fffffffffffffffff|,,| % \n\ - |--| % \n\ - % \n\ -%%%%%%%%%%%%%%%%%%%%%%% \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - } - } - if (t_north == ot_prison_2){ - rotate(1);} - else if (t_east == ot_prison_2){ - rotate(2);} - else if (t_south == ot_prison_2){ - rotate(3);} - else if (t_west == ot_prison_2){ - rotate(0);} - }break; - - case ot_prison_4: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - % F |----|,,,,,,|--\n\ - % F |bb,,B,,,,,,|,,\n\ - % F |,,,,G,,,,,,|,,\n\ - % F |T,,,B,,,,,,|,,\n\ - % F |-|-|--|BBGGBB|-+\n\ - % F |,,dB,,,,,,,,,,,,\n\ - % F |,hdB,,,,,,,,,,,,\n\ - % F |,,dB,,,,,,,,,,,,\n\ - % F |,,,G,,,,,,,,,,,,\n\ - % F |-|-|--|BBGGBB|--\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - if (this->furn(i,j) == f_desk){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("office", 30, i, j, i, j, false, 0); - } - } - } - if (t_north == ot_prison_5) - rotate(3); - else if (t_east == ot_prison_5) - rotate(0); - else if (t_south == ot_prison_5) - rotate(1); - else if (t_west == ot_prison_5) - rotate(2); - }break; - - case ot_prison_5: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ ---|o,,,,|------|,,,,,|--\n\ -,<|o,,,,G,,rr,cB,,,,,|<,\n\ -,,|--+--|,,,,,cBBGGBB|,,\n\ -,,|,,,,,Bc,,h,cB,,,,,|,,\n\ -+-|,,,,,BcccxccB,,,,,|-+\n\ -,,B,,,,,BBBBBBBB,,,,,B,,\n\ -,,G,,,,,,,,,,,,,,,,,,G,,\n\ -,,G,,,,,,,,,,,,,,,,,,G,,\n\ -,,B,,,,,,,,,,,,,,,,,,B,,\n\ ---|--|-|BBBGGBBB|-+--|--\n\ -bb|TS|l|,,,,,,,,|,,,,|bb\n\ -,,|,,|=|---++--||,,,,|,,\n\ -,T|,,=,,,,,,,,#|,,,,,|T,\n\ ---|--|-+|,,,,,#|h|h|h|--\n\ -bb|,,,,,|#,,,,#|g|g|g|bb\n\ -,,|,,,,,|#,,,,#|h|h|h|,,\n\ -,T|,ddd,|#,,,,,|,,,,,|T,\n\ ---|,,h,,|#,,,,,=,,,,,|--\n\ -bb|,,,,,|,,,,,,|,,,,,|bb\n\ -,,|-ggg-|gg++gg|-ggg-|,,\n\ -,T| ssssssssssss |T,\n\ ---| ss__________ss |--\n\ -bb| ss____________ss |bb\n\ -,,|ss______________ss|,,\n", - mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", t_stairs_down, t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", f_null, f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - add_spawn("mon_secubot", rng(1, 2), 11, 7); - add_spawn("mon_zombie_cop", rng(0, 3), rng(12,18), rng(4,19)); - place_items("pistols", 30, 11, 1, 12, 1, false, 0); - place_items("ammo", 50, 11, 1, 12, 1, false, 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - if (this->furn(i,j) == f_desk){ - place_items("magazines", 40, i, j, i, j, false, 0); - place_items("office", 40, i, j, i, j, false, 0); - } - } - } - if (t_north == ot_prison_2) - rotate(2); - else if (t_east == ot_prison_2) - rotate(3); - else if (t_south == ot_prison_2) - rotate(0); - else if (t_west == ot_prison_2) - rotate(1); - }break; - - case ot_prison_6: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ ---|,,,,,,|----| F % \n\ -,,|,,,,,,B,,bb| F % \n\ -,,|,,,,,,G,,,,| F % \n\ -,,|,,,,,,B,,,T| F % \n\ -+-|BBGGBB|--|-|-| F % \n\ -,,,,,,,,,,,,Bd,,| F % \n\ -,,,,,,,,,,,,Bdh,| F % \n\ -,,,,,,,,,,,,Bd,,| F % \n\ -,,,,,,,,,,,,G,,,| F % \n\ ---|BBGGBB|--|-|-| F % \n\ -,,B,,,,,,B,,,T| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,bb| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,,T| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,bb| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,,T| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,bb| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,,T| F % \n\ -,,G,,,,,,G,,,,| F % \n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - if (this->furn(i,j) == f_desk){ - place_items("magazines", 30, i, j, i, j, false, 0); - place_items("office", 30, i, j, i, j, false, 0); - } - } - } - if (t_north == ot_prison_5) - rotate(1); - else if (t_east == ot_prison_5) - rotate(2); - else if (t_south == ot_prison_5) - rotate(3); - else if (t_west == ot_prison_5) - rotate(0); - }break; - - case ot_prison_7: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - %%%%%%%%%%%%%%%%%%%%%%%\n\ - % \n\ - % |--| \n\ - % |,,|fffffffffffffffff\n\ - % |,,| \n\ - % |--| \n\ - % F \n\ - % F |----|------|--\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |T,,,B,,,,,,B,,\n\ - % F |----|,,,,,,|--\n\ - % F |bb,,B,,,,,,B,,\n\ - % F |,,,,G,,,,,,G,,\n\ - % F |T,,,B,,,,,,B,,\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - } - } - if (t_north == ot_prison_8) - rotate(3); - else if (t_east == ot_prison_8) - rotate(0); - else if (t_south == ot_prison_8) - rotate(1); - else if (t_west == ot_prison_8) - rotate(2); - } break; - - case ot_prison_8: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ -%%%%%%%%%%%%%%%%%%%%%%%%\n\ - \n\ - \n\ -ffffffffffffffffffffffff\n\ - \n\ - \n\ - \n\ ---| |--\n\ -,T| |T,\n\ -,,|------------------|,,\n\ -bb|ssssssssssssssssss|bb\n\ ---|ssssssssssssssssss|--\n\ -,T|ssssssssssssssssss|T,\n\ -,,|ssEsssssssssssssss|,,\n\ -bb|ssssssssssssssssss|bb\n\ ---|ssEsssssssssssssss|--\n\ -,T|ssssssssssssssssss|T,\n\ -,,|sssEssEssEssssssss|,,\n\ -bb|ssssssssssssssssss|bb\n\ ---|-----|------|-++--|--\n\ -,T|oooo<|,bb,,l|,,,,,|T,\n\ -,,|,,,,,=,,,,,l|,,,,,|,,\n\ -bb|o,,,,|,,,,,l|,,,,,|bb\n", - mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", t_stairs_down, t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", f_null, f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - if (this->ter(i,j) == t_sidewalk){ - if (one_in(200)){ - if (!one_in(3)) - add_spawn("mon_zombie", 1, i, j); - else - add_spawn("mon_zombie_brute", 1, i, j); - } - } - if (this->furn(i,j) == f_locker){ - place_items("softdrugs", 40, i, j, i, j, false, 0); - place_items("harddrugs", 40, i, j, i, j, false, 0); - } - if (this->furn(i,j) == f_bookcase){ - place_items("novels", 70, i, j, i, j, false, 0); - } - } - } - if (t_north == ot_prison_5) - rotate(2); - else if (t_east == ot_prison_5) - rotate(3); - else if (t_south == ot_prison_5) - rotate(0); - else if (t_west == ot_prison_5) - rotate(1); - } break; - - case ot_prison_9: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ -%%%%%%%%%%%%%%%%%%%%%%% \n\ - % \n\ - |--| % \n\ -fffffffffffffffff|,,| % \n\ - |,,| % \n\ - |--| % \n\ - F % \n\ ---|------|----| F % \n\ -,,B,,,,,,B,,bb| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,,T| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,bb| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,,T| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,bb| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,,T| F % \n\ ---|,,,,,,|----| F % \n\ -,,B,,,,,,B,,bb| F % \n\ -,,G,,,,,,G,,,,| F % \n\ -,,B,,,,,,B,,,T| F % \n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_bed){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - } - } - if (t_north == ot_prison_8) - rotate(1); - else if (t_east == ot_prison_8) - rotate(2); - else if (t_south == ot_prison_8) - rotate(3); - else if (t_west == ot_prison_8) - rotate(0); - } break; - - case ot_prison_b_entrance: { - fill_background(this, t_rock); - mapf::formatted_set_simple(this, 0, 0, -"\ -,T|------------------|##\n\ ---|#####################\n\ -,,|---------------------\n\ -,,G,,,,,,,,,,,,,,,,,,,,,\n\ -,,G,,,,,,,,,,,,,,,,,,,,,\n\ ---|---------------------\n\ -bb|#####################\n\ -,,|#####################\n\ -,T|#####################\n\ ---|#####################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_toilet){ - place_items("novels", 30, i, j, i, j, false, 0); - if (!one_in(3)) - add_spawn("mon_zombie", rng(0, 1), i, j); - else - add_spawn("mon_zombie_brute", rng(0, 1), i, j); - } - } - } - if (t_west != ot_prison_b) - rotate(1); - else if (t_north != ot_prison_b) - rotate(2); - else if (t_east != ot_prison_b) - rotate(3); - } break; - - case ot_prison_b: { - fill_background(this, &grass_or_dirt); - if (t_above == ot_prison_1){ - mapf::formatted_set_simple(this, 0, 0, -"\ -#########|bb,,|,,,,,,|,,\n\ -#########|----|,,,,,,|--\n\ -#########|T,,,|,,,,,,,,,\n\ -#########|,,,,G,,,,,,,,,\n\ -#########|bb,,|,,,,,,,,,\n\ -#########|----|,,,,,,|--\n\ -#########|T,,,|,,,,,,|,,\n\ -#########|,,,,G,,,,,,G,,\n\ -#########|bb,,|,,,,,,|,,\n\ -#########|----|------|--\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - if (t_south == ot_prison_b_entrance) - rotate(1); - else if (t_west == ot_prison_b_entrance) - rotate(2); - else if (t_north == ot_prison_b_entrance) - rotate(3); - } - - if (t_above == ot_prison_3){ - mapf::formatted_set_simple(this, 0, 0, -"\ -####|,,|################\n\ -####|,,|################\n\ -----|,,|################\n\ -,,,,,,,|################\n\ -,,,,,,,|################\n\ --------|################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - if (t_north == ot_prison_b_entrance) - rotate(1); - else if (t_east == ot_prison_b_entrance) - rotate(2); - else if (t_south == ot_prison_b_entrance) - rotate(3); - } - - if (t_above == ot_prison_4){ - mapf::formatted_set_simple(this, 0, 0, -"\ -############|,,,+,,|#|--\n\ -############|---|,,|#|,,\n\ -################|,,|#|,,\n\ -################|,,|#|,,\n\ -################|,,|#|-G\n\ -################|GG|-|,,\n\ -################|,,,,,,,\n\ -################|,,,,,,,\n\ -################|GG|-|,,\n\ -################|,,|#|--\n\ -################|,,|####\n\ -################|,,|####\n\ -################|,,|####\n\ -################|,,|####\n\ -################|,,|####\n\ -################|,,|####\n\ -################|,,|####\n\ -#########|----|-|++|-|--\n\ -#########|T,,,|,,,,,,|,,\n\ -#########|,,,,G,,,,,,G,,\n\ -#########|bb,,|,,,,,,|,,\n\ -#########|----|,,,,,,|--\n\ -#########|T,,,|,,,,,,|,,\n\ -#########|,,,,G,,,,,,G,,\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - if (t_north != ot_prison_b) - rotate(1); - else if (t_east != ot_prison_b) - rotate(2); - else if (t_south != ot_prison_b) - rotate(3); - } - - if (t_above == ot_prison_5){ - mapf::formatted_set_simple(this, 0, 0, -"\ ---|t,,,,|------|c,,,,|--\n\ -,>|h,,,,G,,rr,cB,,,,,|>,\n\ -,,|--+--|,,,,,cBccccc|,,\n\ -,,|,,,,,Bc,,h,cB,,,,,|,,\n\ -G-|,,,,,BcccxccB,,,,,|-G\n\ -,,B,,,,,BBBBBBBB,,,,,B,,\n\ -,,G,,,,,,,,,,,,,,,,,,G,,\n\ -,,G,,,,,,,,,,,,,,,,,,G,,\n\ -,,B,,,,,,,,,,,,,,,,,,B,,\n\ ---|,,,,,,,,,,,,,,,,,,|-+\n\ -##|,htth,,,,,,,,htth,|,,\n\ -##|,htth,,,,,,,,htth,|,,\n\ -##|,htth,,,,,,,,htth,|h,\n\ -##|,htth,O,,,,O,htth,|h,\n\ -##|,htth,,,,,,,,htth,|h,\n\ -##|,,,,,,,,,,,,,,,,,,|,,\n\ -##|,,,,,,,,,,,,,,,,,,|--\n\ ---|,htth,,,,,,,,htth,|##\n\ -bb|,htth,O,,,,O,htth,|##\n\ -,,|,htth,,,,,,,,htth,|##\n\ -,T|,htth,,,,,,,,htth,|##\n\ ---|,htth,,,,,,,,htth,|##\n\ -bb|,,,,,,,,,,,,,,,,,,|##\n\ -,,|,,,,,,,,,,,,,,,,,,|##\n", - mapf::basic_bind("t > O # E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_floor, t_stairs_up, t_column, t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("t > O # E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_table, f_null, f_null, f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - add_spawn("mon_zombie_cop", rng(0, 2), 2, 0); - add_spawn("mon_zombie_cop", rng(0, 2), 2, 23); - place_items("pistols", 30, 11, 1, 12, 1, false, 0); - place_items("ammo", 40, 11, 1, 12, 1, false, 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_chair){ - if (one_in(4)) { - if (!one_in(3)) add_spawn("mon_zombie", 1, i, j); - else if (one_in(10)) add_spawn("mon_zombie_cop", 1, i, j); - else add_spawn("mon_zombie_brute", 1, i, j); - } - } - } - } - if (t_west == ot_prison_b_entrance) - rotate(1); - else if (t_north == ot_prison_b_entrance) - rotate(2); - else if (t_east == ot_prison_b_entrance) - rotate(3); - } - - if (t_above == ot_prison_6){ - mapf::formatted_set_simple(this, 0, 0, -"\ -+-|#####################\n\ -,,|#####################\n\ -,,|#####################\n\ -,,|-------------|#######\n\ -G-|rr,DDDD,,DDDD|#######\n\ -,,+,,,,,,,,,,,,,|#######\n\ -,,|,,,,tt,tt,tt,|#######\n\ -,,c,,,,,,,,,,,,,|#######\n\ -,,|rr,WWWW,,WWWW|#######\n\ -+-|-|---|-------|#######\n\ -,,,,+,,r|###############\n\ -,,,,|,,r|###############\n\ -h,h,g,,,|###############\n\ -h,h,g,t,|###############\n\ -h,h,g,,,|###############\n\ -,,,,|,,l|###############\n\ -----|++||###############\n\ -####|,,|################\n\ -####|,,|################\n\ -####|,,|################\n\ -####|,,|################\n\ -####|,,|################\n\ -####|,,|################\n\ -####|,,|################\n", - mapf::basic_bind("D W # t g r + = h c l w s _ o d x T b G . , B - | % f F S", t_floor, t_floor, t_rock, t_floor, t_reinforced_glass_v, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("D W # t g r + = h c l w s _ o d x T b G . , B - | % f F S", f_dryer, f_washer, f_null, f_table, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - spawn_item(7, 11, "visions_solitude", 0); - add_spawn("mon_zombie_brute", 1, 6, 13); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker || this->furn(i,j) == f_rack ){ - place_items("science", 30, i, j, i, j, false, 0); - place_items("cleaning", 30, i, j, i, j, false, 0); - } - } - } - if (t_south != ot_prison_b) - rotate(1); - else if (t_west != ot_prison_b) - rotate(2); - else if (t_north != ot_prison_b) - rotate(3); - } - - else if (t_above == ot_prison_7){ - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -############|----------|\n\ -############|..........|\n\ -############|..........|\n\ -############|...|--|...|\n\ -############|...|##|...|\n\ -############|...|##|...|\n\ -############|...|##|...|\n\ -############|...|##|...|\n\ -############|...|--|...|\n\ -############|..........|\n\ -############|..........|\n\ -############|---|++|---|\n\ -############|rrr|,,|####\n", - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker || this->furn(i,j) == f_rack ){ - place_items("cleaning", 60, i, j, i, j, false, 0); - } - } - } - if (t_west == ot_prison_b && t_south == ot_prison_b) - rotate(1); - else if (t_north == ot_prison_b && t_west == ot_prison_b) - rotate(2); - else if (t_north == ot_prison_b && t_east == ot_prison_b) - rotate(3); - } - else if (t_above == ot_prison_8){ - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -##|-|-|-|------|########\n\ -##|T|T|T|l,,,,l|########\n\ -##|=|=|=|l,,,,l|########\n\ -##|,,,,,,,,,,,l|########\n\ -##|-----|,,,,,l|--------\n\ -##|,,,,>|,,,,,l|c,cSScee\n\ -##|h,,,,+,,,,,,|o,,,,,,,\n\ -##|t,,,,|cScScc|o,,,,,,,\n", - mapf::basic_bind("t e o > O # E g r + = h c l w s _ d x T b G . , B - | % f F S", t_floor, t_floor, t_floor, t_stairs_up, t_column, t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), - mapf::basic_bind("t e o > O # E g r + = h c l w s _ d x T b G . , B - | % f F S", f_table, f_fridge, f_oven, f_null, f_null, f_null, f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - add_spawn("mon_zombie_cop", rng(0, 2), 12, 19); - if (t_east != ot_prison_b) - rotate(1); - else if (t_south != ot_prison_b) - rotate(2); - else if (t_west != ot_prison_b) - rotate(3); - } - else if (t_above == ot_prison_9){ - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -##|-------|#############\n\ -##|r,,r,,r|#############\n\ -##|r,,r,,r|#############\n\ -##|r,,r,,r|#############\n\ ---|r,,r,,r|#############\n\ -ee|,,,,,,r|#############\n\ -,,+,,,,,,r|#############\n\ -,,|-------|#############\n", - mapf::basic_bind("e # r + = h c l w s _ o d x T b G . , B - | S", t_floor, t_rock, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_metal_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_floor), - mapf::basic_bind("e # r + = h c l w s _ o d x T b G . , B - | S", f_fridge, f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_rack){ - place_items("cannedfood", 40, i, j, i, j, false, 0); - place_items("pasta", 40, i, j, i, j, false, 0); - } - } - } - if (t_north == ot_prison_b && t_west == ot_prison_b) - rotate(1); - else if (t_north == ot_prison_b && t_east == ot_prison_b) - rotate(2); - else if (t_south == ot_prison_b && t_east == ot_prison_b) - rotate(3); - } - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_toilet){ - if (one_in(3)) add_spawn("mon_zombie_brute", rng(0, 1), i, j); - else if (one_in(3)) add_spawn("mon_zombie_grabber", rng(0, 1), i, j); - else if (one_in(3)) add_spawn("mon_zombie_electric", rng(0, 1), i, j); - else add_spawn("mon_zombie", rng(0, 1), i, j); - } - if (this->furn(i,j) == f_bed) - place_items("novels", 30, i, j, i, j, false, 0); - if (this->furn(i,j) == f_fridge) - place_items("fridge", 60, i, j, i, j, false, 0); - if (this->furn(i,j) == f_locker){ - place_items("cop_weapons", 20, i, j, i, j, false, 0); - place_items("cop_torso", 20, i, j, i, j, false, 0); - place_items("cop_pants", 20, i, j, i, j, false, 0); - place_items("cop_shoes", 20, i, j, i, j, false, 0); - } - if (this->furn(i,j) == f_washer || this->furn(i,j) == f_dryer){ - if (one_in(4)) - spawn_item(i, j, "blanket", 0, 3); - else if (one_in(3)) - spawn_item(i, j, "jumpsuit", 0, 3); - } - } - } - if (t_north == ot_prison_2) - rotate(3); - else if (t_east == ot_prison_2) - rotate(0); - else if (t_south == ot_prison_2) - rotate(1); - else if (t_west == ot_prison_2) - rotate(2); - }break; - - case ot_hotel_tower_1_1: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -ssssssssssssssssssssssss\n", - mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - place_spawns(g, "GROUP_ZOMBIE", 2, 6, 6, 18,18, density); - if (t_north == ot_hotel_tower_1_2) - rotate(3); - else if (t_east == ot_hotel_tower_1_2) - rotate(0); - else if (t_south == ot_hotel_tower_1_2) - rotate(1); - else if (t_west == ot_hotel_tower_1_2) - rotate(2); - }break; - - case ot_hotel_tower_1_2: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -,_____________________,_\n\ -,________sssss________,_\n\ -,________s s________,_\n\ -,________s s________,_\n\ -s________s s________ss\n\ -s________s s________ss\n\ -,________s s________,_\n\ -,________s s________,_\n\ -,________s s________,_\n\ -,________s s________,_\n\ -,________sssss________,_\n\ -,_____________________,_\n\ -________________________\n\ -________________________\n\ -________________________\n\ -________________________\n\ -________________________\n\ -,_____________________,_\n\ -,________sssss________,_\n\ -,________s s________,_\n\ -,________s s________,_\n\ -,________s s________,_\n\ -,________s s________,_\n\ -s________sssss________ss\n", - mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - if (t_north == ot_hotel_tower_1_5) - rotate(0); - else if (t_east == ot_hotel_tower_1_5) - rotate(1); - else if (t_south == ot_hotel_tower_1_5) - rotate(2); - else if (t_west == ot_hotel_tower_1_5) - rotate(3); - }break; - - case ot_hotel_tower_1_3: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -sssssssssssssssssssssss\n\ -sssssssssssssssssssssss\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -sssssssssssssssssssssss\n", - mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - if (t_north == ot_hotel_tower_1_2){ - rotate(1); - if (x_in_y(1,12)){add_vehicle (g, "car", 12, 18, 180);}} - else if (t_east == ot_hotel_tower_1_2){ - rotate(2); - if (x_in_y(1,12)){add_vehicle (g, "car", 9, 7, 0);}} - else if (t_south == ot_hotel_tower_1_2){ - rotate(3); - if (x_in_y(1,12)){add_vehicle (g, "car", 12, 18, 180);}} - else if (t_west == ot_hotel_tower_1_2){ - rotate(0); - if (x_in_y(1,12)){add_vehicle (g, "car", 17, 7, 0);}} - }break; - - case ot_hotel_tower_1_4: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -s |c..BB|c..BB|c..BB|\n\ -s |c..BB|c..BB|c..BB|\n\ -s |....d|....d|....d|\n\ -s |-www-|-www-|-www-|\n\ -s \n\ -s T T \n\ -s \n\ -s \n\ -ssssssssssssssssssssssss\n\ -ssssssssssssssssssssssss\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_______________________\n\ -s_____,_____,_____,_____\n\ -s_____,_____,_____,_____\n", - mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_floor, t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_tree_young, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_bed, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_null, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser && x_in_y(1,2)) - place_items("dresser", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_counter && x_in_y(1,5)) - place_items("magazines", 30, i, j, i, j, false, 0); - } - } - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - if (t_north == ot_hotel_tower_1_5) - rotate(3); - else if (t_east == ot_hotel_tower_1_5) - rotate(0); - else if (t_south == ot_hotel_tower_1_5) - rotate(1); - else if (t_west == ot_hotel_tower_1_5) - rotate(2); - }break; - - case ot_hotel_tower_1_5: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -c..BB|t.........t|BB..c|\n\ -h..BB|h.........h|BB..c|\n\ -th..d|...........|d....|\n\ --www||...........||www-|\n\ - |............^| \n\ - T V.hh......|-+-| T \n\ - V.tt......|r.D| \n\ - V.tt......c..h| \n\ -ssss|.hh......x...|sssss\n\ -ssssV.........c...|sssss\n\ -,sssV.........cccc|sss,_\n\ -,sssV............^Vsss,_\n\ -,sss|^............Vsss,_\n\ -,sss|HHHGGHHHGGHHH|sss,_\n\ -,sssssssssssssssssssss,_\n\ -,sssssCsssssssssCsssss,_\n\ -_sssssssssssssssssssss__\n\ -________________________\n\ -________________________\n\ -________________________\n\ -________________________\n\ -________________________\n\ -,_____________________,_\n\ -,_____________________,_\n", - mapf::basic_bind("T r V H G D B _ , C x $ ^ . - | # t + = w S e o h c d l s", t_tree_young, t_floor, t_wall_glass_v, t_wall_glass_h, t_door_glass_c, t_floor, t_floor, t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("T r V H G D B _ , C x $ ^ . - | # t + = w S e o h c d l s", f_null, f_rack, f_null, f_null, f_null, f_desk, f_bed, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser && x_in_y(1,2)) - place_items("dresser", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_counter && x_in_y(1,5)) - place_items("magazines", 30, i, j, i, j, false, 0); - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - if (x_in_y(1,2)){add_spawn("mon_zombie", 2, 15, 7);} - if (x_in_y(1,2)){add_spawn("mon_zombie", rng(1,8), 12, 11);} - } - { - int num_carts = rng(1, 3); - for( int i = 0; i < num_carts; i++ ) { - add_vehicle (g, "luggage_cart", rng(5, 18), rng(2, 12), 90, -1, -1, false); - } - } - if (t_north == ot_hotel_tower_1_2) - rotate(2); - else if (t_east == ot_hotel_tower_1_2) - rotate(3); - else if (t_south == ot_hotel_tower_1_2) - rotate(0); - else if (t_west == ot_hotel_tower_1_2) - rotate(1); - }break; - - case ot_hotel_tower_1_6: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -BB..c|BB..c|BB..c| s\n\ -BB..c|BB..c|BB..c| s\n\ -d....|d....|d....| s\n\ --www-|-www-|-www-| s\n\ - s\n\ - T T s\n\ - s\n\ - s\n\ -sssssssssssssssssssssss\n\ -sssssssssssssssssssssss\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -______________________s\n\ -____,_____,_____,_____s\n\ -____,_____,_____,_____s\n", - mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_floor, t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_tree_young, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_bed, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_null, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser && x_in_y(1,2)) - place_items("dresser", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_counter && x_in_y(1,5)) - place_items("magazines", 30, i, j, i, j, false, 0); - } - } - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - if (t_north == ot_hotel_tower_1_5) - rotate(1); - else if (t_east == ot_hotel_tower_1_5) - rotate(2); - else if (t_south == ot_hotel_tower_1_5) - rotate(3); - else if (t_west == ot_hotel_tower_1_5) - rotate(0); - }break; - - case ot_hotel_tower_1_7: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |-www-|-www-|-www-|\n\ - |....d|th..d|....d|\n\ - |c..BB|h..BB|c..BB|\n\ - |c..BB|c..BB|c..BB|\n\ - |c....|c...d|c....|\n\ - |....h|c..BB|....h|\n\ - |...ht|...BB|...ht|\n\ - |..|--|..|--|..|--|\n\ - |..+.S|..+.S|..+.S|\n\ - |..|.T|..|.T|..|.T|\n\ - |--|..|bb|..|bb|..|bb|\n\ - |..|-D|--|-D|--|-D|--|\n\ -ss|..|..................\n\ -ss=..+..................\n\ -ss|..|..................\n\ -s |.<|-D|--|-D|--|-D|--|\n\ -s |--|..|bb|..|bb|..|bb|\n\ -s |..|.T|..|.T|..|.T|\n\ -s |..+.S|..+.S|..+.S|\n\ -s |..|--|..|--|..|--|\n\ -s |...ht|...ht|...ht|\n\ -s |....h|....h|....h|\n\ -s |c....|c....|c....|\n", - mapf::basic_bind("D b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", t_door_locked_interior, t_floor, t_stairs_up, t_stairs_down, t_floor, t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("D b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", f_null, f_bathtub, f_null, f_null, f_bed, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser && x_in_y(1,2)) - place_items("dresser", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_counter && x_in_y(1,5)) - place_items("magazines", 30, i, j, i, j, false, 0); - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - add_spawn("mon_zombie", rng(0,12), 14, 11); - } - if (t_north == ot_hotel_tower_1_8) - rotate(3); - else if (t_east == ot_hotel_tower_1_8) - rotate(0); - else if (t_south == ot_hotel_tower_1_8) - rotate(1); - else if (t_west == ot_hotel_tower_1_8) - rotate(2); - } break; - - case ot_hotel_tower_1_8: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ --www-|-www-|-www-|-www-|\n\ -....d|th..d|d....|d....|\n\ -c..BB|h..BB|BB..c|BB..c|\n\ -c..BB|c..BB|BB..c|BB..c|\n\ -c....|c...d|....c|....c|\n\ -....h|c..BB|h....|h....|\n\ -...ht|...BB|th...|th...|\n\ -..|--|..|--|--|..|--|..|\n\ -..+.S|..+.S|S.+..|S.+..|\n\ -..|.T|..|.T|T.|..|T.|..|\n\ -..|bb|..|bb|bb|..|bb|..|\n\ --D|--|-D|--|--|D-|--|D-|\n\ -........................\n\ -........................\n\ -........................\n\ --D|--|---|...|---|--|D-|\n\ -..|bb|EEE=...|xEE|bb|..|\n\ -..|.T|EEE=...=EEE|T.|..|\n\ -..+.S|EEx|...=EEE|S.+..|\n\ -..|--|---|...|---|--|..|\n\ -...BB|^.........^|th...|\n\ -c..BB|h.........h|h....|\n\ -c...d|t.........t|....c|\n", - mapf::basic_bind("E b > < B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_elevator, t_floor, t_stairs_up, t_stairs_down, t_floor, t_pavement, t_pavement_y, t_column, t_elevator_control_off, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_metal_c, t_door_locked_interior, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E b > < B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_bathtub, f_null, f_null, f_bed, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser && x_in_y(1,2)) - place_items("dresser", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_counter && x_in_y(1,5)) - place_items("magazines", 30, i, j, i, j, false, 0); - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 23, 23, 3, density); - else { - add_spawn("mon_zombie", rng(1,18), 12, 12); - } - if (t_north == ot_hotel_tower_1_5) - rotate(2); - else if (t_east == ot_hotel_tower_1_5) - rotate(3); - else if (t_south == ot_hotel_tower_1_5) - rotate(0); - else if (t_west == ot_hotel_tower_1_5) - rotate(1); - } break; - - case ot_hotel_tower_1_9: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ --www-|-www-|-www-| \n\ -d....|d..ht|d....| \n\ -BB..c|BB..h|BB..c| \n\ -BB..c|BB..c|BB..c| \n\ -....c|d...c|....c| \n\ -h....|BB..c|h....| \n\ -th...|BB...|th...| \n\ ---|..|--|..|--|..| \n\ -S.+..|S.+..|S.+..| \n\ -T.|..|T.|..|T.|..| \n\ -bb|..|bb|..|bb|..|--| \n\ ---|D-|--|D-|--|D-|..| \n\ -................^|..|ss \n\ -.................+..=ss \n\ -.................|..|ss \n\ ---|D-|--|D-|--|D-|<.| s \n\ -bb|..|bb|..|bb|..|--| s \n\ -T.|..|T.|..|T.|..| s \n\ -S.+..|S.+..|S.+..| s \n\ ---|..|--|..|--|..| s \n\ -th...|th...|th...| s \n\ -h....|h....|h....| s \n\ -....c|....c|....c| s \n", - mapf::basic_bind("D E b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", t_door_locked_interior, t_elevator, t_floor, t_stairs_up, t_stairs_down, t_floor, t_pavement, t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("D E b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", f_null, f_null, f_bathtub, f_null, f_null, f_bed, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser && x_in_y(1,2)) - place_items("dresser", 70, i, j, i, j, false, 0); - else if (this->furn(i,j) == f_counter && x_in_y(1,5)) - place_items("magazines", 30, i, j, i, j, false, 0); - } - } - if (density > 1) - place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); - else { - add_spawn("mon_zombie", rng(1,8), 12, 12); - } - if (t_north == ot_hotel_tower_1_8) - rotate(1); - else if (t_east == ot_hotel_tower_1_8) - rotate(2); - else if (t_south == ot_hotel_tower_1_8) - rotate(3); - else if (t_west == ot_hotel_tower_1_8) - rotate(0); - } break; - - case ot_hotel_tower_b_1: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -#####|--------------|---\n\ -#####|......E..ee...|^ht\n\ -#####|..............|...\n\ -#####|...........E..V...\n\ -#####|..............V...\n\ -#####|.E.........E..V...\n\ -#####|..............V...\n\ -#####|..............G...\n\ -#####|..............V...\n\ -#####|..E..E..E..E..V...\n\ -##|--|.............^|...\n\ -##|.<|-----HHHHHHHH-|...\n\ -##|..|..................\n\ -##|..+..................\n\ -##|..|^..............htt\n\ -##|..|-----------------|\n\ -##|--|#################|\n\ -#######################|\n\ -#######################|\n\ -#######################|\n\ -#######################|\n\ -#######################|\n\ -#######################|\n", - mapf::basic_bind("E < H V G C x ^ . - | # t + = D w T S e o h c d l s", t_floor, t_stairs_up, t_wall_glass_h, t_wall_glass_v, t_door_glass_c, t_column, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E < H V G C x ^ . - | # t + = D w T S e o h c d l s", f_exercise, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - place_items("snacks", 60, 15, 2, 16, 2, false, 0); - add_spawn("mon_sewer_snake", rng(0, 3), SEEX, SEEY); - if (t_north == ot_hotel_tower_b_2) - rotate(3); - else if (t_east == ot_hotel_tower_b_2) - rotate(0); - else if (t_south == ot_hotel_tower_b_2) - rotate(1); - else if (t_west == ot_hotel_tower_b_2) - rotate(2); - }break; - - case ot_hotel_tower_b_2: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -------------------------\n\ -th..........^rrr^.......\n\ -........................\n\ -.sssssssssssssssssssssss\n\ -.sWWWWWWWWWwwwwwwwwwwwws\n\ -.sWWWWWWWWWwwwwwwwwwwwws\n\ -.sWWWWWWWWWwwwwwwwwwwwws\n\ -.sWWWWWWWWWwwwwwwwwwwwws\n\ -.sWWWWWWWWWwwwwwwwwwwwws\n\ -.sWWWWWWWWWwwwwwwwwwwwws\n\ -.sssssssssssssssssssssss\n\ -........................\n\ -........................\n\ -........................\n\ -h......................h\n\ ----+-|---|HGH|---|-+---|\n\ -T|..c|EEE+...|xEE|c..|T|\n\ -.+..S|EEE+...+EEE|S..+.|\n\ --|..c|EEx|^..+EEE|c..|-|\n\ -T+..S|---|-+-|---|S..+T|\n\ --|..c|l..........|c..|-|\n\ -T+...|l..l...rrr.|...+T|\n\ ------|-----------|-----|\n", - mapf::basic_bind("E r W w H V G C x ^ . - | # t + = D T S e o h c d l s", t_elevator, t_floor, t_water_dp, t_water_sh, t_wall_glass_h, t_wall_glass_v, t_door_glass_c, t_column, t_elevator_control_off, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("E r W w H V G C x ^ . - | # t + = D T S e o h c d l s", f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker) - place_items("cleaning", 60, i, j, i, j, false, 0); - } - } - add_spawn("mon_sewer_snake", rng(0, 10), SEEX, SEEY); - if (t_north == ot_hotel_tower_b_1) - rotate(1); - else if (t_east == ot_hotel_tower_b_1) - rotate(2); - else if (t_south == ot_hotel_tower_b_1) - rotate(3); - else if (t_west == ot_hotel_tower_b_1) - rotate(0); - }break; - - case ot_hotel_tower_b_3: { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -----|------------|######\n\ -...^|............|######\n\ -....|.$$$$PP$$$$$|######\n\ -....|........$...|######\n\ -....|........$...|######\n\ -....|............|######\n\ -....|---+--------|######\n\ -....|r....rrDDDDc|######\n\ -....|r..........S|######\n\ -....|r..........c|######\n\ -....|r......WWWWc|--|###\n\ -....|---++-------|<.|###\n\ -.................|..|###\n\ -.................+..|###\n\ -tth.............^|..|###\n\ ------------------|..|###\n\ -#################|--|###\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n\ -########################\n", - mapf::basic_bind("r P $ W D < H V G C x ^ . - | # t + = w T S e o h c d l s", t_floor, t_sewage_pump, t_sewage_pipe, t_floor, t_floor, t_stairs_up, t_wall_glass_h, t_wall_glass_v, t_door_glass_c, t_column, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("r P $ W D < H V G C x ^ . - | # t + = w T S e o h c d l s", f_rack, f_null, f_null, f_washer, f_dryer, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_rack) - place_items("home_hw", 80, i, j, i, j, false, 0); - if (this->furn(i,j) == f_washer || this->furn(i,j) == f_dryer){ - if (x_in_y(1,2)){ - spawn_item(i, j, "blanket", 0); - spawn_item(i, j, "blanket", 0); - spawn_item(i, j, "blanket", 0); - } - else if (x_in_y(1,3)) - place_items("dresser", 80, i, j, i, j, false, 0); - } - } - } - add_spawn("mon_sewer_snake", rng(0, 3), SEEX, SEEY); - if (t_north == ot_hotel_tower_b_2) - rotate(1); - else if (t_east == ot_hotel_tower_b_2) - rotate(2); - else if (t_south == ot_hotel_tower_b_2) - rotate(3); - else if (t_west == ot_hotel_tower_b_2) - rotate(0); - }break; - - case ot_office_doctor_north: - case ot_office_doctor_east: - case ot_office_doctor_south: - case ot_office_doctor_west: { -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - |---|----|--------| \n\ - |..l|.T.S|..eccScc| \n\ - |...+....+........D \n\ - |--------|.......6|r \n\ - |o.......|..|--X--|r \n\ - |d.hd.h..+..|l...6| \n\ - |o.......|..|l...l| \n\ - |--------|..|l...l| \n\ - |l....ccS|..|lllll| \n\ - |l..t....+..|-----| \n\ - |l.......|..|....l| \n\ - |--|-----|..|.t..l| \n\ - |T.|d.......+....l| \n\ - |S.|d.h..|..|Scc..| \n\ - |-+|-ccc-|++|-----| \n\ - |.................| \n\ - w....####....####.w \n\ - w.................w \n\ - |....####....####.| \n\ - |.................| \n\ - |-++--wwww-wwww---| \n\ - ss \n\ - ss \n", - mapf::basic_bind(". - | 6 X # r t + = D w T S e o h c d l s", t_floor, t_wall_h, t_wall_v, t_console, t_door_metal_locked, t_floor, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind(". - | 6 X # r t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_null, f_bench, f_trashcan, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - tmpcomp = add_computer(20, 4, _("Medical Supply Access"), 2); - tmpcomp->add_option(_("Lock Door"), COMPACT_LOCK, 2); - tmpcomp->add_option(_("Unlock Door"), COMPACT_UNLOCK, 2); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); - - tmpcomp = add_computer(20, 6, _("Medical Supply Access"), 2); - tmpcomp->add_option(_("Unlock Door"), COMPACT_UNLOCK, 2); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); - - if (one_in(2)) spawn_item(7, 6, "record_patient", 0); - place_items("dissection", 60, 4, 9, 4, 11, false, 0); - place_items("dissection", 60, 9, 9, 10, 9, false, 0); - place_items("dissection", 60, 20, 11, 20, 13, false, 0); - place_items("dissection", 60, 17, 14, 18, 14, false, 0); - place_items("fridge", 50, 15, 2, 15, 2, false, 0); - place_items("surgery", 30, 4, 9, 11, 11, false, 0); - place_items("surgery", 30, 16, 11, 20, 4, false, 0); - place_items("harddrugs", 60, 16, 6, 16, 9, false, 0); - place_items("harddrugs", 60, 17, 9, 19, 9, false, 0); - place_items("softdrugs", 60, 20, 9, 20, 7, false, 0); - place_items("cleaning", 50, 4, 2, 6, 3, false, 0); - - if (terrain_type == ot_office_doctor_east) - rotate(3); - if (terrain_type == ot_office_doctor_north) - rotate(2); - if (terrain_type == ot_office_doctor_west) - rotate(1); - - } break; - - - case ot_toxic_dump: { - fill_background(this, t_dirt); - for (int n = 0; n < 6; n++) { - int poolx = rng(4, SEEX * 2 - 5), pooly = rng(4, SEEY * 2 - 5); - for (int i = poolx - 3; i <= poolx + 3; i++) { - for (int j = pooly - 3; j <= pooly + 3; j++) { - if (rng(2, 5) > rl_dist(poolx, pooly, i, j)) { - ter_set(i, j, t_sewage); - radiation(i, j) += rng(20, 60); - } - } - } - } - int buildx = rng(6, SEEX * 2 - 7), buildy = rng(6, SEEY * 2 - 7); - square(this, t_floor, buildx - 3, buildy - 3, buildx + 3, buildy + 3); - line(this, t_wall_h, buildx - 4, buildy - 4, buildx + 4, buildy - 4); - line(this, t_wall_h, buildx - 4, buildy + 4, buildx + 4, buildy + 4); - line(this, t_wall_v, buildx - 4, buildy - 4, buildx - 4, buildy + 4); - line(this, t_wall_v, buildx + 4, buildy - 4, buildx + 4, buildy + 4); - line_furn(this, f_counter, buildx - 3, buildy - 3, buildx + 3, buildy - 3); - place_items("toxic_dump_equipment", 80, - buildx - 3, buildy - 3, buildx + 3, buildy - 3, false, 0); - spawn_item(buildx, buildy, "id_military", 0); - ter_set(buildx, buildy + 4, t_door_locked); - - rotate(rng(0, 3)); - } break; - -case ot_haz_sar_entrance:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - f |_________%..S| |.\n\ - f |_________|..r| |.\n\ - f |_________|..r| |.\n\ - f |l________=..r| |c\n\ - f |l________|..S| |w\n\ - f |l________%..r|sss\n\ - f |_________%..r|sss\n\ - f |_________%..r|ss_\n\ - f |_________|x..|ss_\n\ - f |-XXXXXXX-|-D-|ss_\n\ - f s_______ssssssss_\n\ - f s_______ssssssss_\n\ - f s________________\n\ - f s________________\n\ - f s________________\n\ - f ssss________________\n\ - f ssss_______ssssssss_\n\ - fF|-D-|XXXXXXX- s_\n\ - wxh.D_______f s_\n\ - wcdcw_______f ss\n\ - |www|_______fFFFFFFFF\n\ - _______ \n\ - _______ \n\ - _______ \n", - mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(19, 3, "cleansuit", 0); - place_items("office", 80, 4, 19, 6, 19, false, 0); - place_items("cleaning", 90, 7, 3, 7, 5, false, 0); - place_items("toxic_dump_equipment", 85, 19, 1, 19, 3, false, 0); - place_items("toxic_dump_equipment", 85, 19, 5, 19, 7, false, 0); - if (x_in_y(1,2)){add_spawn("mon_hazmatbot", 1, 10, 5);} -//lazy radiation mapping - for (int x = 0; x <= 23; x++) { - for (int y = 0; y <= 23; y++) - radiation(x, y) += rng(10, 30); - } - if (t_north == ot_haz_sar && t_west == ot_haz_sar) - rotate(3); - else if (t_north == ot_haz_sar && t_east == ot_haz_sar) - rotate(0); - else if (t_south == ot_haz_sar && t_east == ot_haz_sar) - rotate(1); - else if (t_west == ot_haz_sar && t_south == ot_haz_sar) - rotate(2); -}break; - -case ot_haz_sar:{ - fill_background(this, &grass_or_dirt); - if ((t_south == ot_haz_sar_entrance && t_east == ot_haz_sar) || (t_north == ot_haz_sar && t_east == ot_haz_sar_entrance) || (t_west == ot_haz_sar && t_north == ot_haz_sar_entrance) || - (t_south == ot_haz_sar && t_west == ot_haz_sar_entrance)){ - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - fFFFFFFFFFFFFFFFFFFFFFF\n\ - f \n\ - f \n\ - f #################\n\ - f ##################\n\ - f ##...llrr..........\n\ - f ##.._________.......\n\ - f ##.._________&&&1111\n\ - f ##..________x&&&....\n\ - f ##..____________....\n\ - f ##r.____________....\n\ - f ##r.____________....\n\ - f ##r.____________....\n\ - f ##r.____________..CC\n\ - f ##..___________...CC\n\ - f ##..__________....C.\n\ - f ##.._________.......\n\ - f ##..________........\n\ - f ###._______x##.#####\n\ - f ####XXXXXXX###+#####\n\ - f ##________x|x.r| \n\ - f |_________%..r| |-\n\ - f |_________%..r| |^\n", - mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(19, 22, "cleansuit", 0); - place_items("cleaning", 85, 6, 11, 6, 14, false, 0); - place_items("tools", 85, 10, 6, 13, 6, false, 0); - place_items("toxic_dump_equipment", 85, 22, 14, 23, 15, false, 0); - if (x_in_y(1,2)){add_spawn("mon_hazmatbot", 1, 22, 12);} - if (x_in_y(1,2)){add_spawn("mon_hazmatbot", 1, 23, 18);} - //lazy radiation mapping - for (int x = 0; x <= 23; x++) { - for (int y = 0; y <= 23; y++) - radiation(x, y) += rng(10, 30); - } - if (t_west == ot_haz_sar_entrance){ - rotate(1); - if (x_in_y(1,4)){add_vehicle (g, "military_cargo_truck", 10, 11, 0);}} - else if (t_north == ot_haz_sar_entrance){ - rotate(2); - if (x_in_y(1,4)){add_vehicle (g, "military_cargo_truck", 12, 10, 90);} - } - else if (t_east == ot_haz_sar_entrance){ - rotate(3); - if (x_in_y(1,4)){add_vehicle (g, "military_cargo_truck", 13, 12, 180);} - } - else if (x_in_y(1,4)){add_vehicle (g, "military_cargo_truck", 11, 13, 270);} - - } - - else if ((t_west == ot_haz_sar_entrance && t_north == ot_haz_sar) || (t_north == ot_haz_sar_entrance && t_east == ot_haz_sar) || (t_west == ot_haz_sar && t_south == ot_haz_sar_entrance) || - (t_south == ot_haz_sar && t_east == ot_haz_sar_entrance)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -......|-+-|-+|...h..w f \n\ -.c....|.............w f \n\ -hd....+....ch.....hdw f \n\ -cc....|....cdd...ddd| f \n\ -ww-www|w+w-www--www-| f \n\ -ssssssssssssssssssss f \n\ -ssssssssssssssssssss f \n\ -___,____,____,____ss f \n\ -___,____,____,____ss f \n\ -___,____,____,____ss f \n\ -___,____,____,____ss f \n\ -___,____,____,____ss f \n\ -__________________ss f \n\ -__________________ss f \n\ -__________________ss f \n\ -__________________ss f \n\ -________,_________ss f \n\ -________,_________ss f \n\ -________,_________ss f \n\ -ssssssssssssssssssss f \n\ -FFFFFFFFFFFFFFFFFFFFFFf \n\ - \n\ - \n\ - \n", - mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F V H 6 x $ ^ . - | # t + = D w T S e o h c d l s", t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F V H 6 x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - spawn_item(1, 2, "id_military", 0); - place_items("office", 85, 1, 1, 1, 3, false, 0); - place_items("office", 85, 11, 3, 13, 3, false, 0); - place_items("office", 85, 17, 3, 19, 3, false, 0); - //lazy radiation mapping - for (int x = 0; x <= 23; x++) { - for (int y = 0; y <= 23; y++) - radiation(x, y) += rng(10, 30); - } - if (t_north == ot_haz_sar_entrance) - rotate(1); - if (t_east == ot_haz_sar_entrance) - rotate(2); - if (t_south == ot_haz_sar_entrance) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ -FFFFFFFFFFFFFFFFFFFFFFf \n\ - f \n\ - f \n\ -################ f \n\ -################# f \n\ -.V.V.V..........## f \n\ -.......|G|.......## f \n\ -11111111111111...## f \n\ -.......|G|.%515%.## f \n\ -...........%QQQ%.## f \n\ -..CC......x%QQQ%.## f \n\ -.CCC.......%QQQ%.## f \n\ -...........%QQQ%.## f \n\ -.....|.R|..%515%.## f \n\ -......EE|....1...## f \n\ -......EE|....&...## f \n\ -.....---|.......## f \n\ -...............## f \n\ -################ f \n\ -############### f \n\ - f \n\ -------|---|--|---www| f \n\ -.x6x..|S.T|l.|^.ddd.| f \n", - mapf::basic_bind("R 1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", t_elevator_control_off, t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), - mapf::basic_bind("R 1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); - place_items("office", 85, 16, 23, 18, 23, false, 0); - place_items("cleaning", 85, 11, 23, 12, 23, false, 0); - place_items("robots", 90, 2, 11, 3, 11, false, 0); - if (x_in_y(1,2)){add_spawn("mon_hazmatbot", 1, 7, 10);} - if (x_in_y(1,2)){add_spawn("mon_hazmatbot", 1, 11, 16);} - //lazy radiation mapping - for (int x = 0; x <= 23; x++) { - for (int y = 0; y <= 23; y++) - radiation(x, y) += rng(10, 30); - } - tmpcomp = add_computer(2, 23, _("SRCF Security Terminal"), 0); - tmpcomp->add_option(_("Security Reminder [1055]"), COMPACT_SR1_MESS, 0); - tmpcomp->add_option(_("Security Reminder [1056]"), COMPACT_SR2_MESS, 0); - tmpcomp->add_option(_("Security Reminder [1057]"), COMPACT_SR3_MESS, 0); - //tmpcomp->add_option(_("Security Reminder [1058]"), COMPACT_SR4_MESS, 0); limited to 9 computer options - tmpcomp->add_option(_("EPA: Report All Potential Containment Breaches [3873643]"), COMPACT_SRCF_1_MESS, 2); - tmpcomp->add_option(_("SRCF: Internal Memo, EPA [2918024]"), COMPACT_SRCF_2_MESS, 2); - tmpcomp->add_option(_("CDC: Internal Memo, Standby [2918115]"), COMPACT_SRCF_3_MESS, 2); - tmpcomp->add_option(_("USARMY: SEAL SRCF [987167]"), COMPACT_SRCF_SEAL_ORDER, 4); - tmpcomp->add_option(_("COMMAND: REACTIVATE ELEVATOR"), COMPACT_SRCF_ELEVATOR, 0); - tmpcomp->add_option(_("COMMAND: SEAL SRCF [4423]"), COMPACT_SRCF_SEAL, 5); - tmpcomp->add_failure(COMPFAIL_ALARM); - if (t_west == ot_haz_sar && t_north == ot_haz_sar) - rotate(1); - if (t_east == ot_haz_sar && t_north == ot_haz_sar) - rotate(2); - if (t_east == ot_haz_sar && t_south == ot_haz_sar) - rotate(3); - } -}break; - -case ot_haz_sar_entrance_b1:{ -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -#############...........\n\ -#############...........\n\ -|---------|#............\n\ -|_________|M............\n\ -|_________$.............\n\ -|_________$.............\n\ -|_________$.............\n\ -|_________$.............\n\ -|_________$.............\n\ -|_________|.............\n\ -|---------|#............\n\ -############............\n\ -###########.............\n\ -###########M......####..\n\ -#########|--$$$$$--|####\n\ -####|----|_________|----\n\ -####|___________________\n\ -####|___________________\n\ -####|___________________\n\ -####|___________________\n\ -####|___________________\n\ -####|___________________\n\ -####|___________________\n\ -####|-------------------\n", - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->ter(i,j) == t_rock_floor){ - if (one_in(250)){ - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(i, j, body); - place_items("science", 70, i, j, i, j, true, 0);} - else if (one_in(80))add_spawn("mon_zombie", 1, i, j); - } - if (this->ter(i,j) != t_metal_floor) - radiation(x, y) += rng(10, 70); - if (this->ter(i,j) == t_sewage){ - if (one_in(2)) ter_set(i,j,t_dirtfloor); - if (one_in(4)) ter_set(i,j,t_dirtmound); - if (one_in(2)) ter_set(i,j,t_wreckage); - place_items("trash", 50, i, j, i, j, false, 0); - place_items("sewer", 50, i, j, i, j, false, 0); - if (one_in(5)){ - if (one_in(10))add_spawn("mon_zombie_child", 1, i, j); - else if (one_in(15))add_spawn("mon_zombie_fast", 1, i, j); - else add_spawn("mon_zombie", 1, i, j); - } - } - } - } - if (t_north == ot_haz_sar_b1 && t_west == ot_haz_sar_b1) - rotate(3); - else if (t_north == ot_haz_sar_b1 && t_east == ot_haz_sar_b1) - rotate(0); - else if (t_south == ot_haz_sar_b1 && t_east == ot_haz_sar_b1) - rotate(1); - else if (t_west == ot_haz_sar_b1 && t_south == ot_haz_sar_b1) - rotate(2); -}break; - -case ot_haz_sar_b1:{ - fill_background(this, &grass_or_dirt); - if ((t_south == ot_haz_sar_entrance_b1 && t_east == ot_haz_sar_b1) || (t_north == ot_haz_sar_b1 && t_east == ot_haz_sar_entrance_b1) || (t_west == ot_haz_sar_b1 && t_north == ot_haz_sar_entrance_b1) || - (t_south == ot_haz_sar_b1 && t_west == ot_haz_sar_entrance_b1)){ - mapf::formatted_set_simple(this, 0, 0, -"\ -####################.M..\n\ -####################--$$\n\ -####|----------|###.....\n\ -####|__________|M.......\n\ -####|__________$........\n\ -####|__________$........\n\ -####|__________$........\n\ -####|__________$........\n\ -####|__________$........\n\ -####|__________|........\n\ -####|----------|........\n\ -###############.........\n\ -##############..........\n\ -#############...........\n\ -############...........#\n\ -|---------|#.........###\n\ -|_________|M.........###\n\ -|_________$..........|--\n\ -|_________$..........|r,\n\ -|_________$..........|r,\n\ -|_________$..........|r,\n\ -|_________$..........|,,\n\ -|_________|..........|,,\n\ -|---------|#.........|-$\n", - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_rack) - place_items("mechanics", 60, i, j, i, j, false, 0); - if (this->ter(i,j) == t_rock_floor){ - if (one_in(250)){ - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(i, j, body); - place_items("science", 70, i, j, i, j, true, 0);} - else if (one_in(80))add_spawn("mon_zombie", 1, i, j); - } - if (this->ter(i,j) != t_metal_floor) - radiation(x, y) += rng(10, 70); - if (this->ter(i,j) == t_sewage){ - if (one_in(2)) ter_set(i,j,t_dirtfloor); - if (one_in(4)) ter_set(i,j,t_dirtmound); - if (one_in(2)) ter_set(i,j,t_wreckage); - place_items("trash", 50, i, j, i, j, false, 0); - place_items("sewer", 50, i, j, i, j, false, 0); - if (one_in(5)){ - if (one_in(10))add_spawn("mon_zombie_child", 1, i, j); - else if (one_in(15))add_spawn("mon_zombie_fast", 1, i, j); - else add_spawn("mon_zombie", 1, i, j); - } - } - } - } - if (t_west == ot_haz_sar_entrance_b1){ - rotate(1);} - else if (t_north == ot_haz_sar_entrance_b1){ - rotate(2);} - else if (t_east == ot_haz_sar_entrance_b1){ - rotate(3);} - } - - else if ((t_west == ot_haz_sar_entrance_b1 && t_north == ot_haz_sar_b1) || (t_north == ot_haz_sar_entrance_b1 && t_east == ot_haz_sar_b1) || (t_west == ot_haz_sar_b1 && t_south == ot_haz_sar_entrance_b1) || - (t_south == ot_haz_sar_b1 && t_east == ot_haz_sar_entrance_b1)) { - mapf::formatted_set_simple(this, 0, 0, -"\ -....M..|,,,,|........###\n\ -.......|-HH=|.........##\n\ -.....................###\n\ -......................##\n\ -......................|#\n\ -......................$.\n\ -......................$.\n\ -......................$.\n\ -......................$.\n\ -......................$.\n\ -.....................M|#\n\ -....................####\n\ -..................######\n\ -###....M.........#######\n\ -#####|--$$$$$--|########\n\ -|----|_________|----|###\n\ -|___________________|###\n\ -|___________________|###\n\ -|___________________|###\n\ -|___________________|###\n\ -|___________________|###\n\ -|___________________|###\n\ -|___________________|###\n\ -|-------------------|###\n", - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->ter(i,j) == t_rock_floor){ - if (one_in(250)){ - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(i, j, body); - place_items("science", 70, i, j, i, j, true, 0);} - else if (one_in(80))add_spawn("mon_zombie", 1, i, j); - } - if (this->ter(i,j) != t_metal_floor) - radiation(x, y) += rng(10, 70); - if (this->ter(i,j) == t_sewage){ - if (one_in(2)) ter_set(i,j,t_dirtfloor); - if (one_in(4)) ter_set(i,j,t_dirtmound); - if (one_in(2)) ter_set(i,j,t_wreckage); - place_items("trash", 50, i, j, i, j, false, 0); - place_items("sewer", 50, i, j, i, j, false, 0); - if (one_in(5)){ - if (one_in(10))add_spawn("mon_zombie_child", 1, i, j); - else if (one_in(15))add_spawn("mon_zombie_fast", 1, i, j); - else add_spawn("mon_zombie", 1, i, j); - } - } - } - } - if (t_north == ot_haz_sar_entrance_b1) - rotate(1); - if (t_east == ot_haz_sar_entrance_b1) - rotate(2); - if (t_south == ot_haz_sar_entrance_b1) - rotate(3); - } - - else { - mapf::formatted_set_simple(this, 0, 0, -"\ -...#####################\n\ -$$$--###################\n\ -...M..#|----------|#####\n\ -.......|__________|#####\n\ -.......$__________|#####\n\ -.......$__________|#####\n\ -.......$__________|#####\n\ -.......$__________|#####\n\ -.......$__________|#####\n\ -......M|__________|#####\n\ -......#|----------|#####\n\ -.....###################\n\ -....####|---|----|######\n\ -###.##|-|,,,|,S,T|######\n\ -#|-=-||&|,,,+,,,,|######\n\ -#|,,l|EE+,,,|----|-|####\n\ -#|,,l|EE+,,,|ddd,,l|####\n\ --|-$-|--|,,,V,h,,,l|####\n\ -,,,,,|,,=,,,V,,,,,,|####\n\ -,,,,,|rr|,,,V,,,,c,|####\n\ -,,,,,|--|,,,|,,,hc,|####\n\ -,,,,,+,,,,,,+,,c6c,|####\n\ -,,,,M|,,,,,,|r,,,,,|####\n\ -$$$$-|-|=HH-|-HHHH-|####\n", - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), - mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); - spawn_item(3, 16, "sarcophagus_access_code", 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_locker) - place_items("cleaning", 60, i, j, i, j, false, 0); - if (this->furn(i,j) == f_desk) - place_items("cubical_office", 60, i, j, i, j, false, 0); - if (this->furn(i,j) == f_rack) - place_items("sewage_plant", 60, i, j, i, j, false, 0); - if (this->ter(i,j) == t_rock_floor){ - if (one_in(250)){ - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - add_item(i, j, body); - place_items("science", 70, i, j, i, j, true, 0);} - else if (one_in(80))add_spawn("mon_zombie", 1, i, j); - } - if (this->ter(i,j) != t_metal_floor) - radiation(x, y) += rng(10, 70); - if (this->ter(i,j) == t_sewage){ - if (one_in(2)) ter_set(i,j,t_dirtfloor); - if (one_in(4)) ter_set(i,j,t_dirtmound); - if (one_in(2)) ter_set(i,j,t_wreckage); - place_items("trash", 50, i, j, i, j, false, 0); - place_items("sewer", 50, i, j, i, j, false, 0); - if (one_in(5)){ - if (one_in(10))add_spawn("mon_zombie_child", 1, i, j); - else if (one_in(15))add_spawn("mon_zombie_fast", 1, i, j); - else add_spawn("mon_zombie", 1, i, j); - } - } - } - } - tmpcomp = add_computer(16, 21, _("SRCF Security Terminal"), 0); - tmpcomp->add_option(_("Security Reminder [1055]"), COMPACT_SR1_MESS, 0); - tmpcomp->add_option(_("Security Reminder [1056]"), COMPACT_SR2_MESS, 0); - tmpcomp->add_option(_("Security Reminder [1057]"), COMPACT_SR3_MESS, 0); - //tmpcomp->add_option(_("Security Reminder [1058]"), COMPACT_SR4_MESS, 0); limited to 9 computer options - tmpcomp->add_option(_("EPA: Report All Potential Containment Breaches [3873643]"), COMPACT_SRCF_1_MESS, 2); - tmpcomp->add_option(_("SRCF: Internal Memo, EPA [2918024]"), COMPACT_SRCF_2_MESS, 2); - tmpcomp->add_option(_("CDC: Internal Memo, Standby [2918115]"), COMPACT_SRCF_3_MESS, 2); - tmpcomp->add_option(_("USARMY: SEAL SRCF [987167]"), COMPACT_SRCF_SEAL_ORDER, 4); - tmpcomp->add_option(_("COMMAND: REACTIVATE ELEVATOR"), COMPACT_SRCF_ELEVATOR, 0); - tmpcomp->add_failure(COMPFAIL_ALARM); - if (t_west == ot_haz_sar_b1 && t_north == ot_haz_sar_b1) - rotate(1); - if (t_east == ot_haz_sar_b1 && t_north == ot_haz_sar_b1) - rotate(2); - if (t_east == ot_haz_sar_b1 && t_south == ot_haz_sar_b1) - rotate(3); - } -}break; - - case ot_cave: - - if (t_above == ot_cave) { - // We're underground! - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - bool floorHere = (rng(0, 6) < i || SEEX * 2 - rng(1, 7) > i || - rng(0, 6) < j || SEEY * 2 - rng(1, 7) > j ); - if (floorHere) { - ter_set(i, j, t_rock_floor); - } else { - ter_set(i, j, t_rock); - } - } - } - square(this, t_slope_up, SEEX - 1, SEEY - 1, SEEX, SEEY); - item body; - switch(rng(1, 10)) { - case 1: - // natural refuse - place_items("monparts", 80, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - break; - case 2: - // trash - place_items("trash", 70, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - break; - case 3: - // bat corpses - for (int i = rng(1,12); i < 0; i--) { - body.make_corpse(g->itypes["corpse"], GetMType("mon_bat"), g->turn); - add_item(rng(1, SEEX * 2 - 1), rng(1, SEEY * 2 - 1), body); - } - break; - case 4: - // ant food, chance of 80 - place_items("ant_food", 85, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - break; - case 5: - { - // hermitage - int origx = rng(SEEX - 1, SEEX), - origy = rng(SEEY - 1, SEEY), - hermx = rng(SEEX - 6, SEEX + 5), - hermy = rng(SEEX - 6, SEEY + 5); - std::vector bloodline = line_to(origx, origy, hermx, hermy, 0); - for (int ii = 0; ii < bloodline.size(); ii++) { - add_field(g, bloodline[ii].x, bloodline[ii].y, fd_blood, 2); - } - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), g->turn); - add_item(hermx, hermy, body); - // This seems verbose. Maybe a function to spawn from a list of item groups? - place_items("stash_food", 50, hermx-1, hermy-1, hermx+1, hermy+1, true, 0); - place_items("survival_tools", 50, hermx-1, hermy-1, hermx+1, hermy+1, true, 0); - place_items("survival_armor", 50, hermx-1, hermy-1, hermx+1, hermy+1, true, 0); - place_items("weapons", 40, hermx-1, hermy-1, hermx+1, hermy+1, true, 0); - place_items("magazines", 40, hermx-1, hermy-1, hermx+1, hermy+1, true, 0); - place_items("rare", 30, hermx-1, hermy-1, hermx+1, hermy+1, true, 0); - break; - } - default: - // nothing, half the time - break; - } - place_spawns(g, "GROUP_CAVE", 2, 6, 6, 18,18, 1.0); - } else { // We're above ground! - // First, draw a forest - draw_map(ot_forest, t_north, t_east, t_south, t_west, t_neast, t_seast, t_nwest, t_swest, - t_above, turn, g, density, zlevel); - // Clear the center with some rocks - square(this, t_rock, SEEX-6, SEEY-6, SEEX+5, SEEY+5); - int pathx, pathy; - if (one_in(2)) { - pathx = rng(SEEX - 6, SEEX + 5); - pathy = (one_in(2) ? SEEY - 8 : SEEY + 7); - } else { - pathx = (one_in(2) ? SEEX - 8 : SEEX + 7); - pathy = rng(SEEY - 6, SEEY + 5); - } - std::vector pathline = line_to(pathx, pathy, SEEX - 1, SEEY - 1, 0); - for (int ii = 0; ii < pathline.size(); ii++) { - square(this, t_dirt, pathline[ii].x, pathline[ii].y, - pathline[ii].x + 1, pathline[ii].y + 1); - } - while (!one_in(8)) { - ter_set(rng(SEEX - 6, SEEX + 5), rng(SEEY - 6, SEEY + 5), t_dirt); - } - square(this, t_slope_down, SEEX - 1, SEEY - 1, SEEX, SEEY); - } - break; - - case ot_cave_rat: - fill_background(this, t_rock); - - if (t_above == ot_cave_rat) { // Finale - rough_circle(this, t_rock_floor, SEEX, SEEY, 8); - square(this, t_rock_floor, SEEX - 1, SEEY, SEEX, SEEY * 2 - 2); - line(this, t_slope_up, SEEX - 1, SEEY * 2 - 3, SEEX, SEEY * 2 - 2); - for (int i = SEEX - 4; i <= SEEX + 4; i++) { - for (int j = SEEY - 4; j <= SEEY + 4; j++) { - if ((i <= SEEX - 2 || i >= SEEX + 2) && (j <= SEEY - 2 || j >= SEEY + 2)) - add_spawn("mon_sewer_rat", 1, i, j); - } - } - add_spawn("mon_rat_king", 1, SEEX, SEEY); - place_items("rare", 75, SEEX - 4, SEEY - 4, SEEX + 4, SEEY + 4, true, 0); - } else { // Level 1 - int cavex = SEEX, cavey = SEEY * 2 - 3; - int stairsx = SEEX - 1, stairsy = 1; // Default stairs location--may change - int centerx = 0; - do { - cavex += rng(-1, 1); - cavey -= rng(0, 1); - for (int cx = cavex - 1; cx <= cavex + 1; cx++) { - for (int cy = cavey - 1; cy <= cavey + 1; cy++) { - ter_set(cx, cy, t_rock_floor); - if (one_in(10)) - add_field(g, cx, cy, fd_blood, rng(1, 3)); - if (one_in(20)) - add_spawn("mon_sewer_rat", 1, cx, cy); - } - } - if (cavey == SEEY - 1) - centerx = cavex; - } while (cavey > 2); -// Now draw some extra passages! - do { - int tox = (one_in(2) ? 2 : SEEX * 2 - 3), toy = rng(2, SEEY * 2 - 3); - std::vector path = line_to(centerx, SEEY - 1, tox, toy, 0); - for (int i = 0; i < path.size(); i++) { - for (int cx = path[i].x - 1; cx <= path[i].x + 1; cx++) { - for (int cy = path[i].y - 1; cy <= path[i].y + 1; cy++) { - ter_set(cx, cy, t_rock_floor); - if (one_in(10)) - add_field(g, cx, cy, fd_blood, rng(1, 3)); - if (one_in(20)) - add_spawn("mon_sewer_rat", 1, cx, cy); - } - } - } - if (one_in(2)) { - stairsx = tox; - stairsy = toy; - } - } while (one_in(2)); -// Finally, draw the stairs up and down. - ter_set(SEEX - 1, SEEX * 2 - 2, t_slope_up); - ter_set(SEEX , SEEX * 2 - 2, t_slope_up); - ter_set(stairsx, stairsy, t_slope_down); - } - break; - - case ot_sub_station_north: - case ot_sub_station_east: - case ot_sub_station_south: - case ot_sub_station_west: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j < 9 || j > 12 || i < 4 || i > 19) - ter_set(i, j, t_pavement); - else if (j < 12 && j > 8 && (i == 4 || i == 19)) - ter_set(i, j, t_wall_v); - else if (i > 3 && i < 20 && j == 12) - ter_set(i, j, t_wall_h); - else - ter_set(i, j, t_floor); - } - } - ter_set(16, 10, t_stairs_down); - if (terrain_type == ot_sub_station_east) - rotate(1); - if (terrain_type == ot_sub_station_south) - rotate(2); - if (terrain_type == ot_sub_station_west) - rotate(3); - break; - -case ot_s_garage_north: - case ot_s_garage_east: - case ot_s_garage_south: - case ot_s_garage_west: - { - fill_background(this, &grass_or_dirt); - int yard_wdth = 5; - square(this, t_floor, 0, yard_wdth, SEEX * 2 - 4, SEEY * 2 - 4); - line(this, t_wall_v, 0, yard_wdth, 0, SEEY*2-4); - line(this, t_wall_v, SEEX * 2 - 3, yard_wdth, SEEX * 2 - 3, SEEY*2-4); - line(this, t_wall_h, 0, SEEY*2-4, SEEX * 2 - 3, SEEY*2-4); - line(this, t_window, 0, SEEY*2-4, SEEX * 2 - 14, SEEY*2-4); - line(this, t_wall_h, 0, SEEY*2-4, SEEX * 2 - 20, SEEY*2-4); - line(this, t_wall_h, 0, yard_wdth, 2, yard_wdth); - line(this, t_wall_h, 8, yard_wdth, 13, yard_wdth); - line(this, t_wall_h, 20, yard_wdth, 21, yard_wdth); - line_furn(this, f_counter, 1, yard_wdth+1, 1, yard_wdth+7); - line(this, t_wall_h, 1, SEEY*2-9, 3, SEEY*2-9); - line(this, t_wall_v, 3, SEEY*2-8, 3, SEEY*2-5); - ter_set(3, SEEY*2-7, t_door_frame); - ter_set(21, SEEY*2-7, t_door_c); - line_furn(this, f_counter,4, SEEY*2-5, 15, SEEY*2-5); - //office - line(this, t_wall_glass_h, 16, SEEY*2-9 ,20, SEEY*2-9); - line(this, t_wall_glass_v, 16, SEEY*2-8, 16, SEEY*2-5); - ter_set(16, SEEY*2-7, t_door_glass_c); - line_furn(this, f_bench, SEEX*2-6, SEEY*2-8, SEEX*2-4, SEEY*2-8); - ter_set(SEEX*2-6, SEEY*2-6, t_console_broken); - furn_set(SEEX*2-5, SEEY*2-6, f_bench); - line_furn(this, f_locker, SEEX*2-6, SEEY*2-5, SEEX*2-4, SEEY*2-5); - //gates - line(this, t_door_metal_locked, 3, yard_wdth, 8, yard_wdth); - ter_set(2, yard_wdth+1, t_gates_mech_control); - ter_set(2, yard_wdth-1, t_gates_mech_control); - line(this, t_door_metal_locked, 14, yard_wdth, 19, yard_wdth ); - ter_set(13, yard_wdth+1, t_gates_mech_control); - ter_set(13, yard_wdth-1, t_gates_mech_control); - - //place items - place_items("mechanics", 90, 1, yard_wdth+1, 1, yard_wdth+7, true, 0); - place_items("mechanics", 90, 4, SEEY*2-5, 15, SEEY*2-5, true, 0); - - // rotate garage - - int vy = 0, vx = 0, theta = 0; - - if (terrain_type == ot_s_garage_north) { - vx = 5, vy = yard_wdth + 6; - theta = 90; - } else if (terrain_type == ot_s_garage_east) { - rotate(1); - vx = yard_wdth + 8, vy = 4; - theta = 0; - } else if (terrain_type == ot_s_garage_south) { - rotate(2); - vx = SEEX * 2 - 6, vy = SEEY * 2 - (yard_wdth + 3); - theta = 270; - } else if (terrain_type == ot_s_garage_west) { - rotate(3); - vx = SEEX * 2 - yard_wdth - 9, vy = SEEY * 2 - 5; - theta = 180; - } - - // place vehicle, if any - if (one_in(3)) { - std::string vt; - int vehicle_type = rng(1, 8); - if(vehicle_type <= 3) { - vt = one_in(2) ? "car" : "car_chassis"; - } else if(vehicle_type <= 5) { - vt = one_in(2) ? "quad_bike" : "quad_bike_chassis"; - } else if(vehicle_type <= 7) { - vt = one_in(2) ? "motorcycle" : "motorcycle_chassis"; - } else { - vt = "welding_cart"; - } - add_vehicle (g, vt, vx, vy, theta, -1, -1); - } - } - break; - -case ot_cabin: - fill_background(this, t_grass); - - //Cabin design 1 Quad - if (one_in(2)) { - square(this, t_wall_log, 2, 3, 21, 20); - square(this, t_floor, 2, 17, 21, 20);//Front porch - line(this, t_fence_v, 2, 17, 2, 20); - line(this, t_fence_v, 21, 17, 21, 20); - line(this, t_fence_h, 2, 20, 21, 20); - ter_set(2, 17, t_column); - ter_set(2, 20, t_column); - ter_set(21, 17, t_column); - ter_set(21, 20, t_column); - ter_set(10, 20, t_column); - ter_set(13, 20, t_column); - line(this, t_fencegate_c, 11, 20, 12, 20); - line_furn(this, f_bench, 4, 17, 7, 17); - square(this, t_rubble, 19, 18, 20, 19); - ter_set(20, 17, t_rubble); - ter_set(18, 19, t_rubble); //Porch done - line(this, t_door_c, 11, 16, 12, 16);//Interior - square(this, t_floor, 3, 4, 9, 9); - square(this, t_floor, 3, 11, 9, 15); - square(this, t_floor, 11, 4, 12, 15); - square(this, t_floor, 14, 4, 20, 9); - square(this, t_floor, 14, 11, 20, 15); - line(this, t_wall_log, 7, 4, 7, 8); - square(this, t_wall_log, 8, 8, 9, 9); - line_furn(this, f_rack, 3, 4, 3, 9); //Pantry Racks - line(this, t_curtains, 2, 6, 2, 7); //Windows start - line(this, t_curtains, 2, 12, 2, 13); - line(this, t_window_domestic, 5, 16, 6, 16); - line(this, t_window_domestic, 17, 16, 18, 16); - line(this, t_curtains, 21, 12, 21, 13); - line(this, t_window_empty, 21, 6, 21, 7); - ter_set(8, 3, t_curtains);//Windows End - line(this, t_door_c, 11, 3, 12, 3);//Rear Doors - square(this, t_rubble, 20, 3, 21, 4); - ter_set(19, 3, t_rubble); - ter_set(21, 5, t_rubble); - furn_set(6, 4, f_desk); - furn_set(6, 5, f_chair); - furn_set(7, 9, f_locker); - ter_set(6, 10, t_door_c); - ter_set(10, 6, t_door_c); - square_furn(this, f_table, 3, 11, 4, 12); - line_furn(this, f_bench, 5, 11, 5, 12); - line_furn(this, f_bench, 3, 13, 4, 13); - line_furn(this, f_cupboard, 3, 15, 7, 15); - furn_set(4, 15, f_fridge); - furn_set(5, 15, f_sink); - furn_set(6, 15, f_oven); - ter_set(10, 13, t_door_c); - ter_set(13, 13, t_door_c); - furn_set(14, 11, f_armchair); - line_furn(this, f_sofa, 16, 11, 18, 11); - square(this, t_rock_floor, 18, 13, 20, 15); - furn_set(19, 14, f_woodstove); - ter_set(19, 10, t_door_c); - line_furn(this, f_bookcase, 14, 9, 17, 9); - square_furn(this, f_bed, 17, 4, 18, 5); - furn_set(16, 4, f_dresser); - furn_set(19, 4, f_dresser); - ter_set(13, 6, t_door_c); - place_toilet(9, 4); - line_furn(this, f_bathtub, 8, 7, 9, 7); - furn_set(8, 5, f_sink); - place_items("fridge", 65, 4, 15, 4, 15, false, 0); - place_items("homeguns", 30, 7, 9, 7, 9, false, 0); - place_items("home_hw", 60, 7, 9, 7, 9, false, 0); - place_items("kitchen", 60, 3, 15, 3, 15, false, 0); - place_items("kitchen", 60, 7, 15, 7, 15, false, 0); - place_items("dining", 60, 3, 11, 4, 12, false, 0); - place_items("trash", 60, 0, 0, 23, 23, false, 0); - place_items("survival_tools", 30, 3, 4, 3, 9, false, 0); - place_items("cannedfood", 50, 3, 4, 3, 9, false, 0); - place_items("camping", 50, 4, 4, 6, 9, false, 0); - place_items("magazines", 60, 14, 9, 17, 9, false, 0); - place_items("manuals", 30, 14, 9, 17, 9, false, 0); - place_items("dresser", 50, 16, 4, 16, 4, false, 0); - place_items("dresser", 50, 19, 4, 19, 4, false, 0); - place_items("softdrugs", 60, 8, 4, 9, 7, false, 0); - place_items("livingroom", 50, 14, 12, 17, 15, false, 0); - add_spawn("mon_zombie", rng(1, 5), 11, 12); - - } else { - square(this, t_wall_log, 4, 2, 10, 6); - square(this, t_floor, 5, 3, 9, 5); - square(this, t_wall_log, 3, 9, 20, 20); - square(this, t_floor, 4, 10, 19, 19); - line(this, t_fence_h, 0, 0, 23, 0); - line(this, t_fence_v, 0, 0, 0, 22); - line(this, t_fence_v, 23, 0, 23, 22); - line(this, t_fence_h, 0, 23, 23, 23); - line(this, t_fencegate_c, 11, 23, 12, 23); - line_furn(this, f_locker, 5, 3, 9, 3); - line_furn(this, f_counter, 6, 3, 8, 3); - ter_set(4, 4, t_window_boarded); - ter_set(10, 4, t_window_boarded); - ter_set(7, 6, t_door_c); - ter_set(9, 9, t_door_c); - line(this, t_window_domestic, 13, 9, 14, 9); - square(this, t_rock, 5, 10, 7, 11); - line(this, t_rock_floor, 5, 12, 7, 12); - set(6, 11, t_rock_floor, f_woodstove); - line_furn(this, f_dresser, 16, 10, 19, 10); - square_furn(this, f_bed, 17, 10, 18, 11); - line(this, t_window_domestic, 3, 14, 3, 15); - line_furn(this, f_sofa, 5, 16, 7, 16); - square_furn(this, f_chair, 10, 14, 13, 15); - square_furn(this, f_table, 11, 14, 12, 15); - line(this, t_window_domestic, 20, 14, 20, 15); - line(this, t_window_domestic, 7, 20, 8, 20); - line(this, t_window_domestic, 16, 20, 17, 20); - ter_set(12, 20, t_door_c); - place_items("livingroom", 60, 4, 13, 8, 18, false, 0); - place_items("dining", 60, 11, 14, 12, 15, false, 0); - place_items("camping", 70, 19, 16, 19, 19, false, 0); - place_items("dresser", 70, 16, 10, 16, 10, false, 0); - place_items("dresser", 70, 19, 10, 19, 10, false, 0); - place_items("tools", 70, 5, 3, 9, 3, false, 0); - add_spawn("mon_zombie", rng(1, 5), 7, 4); - } - - break; - - - case ot_cabin_strange: { -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ -^ FfffffffffffGfffffF \n\ - F F \n\ - F ^ F \n\ - ^F |-w---| F \n\ - F |cSecu|sssss F \n\ - |-w-|O....=sssss|---| \n\ - |H.T|c...u|-w-w-|>..w \n\ - |H..+....u|d....|-|-| \n\ - |..S|.....+.....+.|r| \n\ - |-+-|.....|...bb|r|.| \n\ - |.........|---|-|-|+| \n\ - w...hh....aaaa|.d...| \n\ - |..htth.......|.....w \n\ - w..htth.......D..bb.w \n\ - w...hh.......o|..bb.| \n\ - |o...........A|-----| \n\ - w.............|d.bb.| \n\ - |.............+..bb.w \n\ - |-+|-w-==-w-|-|.....| \n\ - |r.|ssssssss|r+.....| \n\ - |--|ssssssss|-|--w--| \n\ - ssCssssCss \n\ - ^ ^ \n", - mapf::basic_bind("% ^ f F G H u a A b C . - | t + = D w T S e o h c d r s O >", t_shrub, t_tree, t_fence_h, t_fence_v, t_fencegate_c, t_floor, t_floor, t_floor, t_floor, t_floor, t_column, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_boarded, t_door_locked_interior, t_window_boarded, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor, t_stairs_down), - mapf::basic_bind("% ^ f F G H u a A b C . - | t + = D w T S e o h c d r s O >", f_null, f_null, f_null, f_null, f_null, f_bathtub, f_cupboard, f_sofa, f_armchair, f_bed, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_rack, f_null, f_oven, f_null)); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_fridge) - place_items("fridgesnacks", 30, i, j, i, j, true, 0); - if (this->furn(i,j) == f_cupboard) - place_items("cannedfood", 30, i, j, i, j, true, 0); - if (this->furn(i,j) == f_rack || this->furn(i,j) == f_dresser) - place_items("dresser", 40, i, j, i, j, true, 0); - if (this->furn(i,j) == f_bookcase) - place_items("novels", 40, i, j, i, j, true, 0); - if (this->ter(i,j) == t_floor) - place_items("subway", 10, i, j, i, j, true, 0); - } - } - } break; - - case ot_cabin_strange_b: { -// Init to grass & dirt; - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ -########################\n\ -################...h...#\n\ -########c.cc####.httth.#\n\ -###T..##c....+...ht.th.#\n\ -###...G....c####.......#\n\ -###bb.##....############\n\ -##########D###|---|---|#\n\ -##########.###|cdc|<..|#\n\ -##.hhh.##...##|.h.|-D-|#\n\ -#.......#.C.##|-+-|..h##\n\ -#.hh.hh.D...##c......c##\n\ -#.......#.C.##ccC..Ccc##\n\ -#.hh.hh.#...##cc.....r##\n\ -#.......#.C.##ccC..C.r##\n\ -#.hh.hh.#...##tt..ch.r##\n\ -#.......#.C.##ttCccC..##\n\ -#.......#............A##\n\ -#...t...#.C..C.cC..C..##\n\ -##.....##..h..ccccbbo.##\n\ -###+#+##################\n\ -##.....#################\n\ -##.....#################\n\ -##.....#################\n\ -########################\n", - mapf::basic_bind("G A b C . - | t + = D o h c d r < # T", t_door_bar_locked, t_dirtfloor, t_dirtfloor, t_column, t_dirtfloor, t_wall_h, t_wall_v, t_dirtfloor, t_door_c, t_door_boarded, t_door_locked_interior, t_dirtfloor, t_dirtfloor, t_floor, t_dirtfloor, t_dirtfloor, t_stairs_up, t_rock, t_dirtfloor), - mapf::basic_bind("G A b C . - | t + = D o h c d r < # T", f_null, f_armchair, f_bed, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_bookcase, f_chair, f_crate_o, f_desk, f_rack, f_null, f_null, f_toilet)); - spawn_item(2, 17, "brazier", 0); - spawn_item(6, 17, "brazier", 0); - spawn_item(4, 17, "etched_skull", 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_crate_c) - place_items("dresser", 20, i, j, i, j, true, 0); - if (this->furn(i,j) == f_cupboard || this->furn(i,j) == f_rack) - place_items("cannedfood", 30, i, j, i, j, true, 0); - if (this->furn(i,j) == f_bookcase) - place_items("novels", 40, i, j, i, j, true, 0); - if (this->ter(i,j) == t_dirtfloor) - place_items("subway", 10, i, j, i, j, true, 0); - } - } - add_spawn("mon_dementia", rng(3, 6), 4, 12); - add_spawn("mon_dementia", rng(1, 4), 19, 2); - add_spawn("mon_blood_sacrifice", 1, 4, 21); - } break; - - case ot_farm:{ - if (!one_in(10)) { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - %%% %%% \n\ -###++### |-w---+-----w-|\n\ -#DD____# |uSeuu........|\n\ -#D_____# |o............|\n\ -#_1__1_# |u..........H.|\n\ -#______# |u...|---+----|\n\ -#______# |-+-||kh......|\n\ -#_1__1_# |...|.........w\n\ -#______# |b..+......BB.|\n\ -#____ll# |.ST|.....dBBd|\n\ -###++### |-w-|----w----|\n\ - \n\ - \n\ -FFFFFFFFFFFFFFFFFFFFFFFF\n\ -,,,,,,,,,,,,,,,,,,,,,,,,\n", - mapf::basic_bind(", F . _ H u e S T o b l # % 1 D + - | w k h B d", t_dirt, t_fence_barbed, t_floor, t_dirtfloor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_wall_wood, t_shrub, t_column, t_dirtmound, t_door_c, t_wall_h, t_wall_v, t_window_domestic, t_floor, t_floor, t_floor, t_floor), - mapf::basic_bind(", F . _ H u e S T o b l # % 1 D + - | w k h B d", f_null, f_null, f_null, f_null, f_armchair, f_cupboard, f_fridge, f_sink, f_toilet, f_oven, f_bathtub, f_locker, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_desk, f_chair, f_bed, f_dresser)); - place_items("fridge", 65, 12, 11, 12, 11, false, 0); - place_items("kitchen", 70, 10, 11, 14, 3, false, 0); - place_items("livingroom", 65, 15, 11, 22, 13, false, 0); - place_items("dresser", 80, 19, 18, 19, 18, false, 0); - place_items("dresser", 80, 22, 18, 22, 18, false, 0); - place_items("bedroom", 65, 15, 15, 22, 18, false, 0); - place_items("softdrugs", 70, 11, 16, 12, 17, false, 0); - place_items("bigtools", 50, 1, 11, 6, 18, true, 0); - place_items("homeguns", 20, 1, 11, 6, 18, true, 0); - if (one_in(2)) { - add_spawn("mon_zombie", rng(1, 6), 4, 14); - } else { - place_spawns(g, "GROUP_DOMESTIC", 2, 10, 15, 12, 17, 1); - } - } else { - fill_background(this, &grass_or_dirt); - mapf::formatted_set_simple(this, 0, 0, -"\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - %%% %%% \n\ -###++### |-w---+-----w-|\n\ -#DD____# |uSeuu..mm....|\n\ -#D_____# |o...........m|\n\ -#_1__1_# |u...........m|\n\ -#______# |u...|---+----|\n\ -#______# |-+-||mm....mm|\n\ -#_1__1_# |...|.........w\n\ -#______# |b..+......BB.|\n\ -#____ll# |.ST|mm...dBBd|\n\ -###++### |-w-|----w----|\n\ - \n\ - \n\ -FFFFFFFFFFFFFFFFFFFFFFFF\n\ -,,,,,,,,,,,,,,,,,,,,,,,,\n", - mapf::basic_bind("m , F . _ H u e S T o b l # % 1 D + - | w k h B d", t_floor, t_dirt, t_fence_barbed, t_floor, t_dirtfloor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_wall_wood, t_shrub, t_column, t_dirtmound, t_door_c, t_wall_h, t_wall_v, t_window_domestic, t_floor, t_floor, t_floor, t_floor), - mapf::basic_bind("m , F . _ H u e S T o b l # % 1 D + - | w k h B d", f_makeshift_bed, f_null, f_null, f_null, f_null, f_armchair, f_cupboard, f_fridge, f_sink, f_toilet, f_oven, f_bathtub, f_locker, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_desk, f_chair, f_bed, f_dresser)); - place_items("cannedfood", 65, 12, 11, 12, 11, false, 0); - place_items("bigtools", 50, 1, 11, 6, 18, true, 0); - place_items("homeguns", 20, 1, 11, 6, 18, true, 0); - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->furn(i,j) == f_dresser) - place_items("dresser", 50, i, j, i, j, false, 0); - if (this->ter(i,j) == t_floor) - place_items("trash", 20, i, j, i, j, false, 0); - if (this->furn(i,j) == f_cupboard){ - place_items("kitchen", 70, i, j, i, j, false, 0); - place_items("softdrugs", 40, i, j, i, j, false, 0); - place_items("cannedfood", 40, i, j, i, j, false, 0);} - if (this->furn(i,j) == f_makeshift_bed || this->furn(i,j) == f_bed){ - place_items("livingroom", 20, i, j, i, j, false, 0); - place_items("survival_armor", 20, i, j, i, j, false, 0); - place_items("camping", 20, i, j, i, j, false, 0); - place_items("survival_tools", 20, i, j, i, j, false, 0);} - if (this->ter(i,j) == t_grass){ - if (one_in(20)) add_trap(i, j, tr_beartrap); - if (one_in(20)) add_trap(i, j, tr_tripwire); - if (one_in(15)) add_trap(i, j, tr_pit);} - } - } - } - } - break; - -case ot_farm_field: - //build barn - if (t_east == ot_farm) { - fill_background(this, &grass_or_dirt); - square(this, t_wall_wood, 3, 3, 20, 20); - square(this, t_dirtfloor, 4, 4, 19, 19); - line(this, t_door_metal_locked, 8, 20, 15, 20); - ter_set(16, 19, t_barndoor); - ter_set(16, 21, t_barndoor); - line(this, t_door_metal_locked, 8, 3, 15, 3); - ter_set(16, 2, t_barndoor); - ter_set(16, 4, t_barndoor); - square_furn(this, f_hay, 4, 4, 6, 6); - line(this, t_fence_h, 4, 8, 6, 8); - line(this, t_fence_v, 6, 9, 6, 14); - line(this, t_fence_h, 4, 15, 6, 15); - line(this, t_fencegate_c, 6, 11, 6, 12); - - line(this, t_fence_h, 17, 8, 19, 8); - line(this, t_fence_v, 17, 9, 17, 14); - line(this, t_fence_h, 17, 15, 19, 15); - line(this, t_fencegate_c, 17, 11, 17, 12); - line_furn(this, f_locker, 4, 19, 7, 19); - ter_set(7, 7, t_column); - ter_set(16, 7, t_column); - ter_set(7, 16, t_column); - ter_set(16, 16, t_column); - ter_set(5, 3, t_window_boarded); - ter_set(18, 3, t_window_boarded); - line(this, t_window_boarded, 3, 5, 3, 6); - line(this, t_window_boarded, 3, 11, 3, 12); - line(this, t_window_boarded, 3, 17, 3, 18); - line(this, t_window_boarded, 20, 5, 20, 6); - line(this, t_window_boarded, 20, 11, 20, 12); - line(this, t_window_boarded, 20, 17, 20, 18); - ter_set(5, 20, t_window_boarded); - ter_set(18, 20, t_window_boarded); - - if(t_south == ot_farm_field){ - square(this, t_fence_barbed, 1, 20, 1, 23); - ter_set(2, 20, t_fence_barbed); - ter_set(1, 20, t_fence_post); - square(this, t_fence_barbed, 22, 20, 22, 22); - ter_set(21, 20, t_fence_barbed); - ter_set(23, 22, t_fence_barbed); - ter_set(22, 22, t_fence_post); - ter_set(22, 20, t_fence_post); - square(this, t_dirt, 2, 21, 21, 23); - square(this, t_dirt, 22, 23, 23, 23); - ter_set(16, 21, t_barndoor); - } - place_items("bigtools", 60, 4, 4, 7, 19, true, 0); - place_items("bigtools", 60, 16, 5, 19, 19, true, 0); - place_items("mechanics", 40, 8, 4, 15, 19, true, 0); - place_items("home_hw", 50, 4, 19, 7, 19, true, 0); - place_items("tools", 50, 4, 19, 7, 19, true, 0); - if (one_in(3)) { - add_spawn("mon_zombie", rng(3, 6), 12, 12); - } else { - place_spawns(g, "GROUP_DOMESTIC", 2, 0, 0, 15, 15, 1); - } - - } else { - fill_background(this, t_grass); // basic lot - square(this, t_fence_barbed, 1, 1, 22, 22); - square(this, t_dirt, 2, 2, 21, 21); - ter_set(1, 1, t_fence_post); - ter_set(22, 1, t_fence_post); - ter_set(1, 22, t_fence_post); - ter_set(22, 22, t_fence_post); - - int xStart = 4; - int xEnd = 19; - //acidia, connecting fields - if(t_east == ot_farm_field){ - square(this, t_fence_barbed, 22, 1, 23, 22); - square(this, t_dirt, 21, 2, 23, 21); - xEnd = 22; - } - if(t_west == ot_farm_field){ - square(this, t_fence_barbed, 0, 1, 1, 22); - square(this, t_dirt, 0, 2, 2, 21); - xStart = 1; - } - if(t_south == ot_farm_field){ - square(this, t_fence_barbed, 1, 22, 22, 23); - square(this, t_dirt, 2, 21, 21, 23); - line(this, t_dirtmound, xStart, 21, xEnd, 21); - if(t_east == ot_farm_field){square(this, t_dirt, 20, 20, 23, 23);} - if(t_west == ot_farm_field){square(this, t_dirt, 0, 20, 3, 23);} - } - if(t_north == ot_farm_field || t_north == ot_farm){ - square(this, t_fence_barbed, 1, 0, 22, 1); - square(this, t_dirt, 2, 0, 21, 2); - line(this, t_dirtmound, xStart, 1, xEnd, 1); - if(t_east == ot_farm_field){square(this, t_dirt, 20, 0, 23, 3);} - if(t_west == ot_farm_field){square(this, t_dirt, 0, 0, 3, 3);} - } - if(t_west == ot_farm){ - square(this, t_fence_barbed, 0, 22, 1, 22); - square(this, t_dirt, 0, 23, 2, 23); - ter_set(1, 22, t_fence_post); - } - //standard field - line(this, t_dirtmound, xStart, 3, xEnd, 3); //Crop rows - line(this, t_dirtmound, xStart, 5, xEnd, 5); - line(this, t_dirtmound, xStart, 7, xEnd, 7); - line(this, t_dirtmound, xStart, 9, xEnd, 9); - line(this, t_dirtmound, xStart, 11, xEnd, 11); - line(this, t_dirtmound, xStart, 13, xEnd, 13); - line(this, t_dirtmound, xStart, 15, xEnd, 15); - line(this, t_dirtmound, xStart, 17, xEnd, 17); - line(this, t_dirtmound, xStart, 19, xEnd, 19); - - place_items("hydro", 70, xStart, 3, xEnd, 3, true, turn); //Spawn crops - place_items("hydro", 70, xStart, 5, xEnd, 5, true, turn); - place_items("hydro", 70, xStart, 7, xEnd, 7, true, turn); - place_items("hydro", 70, xStart, 9, xEnd, 9, true, turn); - place_items("hydro", 70, xStart, 11, xEnd, 11, true, turn); - place_items("hydro", 70, xStart, 13, xEnd, 13, true, turn); - place_items("hydro", 70, xStart, 15, xEnd, 15, true, turn); - place_items("hydro", 70, xStart, 17, xEnd, 17, true, turn); - place_items("hydro", 70, xStart, 19, xEnd, 19, true, turn); - } - break; - - case ot_police_north: - case ot_police_east: - case ot_police_south: - case ot_police_west: { - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((j == 7 && i != 17 && i != 18) || - (j == 12 && i != 0 && i != 17 && i != 18 && i != SEEX * 2 - 1) || - (j == 14 && ((i > 0 && i < 6) || i == 9 || i == 13 || i == 17)) || - (j == 15 && i > 17 && i < SEEX * 2 - 1) || - (j == 17 && i > 0 && i < 17) || - (j == 20)) - ter_set(i, j, t_wall_h); - else if (((i == 0 || i == SEEX * 2 - 1) && j > 7 && j < 20) || - ((i == 5 || i == 10 || i == 16 || i == 19) && j > 7 && j < 12) || - ((i == 5 || i == 9 || i == 13) && j > 14 && j < 17) || - (i == 17 && j > 14 && j < 20)) - ter_set(i, j, t_wall_v); - else if (j == 14 && i > 5 && i < 17 && i % 2 == 0) - ter_set(i, j, t_bars); - else if ((i > 1 && i < 4 && j > 8 && j < 11) || - (j == 17 && i > 17 && i < 21)) - set(i, j, t_floor, f_counter); - else if ((i == 20 && j > 7 && j < 12) || (j == 8 && i > 19 && i < 23) || - (j == 15 && i > 0 && i < 5)) - set(i, j, t_floor, f_locker); - else if (j < 7) - ter_set(i, j, t_pavement); - else if (j > 20) - ter_set(i, j, t_sidewalk); - else - ter_set(i, j, t_floor); - } - } - ter_set(17, 7, t_door_locked); - ter_set(18, 7, t_door_locked); - ter_set(rng( 1, 4), 12, t_door_c); - ter_set(rng( 6, 9), 12, t_door_c); - ter_set(rng(11, 15), 12, t_door_c); - ter_set(21, 12, t_door_metal_locked); - tmpcomp = add_computer(22, 13, _("PolCom OS v1.47"), 3); - tmpcomp->add_option(_("Open Supply Room"), COMPACT_OPEN, 3); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); - tmpcomp->add_failure(COMPFAIL_MANHACKS); - ter_set( 7, 14, t_door_c); - ter_set(11, 14, t_door_c); - ter_set(15, 14, t_door_c); - ter_set(rng(20, 22), 15, t_door_c); - ter_set(2, 17, t_door_metal_locked); - tmpcomp = add_computer(22, 13, _("PolCom OS v1.47"), 3); - tmpcomp->add_option(_("Open Evidence Locker"), COMPACT_OPEN, 3); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); - tmpcomp->add_failure(COMPFAIL_MANHACKS); - ter_set(17, 18, t_door_c); - for (int i = 18; i < SEEX * 2 - 1; i++) - ter_set(i, 20, t_window); - if (one_in(3)) { - for (int j = 16; j < 20; j++) - ter_set(SEEX * 2 - 1, j, t_window); - } - rn = rng(18, 21); - if (one_in(4)) { - ter_set(rn , 20, t_door_c); - ter_set(rn + 1, 20, t_door_c); - } else { - ter_set(rn , 20, t_door_locked); - ter_set(rn + 1, 20, t_door_locked); - } - rn = rng(1, 5); - ter_set(rn, 20, t_window); - ter_set(rn + 1, 20, t_window); - rn = rng(10, 14); - ter_set(rn, 20, t_window); - ter_set(rn + 1, 20, t_window); - if (one_in(2)) { - for (int i = 6; i < 10; i++) - furn_set(i, 8, f_counter); - } - if (one_in(3)) { - for (int j = 8; j < 12; j++) - furn_set(6, j, f_counter); - } - if (one_in(3)) { - for (int j = 8; j < 12; j++) - furn_set(9, j, f_counter); - } - - place_items("kitchen", 40, 6, 8, 9, 11, false, 0); - place_items("cop_weapons", 70, 20, 8, 22, 8, false, 0); - place_items("cop_weapons", 70, 20, 8, 20, 11, false, 0); - place_items("cop_evidence", 60, 1, 15, 4, 15, false, 0); - - for (int i = 0; i <= 23; i++) { - for (int j = 0; j <= 23; j++) { - if (this->ter(i,j) == t_floor && one_in(80)) - spawn_item(i, j, "badge_deputy", 0); - } - } - - if (terrain_type == ot_police_west) - rotate(1); - if (terrain_type == ot_police_north) - rotate(2); - if (terrain_type == ot_police_east) - rotate(3); - - place_spawns(g, "GROUP_POLICE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); - } break; - - case ot_bank_north: - case ot_bank_east: - case ot_bank_south: - case ot_bank_west: { - fill_background(this, &grass_or_dirt); - - square(this, t_floor, 1, 1, 22, 22); - line(this, t_wall_h, 1, 1, 22, 1); - line(this, t_wall_h, 2, 6, 19, 6); - line(this, t_wall_h, 2, 13, 18, 13); - line(this, t_wall_h, 1, 22, 22, 22); - line(this, t_wall_h, 9, 9, 18, 9); - line(this, t_wall_v, 1, 2, 1, 21); - line(this, t_wall_v, 22, 2, 22, 21); - line(this, t_wall_v, 19, 9, 19, 21); - line(this, t_wall_v, 13, 14, 13, 16); - line(this, t_wall_v, 13, 19, 13, 21); - line(this, t_wall_v, 8, 7, 8, 12); - line(this, t_wall_metal_h, 3, 14, 11, 14); - line(this, t_wall_metal_h, 3, 21, 11, 21); - line(this, t_wall_metal_v, 2, 14, 2, 21); - line(this, t_wall_metal_v, 12, 14, 12, 16); - line(this, t_wall_metal_v, 12, 19, 12, 21); - line_furn(this, f_counter, 2, 4, 14, 4); - ter_set(13, 17, t_door_metal_locked); - ter_set(13, 18, t_door_metal_locked); - tmpcomp = add_computer(14, 16, _("First United Bank"), 3); - tmpcomp->add_option(_("Open Vault"), COMPACT_OPEN, 3); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); -// Front wall--glass or windows? - if (!one_in(4)) { - line(this, t_wall_glass_h_alarm, 2, 1, 21, 1); - if (one_in(2)) - line(this, t_wall_glass_v_alarm, 1, 2, 1, 5); // Side wall for teller room - } else { - if (one_in(4)) - line(this, t_wall_glass_v_alarm, 1, 2, 1, 5); // Side wall for teller room - rn = rng(3, 7); - ter_set(rn , 1, t_window_alarm); - ter_set(rn + 1, 1, t_window_alarm); - rn = rng(13, 18); - ter_set(rn , 1, t_window_alarm); - ter_set(rn + 1, 1, t_window_alarm); - } -// Doors for offices - ter_set(8, rng(7, 8), t_door_c); - ter_set(rng(10, 17), 9, t_door_c); - ter_set(19, rng(15, 20), t_door_c); -// Side and back windows - ter_set(1, rng(7, 12), t_window_alarm); - ter_set(1, rng(7, 12), t_window_alarm); - ter_set(rng(14, 18), 22, t_window_alarm); - if (one_in(2)) - ter_set(rng(14, 18), 22, t_window_alarm); - if (one_in(10)) - line(this, t_wall_glass_v, 22, 2, 22, 21); // Right side is glass wall! - else { - rn = rng(7, 12); - ter_set(22, rn , t_window_alarm); - ter_set(22, rn + 1, t_window_alarm); - rn = rng(13, 19); - ter_set(22, rn , t_window_alarm); - ter_set(22, rn + 1, t_window_alarm); - } -// Finally, place the front doors. - if (one_in(4)) { // 1 in 4 are unlocked - ter_set(10, 1, t_door_c); - ter_set(11, 1, t_door_c); - } else if (one_in(4)) { // 1 in 4 locked ones are un-alarmed - ter_set(10, 1, t_door_locked); - ter_set(11, 1, t_door_locked); - } else { - ter_set(10, 1, t_door_locked_alarm); - ter_set(11, 1, t_door_locked_alarm); - } - - place_items("office", 60, 2, 7, 7, 12, false, 0); - place_items("office", 60, 9, 10, 18, 12, false, 0); - place_items("office", 70, 14, 14, 18, 21, false, 0); - place_items("vault", 45, 3, 15, 11, 20, false, 0); - - if (terrain_type == ot_bank_east) - rotate(1); - if (terrain_type == ot_bank_south) - rotate(2); - if (terrain_type == ot_bank_west) - rotate(3); - } break; - - case ot_bar_north: - case ot_bar_east: - case ot_bar_south: - case ot_bar_west: { - fill_background(this, t_pavement); - square(this, t_floor, 2, 2, 21, 15); - square(this, t_floor, 18, 17, 21, 18); - - mapf::formatted_set_simple(this, 1, 1, -"\ -|---------++---------|\n\ -| |\n\ -| ## ## ## ccc|\n\ -| ## ## ## c &|\n\ -| c B|\n\ -| c B|\n\ -| c B|\n\ -| ## ## ## c B|\n\ -| ## ## ## c |\n\ -| cc |\n\ -| |\n\ -| |\n\ -| xxxxx xxxxx |\n\ -| xxxxx xxxxx |\n\ -| |\n\ -|------------------D-|\n\ - D &|\n\ - |cccc|\n\ - |----|\n", - mapf::basic_bind("- | + D", t_wall_h, t_wall_v, t_door_c, t_door_locked), - mapf::basic_bind("# c x & B", f_table, f_counter, f_pool_table, f_fridge, f_rack)); - - // Pool table items - place_items("pool_table", 50, 4, 13, 8, 14, false, 0); - place_items("pool_table", 50, 13, 13, 17, 14, false, 0); - - // 1 in 4 chance to have glass walls in front - if (one_in(4)) { - mapf::formatted_set_terrain(this, 1, 1, " === === === === ", mapf::basic_bind("=", t_wall_glass_h), mapf::end() ); - mapf::formatted_set_terrain(this, 1, 1, "\n\n=\n=\n=\n\n=\n=\n=\n\n=\n=\n=\n\n", mapf::basic_bind("=", t_wall_glass_v), mapf::end()); - } else { - mapf::formatted_set_terrain(this, 1, 1, " : : : : : : ", mapf::basic_bind(":", t_window), mapf::end() ); - mapf::formatted_set_terrain(this, 1, 1, "\n\n\n\n\n:\n\n\n\n\n:\n\n\n\n", mapf::basic_bind(":", t_window), mapf::end()); - } - - // Item placement - place_items("snacks", 30, 19, 3, 19, 10, false, 0); //counter - place_items("snacks", 50, 18, 18, 21, 18, false, 0); - place_items("fridgesnacks", 60, 21, 4, 21, 4, false, 0); // fridge - place_items("fridgesnacks", 60, 21, 17, 21, 17, false, 0); - place_items("alcohol", 70, 21, 5, 21, 8, false, 0); // rack - place_items("trash", 15, 2, 17, 16, 19, true, 0); - - if (terrain_type == ot_bar_east) - rotate(1); - if (terrain_type == ot_bar_south) - rotate(2); - if (terrain_type == ot_bar_west) - rotate(3); - } break; - - case ot_pawn_north: - case ot_pawn_east: - case ot_pawn_south: - case ot_pawn_west: -// Init to plain grass/dirt - fill_background(this, &grass_or_dirt); - - tw = rng(0, 10); - bw = SEEY * 2 - rng(1, 2) - rng(0, 1) * rng(0, 1); - lw = rng(0, 4); - rw = SEEX * 2 - rng(1, 5); - if (tw >= 6) { // Big enough for its own parking lot - square(this, t_pavement, 0, 0, SEEX * 2 - 1, tw - 1); - for (int i = rng(0, 1); i < SEEX * 2; i += 4) - line(this, t_pavement_y, i, 1, i, tw - 1); - } -// Floor and walls - square(this, t_floor, lw, tw, rw, bw); - line(this, t_wall_h, lw, tw, rw, tw); - line(this, t_wall_h, lw, bw, rw, bw); - line(this, t_wall_v, lw, tw + 1, lw, bw - 1); - line(this, t_wall_v, rw, tw + 1, rw, bw - 1); -// Doors and windows--almost certainly alarmed - if (one_in(15)) { - line(this, t_window, lw + 2, tw, lw + 5, tw); - line(this, t_window, rw - 5, tw, rw - 2, tw); - line(this, t_door_locked, SEEX, tw, SEEX + 1, tw); - } else { - line(this, t_window_alarm, lw + 2, tw, lw + 5, tw); - line(this, t_window_alarm, rw - 5, tw, rw - 2, tw); - line(this, t_door_locked_alarm, SEEX, tw, SEEX + 1, tw); - } -// Some display racks by the left and right walls - line_furn(this, f_rack, lw + 1, tw + 1, lw + 1, bw - 1); - place_items("pawn", 86, lw + 1, tw + 1, lw + 1, bw - 1, false, 0); - line_furn(this, f_rack, rw - 1, tw + 1, rw - 1, bw - 1); - place_items("pawn", 86, rw - 1, tw + 1, rw - 1, bw - 1, false, 0); -// Some display counters - line_furn(this, f_counter, lw + 4, tw + 2, lw + 4, bw - 3); - place_items("pawn", 80, lw + 4, tw + 2, lw + 4, bw - 3, false, 0); - line_furn(this, f_counter, rw - 4, tw + 2, rw - 4, bw - 3); - place_items("pawn", 80, rw - 4, tw + 2, rw - 4, bw - 3, false, 0); -// More display counters, if there's room for them - if (rw - lw >= 18 && one_in(rw - lw - 17)) { - for (int j = tw + rng(3, 5); j <= bw - 3; j += 3) { - line_furn(this, f_counter, lw + 6, j, rw - 6, j); - place_items("pawn", 75, lw + 6, j, rw - 6, j, false, 0); - } - } -// Finally, place an office sometimes - if (!one_in(5)) { - if (one_in(2)) { // Office on the left side - int office_top = bw - rng(3, 5), office_right = lw + rng(4, 7); -// Clear out any items in that area! And reset to floor. - for (int i = lw + 1; i <= office_right; i++) { - for (int j = office_top; j <= bw - 1; j++) { - i_clear(i, j); - ter_set(i, j, t_floor); - } - } - line(this, t_wall_h, lw + 1, office_top, office_right, office_top); - line(this, t_wall_v, office_right, office_top + 1, office_right, bw - 1); - ter_set(office_right, rng(office_top + 1, bw - 1), t_door_locked); - if (one_in(4)) // Back door - ter_set(rng(lw + 1, office_right - 1), bw, t_door_locked_alarm); -// Finally, add some stuff in there - place_items("office", 70, lw + 1, office_top + 1, office_right - 1, bw - 1, - false, 0); - place_items("homeguns", 50, lw + 1, office_top + 1, office_right - 1, - bw - 1, false, 0); - place_items("harddrugs", 20, lw + 1, office_top + 1, office_right - 1, - bw - 1, false, 0); - } else { // Office on the right side - int office_top = bw - rng(3, 5), office_left = rw - rng(4, 7); - for (int i = office_left; i <= rw - 1; i++) { - for (int j = office_top; j <= bw - 1; j++) { - i_clear(i, j); - ter_set(i, j, t_floor); - } - } - line(this, t_wall_h, office_left, office_top, rw - 1, office_top); - line(this, t_wall_v, office_left, office_top + 1, office_left, bw - 1); - ter_set(office_left, rng(office_top + 1, bw - 1), t_door_locked); - if (one_in(4)) // Back door - ter_set(rng(office_left + 1, rw - 1), bw, t_door_locked_alarm); - place_items("office", 70, office_left + 1, office_top + 1, rw - 1, bw - 1, - false, 0); - place_items("homeguns", 50, office_left + 1, office_top + 1, rw - 1, - bw - 1, false, 0); - place_items("harddrugs", 20, office_left + 1, office_top + 1, rw - 1, - bw - 1, false, 0); - } - } - if (terrain_type == ot_pawn_east) - rotate(1); - if (terrain_type == ot_pawn_south) - rotate(2); - if (terrain_type == ot_pawn_west) - rotate(3); - break; - - case ot_mil_surplus_north: - case ot_mil_surplus_east: - case ot_mil_surplus_south: - case ot_mil_surplus_west: -// Init to plain grass/dirt - fill_background(this, &grass_or_dirt); - lw = rng(0, 2); - rw = SEEX * 2 - rng(1, 3); - tw = rng(0, 4); - bw = SEEY * 2 - rng(3, 8); - square(this, t_floor, lw, tw, rw, bw); - line(this, t_wall_h, lw, tw, rw, tw); - line(this, t_wall_h, lw, bw, rw, bw); - line(this, t_wall_v, lw, tw + 1, lw, bw - 1); - line(this, t_wall_v, rw, tw + 1, rw, bw - 1); - rn = rng(4, 7); - line(this, t_window, lw + 2, tw, lw + rn, tw); - line(this, t_window, rw - rn, tw, rw - 2, tw); - line(this, t_door_c, SEEX, tw, SEEX + 1, tw); - if (one_in(2)) // counter on left - line_furn(this, f_counter, lw + 2, tw + 1, lw + 2, tw + rng(3, 4)); - else // counter on right - line_furn(this, f_counter, rw - 2, tw + 1, rw - 2, tw + rng(3, 4)); - for (int i = lw + 1; i <= SEEX; i += 2) { - line_furn(this, f_rack, i, tw + 5, i, bw - 2); - items_location loc; - if (one_in(3)) - loc = "mil_armor"; - else if (one_in(3)) - loc = "mil_surplus"; - else - loc = "mil_food_nodrugs"; - place_items(loc, 70, i, tw + 5, i, bw - 2, false, 0); - } - for (int i = rw - 1; i >= SEEX + 1; i -= 2) { - line_furn(this, f_rack, i, tw + 5, i, bw - 2); - items_location loc; - if (one_in(3)) - loc = "mil_armor"; - else if (one_in(3)) - loc = "mil_surplus"; - else - loc = "mil_food_nodrugs"; - place_items(loc, 70, i, tw + 5, i, bw - 2, false, 0); - } - if (terrain_type == ot_mil_surplus_east) - rotate(1); - if (terrain_type == ot_mil_surplus_south) - rotate(2); - if (terrain_type == ot_mil_surplus_west) - rotate(3); - break; - - case ot_furniture_north: - case ot_furniture_east: - case ot_furniture_south: - case ot_furniture_west: - { - - fill_background(this, t_pavement); - - square(this, t_floor, 2, 2, 21, 15); - - square(this, t_floor, 2, 17, 7, 18); - - mapf::formatted_set_simple(this, 1, 1, -"\ -|ggggggggg++ggggggggg|\n\ -| C h H O O & & |\n\ -|B c |\n\ -|B c |\n\ -|cccccccc # m e B|\n\ -|bb m e B|\n\ -|d mm e B|\n\ -|bb B|\n\ -|bb dd OO oo |\n\ -|# dd OO oo B|\n\ -|h B|\n\ -|h EE CC && B|\n\ -|H EE CC && B|\n\ -|H |\n\ -| BBBBBBBBBBBBBB|\n\ -|DD------------------|\n\ -| D \n\ -|BBBB D \n\ -|------| \n", - mapf::basic_bind("g - | + D", t_wall_glass_h, t_wall_h, t_wall_v, t_door_c, t_door_locked), - mapf::basic_bind("# c & B C O b H h o d e m E", f_table, f_counter, f_fridge, f_rack, f_cupboard, f_oven, f_bed, f_armchair, f_chair, f_toilet, f_dresser, f_desk, f_sofa, f_bookcase), - true // empty toilets - ); - place_items("tools", 50, 21, 5, 21, 8, false, 0); - //Upper Right Shelf - place_items("hardware", 50, 21, 10, 21, 13, false, 0); - //Right Shelf - place_items("hardware", 75, 8, 15, 21, 15, false, 0); - //Bottom Right Shelf - place_items("tools", 75, 2, 18, 5, 18, false, 0); - //Bottom Left Shelf - place_items("magazines", 75, 2, 3, 2, 4, false, 0); - //Upper Left Shelf - - if (terrain_type == ot_furniture_east) - rotate(1); - - if (terrain_type == ot_furniture_south) - rotate(2); - - if (terrain_type == ot_furniture_west) - rotate(3); - } - break; - - - case ot_abstorefront_north: - case ot_abstorefront_east: - case ot_abstorefront_south: - case ot_abstorefront_west: - { - - fill_background(this, t_pavement); - - square(this, t_floor, 2, 2, 21, 15); - mapf::formatted_set_simple(this, 1, 1, -"\ -|-xxxxxxxxDDxxxxxxxx-|\n\ -| B|\n\ -|B c B B B|\n\ -|B c B B B|\n\ -|B c B B B B B|\n\ -|cccc B B B B B|\n\ -|B B B B B B|\n\ -|B B|\n\ -|B BBBB BBBBBB BB B|\n\ -| BB B|\n\ -|B BBBB BBBBBB B|\n\ -|B --+-|\n\ -|B |B |\n\ -|BBBBBBB BBBBBB |B D\n\ -|--------------------|\n", - mapf::basic_bind("x - | + D", t_window_boarded, t_wall_h, t_wall_v, t_door_c, t_door_locked), - mapf::basic_bind("B c", f_rack, f_counter)); - if (terrain_type == ot_abstorefront_east) - rotate(1); - - if (terrain_type == ot_abstorefront_south) - rotate(2); - - if (terrain_type == ot_abstorefront_west) - rotate(3); - - } - break; - - case ot_megastore_entrance: { - fill_background(this, t_floor); -// Construct facing north; below, we'll rotate to face road - line(this, t_wall_glass_h, 0, 0, SEEX * 2 - 1, 0); - ter_set(SEEX, 0, t_door_glass_c); - ter_set(SEEX + 1, 0, t_door_glass_c); -// Long checkout lanes - for (int x = 2; x <= 18; x += 4) { - line_furn(this, f_counter, x, 4, x, 14); - line_furn(this, f_rack, x + 3, 4, x + 3, 14); - place_items("snacks", 80, x + 3, 4, x + 3, 14, false, 0); - place_items("magazines", 70, x + 3, 4, x + 3, 14, false, 0); - } - for (int i = 0; i < 10; i++) { - int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); - if (ter(x, y) == t_floor) - add_spawn("mon_zombie", 1, x, y); - } -// Finally, figure out where the road is; contruct our entrance facing that. - std::vector faces_road; - if (t_east >= ot_road_null && t_east <= ot_bridge_ew) - rotate(1); - if (t_south >= ot_road_null && t_south <= ot_bridge_ew) - rotate(2); - if (t_west >= ot_road_null && t_west <= ot_bridge_ew) - rotate(3); - } break; - - case ot_megastore: - square(this, t_floor, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); - -// Randomly pick contents - switch (rng(1, 5)) { - case 1: { // Groceries - bool fridge = false; - for (int x = rng(2, 3); x < SEEX * 2 - 1; x += 3) { - for (int y = 2; y <= SEEY; y += SEEY - 2) { - if (one_in(3)) - fridge = !fridge; - if (fridge) { - line_furn(this, f_glass_fridge, x, y, x, y + SEEY - 4); - if (one_in(3)) - place_items("fridgesnacks", 80, x, y, x, y + SEEY - 4, false, 0); - else - place_items("fridge", 70, x, y, x, y + SEEY - 4, false, 0); - } else { - line_furn(this, f_rack, x, y, x, y + SEEY - 4); - if (one_in(3)) - place_items("cannedfood", 78, x, y, x, y + SEEY - 4, false, 0); - else if (one_in(2)) - place_items("pasta", 82, x, y, x, y + SEEY - 4, false, 0); - else if (one_in(2)) - place_items("produce", 65, x, y, x, y + SEEY - 4, false, 0); - else - place_items("snacks", 72, x, y, x, y + SEEY - 4, false, 0); - } - } - } - } break; - case 2: // Hardware - for (int x = 2; x <= 22; x += 4) { - line_furn(this, f_rack, x, 4, x, SEEY * 2 - 5); - if (one_in(3)) - place_items("tools", 70, x, 4, x, SEEY * 2 - 5, false, 0); - else if (one_in(2)) - place_items("bigtools", 70, x, 4, x, SEEY * 2 - 5, false, 0); - else if (one_in(3)) - place_items("hardware", 70, x, 4, x, SEEY * 2 - 5, false, 0); - else - place_items("mischw", 70, x, 4, x, SEEY * 2 - 5, false, 0); - } - break; - case 3: // Clothing - for (int x = 2; x < SEEX * 2; x += 6) { - for (int y = 3; y <= 9; y += 6) { - square_furn(this, f_rack, x, y, x + 1, y + 1); - if (one_in(2)) - place_items("shirts", 75, x, y, x + 1, y + 1, false, 0); - else if (one_in(2)) - place_items("pants", 72, x, y, x + 1, y + 1, false, 0); - else if (one_in(2)) - place_items("jackets", 65, x, y, x + 1, y + 1, false, 0); - else - place_items("winter", 62, x, y, x + 1, y + 1, false, 0); - } - } - for (int y = 13; y <= SEEY * 2 - 2; y += 3) { - line_furn(this, f_rack, 2, y, SEEX * 2 - 3, y); - if (one_in(3)) - place_items("shirts", 75, 2, y, SEEX * 2 - 3, y, false, 0); - else if (one_in(2)) - place_items("shoes", 75, 2, y, SEEX * 2 - 3, y, false, 0); - else if (one_in(2)) - place_items("bags", 75, 2, y, SEEX * 2 - 3, y, false, 0); - else - place_items("allclothes", 75, 2, y, SEEX * 2 - 3, y, false, 0); - } - break; - case 4: // Cleaning and soft drugs and novels and junk - for (int x = rng(2, 3); x < SEEX * 2 - 1; x += 3) { - for (int y = 2; y <= SEEY; y += SEEY - 2) { - line_furn(this, f_rack, x, y, x, y + SEEY - 4); - if (one_in(3)) - place_items("cleaning", 78, x, y, x, y + SEEY - 4, false, 0); - else if (one_in(2)) - place_items("softdrugs", 72, x, y, x, y + SEEY - 4, false, 0); - else - place_items("novels", 84, x, y, x, y + SEEY - 4, false, 0); - } - } - break; - case 5: // Sporting goods - for (int x = rng(2, 3); x < SEEX * 2 - 1; x += 3) { - for (int y = 2; y <= SEEY; y += SEEY - 2) { - line_furn(this, f_rack, x, y, x, y + SEEY - 4); - if (one_in(2)) - place_items("sports", 72, x, y, x, y + SEEY - 4, false, 0); - else if (one_in(10)) - place_items("rifles", 20, x, y, x, y + SEEY - 4, false, 0); - else - place_items("camping", 68, x, y, x, y + SEEY - 4, false, 0); - } - } - break; - } - -// Add some spawns - for (int i = 0; i < 15; i++) { - int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); - if (ter(x, y) == t_floor) - add_spawn("mon_zombie", 1, x, y); - } -// Rotate randomly... - rotate(rng(0, 3)); -// ... then place walls as needed. - if (t_north != ot_megastore_entrance && t_north != ot_megastore) - line(this, t_wall_h, 0, 0, SEEX * 2 - 1, 0); - if (t_east != ot_megastore_entrance && t_east != ot_megastore) - line(this, t_wall_v, SEEX * 2 - 1, 0, SEEX * 2 - 1, SEEY * 2 - 1); - if (t_south != ot_megastore_entrance && t_south != ot_megastore) - line(this, t_wall_h, 0, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); - if (t_west != ot_megastore_entrance && t_west != ot_megastore) - line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 1); - break; - - case ot_hospital_entrance: - square(this, t_pavement, 0, 0, SEEX * 2 - 1, 5); - square(this, t_floor, 0, 6, SEEX * 2 - 1, SEEY * 2 - 1); -// Ambulance parking place - line(this, t_pavement_y, 5, 1, 22, 1); - line(this, t_pavement_y, 5, 2, 5, 5); - line(this, t_pavement_y, 22, 2, 22, 5); -// Top wall - line(this, t_wall_h, 0, 6, 6, 6); - line(this, t_door_glass_c, 3, 6, 4, 6); - line(this, t_wall_glass_h, 7, 6, 19, 6); - line(this, t_wall_h, 20, 6, SEEX * 2 - 1, 6); -// Left wall - line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 1); - line(this, t_floor, 0, 11, 0, 12); -// Waiting area - line_furn(this, f_bench, 8, 7, 11, 7); - line_furn(this, f_bench, 13, 7, 17, 7); - line_furn(this, f_bench, 20, 7, 22, 7); - line_furn(this, f_bench, 22, 8, 22, 10); - place_items("magazines", 70, 8, 7, 22, 10, false, 0); -// Reception and examination rooms - line_furn(this, f_counter, 8, 13, 9, 13); - line(this, t_wall_h, 10, 13, SEEX * 2 - 1, 13); - line(this, t_door_c, 15, 13, 16, 13); - line(this, t_wall_h, 8, 17, 13, 17); - line(this, t_wall_h, 18, 17, 22, 17); - line(this, t_wall_h, 8, 20, 13, 20); - line(this, t_wall_h, 18, 20, 22, 20); - line(this, t_wall_v, 7, 13, 7, 22); - line(this, t_wall_v, 14, 15, 14, 20); - line(this, t_wall_v, 17, 14, 17, 22); - line_furn(this, f_bed, 8, 19, 9, 19); - line_furn(this, f_bed, 21, 19, 22, 19); - line_furn(this, f_bed, 21, 22, 22, 22); - line_furn(this, f_rack, 18, 14, 22, 14); - place_items("harddrugs", 80, 18, 14, 22, 14, false, 0); - line_furn(this, f_rack, 8, 21, 8, 22); - place_items("softdrugs", 70, 8, 21, 8, 22, false, 0); - ter_set(14, rng(18, 19), t_door_c); - ter_set(17, rng(15, 16), t_door_locked); // Hard drugs room is locked - ter_set(17, rng(18, 19), t_door_c); - ter_set(17, rng(21, 22), t_door_c); -// ER and bottom wall - line(this, t_wall_h, 0, 16, 6, 16); - line(this, t_door_c, 3, 16, 4, 16); - square_furn(this, f_bed, 3, 19, 4, 20); - line_furn(this, f_counter, 1, 22, 6, 22); - place_items("surgery", 78, 1, 22, 6, 22, false, 0); - line(this, t_wall_h, 1, 23, 22, 23); - line(this, t_floor, 11, 23, 12, 23); -// Right side wall (needed sometimes!) - line(this, t_wall_v, 23, 0, 23, 10); - line(this, t_wall_v, 23, 13, 23, 23); - -/* -// Generate bodies / zombies - rn = rng(10, 15); - for (int i = 0; i < rn; i++) { - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), g->turn); - int zx = rng(0, SEEX * 2 - 1), zy = rng(0, SEEY * 2 - 1); - if (ter(zx, zy) == t_bed || one_in(3)) - add_item(zx, zy, body); - else if (move_cost(zx, zy) > 0) { - mon_id zom = mon_zombie; - if (one_in(6)) - zom = mon_zombie_spitter; - else if (!one_in(3)) - zom = mon_boomer; - add_spawn(zom, 1, zx, zy); - } - } -*/ -// Rotate to face the road - if (t_east >= ot_road_null && t_east <= ot_bridge_ew) - rotate(1); - if (t_south >= ot_road_null && t_south <= ot_bridge_ew) - rotate(2); - if (t_west >= ot_road_null && t_west <= ot_bridge_ew) - rotate(3); - break; - - case ot_hospital: - fill_background(this, t_floor); -// We always have walls on the left and bottom - line(this, t_wall_v, 0, 0, 0, 22); - line(this, t_wall_h, 0, 23, 23, 23); -// These walls contain doors if they lead to more hospital - if (t_west == ot_hospital_entrance || t_west == ot_hospital) - line(this, t_door_c, 0, 11, 0, 12); - if (t_south == ot_hospital_entrance || t_south == ot_hospital) - line(this, t_door_c, 11, 23, 12, 23); - - if ((t_north == ot_hospital_entrance || t_north == ot_hospital) && - (t_east == ot_hospital_entrance || t_east == ot_hospital) && - (t_south == ot_hospital_entrance || t_south == ot_hospital) && - (t_west == ot_hospital_entrance || t_west == ot_hospital) ) { -// We're in the center; center is always blood lab -// Large lab - line(this, t_wall_h, 1, 2, 21, 2); - line(this, t_wall_h, 1, 10, 21, 10); - line(this, t_wall_v, 21, 3, 21, 9); - line_furn(this, f_counter, 2, 3, 2, 9); - place_items("hospital_lab", 70, 2, 3, 2, 9, false, 0); - square_furn(this, f_counter, 5, 4, 6, 8); - place_items("hospital_lab", 74, 5, 4, 6, 8, false, 0); - square_furn(this, f_counter, 10, 4, 11, 8); - spawn_item(5, 17, "record_patient", 0); - place_items("hospital_lab", 74, 10, 4, 11, 8, false, 0); - square_furn(this, f_counter, 15, 4, 16, 8); - place_items("hospital_lab", 74, 15, 4, 16, 8, false, 0); - ter_set(rng(3, 18), 2, t_door_c); - ter_set(rng(3, 18), 10, t_door_c); - if (one_in(4)) // Door on the right side - ter_set(21, rng(4, 8), t_door_c); - else { // Counter on the right side - line_furn(this, f_counter, 20, 3, 20, 9); - place_items("hospital_lab", 70, 20, 3, 20, 9, false, 0); - } -// Blood testing facility - line(this, t_wall_h, 1, 13, 10, 13); - line(this, t_wall_v, 10, 14, 10, 22); - rn = rng(1, 3); - if (rn == 1 || rn == 3) - ter_set(rng(3, 8), 13, t_door_c); - if (rn == 2 || rn == 3) - ter_set(10, rng(15, 21), t_door_c); - line_furn(this, f_counter, 2, 14, 2, 22); - place_items("hospital_lab", 60, 2, 14, 2, 22, false, 0); - square_furn(this, f_counter, 4, 17, 6, 19); - ter_set(4, 18, t_centrifuge); - line(this, t_floor, 5, 18, 6, rng(17, 19)); // Clear path to console - tmpcomp = add_computer(5, 18, _("Centrifuge"), 0); - tmpcomp->add_option(_("Analyze blood"), COMPACT_BLOOD_ANAL, 4); - tmpcomp->add_failure(COMPFAIL_DESTROY_BLOOD); -// Sample storage - line(this, t_wall_h, 13, 13, 23, 13); - line(this, t_wall_v, 13, 14, 13, 23); - rn = rng(1, 3); - if (rn == 1 || rn == 3) - ter_set(rng(14, 22), 13, t_door_c); - if (rn == 2 || rn == 3) - ter_set(13, rng(14, 21), t_door_c); - square_furn(this, f_rack, 16, 16, 21, 17); - place_items("hospital_samples", 68, 16, 16, 21, 17, false, 0); - square_furn(this, f_rack, 16, 19, 21, 20); - place_items("hospital_samples", 68, 16, 19, 21, 20, false, 0); - line_furn(this, f_rack, 14, 22, 23, 22); - place_items("hospital_samples", 62, 14, 22, 23, 22, false, 0); - - } else { // We're NOT in the center; a random hospital type! - - switch (rng(1, 4)) { // What type? - case 1: // Dorms -// Upper left rooms - line(this, t_wall_h, 1, 5, 9, 5); - for (int i = 1; i <= 7; i += 3) { - line_furn(this, f_bed, i, 1, i, 2); - line(this, t_wall_v, i + 2, 0, i + 2, 4); - ter_set(rng(i, i + 1), 5, t_door_c); - } -// Upper right rooms - line(this, t_wall_h, 14, 5, 23, 5); - line(this, t_wall_v, 14, 0, 14, 4); - line_furn(this, f_bed, 15, 1, 15, 2); - ter_set(rng(15, 16), 5, t_door_c); - line(this, t_wall_v, 17, 0, 17, 4); - line_furn(this, f_bed, 18, 1, 18, 2); - ter_set(rng(18, 19), 5, t_door_c); - line(this, t_wall_v, 20, 0, 20, 4); - line_furn(this, f_bed, 21, 1, 21, 2); - ter_set(rng(21, 22), 5, t_door_c); -// Waiting area - for (int i = 1; i <= 9; i += 4) - line_furn(this, f_bench, i, 7, i, 10); - line_furn(this, f_table, 3, 8, 3, 9); - place_items("magazines", 50, 3, 8, 3, 9, false, 0); - line_furn(this, f_table, 7, 8, 7, 9); - place_items("magazines", 50, 7, 8, 7, 9, false, 0); -// Middle right rooms - line(this, t_wall_v, 14, 7, 14, 10); - line(this, t_wall_h, 15, 7, 23, 7); - line(this, t_wall_h, 15, 10, 23, 10); - line(this, t_wall_v, 19, 8, 19, 9); - line_furn(this, f_bed, 18, 8, 18, 9); - line_furn(this, f_bed, 20, 8, 20, 9); - if (one_in(3)) { // Doors to north - ter_set(rng(15, 16), 7, t_door_c); - ter_set(rng(21, 22), 7, t_door_c); - } else { // Doors to south - ter_set(rng(15, 16), 10, t_door_c); - ter_set(rng(21, 22), 10, t_door_c); - } - line(this, t_wall_v, 14, 13, 14, 16); - line(this, t_wall_h, 15, 13, 23, 13); - line(this, t_wall_h, 15, 16, 23, 16); - line(this, t_wall_v, 19, 14, 19, 15); - line_furn(this, f_bed, 18, 14, 18, 15); - line_furn(this, f_bed, 20, 14, 20, 15); - if (one_in(3)) { // Doors to south - ter_set(rng(15, 16), 16, t_door_c); - ter_set(rng(21, 22), 16, t_door_c); - } else { // Doors to north - ter_set(rng(15, 16), 13, t_door_c); - ter_set(rng(21, 22), 13, t_door_c); - } -// Lower left rooms - line(this, t_wall_v, 5, 13, 5, 22); - line(this, t_wall_h, 1, 13, 4, 13); - line_furn(this, f_bed, 1, 14, 1, 15); - line(this, t_wall_h, 1, 17, 4, 17); - line_furn(this, f_bed, 1, 18, 1, 19); - line(this, t_wall_h, 1, 20, 4, 20); - line_furn(this, f_bed, 1, 21, 1, 22); - ter_set(5, rng(14, 16), t_door_c); - ter_set(5, rng(18, 19), t_door_c); - ter_set(5, rng(21, 22), t_door_c); - line(this, t_wall_h, 7, 13, 10, 13); - line(this, t_wall_v, 7, 14, 7, 22); - line(this, t_wall_v, 10, 14, 10, 22); - line(this, t_wall_h, 8, 18, 9, 18); - line_furn(this, f_bed, 8, 17, 9, 17); - line_furn(this, f_bed, 8, 22, 9, 22); - if (one_in(3)) { // Doors to west - ter_set(7, rng(14, 16), t_door_c); - ter_set(7, rng(19, 21), t_door_c); - } else { // Doors to east - ter_set(10, rng(14, 16), t_door_c); - ter_set(10, rng(19, 21), t_door_c); - } -// Lower-right rooms - line(this, t_wall_h, 14, 18, 23, 18); - for (int i = 14; i <= 20; i += 3) { - line(this, t_wall_v, i, 19, i, 22); - line_furn(this, f_bed, i + 1, 21, i + 1, 22); - ter_set(rng(i + 1, i + 2), 18, t_door_c); - } - break; - - case 2: // Offices and cafeteria -// Offices to north - line(this, t_wall_v, 10, 0, 10, 8); - line(this, t_wall_v, 13, 0, 13, 8); - line(this, t_wall_h, 1, 5, 9, 5); - line(this, t_wall_h, 14, 5, 23, 5); - line(this, t_wall_h, 1, 9, 23, 9); - line(this, t_door_c, 11, 9, 12, 9); - line_furn(this, f_table, 3, 3, 7, 3); - line_furn(this, f_table, 16, 3, 20, 3); - line_furn(this, f_table, 3, 8, 7, 8); - line_furn(this, f_table, 16, 8, 20, 8); - ter_set(10, rng(2, 3), t_door_c); - ter_set(13, rng(2, 3), t_door_c); - ter_set(10, rng(6, 7), t_door_c); - ter_set(13, rng(6, 7), t_door_c); - place_items("office", 70, 1, 1, 9, 3, false, 0); - place_items("office", 70, 14, 1, 22, 3, false, 0); - place_items("office", 70, 1, 5, 9, 8, false, 0); - place_items("office", 70, 14, 5, 22, 8, false, 0); -// Cafeteria to south - line(this, t_wall_h, 1, 14, 8, 14); - line(this, t_wall_h, 15, 14, 23, 14); - for (int i = 16; i <= 19; i += 3) { - for (int j = 17; j <= 20; j += 3) { - square_furn(this, f_table, i, j, i + 1, j + 1); - place_items("snacks", 60, i, j, i + 1, j + 1, false, 0); - place_items("produce", 65, i, j, i + 1, j + 1, false, 0); - } - } - for (int i = 3; i <= 6; i += 3) { - for (int j = 17; j <= 20; j += 3) { - square_furn(this, f_table, i, j, i + 1, j + 1); - place_items("snacks", 60, i, j, i + 1, j + 1, false, 0); - place_items("produce", 65, i, j, i + 1, j + 1, false, 0); - } - } - break; - - case 3: // Operating rooms -// First, walls and doors; divide it into four big operating rooms - line(this, t_wall_v, 10, 0, 10, 9); - line(this, t_door_c, 10, 4, 10, 5); - line(this, t_wall_v, 13, 0, 13, 9); - line(this, t_door_c, 13, 4, 13, 5); - line(this, t_wall_v, 10, 14, 10, 22); - line(this, t_door_c, 10, 18, 10, 19); - line(this, t_wall_v, 13, 14, 13, 22); - line(this, t_door_c, 13, 18, 13, 19); -// Horizontal walls/doors - line(this, t_wall_h, 1, 10, 10, 10); - line(this, t_door_c, 5, 10, 6, 10); - line(this, t_wall_h, 13, 10, 23, 10); - line(this, t_door_c, 18, 10, 19, 10); - line(this, t_wall_h, 1, 13, 10, 13); - line(this, t_door_c, 5, 13, 6, 13); - line(this, t_wall_h, 13, 13, 23, 13); - line(this, t_door_c, 18, 13, 19, 13); -// Next, the contents of each operating room - line_furn(this, f_counter, 1, 0, 1, 9); - place_items("surgery", 70, 1, 1, 1, 9, false, 0); - square_furn(this, f_bed, 5, 4, 6, 5); - - line_furn(this, f_counter, 1, 14, 1, 22); - place_items("surgery", 70, 1, 14, 1, 22, false, 0); - square_furn(this, f_bed, 5, 18, 6, 19); - - line_furn(this, f_counter, 14, 6, 14, 9); - place_items("surgery", 60, 14, 6, 14, 9, false, 0); - line_furn(this, f_counter, 15, 9, 17, 9); - place_items("surgery", 60, 15, 9, 17, 9, false, 0); - square_furn(this, f_bed, 18, 4, 19, 5); - - line_furn(this, f_counter, 14, 14, 14, 17); - place_items("surgery", 60, 14, 14, 14, 17, false, 0); - line_furn(this, f_counter, 15, 14, 17, 14); - place_items("surgery", 60, 15, 14, 17, 14, false, 0); - square_furn(this, f_bed, 18, 18, 19, 19); - // computer to begin healing broken bones, - tmpcomp = add_computer(16, 16, _("Mr. Stem Cell"), 3); - tmpcomp->add_option(_("Stem Cell Treatment"), COMPACT_STEMCELL_TREATMENT, 3); - tmpcomp->add_failure(COMPFAIL_ALARM); - - break; - - case 4: // Storage -// Soft drug storage - line(this, t_wall_h, 3, 2, 12, 2); - line(this, t_wall_h, 3, 10, 12, 10); - line(this, t_wall_v, 3, 3, 3, 9); - ter_set(3, 6, t_door_c); - line_furn(this, f_rack, 4, 3, 11, 3); - place_items("softdrugs", 90, 4, 3, 11, 3, false, 0); - line_furn(this, f_rack, 4, 9, 11, 9); - place_items("softdrugs", 90, 4, 9, 11, 9, false, 0); - line_furn(this, f_rack, 6, 5, 10, 5); - place_items("softdrugs", 80, 6, 5, 10, 5, false, 0); - line_furn(this, f_rack, 6, 7, 10, 7); - place_items("softdrugs", 80, 6, 7, 10, 7, false, 0); -// Hard drug storage - line(this, t_wall_v, 13, 0, 13, 19); - ter_set(13, 6, t_door_locked); - line_furn(this, f_rack, 14, 0, 14, 4); - place_items("harddrugs", 78, 14, 1, 14, 4, false, 0); - line_furn(this, f_rack, 17, 0, 17, 7); - place_items("harddrugs", 85, 17, 0, 17, 7, false, 0); - line_furn(this, f_rack, 20, 0, 20, 7); - place_items("harddrugs", 85, 20, 0, 20, 7, false, 0); - line(this, t_wall_h, 20, 10, 23, 10); - line_furn(this, f_rack, 16, 10, 19, 10); - place_items("harddrugs", 78, 16, 10, 19, 10, false, 0); - line_furn(this, f_rack, 16, 12, 19, 12); - place_items("harddrugs", 78, 16, 12, 19, 12, false, 0); - line(this, t_wall_h, 14, 14, 19, 14); - ter_set(rng(14, 15), 14, t_door_locked); - ter_set(rng(16, 18), 14, t_bars); - line(this, t_wall_v, 20, 11, 20, 19); - line(this, t_wall_h, 13, 20, 20, 20); - line(this, t_door_c, 16, 20, 17, 20); -// Laundry room - line(this, t_wall_h, 1, 13, 10, 13); - ter_set(rng(3, 8), 13, t_door_c); - line(this, t_wall_v, 10, 14, 10, 22); - ter_set(10, rng(16, 20), t_door_c); - line_furn(this, f_counter, 1, 14, 1, 22); - place_items("allclothes", 70, 1, 14, 1, 22, false, 0); - for (int j = 15; j <= 21; j += 3) { - line_furn(this, f_rack, 4, j, 7, j); - if (one_in(2)) - place_items("cleaning", 92, 4, j, 7, j, false, 0); - else if (one_in(5)) - place_items("cannedfood", 75, 4, j, 7, j, false, 0); - else - place_items("allclothes", 50, 4, j, 7, j, false, 0); - } - break; - } - - -// We have walls to the north and east if they're not hospitals - if (t_east != ot_hospital_entrance && t_east != ot_hospital) - line(this, t_wall_v, 23, 0, 23, 23); - if (t_north != ot_hospital_entrance && t_north != ot_hospital) - line(this, t_wall_h, 0, 0, 23, 0); - } -// Generate bodies / zombies - rn = rng(15, 20); - for (int i = 0; i < rn; i++) { - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), g->turn); - int zx = rng(0, SEEX * 2 - 1), zy = rng(0, SEEY * 2 - 1); - if (move_cost(zx, zy) > 0) { - if (furn(zx, zy) == f_bed || one_in(3)) { - add_item(zx, zy, body); - } else { - std::string zom = "mon_zombie"; - if (one_in(6)) { - zom = "mon_zombie_spitter"; - } else if (!one_in(3)) { - zom = "mon_boomer"; - } - add_spawn(zom, 1, zx, zy); - } - } else { - //This is a wall: try again - i--; - } - } - break; - - case ot_mansion_entrance: { -// Left wall - line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 2); - line(this, t_door_c, 0, SEEY - 1, 0, SEEY); -// Front wall - line(this, t_wall_h, 1, 10, SEEX * 2 - 1, 10); - line(this, t_door_locked, SEEX - 1, 10, SEEX, 10); - int winx1 = rng(2, 4); - int winx2 = rng(4, 6); - line(this, t_window, winx1, 10, winx2, 10); - line(this, t_window, SEEX * 2 - 1 - winx1, 10, SEEX * 2 - 1 - winx2, 10); - winx1 = rng(7, 10); - winx2 = rng(10, 11); - line(this, t_window, winx1, 10, winx2, 10); - line(this, t_window, SEEX * 2 - 1 - winx1, 10, SEEX * 2 - 1 - winx2, 10); - line(this, t_door_c, SEEX - 1, 10, SEEX, 10); -// Bottom wall - line(this, t_wall_h, 0, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); - line(this, t_door_c, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - - build_mansion_room(this, room_mansion_courtyard, 1, 0, SEEX * 2 - 1, 9); - square(this, t_floor, 1, 11, SEEX * 2 - 1, SEEY * 2 - 2); - build_mansion_room(this, room_mansion_entry, 1, 11, SEEX * 2 - 1, SEEY*2 - 2); -// Rotate to face the road - if (t_east >= ot_road_null && t_east <= ot_bridge_ew) - rotate(1); - if (t_south >= ot_road_null && t_south <= ot_bridge_ew) - rotate(2); - if (t_west >= ot_road_null && t_west <= ot_bridge_ew) - rotate(3); - // add zombies - if (one_in(3)) - { - add_spawn("mon_zombie", rng(1,8), 12, 12); - } - } break; - - case ot_mansion: -// Start with floors all over - square(this, t_floor, 1, 0, SEEX * 2 - 1, SEEY * 2 - 2); -// We always have a left and bottom wall - line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 2); - line(this, t_wall_h, 0, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); -// tw and rw are the boundaries of the rooms inside... - tw = 0; - rw = SEEX * 2 - 1; -// ...if we need outside walls, adjust tw & rw and build them -// We build windows below. - if (t_north != ot_mansion_entrance && t_north != ot_mansion) { - tw = 1; - line(this, t_wall_h, 0, 0, SEEX * 2 - 1, 0); - } - if (t_east != ot_mansion_entrance && t_east != ot_mansion) { - rw = SEEX * 2 - 2; - line(this, t_wall_v, SEEX * 2 - 1, 0, SEEX * 2 - 1, SEEX * 2 - 1); - } -// Now pick a random layout - switch (rng(1, 10)) { - - case 1: // Just one. big. room. - mansion_room(this, 1, tw, rw, SEEY * 2 - 2); - if (t_west == ot_mansion_entrance || t_west == ot_mansion) - line(this, t_door_c, 0, SEEY - 1, 0, SEEY); - if (t_south == ot_mansion_entrance || t_south == ot_mansion) - line(this, t_door_c, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - break; - - case 2: // Wide hallway, two rooms. - case 3: - if (one_in(2)) { // vertical hallway - line(this, t_wall_v, 9, tw, 9, SEEY * 2 - 2); - line(this, t_wall_v, 14, tw, 14, SEEY * 2 - 2); - line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - line(this, t_door_c, 0, SEEY - 1, 0, SEEY); - mansion_room(this, 1, tw, 8, SEEY * 2 - 2); - mansion_room(this, 15, tw, rw, SEEY * 2 - 2); - ter_set( 9, rng(tw + 2, SEEX * 2 - 4), t_door_c); - ter_set(14, rng(tw + 2, SEEX * 2 - 4), t_door_c); - } else { // horizontal hallway - line(this, t_wall_h, 1, 9, rw, 9); - line(this, t_wall_h, 1, 14, rw, 14); - line(this, t_door_c, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - line(this, t_floor, 0, SEEY - 1, 0, SEEY); - mansion_room(this, 1, tw, rw, 8); - mansion_room(this, 1, 15, rw, SEEY * 2 - 2); - ter_set(rng(3, rw - 2), 9, t_door_c); - ter_set(rng(3, rw - 2), 14, t_door_c); - } - if (t_west == ot_mansion_entrance || t_west == ot_mansion) - line(this, t_door_c, 0, SEEY - 1, 0, SEEY); - if (t_south == ot_mansion_entrance || t_south == ot_mansion) - line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - break; - - case 4: // Four corners rooms - case 5: - case 6: - case 7: - case 8: - line(this, t_wall_v, 10, tw, 10, 9); - line(this, t_wall_v, 13, tw, 13, 9); - line(this, t_wall_v, 10, 14, 10, SEEY * 2 - 2); - line(this, t_wall_v, 13, 14, 13, SEEY * 2 - 2); - line(this, t_wall_h, 1, 10, 10, 10); - line(this, t_wall_h, 1, 13, 10, 13); - line(this, t_wall_h, 13, 10, rw, 10); - line(this, t_wall_h, 13, 13, rw, 13); -// Doors - if (one_in(2)) - ter_set(10, rng(tw + 1, 8), t_door_c); - else - ter_set(rng(2, 8), 10, t_door_c); - - if (one_in(2)) - ter_set(13, rng(tw + 1, 8), t_door_c); - else - ter_set(rng(15, rw - 1), 10, t_door_c); - - if (one_in(2)) - ter_set(10, rng(15, SEEY * 2 - 3), t_door_c); - else - ter_set(rng(2, 8), 13, t_door_c); - - if (one_in(2)) - ter_set(13, rng(15, SEEY * 2 - 3), t_door_c); - else - ter_set(rng(15, rw - 1), 13, t_door_c); - - mansion_room(this, 1, tw, 9, 9); - mansion_room(this, 14, tw, rw, 9); - mansion_room(this, 1, 14, 9, SEEY * 2 - 2); - mansion_room(this, 14, 14, rw, SEEY * 2 - 2); - if (t_west == ot_mansion_entrance || t_west == ot_mansion) - line(this, t_floor, 0, SEEY - 1, 0, SEEY); - if (t_south == ot_mansion_entrance || t_south == ot_mansion) - line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - break; - - case 9: // One large room in lower-left - case 10: - mw = rng( 4, 10); - cw = rng(13, 19); - x = rng(5, 10); - y = rng(13, 18); - line(this, t_wall_h, 1, mw, cw, mw); - ter_set( rng(x + 1, cw - 1), mw, t_door_c); - line(this, t_wall_v, cw, mw + 1, cw, SEEY * 2 - 2); - ter_set(cw, rng(y + 2, SEEY * 2 - 3) , t_door_c); - mansion_room(this, 1, mw + 1, cw - 1, SEEY * 2 - 2); -// And a couple small rooms in the UL LR corners - line(this, t_wall_v, x, tw, x, mw - 1); - mansion_room(this, 1, tw, x - 1, mw - 1); - if (one_in(2)) - ter_set(rng(2, x - 2), mw, t_door_c); - else - ter_set(x, rng(tw + 2, mw - 2), t_door_c); - line(this, t_wall_h, cw + 1, y, rw, y); - mansion_room(this, cw + 1, y+1, rw, SEEY * 2 - 2); - if (one_in(2)) - ter_set(rng(cw + 2, rw - 1), y, t_door_c); - else - ter_set(cw, rng(y + 2, SEEY * 2 - 3), t_door_c); - - if (t_west == ot_mansion_entrance || t_west == ot_mansion) - line(this, t_floor, 0, SEEY - 1, 0, SEEY); - if (t_south == ot_mansion_entrance || t_south == ot_mansion) - line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); - break; - } // switch (rng(1, 4)) - -// Finally, place windows on outside-facing walls if necessary - if (t_west != ot_mansion_entrance && t_west != ot_mansion) { - int consecutive = 0; - for (int i = 1; i < SEEY; i++) { - if (move_cost(1, i) != 0 && move_cost(1, SEEY * 2 - 1 - i) != 0) { - if (consecutive == 3) - consecutive = 0; // No really long windows - else { - consecutive++; - ter_set(0, i, t_window); - ter_set(0, SEEY * 2 - 1 - i, t_window); - } - } else - consecutive = 0; - } - } - if (t_south != ot_mansion_entrance && t_south != ot_mansion) { - int consecutive = 0; - for (int i = 1; i < SEEX; i++) { - if (move_cost(i, SEEY * 2 - 2) != 0 && - move_cost(SEEX * 2 - 1 - i, SEEY * 2 - 2) != 0) { - if (consecutive == 3) - consecutive = 0; // No really long windows - else { - consecutive++; - ter_set(i, SEEY * 2 - 1, t_window); - ter_set(SEEX * 2 - 1 - i, SEEY * 2 - 1, t_window); - } - } else - consecutive = 0; - } - } - if (t_east != ot_mansion_entrance && t_east != ot_mansion) { - int consecutive = 0; - for (int i = 1; i < SEEY; i++) { - if (move_cost(SEEX * 2 - 2, i) != 0 && - move_cost(SEEX * 2 - 2, SEEY * 2 - 1 - i) != 0) { - if (consecutive == 3) - consecutive = 0; // No really long windows - else { - consecutive++; - ter_set(SEEX * 2 - 1, i, t_window); - ter_set(SEEX * 2 - 1, SEEY * 2 - 1 - i, t_window); - } - } else - consecutive = 0; - } - } - - if (t_north != ot_mansion_entrance && t_north != ot_mansion) { - int consecutive = 0; - for (int i = 1; i < SEEX; i++) { - if (move_cost(i, 1) != 0 && move_cost(SEEX * 2 - 1 - i, 1) != 0) { - if (consecutive == 3) - consecutive = 0; // No really long windows - else { - consecutive++; - ter_set(i, 0, t_window); - ter_set(SEEX * 2 - 1 - i, 0, t_window); - } - } else - consecutive = 0; - } - } - // add zombies - if (one_in(2)) - { - add_spawn("mon_zombie", rng(4,8), 12, 12); - } - break; - - case ot_fema_entrance: { - fill_background(this, t_dirt); -// Left wall - line(this, t_chainfence_v, 0, 0, 0, SEEY * 2 - 2); - line(this, t_fence_barbed, 1, 4, 9, 12); - line(this, t_fence_barbed, 1, 5, 8, 12); - line(this, t_fence_barbed, 23, 4, 15, 12); - line(this, t_fence_barbed, 23, 5, 16, 12); - square(this, t_wall_wood, 2, 13, 9, 21); - square(this, t_floor, 3, 14, 8, 20); - line(this, t_reinforced_glass_h, 5, 13, 6, 13); - line(this, t_reinforced_glass_h, 5, 21, 6, 21); - line(this, t_reinforced_glass_v, 9, 15, 9, 18); - line(this, t_door_c, 9, 16, 9, 17); - line_furn(this, f_locker, 3, 16, 3, 18); - line_furn(this, f_chair, 5, 16, 5, 18); - line_furn(this, f_desk, 6, 16, 6, 18); - line_furn(this, f_chair, 7, 16, 7, 18); - place_items("office", 80, 3, 16, 3, 18, false, 0); - place_items("office", 80, 6, 16, 6, 18, false, 0); - add_spawn("mon_zombie_soldier", rng(1, 6), 4, 17); - - // Rotate to face the road - if (t_east >= ot_road_null && t_east <= ot_bridge_ew) - rotate(1); - if (t_south >= ot_road_null && t_south <= ot_bridge_ew) - rotate(2); - if (t_west >= ot_road_null && t_west <= ot_bridge_ew) - rotate(3); - } break; - - case ot_fema: { - fill_background(this, t_dirt); - line(this, t_chainfence_v, 0, 0, 0, 23); - line(this, t_chainfence_h, 0, 23, 23, 23); - if (t_north != ot_fema_entrance && t_north != ot_fema) { - line(this, t_chainfence_h, 0, 0, 23, 0); - } - if (t_east != ot_fema_entrance && t_east != ot_fema) { - line(this, t_chainfence_v, 23, 0, 23, 23); - } - if (t_south == ot_fema) { - line(this, t_dirt, 0, 23, 23, 23); - } - if (t_west == ot_fema) { - line(this, t_dirt, 0, 0, 0, 23); - } - if(t_west == ot_fema && t_east == ot_fema && t_south != ot_fema){ //lab bottom side - square(this, t_dirt, 1, 1, 22, 22); - square(this, t_floor, 4, 4, 19, 19); - line(this, t_concrete_h, 4, 4, 19, 4); - line(this, t_concrete_h, 4, 19, 19, 19); - line(this, t_concrete_v, 4, 5, 4, 18); - line(this, t_concrete_v, 19, 5, 19, 18); - line(this, t_door_metal_c, 11, 4, 12, 4); - line_furn(this, f_glass_fridge, 6, 5, 9, 5); - line_furn(this, f_glass_fridge, 14, 5, 17, 5); - square(this, t_grate, 6, 8, 8, 9); - line_furn(this, f_table, 7, 8, 7, 9); - square(this, t_grate, 6, 12, 8, 13); - line_furn(this, f_table, 7, 12, 7, 13); - square(this, t_grate, 6, 16, 8, 17); - line_furn(this, f_table, 7, 16, 7, 17); - line_furn(this, f_counter, 10, 8, 10, 17); - square_furn(this, f_chair, 14, 8, 17, 10); - square(this, t_console_broken, 15, 8, 16, 10); - line_furn(this, f_desk, 15, 11, 16, 11); - line_furn(this, f_chair, 15, 12, 16, 12); - line(this, t_reinforced_glass_h, 13, 14, 18, 14); - line(this, t_reinforced_glass_v, 13, 14, 13, 18); - ter_set(15, 14, t_door_metal_locked); - place_items("dissection", 90, 10, 8, 10, 17, false, 0); - place_items("hospital_lab", 70, 5, 5, 18, 18, false, 0); - place_items("harddrugs", 50, 6, 5, 9, 5, false, 0); - place_items("harddrugs", 50, 14, 5, 17, 5, false, 0); - place_items("hospital_samples", 50, 6, 5, 9, 5, false, 0); - place_items("hospital_samples", 50, 14, 5, 17, 5, false, 0); - add_spawn("mon_zombie_scientist", rng(1, 6), 11, 12); - if(one_in(2)) - add_spawn("mon_zombie_brute", 1, 16, 17); - } - else if (t_west == ot_fema_entrance) { - - square(this, t_dirt, 1, 1, 22, 22); //Supply tent - line_furn(this, f_canvas_wall, 4, 4, 19, 4); - line_furn(this, f_canvas_wall, 4, 4, 4, 19); - line_furn(this, f_canvas_wall, 19, 19, 19, 4); - line_furn(this, f_canvas_wall, 19, 19, 4, 19); - square_furn(this, f_fema_groundsheet, 5, 5, 8, 18); - square_furn(this, f_fema_groundsheet, 10, 5, 13, 5); - square_furn(this, f_fema_groundsheet, 10, 18, 13, 18); - square_furn(this, f_fema_groundsheet, 15, 5, 18, 7); - square_furn(this, f_fema_groundsheet, 15, 16, 18, 18); - square_furn(this, f_fema_groundsheet, 16, 10, 17, 14); - square_furn(this, f_fema_groundsheet, 9, 7, 14, 16); - line_furn(this, f_canvas_door, 11, 4, 12, 4); - line_furn(this, f_canvas_door, 11, 19, 12, 19); - square_furn(this, f_crate_c, 5, 6, 7, 7); - square_furn(this, f_crate_c, 5, 11, 7, 12); - square_furn(this, f_crate_c, 5, 16, 7, 17); - line(this, t_chainfence_h, 9, 6, 14, 6); - line(this, t_chainfence_h, 9, 17, 14, 17); - ter_set(9, 5, t_chaingate_c); - ter_set(14, 18, t_chaingate_c); - ter_set(14, 5, t_chainfence_h); - ter_set(9, 18, t_chainfence_h); - furn_set(12, 17, f_counter); - furn_set(11, 6, f_counter); - line_furn(this, f_chair, 10, 10, 13, 10); - square_furn(this, f_desk, 10, 11, 13, 12); - line_furn(this, f_chair, 10, 13, 13, 13); - line(this, t_chainfence_h, 15, 8, 18, 8); - line(this, t_chainfence_h, 15, 15, 18, 15); - line(this, t_chainfence_v, 15, 9, 15, 14); - line(this, t_chaingate_c, 15, 11, 15, 12); - line_furn(this, f_locker, 18, 9, 18, 14); - place_items("allclothes", 90, 5, 6, 7, 7, false, 0); - place_items("softdrugs", 90, 5, 11, 7, 12, false, 0); - place_items("hardware", 90, 5, 16, 7, 17, false, 0); - place_items("mil_rifles", 90, 18, 9, 18, 14, false, 0); - place_items("office", 80, 10, 11, 13, 12, false, 0); - add_spawn("mon_zombie_soldier", rng(1, 6), 12, 14); - - } - - - else{ - switch (rng(1, 5)) { - - case 1: - case 2: - case 3: - square(this, t_dirt, 1, 1, 22, 22); - square_furn(this, f_canvas_wall, 4, 4, 19, 19); //Lodging - square_furn(this, f_fema_groundsheet, 5, 5, 18, 18); - line_furn(this, f_canvas_door, 11, 4, 12, 4); - line_furn(this, f_canvas_door, 11, 19, 12, 19); - line_furn(this, f_makeshift_bed, 6, 6, 6, 17); - line_furn(this, f_makeshift_bed, 8, 6, 8, 17); - line_furn(this, f_makeshift_bed, 10, 6, 10, 17); - line_furn(this, f_makeshift_bed, 13, 6, 13, 17); - line_furn(this, f_makeshift_bed, 15, 6, 15, 17); - line_furn(this, f_makeshift_bed, 17, 6, 17, 17); - line_furn(this, f_fema_groundsheet, 6, 8, 17, 8); - line_furn(this, f_fema_groundsheet, 6, 8, 17, 8); - square_furn(this, f_fema_groundsheet, 6, 11, 17, 12); - line_furn(this, f_fema_groundsheet, 6, 15, 17, 15); - line_furn(this, f_crate_o, 6, 7, 17, 7); - line_furn(this, f_crate_o, 6, 10, 17, 10); - line_furn(this, f_crate_o, 6, 14, 17, 14); - line_furn(this, f_crate_o, 6, 17, 17, 17); - line_furn(this, f_fema_groundsheet, 7, 5, 7, 18); - line_furn(this, f_fema_groundsheet, 9, 5, 9, 18); - square_furn(this, f_fema_groundsheet, 11, 5, 12, 18); - line_furn(this, f_fema_groundsheet, 14, 5, 14, 18); - line_furn(this, f_fema_groundsheet, 16, 5, 16, 18); - place_items("livingroom", 80, 5, 5, 18, 18, false, 0); - add_spawn("mon_zombie", rng(1, 5), 11, 12); - - - - - break; - - case 4: - square(this, t_dirt, 1, 1, 22, 22); - square_furn(this, f_canvas_wall, 4, 4, 19, 19); //Mess hall/tent - square_furn(this, f_fema_groundsheet, 5, 5, 18, 18); - line_furn(this, f_canvas_door, 11, 4, 12, 4); - line_furn(this, f_canvas_door, 11, 19, 12, 19); - line_furn(this, f_crate_c, 5, 5, 5, 6); - square_furn(this, f_counter, 6, 6, 10, 8); - square(this, t_rock_floor, 6, 5, 9, 7); - furn_set(7, 6, f_woodstove); - line_furn(this, f_bench, 13, 6, 17, 6); - line_furn(this, f_table, 13, 7, 17, 7); - line_furn(this, f_bench, 13, 8, 17, 8); - - line_furn(this, f_bench, 13, 11, 17, 11); - line_furn(this, f_table, 13, 12, 17, 12); - line_furn(this, f_bench, 13, 13, 17, 13); - - line_furn(this, f_bench, 13, 15, 17, 15); - line_furn(this, f_table, 13, 16, 17, 16); - line_furn(this, f_bench, 13, 17, 17, 17); - - line_furn(this, f_bench, 6, 11, 10, 11); - line_furn(this, f_table, 6, 12, 10, 12); - line_furn(this, f_bench, 6, 13, 10, 13); - - line_furn(this, f_bench, 6, 15, 10, 15); - line_furn(this, f_table, 6, 16, 10, 16); - line_furn(this, f_bench, 6, 17, 10, 17); - - place_items("mil_food_nodrugs", 80, 5, 5, 5, 6, false, 0); - place_items("snacks", 80, 5, 5, 18, 18, false, 0); - place_items("kitchen", 70, 6, 5, 10, 8, false, 0); - place_items("dining", 80, 13, 7, 17, 7, false, 0); - place_items("dining", 80, 13, 12, 17, 12, false, 0); - place_items("dining", 80, 13, 16, 17, 16, false, 0); - place_items("dining", 80, 6, 12, 10, 12, false, 0); - place_items("dining", 80, 6, 16, 10, 16, false, 0); - add_spawn("mon_zombie", rng(1, 5), 11, 12); - - - break; - - case 5: - square(this, t_dirtfloor, 1, 1, 22, 22); - square(this, t_fence_barbed, 4, 4, 19, 19); - square(this, t_dirt, 5, 5, 18, 18); - square(this, t_pit_corpsed, 6, 6, 17, 17); - add_spawn("mon_zombie", rng(5, 20), 11, 12); - - break; - - } - } - } - - break; - - case ot_spider_pit_under: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i >= 3 && i <= SEEX * 2 - 4 && j >= 3 && j <= SEEY * 2 - 4) || - one_in(4)) { - ter_set(i, j, t_rock_floor); - if (!one_in(3)) - add_field(NULL, x, y, fd_web, rng(1, 3)); - } else - ter_set(i, j, t_rock); - } - } - ter_set(rng(3, SEEX * 2 - 4), rng(3, SEEY * 2 - 4), t_slope_up); - place_items("spider", 85, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, 0); - add_spawn("mon_spider_trapdoor", 1, rng(3, SEEX * 2 - 5), rng(3, SEEY * 2 - 4)); - break; - - case ot_anthill: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < 8 || j < 8 || i > SEEX * 2 - 9 || j > SEEY * 2 - 9) - ter_set(i, j, grass_or_dirt()); - else if ((i == 11 || i == 12) && (j == 11 || j == 12)) - ter_set(i, j, t_slope_down); - else - ter_set(i, j, t_dirtmound); - } - } - break; - - case ot_rock: - for (int i = 0; i < 4; i++) - { - if (t_nesw[i] == ot_cavern || t_nesw[i] == ot_slimepit || - t_nesw[i] == ot_slimepit_down) - nesw_fac[i] = 6; - else - nesw_fac[i] = 0; - } - - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (rng(0, n_fac) > j || rng(0, e_fac) > SEEX * 2 - 1 - i || - rng(0, w_fac) > i || rng(0, s_fac) > SEEY * 2 - 1 - j ) - ter_set(i, j, t_rock_floor); - else - ter_set(i, j, t_rock); - } - } - break; - - case ot_rift: - if (t_north != ot_rift && t_north != ot_hellmouth) { - if (connects_to(t_north, 2)) - n_fac = rng(-6, -2); - else - n_fac = rng(2, 6); - } - if (t_east != ot_rift && t_east != ot_hellmouth) { - if (connects_to(t_east, 3)) - e_fac = rng(-6, -2); - else - e_fac = rng(2, 6); - } - if (t_south != ot_rift && t_south != ot_hellmouth) { - if (connects_to(t_south, 0)) - s_fac = rng(-6, -2); - else - s_fac = rng(2, 6); - } - if (t_west != ot_rift && t_west != ot_hellmouth) { - if (connects_to(t_west, 1)) - w_fac = rng(-6, -2); - else - w_fac = rng(2, 6); - } -// Negative *_fac values indicate rock floor connection, otherwise solid rock -// Of course, if we connect to a rift, *_fac = 0, and thus lava extends all the -// way. - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((n_fac < 0 && j < n_fac * -1) || (s_fac < 0 && j >= SEEY * 2 - s_fac) || - (w_fac < 0 && i < w_fac * -1) || (e_fac < 0 && i >= SEEX * 2 - e_fac) ) - ter_set(i, j, t_rock_floor); - else if (j < n_fac || j >= SEEY * 2 - s_fac || - i < w_fac || i >= SEEX * 2 - e_fac ) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_lava); - } - } - break; - - case ot_hellmouth: - for (int i = 0; i < 4; i++) - { - if (t_nesw[i] != ot_rift && t_nesw[i] != ot_hellmouth) - nesw_fac[i] = 6; - } - - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j < n_fac || j >= SEEY*2 - s_fac || i < w_fac || i >= SEEX*2 - e_fac || - (i >= 6 && i < SEEX * 2 - 6 && j >= 6 && j < SEEY * 2 - 6)) - ter_set(i, j, t_rock_floor); - else - ter_set(i, j, t_lava); - if (i >= SEEX - 1 && i <= SEEX && j >= SEEY - 1 && j <= SEEY) - ter_set(i, j, t_slope_down); - } - } - switch (rng(0, 4)) { // Randomly chosen "altar" design - case 0: - for (int i = 7; i <= 16; i += 3) { - ter_set(i, 6, t_rock); - ter_set(i, 17, t_rock); - ter_set(6, i, t_rock); - ter_set(17, i, t_rock); - if (i > 7 && i < 16) { - ter_set(i, 10, t_rock); - ter_set(i, 13, t_rock); - } else { - ter_set(i - 1, 6 , t_rock); - ter_set(i - 1, 10, t_rock); - ter_set(i - 1, 13, t_rock); - ter_set(i - 1, 17, t_rock); - } - } - break; - case 1: - for (int i = 6; i < 11; i++) { - ter_set(i, i, t_lava); - ter_set(SEEX * 2 - 1 - i, i, t_lava); - ter_set(i, SEEY * 2 - 1 - i, t_lava); - ter_set(SEEX * 2 - 1 - i, SEEY * 2 - 1 - i, t_lava); - if (i < 10) { - ter_set(i + 1, i, t_lava); - ter_set(SEEX * 2 - i, i, t_lava); - ter_set(i + 1, SEEY * 2 - 1 - i, t_lava); - ter_set(SEEX * 2 - i, SEEY * 2 - 1 - i, t_lava); - - ter_set(i, i + 1, t_lava); - ter_set(SEEX * 2 - 1 - i, i + 1, t_lava); - ter_set(i, SEEY * 2 - i, t_lava); - ter_set(SEEX * 2 - 1 - i, SEEY * 2 - i, t_lava); - } - if (i < 9) { - ter_set(i + 2, i, t_rock); - ter_set(SEEX * 2 - i + 1, i, t_rock); - ter_set(i + 2, SEEY * 2 - 1 - i, t_rock); - ter_set(SEEX * 2 - i + 1, SEEY * 2 - 1 - i, t_rock); - - ter_set(i, i + 2, t_rock); - ter_set(SEEX * 2 - 1 - i, i + 2, t_rock); - ter_set(i, SEEY * 2 - i + 1, t_rock); - ter_set(SEEX * 2 - 1 - i, SEEY * 2 - i + 1, t_rock); - } - } - break; - case 2: - for (int i = 7; i < 17; i++) { - ter_set(i, 6, t_rock); - ter_set(6, i, t_rock); - ter_set(i, 17, t_rock); - ter_set(17, i, t_rock); - if (i != 7 && i != 16 && i != 11 && i != 12) { - ter_set(i, 8, t_rock); - ter_set(8, i, t_rock); - ter_set(i, 15, t_rock); - ter_set(15, i, t_rock); - } - if (i == 11 || i == 12) { - ter_set(i, 10, t_rock); - ter_set(10, i, t_rock); - ter_set(i, 13, t_rock); - ter_set(13, i, t_rock); - } - } - break; - case 3: - for (int i = 6; i < 11; i++) { - for (int j = 6; j < 11; j++) { - ter_set(i, j, t_lava); - ter_set(SEEX * 2 - 1 - i, j, t_lava); - ter_set(i, SEEY * 2 - 1 - j, t_lava); - ter_set(SEEX * 2 - 1 - i, SEEY * 2 - 1 - j, t_lava); - } - } - break; - } - break; - - case ot_slimepit: - case ot_slimepit_down: - for (int i = 0; i < 4; i++) - nesw_fac[i] = (t_nesw[i] == ot_slimepit || t_nesw[i] == ot_slimepit_down ? 1 : 0); - - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (!one_in(10) && (j < n_fac * SEEX || i < w_fac * SEEX || - j > SEEY*2 - s_fac*SEEY || i > SEEX*2 - e_fac*SEEX)) - ter_set(i, j, (!one_in(10) ? t_slime : t_rock_floor)); - else if (rng(0, SEEX) > abs(i - SEEX) && rng(0, SEEY) > abs(j - SEEY)) - ter_set(i, j, t_slime); - else if (t_above == ot_null) - ter_set(i, j, t_dirt); - else - ter_set(i, j, t_rock_floor); - } - } - - if (terrain_type == ot_slimepit_down) - ter_set(rng(3, SEEX * 2 - 4), rng(3, SEEY * 2 - 4), t_slope_down); - - if (t_above == ot_slimepit_down) { - switch (rng(1, 4)) { - case 1: ter_set(rng(0, 2), rng(0, 2), t_slope_up); - case 2: ter_set(rng(0, 2), SEEY * 2 - rng(1, 3), t_slope_up); - case 3: ter_set(SEEX * 2 - rng(1, 3), rng(0, 2), t_slope_up); - case 4: ter_set(SEEX * 2 - rng(1, 3), SEEY * 2 - rng(1, 3), t_slope_up); - } - } - - add_spawn("mon_blob", 8, SEEX, SEEY); - place_items("sewer", 40, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - - break; - - case ot_triffid_grove: - fill_background(this, t_dirt); - for (int rad = 5; rad < SEEX - 2; rad += rng(2, 3)) { - square(this, t_tree, rad, rad, 23 - rad, 23 - rad); - square(this, t_dirt, rad + 1, rad + 1, 22 - rad, 22 - rad); - if (one_in(2)) { // Vertical side opening - int x = (one_in(2) ? rad : 23 - rad), y = rng(rad + 1, 22 - rad); - ter_set(x, y, t_dirt); - } else { // Horizontal side opening - int x = rng(rad + 1, 22 - rad), y = (one_in(2) ? rad : 23 - rad); - ter_set(x, y, t_dirt); - } - add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, rad + 1, rad + 1); - add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, 22 - rad, rad + 1); - add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, rad + 1, 22 - rad); - add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, 22 - rad, 22 - rad); - } - square(this, t_slope_down, SEEX - 1, SEEY - 1, SEEX, SEEY); - break; - - case ot_triffid_roots: { - fill_background(this, t_root_wall); - int node = 0; - int step = 0; - bool node_built[16]; - bool done = false; - for (int i = 0; i < 16; i++) - node_built[i] = false; - do { - node_built[node] = true; - step++; - int nodex = 1 + 6 * (node % 4), nodey = 1 + 6 * int(node / 4); -// Clear a 4x4 dirt square - square(this, t_dirt, nodex, nodey, nodex + 3, nodey + 3); -// Spawn a monster in there - if (step > 2) { // First couple of chambers are safe - int monrng = rng(1, 25); - int spawnx = nodex + rng(0, 3), spawny = nodey + rng(0, 3); - if (monrng <= 5) - add_spawn("mon_triffid", rng(1, 4), spawnx, spawny); - else if (monrng <= 13) - add_spawn("mon_creeper_hub", 1, spawnx, spawny); - else if (monrng <= 19) - add_spawn("mon_biollante", 1, spawnx, spawny); - else if (monrng <= 24) - add_spawn("mon_fungal_fighter", 1, spawnx, spawny); - else { - for (int webx = nodex; webx <= nodex + 3; webx++) { - for (int weby = nodey; weby <= nodey + 3; weby++) - add_field(g, webx, weby, fd_web, rng(1, 3)); - } - add_spawn("mon_spider_web", 1, spawnx, spawny); - } - } -// TODO: Non-monster hazards? -// Next, pick a cell to move to - std::vector move; - if (node % 4 > 0 && !node_built[node - 1]) - move.push_back(WEST); - if (node % 4 < 3 && !node_built[node + 1]) - move.push_back(EAST); - if (int(node / 4) > 0 && !node_built[node - 4]) - move.push_back(NORTH); - if (int(node / 4) < 3 && !node_built[node + 4]) - move.push_back(SOUTH); - - if (move.empty()) { // Nowhere to go! - square(this, t_slope_down, nodex + 1, nodey + 1, nodex + 2, nodey + 2); - done = true; - } else { - int index = rng(0, move.size() - 1); - switch (move[index]) { - case NORTH: - square(this, t_dirt, nodex + 1, nodey - 2, nodex + 2, nodey - 1); - node -= 4; - break; - case EAST: - square(this, t_dirt, nodex + 4, nodey + 1, nodex + 5, nodey + 2); - node++; - break; - case SOUTH: - square(this, t_dirt, nodex + 1, nodey + 4, nodex + 2, nodey + 5); - node += 4; - break; - case WEST: - square(this, t_dirt, nodex - 2, nodey + 1, nodex - 1, nodey + 2); - node--; - break; - default: break; - } - } - } while (!done); - square(this, t_slope_up, 2, 2, 3, 3); - rotate(rng(0, 3)); - } break; - - case ot_triffid_finale: { - fill_background(this, t_root_wall); - square(this, t_dirt, 1, 1, 4, 4); - square(this, t_dirt, 19, 19, 22, 22); -// Drunken walk until we reach the heart (lower right, [19, 19]) -// Chance increases by 1 each turn, and gives the % chance of forcing a move -// to the right or down. - int chance = 0; - int x = 4, y = 4; - do { - ter_set(x, y, t_dirt); - - if (chance >= 10 && one_in(10)) { // Add a spawn - if (one_in(2)) - add_spawn("mon_biollante", 1, x, y); - else if (!one_in(4)) - add_spawn("mon_creeper_hub", 1, x, y); - else - add_spawn("mon_triffid", 1, x, y); - } - - if (rng(0, 99) < chance) { // Force movement down or to the right - if (x >= 19) - y++; - else if (y >= 19) - x++; - else { - if (one_in(2)) - x++; - else - y++; - } - } else { - chance++; // Increase chance of forced movement down/right -// Weigh movement towards directions with lots of existing walls - int chance_west = 0, chance_east = 0, chance_north = 0, chance_south = 0; - for (int dist = 1; dist <= 5; dist++) { - if (ter(x - dist, y) == t_root_wall) - chance_west++; - if (ter(x + dist, y) == t_root_wall) - chance_east++; - if (ter(x, y - dist) == t_root_wall) - chance_north++; - if (ter(x, y + dist) == t_root_wall) - chance_south++; - } - int roll = rng(0, chance_west + chance_east + chance_north + chance_south); - if (roll < chance_west && x > 0) - x--; - else if (roll < chance_west + chance_east && x < 23) - x++; - else if (roll < chance_west + chance_east + chance_north && y > 0) - y--; - else if (y < 23) - y++; - } // Done with drunken walk - } while (x < 19 || y < 19); - square(this, t_slope_up, 1, 1, 2, 2); - add_spawn("mon_triffid_heart", 1, 21, 21); - } break; - - case ot_basement: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i == 0 || j == 0 || i == SEEX * 2 - 1 || j == SEEY * 2 - 1) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_rock_floor); - } - } - ter_set(SEEX - 1, SEEY * 2 - 2, t_stairs_up); - ter_set(SEEX , SEEY * 2 - 2, t_stairs_up); - line(this, t_rock, SEEX - 2, SEEY * 2 - 4, SEEX - 2, SEEY * 2 - 2); - line(this, t_rock, SEEX + 1, SEEY * 2 - 4, SEEX + 1, SEEY * 2 - 2); - line(this, t_door_locked, SEEX - 1, SEEY * 2 - 4, SEEX, SEEY * 2 - 4); - switch (rng(0, 4)) { // TODO: More types! - - case 0: // Junk! - place_items("bedroom", 60, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2, false, 0); - place_items("home_hw", 80, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2, false, 0); - place_items("homeguns", 10, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2, false, 0); - break; - - case 1: // Weapons cache - for (int i = 2; i < SEEX * 2 - 2; i++) { - furn_set(i, 1, f_rack); - furn_set(i, 5, f_rack); - furn_set(i, 9, f_rack); - } - place_items("allguns", 80, 2, 1, SEEX * 2 - 3, 1, false, 0); - place_items("ammo", 94, 2, 5, SEEX * 2 - 3, 5, false, 0); - place_items("gunxtras", 88, 2, 9, SEEX * 2 - 7, 9, false, 0); - place_items("weapons", 88, SEEX * 2 - 6, 9, SEEX * 2 - 3, 9, false, 0); - break; - - case 2: // Survival Bunker - furn_set(1, 1, f_bed); - furn_set(1, 2, f_bed); - furn_set(SEEX * 2 - 2, 1, f_bed); - furn_set(SEEX * 2 - 2, 2, f_bed); - for (int i = 1; i < SEEY; i++) { - furn_set(SEEX - 1, i, f_rack); - furn_set(SEEX , i, f_rack); - } - place_items("softdrugs", 86, SEEX - 1, 1, SEEX, 2, false, 0); - place_items("cannedfood", 92, SEEX - 1, 3, SEEX, 6, false, 0); - place_items("homeguns", 72, SEEX - 1, 7, SEEX, 7, false, 0); - place_items("survival_tools",83, SEEX - 1, 8, SEEX, 10, false, 0); - place_items("manuals", 60, SEEX - 1, 11, SEEX, 11, false, 0); - break; - - case 3: // Chem lab - for (int i = 1; i < SEEY + 4; i++) { - furn_set(1 , i, f_counter); - furn_set(SEEX * 2 - 2, i, f_counter); - } - place_items("chemistry", 90, 1, 1, 1, SEEY + 3, false, 0); - if (one_in(3)) - place_items("chemistry", 90, SEEX*2-2, 1, SEEX*2-2, SEEY + 3, false, 0); - else - place_items("electronics", 90, SEEX*2-2, 1, SEEX*2-2, SEEY + 3, false, 0); - break; - - case 4: // Weed grow - line_furn(this, f_counter, 1, 1, 1, SEEY * 2 - 2); - line_furn(this, f_counter, SEEX * 2 - 2, 1, SEEX * 2 - 2, SEEY * 2 - 2); - for (int i = 3; i < SEEX * 2 - 3; i += 5) { - for (int j = 3; j < 16; j += 5) { - square(this, t_dirt, i, j, i + 2, j + 2); - int num_weed = rng(0, 4) * rng(0, 1); - for (int n = 0; n < num_weed; n++) { - int x = rng(i, i + 2), y = rng(j, j + 2); - spawn_item(x, y, one_in(5)?"seed_weed":"weed", 0); - } - } - } - break; - } - // Chance of zombies in the basement, only appear north of the anteroom the stairs are in. - place_spawns(g, "GROUP_ZOMBIE", 2, 1, 1, SEEX * 2 - 1, SEEX * 2 - 5, density); - break; - -// TODO: Maybe subway systems could have broken down trains in them? - case ot_subway_station: - if (t_north >= ot_subway_ns && t_north <= ot_subway_nesw && - connects_to(t_north, 2)) - n_fac = 1; - if (t_east >= ot_subway_ns && t_east <= ot_subway_nesw && - connects_to(t_east, 3)) - e_fac = 1; - if (t_south >= ot_subway_ns && t_south <= ot_subway_nesw && - connects_to(t_south, 0)) - s_fac = 1; - if (t_west >= ot_subway_ns && t_west <= ot_subway_nesw && - connects_to(t_west, 1)) - w_fac = 1; - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i < 4 && (w_fac == 0 || j < 4 || j > SEEY * 2 - 5)) || - (j < 4 && (n_fac == 0 || i < 4 || i > SEEX * 2 - 5)) || - (i > SEEX * 2 - 5 && (e_fac == 0 || j < 4 || j > SEEY * 2 - 5)) || - (j > SEEY * 2 - 5 && (s_fac == 0 || i < 4 || i > SEEX * 2 - 5))) - ter_set(i, j, t_rock_floor); - else - ter_set(i, j, t_rock_floor); - } - } - ter_set(2, 2 , t_stairs_up); - ter_set(SEEX * 2 - 3, 2 , t_stairs_up); - ter_set(2, SEEY * 2 - 3, t_stairs_up); - ter_set(SEEX * 2 - 3, SEEY * 2 - 3, t_stairs_up); - if (ter(2, SEEY) == t_floor) - ter_set(2, SEEY, t_stairs_up); - if (ter(SEEX * 2 - 3, SEEY) == t_floor) - ter_set(SEEX * 2 - 3, SEEY, t_stairs_up); - if (ter(SEEX, 2) == t_floor) - ter_set(SEEX, 2, t_stairs_up); - if (ter(SEEX, SEEY * 2 - 3) == t_floor) - ter_set(SEEX, SEEY * 2 - 3, t_stairs_up); - break; - case ot_subway_ns: - case ot_subway_ew: - if (terrain_type == ot_subway_ns) { - w_fac = (t_west == ot_cavern ? 0 : 4); - e_fac = (t_east == ot_cavern ? SEEX * 2 : SEEX * 2 - 5); - } else { - w_fac = (t_north == ot_cavern ? 0 : 4); - e_fac = (t_south == ot_cavern ? SEEX * 2 : SEEX * 2 - 5); - } - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < w_fac || i > e_fac) - ter_set(i, j, t_rock); - else if (one_in(90)) - ter_set(i, j, t_rubble); - else - ter_set(i, j, t_rock_floor); - } - } - if (t_above >= ot_sub_station_north && t_above <= ot_sub_station_west) - ter_set(SEEX * 2 - 5, rng(SEEY - 5, SEEY + 4), t_stairs_up); - place_items("subway", 30, 4, 0, SEEX * 2 - 5, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_subway_ew) - rotate(1); - break; - - case ot_subway_ne: - case ot_subway_es: - case ot_subway_sw: - case ot_subway_wn: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i >= SEEX * 2 - 4 && j < 4) || i < 4 || j >= SEEY * 2 - 4) - ter_set(i, j, t_rock); - else if (one_in(30)) - ter_set(i, j, t_rubble); - else - ter_set(i, j, t_rock_floor); - } - } - if (t_above >= ot_sub_station_north && t_above <= ot_sub_station_west) - ter_set(SEEX * 2 - 5, rng(SEEY - 5, SEEY + 4), t_stairs_up); - place_items("subway", 30, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_subway_es) - rotate(1); - if (terrain_type == ot_subway_sw) - rotate(2); - if (terrain_type == ot_subway_wn) - rotate(3); - break; - - case ot_subway_nes: - case ot_subway_new: - case ot_subway_nsw: - case ot_subway_esw: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < 4 || (i >= SEEX * 2 - 4 && (j < 4 || j >= SEEY * 2 - 4))) - ter_set(i, j, t_rock); - else if (one_in(30)) - ter_set(i, j, t_rubble); - else - ter_set(i, j, t_rock_floor); - } - } - if (t_above >= ot_sub_station_north && t_above <= ot_sub_station_west) - ter_set(4, rng(SEEY - 5, SEEY + 4), t_stairs_up); - place_items("subway", 35, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_subway_esw) - rotate(1); - if (terrain_type == ot_subway_nsw) - rotate(2); - if (terrain_type == ot_subway_new) - rotate(3); - break; - - case ot_subway_nesw: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i < 4 || i >= SEEX * 2 - 4) && - (j < 4 || j >= SEEY * 2 - 4)) - ter_set(i, j, t_rock); - else if (one_in(30)) - ter_set(i, j, t_rubble); - else - ter_set(i, j, t_rock_floor); - } - } - if (t_above >= ot_sub_station_north && t_above <= ot_sub_station_west) - ter_set(4 + rng(0,1)*(SEEX * 2 - 9), 4 + rng(0,1)*(SEEY * 2 - 9), t_stairs_up); - place_items("subway", 40, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - break; - - case ot_sewer_ns: - case ot_sewer_ew: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < SEEX - 2 || i > SEEX + 1) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_sewage); - } - } - place_items("sewer", 10, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_sewer_ew) - rotate(1); - break; - - case ot_sewer_ne: - case ot_sewer_es: - case ot_sewer_sw: - case ot_sewer_wn: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i > SEEX + 1 && j < SEEY - 2) || i < SEEX - 2 || j > SEEY + 1) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_sewage); - } - } - place_items("sewer", 18, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_sewer_es) - rotate(1); - if (terrain_type == ot_sewer_sw) - rotate(2); - if (terrain_type == ot_sewer_wn) - rotate(3); - break; - - case ot_sewer_nes: - case ot_sewer_new: - case ot_sewer_nsw: - case ot_sewer_esw: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < SEEX - 2 || (i > SEEX + 1 && (j < SEEY - 2 || j > SEEY + 1))) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_sewage); - } - } - place_items("sewer", 23, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_sewer_esw) - rotate(1); - if (terrain_type == ot_sewer_nsw) - rotate(2); - if (terrain_type == ot_sewer_new) - rotate(3); - break; - - case ot_sewer_nesw: - rn = rng(0, 3); - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((i < SEEX - 2 || i > SEEX + 1) && (j < SEEY - 2 || j > SEEY + 1)) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_sewage); - if (rn == 0 && (trig_dist(i, j, SEEX - 1, SEEY - 1) <= 6 || - trig_dist(i, j, SEEX - 1, SEEY ) <= 6 || - trig_dist(i, j, SEEX, SEEY - 1) <= 6 || - trig_dist(i, j, SEEX, SEEY ) <= 6 )) - ter_set(i, j, t_sewage); - if (rn == 0 && (i == SEEX - 1 || i == SEEX) && (j == SEEY - 1 || j == SEEY)) - ter_set(i, j, t_grate); - } - } - place_items("sewer", 28, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - break; - - case ot_ants_ns: - case ot_ants_ew: - x = SEEX; - fill_background(this, t_rock); - for (int j = 0; j < SEEY * 2; j++) { - for (int i = x - 2; i <= x + 3; i++) { - if (i >= 1 && i < SEEX * 2 - 1) - ter_set(i, j, t_rock_floor); - } - x += rng(-1, 1); - while (abs(SEEX - x) > SEEX * 2 - j - 1) { - if (x < SEEX) x++; - if (x > SEEX) x--; - } - } - if (terrain_type == ot_ants_ew) - rotate(1); - break; - - case ot_ants_ne: - case ot_ants_es: - case ot_ants_sw: - case ot_ants_wn: - x = SEEX; - y = 1; - rn = 0; -// First, set it all to rock - fill_background(this, t_rock); - - for (int i = SEEX - 2; i <= SEEX + 3; i++) { - ter_set(i, 0, t_rock_floor); - ter_set(i, 1, t_rock_floor); - ter_set(i, 2, t_rock_floor); - ter_set(SEEX * 2 - 1, i, t_rock_floor); - ter_set(SEEX * 2 - 2, i, t_rock_floor); - ter_set(SEEX * 2 - 3, i, t_rock_floor); - } - do { - for (int i = x - 2; i <= x + 3; i++) { - for (int j = y - 2; j <= y + 3; j++) { - if (i > 0 && i < SEEX * 2 - 1 && j > 0 && j < SEEY * 2 - 1) - ter_set(i, j, t_rock_floor); - } - } - if (rn < SEEX) { - x += rng(-1, 1); - y++; - } else { - x++; - if (!one_in(x - SEEX)) - y += rng(-1, 1); - else if (y < SEEY) - y++; - else if (y > SEEY) - y--; - } - rn++; - } while (x < SEEX * 2 - 1 || y != SEEY); - for (int i = x - 2; i <= x + 3; i++) { - for (int j = y - 2; j <= y + 3; j++) { - if (i > 0 && i < SEEX * 2 - 1 && j > 0 && j < SEEY * 2 - 1) - ter_set(i, j, t_rock_floor); - } - } - if (terrain_type == ot_ants_es) - rotate(1); - if (terrain_type == ot_ants_sw) - rotate(2); - if (terrain_type == ot_ants_wn) - rotate(3); - break; - - case ot_ants_nes: - case ot_ants_new: - case ot_ants_nsw: - case ot_ants_esw: - fill_background(this, t_rock); - x = SEEX; - for (int j = 0; j < SEEY * 2; j++) { - for (int i = x - 2; i <= x + 3; i++) { - if (i >= 1 && i < SEEX * 2 - 1) - ter_set(i, j, t_rock_floor); - } - x += rng(-1, 1); - while (abs(SEEX - x) > SEEY * 2 - j - 1) { - if (x < SEEX) x++; - if (x > SEEX) x--; - } - } - y = SEEY; - for (int i = SEEX; i < SEEX * 2; i++) { - for (int j = y - 2; j <= y + 3; j++) { - if (j >= 1 && j < SEEY * 2 - 1) - ter_set(i, j, t_rock_floor); - } - y += rng(-1, 1); - while (abs(SEEY - y) > SEEX * 2 - 1 - i) { - if (y < SEEY) y++; - if (y > SEEY) y--; - } - } - if (terrain_type == ot_ants_new) - rotate(3); - if (terrain_type == ot_ants_nsw) - rotate(2); - if (terrain_type == ot_ants_esw) - rotate(1); - break; - - case ot_ants_nesw: - fill_background(this, t_rock); - x = SEEX; - for (int j = 0; j < SEEY * 2; j++) { - for (int i = x - 2; i <= x + 3; i++) { - if (i >= 1 && i < SEEX * 2 - 1) - ter_set(i, j, t_rock_floor); - } - x += rng(-1, 1); - while (abs(SEEX - x) > SEEY * 2 - j - 1) { - if (x < SEEX) x++; - if (x > SEEX) x--; - } - } - - y = SEEY; - for (int i = 0; i < SEEX * 2; i++) { - for (int j = y - 2; j <= y + 3; j++) { - if (j >= 1 && j < SEEY * 2 - 1) - ter_set(i, j, t_rock_floor); - } - y += rng(-1, 1); - while (abs(SEEY - y) > SEEX * 2 - i - 1) { - if (y < SEEY) y++; - if (y > SEEY) y--; - } - } - break; - - case ot_ants_food: - case ot_ants_larvae: - case ot_ants_queen: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (i < SEEX - 4 || i > SEEX + 5 || j < SEEY - 4 || j > SEEY + 5) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_rock_floor); - } - } - rn = rng(10, 20); - for (int n = 0; n < rn; n++) { - cw = rng(1, 8); - do { - x = rng(1 + cw, SEEX * 2 - 2 - cw); - y = rng(1 + cw, SEEY * 2 - 2 - cw); - } while (ter(x, y) == t_rock); - for (int i = x - cw; i <= x + cw; i++) { - for (int j = y - cw; j <= y + cw; j++) { - if (trig_dist(x, y, i, j) <= cw) - ter_set(i, j, t_rock_floor); - } - } - } - if (connects_to(t_north, 2)) { - for (int i = SEEX - 2; i <= SEEX + 3; i++) { - for (int j = 0; j <= SEEY; j++) - ter_set(i, j, t_rock_floor); - } - } - if (connects_to(t_east, 3)) { - for (int i = SEEX; i <= SEEX * 2 - 1; i++) { - for (int j = SEEY - 2; j <= SEEY + 3; j++) - ter_set(i, j, t_rock_floor); - } - } - if (connects_to(t_south, 0)) { - for (int i = SEEX - 2; i <= SEEX + 3; i++) { - for (int j = SEEY; j <= SEEY * 2 - 1; j++) - ter_set(i, j, t_rock_floor); - } - } - if (connects_to(t_west, 1)) { - for (int i = 0; i <= SEEX; i++) { - for (int j = SEEY - 2; j <= SEEY + 3; j++) - ter_set(i, j, t_rock_floor); - } - } - if (terrain_type == ot_ants_food) - place_items("ant_food", 92, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - else - place_items("ant_egg", 98, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - if (terrain_type == ot_ants_queen) - add_spawn("mon_ant_queen", 1, SEEX, SEEY); - else if (terrain_type == ot_ants_larvae) - add_spawn("mon_ant_larva", 10, SEEX, SEEY); - break; - - case ot_tutorial: - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if (j == 0 || j == SEEY * 2 - 1) - ter_set(i, j, t_wall_h); - else if (i == 0 || i == SEEX * 2 - 1) - ter_set(i, j, t_wall_v); - else if (j == SEEY) { - if (i % 4 == 2) - ter_set(i, j, t_door_c); - else if (i % 5 == 3) - ter_set(i, j, t_window_domestic); - else - ter_set(i, j, t_wall_h); - } else - ter_set(i, j, t_floor); - } - } - furn_set(7, SEEY * 2 - 4, f_rack); - place_gas_pump(SEEX * 2 - 2, SEEY * 2 - 4, rng(500, 1000)); - if (t_above != ot_null) { - ter_set(SEEX - 2, SEEY + 2, t_stairs_up); - ter_set(2, 2, t_water_sh); - ter_set(2, 3, t_water_sh); - ter_set(3, 2, t_water_sh); - ter_set(3, 3, t_water_sh); - } else { - spawn_item( 5, SEEY + 1, "helmet_bike", 0); - spawn_item( 4, SEEY + 1, "backpack", 0); - spawn_item( 3, SEEY + 1, "pants_cargo", 0); - spawn_item( 7, SEEY * 2 - 4, "machete", 0); - spawn_item( 7, SEEY * 2 - 4, "9mm", 0); - spawn_item( 7, SEEY * 2 - 4, "9mmP", 0); - spawn_item( 7, SEEY * 2 - 4, "uzi", 0); - spawn_item(SEEX * 2 - 2, SEEY + 5, "bubblewrap", 0); - spawn_item(SEEX * 2 - 2, SEEY + 6, "grenade", 0); - spawn_item(SEEX * 2 - 3, SEEY + 6, "flashlight", 0); - spawn_item(SEEX * 2 - 2, SEEY + 7, "cig", 0); - spawn_item(SEEX * 2 - 2, SEEY + 7, "codeine", 0); - spawn_item(SEEX * 2 - 3, SEEY + 7, "water", 0); - ter_set(SEEX - 2, SEEY + 2, t_stairs_down); - } - break; - - case ot_cavern: - for (int i = 0; i < 4; i++) - { - nesw_fac[i] = (t_nesw[i] == ot_cavern || t_nesw[i] == ot_subway_ns || - t_nesw[i] == ot_subway_ew ? 0 : 3); - } - e_fac = SEEX * 2 - 1 - e_fac; - s_fac = SEEY * 2 - 1 - s_fac; - - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - if ((j < n_fac || j > s_fac || i < w_fac || i > e_fac) && - (!one_in(3) || j == 0 || j == SEEY*2 - 1 || i == 0 || i == SEEX*2 - 1)) - ter_set(i, j, t_rock); - else - ter_set(i, j, t_rock_floor); - } - } - - rn = rng(0, 2) * rng(0, 3) + rng(0, 1); // Number of pillars - for (int n = 0; n < rn; n++) { - int px = rng(5, SEEX * 2 - 6); - int py = rng(5, SEEY * 2 - 6); - for (int i = px - 1; i <= px + 1; i++) { - for (int j = py - 1; j <= py + 1; j++) - ter_set(i, j, t_rock); - } - } - - if (connects_to(t_north, 2)) { - for (int i = SEEX - 2; i <= SEEX + 3; i++) { - for (int j = 0; j <= SEEY; j++) - ter_set(i, j, t_rock_floor); - } - } - if (connects_to(t_east, 3)) { - for (int i = SEEX; i <= SEEX * 2 - 1; i++) { - for (int j = SEEY - 2; j <= SEEY + 3; j++) - ter_set(i, j, t_rock_floor); - } - } - if (connects_to(t_south, 0)) { - for (int i = SEEX - 2; i <= SEEX + 3; i++) { - for (int j = SEEY; j <= SEEY * 2 - 1; j++) - ter_set(i, j, t_rock_floor); - } - } - if (connects_to(t_west, 1)) { - for (int i = 0; i <= SEEX; i++) { - for (int j = SEEY - 2; j <= SEEY + 3; j++) - ter_set(i, j, t_rock_floor); - } - } - place_items("cavern", 60, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, 0); - if (one_in(6)) { // Miner remains - int x, y; - do { - x = rng(0, SEEX * 2 - 1); - y = rng(0, SEEY * 2 - 1); - } while (move_cost(x, y) == 0); - if (!one_in(3)) - spawn_item(x, y, "jackhammer", 0); - if (one_in(3)) - spawn_item(x, y, "mask_dust", 0); - if (one_in(2)) - spawn_item(x, y, "hat_hard", 0); - while (!one_in(3)){ - put_items_from("cannedfood", 3, x,y, 0, 0, 0); - } - } - break; - - default: - debugmsg("Error: tried to generate map for omtype %d, \"%s\"", terrain_type, - oterlist[terrain_type].name.c_str()); - fill_background(this, t_floor); - break; - } - -// Now, fix sewers and subways so that they interconnect. - - if (terrain_type >= ot_subway_ns && terrain_type <= ot_subway_nesw) { - if (t_north >= ot_sewer_ns && t_north <= ot_sewer_nesw && - !connects_to(terrain_type, 0)) { - if (connects_to(t_north, 2)) { - for (int i = SEEX - 2; i < SEEX + 2; i++) { - for (int j = 0; j < SEEY; j++) - ter_set(i, j, t_sewage); - } - } else { - for (int j = 0; j < 3; j++) { - ter_set(SEEX, j, t_rock_floor); - ter_set(SEEX - 1, j, t_rock_floor); - } - ter_set(SEEX, 3, t_door_metal_c); - ter_set(SEEX - 1, 3, t_door_metal_c); - } - } - if (t_east >= ot_sewer_ns && t_east <= ot_sewer_nesw && - !connects_to(terrain_type, 1)) { - if (connects_to(t_east, 3)) { - for (int i = SEEX; i < SEEX * 2; i++) { - for (int j = SEEY - 2; j < SEEY + 2; j++) - ter_set(i, j, t_sewage); - } - } else { - for (int i = SEEX * 2 - 3; i < SEEX * 2; i++) { - ter_set(i, SEEY, t_rock_floor); - ter_set(i, SEEY - 1, t_rock_floor); - } - ter_set(SEEX * 2 - 4, SEEY, t_door_metal_c); - ter_set(SEEX * 2 - 4, SEEY - 1, t_door_metal_c); - } - } - if (t_south >= ot_sewer_ns && t_south <= ot_sewer_nesw && - !connects_to(terrain_type, 2)) { - if (connects_to(t_south, 0)) { - for (int i = SEEX - 2; i < SEEX + 2; i++) { - for (int j = SEEY; j < SEEY * 2; j++) - ter_set(i, j, t_sewage); - } - } else { - for (int j = SEEY * 2 - 3; j < SEEY * 2; j++) { - ter_set(SEEX, j, t_rock_floor); - ter_set(SEEX - 1, j, t_rock_floor); - } - ter_set(SEEX, SEEY * 2 - 4, t_door_metal_c); - ter_set(SEEX - 1, SEEY * 2 - 4, t_door_metal_c); - } - } - if (t_west >= ot_sewer_ns && t_west <= ot_sewer_nesw && - !connects_to(terrain_type, 3)) { - if (connects_to(t_west, 1)) { - for (int i = 0; i < SEEX; i++) { - for (int j = SEEY - 2; j < SEEY + 2; j++) - ter_set(i, j, t_sewage); - } - } else { - for (int i = 0; i < 3; i++) { - ter_set(i, SEEY, t_rock_floor); - ter_set(i, SEEY - 1, t_rock_floor); - } - ter_set(3, SEEY, t_door_metal_c); - ter_set(3, SEEY - 1, t_door_metal_c); - } - } - } else if (terrain_type >= ot_sewer_ns && terrain_type <= ot_sewer_nesw) { - if (t_above == ot_road_nesw_manhole) - ter_set(rng(SEEX - 2, SEEX + 1), rng(SEEY - 2, SEEY + 1), t_ladder_up); - if (t_north >= ot_subway_ns && t_north <= ot_subway_nesw && - !connects_to(terrain_type, 0)) { - for (int j = 0; j < SEEY - 3; j++) { - ter_set(SEEX, j, t_rock_floor); - ter_set(SEEX - 1, j, t_rock_floor); - } - ter_set(SEEX, SEEY - 3, t_door_metal_c); - ter_set(SEEX - 1, SEEY - 3, t_door_metal_c); - } - if (t_east >= ot_subway_ns && t_east <= ot_subway_nesw && - !connects_to(terrain_type, 1)) { - for (int i = SEEX + 3; i < SEEX * 2; i++) { - ter_set(i, SEEY, t_rock_floor); - ter_set(i, SEEY - 1, t_rock_floor); - } - ter_set(SEEX + 2, SEEY, t_door_metal_c); - ter_set(SEEX + 2, SEEY - 1, t_door_metal_c); - } - if (t_south >= ot_subway_ns && t_south <= ot_subway_nesw && - !connects_to(terrain_type, 2)) { - for (int j = SEEY + 3; j < SEEY * 2; j++) { - ter_set(SEEX, j, t_rock_floor); - ter_set(SEEX - 1, j, t_rock_floor); - } - ter_set(SEEX, SEEY + 2, t_door_metal_c); - ter_set(SEEX - 1, SEEY + 2, t_door_metal_c); - } - if (t_west >= ot_subway_ns && t_west <= ot_subway_nesw && - !connects_to(terrain_type, 3)) { - for (int i = 0; i < SEEX - 3; i++) { - ter_set(i, SEEY, t_rock_floor); - ter_set(i, SEEY - 1, t_rock_floor); - } - ter_set(SEEX - 3, SEEY, t_door_metal_c); - ter_set(SEEX - 3, SEEY - 1, t_door_metal_c); - } - } else if (terrain_type >= ot_ants_ns && terrain_type <= ot_ants_queen) { - if (t_above == ot_anthill) { - bool done = false; - do { - int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); - if (ter(x, y) == t_rock_floor) { - done = true; - ter_set(x, y, t_slope_up); - } - } while (!done); - } - } - -} - -void map::post_process(game *g, unsigned zones) -{ - std::string junk; - if (zones & mfb(OMZONE_CITY)) { - if (!one_in(10)) { // 90% chance of smashing stuff up - for (int x = 0; x < 24; x++) { - for (int y = 0; y < 24; y++) - bash(x, y, 20, junk); - } - } - if (one_in(10)) { // 10% chance of corpses - int num_corpses = rng(1, 8); - for (int i = 0; i < num_corpses; i++) { - int x = rng(0, 23), y = rng(0, 23); - if (move_cost(x, y) > 0) - add_corpse(g, this, x, y); - } - } - } // OMZONE_CITY - - if (zones & mfb(OMZONE_BOMBED)) { - while (one_in(4)) { - point center( rng(4, 19), rng(4, 19) ); - int radius = rng(1, 4); - for (int x = center.x - radius; x <= center.x + radius; x++) { - for (int y = center.y - radius; y <= center.y + radius; y++) { - if (rl_dist(x, y, center.x, center.y) <= rng(1, radius)) - destroy(g, x, y, false); - } - } - } - } - -} - -void map::place_spawns(game *g, std::string group, const int chance, - const int x1, const int y1, const int x2, const int y2, const float density) -{ - if (!ACTIVE_WORLD_OPTIONS["STATIC_SPAWN"]) - return; - - float multiplier = ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"]; - - if( multiplier == 0.0 ) return; - - if (one_in(chance / multiplier)) - { - int num = density * (float)rng(10, 50) * multiplier; - - for (int i = 0; i < num; i++) - { - int tries = 10; - int x = 0; - int y = 0; - - // Pick a spot for the spawn - do { - x = rng(x1, x2); - y = rng(y1, y2); - tries--; - } while( move_cost(x, y) == 0 && tries ); - - // Pick a monster type - MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup( group, &g->mtypes, &num ); - - add_spawn(spawn_details.name, spawn_details.pack_size, x, y); - } - } -} - -void map::place_gas_pump(int x, int y, int charges) -{ - item gas(g->itypes["gasoline"], 0); - gas.charges = charges; - add_item(x, y, gas); - ter_set(x, y, t_gas_pump); -} - -void map::place_toilet(int x, int y, int charges) -{ - item water(g->itypes["water"], 0); - water.charges = charges; - add_item(x, y, water); - furn_set(x, y, f_toilet); -} - -int map::place_items(items_location loc, int chance, int x1, int y1, - int x2, int y2, bool ongrass, int turn) -{ - if (chance >= 100 || chance <= 0) { - debugmsg("map::place_items() called with an invalid chance (%d)", chance); - return 0; - } - - Item_tag selected_item; - int px, py; - int item_num = 0; - while (rng(0, 99) < chance) { - selected_item = item_controller->id_from(loc); - int tries = 0; - do { - px = rng(x1, x2); - py = rng(y1, y2); - tries++; -// Only place on valid terrain - } while (((terlist[ter(px, py)].movecost == 0 && - !(terlist[ter(px, py)].has_flag("PLACE_ITEM"))) || - (!ongrass && !terlist[ter(px, py)].has_flag("FLAT") )) && - tries < 20); - if (tries < 20) { - spawn_item(px, py, selected_item, turn); - item_num++; -// Guns in the home and behind counters are generated with their ammo -// TODO: Make this less of a hack - if (item_controller->find_template(selected_item)->is_gun() && - (loc == "homeguns" || loc == "behindcounter")) { - it_gun* tmpgun = dynamic_cast (item_controller->find_template(selected_item)); - spawn_item(px, py, default_ammo(tmpgun->ammo), turn); - } - } - } - return item_num; -} - -void map::put_items_from(items_location loc, int num, int x, int y, int turn, int quantity, int charges, int damlevel) -{ - for (int i = 0; i < num; i++) { - Item_tag selected_item = item_controller->id_from(loc); - spawn_item(x, y, selected_item, turn, quantity, charges, damlevel); - } -} - -void map::add_spawn(std::string type, int count, int x, int y, bool friendly, - int faction_id, int mission_id, std::string name) -{ - if (x < 0 || x >= SEEX * my_MAPSIZE || y < 0 || y >= SEEY * my_MAPSIZE) { - debugmsg("Bad add_spawn(%s, %d, %d, %d)", type.c_str(), count, x, y); - return; - } - int nonant = int(x / SEEX) + int(y / SEEY) * my_MAPSIZE; - if(!grid[nonant]){ - debugmsg("centadodecamonant doesn't exist in grid; within add_spawn(%s, %d, %d, %d)", - type.c_str(), count, x, y); - return; - } - if( ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] && !GetMType(type)->in_category("CLASSIC") && - !GetMType(type)->in_category("WILDLIFE") ) { - // Don't spawn non-classic monsters in classic zombie mode. - return; - } - x %= SEEX; - y %= SEEY; - spawn_point tmp(type, count, x, y, faction_id, mission_id, friendly, name); - grid[nonant]->spawns.push_back(tmp); -} - -void map::add_spawn(monster *mon) -{ - int spawnx, spawny; - std::string spawnname = (mon->unique_name == "" ? "NONE" : mon->unique_name); - if (mon->spawnmapx != -1) { - spawnx = mon->spawnposx; - spawny = mon->spawnposy; - } else { - spawnx = mon->posx(); - spawny = mon->posy(); - } - while (spawnx < 0) - spawnx += SEEX; - while (spawny < 0) - spawny += SEEY; - spawnx %= SEEX; - spawny %= SEEY; - add_spawn(mon->type->id, 1, spawnx, spawny, (mon->friendly < 0), - mon->faction_id, mon->mission_id, spawnname); -} - -vehicle *map::add_vehicle(game *g, std::string type, const int x, const int y, const int dir, - const int veh_fuel, const int veh_status, const bool merge_wrecks) -{ - if(g->vtypes.count(type) == 0) { - debugmsg("Nonexistant vehicle type: \"%s\"", type.c_str()); - return NULL; - } - if (x < 0 || x >= SEEX * my_MAPSIZE || y < 0 || y >= SEEY * my_MAPSIZE) { - debugmsg("Out of bounds add_vehicle t=%s d=%d x=%d y=%d", type.c_str(), dir, x, y); - return NULL; - } -// debugmsg("add_vehicle t=%d d=%d x=%d y=%d", type, dir, x, y); - - const int smx = x / SEEX; - const int smy = y / SEEY; -// debugmsg("n=%d x=%d y=%d MAPSIZE=%d ^2=%d", nonant, x, y, MAPSIZE, MAPSIZE*MAPSIZE); - vehicle * veh = new vehicle(g, type, veh_fuel, veh_status); - veh->posx = x % SEEX; - veh->posy = y % SEEY; - veh->smx = smx; - veh->smy = smy; - veh->place_spawn_items(); - veh->face.init(dir); - veh->turn_dir = dir; - veh->precalc_mounts (0, dir); -// veh->init_veh_fuel = 50; -// veh->init_veh_status = 0; - - vehicle *placed_vehicle = add_vehicle_to_map(veh, x, y, merge_wrecks); - - if(placed_vehicle != NULL) { - const int nonant = placed_vehicle->smx + placed_vehicle->smy * my_MAPSIZE; - grid[nonant]->vehicles.push_back(placed_vehicle); - - vehicle_list.insert(placed_vehicle); - update_vehicle_cache(placed_vehicle,true); - - //debugmsg ("grid[%d]->vehicles.size=%d veh.parts.size=%d", nonant, grid[nonant]->vehicles.size(),veh.parts.size()); - } - return placed_vehicle; -} - -/** - * Takes a vehicle already created with new and attempts to place it on the map, - * checking for collisions. If the vehicle can't be placed, returns NULL, - * otherwise returns a pointer to the placed vehicle, which may not necessarily - * be the one passed in (if wreckage is created by fusing cars). - * @param veh The vehicle to place on the map. - * @return The vehicle that was finally placed. - */ -vehicle *map::add_vehicle_to_map(vehicle *veh, const int x, const int y, const bool merge_wrecks) -{ - //We only want to check once per square, so loop over all structural parts - std::vector frame_indices = veh->all_parts_at_location("structure"); - for (std::vector::const_iterator part = frame_indices.begin(); - part != frame_indices.end(); part++) { - const int px = x + veh->parts[*part].precalc_dx[0]; - const int py = y + veh->parts[*part].precalc_dy[0]; - - //Don't spawn anything in water - if (ter(px, py) == t_water_dp || ter(px, py) == t_water_pool) { - delete veh; - return NULL; - } - - // Don't spawn shopping carts on top of another vehicle or other obstacle. - if (veh->type == "shopping_cart") { - if (veh_at(px, py) != NULL || move_cost(px, py) == 0) { - delete veh; - return NULL; - } - } - - //When hitting a wall, only smash the vehicle once (but walls many times) - bool veh_smashed = false; - //For other vehicles, simulate collisions with (non-shopping cart) stuff - vehicle *other_veh = veh_at(px, py); - if (other_veh != NULL && other_veh->type != "shopping cart") { - if( !merge_wrecks ) { - delete veh; - return NULL; - } - - /* There's a vehicle here, so let's fuse them together into wreckage and - * smash them up. It'll look like a nasty collision has occurred. - * Trying to do a local->global->local conversion would be a major - * headache, so instead, let's make another vehicle whose (0, 0) point - * is the (0, 0) of the existing vehicle, convert the coordinates of both - * vehicles into global coordinates, find the distance between them and - * (px, py) and then install them that way. - * Create a vehicle with type "null" so it starts out empty. */ - vehicle *wreckage = new vehicle(g); - wreckage->posx = other_veh->posx; - wreckage->posy = other_veh->posy; - wreckage->smx = other_veh->smx; - wreckage->smy = other_veh->smy; - - //Where are we on the global scale? - const int global_x = wreckage->smx * SEEX + wreckage->posx; - const int global_y = wreckage->smy * SEEY + wreckage->posy; - - for (int part_index = 0; part_index < veh->parts.size(); part_index++) { - - const int local_x = (veh->smx * SEEX + veh->posx) - + veh->parts[part_index].precalc_dx[0] - - global_x; - const int local_y = (veh->smy * SEEY + veh->posy) - + veh->parts[part_index].precalc_dy[0] - - global_y; - - wreckage->install_part(local_x, local_y, veh->parts[part_index].id, -1, true); - - } - for (int part_index = 0; part_index < other_veh->parts.size(); part_index++) { - - const int local_x = (other_veh->smx * SEEX + other_veh->posx) - + other_veh->parts[part_index].precalc_dx[0] - - global_x; - const int local_y = (other_veh->smy * SEEY + other_veh->posy) - + other_veh->parts[part_index].precalc_dy[0] - - global_y; - - wreckage->install_part(local_x, local_y, other_veh->parts[part_index].id, -1, true); - - } - - wreckage->name = _("Wreckage"); - wreckage->smash(); - - //Now get rid of the old vehicles - destroy_vehicle(other_veh); - delete veh; - - //Try again with the wreckage - return add_vehicle_to_map(wreckage, global_x, global_y); - - } else if (move_cost(px, py) == 0) { - if( !merge_wrecks ) { - delete veh; - return NULL; - } - - //There's a wall or other obstacle here; destroy it - destroy(g, px, py, false); - - //Then smash up the vehicle - if(!veh_smashed) { - veh->smash(); - veh_smashed = true; - } - - } - } - - return veh; -} - -computer* map::add_computer(int x, int y, std::string name, int security) -{ - ter_set(x, y, t_console); // TODO: Turn this off? - int nonant = int(x / SEEX) + int(y / SEEY) * my_MAPSIZE; - grid[nonant]->comp = computer(name, security); - return &(grid[nonant]->comp); -} - -/** - * Rotates this map, and all of its contents, by the specified multiple of 90 - * degrees. - * @param turns How many 90-degree turns to rotate the map. - */ -void map::rotate(int turns) { - - //Handle anything outside the 1-3 range gracefully; rotate(0) is a no-op. - turns = turns % 4; - if(turns == 0) { - return; - } - - ter_id rotated [SEEX * 2][SEEY * 2]; - furn_id furnrot [SEEX * 2][SEEY * 2]; - trap_id traprot [SEEX * 2][SEEY * 2]; - std::vector itrot[SEEX * 2][SEEY * 2]; - std::vector sprot[MAPSIZE * MAPSIZE]; - computer tmpcomp; - std::vector tmpveh; - - //Rotate terrain first - for (int old_x = 0; old_x < SEEX * 2; old_x++) { - for (int old_y = 0; old_y < SEEY * 2; old_y++) { - int new_x = old_x; - int new_y = old_y; - switch(turns) { - case 1: - new_x = old_y; - new_y = SEEX * 2 - 1 - old_x; - break; - case 2: - new_x = SEEX * 2 - 1 - old_x; - new_y = SEEY * 2 - 1 - old_y; - break; - case 3: - new_x = SEEY * 2 - 1 - old_y; - new_y = old_x; - break; - } - rotated[old_x][old_y] = ter(new_x, new_y); - furnrot[old_x][old_y] = furn(new_x, new_y); - itrot [old_x][old_y] = i_at(new_x, new_y); - traprot[old_x][old_y] = tr_at(new_x, new_y); - i_clear(new_x, new_y); - } - } - - //Next, spawn points - for (int sx = 0; sx < 2; sx++) { - for (int sy = 0; sy < 2; sy++) { - int gridfrom = sx + sy * my_MAPSIZE; - int gridto = gridfrom;; - switch(turns) { - case 1: - gridto = sx * my_MAPSIZE + 1 - sy; - break; - case 2: - gridto = (1 - sy) * my_MAPSIZE + 1 - sx; - break; - case 3: - gridto = (1 - sx) * my_MAPSIZE + sy; - break; - } - for (int spawn = 0; spawn < grid[gridfrom]->spawns.size(); spawn++) { - spawn_point tmp = grid[gridfrom]->spawns[spawn]; - int new_x = tmp.posx; - int new_y = tmp.posy; - switch(turns) { - case 1: - new_x = SEEY - 1 - tmp.posy; - new_y = tmp.posx; - break; - case 2: - new_x = SEEX - 1 - tmp.posx; - new_y = SEEY - 1 - tmp.posy; - break; - case 3: - new_x = tmp.posy; - new_y = SEEX - 1 - tmp.posx; - break; - } - tmp.posx = new_x; - tmp.posy = new_y; - sprot[gridto].push_back(tmp); - } - } - } - - //Then computers - switch (turns) { - case 1: - tmpcomp = grid[0]->comp; - grid[0]->comp = grid[my_MAPSIZE]->comp; - grid[my_MAPSIZE]->comp = grid[my_MAPSIZE + 1]->comp; - grid[my_MAPSIZE + 1]->comp = grid[1]->comp; - grid[1]->comp = tmpcomp; - break; - - case 2: - tmpcomp = grid[0]->comp; - grid[0]->comp = grid[my_MAPSIZE + 1]->comp; - grid[my_MAPSIZE + 1]->comp = tmpcomp; - tmpcomp = grid[1]->comp; - grid[1]->comp = grid[my_MAPSIZE]->comp; - grid[my_MAPSIZE]->comp = tmpcomp; - break; - - case 3: - tmpcomp = grid[0]->comp; - grid[0]->comp = grid[1]->comp; - grid[1]->comp = grid[my_MAPSIZE + 1]->comp; - grid[my_MAPSIZE + 1]->comp = grid[my_MAPSIZE]->comp; - grid[my_MAPSIZE]->comp = tmpcomp; - break; - } - - for(std::set::iterator next_vehicle = vehicle_list.begin(); - next_vehicle != vehicle_list.end(); next_vehicle++) { - - int new_x = (*next_vehicle)->smx; - int new_y = (*next_vehicle)->smy; - switch(turns) { - case 1: - new_x = SEEY - 1 - (*next_vehicle)->smy; - new_y = (*next_vehicle)->smx; - break; - case 2: - new_x = SEEX - 1 - (*next_vehicle)->smx; - new_y = SEEY - 1 - (*next_vehicle)->smy; - break; - case 3: - new_x = (*next_vehicle)->smy; - new_y = SEEX - 1 - (*next_vehicle)->smx; - break; - } - (*next_vehicle)->smx = new_x; - (*next_vehicle)->smy = new_y; - - } - - // change vehicles' directions - for (int i = 0; i < my_MAPSIZE * my_MAPSIZE; i++) { - for (int v = 0; v < grid[i]->vehicles.size(); v++) { - if (turns >= 1 && turns <= 3) { - grid[i]->vehicles[v]->turn(turns * 90); - } - } - } - - // Set the spawn points - grid[0]->spawns = sprot[0]; - grid[1]->spawns = sprot[1]; - grid[my_MAPSIZE]->spawns = sprot[my_MAPSIZE]; - grid[my_MAPSIZE + 1]->spawns = sprot[my_MAPSIZE + 1]; - for (int i = 0; i < SEEX * 2; i++) { - for (int j = 0; j < SEEY * 2; j++) { - ter_set(i, j, rotated[i][j]); - furn_set(i, j, furnrot[i][j]); - i_at(i, j) = itrot [i][j]; - add_trap(i, j, traprot[i][j]); - if (turns % 2 == 1) { // Rotate things like walls 90 degrees - if (ter(i, j) == t_wall_v) { - ter_set(i, j, t_wall_h); - } else if (ter(i, j) == t_wall_h) { - ter_set(i, j, t_wall_v); - } else if (ter(i, j) == t_wall_metal_v) { - ter_set(i, j, t_wall_metal_h); - } else if (ter(i, j) == t_wall_metal_h) { - ter_set(i, j, t_wall_metal_v); - } else if (ter(i, j) == t_railing_v) { - ter_set(i, j, t_railing_h); - } else if (ter(i, j) == t_railing_h) { - ter_set(i, j, t_railing_v); - } else if (ter(i, j) == t_wall_glass_h) { - ter_set(i, j, t_wall_glass_v); - } else if (ter(i, j) == t_wall_glass_v) { - ter_set(i, j, t_wall_glass_h); - } else if (ter(i, j) == t_wall_glass_h_alarm) { - ter_set(i, j, t_wall_glass_v_alarm); - } else if (ter(i, j) == t_wall_glass_v_alarm) { - ter_set(i, j, t_wall_glass_h_alarm); - } else if (ter(i, j) == t_reinforced_glass_h) { - ter_set(i, j, t_reinforced_glass_v); - } else if (ter(i, j) == t_reinforced_glass_v) { - ter_set(i, j, t_reinforced_glass_h); - } else if (ter(i, j) == t_fence_v) { - ter_set(i, j, t_fence_h); - } else if (ter(i, j) == t_fence_h) { - ter_set(i, j, t_fence_v); - } else if (ter(i, j) == t_chainfence_h) { - ter_set(i, j, t_chainfence_v); - } else if (ter(i, j) == t_chainfence_v) { - ter_set(i, j, t_chainfence_h); - } else if (ter(i, j) == t_concrete_h) { - ter_set(i, j, t_concrete_v); - } else if (ter(i, j) == t_concrete_v) { - ter_set(i, j, t_concrete_h); - } - } - } - } -} - -// Hideous function, I admit... -bool connects_to(oter_id there, int dir) -{ - switch (dir) { - case 2: - if (there == ot_subway_ns || there == ot_subway_es || there == ot_subway_sw|| - there == ot_subway_nes || there == ot_subway_nsw || - there == ot_subway_esw || there == ot_subway_nesw || - there == ot_sewer_ns || there == ot_sewer_es || there == ot_sewer_sw || - there == ot_sewer_nes || there == ot_sewer_nsw || there == ot_sewer_esw|| - there == ot_sewer_nesw || there == ot_ants_ns || there == ot_ants_es || - there == ot_ants_sw || there == ot_ants_nes || there == ot_ants_nsw || - there == ot_ants_esw || there == ot_ants_nesw) - return true; - return false; - case 3: - if (there == ot_subway_ew || there == ot_subway_sw || there == ot_subway_wn|| - there == ot_subway_new || there == ot_subway_nsw || - there == ot_subway_esw || there == ot_subway_nesw || - there == ot_sewer_ew || there == ot_sewer_sw || there == ot_sewer_wn || - there == ot_sewer_new || there == ot_sewer_nsw || there == ot_sewer_esw|| - there == ot_sewer_nesw || there == ot_ants_ew || there == ot_ants_sw || - there == ot_ants_wn || there == ot_ants_new || there == ot_ants_nsw || - there == ot_ants_esw || there == ot_ants_nesw) - return true; - return false; - case 0: - if (there == ot_subway_ns || there == ot_subway_ne || there == ot_subway_wn|| - there == ot_subway_nes || there == ot_subway_new || - there == ot_subway_nsw || there == ot_subway_nesw || - there == ot_sewer_ns || there == ot_sewer_ne || there == ot_sewer_wn || - there == ot_sewer_nes || there == ot_sewer_new || there == ot_sewer_nsw|| - there == ot_sewer_nesw || there == ot_ants_ns || there == ot_ants_ne || - there == ot_ants_wn || there == ot_ants_nes || there == ot_ants_new || - there == ot_ants_nsw || there == ot_ants_nesw) - return true; - return false; - case 1: - if (there == ot_subway_ew || there == ot_subway_ne || there == ot_subway_es|| - there == ot_subway_nes || there == ot_subway_new || - there == ot_subway_esw || there == ot_subway_nesw || - there == ot_sewer_ew || there == ot_sewer_ne || there == ot_sewer_es || - there == ot_sewer_nes || there == ot_sewer_new || there == ot_sewer_esw|| - there == ot_sewer_nesw || there == ot_ants_ew || there == ot_ants_ne || - there == ot_ants_es || there == ot_ants_nes || there == ot_ants_new || - there == ot_ants_esw || there == ot_ants_nesw) - return true; - return false; - default: - debugmsg("Connects_to with dir of %d", dir); - return false; - } -} - -void house_room(map *m, room_type type, int x1, int y1, int x2, int y2) -{ - int pos_x1=0; - int pos_y1=0; - - if (type==room_backyard) { //processing it separately - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - if ((i==x1)||(i==x2)) {m->ter_set(i,j, t_fence_v); } else - if (j==y2) {m->ter_set(i,j, t_fence_h); } else { - m->ter_set( i, j, t_grass); - if (one_in(35)) {m->ter_set(i,j, t_tree_young); } else - if (one_in(35)) {m->ter_set(i,j, t_tree); } else - if (one_in(25)) {m->ter_set(i,j, t_dirt); } - } - } - } - m->ter_set((x1+x2)/2, y2, t_fencegate_c); - m->furn_set(x1+2,y1, f_chair); - m->furn_set(x1+2,y1+1, f_table); - return; - } - - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - if (m->ter(i, j) == t_grass || m->ter(i, j) == t_dirt || - m->ter(i, j) == t_floor) { - if (j == y1 || j == y2) { - m->ter_set(i, j, t_wall_h); - m->ter_set(i, j, t_wall_h); - } else if (i == x1 || i == x2) { - m->ter_set(i, j, t_wall_v); - m->ter_set(i, j, t_wall_v); - } else - m->ter_set(i, j, t_floor); - } - } - } - for (int i = y1 + 1; i <= y2 - 1; i++) { - m->ter_set(x1, i, t_wall_v); - m->ter_set(x2, i, t_wall_v); - } - - items_location placed = "none"; - int chance = 0, rn; - switch (type) { - case room_study: - placed = "livingroom"; - chance = 40; - break; - case room_living: - placed = "livingroom"; - chance = 83; - //choose random wall - switch (rng(1,4)) { //some bookshelves - case 1: - pos_x1=x1+2; - pos_y1=y1+1; - m->furn_set(x1+2, y2-1, f_desk); - while (pos_x1ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1+=1; - if ((m->ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1+=2; - } - break; - case 2: - pos_x1=x2-2; - pos_y1=y1+1; - m->furn_set(x1+2, y2-1, f_desk); - while (pos_x1>x1) { - pos_x1-=1; - if ((m->ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1-=1; - if ((m->ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1-=2; - } - break; - case 3: - pos_x1=x1+2; - pos_y1=y2-1; - m->furn_set(x1+2, y2-1, f_desk); - while (pos_x1ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1+=1; - if ((m->ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1+=2; - } - break; - case 4: - pos_x1=x2-2; - pos_y1=y2-1; - m->furn_set(x1+2, y2-1, f_desk); - while (pos_x1>x1) { - pos_x1-=1; - if ((m->ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1-=1; - if ((m->ter(pos_x1,pos_y1)==t_wall_h)||(m->ter(pos_x1,pos_y1)==t_wall_v)) break; - m->furn_set(pos_x1,pos_y1,f_bookcase); - pos_x1-=2; - } - break; - m->furn_set(rng(x1+2, x2-2), rng(y1+1, y2-1), f_armchair); - } - - - break; - case room_kitchen: { - placed = "kitchen"; - chance = 75; - m->place_items("cleaning", 58, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); - m->place_items("home_hw", 40, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); - int oven_x = -1, oven_y = -1, cupboard_x = -1, cupboard_y = -1; - - switch (rng(1, 4)) { //fridge, sink, oven and some cupboards near them - case 1: - m->furn_set(x1 + 2, y1 + 1, f_fridge); - m->place_items("fridge", 82, x1 + 2, y1 + 1, x1 + 2, y1 + 1, false, 0); - m->furn_set(x1+1, y1+1, f_sink); - if (x1+4furn_set(x2 - 2, y1 + 1, f_fridge); - m->place_items("fridge", 82, x2 - 2, y1 + 1, x2 - 2, y1 + 1, false, 0); - m->furn_set(x2-1, y1+1, f_sink); - if (x2-4>x1) { - oven_x = x2 - 3; - cupboard_x = x2 - 4; - oven_y = cupboard_y = y1 + 1; - } - break; - case 3: - m->furn_set(x1 + 2, y2 - 1, f_fridge); - m->place_items("fridge", 82, x1 + 2, y2 - 1, x1 + 2, y2 - 1, false, 0); - m->furn_set(x1+1, y2-1, f_sink); - if (x1+4furn_set(x2 - 2, y2 - 1, f_fridge); - m->place_items("fridge", 82, x2 - 2, y2 - 1, x2 - 2, y2 - 1, false, 0); - m->furn_set(x2-1, y2-1, f_sink); - if (x2-4>x1) { - oven_x = x2 - 3; - cupboard_x = x2 - 4; - oven_y = cupboard_y = y2 - 1; - } - break; - } - - // oven and it's contents - if ( oven_x != -1 && oven_y != -1 ) { - m->furn_set(oven_x, oven_y, f_oven); - m->place_items("oven", 70, oven_x, oven_y, oven_x, oven_y, false, 0); - } - - // cupboard and it's contents - if ( cupboard_x != -1 && cupboard_y != -1 ) { - m->furn_set(cupboard_x, cupboard_y, f_cupboard); - m->place_items("cleaning", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); - m->place_items("home_hw", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); - m->place_items("cannedfood", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); - m->place_items("pasta", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); - } - - if (one_in(2)) { //dining table in the kitchen - square_furn(m, f_table, int((x1+x2) / 2)-1, int((y1+y2) / 2)-1, int((x1+x2) / 2), int((y1+y2) / 2) ); } - if (one_in(2)) { - for (int i=0; i<=2; i++) { - pos_x1=rng(x1+2,x2-2); pos_y1=rng(y1+1,y2-1); - if (m->ter(pos_x1, pos_y1)==t_floor) { - m->furn_set(pos_x1, pos_y1,f_chair); - } - } } - -} - break; - case room_bedroom: - placed = "bedroom"; - chance = 78; - if (one_in(14)) - m->place_items("homeguns", 58, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - if (one_in(10)) - m->place_items("home_hw", 40, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - switch (rng(1, 5)) { - case 1: - m->furn_set(x1 + 1, y1 + 2, f_bed); - m->furn_set(x1 + 1, y1 + 3, f_bed); - break; - case 2: - m->furn_set(x1 + 2, y2 - 1, f_bed); - m->furn_set(x1 + 3, y2 - 1, f_bed); - break; - case 3: - m->furn_set(x2 - 1, y2 - 3, f_bed); - m->furn_set(x2 - 1, y2 - 2, f_bed); - break; - case 4: - m->furn_set(x2 - 3, y1 + 1, f_bed); - m->furn_set(x2 - 2, y1 + 1, f_bed); - break; - case 5: - m->furn_set(int((x1 + x2) / 2) , y2 - 1, f_bed); - m->furn_set(int((x1 + x2) / 2) + 1, y2 - 1, f_bed); - m->furn_set(int((x1 + x2) / 2) , y2 - 2, f_bed); - m->furn_set(int((x1 + x2) / 2) + 1, y2 - 2, f_bed); - break; - } - switch (rng(1, 4)) { - case 1: - m->furn_set(x1 + 2, y1 + 1, f_dresser); - m->place_items("dresser", 80, x1 + 2, y1 + 1, x1 + 2, y1 + 1, false, 0); - break; - case 2: - m->furn_set(x2 - 2, y2 - 1, f_dresser); - m->place_items("dresser", 80, x2 - 2, y2 - 1, x2 - 2, y2 - 1, false, 0); - break; - case 3: - rn = int((x1 + x2) / 2); - m->furn_set(rn, y1 + 1, f_dresser); - m->place_items("dresser", 80, rn, y1 + 1, rn, y1 + 1, false, 0); - break; - case 4: - rn = int((y1 + y2) / 2); - m->furn_set(x1 + 1, rn, f_dresser); - m->place_items("dresser", 80, x1 + 1, rn, x1 + 1, rn, false, 0); - break; - } - break; - case room_bathroom: - m->place_toilet(x2 - 1, y2 - 1); - m->place_items("harddrugs", 18, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); - m->place_items("cleaning", 48, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); - placed = "softdrugs"; - chance = 72; - m->furn_set(x2-1, y2-2, f_bathtub); - if (!((m->ter(x2-3, y2-2)==t_wall_v)||(m->ter(x2-3, y2-2)==t_wall_h))) { - m->furn_set(x2-3, y2-2, f_sink); } - break; - default: break; - } - m->place_items(placed, chance, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); -} - -void science_room(map *m, int x1, int y1, int x2, int y2, int rotate) -{ - int height = y2 - y1; - int width = x2 - x1; - if (rotate % 2 == 1) { // Swamp width & height if we're a lateral room - int tmp = height; - height = width; - width = tmp; - } - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) - m->ter_set(i, j, t_rock_floor); - } - int area = height * width; - std::vector valid_rooms; - if (height < 5 && width < 5) - valid_rooms.push_back(room_closet); - if (height > 6 && width > 3) - valid_rooms.push_back(room_lobby); - if (height > 4 || width > 4) - valid_rooms.push_back(room_chemistry); - if ((height > 7 || width > 7) && height > 2 && width > 2) - valid_rooms.push_back(room_teleport); - if (height > 4 && width > 4) - valid_rooms.push_back(room_goo); - if (height > 7 && width > 7) - valid_rooms.push_back(room_bionics); - if (height > 7 && width > 7) - valid_rooms.push_back(room_cloning); - if (area >= 9) - valid_rooms.push_back(room_vivisect); - if (height > 5 && width > 4) - valid_rooms.push_back(room_dorm); - if (width > 8) { - for (int i = 8; i < width; i += rng(1, 2)) - valid_rooms.push_back(room_split); - } - - room_type chosen = valid_rooms[rng(0, valid_rooms.size() - 1)]; - int trapx = rng(x1 + 1, x2 - 1); - int trapy = rng(y1 + 1, y2 - 1); - switch (chosen) { - case room_closet: - m->place_items("cleaning", 80, x1, y1, x2, y2, false, 0); - break; - case room_lobby: - if (rotate % 2 == 0) { // Vertical - int desk = y1 + rng(int(height / 2) - int(height / 4), int(height / 2) + 1); - for (int x = x1 + int(width / 4); x < x2 - int(width / 4); x++) - m->furn_set(x, desk, f_counter); - computer* tmpcomp = m->add_computer(x2 - int(width / 4), desk, - _("Log Console"), 3); - tmpcomp->add_option(_("View Research Logs"), COMPACT_RESEARCH, 0); - tmpcomp->add_option(_("Download Map Data"), COMPACT_MAPS, 0); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); - tmpcomp->add_failure(COMPFAIL_DAMAGE); - m->add_spawn("mon_turret", 1, int((x1 + x2) / 2), desk); - } else { - int desk = x1 + rng(int(height / 2) - int(height / 4), int(height / 2) + 1); - for (int y = y1 + int(width / 4); y < y2 - int(width / 4); y++) - m->furn_set(desk, y, f_counter); - computer* tmpcomp = m->add_computer(desk, y2 - int(width / 4), - _("Log Console"), 3); - tmpcomp->add_option(_("View Research Logs"), COMPACT_RESEARCH, 0); - tmpcomp->add_option(_("Download Map Data"), COMPACT_MAPS, 0); - tmpcomp->add_failure(COMPFAIL_SHUTDOWN); - tmpcomp->add_failure(COMPFAIL_ALARM); - tmpcomp->add_failure(COMPFAIL_DAMAGE); - m->add_spawn("mon_turret", 1, desk, int((y1 + y2) / 2)); - } - break; - case room_chemistry: - if (rotate % 2 == 0) { // Vertical - for (int x = x1; x <= x2; x++) { - if (x % 3 == 0) { - for (int y = y1 + 1; y <= y2 - 1; y++) { - m->furn_set(x, y, f_counter); - } - m->place_items("chemistry", 70, x, y1 + 1, x, y2 - 1, false, 0); - } - } - } else { - for (int y = y1; y <= y2; y++) { - if (y % 3 == 0) { - for (int x = x1 + 1; x <= x2 - 1; x++) { - m->furn_set(x, y, f_counter); - } - m->place_items("chemistry", 70, x1 + 1, y, x2 - 1, y, false, 0); - } - } - } - break; - case room_teleport: - m->furn_set(int((x1 + x2) / 2) , int((y1 + y2) / 2) , f_counter); - m->furn_set(int((x1 + x2) / 2) + 1, int((y1 + y2) / 2) , f_counter); - m->furn_set(int((x1 + x2) / 2) , int((y1 + y2) / 2) + 1, f_counter); - m->furn_set(int((x1 + x2) / 2) + 1, int((y1 + y2) / 2) + 1, f_counter); - m->add_trap(trapx, trapy, tr_telepad); - m->place_items("teleport", 70, int((x1 + x2) / 2), - int((y1 + y2) / 2), int((x1 + x2) / 2) + 1, - int((y1 + y2) / 2) + 1, false, 0); - break; - case room_goo: - do { - m->add_trap(trapx, trapy, tr_goo); - trapx = rng(x1 + 1, x2 - 1); - trapy = rng(y1 + 1, y2 - 1); - } while(!one_in(5)); - if (rotate == 0) { - m->remove_trap(x1, y2); - m->furn_set(x1, y2, f_fridge); - m->place_items("goo", 60, x1, y2, x1, y2, false, 0); - } else if (rotate == 1) { - m->remove_trap(x1, y1); - m->furn_set(x1, y1, f_fridge); - m->place_items("goo", 60, x1, y1, x1, y1, false, 0); - } else if (rotate == 2) { - m->remove_trap(x2, y1); - m->furn_set(x2, y1, f_fridge); - m->place_items("goo", 60, x2, y1, x2, y1, false, 0); - } else { - m->remove_trap(x2, y2); - m->furn_set(x2, y2, f_fridge); - m->place_items("goo", 60, x2, y2, x2, y2, false, 0); - } - break; - case room_cloning: - for (int x = x1 + 1; x <= x2 - 1; x++) { - for (int y = y1 + 1; y <= y2 - 1; y++) { - if (x % 3 == 0 && y % 3 == 0) { - m->ter_set(x, y, t_vat); - m->place_items("cloning_vat", 20, x, y, x, y, false, 0); - } - } - } - break; - case room_vivisect: - if (rotate == 0) { - for (int x = x1; x <= x2; x++) - m->furn_set(x, y2 - 1, f_counter); - m->place_items("dissection", 80, x1, y2 - 1, x2, y2 - 1, false, 0); - } else if (rotate == 1) { - for (int y = y1; y <= y2; y++) - m->furn_set(x1 + 1, y, f_counter); - m->place_items("dissection", 80, x1 + 1, y1, x1 + 1, y2, false, 0); - } else if (rotate == 2) { - for (int x = x1; x <= x2; x++) - m->furn_set(x, y1 + 1, f_counter); - m->place_items("dissection", 80, x1, y1 + 1, x2, y1 + 1, false, 0); - } else if (rotate == 3) { - for (int y = y1; y <= y2; y++) - m->furn_set(x2 - 1, y, f_counter); - m->place_items("dissection", 80, x2 - 1, y1, x2 - 1, y2, false, 0); - } - m->add_trap(int((x1 + x2) / 2), int((y1 + y2) / 2), tr_dissector); - break; - - case room_bionics: - if (rotate % 2 == 0) { - int biox = x1 + 2, bioy = int((y1 + y2) / 2); - mapf::formatted_set_simple(m, biox-1, bioy-1, -"\ ----\n\ -|c=\n\ ----\n", - mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_v), - mapf::basic_bind("c", f_counter)); - m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); - - biox = x2 - 2; - mapf::formatted_set_simple(m, biox-1, bioy-1, -"\ ----\n\ -=c|\n\ ----\n", - mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_v), - mapf::basic_bind("c", f_counter)); - m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); - - int compx = int((x1 + x2) / 2), compy = int((y1 + y2) / 2); - m->ter_set(compx, compy, t_console); - computer* tmpcomp = m->add_computer(compx, compy, _("Bionic access"), 2); - tmpcomp->add_option(_("Manifest"), COMPACT_LIST_BIONICS, 0); - tmpcomp->add_option(_("Open Chambers"), COMPACT_RELEASE, 3); - tmpcomp->add_failure(COMPFAIL_MANHACKS); - tmpcomp->add_failure(COMPFAIL_SECUBOTS); - } else { - int bioy = y1 + 2, biox = int((x1 + x2) / 2); - mapf::formatted_set_simple(m, biox-1, bioy-1, -"\ -|-|\n\ -|c|\n\ -|=|\n", - mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_h), - mapf::basic_bind("c", f_counter)); - m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); - - bioy = y2 - 2; - mapf::formatted_set_simple(m, biox-1, bioy-1, -"\ -|=|\n\ -|c|\n\ -|-|\n", - mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_h), - mapf::basic_bind("c", f_counter)); - m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); - - int compx = int((x1 + x2) / 2), compy = int((y1 + y2) / 2); - m->ter_set(compx, compy, t_console); - computer* tmpcomp = m->add_computer(compx, compy, _("Bionic access"), 2); - tmpcomp->add_option(_("Manifest"), COMPACT_LIST_BIONICS, 0); - tmpcomp->add_option(_("Open Chambers"), COMPACT_RELEASE, 3); - tmpcomp->add_failure(COMPFAIL_MANHACKS); - tmpcomp->add_failure(COMPFAIL_SECUBOTS); - } - break; - case room_dorm: - if (rotate % 2 == 0) { - for (int y = y1 + 1; y <= y2 - 1; y += 3) { - m->furn_set(x1 , y, f_bed); - m->furn_set(x1 + 1, y, f_bed); - m->furn_set(x2 , y, f_bed); - m->furn_set(x2 - 1, y, f_bed); - m->furn_set(x1, y + 1, f_dresser); - m->furn_set(x2, y + 1, f_dresser); - m->place_items("dresser", 70, x1, y + 1, x1, y + 1, false, 0); - m->place_items("dresser", 70, x2, y + 1, x2, y + 1, false, 0); - } - } else if (rotate % 2 == 1) { - for (int x = x1 + 1; x <= x2 - 1; x += 3) { - m->furn_set(x, y1 , f_bed); - m->furn_set(x, y1 + 1, f_bed); - m->furn_set(x, y2 , f_bed); - m->furn_set(x, y2 - 1, f_bed); - m->furn_set(x + 1, y1, f_dresser); - m->furn_set(x + 1, y2, f_dresser); - m->place_items("dresser", 70, x + 1, y1, x + 1, y1, false, 0); - m->place_items("dresser", 70, x + 1, y2, x + 1, y2, false, 0); - } - } - m->place_items("bedroom", 84, x1, y1, x2, y2, false, 0); - break; - case room_split: - if (rotate % 2 == 0) { - int w1 = int((x1 + x2) / 2) - 2, w2 = int((x1 + x2) / 2) + 2; - for (int y = y1; y <= y2; y++) { - m->ter_set(w1, y, t_wall_v); - m->ter_set(w2, y, t_wall_v); - } - m->ter_set(w1, int((y1 + y2) / 2), t_door_metal_c); - m->ter_set(w2, int((y1 + y2) / 2), t_door_metal_c); - science_room(m, x1, y1, w1 - 1, y2, 1); - science_room(m, w2 + 1, y1, x2, y2, 3); - } else { - int w1 = int((y1 + y2) / 2) - 2, w2 = int((y1 + y2) / 2) + 2; - for (int x = x1; x <= x2; x++) { - m->ter_set(x, w1, t_wall_h); - m->ter_set(x, w2, t_wall_h); - } - m->ter_set(int((x1 + x2) / 2), w1, t_door_metal_c); - m->ter_set(int((x1 + x2) / 2), w2, t_door_metal_c); - science_room(m, x1, y1, x2, w1 - 1, 2); - science_room(m, x1, w2 + 1, x2, y2, 0); - } - break; - default: break; - } -} - -void set_science_room(map *m, int x1, int y1, bool faces_right, int turn) -{ -// TODO: More types! - int type = rng(0, 4); - int x2 = x1 + 7; - int y2 = y1 + 4; - switch (type) { - case 0: // Empty! - return; - case 1: // Chemistry. -// #######. -// #....... -// #....... -// #....... -// #######. - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - if ((i == x1 || j == y1 || j == y2) && i != x1) - m->set(i, j, t_floor, f_counter); - } - } - m->place_items("chemistry", 85, x1 + 1, y1, x2 - 1, y1, false, 0); - m->place_items("chemistry", 85, x1 + 1, y2, x2 - 1, y2, false, 0); - m->place_items("chemistry", 85, x1, y1 + 1, x1, y2 - 1, false, 0); - break; - - case 2: // Hydroponics. -// #....... -// #.~~~~~. -// #....... -// #.~~~~~. -// #....... - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - if (i == x1) - m->set(i, j, t_floor, f_counter); - else if (i > x1 + 1 && i < x2 && (j == y1 + 1 || j == y2 - 1)) - m->ter_set(i, j, t_water_sh); - } - } - m->place_items("chemistry", 80, x1, y1, x1, y2, false, turn - 50); - m->place_items("hydro", 92, x1 + 1, y1 + 1, x2 - 1, y1 + 1, false,turn); - m->place_items("hydro", 92, x1 + 1, y2 - 1, x2 - 1, y2 - 1, false,turn); - break; - - case 3: // Electronics. -// #######. -// #....... -// #....... -// #....... -// #######. - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - if ((i == x1 || j == y1 || j == y2) && i != x1) - m->set(i, j, t_floor, f_counter); - } - } - m->place_items("electronics",85, x1 + 1, y1, x2 - 1, y1, false, turn - 50); - m->place_items("electronics",85, x1 + 1, y2, x2 - 1, y2, false, turn - 50); - m->place_items("electronics",85, x1, y1 + 1, x1, y2 - 1, false, turn - 50); - break; - - case 4: // Monster research. -// .|.####. -// -|...... -// .|...... -// -|...... -// .|.####. - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - if (i == x1 + 1) - m->ter_set(i, j, t_wall_glass_v); - else if (i == x1 && (j == y1 + 1 || j == y2 - 1)) - m->ter_set(i, j, t_wall_glass_h); - else if ((j == y1 || j == y2) && i >= x1 + 3 && i <= x2 - 1) - m->set(i, j, t_floor, f_counter); - } - } -// TODO: Place a monster in the sealed areas. - m->place_items("monparts", 70, x1 + 3, y1, 2 - 1, y1, false, turn - 100); - m->place_items("monparts", 70, x1 + 3, y2, 2 - 1, y2, false, turn - 100); - break; - } - - if (!faces_right) { // Flip it. - ter_id rotated[SEEX*2][SEEY*2]; - std::vector itrot[SEEX*2][SEEY*2]; - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - rotated[i][j] = m->ter(i, j); - itrot[i][j] = m->i_at(i, j); - } - } - for (int i = x1; i <= x2; i++) { - for (int j = y1; j <= y2; j++) { - m->ter_set(i, j, rotated[x2 - (i - x1)][j]); - m->i_at(i, j) = itrot[x2 - (i - x1)][j]; - } - } - } -} - -void silo_rooms(map *m) -{ - std::vector rooms; - std::vector room_sizes; - bool okay = true; - do { - int x, y, height, width; - if (one_in(2)) { // True = top/bottom, False = left/right - x = rng(0, SEEX * 2 - 6); - y = rng(0, 4); - if (one_in(2)) - y = SEEY * 2 - 2 - y; // Bottom of the screen, not the top - width = rng(2, 5); - height = 2; - if (x + width >= SEEX * 2 - 1) - width = SEEX * 2 - 2 - x; // Make sure our room isn't too wide - } else { - x = rng(0, 4); - y = rng(0, SEEY * 2 - 6); - if (one_in(2)) - x = SEEX * 2 - 3 - x; // Right side of the screen, not the left - width = 2; - height = rng(2, 5); - if (y + height >= SEEY * 2 - 1) - height = SEEY * 2 - 2 - y; // Make sure our room isn't too tall - } - if (!rooms.empty() && // We need at least one room! - (m->ter(x, y) != t_rock || m->ter(x + width, y + height) != t_rock)) - okay = false; - else { - rooms.push_back(point(x, y)); - room_sizes.push_back(point(width, height)); - for (int i = x; i <= x + width; i++) { - for (int j = y; j <= y + height; j++) { - if (m->ter(i, j) == t_rock) - m->ter_set(i, j, t_floor); - } - } - items_location used1 = "none", used2 = "none"; - switch (rng(1, 14)) { // What type of items go here? - case 1: - case 2: used1 = "cannedfood"; - used2 = "fridge"; break; - case 3: - case 4: used1 = "tools"; break; - case 5: - case 6: used1 = "allguns"; - used2 = "ammo"; break; - case 7: used1 = "allclothes"; break; - case 8: used1 = "manuals"; break; - case 9: - case 10: - case 11: used1 = "electronics"; break; - case 12: used1 = "survival_tools"; break; - case 13: - case 14: used1 = "radio"; break; - } - if (used1 != "none") - m->place_items(used1, 78, x, y, x + width, y + height, false, 0); - if (used2 != "none") - m->place_items(used2, 64, x, y, x + width, y + height, false, 0); - } - } while (okay); - - m->ter_set(rooms[0].x, rooms[0].y, t_stairs_up); - int down_room = rng(0, rooms.size() - 1); - point dp = rooms[down_room], ds = room_sizes[down_room]; - m->ter_set(dp.x + ds.x, dp.y + ds.y, t_stairs_down); - rooms.push_back(point(SEEX, SEEY)); // So the center circle gets connected - room_sizes.push_back(point(5, 5)); - - while (rooms.size() > 1) { - int best_dist = 999, closest = 0; - for (int i = 1; i < rooms.size(); i++) { - int dist = trig_dist(rooms[0].x, rooms[0].y, rooms[i].x, rooms[i].y); - if (dist < best_dist) { - best_dist = dist; - closest = i; - } - } -// We chose the closest room; now draw a corridor there - point origin = rooms[0], origsize = room_sizes[0], dest = rooms[closest]; - int x = origin.x + origsize.x, y = origin.y + origsize.y; - bool x_first = (abs(origin.x - dest.x) > abs(origin.y - dest.y)); - while (x != dest.x || y != dest.y) { - if (m->ter(x, y) == t_rock) - m->ter_set(x, y, t_floor); - if ((x_first && x != dest.x) || (!x_first && y == dest.y)) { - if (dest.x < x) - x--; - else - x++; - } else { - if (dest.y < y) - y--; - else - y++; - } - } - rooms.erase(rooms.begin()); - room_sizes.erase(room_sizes.begin()); - } -} - -void build_mine_room(map *m, room_type type, int x1, int y1, int x2, int y2) -{ - direction door_side; - std::vector possibilities; - int midx = int( (x1 + x2) / 2), midy = int( (y1 + y2) / 2); - if (x2 < SEEX) - possibilities.push_back(EAST); - if (x1 > SEEX + 1) - possibilities.push_back(WEST); - if (y1 > SEEY + 1) - possibilities.push_back(NORTH); - if (y2 < SEEY) - possibilities.push_back(SOUTH); - - if (possibilities.empty()) { // We're in the middle of the map! - if (midx <= SEEX) - possibilities.push_back(EAST); - else - possibilities.push_back(WEST); - if (midy <= SEEY) - possibilities.push_back(SOUTH); - else - possibilities.push_back(NORTH); - } - - door_side = possibilities[rng(0, possibilities.size() - 1)]; - point door_point; - switch (door_side) { - case NORTH: - door_point.x = midx; - door_point.y = y1; - break; - case EAST: - door_point.x = x2; - door_point.y = midy; - break; - case SOUTH: - door_point.x = midx; - door_point.y = y2; - break; - case WEST: - door_point.x = x1; - door_point.y = midy; - break; - default: break; - } - square(m, t_floor, x1, y1, x2, y2); - line(m, t_wall_h, x1, y1, x2, y1); - line(m, t_wall_h, x1, y2, x2, y2); - line(m, t_wall_v, x1, y1 + 1, x1, y2 - 1); - line(m, t_wall_v, x2, y1 + 1, x2, y2 - 1); -// Main build switch! - switch (type) { - case room_mine_shaft: { - m->ter_set(x1 + 1, y1 + 1, t_console); - line(m, t_wall_h, x2 - 2, y1 + 2, x2 - 1, y1 + 2); - m->ter_set(x2 - 2, y1 + 1, t_elevator); - m->ter_set(x2 - 1, y1 + 1, t_elevator_control_off); - computer* tmpcomp = m->add_computer(x1 + 1, y1 + 1, _("NEPowerOS"), 2); - tmpcomp->add_option(_("Divert power to elevator"), COMPACT_ELEVATOR_ON, 0); - tmpcomp->add_failure(COMPFAIL_ALARM); - } break; - - case room_mine_office: - line_furn(m, f_counter, midx, y1 + 2, midx, y2 - 2); - line(m, t_window, midx - 1, y1, midx + 1, y1); - line(m, t_window, midx - 1, y2, midx + 1, y2); - line(m, t_window, x1, midy - 1, x1, midy + 1); - line(m, t_window, x2, midy - 1, x2, midy + 1); - m->place_items("office", 80, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - break; - - case room_mine_storage: - m->place_items("mine_storage",85, x1 + 2, y1 + 2, x2 - 2, y2 - 2, false, 0); - break; - - case room_mine_fuel: { - int spacing = rng(2, 4); - if (door_side == NORTH || door_side == SOUTH) { - int y = (door_side == NORTH ? y1 + 2 : y2 - 2); - for (int x = x1 + 1; x <= x2 - 1; x += spacing) - m->place_gas_pump(x, y, rng(10000, 50000)); - } else { - int x = (door_side == EAST ? x2 - 2 : x1 + 2); - for (int y = y1 + 1; y <= y2 - 1; y += spacing) - m->place_gas_pump(x, y, rng(10000, 50000)); - } - } break; - - case room_mine_housing: - if (door_side == NORTH || door_side == SOUTH) { - for (int y = y1 + 2; y <= y2 - 2; y += 2) { - m->ter_set(x1 , y, t_window); - m->furn_set(x1 + 1, y, f_bed); - m->furn_set(x1 + 2, y, f_bed); - m->ter_set(x2 , y, t_window); - m->furn_set(x2 - 1, y, f_bed); - m->furn_set(x2 - 2, y, f_bed); - m->furn_set(x1 + 1, y + 1, f_dresser); - m->place_items("dresser", 78, x1 + 1, y + 1, x1 + 1, y + 1, false, 0); - m->furn_set(x2 - 1, y + 1, f_dresser); - m->place_items("dresser", 78, x2 - 1, y + 1, x2 - 1, y + 1, false, 0); - } - } else { - for (int x = x1 + 2; x <= x2 - 2; x += 2) { - m->ter_set(x, y1 , t_window); - m->furn_set(x, y1 + 1, f_bed); - m->furn_set(x, y1 + 2, f_bed); - m->ter_set(x, y2 , t_window); - m->furn_set(x, y2 - 1, f_bed); - m->furn_set(x, y2 - 2, f_bed); - m->furn_set(x + 1, y1 + 1, f_dresser); - m->place_items("dresser", 78, x + 1, y1 + 1, x + 1, y1 + 1, false, 0); - m->furn_set(x + 1, y2 - 1, f_dresser); - m->place_items("dresser", 78, x + 1, y2 - 1, x + 1, y2 - 1, false, 0); - } - } - m->place_items("bedroom", 65, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - break; - } - - if (type == room_mine_fuel) { // Fuel stations are open on one side - switch (door_side) { - case NORTH: line(m, t_floor, x1, y1 , x2, y1 ); break; - case EAST: line(m, t_floor, x2, y1 + 1, x2, y2 - 1); break; - case SOUTH: line(m, t_floor, x1, y2 , x2, y2 ); break; - case WEST: line(m, t_floor, x1, y1 + 1, x1, y2 - 1); break; - default: break; - } - } else { - if (type == room_mine_storage) // Storage has a locked door - m->ter_set(door_point.x, door_point.y, t_door_locked); - else - m->ter_set(door_point.x, door_point.y, t_door_c); - } -} - -map_extra random_map_extra(map_extras embellishments) -{ - int pick = 0; - // Set pick to the total of all the chances for map extras - for (int i = 0; i < num_map_extras; i++) - { - if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] || mfb(i) & classic_extras) - { - pick += embellishments.chances[i]; - } - } - // Set pick to a number between 0 and the total - pick = rng(0, pick - 1); - int choice = -1; - while (pick >= 0) - { - choice++; - if(!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] || mfb(choice) & classic_extras) - { - pick -= embellishments.chances[choice]; - } - } - return map_extra(choice); -} - -room_type pick_mansion_room(int x1, int y1, int x2, int y2) -{ - int dx = abs(x1 - x2), dy = abs(y1 - y2), area = dx * dy; - int shortest = (dx < dy ? dx : dy), longest = (dx > dy ? dx : dy); - std::vector valid; - if (shortest >= 12) - valid.push_back(room_mansion_courtyard); - if (shortest >= 7 && area >= 64 && area <= 100) - valid.push_back(room_mansion_bedroom); - if (shortest >= 9) - valid.push_back(room_mansion_library); - if (shortest >= 6 && longest <= 10) - valid.push_back(room_mansion_kitchen); - if (longest >= 7 && shortest >= 5) - valid.push_back(room_mansion_dining); - if (shortest >= 6 && longest <= 10) - valid.push_back(room_mansion_game); - if (shortest >= 6 && longest <= 10) - valid.push_back(room_mansion_study); - if (shortest >= 10) - valid.push_back(room_mansion_pool); - if (longest <= 6 || shortest <= 4) - valid.push_back(room_mansion_bathroom); - if (longest >= 8 && shortest <= 6) - valid.push_back(room_mansion_gallery); - - if (valid.empty()) { - debugmsg("x: %d - %d, dx: %d\n\ - y: %d - %d, dy: %d", x1, x2, dx, - y1, y2, dy); - return room_null; - } - - return valid[ rng(0, valid.size() - 1) ]; -} - -void build_mansion_room(map *m, room_type type, int x1, int y1, int x2, int y2) -{ - int dx = abs(x1 - x2), dy = abs(y1 - y2); - int cx_low = (x1 + x2) / 2, cx_hi = (x1 + x2 + 1) / 2, - cy_low = (y1 + y2) / 2, cy_hi = (y1 + y2 + 1) / 2; - -/* - debugmsg("\ -x: %d - %d, dx: %d cx: %d/%d\n\ -x: %d - %d, dx: %d cx: %d/%d", x1, x2, dx, cx_low, cx_hi, - y1, y2, dy, cy_low, cy_hi); -*/ - bool walled_south = (y2 >= SEEY * 2 - 2); - - switch (type) { - - case room_mansion_courtyard: - square(m, &grass_or_dirt, x1, y1, x2, y2); - if (one_in(4)) { // Tree grid - for (int x = 1; x <= dx / 2; x += 4) { - for (int y = 1; y <= dx / 2; y += 4) { - m->ter_set(x1 + x, y1 + y, t_tree); - m->ter_set(x2 - x, y2 - y, t_tree); - } - } - } - if (one_in(3)) { // shrub-lined - for (int i = x1; i <= x2; i++) { - if (m->ter(i, y2 + 1) != t_door_c) - m->ter_set(i, y2, t_shrub); - } - if (walled_south && x1 <= SEEX && SEEX <= x2) { - m->ter_set(SEEX - 1, y2, grass_or_dirt()); - m->ter_set(SEEX, y2, grass_or_dirt()); - } - } - break; - - case room_mansion_entry: - if (!one_in(3)) { // Columns - for (int y = y1 + 2; y <= y2; y += 3) { - m->ter_set(cx_low - 3, y, t_column); - m->ter_set(cx_low + 3, y, t_column); - } - } - if (one_in(6)) { // Suits of armor - int start = y1 + rng(2, 4), end = y2 - rng(0, 4), step = rng(3, 6); - for (int y = start; y <= end; y += step) { - m->spawn_item(x1 + 1, y, "helmet_plate", 0); - m->spawn_item(x1 + 1, y, "armor_plate", 0); - if (one_in(2)) - m->spawn_item(x1 + 1, y, "pike", 0); - else if (one_in(3)) - m->spawn_item(x1 + 1, y, "broadsword", 0); - else if (one_in(6)) - m->spawn_item(x1 + 1, y, "mace", 0); - else if (one_in(6)) - m->spawn_item(x1 + 1, y, "morningstar", 0); - - m->spawn_item(x2 - 1, y, "helmet_plate", 0); - m->spawn_item(x2 - 1, y, "armor_plate", 0); - if (one_in(2)) - m->spawn_item(x2 - 1, y, "pike", 0); - else if (one_in(3)) - m->spawn_item(x2 - 1, y, "broadsword", 0); - else if (one_in(6)) - m->spawn_item(x2 - 1, y, "mace", 0); - else if (one_in(6)) - m->spawn_item(x2 - 1, y, "morningstar", 0); - } - } - break; - - case room_mansion_bedroom: - if (dx > dy || (dx == dy && one_in(2))) { // horizontal - if (one_in(2)) { // bed on left - square_furn(m, f_bed, x1 + 1, cy_low - 1, x1 + 3, cy_low + 1); - } else { // bed on right - square_furn(m, f_bed, x2 - 3, cy_low - 1, x2 - 1, cy_low + 1); - } - m->furn_set(cx_hi - 2, y1, f_bookcase); - m->furn_set(cx_hi - 1, y1, f_counter); - m->ter_set(cx_hi , y1, t_console_broken); - m->furn_set(cx_hi + 1, y1, f_counter); - m->furn_set(cx_hi + 2, y1, f_bookcase); - m->place_items("bedroom", 60, cx_hi - 2, y1, cx_hi + 2, y1, false, 0); - - m->furn_set(cx_hi - 2, y2, f_dresser); - m->furn_set(cx_hi - 1, y2, f_dresser); - m->place_items("dresser", 80, cx_hi - 2, y2, cx_hi - 1, y2, false, 0); - if (one_in(10)) - m->place_items("homeguns", 58, cx_hi - 2, y2, cx_hi - 1, y2, false, 0); - - m->furn_set(cx_hi + 1, y2, f_desk); - m->place_items("office", 50, cx_hi + 1, y2, cx_hi + 1, y2, false, 0); - - m->furn_set(cx_hi + 2, y2, f_chair); - - m->furn_set(x1, y1, f_indoor_plant); - m->furn_set(x1, y2, f_indoor_plant); - - } else { // vertical - if (one_in(2)) { // bed at top - square_furn(m, f_bed, cx_low - 1, y1 + 1, cx_low + 1, y1 + 3); - } else { // bed at bottom - square_furn(m, f_bed, cx_low - 1, y2 - 3, cx_low + 1, y2 - 1); - } - m->furn_set(x1, cy_hi - 2, f_bookcase); - m->furn_set(x1, cy_hi - 1, f_counter); - m->ter_set(x1, cy_hi, t_console_broken); - m->furn_set(x1, cy_hi + 1, f_counter); - m->furn_set(x1, cy_hi + 2, f_bookcase); - m->place_items("bedroom", 80, x1, cy_hi - 2, x1, cy_hi + 2, false, 0); - - m->furn_set(x2, cy_hi - 2, f_dresser); - m->furn_set(x2, cy_hi - 1, f_dresser); - m->place_items("dresser", 80, x2, cy_hi - 2, x2, cy_hi - 1, false, 0); - if (one_in(10)) - m->place_items("homeguns", 58, x2, cy_hi - 2, x2, cy_hi - 1, false, 0); - - m->furn_set(x2, cy_hi + 1, f_desk); - m->place_items("office", 50, x2, cy_hi + 1, x2, cy_hi + 1, false, 0); - - m->furn_set(x2, cy_hi + 2, f_chair); - - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - } - break; - - case room_mansion_library: - if (dx < dy || (dx == dy && one_in(2))) { // vertically-aligned bookshelves - for (int x = x1 + 1; x <= cx_low - 2; x += 3) { - for (int y = y1 + 1; y <= y2 - 3; y += 4) { - square_furn(m, f_bookcase, x, y, x + 1, y + 2); - m->place_items("novels", 85, x, y, x + 1, y + 2, false, 0); - m->place_items("manuals", 62, x, y, x + 1, y + 2, false, 0); - m->place_items("textbooks", 40, x, y, x + 1, y + 2, false, 0); - } - } - for (int x = x2 - 1; x >= cx_low + 2; x -= 3) { - for (int y = y1 + 1; y <= y2 - 3; y += 4) { - square_furn(m, f_bookcase, x - 1, y, x, y + 2); - m->place_items("novels", 85, x - 1, y, x, y + 2, false, 0); - m->place_items("manuals", 62, x - 1, y, x, y + 2, false, 0); - m->place_items("textbooks", 40, x - 1, y, x, y + 2, false, 0); - } - } - } else { // horizontally-aligned bookshelves - for (int y = y1 + 1; y <= cy_low - 2; y += 3) { - for (int x = x1 + 1; x <= x2 - 3; x += 4) { - square_furn(m, f_bookcase, x, y, x + 2, y + 1); - m->place_items("novels", 85, x, y, x + 2, y + 1, false, 0); - m->place_items("manuals", 62, x, y, x + 2, y + 1, false, 0); - m->place_items("textbooks", 40, x, y, x + 2, y + 1, false, 0); - } - } - for (int y = y2 - 1; y >= cy_low + 2; y -= 3) { - for (int x = x1 + 1; x <= x2 - 3; x += 4) { - square_furn(m, f_bookcase, x, y - 1, x + 2, y); - m->place_items("novels", 85, x, y - 1, x + 2, y, false, 0); - m->place_items("manuals", 62, x, y - 1, x + 2, y, false, 0); - m->place_items("textbooks", 40, x, y - 1, x + 2, y, false, 0); - } - } - } - break; - - case room_mansion_kitchen: - line_furn(m, f_counter, cx_hi - 2, y1 + 1, cx_hi - 2, y2 - 1); - line_furn(m, f_counter, cx_hi, y1 + 1, cx_hi, y2 - 1); - m->place_items("kitchen", 60, cx_hi - 2, y1 + 1, cx_hi, y2 - 1, false, 0); - - line_furn(m, f_fridge, cx_hi + 2, y1 + 1, cx_hi + 2, cy_hi - 1); - m->place_items("fridge", 80, cx_hi + 2, y1 + 1, cx_hi + 2, cy_hi - 1, false, 0); - - m->furn_set(cx_hi + 2, cy_hi, f_oven); - - line_furn(m, f_rack, cx_hi + 2, cy_hi + 1, cx_hi + 2, y2 - 1); - m->place_items("cannedfood", 70, cx_hi + 2, cy_hi + 1, cx_hi + 2, y2 - 1, false, 0); - m->place_items("pasta", 70, cx_hi + 2, cy_hi + 1, cx_hi + 2, y2 - 1, false, 0); - break; - - case room_mansion_dining: - if (dx < dy || (dx == dy && one_in(2))) { // vertically-aligned table - line_furn(m, f_table, cx_low, y1 + 2, cx_low, y2 - 2); - line_furn(m, f_bench, cx_low - 1, y1 + 2, cx_low - 1, y2 - 2); - line_furn(m, f_bench, cx_low + 1, y1 + 2, cx_low + 1, y2 - 2); - m->place_items("dining", 78, cx_low, y1 + 2, cx_low, y2 - 2, false, 0); - } else { // horizontally-aligned table - line_furn(m, f_table, x1 + 2, cy_low, x2 - 2, cy_low); - line_furn(m, f_bench, x1 + 2, cy_low - 1, x2 - 2, cy_low - 1); - line_furn(m, f_bench, x1 + 2, cy_low + 1, x2 - 2, cy_low + 1); - m->place_items("dining", 78, x1 + 2, cy_low, x2 - 2, cy_low, false, 0); - } - m->furn_set(x1, y1, f_indoor_plant); - m->furn_set(x2, y1, f_indoor_plant); - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - break; - - case room_mansion_game: - if (dx < dy || one_in(2)) { // vertically-aligned table - square_furn(m, f_pool_table, cx_low, cy_low - 1, cx_low + 1, cy_low + 1); - m->place_items("pool_table", 80, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, - false, 0); - } else { // horizontally-aligned table - square_furn(m, f_pool_table, cx_low - 1, cy_low, cx_low + 1, cy_low + 1); - m->place_items("pool_table", 80, cx_low - 1, cy_low, cx_low + 1, cy_low + 1, - false, 0); - } - - if (one_in(2)) - { - line_furn(m, f_sofa, x1 + 1, cy_low - 1, x1 + 1, cy_low + 1); - m->furn_set(x1 + 1, cy_low - 2, f_table); - m->place_items("coffee_shop", 70, x1 + 1, cy_low + 2, x1 + 1, cy_low + 2, false, 0); - m->place_items("magazines", 50, x1 + 1, cy_low + 2, x1 + 1, cy_low + 2, false, 0); - m->furn_set(x1 + 1, cy_low + 2, f_table); - m->place_items("coffee_shop", 70, x1 + 1, cy_low - 2, x1 + 1, cy_low - 2, false, 0); - m->place_items("magazines", 70, x1 + 1, cy_low - 2, x1 + 1, cy_low - 2, false, 0); - } - else - { - line_furn(m, f_sofa, cx_low - 1, y1 + 1, cx_low + 1, y1 + 1); - m->furn_set(cx_low - 2, y1 + 1, f_table); - m->place_items("coffee_shop", 70, cx_low - 2, y1 + 1, cx_low - 2, y1 + 1, false, 0); - m->place_items("magazines", 50, cx_low - 2, y1 + 1, cx_low - 2, y1 + 1, false, 0); - m->furn_set(cx_low + 2, y1 + 1, f_table); - m->place_items("coffee_shop", 70, cx_low + 2, y1 + 1, cx_low + 2, y1 + 1, false, 0); - m->place_items("magazines", 70, cx_low + 2, y1 + 1, cx_low + 2, y1 + 1, false, 0); - } - m->furn_set(x1, y1, f_indoor_plant); - m->furn_set(x2, y1, f_indoor_plant); - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - break; - - case room_mansion_pool: - square(m, t_water_pool, x1 + 3, y1 + 3, x2 - 3, y2 - 3); - - m->furn_set(rng(x1 + 1, cx_hi - 2), y1 + 2, f_chair); - m->furn_set(cx_hi, y1 + 2, f_table); - m->furn_set(rng(x1 + 1, cx_hi + 2), y1 + 2, f_chair); - m->place_items("magazines", 60, cx_hi, y1 + 2, cx_hi, y1 + 2, false, 0); - - m->furn_set(x1, y1, f_indoor_plant); - m->furn_set(x2, y1, f_indoor_plant); - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - break; - - case room_mansion_study: - int study_y; - if (one_in(2)) - { - study_y = y1; - } - else - { - study_y = y2; - } - for (int x = x1 + 1; x <= x2 - 1; x++) - { - if (x % 2 == 0) - { - m->furn_set(x, study_y, f_rack); - if (one_in(3)) - { - m->place_items("alcohol", 60, x, study_y, x, study_y, false, 0); - } - else if (one_in(3)) - { - m->place_items("church", 60, x, study_y, x, study_y, false, 0); - } - else - { - m->place_items("art", 60, x, study_y, x, study_y, false, 0); - } - } - } - - square_furn(m, f_table, cx_low, cy_low - 1, cx_low + 1, cy_low + 1); - m->place_items("novels", 50, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, - false, 0); - m->place_items("magazines", 60, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, - false, 0); - m->place_items("office", 60, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, - false, 0); - if (one_in(2)) - m->furn_set(cx_low - 1, rng(cy_low - 1, cy_low + 1), f_chair); - else - m->furn_set(cx_low + 2, rng(cy_low - 1, cy_low + 1), f_chair); - m->furn_set(x1, y1, f_indoor_plant); - m->furn_set(x2, y1, f_indoor_plant); - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - break; - - case room_mansion_bathroom: - m->place_toilet(rng(x1 + 1, cx_hi - 1), rng(y1 + 1, cy_hi - 1)); - m->furn_set( rng(cx_hi + 1, x2 - 1), rng(y1 + 1, cy_hi - 1) , f_bathtub); - m->furn_set( rng(x1 + 1, cx_hi - 1), rng(cy_hi + 1, y2 - 1) , f_sink); - - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - - m->place_items("harddrugs", 20, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - m->place_items("softdrugs", 72, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - m->place_items("cleaning", 48, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); - break; - - case room_mansion_gallery: - - m->furn_set(x2 + 2, y2 + 2, f_rack); - m->place_items("medieval", 40, x2 + 2, y2 + 2, x2 + 2, y2 + 2, false, 0); - m->furn_set(x2 - 2, y2 + 2, f_rack); - m->place_items("art", 70, x2 - 2, y2 + 2, x2 - 2, y2 + 2, false, 0); - m->furn_set(x2 + 2, y2 - 2, f_rack); - m->place_items("art", 70, x2 + 2, y2 - 2, x2 + 2, y2 - 2, false, 0); - m->furn_set(x2 - 2, y2 - 2, f_rack); - m->place_items("alcohol", 80, x2 - 2, y2 - 2, x2 - 2, y2 - 2, false, 0); - - square_furn(m, f_table, cx_low - 1, cy_low - 1, cx_low + 1, cy_low + 1); - m->furn_set(x1, y1, f_indoor_plant); - m->furn_set(x2, y1, f_indoor_plant); - m->furn_set(x1, y2, f_indoor_plant); - m->furn_set(x2, y2, f_indoor_plant); - - break; - default: break; - } -} - -void mansion_room(map *m, int x1, int y1, int x2, int y2) -{ - room_type type = pick_mansion_room(x1, y1, x2, y2); - build_mansion_room(m, type, x1, y1, x2, y2); -} - -void map::add_extra(map_extra type, game *g) -{ - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), g->turn); - - switch (type) { - - case mx_null: - debugmsg("Tried to generate null map extra."); - break; - - case mx_helicopter: - { - int cx = rng(4, SEEX * 2 - 5), cy = rng(4, SEEY * 2 - 5); - for (int x = 0; x < SEEX * 2; x++) { - for (int y = 0; y < SEEY * 2; y++) { - if (x >= cx - 4 && x <= cx + 4 && y >= cy - 4 && y <= cy + 4) { - if (!one_in(5)) - ter_set(x, y, t_wreckage); - else if (has_flag("BASHABLE", x, y)) { - std::string junk; - bash(x, y, 500, junk); // Smash the fuck out of it - bash(x, y, 500, junk); // Smash the fuck out of it some more - } - } else if (one_in(10)) // 1 in 10 chance of being wreckage anyway - ter_set(x, y, t_wreckage); - } - } - - spawn_item(rng(5,18), rng(5,18), "black_box", 0); - place_items("helicopter", 90, cx - 4, cy - 4, cx + 4, cy + 4, true, 0); - place_items("helicopter", 20, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - items_location extra_items = "helicopter"; - switch (rng(1, 4)) { - case 1: extra_items = "military"; break; - case 2: extra_items = "science"; break; - case 3: extra_items = "allguns"; break; - case 4: extra_items = "bionics"; break; - } - place_spawns(g, "GROUP_MAYBE_MIL", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1f);//0.1 = 1-5 - place_items(extra_items, 70, cx - 4, cy - 4, cx + 4, cy + 4, true, 0); - } - break; - - case mx_military: - { - int num_bodies = dice(2, 6); - for (int i = 0; i < num_bodies; i++) { - int x, y, tries = 0;; - do { // Loop until we find a valid spot to dump a body, or we give up - x = rng(0, SEEX * 2 - 1); - y = rng(0, SEEY * 2 - 1); - tries++; - } while (tries < 10 && move_cost(x, y) == 0); - - if (tries < 10) { // We found a valid spot! - add_item(x, y, body); - place_items("military", 86, x, y, x, y, true, 0); - if (one_in(8)) - spawn_item(x, y, "id_military", 0); - } - } - place_spawns(g, "GROUP_MAYBE_MIL", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1f);//0.1 = 1-5 - place_items("rare", 25, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - } - break; - - case mx_science: - { - int num_bodies = dice(2, 5); - for (int i = 0; i < num_bodies; i++) { - int x, y, tries = 0; - do { // Loop until we find a valid spot to dump a body, or we give up - x = rng(0, SEEX * 2 - 1); - y = rng(0, SEEY * 2 - 1); - tries++; - } while (tries < 10 && move_cost(x, y) == 0); - - if (tries < 10) { // We found a valid spot! - add_item(x, y, body); - spawn_item(x, y, "id_science", 0); - place_items("science", 84, x, y, x, y, true, 0); - } - } - place_items("rare", 45, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); - } - break; - - case mx_stash: - { - int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); - if (move_cost(x, y) != 0) - ter_set(x, y, t_dirt); - - int size = 0; - items_location stash; - switch (rng(1, 6)) { // What kind of stash? - case 1: stash = "stash_food"; size = 90; break; - case 2: stash = "stash_ammo"; size = 80; break; - case 3: stash = "rare"; size = 70; break; - case 4: stash = "stash_wood"; size = 90; break; - case 5: stash = "stash_drugs"; size = 85; break; - case 6: stash = "trash"; size = 92; break; - } - - if (move_cost(x, y) == 0) - ter_set(x, y, t_dirt); - place_items(stash, size, x, y, x, y, true, 0); - -// Now add traps around that stash - for (int i = x - 4; i <= x + 4; i++) { - for (int j = y - 4; j <= y + 4; j++) { - if (i >= 0 && j >= 0 && i < SEEX * 2 && j < SEEY * 2 && one_in(4)) { - trap_id placed = tr_null; - switch (rng(1, 7)) { - case 1: - case 2: - case 3: placed = tr_beartrap; break; - case 4: placed = tr_caltrops; break; - case 5: placed = tr_nailboard; break; - case 6: placed = tr_crossbow; break; - case 7: placed = tr_shotgun_2; break; - } - if (placed == tr_beartrap && has_flag("DIGGABLE", i, j)) { - if (one_in(8)) - placed = tr_landmine_buried; - else - placed = tr_beartrap_buried; - } - add_trap(i, j, placed); - } - } - } - } - break; - - case mx_drugdeal: { -// Decide on a drug type - int num_drugs = 0; - itype_id drugtype; - switch (rng(1, 10)) { - case 1: // Weed - num_drugs = rng(20, 30); - drugtype = "weed"; - break; - case 2: - case 3: - case 4: - case 5: // Cocaine - num_drugs = rng(10, 20); - drugtype = "coke"; - break; - case 6: - case 7: - case 8: // Meth - num_drugs = rng(8, 14); - drugtype = "meth"; - break; - case 9: - case 10: // Heroin - num_drugs = rng(6, 12); - drugtype = "heroin"; - break; - } - int num_bodies_a = dice(3, 3); - int num_bodies_b = dice(3, 3); - bool north_south = one_in(2); - bool a_has_drugs = one_in(2); - - for (int i = 0; i < num_bodies_a; i++) { - int x, y, x_offset, y_offset, tries = 0; - do { // Loop until we find a valid spot to dump a body, or we give up - if (north_south) { - x = rng(0, SEEX * 2 - 1); - y = rng(0, SEEY - 4); - x_offset = 0; - y_offset = -1; - } else { - x = rng(0, SEEX - 4); - y = rng(0, SEEY * 2 - 1); - x_offset = -1; - y_offset = 0; - } - tries++; - } while (tries < 10 && move_cost(x, y) == 0); - - if (tries < 10) { // We found a valid spot! - add_item(x, y, body); - int splatter_range = rng(1, 3); - for (int j = 0; j <= splatter_range; j++) { - add_field(g, x + (j * x_offset), y + (j * y_offset), fd_blood, 1); - } - place_items("drugdealer", 75, x, y, x, y, true, 0); - if (a_has_drugs && num_drugs > 0) { - int drugs_placed = rng(2, 6); - if (drugs_placed > num_drugs) { - drugs_placed = num_drugs; - num_drugs = 0; - } - spawn_item(x, y, drugtype, 0, 0, drugs_placed); - } - } - } - for (int i = 0; i < num_bodies_b; i++) { - int x, y, x_offset, y_offset, tries = 0; - do { // Loop until we find a valid spot to dump a body, or we give up - if (north_south) { - x = rng(0, SEEX * 2 - 1); - y = rng(SEEY + 3, SEEY * 2 - 1); - x_offset = 0; - y_offset = 1; - } else { - x = rng(SEEX + 3, SEEX * 2 - 1); - y = rng(0, SEEY * 2 - 1); - x_offset = 1; - y_offset = 0; - } - tries++; - } while (tries < 10 && move_cost(x, y) == 0); - - if (tries < 10) { // We found a valid spot! - add_item(x, y, body); - int splatter_range = rng(1, 3); - for (int j = 0; j <= splatter_range; j++) { - add_field(g, x + (j * x_offset), y + (j * y_offset), fd_blood, 1); - } - place_items("drugdealer", 75, x, y, x, y, true, 0); - if (!a_has_drugs && num_drugs > 0) { - int drugs_placed = rng(2, 6); - if (drugs_placed > num_drugs) { - drugs_placed = num_drugs; - num_drugs = 0; - } - spawn_item(x, y, drugtype, 0, 0, drugs_placed); - } - } - } - } break; - - case mx_supplydrop: { - int num_crates = rng(1, 5); - for (int i = 0; i < num_crates; i++) { - int x, y, tries = 0; - do { // Loop until we find a valid spot to dump a body, or we give up - x = rng(0, SEEX * 2 - 1); - y = rng(0, SEEY * 2 - 1); - tries++; - } while (tries < 10 && move_cost(x, y) == 0); - furn_set(x, y, f_crate_c); - switch (rng(1, 10)) { - case 1: - case 2: - case 3: - case 4: - place_items("mil_food", 88, x, y, x, y, true, 0); - break; - case 5: - case 6: - case 7: - place_items("grenades", 82, x, y, x, y, true, 0); - break; - case 8: - case 9: - place_items("mil_armor", 75, x, y, x, y, true, 0); - break; - case 10: - place_items("mil_rifles", 80, x, y, x, y, true, 0); - break; - } - } - } - break; - - case mx_portal: - { - std::string spawncreatures[5] = {"mon_gelatin", "mon_flaming_eye", "mon_kreck", "mon_gracke", "mon_blank"}; - int x = rng(1, SEEX * 2 - 2), y = rng(1, SEEY * 2 - 2); - for (int i = x - 1; i <= x + 1; i++) { - for (int j = y - 1; j <= y + 1; j++) - ter_set(i, j, t_rubble); - } - add_trap(x, y, tr_portal); - int num_monsters = rng(0, 4); - for (int i = 0; i < num_monsters; i++) { - std::string type = spawncreatures[( rng(0, 5) )]; - int mx = rng(1, SEEX * 2 - 2), my = rng(1, SEEY * 2 - 2); - ter_set(mx, my, t_rubble); - add_spawn(type, 1, mx, my); - } - } - break; - - case mx_minefield: - { - int num_mines = rng(6, 20); - for (int x = 0; x < SEEX * 2; x++) { - for (int y = 0; y < SEEY * 2; y++) { - if (one_in(3)) - ter_set(x, y, t_dirt); - } - } - for (int i = 0; i < num_mines; i++) { - int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); - if (!has_flag("DIGGABLE", x, y) || one_in(8)) { - ter_set(x, y, t_dirtmound); - } - add_trap(x, y, tr_landmine_buried); - } - } - break; - - case mx_crater: - { - int size = rng(2, 6); - int size_squared = size * size; - int x = rng(size, SEEX * 2 - 1 - size), y = rng(size, SEEY * 2 - 1 - size); - for (int i = x - size; i <= x + size; i++) { - for (int j = y - size; j <= y + size; j++) { - //If we're using circular distances, make circular craters - //Pythagoras to the rescue, x^2 + y^2 = hypotenuse^2 - if(!trigdist || (((i-x)*(i-x) + (j-y)*(j-y)) <= size_squared)) { - destroy(g, i, j, false); - radiation(i, j) += rng(20, 40); - } - } - } - } - break; - - case mx_fumarole: - { - int x1 = rng(0, SEEX - 1), y1 = rng(0, SEEY - 1), - x2 = rng(SEEX, SEEX * 2 - 1), y2 = rng(SEEY, SEEY * 2 - 1); - std::vector fumarole = line_to(x1, y1, x2, y2, 0); - for (int i = 0; i < fumarole.size(); i++) - ter_set(fumarole[i].x, fumarole[i].y, t_lava); - } - break; - - case mx_portal_in: { - std::string monids[5] = {"mon_gelatin", "mon_flaming_eye", "mon_kreck", "mon_gracke", "mon_blank"}; - int x = rng(5, SEEX * 2 - 6), y = rng(5, SEEY * 2 - 6); - add_field(g, x, y, fd_fatigue, 3); - for (int i = x - 5; i <= x + 5; i++) { - for (int j = y - 5; j <= y + 5; j++) { - if (rng(1, 9) >= trig_dist(x, y, i, j)) { - marlossify(i, j); - if (one_in(15)) { - monster creature(GetMType(monids[rng(0, 5)])); - creature.spawn(i, j); - g->add_zombie(creature); - } - } - } - } - } - break; - - case mx_anomaly: { - point center( rng(6, SEEX * 2 - 7), rng(6, SEEY * 2 - 7) ); - artifact_natural_property prop = - artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1)); - create_anomaly(center.x, center.y, prop); - spawn_artifact(center.x, center.y, g->new_natural_artifact(prop), 0); - } break; - - default: break; - } -} - -void map::create_anomaly(int cx, int cy, artifact_natural_property prop) -{ - rough_circle(this, t_rubble, cx, cy, 5); - switch (prop) { - case ARTPROP_WRIGGLING: - case ARTPROP_MOVING: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble) { - add_field(NULL, i, j, fd_push_items, 1); - if (one_in(3)) - spawn_item(i, j, "rock", 0); - } - } - } - break; - - case ARTPROP_GLOWING: - case ARTPROP_GLITTERING: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble && one_in(2)) - add_trap(i, j, tr_glow); - } - } - break; - - case ARTPROP_HUMMING: - case ARTPROP_RATTLING: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble && one_in(2)) - add_trap(i, j, tr_hum); - } - } - break; - - case ARTPROP_WHISPERING: - case ARTPROP_ENGRAVED: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble && one_in(3)) - add_trap(i, j, tr_shadow); - } - } - break; - - case ARTPROP_BREATHING: - for (int i = cx - 1; i <= cx + 1; i++) { - for (int j = cy - 1; j <= cy + 1; j++) - if (i == cx && j == cy) - add_spawn("mon_breather_hub", 1, i, j); - else - add_spawn("mon_breather", 1, i, j); - } - break; - - case ARTPROP_DEAD: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble) - add_trap(i, j, tr_drain); - } - } - break; - - case ARTPROP_ITCHY: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble) - radiation(i, j) = rng(0, 10); - } - } - break; - - case ARTPROP_ELECTRIC: - case ARTPROP_CRACKLING: - add_field(NULL, cx, cy, fd_shock_vent, 3); - break; - - case ARTPROP_SLIMY: - add_field(NULL, cx, cy, fd_acid_vent, 3); - break; - - case ARTPROP_WARM: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble) - add_field(NULL, i, j, fd_fire_vent, 1 + (rl_dist(cx, cy, i, j) % 3)); - } - } - break; - - case ARTPROP_SCALED: - for (int i = cx - 5; i <= cx + 5; i++) { - for (int j = cy - 5; j <= cy + 5; j++) { - if (ter(i, j) == t_rubble) - add_trap(i, j, tr_snake); - } - } - break; - - case ARTPROP_FRACTAL: - create_anomaly(cx - 4, cy - 4, - artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); - create_anomaly(cx + 4, cy - 4, - artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); - create_anomaly(cx - 4, cy + 4, - artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); - create_anomaly(cx + 4, cy - 4, - artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); - break; - default: break; - } -} - -void line(map *m, ter_id type, int x1, int y1, int x2, int y2) -{ - std::vector line = line_to(x1, y1, x2, y2, 0); - for (int i = 0; i < line.size(); i++) - m->ter_set(line[i].x, line[i].y, type); - m->ter_set(x1, y1, type); -} - -void line_furn(map *m, furn_id type, int x1, int y1, int x2, int y2) -{ - std::vector line = line_to(x1, y1, x2, y2, 0); - for (int i = 0; i < line.size(); i++) - m->furn_set(line[i].x, line[i].y, type); - m->furn_set(x1, y1, type); -} - -void fill_background(map *m, ter_id type) -{ - square(m, type, 0, 0, SEEX*2-1, SEEY*2-1); -} - -void fill_background(map *m, ter_id (*f)()) -{ - square(m, f, 0, 0, SEEX*2-1, SEEY*2-1); -} - -void square(map *m, ter_id type, int x1, int y1, int x2, int y2) -{ - for (int x = x1; x <= x2; x++) - for (int y = y1; y <= y2; y++) - m->ter_set(x, y, type); -} - -void square_furn(map *m, furn_id type, int x1, int y1, int x2, int y2) -{ - for (int x = x1; x <= x2; x++) - for (int y = y1; y <= y2; y++) - m->furn_set(x, y, type); -} - -void square(map *m, ter_id (*f)(), int x1, int y1, int x2, int y2) -{ - for (int x = x1; x <= x2; x++) - for (int y = y1; y <= y2; y++) - m->ter_set(x, y, f()); -} - -void rough_circle(map *m, ter_id type, int x, int y, int rad) -{ - for (int i = x - rad; i <= x + rad; i++) { - for (int j = y - rad; j <= y + rad; j++) { - if (rl_dist(x, y, i, j) + rng(0, 3) <= rad) - m->ter_set(i, j, type); - } - } -} - -void add_corpse(game *g, map *m, int x, int y) -{ - item body; - body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), 0); - m->add_item_or_charges(x, y, body); - m->put_items_from("shoes", 1, x, y, 0, 0, 0); - m->put_items_from("pants", 1, x, y, 0, 0, 0); - m->put_items_from("shirts", 1, x, y, 0, 0, 0); - if (one_in(6)) - m->put_items_from("jackets", 1, x, y, 0, 0, 0); - if (one_in(15)) - m->put_items_from("bags", 1, x, y, 0, 0, 0); -} - -/** - * Adds vehicles to the current submap, selected from a random weighted - * distribution of possible vehicles. If the road has a pavement, then set the - * 'city' flag to true to spawn wrecks. If it doesn't (ie, highway or country - * road,) then set 'city' to false to spawn far fewer vehicles that are out - * of gas instead of wrecked. - * @param city Whether or not to spawn city wrecks. - * @param facing The direction the spawned car should face (multiple of 90). - */ -void map::add_road_vehicles(bool city, int facing) -{ - if (city) { - int spawn_type = rng(0, 100); - if(spawn_type <= 33) { - //Randomly-distributed wrecks - int maxwrecks = rng(1, 3); - for (int nv = 0; nv < maxwrecks; nv++) { - int vx = rng(0, 19); - int vy = rng(0, 19); - int car_type = rng(1, 100); - if (car_type <= 25) { - add_vehicle(g, "car", vx, vy, facing, -1, 1); - } else if (car_type <= 30) { - add_vehicle(g, "policecar", vx, vy, facing, -1, 1); - } else if (car_type <= 40) { - add_vehicle(g, "ambulance", vx, vy, facing, -1, 1); - } else if (car_type <= 45) { - add_vehicle(g, "beetle", vx, vy, facing, -1, 1); - } else if (car_type <= 50) { - add_vehicle(g, "scooter", vx, vy, facing, -1, 1); - } else if (car_type <= 55) { - add_vehicle(g, "motorcycle", vx, vy, facing, -1, 1); - } else if (car_type <= 65) { - add_vehicle(g, "hippie_van", vx, vy, facing, -1, 1); - } else if (car_type <= 70) { - add_vehicle(g, "cube_van", vx, vy, facing, -1, 1); - } else if (car_type <= 80) { - add_vehicle(g, "electric_car", vx, vy, facing, -1, 1); - } else if (car_type <= 90) { - add_vehicle(g, "flatbed_truck", vx, vy, facing, -1, 1); - } else if (car_type <= 95) { - add_vehicle(g, "rv", vx, vy, facing, -1, 1); - } else { - add_vehicle(g, "motorcycle_sidecart", vx, vy, facing, -1, 1); - } - } - } else if(spawn_type <= 66) { - //Parked vehicles - int veh_x = 0; - int veh_y = 0; - if(facing == 0) { - veh_x = rng(4, 16); veh_y = 17; - } else if(facing == 90) { - veh_x = 6; veh_y = rng(4, 16); - } else if(facing == 180) { - veh_x = rng(4, 16); veh_y = 6; - } else if(facing == 270) { - veh_x = 17; veh_y = rng(4, 16); - } - int veh_type = rng(0, 100); - if(veh_type <= 70) { - add_vehicle(g, "car", veh_x, veh_y, facing, -1, 1); - } else if(veh_type <= 95) { - add_vehicle(g, "electric_car", veh_x, veh_y, facing, -1, 1); - } else { - add_vehicle(g, "policecar", veh_x, veh_y, facing, -1, 1); - } - } else if(spawn_type <= 99) { - //Totally clear section of road - return; - } else { - //Road-blocking obstacle of some kind. - int block_type = rng(0, 100); - if(block_type <= 75) { - //Jack-knifed semi - int semi_x = 0; - int semi_y = 0; - int trailer_x = 0; - int trailer_y = 0; - if(facing == 0) { - semi_x = rng(0, 16); semi_y = rng(14, 16); - trailer_x = semi_x + 4; trailer_y = semi_y - 10; - } else if(facing == 90) { - semi_x = rng(0, 8); semi_y = rng(4, 15); - trailer_x = semi_x + 12; trailer_y = semi_y + 1; - } else if(facing == 180) { - semi_x = rng(4, 16); semi_y = rng(4, 6); - trailer_x = semi_x - 4; trailer_y = semi_y + 10; - } else { - semi_x = rng(12, 20); semi_y = rng(5, 16); - trailer_x = semi_x - 12; trailer_y = semi_y - 1; - } - add_vehicle(g, "semi_truck", semi_x, semi_y, (facing + 135) % 360, -1, 1); - add_vehicle(g, "truck_trailer", trailer_x, trailer_y, (facing + 90) % 360, -1, 1); - } else { - //Huge pileup of random vehicles - std::string next_vehicle; - int num_cars = rng(18, 22); - bool policecars = block_type >= 95; //Policecar pileup, Blues Brothers style - vehicle *last_added_car = NULL; - for(int i = 0; i < num_cars; i++) { - if(policecars) { - next_vehicle = "policecar"; - } else { - //Random car - int car_type = rng(0, 100); - if(car_type <= 70) { - next_vehicle = "car"; - } else if(car_type <= 90) { - next_vehicle = "flatbed_truck"; - } else if(car_type <= 95) { - next_vehicle = "cube_van"; - } else { - next_vehicle = "hippie_van"; - } - } - last_added_car = add_vehicle(g, next_vehicle, rng(4, 16), rng(4, 16), rng(0, 3) * 90, -1, 1); - } - - //Hopefully by the last one we've got a giant pileup, so name it - if (last_added_car != NULL) { - if(policecars) { - last_added_car->name = _("policecar pile-up"); - } else { - last_added_car->name = _("pile-up"); - } - } - } - } - } else { - // spawn regular road out of fuel vehicles - if (one_in(40)) { - int vx = rng(8, 16); - int vy = rng(8, 16); - int car_type = rng(1, 10); - if (car_type <= 5) { - add_vehicle(g, "car", vx, vy, facing, 0, -1); - } else if (car_type <= 8) { - add_vehicle(g, "flatbed_truck", vx, vy, facing, 0, -1); - } else if (car_type <= 9) { - add_vehicle(g, "semi_truck", vx, vy, facing, 0, -1); - } else { - add_vehicle(g, "armored_car", vx, vy, facing, 0, -1); - } - } - } -} diff --git a/monattack.h b/monattack.h deleted file mode 100644 index cd264e38a63b0..0000000000000 --- a/monattack.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _MONATTACK_H_ -#define _MONATTACK_H_ - -//#include "game.h" - -class game; - -struct SpeechBubble { - std::string text; - int volume; -}; - -class mattack { -public: - void none (game *g, monster *z){}; - void antqueen (game *g, monster *z); - void shriek (game *g, monster *z); - void rattle (game *g, monster *z); - void acid (game *g, monster *z); - void shockstorm (game *g, monster *z); - void smokecloud (game *g, monster *z); - void boomer (game *g, monster *z); - void resurrect (game *g, monster *z); - void science (game *g, monster *z); - void growplants (game *g, monster *z); - void grow_vine (game *g, monster *z); - void vine (game *g, monster *z); - void spit_sap (game *g, monster *z); - void triffid_heartbeat (game *g, monster *z); - void fungus (game *g, monster *z); - void fungus_growth (game *g, monster *z); - void fungus_sprout (game *g, monster *z); - void leap (game *g, monster *z); - void dermatik (game *g, monster *z); - void dermatik_growth (game *g, monster *z); - void plant (game *g, monster *z); - void disappear (game *g, monster *z); - void formblob (game *g, monster *z); - void dogthing (game *g, monster *z); - void tentacle (game *g, monster *z); - void vortex (game *g, monster *z); - void gene_sting (game *g, monster *z); - void para_sting (game *g, monster *z); - void triffid_growth (game *g, monster *z); - void stare (game *g, monster *z); - void fear_paralyze (game *g, monster *z); - void photograph (game *g, monster *z); - void tazer (game *g, monster *z); - void smg (game *g, monster *z); - void flamethrower (game *g, monster *z); - void copbot (game *g, monster *z); - void multi_robot (game *g, monster *z); // Pick from tazer, smg, flame - void ratking (game *g, monster *z); - void generator (game *g, monster *z); - void upgrade (game *g, monster *z); - void breathe (game *g, monster *z); - void bite (game *g, monster *z); - void brandish (game *g, monster *z); - void flesh_golem (game *g, monster *z); - void parrot (game *g, monster *z); -}; - -extern std::vector parrotVector; - -#endif diff --git a/mondeath.h b/mondeath.h deleted file mode 100644 index 7c9320cf8bf70..0000000000000 --- a/mondeath.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _MONDEATH_H_ -#define _MONDEATH_H_ - -class game; -class monster; - -class mdeath -{ -public: - void normal (game *g, monster *z); // Drop a body - void acid (game *g, monster *z); // Acid instead of a body - void boomer (game *g, monster *z); // Explodes in vomit :3 - void kill_vines (game *g, monster *z); // Kill all nearby vines - void vine_cut (game *g, monster *z); // Kill adjacent vine if it's cut - void triffid_heart (game *g, monster *z); // Destroy all roots - void fungus (game *g, monster *z); // Explodes in spores D: - void disintegrate (game *g, monster *z); // Falls apart - void shriek (game *g, monster *z); // Screams loudly - void rattle (game *g, monster *z); // Rattles like a rattlesnake - void worm (game *g, monster *z); // Spawns 2 half-worms - void disappear (game *g, monster *z); // Hallucination disappears - void guilt (game *g, monster *z); // Morale penalty - void blobsplit (game *g, monster *z); // Creates more blobs - void melt (game *g, monster *z); // Normal death, but melts - void amigara (game *g, monster *z); // Removes hypnosis if last one - void thing (game *g, monster *z); // Turn into a full thing - void explode (game *g, monster *z); // Damaging explosion - void ratking (game *g, monster *z); // Cure verminitis - void kill_breathers (game *g, monster *z); // All breathers die - void smokeburst (game *g, monster *z); // Explode like a huge smoke bomb. - void zombie (game *g, monster *z); // generate proper clothing for zombies - - void gameover (game *g, monster *z); // Game over! Defense mode -}; - -void make_mon_corpse(game* g, monster* z, int damageLvl); -void make_gibs(game* g, monster* z, int amount); - -#endif diff --git a/msvc100/Cataclysm.vcxproj b/msvc100/Cataclysm.vcxproj index ae669a54030e3..cbd6576e19725 100644 --- a/msvc100/Cataclysm.vcxproj +++ b/msvc100/Cataclysm.vcxproj @@ -850,6 +850,7 @@ + @@ -872,7 +873,6 @@ - @@ -957,6 +957,7 @@ + diff --git a/msvc100/Cataclysm.vcxproj.filters b/msvc100/Cataclysm.vcxproj.filters index 6445e24117dab..25fbe95835263 100644 --- a/msvc100/Cataclysm.vcxproj.filters +++ b/msvc100/Cataclysm.vcxproj.filters @@ -374,9 +374,6 @@ Header Files - - Header Files - Header Files diff --git a/msvc110/Cataclysm.vcxproj b/msvc110/Cataclysm.vcxproj index ae0206a1a26ef..fa6a673938578 100644 --- a/msvc110/Cataclysm.vcxproj +++ b/msvc110/Cataclysm.vcxproj @@ -82,6 +82,238 @@ x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {FE1372AC-5F90-447E-BBCA-1B253836EB77} Cataclysm @@ -354,12 +586,15 @@ 4100;4127;4996 _MBCS;_USE_MATH_DEFINES;%(PreprocessorDefinitions) true + false true Windows mainCRTStartup winmm.lib;%(AdditionalDependencies) + true + true getversion.cmd @@ -837,238 +1072,7 @@ Generate version.h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/msvc110/Cataclysm.vcxproj.filters b/msvc110/Cataclysm.vcxproj.filters index d99228122dc2d..056b45197b5e3 100644 --- a/msvc110/Cataclysm.vcxproj.filters +++ b/msvc110/Cataclysm.vcxproj.filters @@ -15,690 +15,693 @@ - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + + Source Files + + + Source Files + + Source Files - - Header Files - - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - - Resource Files - + - + + Resource Files + - + \ No newline at end of file diff --git a/msvc110/getversion.cmd b/msvc110/getversion.cmd index e60a57a2bed53..c94cacd174c3b 100644 --- a/msvc110/getversion.cmd +++ b/msvc110/getversion.cmd @@ -2,4 +2,4 @@ SETLOCAL echo Generating "version.h"... for /F "tokens=*" %%i in ('git describe --tags --always --dirty --match "[0-9]*.[0-9]*"') do set VERSION=%%i ->..\version.h echo #define VERSION "%VERSION%" \ No newline at end of file +>..\src\version.h echo #define VERSION "%VERSION%" diff --git a/msvc120/Cataclysm.sln b/msvc120/Cataclysm.sln index 3c44d2835c476..1a5550ebc910c 100644 --- a/msvc120/Cataclysm.sln +++ b/msvc120/Cataclysm.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Express 2013 for Windows Desktop -VisualStudioVersion = 12.0.20617.1 PREVIEW +VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cataclysm", "Cataclysm.vcxproj", "{7EC55101-7D0F-4F6C-B673-7D11BEC72583}" EndProject @@ -46,7 +46,7 @@ Global {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL Localized|Win32.ActiveCfg = Release SDL Localized|x64 {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL Localized|Win32.Build.0 = Release SDL Localized|Win32 {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL Localized|Win64.ActiveCfg = Release SDL Localized|Win32 - {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL|Win32.ActiveCfg = Release SDL|x64 + {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL|Win32.ActiveCfg = Release SDL|Win32 {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL|Win32.Build.0 = Release SDL|Win32 {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release SDL|Win64.ActiveCfg = Release SDL|Win32 {7EC55101-7D0F-4F6C-B673-7D11BEC72583}.Release TILES Localized|Win32.ActiveCfg = Release TILES Localized|x64 diff --git a/msvc120/Cataclysm.vcxproj b/msvc120/Cataclysm.vcxproj index 43de506f8d9a4..6d15e337588f7 100644 --- a/msvc120/Cataclysm.vcxproj +++ b/msvc120/Cataclysm.vcxproj @@ -623,6 +623,8 @@ true 4100;4127;4996 _MBCS;_USE_MATH_DEFINES;TILES;%(PreprocessorDefinitions) + C:\sdl\include; + /w %(AdditionalOptions) true @@ -630,7 +632,8 @@ true mainCRTStartup Windows - winmm.lib;libSDL.dll.lib;SDL_ttf.lib;%(AdditionalDependencies) + winmm.lib;SDL.lib;SDL_ttf.lib;%(AdditionalDependencies) + C:\sdl\lib\x86; @@ -985,216 +988,236 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/msvc120/Cataclysm.vcxproj.filters b/msvc120/Cataclysm.vcxproj.filters index c2a64c9a1899b..af577a6213eb3 100644 --- a/msvc120/Cataclysm.vcxproj.filters +++ b/msvc120/Cataclysm.vcxproj.filters @@ -15,624 +15,681 @@ - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - + \ No newline at end of file diff --git a/msvc120/getversion.cmd b/msvc120/getversion.cmd index e60a57a2bed53..15a79a7cb5799 100644 --- a/msvc120/getversion.cmd +++ b/msvc120/getversion.cmd @@ -2,4 +2,4 @@ SETLOCAL echo Generating "version.h"... for /F "tokens=*" %%i in ('git describe --tags --always --dirty --match "[0-9]*.[0-9]*"') do set VERSION=%%i ->..\version.h echo #define VERSION "%VERSION%" \ No newline at end of file +>..\src\version.h echo #define VERSION "%VERSION%" \ No newline at end of file diff --git a/omdata.h b/omdata.h deleted file mode 100644 index 05a97dedaf615..0000000000000 --- a/omdata.h +++ /dev/null @@ -1,288 +0,0 @@ -#ifndef _OMDATA_H_ -#define _OMDATA_H_ - -#include -#include -#include -#include "mtype.h" -#include "itype.h" -#include "output.h" -#include "mongroup.h" -#include "mapdata.h" - -#define OMAPX 180 -#define OMAPY 180 - -class overmap; - -struct oter_t { - std::string name; - long sym; // This is a long, so we can support curses linedrawing - nc_color color; - unsigned char see_cost; // Affects how far the player can see in the overmap - map_extras& embellishments; - bool known_down; - bool known_up; - int mondensity; - oter_t& operator=(const oter_t right){ - name = right.name; - sym = right.sym; - color = right.color; - see_cost = right.see_cost; - embellishments = right.embellishments; - known_down = right.known_down; - known_up = right.known_up; - mondensity = right.mondensity; - return *this; - } -}; - -enum oter_id { - ot_null = 0, - ot_crater, -// Wild terrain - ot_field, ot_forest, ot_forest_thick, ot_forest_water, -// Roads - ot_hiway_ns, ot_hiway_ew, - ot_road_null, - ot_road_ns, ot_road_ew, - ot_road_ne, ot_road_es, ot_road_sw, ot_road_wn, - ot_road_nes, ot_road_new, ot_road_nsw, ot_road_esw, ot_road_nesw, - ot_road_nesw_manhole, - ot_bridge_ns, ot_bridge_ew, - ot_river_center, - ot_river_c_not_ne, ot_river_c_not_nw, ot_river_c_not_se, ot_river_c_not_sw, - ot_river_north, ot_river_east, ot_river_south, ot_river_west, - ot_river_ne, ot_river_se, ot_river_sw, ot_river_nw, -// City buildings - ot_house_north, ot_house_east, ot_house_south, ot_house_west, - ot_house_base_north, ot_house_base_east, ot_house_base_south, - ot_house_base_west, - ot_s_lot, ot_park, ot_pool, - ot_s_gas_north, ot_s_gas_east, ot_s_gas_south, ot_s_gas_west, - ot_s_pharm_north, ot_s_pharm_east, ot_s_pharm_south, ot_s_pharm_west, - ot_office_doctor_north, ot_office_doctor_east, ot_office_doctor_south, ot_office_doctor_west, - ot_office_cubical_north, ot_office_cubical_east, ot_office_cubical_south, ot_office_cubical_west, - ot_apartments_con_tower_1_entrance,ot_apartments_con_tower_1, - ot_apartments_mod_tower_1_entrance,ot_apartments_mod_tower_1, - ot_office_tower_1_entrance, ot_office_tower_1, ot_office_tower_b_entrance, ot_office_tower_b, - ot_church_north, ot_church_east, ot_church_south, ot_church_west, - ot_cathedral_1_entrance, ot_cathedral_1, ot_cathedral_b_entrance, ot_cathedral_b, - ot_s_grocery_north, ot_s_grocery_east, ot_s_grocery_south, ot_s_grocery_west, - ot_s_hardware_north, ot_s_hardware_east, ot_s_hardware_south, - ot_s_hardware_west, - ot_s_electronics_north, ot_s_electronics_east, ot_s_electronics_south, - ot_s_electronics_west, - ot_s_sports_north, ot_s_sports_east, ot_s_sports_south, ot_s_sports_west, - ot_s_liquor_north, ot_s_liquor_east, ot_s_liquor_south, ot_s_liquor_west, - ot_s_gun_north, ot_s_gun_east, ot_s_gun_south, ot_s_gun_west, - ot_s_clothes_north, ot_s_clothes_east, ot_s_clothes_south, ot_s_clothes_west, - ot_s_library_north, ot_s_library_east, ot_s_library_south, ot_s_library_west, - ot_s_restaurant_north, ot_s_restaurant_east, ot_s_restaurant_south, - ot_s_restaurant_west, - ot_s_restaurant_fast_north, ot_s_restaurant_fast_east, ot_s_restaurant_fast_south, - ot_s_restaurant_fast_west, - ot_s_restaurant_coffee_north, ot_s_restaurant_coffee_east, ot_s_restaurant_coffee_south, - ot_s_restaurant_coffee_west, - ot_sub_station_north, ot_sub_station_east, ot_sub_station_south, - ot_sub_station_west, - ot_s_garage_north, ot_s_garage_east, ot_s_garage_south, ot_s_garage_west, - ot_cabin_strange, ot_cabin_strange_b, ot_cabin, - ot_dirtlot, ot_farm, ot_farm_field, - ot_police_north, ot_police_east, ot_police_south, ot_police_west, - ot_bank_north, ot_bank_east, ot_bank_south, ot_bank_west, - ot_bar_north, ot_bar_east, ot_bar_south, ot_bar_west, - ot_pawn_north, ot_pawn_east, ot_pawn_south, ot_pawn_west, - ot_mil_surplus_north, ot_mil_surplus_east, ot_mil_surplus_south, - ot_mil_surplus_west, - ot_furniture_north, ot_furniture_east, ot_furniture_south, - ot_furniture_west, - ot_abstorefront_north, ot_abstorefront_east, ot_abstorefront_south, - ot_abstorefront_west, - ot_megastore_entrance, ot_megastore, - ot_hospital_entrance, ot_hospital, - ot_public_works_entrance, ot_public_works, - ot_school_1, ot_school_2, ot_school_3, ot_school_4, ot_school_5, ot_school_6, ot_school_7, ot_school_8, ot_school_9, - ot_prison_1, ot_prison_2, ot_prison_3, ot_prison_4, ot_prison_5, ot_prison_6, ot_prison_7, ot_prison_8, ot_prison_9, - ot_prison_b, ot_prison_b_entrance, - ot_hotel_tower_1_1, ot_hotel_tower_1_2, ot_hotel_tower_1_3, ot_hotel_tower_1_4, ot_hotel_tower_1_5, ot_hotel_tower_1_6, - ot_hotel_tower_1_7, ot_hotel_tower_1_8, ot_hotel_tower_1_9,ot_hotel_tower_b_1, ot_hotel_tower_b_2, ot_hotel_tower_b_3, - ot_mansion_entrance, ot_mansion, ot_fema_entrance, ot_fema, - ot_station_radio_north, ot_station_radio_east, ot_station_radio_south, ot_station_radio_west, -// Goodies/dungeons - ot_shelter, ot_shelter_under, ot_lmoe, ot_lmoe_under, - ot_lab, ot_lab_stairs, ot_lab_core, ot_lab_finale, - ot_ice_lab, ot_ice_lab_stairs, ot_ice_lab_core, ot_ice_lab_finale, - ot_nuke_plant_entrance, ot_nuke_plant, // TODO - ot_bunker, ot_outpost, - ot_silo, ot_silo_finale, - ot_temple, ot_temple_stairs, ot_temple_core, ot_temple_finale, // TODO - ot_sewage_treatment, ot_sewage_treatment_hub, ot_sewage_treatment_under, - ot_mine_entrance, ot_mine_shaft, ot_mine, ot_mine_down, ot_mine_finale, - ot_spiral_hub, ot_spiral, - ot_radio_tower, - ot_toxic_dump, - ot_haz_sar_entrance, ot_haz_sar, - ot_haz_sar_entrance_b1, ot_haz_sar_b1, - ot_cave, ot_cave_rat, ot_hive, ot_fungal_bloom, ot_spider_pit, -// Underground terrain - ot_spider_pit_under, - ot_anthill, - ot_slimepit, ot_slimepit_down, - ot_triffid_grove, ot_triffid_roots, ot_triffid_finale, - ot_basement, - ot_cavern, ot_rock, ot_rift, ot_hellmouth, - ot_subway_station, - ot_subway_ns, ot_subway_ew, - ot_subway_ne, ot_subway_es, ot_subway_sw, ot_subway_wn, - ot_subway_nes, ot_subway_new, ot_subway_nsw, ot_subway_esw, ot_subway_nesw, - ot_sewer_ns, ot_sewer_ew, - ot_sewer_ne, ot_sewer_es, ot_sewer_sw, ot_sewer_wn, - ot_sewer_nes, ot_sewer_new, ot_sewer_nsw, ot_sewer_esw, ot_sewer_nesw, - ot_ants_ns, ot_ants_ew, - ot_ants_ne, ot_ants_es, ot_ants_sw, ot_ants_wn, - ot_ants_nes, ot_ants_new, ot_ants_nsw, ot_ants_esw, ot_ants_nesw, - ot_ants_food, ot_ants_larvae, ot_ants_queen, - - ot_tutorial, - num_ter_types -}; - -// LINE_**** corresponds to the ACS_**** macros in ncurses, and are patterned -// the same way; LINE_NESW, where X indicates a line and O indicates no line -// (thus, LINE_OXXX looks like 'T'). LINE_ is defined in output.h. The ACS_ -// macros can't be used here, since ncurses hasn't been initialized yet. - -// Order MUST match enum oter_id above! - -extern std::vector oterlist; - -// Overmap specials--these are "special encounters," dungeons, nests, etc. -// This specifies how often and where they may be placed. - -// OMSPEC_FREQ determines the length of the side of the square in which each -// overmap special will be placed. At OMSPEC_FREQ 6, the overmap is divided -// into 900 squares; lots of space for interesting stuff! -#define OMSPEC_FREQ 15 - -// Flags that determine special behavior for placement -enum omspec_flag { -OMS_FLAG_NULL = 0, -OMS_FLAG_ROTATE_ROAD, // Rotate to face road--assumes 3 following rotations -OMS_FLAG_ROTATE_RANDOM, // Rotate randomly--assumes 3 following rotations -OMS_FLAG_3X3, // 3x3 square, e.g. bee hive -OMS_FLAG_BLOB, // Randomly shaped blob -OMS_FLAG_3X3_SECOND, // 3x3 square, made of the tile AFTER the main one -OMS_FLAG_3X3_FIXED, //3x3 square, made of tiles one ahead and seven after -OMS_FLAG_2X2, -OMS_FLAG_2X2_SECOND, -OMS_FLAG_BIG, // As big as possible -OMS_FLAG_ROAD, // Add a road_point here; connect to towns etc. -OMS_FLAG_PARKING_LOT, // Add a road_point to the north of here -OMS_FLAG_DIRT_LOT, // Dirt lot flag for specials -OMS_FLAG_CLASSIC, // Allow this location to spawn in classic mode -NUM_OMS_FLAGS -}; - -struct omspec_place -{ -// Able functions - true if p is valid - bool never (overmap *om, unsigned long f, tripoint p) { return false; } - bool always (overmap *om, unsigned long f, tripoint p) { return true; } - bool water (overmap *om, unsigned long f, tripoint p); // Only on rivers - bool land (overmap *om, unsigned long f, tripoint p); // Only on land (no rivers) - bool forest (overmap *om, unsigned long f, tripoint p); // Forest - bool wilderness (overmap *om, unsigned long f, tripoint p); // Forest or fields - bool by_highway (overmap *om, unsigned long f, tripoint p); // Next to existing highways -}; - -struct overmap_special -{ - oter_id ter; // Terrain placed - int min_appearances; // Min number in an overmap - int max_appearances; // Max number in an overmap - int min_dist_from_city;// Min distance from city limits - int max_dist_from_city;// Max distance from city limits - - std::string monsters; // Type of monsters that appear here - int monster_pop_min; // Minimum monster population - int monster_pop_max; // Maximum monster population - int monster_rad_min; // Minimum monster radius - int monster_rad_max; // Maximum monster radius - - bool (omspec_place::*able) (overmap *om, unsigned long f, tripoint p); // See above - unsigned long flags : NUM_OMS_FLAGS; // See above -}; - -enum omspec_id -{ - OMSPEC_CRATER, - OMSPEC_HIVE, - OMSPEC_HOUSE, - OMSPEC_GAS, - OMSPEC_CABIN, - OMSPEC_CABIN_STRANGE, - OMSPEC_LMOE, - OMSPEC_FARM, - OMSPEC_TEMPLE, - OMSPEC_LAB, - OMSPEC_ICE_LAB, - OMSPEC_FEMA, - OMSPEC_BUNKER, - OMSPEC_OUTPOST, - OMSPEC_SILO, - OMSPEC_RADIO, - OMSPEC_MANSION, - OMSPEC_MANSION_WILD, - OMSPEC_MEGASTORE, - OMSPEC_HOSPITAL, - OMSPEC_PUBLIC_WORKS, - OMSPEC_APARTMENT_CON_TOWER, - OMSPEC_APARTMENT_MOD_TOWER, - OMSPEC_OFFICE_TOWER, - OMSPEC_CATHEDRAL, - OMSPEC_SCHOOL, - OMSPEC_PRISON, - OMSPEC_HOTEL_TOWER, - OMSPEC_SEWAGE, - OMSPEC_MINE, - OMSPEC_ANTHILL, - OMSPEC_SPIDER, - OMSPEC_SLIME, - OMSPEC_FUNGUS, - OMSPEC_TRIFFID, - OMSPEC_LAKE, - OMSPEC_SHELTER, - OMSPEC_CAVE, - OMSPEC_TOXIC_DUMP, - OMSPEC_LONE_GASSTATION, - OMSPEC_HAZARDOUS_SAR, - NUM_OMSPECS -}; - -// Set min or max to -1 to ignore them - -extern overmap_special overmap_specials[NUM_OMSPECS]; - -// Overmap "Zones" -// Areas which have special post-generation processing attached to them - -enum overmap_zone -{ - OMZONE_NULL = 0, - OMZONE_CITY, // Basic city; place corpses - OMZONE_BOMBED, // Terrain is heavily destroyed - OMZONE_IRRADIATED, // Lots of radioactivity TODO - OMZONE_CORRUPTED, // Fabric of space is weak TODO - OMZONE_OVERGROWN, // Lots of plants, etc. TODO - OMZONE_FUNGAL, // Overgrown with fungus TODO - OMZONE_MILITARIZED, // _Was_ occupied by the military TODO - OMZONE_FLOODED, // Flooded out TODO - OMZONE_TRAPPED, // Heavily booby-trapped TODO - OMZONE_MUTATED, // Home of mutation experiments - mutagen & monsters TODO - OMZONE_FORTIFIED, // Boarded up windows &c TODO - OMZONE_BOTS, // Home of the bots TODO - OMZONE_MAX -}; - -#endif diff --git a/overmap.cpp b/overmap.cpp deleted file mode 100644 index 7e63f714bc675..0000000000000 --- a/overmap.cpp +++ /dev/null @@ -1,3635 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "overmap.h" -#include "rng.h" -#include "line.h" -#include "settlement.h" -#include "game.h" -#include "npc.h" -#include "keypress.h" -#include -#include -#include "debug.h" -#include "cursesdef.h" -#include "options.h" -#include "catacharset.h" -#include "overmapbuffer.h" -#include "action.h" -#include "input.h" -#include - -#ifdef _MSC_VER -// MSVC doesn't have c99-compatible "snprintf", so do what picojson does and use _snprintf_s instead -#define snprintf _snprintf_s -#endif - -#define STREETCHANCE 2 -#define NUM_FOREST 250 -#define TOP_HIWAY_DIST 999 -#define MIN_ANT_SIZE 8 -#define MAX_ANT_SIZE 20 -#define MIN_GOO_SIZE 1 -#define MAX_GOO_SIZE 2 -#define MIN_RIFT_SIZE 6 -#define MAX_RIFT_SIZE 16 -#define SETTLE_DICE 2 -#define SETTLE_SIDES 2 -#define HIVECHANCE 180 //Chance that any given forest will be a hive -#define SWAMPINESS 4 //Affects the size of a swamp -#define SWAMPCHANCE 8500 // Chance that a swamp will spawn instead of forest - -map_extras no_extras(0); -map_extras road_extras( -// %%% HEL MIL SCI STA DRG SUP PRT MIN CRT FUM 1WY ART - 50, 40, 50,120,200, 30, 10, 5, 80, 10, 8, 2, 3); -map_extras field_extras( - 60, 40, 15, 40, 80, 10, 10, 3, 50, 10, 8, 1, 3); -map_extras subway_extras( -// %%% HEL MIL SCI STA DRG SUP PRT MIN CRT FUM 1WY ART - 75, 0, 5, 12, 5, 5, 0, 7, 0, 0, 20, 1, 3); -map_extras build_extras( - 90, 0, 5, 12, 0, 10, 0, 5, 5, 60, 8, 1, 3); - -//see omdata.h -std::vector oterlist; - -overmap_special overmap_specials[NUM_OMSPECS] = { - -// Terrain MIN MAX DISTANCE -{ot_crater, 0, 10, 0, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::land, mfb(OMS_FLAG_BLOB) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_hive, 0, 50, 10, -1, "GROUP_BEE", 20, 60, 2, 4, - &omspec_place::forest, mfb(OMS_FLAG_3X3)}, - -{ot_house_north, 0,100, 0, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_ROTATE_ROAD) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_s_gas_north, 0,100, 0, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_ROTATE_ROAD) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_cabin, 0, 30, 20, -1, "GROUP_NULL", 0, 0, 0, 0, // Woods cabin - &omspec_place::forest, mfb(OMS_FLAG_CLASSIC)}, - -{ot_cabin_strange, 1, 1, 20, -1, "GROUP_NULL", 0, 0, 0, 0, // Hidden cabin - &omspec_place::forest, mfb(OMS_FLAG_CLASSIC)}, - - {ot_lmoe, 0, 3, 20, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_CLASSIC)}, - - {ot_farm, 0, 20, 20, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_3X3_SECOND) |mfb(OMS_FLAG_DIRT_LOT) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_temple_stairs, 0, 3, 20, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::forest, 0}, - -{ot_lab_stairs, 0, 30, 8, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, - - {ot_ice_lab_stairs, 0, 30, 8, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, - -{ot_fema_entrance, 2, 5, 8, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, - -// Terrain MIN MAX DISTANCE -{ot_bunker, 2, 10, 4, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, - -{ot_outpost, 0, 10, 4, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, 0}, - -{ot_silo, 0, 1, 30, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, - -{ot_radio_tower, 1, 5, 0, 20, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_CLASSIC)}, - -{ot_mansion_entrance, 0, 8, 0, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_mansion_entrance, 0, 4, 10, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_megastore_entrance, 0, 5, 0, 10, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_hospital_entrance, 1, 5, 3, 15, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_public_works_entrance, 1, 3, 2, 10, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, - -{ot_apartments_con_tower_1_entrance, 1, 5, -1, 2, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, - -{ot_apartments_mod_tower_1_entrance, 1, 4, -1, 2, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, - -{ot_office_tower_1_entrance, 1, 5, -1, 4, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, - -{ot_cathedral_1_entrance, 1, 2, -1, 2, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, - -{ot_school_2, 1, 3, 1, 5, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_3X3_FIXED)}, - -{ot_prison_2, 1, 1, 3, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::land, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_3X3_FIXED)}, - -{ot_hotel_tower_1_2, 1, 4, -1, 4, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_3X3_FIXED)}, - -{ot_sewage_treatment, 1, 5, 10, 20, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_PARKING_LOT) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_mine_entrance, 0, 5, 15, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_PARKING_LOT)}, - -// Terrain MIN MAX DISTANCE -{ot_anthill, 0, 30, 10, -1, "GROUP_ANT", 1000, 2000, 10, 30, - &omspec_place::wilderness, 0}, - -{ot_spider_pit, 0,500, 0, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::forest, 0}, - -{ot_slimepit_down, 0, 4, 0, -1, "GROUP_GOO", 100, 200, 2, 10, - &omspec_place::land, 0}, - -{ot_fungal_bloom, 0, 3, 5, -1, "GROUP_FUNGI", 600, 1200, 30, 50, - &omspec_place::wilderness, 0}, - -{ot_triffid_grove, 0, 4, 0, -1, "GROUP_TRIFFID", 800, 1300, 12, 20, - &omspec_place::forest, 0}, - -{ot_river_center, 0, 10, 10, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::always, mfb(OMS_FLAG_BLOB) | mfb(OMS_FLAG_CLASSIC)}, - -// Terrain MIN MAX DISTANCE -{ot_shelter, 5, 10, 5, 10, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC)}, - -{ot_cave, 0, 30, 0, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, 0}, - -{ot_toxic_dump, 0, 5, 15, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_CLASSIC)}, - -{ot_s_gas_north, 10, 500, 10, 200, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::by_highway, mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_ROTATE_ROAD)}, - -{ot_haz_sar_entrance, 1, 2, 15, -1, "GROUP_NULL", 0, 0, 0, 0, - &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)} -}; - - -void settlement_building(settlement &set, int x, int y); - -double dist(int x1, int y1, int x2, int y2) -{ - return sqrt(double((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); -} - -bool is_river(oter_id ter) -{ - return (ter == ot_null || (ter >= ot_bridge_ns && ter <= ot_river_nw)); -} - -bool is_building(oter_id ter) -{ - return (ter == ot_null || (ter >= ot_house_north && ter <= ot_basement) || ter >= ot_ants_ns); -} - -bool is_ground(oter_id ter) -{ - return (ter <= ot_road_nesw_manhole); -} - -bool is_wall_material(oter_id ter) -{ - return (is_ground(ter) || (ter >= ot_house_north && ter <= ot_nuke_plant)); -} - -// Likelihood to pick a specific overmap terrain. -struct oter_weight { - oter_id ot; - int weight; -}; - -// Local class for picking overmap terrain from a weighted list. -struct oter_weight_list { - oter_weight_list() : total_weight(0) { }; - - void add_item(oter_id id, int weight) { - oter_weight new_weight = { id, weight }; - items.push_back(new_weight); - total_weight += weight; - } - - oter_id pick() { - int picked = rng(0, total_weight); - int accumulated_weight = 0; - - int i; - for(i=0; i= picked) { - break; - } - } - - return items[i].ot; - } - -private: - int total_weight; - std::vector items; -}; - -oter_id shop(int dir) -{ -// TODO: adjust weights based on area, maybe using JSON -// (implies we have area types first) - oter_weight_list weightlist; - weightlist.add_item(ot_s_gas_north, 5); - weightlist.add_item(ot_s_pharm_north, 3); - weightlist.add_item(ot_s_grocery_north, 15); - weightlist.add_item(ot_s_hardware_north, 5); - weightlist.add_item(ot_s_sports_north, 5); - weightlist.add_item(ot_s_liquor_north, 5); - weightlist.add_item(ot_s_gun_north, 5); - weightlist.add_item(ot_s_clothes_north, 5); - weightlist.add_item(ot_s_library_north, 4); - weightlist.add_item(ot_s_restaurant_north, 5); - weightlist.add_item(ot_sub_station_north, 5); - weightlist.add_item(ot_bank_north, 3); - weightlist.add_item(ot_bar_north, 5); - weightlist.add_item(ot_s_electronics_north, 5); - weightlist.add_item(ot_pawn_north, 3); - weightlist.add_item(ot_mil_surplus_north, 2); - weightlist.add_item(ot_s_garage_north, 5); - weightlist.add_item(ot_station_radio_north, 5); - weightlist.add_item(ot_office_doctor_north, 2); - weightlist.add_item(ot_s_restaurant_fast_north, 3); - weightlist.add_item(ot_s_restaurant_coffee_north, 3); - weightlist.add_item(ot_church_north, 2); - weightlist.add_item(ot_office_cubical_north, 2); - weightlist.add_item(ot_furniture_north, 2); - weightlist.add_item(ot_abstorefront_north, 2); - weightlist.add_item(ot_police_north, 1); - weightlist.add_item(ot_s_lot, 4); - - oter_id ret = weightlist.pick(); - if (ret != ot_s_lot) { //then we need to rotate the shop - if (dir < 0) dir += 4; - switch (dir) { - case 0: - break; - case 1: - ret = oter_id(ret + 1); - break; - case 2: - ret = oter_id(ret + 2); - break; - case 3: - ret = oter_id(ret + 3); - break; - default: - debugmsg("Bad rotation of shop."); - return ot_null; - } - } - return ret; -} - -oter_id house(int dir) -{ - bool base = one_in(2); - if (dir < 0) dir += 4; - switch (dir) { - case 0: return base ? ot_house_base_north : ot_house_north; - case 1: return base ? ot_house_base_east : ot_house_east; - case 2: return base ? ot_house_base_south : ot_house_south; - case 3: return base ? ot_house_base_west : ot_house_west; - default: debugmsg("Bad rotation of house."); return ot_null; - } -} - -void game::init_overmap() -{ - oter_t tmp_oterlist[num_ter_types] = { - {"nothing", '%', c_white, 0, no_extras, false, false, 0}, - {_("crater"), 'O', c_red, 2, field_extras, false, false, 0}, - {_("field"), '.', c_brown, 2, field_extras, false, false, 0}, - {_("forest"), 'F', c_green, 3, field_extras, false, false, 0}, - {_("forest"), 'F', c_green, 4, field_extras, false, false, 0}, - {_("swamp"), 'F', c_cyan, 4, field_extras, false, false, 0}, - {_("highway"), 'H', c_dkgray, 2, road_extras, false, false, 0}, - {_("highway"), '=', c_dkgray, 2, road_extras, false, false, 0}, - {"BUG (omdata.h:oterlist)", '%', c_magenta, 0, no_extras, false, false, 0}, - {_("road"), LINE_XOXO, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_OXOX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_XXOO, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_OXXO, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_OOXX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_XOOX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_XXXO, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_XXOX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_XOXX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_OXXX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road"), LINE_XXXX, c_dkgray, 2, road_extras, false, false, 0}, - {_("road, manhole"), LINE_XXXX, c_yellow, 2, road_extras, true, false, 0}, - {_("bridge"), '|', c_dkgray, 2, no_extras, false, false, 0}, - {_("bridge"), '-', c_dkgray, 2, no_extras, false, false, 0}, - {_("river"), 'R', c_blue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("river bank"), 'R', c_ltblue, 1, no_extras, false, false, 0}, - {_("house"), '^', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), '>', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), 'v', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), '<', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), '^', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), '>', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), 'v', c_ltgreen, 5, build_extras, false, false, 2}, - {_("house"), '<', c_ltgreen, 5, build_extras, false, false, 2}, - {_("parking lot"), 'O', c_dkgray, 1, build_extras, false, false, 2}, - {_("park"), 'O', c_green, 2, build_extras, false, false, 2}, - {_("pool"), 'O', c_ltblue, 2, no_extras, false, false, 2}, - {_("gas station"), '^', c_ltblue, 5, build_extras, false, false, 2}, - {_("gas station"), '>', c_ltblue, 5, build_extras, false, false, 2}, - {_("gas station"), 'v', c_ltblue, 5, build_extras, false, false, 2}, - {_("gas station"), '<', c_ltblue, 5, build_extras, false, false, 2}, - {_("pharmacy"), '^', c_ltred, 5, build_extras, false, false, 2}, - {_("pharmacy"), '>', c_ltred, 5, build_extras, false, false, 2}, - {_("pharmacy"), 'v', c_ltred, 5, build_extras, false, false, 2}, - {_("pharmacy"), '<', c_ltred, 5, build_extras, false, false, 2}, - {_("doctor's office"), '^', i_ltred, 5, build_extras, false, false, 2}, - {_("doctor's office"), '>', i_ltred, 5, build_extras, false, false, 2}, - {_("doctor's office"), 'v', i_ltred, 5, build_extras, false, false, 2}, - {_("doctor's office"), '<', i_ltred, 5, build_extras, false, false, 2}, - {_("office"), '^', c_ltgray, 5, build_extras, false, false, 2}, - {_("office"), '>', c_ltgray, 5, build_extras, false, false, 2}, - {_("office"), 'v', c_ltgray, 5, build_extras, false, false, 2}, - {_("office"), '<', c_ltgray, 5, build_extras, false, false, 2}, - {_("apartment tower"), 'A', c_ltgreen, 5, no_extras, false, false, 2}, - {_("apartment tower"), 'A', c_ltgreen, 5, no_extras, false, false, 2}, - {_("apartment tower"), 'A', c_ltgreen, 5, no_extras, false, false, 2}, - {_("apartment tower"), 'A', c_ltgreen, 5, no_extras, false, false, 2}, - {_("office tower"), 'T', i_ltgray, 5, no_extras, false, false, 2}, - {_("office tower"), 't', i_ltgray, 5, no_extras, false, false, 2}, - {_("tower parking"), 'p', i_ltgray, 5, no_extras, false, false, 2}, - {_("tower parking"), 'p', i_ltgray, 5, no_extras, false, false, 2}, - {_("church"), 'C', c_ltred, 5, build_extras, false, false, 2}, - {_("church"), 'C', c_ltred, 5, build_extras, false, false, 2}, - {_("church"), 'C', c_ltred, 5, build_extras, false, false, 2}, - {_("church"), 'C', c_ltred, 5, build_extras, false, false, 2}, - {_("cathedral"), 'C', i_ltred, 5, no_extras, false, false, 2}, - {_("cathedral"), 'C', i_ltred, 5, no_extras, false, false, 2}, - {_("cathedral basement"), 'C', i_ltred, 5, no_extras, false, false, 2}, - {_("cathedral basement"), 'C', i_ltred, 5, no_extras, false, false, 2}, - {_("grocery store"), '^', c_green, 5, build_extras, false, false, 2}, - {_("grocery store"), '>', c_green, 5, build_extras, false, false, 2}, - {_("grocery store"), 'v', c_green, 5, build_extras, false, false, 2}, - {_("grocery store"), '<', c_green, 5, build_extras, false, false, 2}, - {_("hardware store"), '^', c_cyan, 5, build_extras, false, false, 2}, - {_("hardware store"), '>', c_cyan, 5, build_extras, false, false, 2}, - {_("hardware store"), 'v', c_cyan, 5, build_extras, false, false, 2}, - {_("hardware store"), '<', c_cyan, 5, build_extras, false, false, 2}, - {_("electronics store"), '^', c_yellow, 5, build_extras, false, false, 2}, - {_("electronics store"), '>', c_yellow, 5, build_extras, false, false, 2}, - {_("electronics store"), 'v', c_yellow, 5, build_extras, false, false, 2}, - {_("electronics store"), '<', c_yellow, 5, build_extras, false, false, 2}, - {_("sporting goods store"),'^', c_ltcyan, 5, build_extras, false, false, 2}, - {_("sporting goods store"),'>', c_ltcyan, 5, build_extras, false, false, 2}, - {_("sporting goods store"),'v', c_ltcyan, 5, build_extras, false, false, 2}, - {_("sporting goods store"),'<', c_ltcyan, 5, build_extras, false, false, 2}, - {_("liquor store"), '^', c_magenta, 5, build_extras, false, false, 2}, - {_("liquor store"), '>', c_magenta, 5, build_extras, false, false, 2}, - {_("liquor store"), 'v', c_magenta, 5, build_extras, false, false, 2}, - {_("liquor store"), '<', c_magenta, 5, build_extras, false, false, 2}, - {_("gun store"), '^', c_red, 5, build_extras, false, false, 2}, - {_("gun store"), '>', c_red, 5, build_extras, false, false, 2}, - {_("gun store"), 'v', c_red, 5, build_extras, false, false, 2}, - {_("gun store"), '<', c_red, 5, build_extras, false, false, 2}, - {_("clothing store"), '^', c_blue, 5, build_extras, false, false, 2}, - {_("clothing store"), '>', c_blue, 5, build_extras, false, false, 2}, - {_("clothing store"), 'v', c_blue, 5, build_extras, false, false, 2}, - {_("clothing store"), '<', c_blue, 5, build_extras, false, false, 2}, - {_("library"), '^', c_brown, 5, build_extras, false, false, 2}, - {_("library"), '>', c_brown, 5, build_extras, false, false, 2}, - {_("library"), 'v', c_brown, 5, build_extras, false, false, 2}, - {_("library"), '<', c_brown, 5, build_extras, false, false, 2}, - {_("restaurant"), '^', c_pink, 5, build_extras, false, false, 2}, - {_("restaurant"), '>', c_pink, 5, build_extras, false, false, 2}, - {_("restaurant"), 'v', c_pink, 5, build_extras, false, false, 2}, - {_("restaurant"), '<', c_pink, 5, build_extras, false, false, 2}, - {_("fast food restaurant"), '^', c_pink, 5, build_extras, false, false, 2}, - {_("fast food restaurant"), '>', c_pink, 5, build_extras, false, false, 2}, - {_("fast food restaurant"), 'v', c_pink, 5, build_extras, false, false, 2}, - {_("fast food restaurant"), '<', c_pink, 5, build_extras, false, false, 2}, - {_("coffee shop"), '^', c_pink, 5, build_extras, false, false, 2}, - {_("coffee shop"), '>', c_pink, 5, build_extras, false, false, 2}, - {_("coffee shop"), 'v', c_pink, 5, build_extras, false, false, 2}, - {_("coffee shop"), '<', c_pink, 5, build_extras, false, false, 2}, - {_("subway station"), 'S', c_yellow, 5, build_extras, true, false, 2}, - {_("subway station"), 'S', c_yellow, 5, build_extras, true, false, 2}, - {_("subway station"), 'S', c_yellow, 5, build_extras, true, false, 2}, - {_("subway station"), 'S', c_yellow, 5, build_extras, true, false, 2}, - {_("garage"), 'O', c_white, 5, build_extras, false, false, 2}, - {_("garage"), 'O', c_white, 5, build_extras, false, false, 2}, - {_("garage"), 'O', c_white, 5, build_extras, false, false, 2}, - {_("garage"), 'O', c_white, 5, build_extras, false, false, 2}, - {_("forest"), 'F', c_green, 5, field_extras, false, false, 0}, - {_("cabin basement"), 'C', i_green, 5, build_extras, false, false, 0}, - {_("cabin"), 'C', i_green, 5, build_extras, false, false, 2}, - {_("dirt lot"), 'O', c_brown, 1, field_extras, false, false, 0}, - {_("farm"), '^', i_brown, 5, build_extras, false, false, 2}, - {_("farm field"), '#', i_brown, 5, field_extras, false, false, 2}, - {_("police station"), '^', h_yellow, 5, build_extras, false, false, 2}, - {_("police station"), '>', h_yellow, 5, build_extras, false, false, 2}, - {_("police station"), 'v', h_yellow, 5, build_extras, false, false, 2}, - {_("police station"), '<', h_yellow, 5, build_extras, false, false, 2}, - {_("bank"), '$', c_ltgray, 5, no_extras, false, false, 2}, - {_("bank"), '$', c_ltgray, 5, no_extras, false, false, 2}, - {_("bank"), '$', c_ltgray, 5, no_extras, false, false, 2}, - {_("bank"), '$', c_ltgray, 5, no_extras, false, false, 2}, - {_("bar"), '^', i_magenta, 5, build_extras, false, false, 2}, - {_("bar"), '>', i_magenta, 5, build_extras, false, false, 2}, - {_("bar"), 'v', i_magenta, 5, build_extras, false, false, 2}, - {_("bar"), '<', i_magenta, 5, build_extras, false, false, 2}, - {_("pawn shop"), '^', c_white, 5, build_extras, false, false, 2}, - {_("pawn shop"), '>', c_white, 5, build_extras, false, false, 2}, - {_("pawn shop"), 'v', c_white, 5, build_extras, false, false, 2}, - {_("pawn shop"), '<', c_white, 5, build_extras, false, false, 2}, - {_("mil. surplus"), '^', i_ltgray, 5, build_extras, false, false, 2}, - {_("mil. surplus"), '>', i_ltgray, 5, build_extras, false, false, 2}, - {_("mil. surplus"), 'v', i_ltgray, 5, build_extras, false, false, 2}, - {_("mil. surplus"), '<', i_ltgray, 5, build_extras, false, false, 2}, - {_("furniture store"), '^', i_brown, 5, build_extras, false, false, 2}, - {_("furniture store"), '>', i_brown, 5, build_extras, false, false, 2}, - {_("furniture store"), 'v', i_brown, 5, build_extras, false, false, 2}, - {_("furniture store"), '<', i_brown, 5, build_extras, false, false, 2}, - {_("abandoned storefront"), '^', h_dkgray, 5, build_extras, false, false, 2}, - {_("abandoned storefront"), '>', h_dkgray, 5, build_extras, false, false, 2}, - {_("abandoned storefront"), 'v', h_dkgray, 5, build_extras, false, false, 2}, - {_("abandoned storefront"), '<', h_dkgray, 5, build_extras, false, false, 2}, - {_("megastore"), '+', c_ltblue, 5, build_extras, false, false, 2}, - {_("megastore"), 'M', c_blue, 5, build_extras, false, false, 2}, - {_("hospital"), 'H', c_ltred, 5, build_extras, false, false, 2}, - {_("hospital"), 'H', c_red, 5, build_extras, false, false, 2}, - {_("public works"), 'W', c_ltgray, 5, no_extras, false, false, 2}, - {_("public works"), 'w', c_ltgray, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 'S', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("regional school"), 's', c_ltblue, 5, no_extras, false, false, 2}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'P', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("prison"), 'p', i_ltblue, 5, no_extras, false, false, 0}, - {_("hotel parking"), 'h', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel parking"), 'h', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel parking"), 'h', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel parking"), 'h', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel entrance"), 'H', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel parking"), 'h', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel tower"), 'H', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel tower"), 'H', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel tower"), 'H', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel basement"), 'B', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel basement"), 'B', c_ltblue, 5, no_extras, false, false, 2}, - {_("hotel basement"), 'B', c_ltblue, 5, no_extras, false, false, 2}, - {_("mansion"), 'M', c_ltgreen, 5, build_extras, false, false, 2}, - {_("mansion"), 'M', c_green, 5, build_extras, false, false, 2}, - {_("fema camp"), '+', c_blue, 5, build_extras, false, false, 0}, - {_("fema camp"), 'F', i_blue, 5, build_extras, false, false, 0}, - {_("radio station"), 'X', i_ltgray, 5, build_extras, false, false, 0}, - {_("radio station"), 'X', i_ltgray, 5, build_extras, false, false, 0}, - {_("radio station"), 'X', i_ltgray, 5, build_extras, false, false, 0}, - {_("radio station"), 'X', i_ltgray, 5, build_extras, false, false, 0}, - {_("evac shelter"), '+', c_white, 2, no_extras, true, false, 0}, - {_("evac shelter"), '+', c_white, 2, no_extras, false, true, 0}, - {_("LMOE shelter"), '+', c_red, 2, no_extras, true, false, 0}, - {_("LMOE shelter"), '+', c_red, 2, no_extras, false, true, 0}, - {_("science lab"), 'L', c_ltblue, 5, no_extras, false, false, 0}, // Regular lab start - {_("science lab"), 'L', c_blue, 5, no_extras, true, false, 0}, - {_("science lab"), 'L', c_ltblue, 5, no_extras, false, false, 0}, - {_("science lab"), 'L', c_cyan, 5, no_extras, false, false, 0}, - {_("science lab"), 'L', c_ltblue, 5, no_extras, false, false, 0}, // Ice lab start - {_("science lab"), 'L', c_blue, 5, no_extras, true, false, 0}, - {_("science lab"), 'L', c_ltblue, 5, no_extras, false, false, 0}, - {_("science lab"), 'L', c_cyan, 5, no_extras, false, false, 0}, - {_("nuclear plant"), 'P', c_ltgreen, 5, no_extras, false, false, 0}, - {_("nuclear plant"), 'P', c_ltgreen, 5, no_extras, false, false, 0}, - {_("military bunker"), 'B', c_dkgray, 2, no_extras, true, true, 0}, - {_("military outpost"), 'M', c_dkgray, 2, build_extras, false, false, 0}, - {_("missile silo"), '0', c_ltgray, 2, no_extras, false, false, 0}, - {_("missile silo"), '0', c_ltgray, 2, no_extras, false, false, 0}, - {_("strange temple"), 'T', c_magenta, 5, no_extras, true, false, 0}, - {_("strange temple"), 'T', c_pink, 5, no_extras, true, false, 0}, - {_("strange temple"), 'T', c_pink, 5, no_extras, false, false, 0}, - {_("strange temple"), 'T', c_yellow, 5, no_extras, false, false, 0}, - {_("sewage treatment"), 'P', c_red, 5, no_extras, true, false, 0}, - {_("sewage treatment"), 'P', c_green, 5, no_extras, false, true, 0}, - {_("sewage treatment"), 'P', c_green, 5, no_extras, false, false, 0}, - {_("mine entrance"), 'M', c_ltgray, 5, no_extras, true, false, 0}, - {_("mine shaft"), 'O', c_dkgray, 5, no_extras, true, true, 0}, - {_("mine"), 'M', c_brown, 2, no_extras, false, false, 0}, - {_("mine"), 'M', c_brown, 2, no_extras, false, false, 0}, - {_("mine"), 'M', c_brown, 2, no_extras, false, false, 0}, - {_("spiral cavern"), '@', c_pink, 2, no_extras, false, false, 0}, - {_("spiral cavern"), '@', c_pink, 2, no_extras, false, false, 0}, - {_("radio tower"), 'X', c_ltgray, 2, no_extras, false, false, 0}, - {_("toxic waste dump"), 'D', c_pink, 2, no_extras, false, false, 0}, - {_("hazardous waste sarcophagus"), 'X', c_ltred, 5, no_extras, false, false, 0}, - {_("hazardous waste sarcophagus"), 'X', c_pink, 5, no_extras, false, false, 0}, - {_("hazardous waste sarcophagus"), 'X', c_pink, 5, no_extras, false, false, 0}, - {_("hazardous waste sarcophagus"), 'X', c_pink, 5, no_extras, false, false, 0}, - {_("cave"), 'C', c_brown, 2, field_extras, false, false, 0}, - {_("rat cave"), 'C', c_dkgray, 2, no_extras, true, false, 0}, - {_("bee hive"), '8', c_yellow, 3, field_extras, false, false, 0}, - {_("fungal bloom"), 'T', c_ltgray, 2, field_extras, false, false, 0}, - {_("forest"), 'F', c_green, 3, field_extras, false, false, 0}, // Spider pit - {_("cavern"), '0', c_ltgray, 5, no_extras, false, false, 0}, // Spider pit - {_("anthill"), '%', c_brown, 2, no_extras, true, false, 0}, - {_("slime pit"), '~', c_ltgreen, 2, no_extras, false, false, 0}, - {_("slime pit"), '~', c_ltgreen, 2, no_extras, true, false, 0}, - {_("triffid grove"), 'T', c_ltred, 5, no_extras, true, false, 0}, - {_("triffid roots"), 'T', c_ltred, 5, no_extras, true, true, 0}, - {_("triffid heart"), 'T', c_red, 5, no_extras, false, true, 0}, - {_("basement"), 'O', c_dkgray, 5, no_extras, false, true, 2}, - {_("cavern"), '0', c_ltgray, 5, no_extras, false, false, 0}, - {_("solid rock"), '%', c_dkgray, 5, no_extras, false, false, 0}, - {_("rift"), '^', c_red, 2, no_extras, false, false, 0}, - {_("hellmouth"), '^', c_ltred, 2, no_extras, true, false, 0}, - {_("subway station"), 'S', c_yellow, 5, subway_extras, false, true, 0}, - {_("subway"), LINE_XOXO, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_OXOX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_XXOO, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_OXXO, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_OOXX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_XOOX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_XXXO, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_XXOX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_XOXX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_OXXX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("subway"), LINE_XXXX, c_dkgray, 5, subway_extras, false, false, 0}, - {_("sewer"), LINE_XOXO, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_OXOX, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_XXOO, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_OXXO, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_OOXX, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_XOOX, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_XXXO, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_XXOX, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_XOXX, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_OXXX, c_green, 5, no_extras, false, false, 0}, - {_("sewer"), LINE_XXXX, c_green, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XOXO, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_OXOX, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XXOO, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_OXXO, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_OOXX, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XOOX, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XXXO, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XXOX, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XOXX, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_OXXX, c_brown, 5, no_extras, false, false, 0}, - {_("ant tunnel"), LINE_XXXX, c_brown, 5, no_extras, false, false, 0}, - {_("ant food storage"), 'O', c_green, 5, no_extras, false, false, 0}, - {_("ant larva chamber"), 'O', c_white, 5, no_extras, false, false, 0}, - {_("ant queen chamber"), 'O', c_red, 5, no_extras, false, false, 0}, - {_("tutorial room"), 'O', c_cyan, 5, no_extras, false, false, 0} - }; - - for(int i=0; iu.name) - , layer(NULL) - , nullret(ot_null) - , nullbool(false) - , nullstr("") -{ - if (name.empty()) { - debugmsg("Attempting to load overmap for unknown player! Saving won't work!"); - } - - if (g->has_gametype()) { - prefix = special_game_name(g->gametype()); - } - - init_layers(); - open(g); -} - -overmap::overmap(overmap const& o) - : zg(o.zg) - , radios(o.radios) - , npcs(o.npcs) - , cities(o.cities) - , roads_out(o.roads_out) - , towns(o.towns) - , loc(o.loc) - , prefix(o.prefix) - , name(o.name) - , layer(NULL) -{ - layer = new map_layer[OVERMAP_LAYERS]; - for(int z = 0; z < OVERMAP_LAYERS; ++z) { - for(int i = 0; i < OMAPX; ++i) { - for(int j = 0; j < OMAPY; ++j) { - layer[z].terrain[i][j] = o.layer[z].terrain[i][j]; - layer[z].visible[i][j] = o.layer[z].visible[i][j]; - } - } - layer[z].notes = o.layer[z].notes; - } -} - -overmap::~overmap() -{ - if (layer) { - delete [] layer; - layer = NULL; - } -} - -overmap& overmap::operator=(overmap const& o) -{ - zg = o.zg; - radios = o.radios; - npcs = o.npcs; - cities = o.cities; - roads_out = o.roads_out; - towns = o.towns; - loc = o.loc; - prefix = o.prefix; - name = o.name; - - if (layer) { - delete [] layer; - layer = NULL; - } - - layer = new map_layer[OVERMAP_LAYERS]; - for(int z = 0; z < OVERMAP_LAYERS; ++z) { - for(int i = 0; i < OMAPX; ++i) { - for(int j = 0; j < OMAPY; ++j) { - layer[z].terrain[i][j] = o.layer[z].terrain[i][j]; - layer[z].visible[i][j] = o.layer[z].visible[i][j]; - } - } - layer[z].notes = o.layer[z].notes; - } - - return *this; -} - -void overmap::init_layers() -{ - layer = new map_layer[OVERMAP_LAYERS]; - for(int z = 0; z < OVERMAP_LAYERS; ++z) { - oter_id default_type = (z < OVERMAP_DEPTH) ? ot_rock : (z == OVERMAP_DEPTH) ? ot_field : ot_null; - for(int i = 0; i < OMAPX; ++i) { - for(int j = 0; j < OMAPY; ++j) { - layer[z].terrain[i][j] = default_type; - layer[z].visible[i][j] = false; - } - } - } -} - -oter_id& overmap::ter(int x, int y, int z) -{ - if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY || z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { - nullret = ot_null; - return nullret; - } - - return layer[z + OVERMAP_DEPTH].terrain[x][y]; -} - -bool& overmap::seen(int x, int y, int z) -{ - if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY || z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { - nullbool = false; - return nullbool; - } - return layer[z + OVERMAP_DEPTH].visible[x][y]; -} - -// this uses om_sub (submap coordinates localized to overmap, -// aka levxy or om_pos * 2) -std::vector overmap::monsters_at(int x, int y, int z) -{ - std::vector ret; - if (x < 0 || x >= OMAPX*2 || y < 0 || y >= OMAPY*2 || z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) - return ret; - for (int i = 0; i < zg.size(); i++) { - if (zg[i].posz != z) { continue; } - if ( - ( zg[i].diffuse == true ? square_dist(x, y, zg[i].posx, zg[i].posy) : trig_dist(x, y, zg[i].posx, zg[i].posy) ) - <= zg[i].radius) { - ret.push_back(&(zg[i])); - } - } - return ret; -} - -// this uses om_pos (overmap tiles, aka levxy / 2) -bool overmap::is_safe(int x, int y, int z) -{ - std::vector mons = monsters_at(x*2, y*2, z); - if (mons.empty()) - return true; - - bool safe = true; - for (int n = 0; n < mons.size() && safe; n++) - safe = mons[n]->is_safe(); - - return safe; -} - -bool overmap::has_note(int const x, int const y, int const z) const -{ - if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { return false; } - - for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { - if (layer[z + OVERMAP_DEPTH].notes[i].x == x && layer[z + OVERMAP_DEPTH].notes[i].y == y) - return true; - } - return false; -} - -std::string const& overmap::note(int const x, int const y, int const z) const -{ - if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { return nullstr; } - - for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { - if (layer[z + OVERMAP_DEPTH].notes[i].x == x && layer[z + OVERMAP_DEPTH].notes[i].y == y) - return layer[z + OVERMAP_DEPTH].notes[i].text; - } - - return nullstr; -} - -void overmap::add_note(int const x, int const y, int const z, std::string const & message) -{ - if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { - debugmsg("Attempting to add not to overmap for blank layer %d", z); - return; - } - - for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { - if (layer[z + OVERMAP_DEPTH].notes[i].x == x && layer[z + OVERMAP_DEPTH].notes[i].y == y) { - if (message.empty()) - layer[z + OVERMAP_DEPTH].notes.erase(layer[z + OVERMAP_DEPTH].notes.begin() + i); - else - layer[z + OVERMAP_DEPTH].notes[i].text = message; - return; - } - } - if (message.length() > 0) - layer[z + OVERMAP_DEPTH].notes.push_back(om_note(x, y, layer[z + OVERMAP_DEPTH].notes.size(), message)); -} - -point overmap::find_note(int const x, int const y, int const z, std::string const& text) const -{ - point ret(-1, -1); - if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { - debugmsg("Attempting to find note on overmap for blank layer %d", z); - return ret; - } - - int closest = 9999; - for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { - if (layer[z + OVERMAP_DEPTH].notes[i].text.find(text) != std::string::npos && - rl_dist(x, y, layer[z + OVERMAP_DEPTH].notes[i].x, layer[z + OVERMAP_DEPTH].notes[i].y) < closest) { - closest = rl_dist(x, y, layer[z + OVERMAP_DEPTH].notes[i].x, layer[z + OVERMAP_DEPTH].notes[i].y); - ret = point(layer[z + OVERMAP_DEPTH].notes[i].x, layer[z + OVERMAP_DEPTH].notes[i].y); - } - } - - return ret; -} - -//This removes a npc from the overmap. The NPC is supposed to be already dead. -//This function also assumes the npc is not in the list of active npcs anymore. -void overmap::remove_npc(int npc_id) -{ - for(int i = 0; i < npcs.size(); i++) - { - if(npcs[i]->getID() == npc_id) - { - //Remove this npc from the list of overmap npcs. - if(!npcs[i]->dead) debugmsg("overmap::remove_npc: NPC (%d) is not dead.",npc_id); - npc * tmp = npcs[i]; - npcs.erase(npcs.begin() + i); - delete tmp; - return; - } - } -} - -point overmap::display_notes(game* g, int const z) const -{ - if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { - debugmsg("overmap::display_notes: Attempting to display notes on overmap for blank layer %d", z); - return point(-1, -1); - } - - std::string title = _("Notes:"); - WINDOW* w_notes = newwin(FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, - (TERMY > FULL_SCREEN_HEIGHT) ? (TERMY-FULL_SCREEN_HEIGHT)/2 : 0, - (TERMX > FULL_SCREEN_WIDTH) ? (TERMX-FULL_SCREEN_WIDTH)/2 : 0); - - wborder(w_notes, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, - LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); - - const int maxitems = 20; // Number of items to show at one time. - char ch = '.'; - int start = 0, cur_it; - mvwprintz(w_notes, 1, 1, c_ltgray, title.c_str()); - do{ - if (ch == '<' && start > 0) { - for (int i = 1; i < FULL_SCREEN_HEIGHT; i++) - mvwprintz(w_notes, i+1, 1, c_black, " "); - start -= maxitems; - if (start < 0) - start = 0; - mvwprintw(w_notes, maxitems + 2, 1, " "); - } - if (ch == '>' && cur_it < layer[z + OVERMAP_DEPTH].notes.size()) { - start = cur_it; - mvwprintw(w_notes, maxitems + 2, 13, " "); - for (int i = 1; i < FULL_SCREEN_HEIGHT; i++) - mvwprintz(w_notes, i, 0, c_black, " "); - } - int cur_line = 3; - int last_line = -1; - char cur_let = 'a'; - for (cur_it = start; cur_it < start + maxitems && cur_line < 23; cur_it++) { - if (cur_it < layer[z + OVERMAP_DEPTH].notes.size()) { - mvwputch (w_notes, cur_line, 1, c_white, cur_let++); - mvwprintz(w_notes, cur_line, 3, c_ltgray, "- %s", layer[z + OVERMAP_DEPTH].notes[cur_it].text.c_str()); - } else{ - last_line = cur_line - 2; - break; - } - cur_line++; - } - - if(last_line == -1) - last_line = 23; - if (start > 0) - mvwprintw(w_notes, maxitems + 4, 1, _("< Go Back")); - if (cur_it < layer[z + OVERMAP_DEPTH].notes.size()) - mvwprintw(w_notes, maxitems + 4, 12, _("> More notes")); - if(ch >= 'a' && ch <= 't'){ - int chosen_line = (int)(ch % (int)'a'); - if(chosen_line < last_line) - return point(layer[z + OVERMAP_DEPTH].notes[start + chosen_line].x, layer[z + OVERMAP_DEPTH].notes[start + chosen_line].y); - } - mvwprintz(w_notes, 1, 40, c_white, _("Press letter to center on note")); - mvwprintz(w_notes, FULL_SCREEN_HEIGHT-2, 40, c_white, _("Spacebar - Return to map ")); - wrefresh(w_notes); - ch = getch(); - } while(ch != ' ' && ch != '\n' && ch != KEY_ESCAPE); - delwin(w_notes); - return point(-1,-1); -} - -bool overmap::has_npc(game *g, int const x, int const y, int const z) const -{ - //Check if the target overmap square has an npc in it. - for (int n = 0; n < npcs.size(); n++) { - if(npcs[n]->omz == z && !npcs[n]->marked_for_death) - { - if (npcs[n]->is_active(g)) - { //Active npcs have different coords. Because Cata hates you! - if ((g->levx + (npcs[n]->posx / SEEX))/2 == x && - (g->levy + (npcs[n]->posy / SEEY))/2 == y) - return true; - } else if ((npcs[n]->mapx)/2 == x && (npcs[n]->mapy)/2== y) - return true; - } - } - return false; -} - -// int cursx = (g->levx + int(MAPSIZE / 2)) / 2, -// cursy = (g->levy + int(MAPSIZE / 2)) / 2; - -//Helper function for the overmap::draw function. -void overmap::print_npcs(game *g, WINDOW *w, int const x, int const y, int const z) -{ - int i = 0, maxnamelength = 0; - //Check the max namelength of the npcs in the target - for (int n = 0; n < npcs.size(); n++) - { - if(npcs[n]->omz == z && !npcs[n]->marked_for_death) - { - if (npcs[n]->is_active(g)) - { //Active npcs have different coords. Because Cata hates you! - if ((g->levx + (npcs[n]->posx / SEEX))/2 == x && - (g->levy + (npcs[n]->posy / SEEY))/2 == y) - { - if (npcs[n]->name.length() > maxnamelength) - maxnamelength = npcs[n]->name.length(); - } - } else if ((npcs[n]->mapx)/2 == x && (npcs[n]->mapy)/2 == y) { - if (npcs[n]->name.length() > maxnamelength) - maxnamelength = npcs[n]->name.length(); - } - } - } - //Check if the target has an npc in it. - for (int n = 0; n < npcs.size(); n++) - { - if (npcs[n]->omz == z && !npcs[n]->marked_for_death) - { - if (npcs[n]->is_active(g)) - { - if ((g->levx + (npcs[n]->posx / SEEX))/2 == x && - (g->levy + (npcs[n]->posy / SEEY))/2 == y) - { - mvwprintz(w, i, 0, c_yellow, npcs[n]->name.c_str()); - for (int j = npcs[n]->name.length(); j < maxnamelength; j++) - mvwputch(w, i, j, c_black, LINE_XXXX); - i++; - } - } else if ((npcs[n]->mapx)/2 == x && (npcs[n]->mapy)/2 == y) - { - mvwprintz(w, i, 0, c_yellow, npcs[n]->name.c_str()); - for (int j = npcs[n]->name.length(); j < maxnamelength; j++) - mvwputch(w, i, j, c_black, LINE_XXXX); - i++; - } - } - } - for (int j = 0; j < i; j++) - mvwputch(w, j, maxnamelength, c_white, LINE_XOXO); - for (int j = 0; j < maxnamelength; j++) - mvwputch(w, i, j, c_white, LINE_OXOX); - mvwputch(w, i, maxnamelength, c_white, LINE_XOOX); -} - -void overmap::generate(game *g, overmap* north, overmap* east, overmap* south, - overmap* west) -{ - erase(); - clear(); - move(0, 0); - std::vector road_points; // cities and roads_out together - std::vector river_start;// West/North endpoints of rivers - std::vector river_end; // East/South endpoints of rivers - -// Determine points where rivers & roads should connect w/ adjacent maps - if (north != NULL) { - for (int i = 2; i < OMAPX - 2; i++) { - if (is_river(north->ter(i,OMAPY-1, 0))) - ter(i, 0, 0) = ot_river_center; - if (north->ter(i, OMAPY - 1, 0) == ot_river_center && - north->ter(i - 1, OMAPY - 1, 0) == ot_river_center && - north->ter(i + 1, OMAPY - 1, 0) == ot_river_center) { - if (river_start.size() == 0 || - river_start[river_start.size() - 1].x < i - 6) - river_start.push_back(point(i, 0)); - } - } - for (int i = 0; i < north->roads_out.size(); i++) { - if (north->roads_out[i].y == OMAPY - 1) - roads_out.push_back(city(north->roads_out[i].x, 0, 0)); - } - } - int rivers_from_north = river_start.size(); - if (west != NULL) { - for (int i = 2; i < OMAPY - 2; i++) { - if (is_river(west->ter(OMAPX - 1, i, 0))) - ter(0, i, 0) = ot_river_center; - if (west->ter(OMAPX - 1, i, 0) == ot_river_center && - west->ter(OMAPX - 1, i - 1, 0) == ot_river_center && - west->ter(OMAPX - 1, i + 1, 0) == ot_river_center) { - if (river_start.size() == rivers_from_north || - river_start[river_start.size() - 1].y < i - 6) - river_start.push_back(point(0, i)); - } - } - for (int i = 0; i < west->roads_out.size(); i++) { - if (west->roads_out[i].x == OMAPX - 1) - roads_out.push_back(city(0, west->roads_out[i].y, 0)); - } - } - if (south != NULL) { - for (int i = 2; i < OMAPX - 2; i++) { - if (is_river(south->ter(i, 0, 0))) - ter(i, OMAPY - 1, 0) = ot_river_center; - if (south->ter(i, 0, 0) == ot_river_center && - south->ter(i - 1, 0, 0) == ot_river_center && - south->ter(i + 1, 0, 0) == ot_river_center) { - if (river_end.size() == 0 || - river_end[river_end.size() - 1].x < i - 6) - river_end.push_back(point(i, OMAPY - 1)); - } - if (south->ter(i, 0, 0) == ot_road_nesw) - roads_out.push_back(city(i, OMAPY - 1, 0)); - } - for (int i = 0; i < south->roads_out.size(); i++) { - if (south->roads_out[i].y == 0) - roads_out.push_back(city(south->roads_out[i].x, OMAPY - 1, 0)); - } - } - int rivers_to_south = river_end.size(); - if (east != NULL) { - for (int i = 2; i < OMAPY - 2; i++) { - if (is_river(east->ter(0, i, 0))) - ter(OMAPX - 1, i, 0) = ot_river_center; - if (east->ter(0, i, 0) == ot_river_center && - east->ter(0, i - 1, 0) == ot_river_center && - east->ter(0, i + 1, 0) == ot_river_center) { - if (river_end.size() == rivers_to_south || - river_end[river_end.size() - 1].y < i - 6) - river_end.push_back(point(OMAPX - 1, i)); - } - if (east->ter(0, i, 0) == ot_road_nesw) - roads_out.push_back(city(OMAPX - 1, i, 0)); - } - for (int i = 0; i < east->roads_out.size(); i++) { - if (east->roads_out[i].x == 0) - roads_out.push_back(city(OMAPX - 1, east->roads_out[i].y, 0)); - } - } -// Even up the start and end points of rivers. (difference of 1 is acceptable) -// Also ensure there's at least one of each. - std::vector new_rivers; - if (north == NULL || west == NULL) { - while (river_start.empty() || river_start.size() + 1 < river_end.size()) { - new_rivers.clear(); - if (north == NULL) - new_rivers.push_back( point(rng(10, OMAPX - 11), 0) ); - if (west == NULL) - new_rivers.push_back( point(0, rng(10, OMAPY - 11)) ); - river_start.push_back( new_rivers[rng(0, new_rivers.size() - 1)] ); - } - } - if (south == NULL || east == NULL) { - while (river_end.empty() || river_end.size() + 1 < river_start.size()) { - new_rivers.clear(); - if (south == NULL) - new_rivers.push_back( point(rng(10, OMAPX - 11), OMAPY - 1) ); - if (east == NULL) - new_rivers.push_back( point(OMAPX - 1, rng(10, OMAPY - 11)) ); - river_end.push_back( new_rivers[rng(0, new_rivers.size() - 1)] ); - } - } -// Now actually place those rivers. - if (river_start.size() > river_end.size() && river_end.size() > 0) { - std::vector river_end_copy = river_end; - while (!river_start.empty()) { - int index = rng(0, river_start.size() - 1); - if (!river_end.empty()) { - place_river(river_start[index], river_end[0]); - river_end.erase(river_end.begin()); - } else - place_river(river_start[index], - river_end_copy[rng(0, river_end_copy.size() - 1)]); - river_start.erase(river_start.begin() + index); - } - } else if (river_end.size() > river_start.size() && river_start.size() > 0) { - std::vector river_start_copy = river_start; - while (!river_end.empty()) { - int index = rng(0, river_end.size() - 1); - if (!river_start.empty()) { - place_river(river_start[0], river_end[index]); - river_start.erase(river_start.begin()); - } else - place_river(river_start_copy[rng(0, river_start_copy.size() - 1)], - river_end[index]); - river_end.erase(river_end.begin() + index); - } - } else if (river_end.size() > 0) { - if (river_start.size() != river_end.size()) - river_start.push_back( point(rng(OMAPX * .25, OMAPX * .75), - rng(OMAPY * .25, OMAPY * .75))); - for (int i = 0; i < river_start.size(); i++) - place_river(river_start[i], river_end[i]); - } - -// Cities, forests, and settlements come next. -// These're agnostic of adjacent maps, so it's very simple. - place_cities(); - place_forest(); - -// Ideally we should have at least two exit points for roads, on different sides - if (roads_out.size() < 2) { - std::vector viable_roads; - int tmp; -// Populate viable_roads with one point for each neighborless side. -// Make sure these points don't conflict with rivers. -// TODO: In theory this is a potential infinte loop... - if (north == NULL) { - do - tmp = rng(10, OMAPX - 11); - while (is_river(ter(tmp, 0, 0)) || is_river(ter(tmp - 1, 0, 0)) || - is_river(ter(tmp + 1, 0, 0)) ); - viable_roads.push_back(city(tmp, 0, 0)); - } - if (east == NULL) { - do - tmp = rng(10, OMAPY - 11); - while (is_river(ter(OMAPX - 1, tmp, 0)) || is_river(ter(OMAPX - 1, tmp - 1, 0))|| - is_river(ter(OMAPX - 1, tmp + 1, 0))); - viable_roads.push_back(city(OMAPX - 1, tmp, 0)); - } - if (south == NULL) { - do - tmp = rng(10, OMAPX - 11); - while (is_river(ter(tmp, OMAPY - 1, 0)) || is_river(ter(tmp - 1, OMAPY - 1, 0))|| - is_river(ter(tmp + 1, OMAPY - 1, 0))); - viable_roads.push_back(city(tmp, OMAPY - 1, 0)); - } - if (west == NULL) { - do - tmp = rng(10, OMAPY - 11); - while (is_river(ter(0, tmp, 0)) || is_river(ter(0, tmp - 1, 0)) || - is_river(ter(0, tmp + 1, 0))); - viable_roads.push_back(city(0, tmp, 0)); - } - while (roads_out.size() < 2 && !viable_roads.empty()) { - tmp = rng(0, viable_roads.size() - 1); - roads_out.push_back(viable_roads[tmp]); - viable_roads.erase(viable_roads.begin() + tmp); - } - } -// Compile our master list of roads; it's less messy if roads_out is first - for (int i = 0; i < roads_out.size(); i++) - road_points.push_back(roads_out[i]); - for (int i = 0; i < cities.size(); i++) - road_points.push_back(cities[i]); -// And finally connect them via "highways" - place_hiways(road_points, 0, ot_road_null); -// Place specials - place_specials(); -// Clean up our roads and rivers - polish(0); - - // TODO: there is no reason we can't generate the sublevels in one pass - // for that matter there is no reason we can't as we add the entrance ways either - - // Always need at least one sublevel, but how many more - int z = -1; - bool requires_sub = false; - do { - requires_sub = generate_sub(z); - } while(requires_sub && (--z >= -OVERMAP_DEPTH)); - -// Place the monsters, now that the terrain is laid out - place_mongroups(); - place_radios(); -} - -bool overmap::generate_sub(int const z) -{ - bool requires_sub = false; - std::vector subway_points; - std::vector sewer_points; - std::vector ant_points; - std::vector goo_points; - std::vector lab_points; - std::vector ice_lab_points; - std::vector shaft_points; - std::vector mine_points; - std::vector bunker_points; - std::vector shelter_points; - std::vector lmoe_points; - std::vector cabin_strange_points; - std::vector triffid_points; - std::vector temple_points; - std::vector office_entrance_points; - std::vector office_points; - std::vector prison_points; - std::vector prison_entrance_points; - std::vector haz_sar_entrance_points; - std::vector haz_sar_points; - std::vector cathedral_entrance_points; - std::vector cathedral_points; - std::vector hotel_tower_1_points; - std::vector hotel_tower_2_points; - std::vector hotel_tower_3_points; - - for (int i = 0; i < OMAPX; i++) { - for (int j = 0; j < OMAPY; j++) { - if (ter(i, j, z + 1) >= ot_house_base_north && - ter(i, j, z + 1) <= ot_house_base_west) { - ter(i, j, z) = ot_basement; - } else if (ter(i, j, z + 1) >= ot_sub_station_north && - ter(i, j, z + 1) <= ot_sub_station_west) { - ter(i, j, z) = ot_subway_nesw; - subway_points.push_back(city(i, j, 0)); - - } else if (ter(i, j, z + 1) == ot_road_nesw_manhole) { - ter(i, j, z) = ot_sewer_nesw; - sewer_points.push_back(city(i, j, 0)); - - } else if (ter(i, j, z + 1) == ot_sewage_treatment) { - for (int x = i-1; x <= i+1; x++) { - for (int y = j-1; y <= j+1; y++) { - ter(x, y, z) = ot_sewage_treatment_under; - } - } - ter(i, j, z) = ot_sewage_treatment_hub; - sewer_points.push_back(city(i, j, 0)); - - } else if (ter(i, j, z + 1) == ot_spider_pit) { - ter(i, j, z) = ot_spider_pit_under; - } else if (ter(i, j, z + 1) == ot_cave && z == -1) { - if (one_in(3)) { - ter(i, j, z) = ot_cave_rat; - requires_sub = true; // rat caves are two level - } else { - ter(i, j, z) = ot_cave; - } - } else if (ter(i, j, z + 1) == ot_cave_rat && z == -2) { - ter(i, j, z) = ot_cave_rat; - - } else if (ter(i, j, z + 1) == ot_anthill) { - int size = rng(MIN_ANT_SIZE, MAX_ANT_SIZE); - ant_points.push_back(city(i, j, size)); - zg.push_back(mongroup("GROUP_ANT", i * 2, j * 2, z, size * 1.5, rng(6000, 8000))); - - } else if (ter(i, j, z + 1) == ot_slimepit_down) { - int size = rng(MIN_GOO_SIZE, MAX_GOO_SIZE); - goo_points.push_back(city(i, j, size)); - - } else if (ter(i, j, z + 1) == ot_forest_water) { - ter(i, j, z) = ot_cavern; - - } else if (ter(i, j, z + 1) == ot_triffid_grove || - ter(i, j, z + 1) == ot_triffid_roots) { - triffid_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_temple_stairs) { - temple_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_lab_core || - (z == -1 && ter(i, j, z + 1) == ot_lab_stairs)) { - lab_points.push_back(city(i, j, rng(1, 5 + z))); - - } else if (ter(i, j, z + 1) == ot_lab_stairs) { - ter(i, j, z) = ot_lab; - - } else if (ter(i, j, z + 1) == ot_ice_lab_core || - (z == -1 && ter(i, j, z + 1) == ot_ice_lab_stairs)) { - ice_lab_points.push_back(city(i, j, rng(1, 5 + z))); - - } else if (ter(i, j, z + 1) == ot_ice_lab_stairs) { - ter(i, j, z) = ot_ice_lab; - - } else if (ter(i, j, z + 1) == ot_bunker && z == -1) { - bunker_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_shelter) { - shelter_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_lmoe) { - lmoe_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_cabin_strange) { - cabin_strange_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_mine_entrance) { - shaft_points.push_back( point(i, j) ); - - } else if (ter(i, j, z + 1) == ot_mine_shaft || - ter(i, j, z + 1) == ot_mine_down ) { - ter(i, j, z) = ot_mine; - mine_points.push_back(city(i, j, rng(6 + z, 10 + z))); - // technically not all finales need a sub level, but at this point we don't know - requires_sub = true; - } else if (ter(i, j, z + 1) == ot_mine_finale) { - for (int x = i - 1; x <= i + 1; x++) { - for (int y = j - 1; y <= j + 1; y++) { - ter(x, y, z) = ot_spiral; - } - } - ter(i, j, z) = ot_spiral_hub; - zg.push_back(mongroup("GROUP_SPIRAL", i * 2, j * 2, z, 2, 200)); - - } else if (ter(i, j, z + 1) == ot_silo) { - if (rng(2, 7) < abs(z) || rng(2, 7) < abs(z)) { - ter(i, j, z) = ot_silo_finale; - } else { - ter(i, j, z) = ot_silo; - requires_sub = true; - } - } else if (ter(i, j, z + 1) == ot_office_tower_1_entrance) { - office_entrance_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_office_tower_1) { - office_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_prison_1 || ter(i, j, z + 1) == ot_prison_3 || - ter(i, j, z + 1) == ot_prison_4 || ter(i, j, z + 1) == ot_prison_5 || - ter(i, j, z + 1) == ot_prison_6 || ter(i, j, z + 1) == ot_prison_7 || - ter(i, j, z + 1) == ot_prison_8 || ter(i, j, z + 1) == ot_prison_9) { - prison_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_prison_2) { - prison_entrance_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_haz_sar_entrance) { - haz_sar_entrance_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_haz_sar) { - haz_sar_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_cathedral_1_entrance) { - cathedral_entrance_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_cathedral_1) { - cathedral_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_hotel_tower_1_7) { - hotel_tower_1_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_hotel_tower_1_8) { - hotel_tower_2_points.push_back( point(i, j) ); - } else if (ter(i, j, z + 1) == ot_hotel_tower_1_9) { - hotel_tower_3_points.push_back( point(i, j) ); - } - } - } - - for (int i = 0; i < goo_points.size(); i++) - requires_sub |= build_slimepit(goo_points[i].x, goo_points[i].y, z, goo_points[i].s); - place_hiways(sewer_points, z, ot_sewer_nesw); - polish(z, ot_sewer_ns, ot_sewer_nesw); - place_hiways(subway_points, z, ot_subway_nesw); - for (int i = 0; i < subway_points.size(); i++) - ter(subway_points[i].x, subway_points[i].y, z) = ot_subway_station; - for (int i = 0; i < lab_points.size(); i++) - { - bool lab = build_lab(lab_points[i].x, lab_points[i].y, z, lab_points[i].s); - requires_sub |= lab; - if (!lab && ter(lab_points[i].x, lab_points[i].y, z) == ot_lab_core) - ter(lab_points[i].x, lab_points[i].y, z) = ot_lab; - } - for (int i = 0; i < ice_lab_points.size(); i++) - { - bool ice_lab = build_ice_lab(ice_lab_points[i].x, ice_lab_points[i].y, z, ice_lab_points[i].s); - requires_sub |= ice_lab; - if (!ice_lab && ter(ice_lab_points[i].x, ice_lab_points[i].y, z) == ot_ice_lab_core) - ter(ice_lab_points[i].x, ice_lab_points[i].y, z) = ot_ice_lab; - } - for (int i = 0; i < ant_points.size(); i++) - build_anthill(ant_points[i].x, ant_points[i].y, z, ant_points[i].s); - polish(z, ot_subway_ns, ot_subway_nesw); - polish(z, ot_ants_ns, ot_ants_nesw); - for (int i = 0; i < cities.size(); i++) { - if (one_in(3)) - zg.push_back( - mongroup("GROUP_CHUD", cities[i].x * 2, cities[i].y * 2, z, - cities[i].s, cities[i].s * 20)); - if (!one_in(8)) - zg.push_back( - mongroup("GROUP_SEWER", cities[i].x * 2, cities[i].y * 2, z, - cities[i].s * 3.5, cities[i].s * 70)); - } - place_rifts(z); - for (int i = 0; i < mine_points.size(); i++) - build_mine(mine_points[i].x, mine_points[i].y, z, mine_points[i].s); - - for (int i = 0; i < shaft_points.size(); i++) { - ter(shaft_points[i].x, shaft_points[i].y, z) = ot_mine_shaft; - requires_sub = true; - } - - for (int i = 0; i < bunker_points.size(); i++) - ter(bunker_points[i].x, bunker_points[i].y, z) = ot_bunker; - - for (int i = 0; i < shelter_points.size(); i++) - ter(shelter_points[i].x, shelter_points[i].y, z) = ot_shelter_under; - - for (int i = 0; i < lmoe_points.size(); i++) - ter(lmoe_points[i].x, lmoe_points[i].y, z) = ot_lmoe_under; - - for (int i = 0; i < cabin_strange_points.size(); i++) - ter(cabin_strange_points[i].x, cabin_strange_points[i].y, z) = ot_cabin_strange_b; - - for (int i = 0; i < triffid_points.size(); i++) { - if (z == -1) { - ter( triffid_points[i].x, triffid_points[i].y, z ) = ot_triffid_roots; - requires_sub = true; - } - else - ter( triffid_points[i].x, triffid_points[i].y, z ) = ot_triffid_finale; - } - - for (int i = 0; i < temple_points.size(); i++) { - if (z == -5) - ter( temple_points[i].x, temple_points[i].y, z ) = ot_temple_finale; - else { - ter( temple_points[i].x, temple_points[i].y, z ) = ot_temple_stairs; - requires_sub = true; - } - } - for (int i = 0; i < office_entrance_points.size(); i++) - ter(office_entrance_points[i].x, office_entrance_points[i].y, z) = ot_office_tower_b_entrance; - for (int i = 0; i < office_points.size(); i++) - ter(office_points[i].x, office_points[i].y, z) = ot_office_tower_b; - for (int i = 0; i < prison_points.size(); i++) - ter(prison_points[i].x, prison_points[i].y, z) = ot_prison_b; - for (int i = 0; i < prison_entrance_points.size(); i++) - ter(prison_entrance_points[i].x, prison_entrance_points[i].y, z) = ot_prison_b_entrance; - for (int i = 0; i < haz_sar_entrance_points.size(); i++){ - ter(haz_sar_entrance_points[i].x, haz_sar_entrance_points[i].y, z-1) = ot_haz_sar_entrance_b1;} - for (int i = 0; i < haz_sar_points.size(); i++){ - ter(haz_sar_points[i].x, haz_sar_points[i].y, z-1) = ot_haz_sar_b1;} - for (int i = 0; i < cathedral_entrance_points.size(); i++) - ter(cathedral_entrance_points[i].x, cathedral_entrance_points[i].y, z) = ot_cathedral_b_entrance; - for (int i = 0; i < cathedral_points.size(); i++) - ter(cathedral_points[i].x, cathedral_points[i].y, z) = ot_cathedral_b; - for (int i = 0; i < hotel_tower_1_points.size(); i++) - ter(hotel_tower_1_points[i].x, hotel_tower_1_points[i].y, z) = ot_hotel_tower_b_1; - for (int i = 0; i < hotel_tower_2_points.size(); i++) - ter(hotel_tower_2_points[i].x, hotel_tower_2_points[i].y, z) = ot_hotel_tower_b_2; - for (int i = 0; i < hotel_tower_3_points.size(); i++) - ter(hotel_tower_3_points[i].x, hotel_tower_3_points[i].y, z) = ot_hotel_tower_b_3; - return requires_sub; -} - -void overmap::make_tutorial() -{ - for (int i = 0; i < OMAPX; i++) { - for (int j = 0; j < OMAPY; j++) - ter(i, j, -1) = ot_rock; - } - ter(50, 50, 0) = ot_tutorial; - ter(50, 50, -1) = ot_tutorial; - zg.clear(); -} - -// checks whether ter(x,y) is defined 'close to' the given type. -// for finding, say, houses, with any orientation. -bool overmap::ter_in_type_range(int x, int y, int z, oter_id type, int type_range) -{ - if (ter(x, y, z) >= type && ter(x, y, z) < type + type_range) - return true; - return false; -} - -point overmap::find_closest(point origin, oter_id type, int type_range, - int &dist, bool must_be_seen) -{ - //does origin qualify? - if (ter_in_type_range(origin.x, origin.y, 0, type, type_range)) - if (!must_be_seen || seen(origin.x, origin.y, 0)) - return point(origin.x, origin.y); - - int max = (dist == 0 ? OMAPX : dist); - // expanding box - for (dist = 0; dist <= max; dist++) { - // each edge length is 2*dist-2, because corners belong to one edge - // south is +y, north is -y - for (int i = 0; i < dist*2-1; i++) { - //start at northwest, scan north edge - int x = origin.x - dist + i; - int y = origin.y - dist; - if (ter_in_type_range(x, y, 0, type, type_range)) - if (!must_be_seen || seen(x, y, 0)) - return point(x, y); - - //start at southeast, scan south - x = origin.x + dist - i; - y = origin.y + dist; - if (ter_in_type_range(x, y, 0, type, type_range)) - if (!must_be_seen || seen(x, y, 0)) - return point(x, y); - - //start at southwest, scan west - x = origin.x - dist; - y = origin.y + dist - i; - if (ter_in_type_range(x, y, 0, type, type_range)) - if (!must_be_seen || seen(x, y, 0)) - return point(x, y); - - //start at northeast, scan east - x = origin.x + dist; - y = origin.y - dist + i; - if (ter_in_type_range(x, y, 0, type, type_range)) - if (!must_be_seen || seen(x, y, 0)) - return point(x, y); - } - } - dist=-1; - return point(-1, -1); -} - -std::vector overmap::find_all(tripoint origin, oter_id type, int type_range, - int &dist, bool must_be_seen) -{ - std::vector res; - int max = (dist == 0 ? OMAPX / 2 : dist); - for (dist = 0; dist <= max; dist++) { - for (int x = origin.x - dist; x <= origin.x + dist; x++) { - for (int y = origin.y - dist; y <= origin.y + dist; y++) { - if (ter(x, y, origin.z) >= type && ter(x, y, origin.z) < type + type_range && - (!must_be_seen || seen(x, y, origin.z))) - res.push_back(point(x, y)); - } - } - } - return res; -} - -std::vector overmap::find_terrain(std::string term, int cursx, int cursy, int zlevel) -{ - std::vector found; - for (int x = 0; x < OMAPX; x++) { - for (int y = 0; y < OMAPY; y++) { - if (seen(x, y, zlevel) && oterlist[ter(x, y, zlevel)].name.find(term) != std::string::npos) - found.push_back( point(x, y) ); - } - } - return found; -} - -int overmap::closest_city(point p) -{ - int distance = 999, ret = -1; - for (int i = 0; i < cities.size(); i++) { - int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); - if (dist < distance || (dist == distance && cities[i].s < cities[ret].s)) { - ret = i; - distance = dist; - } - } - - return ret; -} - -point overmap::random_house_in_city(int city_id) -{ - if (city_id < 0 || city_id >= cities.size()) { - debugmsg("overmap::random_house_in_city(%d) (max %d)", city_id, - cities.size() - 1); - return point(-1, -1); - } - std::vector valid; - int startx = cities[city_id].x - cities[city_id].s, - endx = cities[city_id].x + cities[city_id].s, - starty = cities[city_id].y - cities[city_id].s, - endy = cities[city_id].y + cities[city_id].s; - for (int x = startx; x <= endx; x++) { - for (int y = starty; y <= endy; y++) { - if (ter(x, y, 0) >= ot_house_north && ter(x, y, 0) <= ot_house_west) - valid.push_back( point(x, y) ); - } - } - if (valid.empty()) - return point(-1, -1); - - return valid[ rng(0, valid.size() - 1) ]; -} - -int overmap::dist_from_city(point p) -{ - int distance = 999; - for (int i = 0; i < cities.size(); i++) { - int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); - dist -= cities[i].s; - if (dist < distance) - distance = dist; - } - return distance; -} - -void overmap::draw(WINDOW *w, game *g, int z, int &cursx, int &cursy, - int &origx, int &origy, signed char &ch, bool blink, - overmap &hori, overmap &vert, overmap &diag, input_context* inp_ctxt) -{ - bool note_here = false, npc_here = false; - std::string note_text; - int om_map_width = TERMX-28; - int om_map_height = TERMY; - - int omx, omy; - point target(-1, -1); - if (g->u.active_mission >= 0 && - g->u.active_mission < g->u.active_missions.size()) - target = g->find_mission(g->u.active_missions[g->u.active_mission])->target; - bool see; - oter_id cur_ter = ot_null; - nc_color ter_color; - long ter_sym; - /* First, determine if we're close enough to the edge to need an - * adjacent overmap, and record the offsets. */ - int offx = 0; - int offy = 0; - if (cursx < om_map_width / 2) - { - offx = -1; - } - else if (cursx > OMAPX - 2 - (om_map_width / 2)) - { - offx = 1; - } - if (cursy < (om_map_height / 2)) - { - offy = -1; - } - else if (cursy > OMAPY - 2 - (om_map_height / 2)) - { - offy = 1; - } - - // If the offsets don't match the previously loaded ones, load the new adjacent overmaps. - if( offx && loc.x + offx != hori.loc.x ) - { - hori = overmap_buffer.get( g, loc.x + offx, loc.y ); - } - if( offy && loc.y + offy != vert.loc.y ) - { - vert = overmap_buffer.get( g, loc.x, loc.y + offy ); - } - if( offx && offy && (loc.x + offx != diag.loc.x || loc.y + offy != diag.loc.y ) ) - { - diag = overmap_buffer.get( g, loc.x + offx, loc.y + offy ); - } - -// Now actually draw the map - bool csee = false; - oter_id ccur_ter = ot_null; - for (int i = -(om_map_width / 2); i < (om_map_width / 2); i++) { - for (int j = -(om_map_height / 2); - j <= (om_map_height / 2) + (ch == 'j' ? 1 : 0); j++) { - omx = cursx + i; - omy = cursy + j; - see = false; - npc_here = false; - if (omx >= 0 && omx < OMAPX && omy >= 0 && omy < OMAPY) { // It's in-bounds - cur_ter = ter(omx, omy, z); - see = seen(omx, omy, z); - note_here = has_note(omx, omy, z); - if (note_here) - note_text = note(omx, omy, z); - //Check if there is an npc. - npc_here = has_npc(g,omx,omy,z); -// - } else if (omx < 0) { - omx += OMAPX; - if (omy < 0 || omy >= OMAPY) { - omy += (omy < 0 ? OMAPY : 0 - OMAPY); - cur_ter = diag.ter(omx, omy, z); - see = diag.seen(omx, omy, z); - note_here = diag.has_note(omx, omy, z); - if (note_here) - note_text = diag.note(omx, omy, z); - } else { - cur_ter = hori.ter(omx, omy, z); - see = hori.seen(omx, omy, z); - note_here = hori.has_note(omx, omy, z); - if (note_here) - note_text = hori.note(omx, omy, z); - } - } else if (omx >= OMAPX) { - omx -= OMAPX; - if (omy < 0 || omy >= OMAPY) { - omy += (omy < 0 ? OMAPY : 0 - OMAPY); - cur_ter = diag.ter(omx, omy, z); - see = diag.seen(omx, omy, z); - note_here = diag.has_note(omx, omy, z); - if (note_here) - note_text = diag.note(omx, omy, z); - } else { - cur_ter = hori.ter(omx, omy, z); - see = hori.seen(omx, omy, z); - note_here = hori.has_note(omx, omy, z); - if (note_here) - note_text = hori.note(omx, omy, z); - } - } else if (omy < 0) { - omy += OMAPY; - cur_ter = vert.ter(omx, omy, z); - see = vert.seen(omx, omy, z); - note_here = vert.has_note(omx, omy, z); - if (note_here) - note_text = vert.note(omx, omy, z); - } else if (omy >= OMAPY) { - omy -= OMAPY; - cur_ter = vert.ter(omx, omy, z); - see = vert.seen(omx, omy, z); - note_here = vert.has_note(omx, omy, z); - if (note_here) - note_text = vert.note(omx, omy, z); - } else - debugmsg("No data loaded! omx: %d omy: %d", omx, omy); -// - if (see) { - if (note_here && blink) { - ter_color = c_yellow; - if (note_text[1] == ':') - ter_sym = note_text[0]; - else - ter_sym = 'N'; - } else if (omx == origx && omy == origy && blink) { - ter_color = g->u.color(); - ter_sym = '@'; - } else if (npc_here && blink) { - ter_color = c_pink; - ter_sym = '@'; - } else if (omx == target.x && omy == target.y && blink) { - ter_color = c_red; - ter_sym = '*'; - } else { - if (cur_ter >= num_ter_types || cur_ter < 0) - debugmsg("Bad ter %d (%d, %d)", cur_ter, omx, omy); - ter_color = oterlist[cur_ter].color; - ter_sym = oterlist[cur_ter].sym; - } - } else { // We haven't explored this tile yet - ter_color = c_dkgray; - ter_sym = '#'; - } - if (j == 0 && i == 0) { - mvwputch_hi (w, om_map_height / 2, om_map_width / 2, - ter_color, ter_sym); - csee = see; - ccur_ter = cur_ter; - } else - mvwputch (w, (om_map_height / 2) + j, (om_map_width / 2) + i, - ter_color, ter_sym); - } - } - if (target.x != -1 && target.y != -1 && blink && - (target.x < cursx - om_map_height / 2 || - target.x > cursx + om_map_height / 2 || - target.y < cursy - om_map_width / 2 || - target.y > cursy + om_map_width / 2 )) { - switch (direction_from(cursx, cursy, target.x, target.y)) { - case NORTH: mvwputch(w, 0, (om_map_width / 2), c_red, '^'); break; - case NORTHEAST: mvwputch(w, 0, om_map_width - 1, c_red, LINE_OOXX); break; - case EAST: mvwputch(w, (om_map_height / 2), - om_map_width - 1, c_red, '>'); break; - case SOUTHEAST: mvwputch(w, om_map_height, - om_map_width - 1, c_red, LINE_XOOX); break; - case SOUTH: mvwputch(w, om_map_height, - om_map_height / 2, c_red, 'v'); break; - case SOUTHWEST: mvwputch(w, om_map_height, 0, c_red, LINE_XXOO); break; - case WEST: mvwputch(w, om_map_height / 2, 0, c_red, '<'); break; - case NORTHWEST: mvwputch(w, 0, 0, c_red, LINE_OXXO); break; - } - } - - if (has_note(cursx, cursy, z)) { - note_text = note(cursx, cursy, z); - if (note_text[1] == ':') - note_text = note_text.substr(2, note_text.size()); - for (int i = 0; i < note_text.length(); i++) - mvwputch(w, 1, i, c_white, LINE_OXOX); - mvwputch(w, 1, note_text.length(), c_white, LINE_XOOX); - mvwputch(w, 0, note_text.length(), c_white, LINE_XOXO); - mvwprintz(w, 0, 0, c_yellow, note_text.c_str()); - } else if (has_npc(g, cursx, cursy, z)) - { - print_npcs(g, w, cursx, cursy, z); - } - - - cur_ter = ter(cursx, cursy, z); -// Draw the vertical line - for (int j = 0; j < om_map_height; j++) - mvwputch(w, j, om_map_width, c_white, LINE_XOXO); -// Clear the legend - for (int i = om_map_width + 1; i < om_map_width + 55; i++) { - for (int j = 0; j < om_map_height; j++) - mvwputch(w, j, i, c_black, ' '); - } - - real_coords rc; - rc.fromomap( g->cur_om->pos().x, g->cur_om->pos().y, cursx, cursy ); - - if (csee) { - mvwputch(w, 1, om_map_width + 1, oterlist[ccur_ter].color, oterlist[ccur_ter].sym); - std::vector name = foldstring(oterlist[ccur_ter].name,25); - for (int i = 1; (i - 1) < name.size(); i++) - { - mvwprintz(w, i, om_map_width + 3, oterlist[ccur_ter].color, "%s", - name[i-1].c_str()); - } - } else - mvwprintz(w, 1, om_map_width + 1, c_dkgray, _("# Unexplored")); - - if (target.x != -1 && target.y != -1) { - int distance = rl_dist(origx, origy, target.x, target.y); - mvwprintz(w, 3, om_map_width + 1, c_white, _("Distance to target: %d"), distance); - } - mvwprintz(w, 15, om_map_width + 1, c_magenta, _("Use movement keys to pan. ")); - mvwprintz(w, 16, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("CENTER") + - _(" - Center map on character")).c_str()); - mvwprintz(w, 17, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("SEARCH") + - _(" - Search ")).c_str()); - mvwprintz(w, 18, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("CREATE_NOTE") + - _(" - Add/Edit a note ")).c_str()); - mvwprintz(w, 19, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("DELETE_NOTE") + - _(" - Delete a note ")).c_str()); - mvwprintz(w, 20, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("LIST_NOTES") + - _(" - List notes ")).c_str()); - fold_and_print(w, 21, om_map_width + 1, 27, c_magenta, (inp_ctxt->get_desc("QUIT") + - _(" - Return to game ")).c_str()); - mvwprintz(w, getmaxy(w)-1, om_map_width + 1, c_red, string_format(_("LEVEL %i"),z).c_str()); - mvwprintz( w, getmaxy(w) - 1, om_map_width + 1, c_red, "%s, %d'%d, %d'%d", - string_format(_("LEVEL %i"),z).c_str(), rc.abs_om.x, rc.om_pos.x, - rc.abs_om.y, rc.om_pos.y ); -// Done with all drawing! - wrefresh(w); -} - -//Start drawing the overmap on the screen using the (m)ap command. -point overmap::draw_overmap(game *g, int zlevel) -{ - WINDOW* w_map = newwin(TERMY, TERMX, 0, 0); - WINDOW* w_search = newwin(13, 27, 3, TERMX-27); - timeout(BLINK_SPEED); // Enable blinking! - bool blink = true; - int cursx = (g->levx + int(MAPSIZE / 2)) / 2, - cursy = (g->levy + int(MAPSIZE / 2)) / 2; - int origx = cursx, origy = cursy, origz = zlevel; - signed char ch = 0; - point ret(-1, -1); - overmap hori, vert, diag; // Adjacent maps - - // Configure input context for navigating the map. - input_context ictxt("OVERMAP"); - ictxt.register_action("ANY_INPUT"); - ictxt.register_directions(); - ictxt.register_action("CONFIRM"); - ictxt.register_action("LEVEL_UP"); - ictxt.register_action("LEVEL_DOWN"); - ictxt.register_action("HELP_KEYBINDINGS"); - - // Actions whose keys we want to display. - ictxt.register_action("CENTER"); - ictxt.register_action("CREATE_NOTE"); - ictxt.register_action("DELETE_NOTE"); - ictxt.register_action("SEARCH"); - ictxt.register_action("LIST_NOTES"); - ictxt.register_action("QUIT"); - std::string action; - do { - draw(w_map, g, zlevel, cursx, cursy, origx, origy, ch, blink, hori, vert, diag, &ictxt); - action = ictxt.handle_input(); - timeout(BLINK_SPEED); // Enable blinking! - - int dirx, diry; - if (action != "ANY_INPUT") { - blink = true; // If any input is detected, make the blinkies on - } - ictxt.get_direction(dirx, diry, action); - if (dirx != -2 && diry != -2) { - cursx += dirx; - cursy += diry; - } else if (action == "CENTER") { - cursx = origx; - cursy = origy; - zlevel = origz; - } else if (action == "LEVEL_DOWN" && zlevel > -OVERMAP_DEPTH) { - zlevel -= 1; - } else if (action == "LEVEL_UP" && zlevel < OVERMAP_HEIGHT) { - zlevel += 1; - } - else if (action == "CONFIRM") - ret = point(cursx, cursy); - else if (action == "QUIT") - ret = point(-1, -1); - else if (action == "CREATE_NOTE") { - timeout(-1); - add_note(cursx, cursy, zlevel, string_input_popup(_("Note (X:TEXT for custom symbol):"), - 45, note(cursx, cursy, zlevel))); // 45 char max - timeout(BLINK_SPEED); - } else if(action == "DELETE_NOTE"){ - timeout(-1); - if (has_note(cursx, cursy, zlevel)){ - bool res = query_yn(_("Really delete note?")); - if (res == true) - delete_note(cursx, cursy, zlevel); - } - timeout(BLINK_SPEED); - } else if (action == "LIST_NOTES"){ - timeout(-1); - point p = display_notes(g, zlevel); - if (p.x != -1){ - cursx = p.x; - cursy = p.y; - } - timeout(BLINK_SPEED); - wrefresh(w_map); - } else if (action == "SEARCH") { - int tmpx = cursx, tmpy = cursy; - timeout(-1); - std::string term = string_input_popup(_("Search term:")); - timeout(BLINK_SPEED); - draw(w_map, g, zlevel, cursx, cursy, origx, origy, ch, blink, hori, vert, diag, &ictxt); - point found = find_note(cursx, cursy, zlevel, term); - if (found.x == -1) { // Didn't find a note - std::vector terlist; - terlist = find_terrain(term, origx, origy, zlevel); - if (terlist.size() != 0){ - int i = 0; - //Navigate through results - do { - //Draw search box - wborder(w_search, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, - LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); - mvwprintz(w_search, 1, 1, c_red, _("Find place:")); - mvwprintz(w_search, 2, 1, c_ltblue, " "); - mvwprintz(w_search, 2, 1, c_ltblue, "%s", term.c_str()); - mvwprintz(w_search, 4, 1, c_white, - _("'<' '>' Cycle targets.")); - mvwprintz(w_search, 10, 1, c_white, _("Enter/Spacebar to select.")); - mvwprintz(w_search, 11, 1, c_white, _("q to return.")); - ch = input(); - if (ch == ERR) - blink = !blink; - else if (ch == '<') { - i++; - if(i > terlist.size() - 1) - i = 0; - } else if(ch == '>'){ - i--; - if(i < 0) - i = terlist.size() - 1; - } - cursx = terlist[i].x; - cursy = terlist[i].y; - draw(w_map, g, zlevel, cursx, cursy, origx, origy, ch, blink, hori, vert, diag, &ictxt); - wrefresh(w_search); - timeout(BLINK_SPEED); - } while(ch != '\n' && ch != ' ' && ch != 'q'); - //If q is hit, return to the last position - if(ch == 'q'){ - cursx = tmpx; - cursy = tmpy; - } - ch = '.'; - } - } - if (found.x != -1) { - cursx = found.x; - cursy = found.y; - } - } - else if (action == "ANY_INPUT") { // Hit timeout on input, so make characters blink - blink = !blink; - } - } while (action != "QUIT" && action != "CONFIRM"); - timeout(-1); - werase(w_map); - wrefresh(w_map); - delwin(w_map); - werase(w_search); - wrefresh(w_search); - delwin(w_search); - erase(); - g->refresh_all(); - return ret; -} - -void overmap::first_house(int &x, int &y) -{ - std::vector valid; - for (int i = 0; i < OMAPX; i++) { - for (int j = 0; j < OMAPY; j++) { - if (ter(i, j, 0) == ot_shelter) - valid.push_back( point(i, j) ); - } - } - if (valid.size() == 0) { - debugmsg("Couldn't find a shelter!"); - x = 1; - y = 1; - return; - } - int index = rng(0, valid.size() - 1); - x = valid[index].x; - y = valid[index].y; -} - -void overmap::process_mongroups() -{ - for (int i = 0; i < zg.size(); i++) { - if (zg[i].dying) { - zg[i].population *= .8; - zg[i].radius *= .9; - } - } -} - -void overmap::place_forest() -{ - for (int i = 0; i < NUM_FOREST; i++) { - // forx and fory determine the epicenter of the forest - int forx = rng(0, OMAPX - 1); - int fory = rng(0, OMAPY - 1); - // fors determinds its basic size - int fors = rng(15, 40); - int outer_tries = 1000; - int inner_tries = 1000; - for (int j = 0; j < cities.size(); j++) { - inner_tries = 1000; - while (dist(forx,fory,cities[j].x,cities[j].y) - fors / 2 < cities[j].s ) { - // Set forx and fory far enough from cities - forx = rng(0, OMAPX - 1); - fory = rng(0, OMAPY - 1); - // Set fors to determine the size of the forest; usually won't overlap w/ cities - fors = rng(15, 40); - j = 0; - if( 0 == --inner_tries ) { break; } - } - if( 0 == --outer_tries || 0 == inner_tries ) { - break; - } - } - if( 0 == outer_tries || 0 == inner_tries ) { break; } - int swamps = SWAMPINESS; // How big the swamp may be... - int x = forx; - int y = fory; -// Depending on the size on the forest... - for (int j = 0; j < fors; j++) { - int swamp_chance = 0; - for (int k = -2; k <= 2; k++) { - for (int l = -2; l <= 2; l++) { - if (ter(x + k, y + l, 0) == ot_forest_water || - (ter(x+k, y+l, 0) >= ot_river_center && ter(x+k, y+l, 0) <= ot_river_nw)) - swamp_chance += 5; - } - } - bool swampy = false; - if (swamps > 0 && swamp_chance > 0 && !one_in(swamp_chance) && - (ter(x, y, 0) == ot_forest || ter(x, y, 0) == ot_forest_thick || - ter(x, y, 0) == ot_field || one_in(SWAMPCHANCE))) { -// ...and make a swamp. - ter(x, y, 0) = ot_forest_water; - swampy = true; - swamps--; - } else if (swamp_chance == 0) - swamps = SWAMPINESS; - if (ter(x, y, 0) == ot_field) - ter(x, y, 0) = ot_forest; - else if (ter(x, y, 0) == ot_forest) - ter(x, y, 0) = ot_forest_thick; - - if (swampy && (ter(x, y-1, 0) == ot_field || ter(x, y-1, 0) == ot_forest)) - ter(x, y-1, 0) = ot_forest_water; - else if (ter(x, y-1, 0) == ot_forest) - ter(x, y-1, 0) = ot_forest_thick; - else if (ter(x, y-1, 0) == ot_field) - ter(x, y-1, 0) = ot_forest; - - if (swampy && (ter(x, y+1, 0) == ot_field || ter(x, y+1, 0) == ot_forest)) - ter(x, y+1, 0) = ot_forest_water; - else if (ter(x, y+1, 0) == ot_forest) - ter(x, y+1, 0) = ot_forest_thick; - else if (ter(x, y+1, 0) == ot_field) - ter(x, y+1, 0) = ot_forest; - - if (swampy && (ter(x-1, y, 0) == ot_field || ter(x-1, y, 0) == ot_forest)) - ter(x-1, y, 0) = ot_forest_water; - else if (ter(x-1, y, 0) == ot_forest) - ter(x-1, y, 0) = ot_forest_thick; - else if (ter(x-1, y, 0) == ot_field) - ter(x-1, y, 0) = ot_forest; - - if (swampy && (ter(x+1, y, 0) == ot_field || ter(x+1, y, 0) == ot_forest)) - ter(x+1, y, 0) = ot_forest_water; - else if (ter(x+1, y, 0) == ot_forest) - ter(x+1, y, 0) = ot_forest_thick; - else if (ter(x+1, y, 0) == ot_field) - ter(x+1, y, 0) = ot_forest; -// Random walk our forest - x += rng(-2, 2); - if (x < 0 ) x = 0; - if (x > OMAPX) x = OMAPX; - y += rng(-2, 2); - if (y < 0 ) y = 0; - if (y > OMAPY) y = OMAPY; - } - } -} - -void overmap::place_river(point pa, point pb) -{ - int x = pa.x, y = pa.y; - do { - x += rng(-1, 1); - y += rng(-1, 1); - if (x < 0) x = 0; - if (x > OMAPX - 1) x = OMAPX - 2; - if (y < 0) y = 0; - if (y > OMAPY - 1) y = OMAPY - 1; - for (int i = -1; i <= 1; i++) { - for (int j = -1; j <= 1; j++) { - if (y+i >= 0 && y+i < OMAPY && x+j >= 0 && x+j < OMAPX) - ter(x+j, y+i, 0) = ot_river_center; - } - } - 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)))) - 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)))) - 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)))) - 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)))) - y--; - x += rng(-1, 1); - y += rng(-1, 1); - if (x < 0) x = 0; - if (x > OMAPX - 1) x = OMAPX - 2; - if (y < 0) y = 0; - if (y > OMAPY - 1) y = OMAPY - 1; - for (int i = -1; i <= 1; i++) { - for (int j = -1; j <= 1; j++) { -// We don't want our riverbanks touching the edge of the map for many reasons - if ((y+i >= 1 && y+i < OMAPY - 1 && x+j >= 1 && x+j < OMAPX - 1) || -// UNLESS, of course, that's where the river is headed! - (abs(pb.y - (y+i)) < 4 && abs(pb.x - (x+j)) < 4)) - ter(x+j, y+i, 0) = ot_river_center; - } - } - } while (pb.x != x || pb.y != y); -} - -/*: the root is overmap::place_cities() -20:50 : which is at overmap.cpp:1355 or so -20:51 : the key is cs = rng(4, 17), setting the "size" of the city -20:51 : which is roughly it's radius in overmap tiles -20:52 : then later overmap::place_mongroups() is called -20:52 : which creates a mongroup with radius city_size * 2.5 and population city_size * 80 -20:53 : tadaa - -spawns happen at... -20:56 : game:pawn_mon() in game.cpp:7380*/ -void overmap::place_cities() -{ - int NUM_CITIES = dice(4, 4); - int start_dir; - int op_city_size = int(ACTIVE_WORLD_OPTIONS["CITY_SIZE"]); - int city_min = op_city_size - 1; - int city_max = op_city_size + 1; - // Limit number of cities based on how big they are. - NUM_CITIES = std::min(NUM_CITIES, int(256 / op_city_size * op_city_size)); - - while (cities.size() < NUM_CITIES) { - int cx = rng(12, OMAPX - 12); - int cy = rng(12, OMAPY - 12); - int size = dice(city_min, city_max) ; - if (ter(cx, cy, 0) == ot_field) { - ter(cx, cy, 0) = ot_road_nesw; - city tmp; tmp.x = cx; tmp.y = cy; tmp.s = size; - cities.push_back(tmp); - start_dir = rng(0, 3); - for (int j = 0; j < 4; j++) - make_road(cx, cy, size, (start_dir + j) % 4, tmp); - } - } -} - -void overmap::put_buildings(int x, int y, int dir, city town) -{ - int ychange = dir % 2, xchange = (dir + 1) % 2; - for (int i = -1; i <= 1; i += 2) { - if ((ter(x+i*xchange, y+i*ychange, 0) == ot_field) && !one_in(STREETCHANCE)) { - if (rng(0, 99) > 80 * dist(x,y,town.x,town.y) / town.s) - ter(x+i*xchange, y+i*ychange, 0) = shop(((dir%2)-i)%4); - else { - if (rng(0, 99) > 130 * dist(x, y, town.x, town.y) / town.s) - ter(x+i*xchange, y+i*ychange, 0) = (one_in(5)?ot_pool:ot_park); - else - ter(x+i*xchange, y+i*ychange, 0) = house(((dir%2)-i)%4); - } - } - } -} - -void overmap::make_road(int cx, int cy, int cs, int dir, city town) -{ - int x = cx, y = cy; - int c = cs, croad = cs; - switch (dir) { - case 0: - while (c > 0 && y > 0 && (ter(x, y-1, 0) == ot_field || c == cs)) { - y--; - c--; - ter(x, y, 0) = ot_road_ns; - for (int i = -1; i <= 0; i++) { - for (int j = -1; j <= 1; j++) { - if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == ot_road_ew || - ter(x+j, y+i, 0) == ot_road_ns)) { - ter(x, y, 0) = ot_road_null; - c = -1; - } - } - } - put_buildings(x, y, dir, town); - if (c < croad - 1 && c >= 2 && ter(x - 1, y, 0) == ot_field && - ter(x + 1, y, 0) == ot_field) { - croad = c; - make_road(x, y, cs - rng(1, 3), 1, town); - make_road(x, y, cs - rng(1, 3), 3, town); - } - } - if (is_road(x, y-2, 0)) - ter(x, y-1, 0) = ot_road_ns; - break; - case 1: - while (c > 0 && x < OMAPX-1 && (ter(x+1, y, 0) == ot_field || c == cs)) { - x++; - c--; - ter(x, y, 0) = ot_road_ew; - for (int i = -1; i <= 1; i++) { - for (int j = 0; j <= 1; j++) { - if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == ot_road_ew || - ter(x+j, y+i, 0) == ot_road_ns)) { - ter(x, y, 0) = ot_road_null; - c = -1; - } - } - } - put_buildings(x, y, dir, town); - if (c < croad-2 && c >= 3 && ter(x, y-1, 0) == ot_field && - ter(x, y+1, 0) == ot_field) { - croad = c; - make_road(x, y, cs - rng(1, 3), 0, town); - make_road(x, y, cs - rng(1, 3), 2, town); - } - } - if (is_road(x-2, y, 0)) - ter(x-1, y, 0) = ot_road_ew; - break; - case 2: - while (c > 0 && y < OMAPY-1 && (ter(x, y+1, 0) == ot_field || c == cs)) { - y++; - c--; - ter(x, y, 0) = ot_road_ns; - for (int i = 0; i <= 1; i++) { - for (int j = -1; j <= 1; j++) { - if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == ot_road_ew || - ter(x+j, y+i, 0) == ot_road_ns)) { - ter(x, y, 0) = ot_road_null; - c = -1; - } - } - } - put_buildings(x, y, dir, town); - if (c < croad-2 && ter(x-1, y, 0) == ot_field && ter(x+1, y, 0) == ot_field) { - croad = c; - make_road(x, y, cs - rng(1, 3), 1, town); - make_road(x, y, cs - rng(1, 3), 3, town); - } - } - if (is_road(x, y+2, 0)) - ter(x, y+1, 0) = ot_road_ns; - break; - case 3: - while (c > 0 && x > 0 && (ter(x-1, y, 0) == ot_field || c == cs)) { - x--; - c--; - ter(x, y, 0) = ot_road_ew; - for (int i = -1; i <= 1; i++) { - for (int j = -1; j <= 0; j++) { - if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == ot_road_ew || - ter(x+j, y+i, 0) == ot_road_ns)) { - ter(x, y, 0) = ot_road_null; - c = -1; - } - } - } - put_buildings(x, y, dir, town); - if (c < croad - 2 && c >= 3 && ter(x, y-1, 0) == ot_field && - ter(x, y+1, 0) == ot_field) { - croad = c; - make_road(x, y, cs - rng(1, 3), 0, town); - make_road(x, y, cs - rng(1, 3), 2, town); - } - } - if (is_road(x+2, y, 0)) - ter(x+1, y, 0) = ot_road_ew; - break; - } - cs -= rng(1, 3); - if (cs >= 2 && c == 0) { - int dir2; - if (dir % 2 == 0) - dir2 = rng(0, 1) * 2 + 1; - else - dir2 = rng(0, 1) * 2; - make_road(x, y, cs, dir2, town); - if (one_in(5)) - make_road(x, y, cs, (dir2 + 2) % 4, town); - } -} - -bool overmap::build_lab(int x, int y, int z, int s) -{ - std::vector generated_lab; - ter(x, y, z) = ot_lab; - for (int n = 0; n <= 1; n++) { // Do it in two passes to allow diagonals - for (int i = 1; i <= s; i++) { - for (int lx = x - i; lx <= x + i; lx++) { - for (int ly = y - i; ly <= y + i; ly++) { - if ((ter(lx - 1, ly, z) == ot_lab || ter(lx + 1, ly, z) == ot_lab || - ter(lx, ly - 1, z) == ot_lab || ter(lx, ly + 1, z) == ot_lab) && - one_in(i)) - { - ter(lx, ly, z) = ot_lab; - generated_lab.push_back(point(lx,ly)); - } - } - } - } - } - bool generate_stairs = true; - for (std::vector::iterator it=generated_lab.begin(); - it != generated_lab.end(); it++) - { - if (ter(it->x, it->y, z+1) == ot_lab_stairs) - generate_stairs = false; - } - if (generate_stairs && generated_lab.size() > 0) - { - int v = rng(0,generated_lab.size()-1); - point p = generated_lab[v]; - ter(p.x, p.y, z+1) = ot_lab_stairs; - } - - ter(x, y, z) = ot_lab_core; - int numstairs = 0; - if (s > 0) { // Build stairs going down - while (!one_in(6)) { - int stairx, stairy; - int tries = 0; - do { - stairx = rng(x - s, x + s); - stairy = rng(y - s, y + s); - tries++; - } while (ter(stairx, stairy, z) != ot_lab && tries < 15); - if (tries < 15) { - ter(stairx, stairy, z) = ot_lab_stairs; - numstairs++; - } - } - } - if (numstairs == 0) { // This is the bottom of the lab; We need a finale - int finalex, finaley; - int tries = 0; - do { - finalex = rng(x - s, x + s); - finaley = rng(y - s, y + s); - tries++; - } while (tries < 15 && ter(finalex, finaley, z) != ot_lab && - ter(finalex, finaley, z) != ot_lab_core); - ter(finalex, finaley, z) = ot_lab_finale; - } - zg.push_back(mongroup("GROUP_LAB", (x * 2), (y * 2), z, s, 400)); - - return numstairs > 0; -} - -bool overmap::build_ice_lab(int x, int y, int z, int s) -{ - std::vector generated_ice_lab; - ter(x, y, z) = ot_ice_lab; - for (int n = 0; n <= 1; n++) { // Do it in two passes to allow diagonals - for (int i = 1; i <= s; i++) { - for (int lx = x - i; lx <= x + i; lx++) { - for (int ly = y - i; ly <= y + i; ly++) { - if ((ter(lx - 1, ly, z) == ot_ice_lab || ter(lx + 1, ly, z) == ot_ice_lab || - ter(lx, ly - 1, z) == ot_ice_lab || ter(lx, ly + 1, z) == ot_ice_lab) && - one_in(i)) - { - ter(lx, ly, z) = ot_ice_lab; - generated_ice_lab.push_back(point(lx,ly)); - } - } - } - } - } - bool generate_stairs = true; - for (std::vector::iterator it=generated_ice_lab.begin(); - it != generated_ice_lab.end(); it++) - { - if (ter(it->x, it->y, z+1) == ot_ice_lab_stairs) - generate_stairs = false; - } - if (generate_stairs && generated_ice_lab.size() > 0) - { - int v = rng(0,generated_ice_lab.size()-1); - point p = generated_ice_lab[v]; - ter(p.x, p.y, z+1) = ot_ice_lab_stairs; - } - - ter(x, y, z) = ot_ice_lab_core; - int numstairs = 0; - if (s > 0) { // Build stairs going down - while (!one_in(6)) { - int stairx, stairy; - int tries = 0; - do { - stairx = rng(x - s, x + s); - stairy = rng(y - s, y + s); - tries++; - } while (ter(stairx, stairy, z) != ot_ice_lab && tries < 15); - if (tries < 15) { - ter(stairx, stairy, z) = ot_ice_lab_stairs; - numstairs++; - } - } - } - if (numstairs == 0) { // This is the bottom of the ice_lab; We need a finale - int finalex, finaley; - int tries = 0; - do { - finalex = rng(x - s, x + s); - finaley = rng(y - s, y + s); - tries++; - } while (tries < 15 && ter(finalex, finaley, z) != ot_ice_lab && - ter(finalex, finaley, z) != ot_ice_lab_core); - ter(finalex, finaley, z) = ot_ice_lab_finale; - } - zg.push_back(mongroup("GROUP_ice_lab", (x * 2), (y * 2), z, s, 400)); - - return numstairs > 0; -} - -void overmap::build_anthill(int x, int y, int z, int s) -{ - build_tunnel(x, y, z, s - rng(0, 3), 0); - build_tunnel(x, y, z, s - rng(0, 3), 1); - build_tunnel(x, y, z, s - rng(0, 3), 2); - build_tunnel(x, y, z, s - rng(0, 3), 3); - std::vector queenpoints; - for (int i = x - s; i <= x + s; i++) { - for (int j = y - s; j <= y + s; j++) { - if (ter(i, j, z) >= ot_ants_ns && ter(i, j, z) <= ot_ants_nesw) - queenpoints.push_back(point(i, j)); - } - } - int index = rng(0, queenpoints.size() - 1); - ter(queenpoints[index].x, queenpoints[index].y, z) = ot_ants_queen; -} - -void overmap::build_tunnel(int x, int y, int z, int s, int dir) -{ - if (s <= 0) - return; - if (ter(x, y, z) < ot_ants_ns || ter(x, y, z) > ot_ants_queen) - ter(x, y, z) = ot_ants_ns; - point next; - switch (dir) { - case 0: next = point(x , y - 1); - case 1: next = point(x + 1, y ); - case 2: next = point(x , y + 1); - case 3: next = point(x - 1, y ); - } - if (s == 1) - next = point(-1, -1); - std::vector valid; - for (int i = x - 1; i <= x + 1; i++) { - for (int j = y - 1; j <= y + 1; j++) { - if ((ter(i, j, z) < ot_ants_ns || ter(i, j, z) > ot_ants_queen) && - abs(i - x) + abs(j - y) == 1) - valid.push_back(point(i, j)); - } - } - for (int i = 0; i < valid.size(); i++) { - if (valid[i].x != next.x || valid[i].y != next.y) { - if (one_in(s * 2)) { - if (one_in(2)) - ter(valid[i].x, valid[i].y, z) = ot_ants_food; - else - ter(valid[i].x, valid[i].y, z) = ot_ants_larvae; - } else if (one_in(5)) { - int dir2; - if (valid[i].y == y - 1) dir2 = 0; - if (valid[i].x == x + 1) dir2 = 1; - if (valid[i].y == y + 1) dir2 = 2; - if (valid[i].x == x - 1) dir2 = 3; - build_tunnel(valid[i].x, valid[i].y, z, s - rng(0, 3), dir2); - } - } - } - build_tunnel(next.x, next.y, z, s - 1, dir); -} - -bool overmap::build_slimepit(int x, int y, int z, int s) -{ - bool requires_sub = false; - for (int n = 1; n <= s; n++) - { - for (int i = x - n; i <= x + n; i++) - { - for (int j = y - n; j <= y + n; j++) - { - if (rng(1, s * 2) >= n) - { - if (one_in(8) && z > -OVERMAP_DEPTH) - { - ter(i, j, z) = ot_slimepit_down; - requires_sub = true; - } else { - ter(i, j, z) = ot_slimepit; - } - } - } - } - } - - return requires_sub; -} - -void overmap::build_mine(int x, int y, int z, int s) -{ - bool finale = (s <= rng(1, 3)); - int built = 0; - if (s < 2) - s = 2; - while (built < s) { - ter(x, y, z) = ot_mine; - std::vector next; - for (int i = -1; i <= 1; i += 2) { - if (ter(x, y + i, z) == ot_rock) - next.push_back( point(x, y + i) ); - if (ter(x + i, y, z) == ot_rock) - next.push_back( point(x + i, y) ); - } - if (next.empty()) { // Dead end! Go down! - ter(x, y, z) = (finale ? ot_mine_finale : ot_mine_down); - return; - } - point p = next[ rng(0, next.size() - 1) ]; - x = p.x; - y = p.y; - built++; - } - ter(x, y, z) = (finale ? ot_mine_finale : ot_mine_down); -} - -void overmap::place_rifts(int const z) -{ - int num_rifts = rng(0, 2) * rng(0, 2); - std::vector riftline; - if (!one_in(4)) - num_rifts++; - for (int n = 0; n < num_rifts; n++) { - int x = rng(MAX_RIFT_SIZE, OMAPX - MAX_RIFT_SIZE); - int y = rng(MAX_RIFT_SIZE, OMAPY - MAX_RIFT_SIZE); - int xdist = rng(MIN_RIFT_SIZE, MAX_RIFT_SIZE), - ydist = rng(MIN_RIFT_SIZE, MAX_RIFT_SIZE); -// We use rng(0, 10) as the t-value for this Bresenham Line, because by -// repeating this twice, we can get a thick line, and a more interesting rift. - for (int o = 0; o < 3; o++) { - if (xdist > ydist) - riftline = line_to(x - xdist, y - ydist+o, x + xdist, y + ydist, rng(0,10)); - else - riftline = line_to(x - xdist+o, y - ydist, x + xdist, y + ydist, rng(0,10)); - for (int i = 0; i < riftline.size(); i++) { - if (i == riftline.size() / 2 && !one_in(3)) - ter(riftline[i].x, riftline[i].y, z) = ot_hellmouth; - else - ter(riftline[i].x, riftline[i].y, z) = ot_rift; - } - } - } -} - -void overmap::make_hiway(int x1, int y1, int x2, int y2, int z, oter_id base) -{ - if (x1 == x2 && y1 == y2) - return; - - std::priority_queue nodes[2]; - bool closed[OMAPX][OMAPY] = {{false}}; - int open[OMAPX][OMAPY] = {{0}}; - int dirs[OMAPX][OMAPY] = {{0}}; - int dx[4]={1, 0, -1, 0}; - int dy[4]={0, 1, 0, -1}; - int i = 0; - int disp = (base == ot_road_null) ? 5 : 2; - - nodes[i].push(node(x1, y1, 5, 1000)); - open[x1][y1] = 1000; - - while (!nodes[i].empty()) { //A* - node mn = nodes[i].top(); - nodes[i].pop(); - if (mn.x > OMAPX || mn.x < 0 || mn.y > OMAPY || mn.y < 0) { - continue; - } - closed[mn.x][mn.y] = true; - - if(mn.x == x2 && mn.y == y2) { - int x = mn.x; - int y = mn.y; - while (x != x1 || y != y1) { - int d = dirs[x][y]; - x += dx[d]; - y += dy[d]; - if (!is_building(ter(x, y, z))) { - if (is_river(ter(x, y, z))){ - if (d == 1 || d == 3) - ter(x, y, z) = ot_bridge_ns; - else - ter(x, y, z) = ot_bridge_ew; - } else { - ter(x, y, z) = base; - } - } - } - return; - } - - for(int d = 0; d < 4; d++) { - int x = mn.x + dx[d]; - int y = mn.y + dy[d]; - if (!(x < 1 || x > OMAPX - 2 || y < 1 || y > OMAPY - 2 || - closed[x][y] || is_building(ter(x, y, z)) || // Dont collade buildings - (is_river(ter(mn.x, mn.y, z)) && mn.d != d) || - (is_river(ter(x, y, z)) && mn.d != d) )) { // Dont turn on river - node cn = node(x, y, d, 0); - cn.p += ((abs(x2 - x) + abs(y2 - y)) / disp); // Distanse to target. - cn.p += is_road(base, x, y, z) ? 0 : 3; // Prefer exist roads. - cn.p += !is_river(ter(x, y, z)) ? 0 : 2; // ...And briges. - //cn.p += (mn.d == d) ? 0 : 1; // Try to keep direction; - - if (open[x][y] == 0) { - dirs[x][y] = (d + 2) % 4; - open[x][y] = cn.p; - nodes[i].push(cn); - } - else if (open[x][y] > cn.p) { - dirs[x][y] = (d + 2) % 4; - open[x][y] = cn.p; - - while (nodes[i].top().x != x || nodes[i].top().y != y){ - nodes[1 - i].push(nodes[i].top()); - nodes[i].pop(); - } - nodes[i].pop(); - - if (nodes[i].size() > nodes[1-i].size()) - i = 1 - i; - while (!nodes[i].empty()) { - nodes[1 - i].push(nodes[i].top()); - nodes[i].pop(); - } - i = 1 - i; - nodes[i].push(cn); - } - } - } - } -} - -void overmap::building_on_hiway(int x, int y, int dir) -{ - int xdif = dir * (1 - 2 * rng(0,1)); - int ydif = (1 - dir) * (1 - 2 * rng(0,1)); - int rot = 0; - if (ydif == 1) - rot = 0; - else if (xdif == -1) - rot = 1; - else if (ydif == -1) - rot = 2; - else if (xdif == 1) - rot = 3; - - switch (rng(1, 4)) { - case 1: - if (!is_river(ter(x + xdif, y + ydif, 0))) - ter(x + xdif, y + ydif, 0) = ot_lab_stairs; - break; - case 2: - if (!is_river(ter(x + xdif, y + ydif, 0))) - ter(x + xdif, y + ydif, 0) = ot_ice_lab_stairs; - break; - case 3: - if (!is_river(ter(x + xdif, y + ydif, 0))) - ter(x + xdif, y + ydif, 0) = house(rot); - break; - case 4: - if (!is_river(ter(x + xdif, y + ydif, 0))) - ter(x + xdif, y + ydif, 0) = ot_radio_tower; - break; - } -} - -void overmap::place_hiways(std::vector cities, int z, oter_id base) -{ - if (cities.size() == 1) { - return; - } - city best; - for (int i = 0; i < cities.size(); i++) { - int closest = -1; - for (int j = i + 1; j < cities.size(); j++) { - int distance = (int)dist(cities[i].x, cities[i].y, cities[j].x, cities[j].y); - if (distance < closest || closest < 0) { - closest = distance; - best = cities[j]; - } - } - if( closest > 0 ) { - make_hiway(cities[i].x, cities[i].y, best.x, best.y, z, base); - } - } -} - -// Polish does both good_roads and good_rivers (and any future polishing) in -// a single loop; much more efficient -void overmap::polish(int z, oter_id min, oter_id max) -{ -// Main loop--checks roads and rivers that aren't on the borders of the map - for (int x = 0; x < OMAPX; x++) { - for (int y = 0; y < OMAPY; y++) { - if (ter(x, y, z) >= min && ter(x, y, z) <= max) { - if (ter(x, y, z) >= ot_road_null && ter(x, y, z) <= ot_road_nesw) - good_road(ot_road_ns, x, y, z); - else if (ter(x, y, z) >= ot_bridge_ns && ter(x, y, z) <= ot_bridge_ew && - ter(x - 1, y, z) >= ot_bridge_ns && ter(x - 1, y, z) <= ot_bridge_ew && - ter(x + 1, y, z) >= ot_bridge_ns && ter(x + 1, y, z) <= ot_bridge_ew && - ter(x, y - 1, z) >= ot_bridge_ns && ter(x, y - 1, z) <= ot_bridge_ew && - ter(x, y + 1, z) >= ot_bridge_ns && ter(x, y + 1, z) <= ot_bridge_ew) - ter(x, y, z) = ot_road_nesw; - else if (ter(x, y, z) >= ot_subway_ns && ter(x, y, z) <= ot_subway_nesw) - good_road(ot_subway_ns, x, y, z); - else if (ter(x, y, z) >= ot_sewer_ns && ter(x, y, z) <= ot_sewer_nesw) - good_road(ot_sewer_ns, x, y, z); - else if (ter(x, y, z) >= ot_ants_ns && ter(x, y, z) <= ot_ants_nesw) - good_road(ot_ants_ns, x, y, z); - else if (ter(x, y, z) >= ot_river_center && ter(x, y, z) < ot_river_nw) - good_river(x, y, z); -// Sometimes a bridge will start at the edge of a river, and this looks ugly -// So, fix it by making that square normal road; bit of a kludge but it works - else if (ter(x, y, z) == ot_bridge_ns && - (!is_river(ter(x - 1, y, z)) || !is_river(ter(x + 1, y, z)))) - ter(x, y, z) = ot_road_ns; - else if (ter(x, y, z) == ot_bridge_ew && - (!is_river(ter(x, y - 1, z)) || !is_river(ter(x, y + 1, z)))) - ter(x, y, z) = ot_road_ew; - } - } - } -// Fixes stretches of parallel roads--turns them into two-lane highways -// Note that this fixes 2x2 areas... a "tail" of 1x2 parallel roads may be left. -// This can actually be a good thing; it ensures nice connections -// Also, this leaves, say, 3x3 areas of road. TODO: fix this? courtyards etc? - for (int y = 0; y < OMAPY - 1; y++) { - for (int x = 0; x < OMAPX - 1; x++) { - if (ter(x, y, z) >= min && ter(x, y, z) <= max) { - if (ter(x, y, z) == ot_road_nes && ter(x+1, y, z) == ot_road_nsw && - ter(x, y+1, z) == ot_road_nes && ter(x+1, y+1, z) == ot_road_nsw) { - ter(x, y, z) = ot_hiway_ns; - ter(x+1, y, z) = ot_hiway_ns; - ter(x, y+1, z) = ot_hiway_ns; - ter(x+1, y+1, z) = ot_hiway_ns; - } else if (ter(x, y, z) == ot_road_esw && ter(x+1, y, z) == ot_road_esw && - ter(x, y+1, z) == ot_road_new && ter(x+1, y+1, z) == ot_road_new) { - ter(x, y, z) = ot_hiway_ew; - ter(x+1, y, z) = ot_hiway_ew; - ter(x, y+1, z) = ot_hiway_ew; - ter(x+1, y+1, z) = ot_hiway_ew; - } - } - } - } -} - -bool overmap::is_road(int x, int y, int z) -{ - if (ter(x, y, z) == ot_rift || ter(x, y, z) == ot_hellmouth) - return true; - if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY) { - for (int i = 0; i < roads_out.size(); i++) { - if (abs(roads_out[i].x - x) + abs(roads_out[i].y - y) <= 1) - return true; - } - } - if ((ter(x, y, z) >= ot_road_null && ter(x, y, z) <= ot_bridge_ew) || - (ter(x, y, z) >= ot_subway_ns && ter(x, y, z) <= ot_subway_nesw) || - (ter(x, y, z) >= ot_sewer_ns && ter(x, y, z) <= ot_sewer_nesw) || - ter(x, y, z) == ot_sewage_treatment_hub || - ter(x, y, z) == ot_sewage_treatment_under) - return true; - return false; -} - -bool overmap::is_road_or_highway(int x, int y, int z) -{ - if (ter(x, y, z) == ot_rift || ter(x, y, z) == ot_hellmouth) - return true; - if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY) { - for (int i = 0; i < roads_out.size(); i++) { - if (abs(roads_out[i].x - x) + abs(roads_out[i].y - y) <= 1) - return true; - } - } - if ((ter(x, y, z) >= ot_hiway_ns && ter(x, y, z) <= ot_road_nesw_manhole)) - return true; - return false; -} - -bool overmap::is_road(oter_id base, int x, int y, int z) -{ - oter_id min, max; - if (base >= ot_road_null && base <= ot_bridge_ew) { - min = ot_road_null; - max = ot_bridge_ew; - } else if (base >= ot_subway_ns && base <= ot_subway_nesw) { - min = ot_subway_station; - max = ot_subway_nesw; - } else if (base >= ot_sewer_ns && base <= ot_sewer_nesw) { - min = ot_sewer_ns; - max = ot_sewer_nesw; - if (ter(x, y, z) == ot_sewage_treatment_hub || - ter(x, y, z) == ot_sewage_treatment_under ) - return true; - } else if (base >= ot_ants_ns && base <= ot_ants_queen) { - min = ot_ants_ns; - max = ot_ants_queen; - } else { // Didn't plan for this! - debugmsg("Bad call to is_road, %s", oterlist[base].name.c_str()); - return false; - } - if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY) { - for (int i = 0; i < roads_out.size(); i++) { - if (abs(roads_out[i].x - x) + abs(roads_out[i].y - y) <= 1) - return true; - } - } - if (ter(x, y, z) >= min && ter(x, y, z) <= max) - return true; - return false; -} - -void overmap::good_road(oter_id base, int x, int y, int z) -{ - int d = ot_road_ns; - if (is_road(base, x, y-1, z)) { - if (is_road(base, x+1, y, z)) { - if (is_road(base, x, y+1, z)) { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_nesw - d); - else - ter(x, y, z) = oter_id(base + ot_road_nes - d); - } else { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_new - d); - else - ter(x, y, z) = oter_id(base + ot_road_ne - d); - } - } else { - if (is_road(base, x, y+1, z)) { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_nsw - d); - else - ter(x, y, z) = oter_id(base + ot_road_ns - d); - } else { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_wn - d); - else - ter(x, y, z) = oter_id(base + ot_road_ns - d); - } - } - } else { - if (is_road(base, x+1, y, z)) { - if (is_road(base, x, y+1, z)) { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_esw - d); - else - ter(x, y, z) = oter_id(base + ot_road_es - d); - } else - ter(x, y, z) = oter_id(base + ot_road_ew - d); - } else { - if (is_road(base, x, y+1, z)) { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_sw - d); - else - ter(x, y, z) = oter_id(base + ot_road_ns - d); - } else { - if (is_road(base, x-1, y, z)) - ter(x, y, z) = oter_id(base + ot_road_ew - d); - else {// No adjoining roads/etc. Happens occasionally, esp. with sewers. - ter(x, y, z) = oter_id(base + ot_road_nesw - d); - } - } - } - } - if (ter(x, y, z) == ot_road_nesw && one_in(4)) - ter(x, y, z) = ot_road_nesw_manhole; -} - -void overmap::good_river(int x, int y, int z) -{ - if (is_river(ter(x - 1, y, z))) { - if (is_river(ter(x, y - 1, z))) { - if (is_river(ter(x, y + 1, z))) { - if (is_river(ter(x + 1, y, z))) { -// River on N, S, E, W; but we might need to take a "bite" out of the corner - if (!is_river(ter(x - 1, y - 1, z))) - ter(x, y, z) = ot_river_c_not_nw; - else if (!is_river(ter(x + 1, y - 1, z))) - ter(x, y, z) = ot_river_c_not_ne; - else if (!is_river(ter(x - 1, y + 1, z))) - ter(x, y, z) = ot_river_c_not_sw; - else if (!is_river(ter(x + 1, y + 1, z))) - ter(x, y, z) = ot_river_c_not_se; - else - ter(x, y, z) = ot_river_center; - } else - ter(x, y, z) = ot_river_east; - } else { - if (is_river(ter(x + 1, y, z))) - ter(x, y, z) = ot_river_south; - else - ter(x, y, z) = ot_river_se; - } - } else { - if (is_river(ter(x, y + 1, z))) { - if (is_river(ter(x + 1, y, z))) - ter(x, y, z) = ot_river_north; - else - ter(x, y, z) = ot_river_ne; - } else { - if (is_river(ter(x + 1, y, z))) // Means it's swampy - ter(x, y, z) = ot_forest_water; - } - } - } else { - if (is_river(ter(x, y - 1, z))) { - if (is_river(ter(x, y + 1, z))) { - if (is_river(ter(x + 1, y, z))) - ter(x, y, z) = ot_river_west; - else // Should never happen - ter(x, y, z) = ot_forest_water; - } else { - if (is_river(ter(x + 1, y, z))) - ter(x, y, z) = ot_river_sw; - else // Should never happen - ter(x, y, z) = ot_forest_water; - } - } else { - if (is_river(ter(x, y + 1, z))) { - if (is_river(ter(x + 1, y, z))) - ter(x, y, z) = ot_river_nw; - else // Should never happen - ter(x, y, z) = ot_forest_water; - } else // Should never happen - ter(x, y, z) = ot_forest_water; - } - } -} - -void overmap::place_specials() -{ - int placed[NUM_OMSPECS]; - for (int i = 0; i < NUM_OMSPECS; i++) - placed[i] = 0; - - std::vector sectors; - for (int x = 0; x < OMAPX; x += OMSPEC_FREQ) { - for (int y = 0; y < OMAPY; y += OMSPEC_FREQ) - sectors.push_back(point(x, y)); - } - - while (!sectors.empty()) { - int sector_pick = rng(0, sectors.size() - 1); - int x = sectors[sector_pick].x, y = sectors[sector_pick].y; - sectors.erase(sectors.begin() + sector_pick); - std::vector valid; - int tries = 0; - tripoint p; - do { - p = tripoint(rng(x, x + OMSPEC_FREQ - 1), rng(y, y + OMSPEC_FREQ - 1), 0); - if (p.x >= OMAPX - 1) - p.x = OMAPX - 2; - if (p.y >= OMAPY - 1) - p.y = OMAPY - 2; - if (p.x == 0) - p.x = 1; - if (p.y == 0) - p.y = 1; - for (int i = 0; i < NUM_OMSPECS; i++) { - omspec_place place; - overmap_special special = overmap_specials[i]; - int min = special.min_dist_from_city, max = special.max_dist_from_city; - point pt(p.x, p.y); - // Skip non-classic specials if we're in classic mode - if (ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] && !(special.flags & mfb(OMS_FLAG_CLASSIC))) continue; - if ((placed[ omspec_id(i) ] < special.max_appearances || special.max_appearances <= 0) && - (min == -1 || dist_from_city(pt) >= min) && - (max == -1 || dist_from_city(pt) <= max) && - (place.*special.able)(this, special.flags, p)) - valid.push_back( omspec_id(i) ); - } - tries++; - } while (valid.empty() && tries < 20); // Done looking for valid spot - - if (!valid.empty()) { // We found a valid spot! -// Place the MUST HAVE ones first, to try and guarantee that they appear - std::vector must_place; - for (int i = 0; i < valid.size(); i++) { - if (placed[ valid[i] ] < overmap_specials[ valid[i] ].min_appearances) - must_place.push_back(valid[i]); - } - if (must_place.empty()) { - int selection = rng(0, valid.size() - 1); - overmap_special special = overmap_specials[ valid[selection] ]; - placed[ valid[selection] ]++; - place_special(special, p); - } else { - int selection = rng(0, must_place.size() - 1); - overmap_special special = overmap_specials[ must_place[selection] ]; - placed[ must_place[selection] ]++; - place_special(special, p); - } - } // Done with - - } // Done picking sectors... -} - -void overmap::place_special(overmap_special special, tripoint p) -{ - bool rotated = false; - int city = -1; -// First, place terrain... - ter(p.x, p.y, p.z) = special.ter; -// Next, obey any special effects the flags might have - if (special.flags & mfb(OMS_FLAG_ROTATE_ROAD)) { - if (is_road_or_highway(p.x, p.y - 1, p.z)) - rotated = true; - else if (is_road_or_highway(p.x + 1, p.y, p.z)) { - ter(p.x, p.y, p.z) = oter_id( int(ter(p.x, p.y, p.z)) + 1); - rotated = true; - } else if (is_road_or_highway(p.x, p.y + 1, p.z)) { - ter(p.x, p.y, p.z) = oter_id( int(ter(p.x, p.y, p.z)) + 2); - rotated = true; - } else if (is_road_or_highway(p.x - 1, p.y, p.z)) { - ter(p.x, p.y, p.z) = oter_id( int(ter(p.x, p.y, p.z)) + 3); - rotated = true; - } - } - - if (!rotated && special.flags & mfb(OMS_FLAG_ROTATE_RANDOM)) - ter(p.x, p.y, p.z) = oter_id( int(ter(p.x, p.y, p.z)) + rng(0, 3) ); - - if (special.flags & mfb(OMS_FLAG_ROAD)) { - int closest = -1, distance = 999; - for (int i = 0; i < cities.size(); i++) { - int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); - if (dist < distance) { - closest = i; - distance = dist; - } - } - if (special.flags & (mfb(OMS_FLAG_2X2_SECOND) | mfb(OMS_FLAG_3X3_FIXED))) - city = closest; - else - make_hiway(p.x, p.y, cities[closest].x, cities[closest].y, p.z, ot_road_null); - } - - if (special.flags & mfb(OMS_FLAG_3X3)) { - for (int x = p.x; x < p.x + 3; x++) { - for (int y = p.y; y < p.y + 3; y++) { - if (x == p.x && y == p.y) - y++; // Already handled - ter(x, y, p.z) = special.ter; - } - } - } - - if (special.flags & mfb(OMS_FLAG_3X3_SECOND)) { - for (int x = p.x; x < p.x + 3; x++) { - for (int y = p.y; y < p.y + 3; y++) { - ter(x, y, p.z) = oter_id(special.ter + 1); - } - } - - if (is_road(p.x + 3, p.y + 1, p.z)) // Road to east - ter(p.x + 2, p.y + 1, p.z) = special.ter; - else if (is_road(p.x + 1, p.y + 3, p.z)) // Road to south - ter(p.x + 1, p.y + 2, p.z) = special.ter; - else if (is_road(p.x - 1, p.y + 1, p.z)) // Road to west - ter(p.x, p.y + 1, p.z) = special.ter; - else // Road to north, or no roads - ter(p.x + 1, p.y, p.z) = special.ter; - } - - if (special.flags & mfb(OMS_FLAG_BLOB)) { - for (int x = -2; x <= 2; x++) { - for (int y = -2; y <= 2; y++) { - if (x == 0 && y == 0) - y++; // Already handled - omspec_place place; - tripoint np(p.x + x, p.y + y, p.z); - if (one_in(1 + abs(x) + abs(y)) && (place.*special.able)(this, special.flags, np)) - ter(p.x + x, p.y + y, p.z) = special.ter; - } - } - } - - if (special.flags & mfb(OMS_FLAG_BIG)) { - for (int x = -3; x <= 3; x++) { - for (int y = -3; y <= 3; y++) { - if (x == 0 && y == 0) - y++; // Already handled - omspec_place place; - tripoint np(p.x + x, p.y + y, p.z); - if ((place.*special.able)(this, special.flags, np)) - ter(p.x + x, p.y + y, p.z) = special.ter; - ter(p.x + x, p.y + y, p.z) = special.ter; - } - } - } - - if (special.flags & mfb(OMS_FLAG_3X3_FIXED)) { - // | - // 963 789 147 321 - // 852- 456 -258 654 - // 741 123 369 789 - // | - int dir = 0; - if (is_road(p.x + 1, p.y - 1, p.z)) // Road to north - dir = 0; - else if (is_road(p.x + 3, p.y + 1, p.z)) // Road to east - dir = 1; - else if (is_road(p.x + 1, p.y + 3, p.z)) // Road to south - dir = 2; - else if (is_road(p.x - 1, p.y + 1, p.z)) // Road to west - dir = 3; - else - dir = rng(0, 3); // Random direction; - - if (dir == 0) { - for (int i = -1, y = p.y; y <= p.y + 2; y++){ - for (int x = p.x + 2; x >= p.x; x--, i++){ - ter(x, y, p.z) = oter_id(special.ter + i); - } - } - if (special.ter == ot_school_2) - make_hiway(p.x, p.y - 1, p.x + 1, p.y - 1, p.z, ot_road_null); - } else if (dir == 1) { - for (int i = -1, x = p.x + 2; x >= p.x; x--){ - for (int y = p.y + 2; y >= p.y; y--, i++){ - ter(x, y, p.z) = oter_id(special.ter + i); - } - } - if (special.ter == ot_school_2) - make_hiway(p.x + 3, p.y, p.x + 3, p.y + 1, p.z, ot_road_null); - } else if (dir == 2) { - for (int i = -1, y = p.y + 2; y >= p.y; y--){ - for (int x = p.x; x <= p.x + 2; x++, i++){ - ter(x, y, p.z) = oter_id(special.ter + i); - } - } - if (special.ter == ot_school_2) - make_hiway(p.x + 2, p.y + 3, p.x + 1, p.y + 3, p.z, ot_road_null); - } else if (dir == 3) { - for (int i = -1, x = p.x; x <= p.x + 2; x++){ - for (int y = p.y; y <= p.y + 2; y++, i++){ - ter(x, y, p.z) = oter_id(special.ter + i); - } - } - if (special.ter == ot_school_2) - make_hiway(p.x - 1, p.y + 2, p.x - 1, p.y + 1, p.z, ot_road_null); - } - - if (special.flags & mfb(OMS_FLAG_ROAD)) { - if (dir == 0) - make_hiway(p.x + 1, p.y - 1, cities[city].x, cities[city].y, p.z, ot_road_null); - else if (dir == 1) - make_hiway(p.x + 3, p.y + 1, cities[city].x, cities[city].y, p.z, ot_road_null); - else if (dir == 2) - make_hiway(p.x + 1, p.y + 3, cities[city].x, cities[city].y, p.z, ot_road_null); - else if (dir == 3) - make_hiway(p.x - 1, p.y + 1, cities[city].x, cities[city].y, p.z, ot_road_null); - } - } - - //Buildings should be designed with the entrance at the southwest corner and open to the street on the south. - if (special.flags & mfb(OMS_FLAG_2X2_SECOND)) { - for (int x = p.x; x < p.x + 2; x++) { - for (int y = p.y; y < p.y + 2; y++) { - ter(x, y, p.z) = oter_id(special.ter + 1); - } - } - - int dir = 0; - if (is_road(p.x + 1, p.y - 1, p.z)) // Road to north - dir = 0; - else if (is_road(p.x + 2, p.y + 1, p.z)) // Road to east - dir = 1; - else if (is_road(p.x, p.y + 2, p.z)) // Road to south - dir = 2; - else if (is_road(p.x - 1, p.y, p.z)) // Road to west - dir = 3; - else - dir = rng(0, 3); // Random direction; - - if (dir == 0) - ter(p.x + 1, p.y, p.z) = oter_id(special.ter); - else if (dir == 1) - ter(p.x + 1, p.y + 1, p.z) = oter_id(special.ter); - else if (dir == 2) - ter(p.x, p.y + 1, p.z) = oter_id(special.ter); - else if (dir == 3) - ter(p.x, p.y, p.z) = oter_id(special.ter); - - if (special.flags & mfb(OMS_FLAG_ROAD)) { - if (dir == 0) - make_hiway(p.x + 1, p.y - 1, cities[city].x, cities[city].y, p.z, ot_road_null); - else if (dir == 1) - make_hiway(p.x + 2, p.y + 1, cities[city].x, cities[city].y, p.z, ot_road_null); - else if (dir == 2) - make_hiway(p.x, p.y + 2, cities[city].x, cities[city].y, p.z, ot_road_null); - else if (dir == 3) - make_hiway(p.x - 1, p.y, cities[city].x, cities[city].y, p.z, ot_road_null); - } - } - - if (special.flags & mfb(OMS_FLAG_PARKING_LOT)) { - int closest = -1, distance = 999; - for (int i = 0; i < cities.size(); i++) { - int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); - if (dist < distance) { - closest = i; - distance = dist; - } - } - if (special.flags & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) { - ter(p.x + 1, p.y - 1, p.z) = ot_s_lot; - make_hiway(p.x + 1, p.y - 1, cities[closest].x, cities[closest].y, p.z, ot_road_null); - } else { - ter(p.x, p.y - 1, p.z) = ot_s_lot; - make_hiway(p.x, p.y - 1, cities[closest].x, cities[closest].y, p.z, ot_road_null); - } - } - - if (special.flags & mfb(OMS_FLAG_DIRT_LOT)) { - int closest = -1, distance = 999; - for (int i = 0; i < cities.size(); i++) { - int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); - if (dist < distance) { - closest = i; - distance = dist; - } - } - if (special.flags & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) { - ter(p.x + 1, p.y - 1, p.z) = ot_dirtlot; - make_hiway(p.x + 1, p.y - 1, cities[closest].x, cities[closest].y, p.z, ot_road_null); - } else { - ter(p.x, p.y - 1, p.z) = ot_dirtlot; - make_hiway(p.x, p.y - 1, cities[closest].x, cities[closest].y, p.z, ot_road_null); - } - } - -// Finally, place monsters if applicable - if (special.monsters != "GROUP_NULL") { - if (special.monster_pop_min == 0 || special.monster_pop_max == 0 || - special.monster_rad_min == 0 || special.monster_rad_max == 0 ) { - debugmsg("Overmap special %s has bad spawn: pop(%d, %d) rad(%d, %d)", - oterlist[special.ter].name.c_str(), special.monster_pop_min, - special.monster_pop_max, special.monster_rad_min, - special.monster_rad_max); - return; - } - - int population = rng(special.monster_pop_min, special.monster_pop_max); - int radius = rng(special.monster_rad_min, special.monster_rad_max); - zg.push_back( - mongroup(special.monsters, p.x * 2, p.y * 2, p.z, radius, population)); - } -} - -void overmap::place_mongroups() -{ - if (!ACTIVE_WORLD_OPTIONS["STATIC_SPAWN"]) { - // Cities are full of zombies - for (unsigned int i = 0; i < cities.size(); i++) { - if (!one_in(16) || cities[i].s > 5) - zg.push_back (mongroup("GROUP_ZOMBIE", (cities[i].x * 2), (cities[i].y * 2), 0, - int(cities[i].s * 2.5), cities[i].s * 80)); - } - } - - if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"]) { - // Figure out where swamps are, and place swamp monsters - for (int x = 3; x < OMAPX - 3; x += 7) { - for (int y = 3; y < OMAPY - 3; y += 7) { - int swamp_count = 0; - for (int sx = x - 3; sx <= x + 3; sx++) { - for (int sy = y - 3; sy <= y + 3; sy++) { - if (ter(sx, sy, 0) == ot_forest_water) - swamp_count += 2; - else if (is_river(ter(sx, sy, 0))) - swamp_count++; - } - } - if (swamp_count >= 25) // ~25% swamp or ~50% river - zg.push_back(mongroup("GROUP_SWAMP", x * 2, y * 2, 0, 3, - rng(swamp_count * 8, swamp_count * 25))); - } - } - } - - if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"]) { - // Place the "put me anywhere" groups - int numgroups = rng(0, 3); - for (int i = 0; i < numgroups; i++) { - zg.push_back( - mongroup("GROUP_WORM", rng(0, OMAPX * 2 - 1), rng(0, OMAPY * 2 - 1), 0, - rng(20, 40), rng(30, 50))); - } - } - - // Forest groups cover the entire map - zg.push_back( mongroup("GROUP_FOREST", OMAPX / 2, OMAPY / 2, 0, - OMAPY, rng(2000, 12000))); - zg.back().diffuse = true; - zg.push_back( mongroup("GROUP_FOREST", OMAPX / 2, (OMAPY * 3) / 2, 0, - OMAPY, rng(2000, 12000))); - zg.back().diffuse = true; - zg.push_back( mongroup("GROUP_FOREST", (OMAPX * 3) / 2, OMAPY / 2, 0, - OMAPX, rng(2000, 12000))); - zg.back().diffuse = true; - zg.push_back( mongroup("GROUP_FOREST", (OMAPX * 3) / 2, (OMAPY * 3) / 2, 0, - OMAPX, rng(2000, 12000))); - zg.back().diffuse = true; -} - -void overmap::place_radios() -{ - char message[200]; - for (int i = 0; i < OMAPX; i++) { - for (int j = 0; j < OMAPY; j++) { - switch(ter(i, j, 0)) - { - case ot_radio_tower: - { - int choice = rng(0, 2); - switch(choice) - { - case 0: - snprintf( message, sizeof(message), _("This is emergency broadcast station %d%d.\ - Please proceed quickly and calmly to your designated evacuation point."), i, j); - radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), message)); - break; - case 1: - radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), - _("Head West. All survivors, head West. Help is waiting."))); - break; - case 2: - radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), "", WEATHER_RADIO)); - break; - } - } - break; - case ot_lmoe: - snprintf( message, sizeof(message), _("This is automated emergency shelter beacon %d%d.\ - Supplies, amenities and shelter are stocked."), i, j); - radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH) / 2, message)); - break; - case ot_fema_entrance: - snprintf( message, sizeof(message), _("This is FEMA camp %d%d.\ - Supplies are limited, please bring supplemental food, water, and bedding.\ - This is FEMA camp %d%d. A designated long-term emergency shelter."), i, j, i, j); - radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), message)); - break; - default: - break; - } - } - } -} - - -void overmap::open(game *g) -{ - std::string const plrfilename = player_filename(loc.x, loc.y); - std::string const terfilename = terrain_filename(loc.x, loc.y); - std::ifstream fin; -// Set position IDs - fin.open(terfilename.c_str()); - if (fin.is_open()) { - unserialize(g, fin, plrfilename, terfilename); - fin.close(); - } else { // No map exists! Prepare neighbors, and generate one. - std::vector pointers; -// Fetch north and south - for (int i = -1; i <= 1; i+=2) { - std::string const tmpfilename = terrain_filename(loc.x, loc.y + i); - fin.open(tmpfilename.c_str()); - if (fin.is_open()) { - fin.close(); - pointers.push_back(new overmap(g, loc.x, loc.y + i)); - } else - pointers.push_back(NULL); - } -// Fetch east and west - for (int i = -1; i <= 1; i+=2) { - std::string const tmpfilename = terrain_filename(loc.x + i, loc.y); - fin.open(tmpfilename.c_str()); - if (fin.is_open()) { - fin.close(); - pointers.push_back(new overmap(g, loc.x + i, loc.y)); - } else - pointers.push_back(NULL); - } -// pointers looks like (north, south, west, east) - generate(g, pointers[0], pointers[3], pointers[1], pointers[2]); - for (int i = 0; i < 4; i++) - delete pointers[i]; - save(); - } -} - -std::string overmap::terrain_filename(int const x, int const y) const -{ - std::stringstream filename; - - filename << world_generator->active_world->world_path << "/"; - - if (!prefix.empty()) { - filename << prefix << "."; - } - - filename << "o." << x << "." << y; - - return filename.str(); -} - -std::string overmap::player_filename(int const x, int const y) const -{ - std::stringstream filename; - - filename << world_generator->active_world->world_path <<"/" << base64_encode(name) << ".seen." << x << "." << y; - - return filename.str(); -} - -// Overmap special placement functions - -bool omspec_place::water(overmap *om, unsigned long f, tripoint p) -{ - int size = 1; - if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) - size = 2; - else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) - size = 3; - - for (int x = p.x; x < p.x + size; x++){ - for (int y = p.y; y < p.y + size; y++){ - oter_id ter = om->ter(x, y, p.z); - if (ter < ot_river_center || ter > ot_river_nw) - return false; - } - } - return true; -} - -bool omspec_place::land(overmap *om, unsigned long f, tripoint p) -{ - int size = 1; - if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) - size = 2; - else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) - size = 3; - - for (int x = p.x; x < p.x + size; x++){ - for (int y = p.y; y < p.y + size; y++){ - oter_id ter = om->ter(x, y, p.z); - if (ter >= ot_river_center && ter <= ot_river_nw) - return false; - } - } - return true; -} - -bool omspec_place::forest(overmap *om, unsigned long f, tripoint p) -{ - int size = 1; - if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) - size = 2; - else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) - size = 3; - - for (int x = p.x; x < p.x + size; x++){ - for (int y = p.y; y < p.y + size; y++){ - oter_id ter = om->ter(x, y, p.z); - if (ter != ot_forest && ter != ot_forest_thick && ter != ot_forest_water) - return false; - } - } - return true; -} - -bool omspec_place::wilderness(overmap *om, unsigned long f, tripoint p) -{ - int size = 1; - if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) - size = 2; - else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) - size = 3; - - for (int x = p.x; x < p.x + size; x++){ - for (int y = p.y; y < p.y + size; y++){ - oter_id ter = om->ter(x, y, p.z); - if (ter != ot_forest && ter != ot_forest_thick && - ter != ot_forest_water && ter != ot_field) - return false; - } - } - return true; -} - -bool omspec_place::by_highway(overmap *om, unsigned long f, tripoint p) -{ - int size = 1; - if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) - size = 2; - else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) - size = 3; - - for (int x = p.x; x < p.x + size; x++){ - for (int y = p.y; y < p.y + size; y++){ - oter_id ter = om->ter(x, y, p.z); - if (ter != ot_forest && ter != ot_forest_thick && - ter != ot_forest_water && ter != ot_field) - return false; - } - } - - if (size == 3 && - !om->is_road_or_highway(p.x + 1, p.y - 1, p.z) && - !om->is_road_or_highway(p.x + 3, p.y + 1, p.z) && - !om->is_road_or_highway(p.x + 1, p.y + 3, p.z) && - !om->is_road_or_highway(p.x - 1, p.y + 1, p.z)) - return false; - else if (size == 2 && - !om->is_road_or_highway(p.x + 1, p.y - 1, p.z) && - !om->is_road_or_highway(p.x + 2, p.y + 1, p.z) && - !om->is_road_or_highway(p.x, p.y + 2, p.z) && - !om->is_road_or_highway(p.x - 1, p.y, p.z)) - return false; - else if (size == 1 && - !om->is_road_or_highway(p.x, p.y - 1, p.z) && - !om->is_road_or_highway(p.x, p.y + 1, p.z) && - !om->is_road_or_highway(p.x - 1, p.y, p.z) && - !om->is_road_or_highway(p.x + 1, p.y, p.z)) - return false; - return true; -} diff --git a/savegame_json.cpp b/savegame_json.cpp deleted file mode 100644 index 531d67e72f26f..0000000000000 --- a/savegame_json.cpp +++ /dev/null @@ -1,1675 +0,0 @@ -#include "player.h" -#include "npc.h" -#include "profession.h" -#include "bionics.h" -#include "mission.h" -#include "game.h" -#include "disease.h" -#include "addiction.h" -#include "keypress.h" -#include "moraledata.h" -#include "inventory.h" -#include "artifact.h" -#include "options.h" -#include -#include -#include -#include "weather.h" -#include "item.h" -#include "material.h" -#include "translations.h" -#include "name.h" -#include "cursesdef.h" -#include "catacharset.h" -#include "disease.h" -#include "crafting.h" -#include "get_version.h" -#include "monstergenerator.h" - -#include "savegame.h" -#include "tile_id_data.h" // for monster::json_save -#include - -#include "picofunc.h" - -#include "debug.h" -#define dbg(x) dout((DebugLevel)(x),D_GAME) << __FILE__ << ":" << __LINE__ << ": " - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// player.h -/* - * output picojson::value wrapped map of an activity - */ -picojson::value player_activity::json_save() { - std::map data; - std::vector pvector; - - data["moves_left"] = pv( moves_left ); - data["type"] = pv ( int(type) ); - data["index"] = pv ( int(index) ); - data["invlet"] = pv ( int(invlet) ); - data["name"] = pv ( name ); - - pvector.push_back( pv( placement.x ) ); - pvector.push_back( pv( placement.y ) ); - data["placement"] = pv ( pvector ); - pvector.clear(); - - for (int i = 0; i < values.size(); i++) { - pvector.push_back( pv( values[i] ) ); - } - data["values"] = pv ( pvector ); - pvector.clear(); - - for (int i = 0; i < str_values.size(); i++) { - pvector.push_back( pv( str_values[i] ) ); - } - data["str_values"] = pv ( pvector ); - pvector.clear(); - - return pv ( data ); -} - -/* - * Convert activity struct to picojson::value map - */ -bool player_activity::json_load(picojson::value & parsed) { - picojson::object &data = parsed.get(); - int tmptype; - int tmpinv; - if ( picoint(data,"type",tmptype) && type < NUM_ACTIVITIES ) { - type = activity_type(tmptype); - picoint(data,"moves_left",moves_left); - picoint(data,"index",index); - picoint(data,"invlet",tmpinv); - invlet = (char)tmpinv; - picostring(data,"name",name); - picopoint(data,"placement",placement); - picojson::array * parray = pgetarray(data, "values"); - if ( parray != NULL ) { - for( picojson::array::const_iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - values.push_back( (int)(*pt).get() ); - } - } - } - - parray = pgetarray(data, "str_values"); - if ( parray != NULL ) { - for( picojson::array::const_iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - str_values.push_back( (*pt).get() ); - } - } - } - - return true; - } else { - debugmsg("Bad activity data:\n%s", parsed.serialize().c_str() ); - } - return false; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// skill.h -picojson::value SkillLevel::json_save() { - std::map data; - data["level"] = pv( level() ); - data["exercise"] = pv( exercise(true) ); - data["istraining"] = pv( isTraining() ); - data["lastpracticed"] = pv( int ( lastPracticed() ) ); - return pv ( data ); -} - -bool SkillLevel::json_load(std::map & data ){ - int lastpractice=0; - picoint(data,"level",_level); - picoint(data,"exercise",_exercise); - picobool(data,"istraining",_isTraining); - picoint(data,"lastpracticed",lastpractice); - if(lastpractice == 0) { - _lastPracticed = HOURS(OPTIONS["INITIAL_TIME"]); - } else { - _lastPracticed = lastpractice; - } - return true; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// player.h, player + npc -/* - * Gather variables for saving. These variables are common to both the player and NPCs (which is a kind of player). - * Do not overload; NPC or player specific stuff should go to player::json_save or npc::json_save. - */ - -void player::json_load_common_variables( std::map & data ) { - -// todo/maybe: -// std::map strmap_common_variables; -// void player::init_strmap_common_variables() { -// strmap_common_variables["posx"]=&posx; // + all this below and in save_common_variables -// } -// load: -// for(std::map::iterator it... -// picoint(data,it->first,it->second); -// save: -// for(... -// data[it->first] = pv ( it->second ); - if(!picoint(data,"posx",posx) ) { // uh-oh. - debugmsg("BAD PLAYER/NPC JSON: no 'posx'?"); - } - picoint(data,"posy",posy); - picoint(data,"str_cur",str_cur); picoint(data,"str_max",str_max); - picoint(data,"dex_cur",dex_cur); picoint(data,"dex_max",dex_max); - picoint(data,"int_cur",int_cur); picoint(data,"int_max",int_max); - picoint(data,"per_cur",per_cur); picoint(data,"per_max",per_max); - picoint(data,"hunger",hunger); picoint(data,"thirst",thirst); - picoint(data,"fatigue",fatigue); picoint(data,"stim",stim); - picoint(data,"pain",pain); picoint(data,"pkill",pkill); - picoint(data,"radiation",radiation); - picouint(data,"scent",scent); - picoint(data,"moves",moves); - picoint(data,"dodges_left",dodges_left); - picobool(data,"underwater",underwater); - picoint(data,"oxygen",oxygen); - picobool(data,"male",male); - picoint(data,"cash",cash); - picouint(data,"recoil",recoil); - - picojson::array * parray=pgetarray(data,"hp_cur"); - if ( parray != NULL && parray->size() == num_hp_parts ) { - for(int i=0; i < num_hp_parts; i++) { - hp_cur[i]=(int)parray->at(i).get(); - } - } else { - debugmsg("Error, incompatible hp_cur in save file '%s'",parray!=NULL ? pv( *parray ).serialize().c_str() : "missing" ); - } - - parray=pgetarray(data,"hp_max"); - if ( parray != NULL && parray->size() == num_hp_parts ) { - for(int i=0; i < num_hp_parts; i++) { - hp_max[i]=(int)parray->at(i).get(); - } - } else { - debugmsg("Error, incompatible hp_max in save file '%s'",parray!=NULL ? pv( *parray ).serialize().c_str() : "(missing)" ); - } - - - picoint(data,"power_level",power_level); - picoint(data,"max_power_level",max_power_level); - - parray=pgetarray(data,"traits"); - if ( parray != NULL ) { - for( picojson::array::const_iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - my_traits.insert ( (*pt).get() ); - } else { - // FIXME: error on type failures? - } - } - } else { - debugmsg("player/npc:: no 'traits' array!"); - } - - picojson::object * pmap=pgetmap(data,"skills"); - if ( pmap != NULL ) { - for (std::vector::iterator aSkill = Skill::skills.begin(); aSkill != Skill::skills.end(); ++aSkill) { - picojson::object::const_iterator pfind = pmap->find( (*aSkill)->ident() ); - if ( pfind != pmap->end() && pfind->second.is() ) { - picojson::object skdata = pfind->second.get(); - skillLevel(*aSkill).json_load ( skdata ); - } else { - debugmsg("Load (%s) Missing skill %s","",(*aSkill)->ident().c_str() ); - } - } - } else { - debugmsg("Skills[] no bueno"); - } - - ma_styles.clear(); - parray=pgetarray(data,"ma_styles"); - if ( parray == NULL ) { // 0.8; same variable & syntax, but was renamed - parray=pgetarray(data,"styles"); - } - if ( parray != NULL ) { - for( picojson::array::const_iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - ma_styles.push_back( (*pt).get() ); - } - } - } - - illness.clear(); - parray=pgetarray(data,"illness"); - if ( parray != NULL ) { - for( picojson::array::iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - std::map & pdata = (*pt).get(); - disease tmpill; - if ( picostring(pdata,"type",tmpill.type) && picoint(pdata,"duration",tmpill.duration) ) { - picoint(pdata,"intensity",tmpill.intensity); - int tmpbp=0; - picoint(pdata,"bp", tmpbp); - tmpill.bp = (body_part)tmpbp; - picoint(pdata,"side", tmpill.side); - picobool(pdata,"permanent", tmpill.permanent); - picoint(pdata,"decay", tmpill.decay); - if (tmpill.type == "ma_buff") { - picostring(pdata, "ma_buff_id", tmpill.buff_id); - } - illness.push_back(tmpill); - } - } - } - } - - addictions.clear(); - parray=pgetarray(data,"addictions"); - if ( parray != NULL ) { - for( picojson::array::iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - std::map & pdata = (*pt).get(); - addiction tmpaddict; - int tmpaddtype; - if ( picoint(pdata,"type_enum",tmpaddtype) && picoint(pdata,"intensity",tmpaddict.intensity) ) { - tmpaddict.type = (add_type)tmpaddtype; - picoint(pdata,"sated",tmpaddict.sated); - addictions.push_back(tmpaddict); - } - - } - } - } - - my_bionics.clear(); - parray=pgetarray(data,"my_bionics"); - if ( parray != NULL ) { - for( picojson::array::iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - std::map & pdata = (*pt).get(); - bionic tmpbio; - int tmpbioinv; - if ( picostring(pdata,"id",tmpbio.id) ) { - if ( bionics.find(tmpbio.id) == bionics.end() ) { - debugmsg("json_load: bad bionics:\n%s", (*pt).serialize().c_str() ); - } else { - picoint(pdata,"invlet",tmpbioinv); - tmpbio.invlet = (char)tmpbioinv; - picobool(pdata,"powered",tmpbio.powered); - picoint(pdata,"charge",tmpbio.charge); - my_bionics.push_back(tmpbio); - } - } - } - } - } - -} - -/* - * Variables common to player and npc - */ -void player::json_save_common_variables( std::map & data ) { - - std::vector ptmpvect; - std::map ptmpmap; - - // positional data - data["posx"] = pv( posx ); data["posy"] = pv( posy ); - - // attributes, current / max levels - data["str_cur"] = pv( str_cur ); data["str_max"] = pv( str_max ); - data["dex_cur"] = pv( dex_cur ); data["dex_max"] = pv( dex_max ); - data["int_cur"] = pv( int_cur ); data["int_max"] = pv( int_max ); - data["per_cur"] = pv( per_cur ); data["per_max"] = pv( per_max ); - - // om-noms or lack thereof - data["hunger"] = pv( hunger ); data["thirst"] = pv( thirst ); - // energy - data["fatigue"] = pv( fatigue ); data["stim"] = pv( stim ); - // pain - data["pain"] = pv( pain ); data["pkill"] = pv( pkill ); - // misc levels - data["radiation"] = pv( radiation ); - data["scent"] = pv( int(scent) ); - - // initiative type stuff - data["moves"] = pv( moves ); data["dodges_left"] = pv( dodges_left ); - - // breathing - data["underwater"] = pv( underwater ); data["oxygen"] = pv( oxygen ); - - // gender - data["male"] = pv( male ); - - data["cash"] = pv( cash ); - data["recoil"] = pv( int(recoil) ); - - // potential incompatibility with future expansion - // todo: consider ["parts"]["head"]["hp_cur"] instead of ["hp_cur"][head_enum_value] - data["hp_cur"] = json_wrapped_vector ( std::vector( hp_cur, hp_cur + num_hp_parts ) ); - data["hp_max"] = json_wrapped_vector ( std::vector( hp_max, hp_max + num_hp_parts ) ); - - // npc; unimplemented - data["power_level"] = pv( power_level ); - data["max_power_level"] = pv( max_power_level ); - - - // traits: permanent 'mutations' more or less - for (std::set::iterator iter = my_traits.begin(); iter != my_traits.end(); ++iter) { - ptmpvect.push_back( pv ( *iter ) ); - } - data["traits"] = pv( ptmpvect ); - ptmpvect.clear(); - - // skills - for (std::vector::iterator aSkill = Skill::skills.begin(); aSkill != Skill::skills.end(); ++aSkill) { - ptmpmap[ (*aSkill)->ident() ] = skillLevel(*aSkill).json_save(); - } - data["skills"] = pv ( ptmpmap ); - ptmpmap.clear(); - - // martial arts - for (int i = 0; i < ma_styles.size(); i++) { - ptmpvect.push_back( pv( ma_styles[i] ) ); - } - data["ma_styles"] = pv ( ptmpvect ); - ptmpvect.clear(); - - // disease - for (int i = 0; i < illness.size(); i++) { - ptmpmap[ "type" ] = pv ( illness[i].type ); - ptmpmap[ "duration" ] = pv ( illness[i].duration ); - ptmpmap[ "intensity" ] = pv ( illness[i].intensity ); - ptmpmap[ "bp" ] = pv ( (int)illness[i].bp ); - ptmpmap[ "side" ] = pv ( illness[i].side ); - ptmpmap[ "permanent" ] = pv ( illness[i].permanent ); - ptmpmap[ "decay" ] = pv ( illness[i].decay ); - ptmpmap[ "ma_buff_id" ] = pv ( illness[i].buff_id ); - ptmpvect.push_back ( pv ( ptmpmap ) ); - ptmpmap.clear(); - } - data["illness"] = pv ( ptmpvect ); - ptmpvect.clear(); - - // "Looks like I picked the wrong week to quit smoking." - Steve McCroskey - for (int i = 0; i < addictions.size(); i++) { - ptmpmap[ "type_enum" ] = pv ( addictions[i].type ); - ptmpmap[ "intensity" ] = pv ( addictions[i].intensity ); - ptmpmap[ "sated" ] = pv ( addictions[i].sated ); - ptmpvect.push_back ( pv ( ptmpmap ) ); - ptmpmap.clear(); - } - data["addictions"] = pv ( ptmpvect ); - ptmpvect.clear(); - - // "Fracking Toasters" - Saul Tigh, toaster - for (int i = 0; i < my_bionics.size(); i++) { - ptmpmap[ "id" ] = pv ( std::string(my_bionics[i].id) ); - ptmpmap[ "invlet" ] = pv ( (int)my_bionics[i].invlet ); - ptmpmap[ "powered" ] = pv ( my_bionics[i].powered ); - ptmpmap[ "charge" ] = pv ( my_bionics[i].charge ); - ptmpvect.push_back ( pv ( ptmpmap ) ); - ptmpmap.clear(); - } - data["my_bionics"] = pv ( ptmpvect ); - ptmpvect.clear(); -} - -/* - * save worn item pseudo-inventory - */ -picojson::value json_save_worn(player * p) { - std::vector data; - - for (int i = 0; i < p->worn.size(); i++) { - data.push_back( p->worn[i].json_save(true) ); - } - return pv ( data ); -} -/* - * load worn items - */ -bool json_load_worn(picojson::value & parsed, player * p, game * g) { - picojson::array &data = parsed.get(); - p->worn.clear(); - for( picojson::array::iterator pit = data.begin(); pit != data.end(); ++pit) { - if ( (*pit).is() ) { - p->worn.push_back( item( *pit, g ) ); - } - } - return true; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// player.h, player -/* - * Prepare a json object for player, including player specific data, and data common to - players and npcs ( which json_save_actor_data() handles ). - */ -picojson::value player::json_save(bool save_contents) -{ - std::map data; - - std::vector ptmpvect; - std::map ptmpmap; - - json_save_common_variables( data ); - - // player-specific specifics - if ( prof != NULL ) { - data["profession"] = pv( prof->ident() ); - } - - // someday, npcs may drive - data["driving_recoil"] = pv( int(driving_recoil) ); - data["in_vehicle"] = pv( in_vehicle ); - data["controlling_vehicle"] = pv( controlling_vehicle ); - - // shopping carts, furniture etc - std::vector pgrab; - pgrab.push_back( pv( grab_point.x ) ); - pgrab.push_back( pv( grab_point.y ) ); - data["grab_point"] = pv( pgrab ); - data["grab_type"] = pv( obj_type_name[ (int)grab_type ] ); - - // misc player specific stuff - data["blocks_left"] = pv( blocks_left ); - data["focus_pool"] = pv( focus_pool ); - data["style_selected"] = pv( style_selected ); - - // possibly related to illness[] ? - data["health"] = pv( health ); - - // crafting etc - data["activity"] = activity.json_save(); - data["backlog"] = activity.json_save(); - - // mutations; just like traits but can be removed. - for (std::set::iterator iter = my_mutations.begin(); iter != my_mutations.end(); ++iter) { - ptmpvect.push_back( pv ( *iter ) ); - } - data["mutations"] = pv( ptmpvect ); - ptmpvect.clear(); - - // "The cold wakes you up." - data["temp_cur"] = json_wrapped_vector ( std::vector( temp_cur, temp_cur + num_bp ) ); - data["temp_conv"] = json_wrapped_vector ( std::vector( temp_conv, temp_conv + num_bp ) ); - data["frostbite_timer"] = json_wrapped_vector ( std::vector( frostbite_timer, frostbite_timer + num_bp ) ); - - // npc: unimplemented, potentially useful - for (std::map::iterator iter = learned_recipes.begin(); iter != learned_recipes.end(); ++iter) { - ptmpvect.push_back( pv( iter->first ) ); - } - data["learned_recipes"] = pv ( ptmpvect ); - ptmpvect.clear(); - - // :( - for (int i = 0; i < morale.size(); i++) { - ptmpmap[ "type_enum" ] = pv ( morale[i].type ); - if (morale[i].item_type != NULL) { - ptmpmap[ "item_type" ] = pv ( morale[i].item_type->id ); - } - ptmpmap[ "bonus" ] = pv ( morale[i].bonus ); - ptmpmap[ "duration" ] = pv ( morale[i].duration ); - ptmpmap[ "decay_start" ] = pv ( morale[i].decay_start ); - ptmpmap[ "age" ] = pv ( morale[i].age ); - ptmpvect.push_back ( pv ( ptmpmap ) ); - ptmpmap.clear(); - } - data["morale"] = pv ( ptmpvect ); - ptmpvect.clear(); - - // mission stuff - data["active_mission"] = pv( active_mission ); - - data["active_missions"] = json_wrapped_vector ( active_missions ); - data["completed_missions"] = json_wrapped_vector ( completed_missions ); - data["failed_missions"] = json_wrapped_vector ( failed_missions ); - - ptmpmap.clear(); - ptmpmap["squares_walked"] = pv( (*lifetime_stats()).squares_walked ); - ptmpmap["damage_taken"] = pv( (*lifetime_stats()).damage_taken ); - ptmpmap["damage_healed"] = pv( (*lifetime_stats()).damage_healed ); - ptmpmap["headshots"] = pv( (*lifetime_stats()).headshots ); - data["player_stats"] = pv (ptmpmap); - - if ( save_contents ) { - data["worn"] = json_save_worn(this); - data["inv"] = inv.json_save_items(); - data["invcache"] = inv.json_save_invcache(); - if (!weapon.is_null()) { - data["weapon"] = weapon.json_save(true); - } -//FIXME: seperate function, better still another file - /* for(int i = 0; i < memorial_log.size(); i++) { - ptmpvect.push_back(pv(memorial_log[i])); - } - data["memorial"]=pv(ptmpvect); -*/ - ptmpvect.clear(); - - } - return picojson::value(data); -} - -/* - * load player from ginormous json blob - */ -void player::json_load(picojson::value & parsed, game *g) { - if ( ! parsed.is() ) { - debugmsg("player::json_load: bad json:\n%s",parsed.serialize().c_str() ); - } - picojson::object &data = parsed.get(); - - json_load_common_variables( data ); - - std::string prof_ident="(null)"; - if ( picostring(data,"profession",prof_ident) && profession::exists(prof_ident) ) { - prof = profession::prof(prof_ident); - } else { - debugmsg("Tried to use non-existent profession '%s'", prof_ident.c_str()); - } - - picojson::object::iterator actfind = data.find("activity"); - if ( actfind != data.end() && actfind->second.is() ) { - activity.json_load( actfind->second ); - } - picojson::object::iterator backfind = data.find("backlog"); - if ( backfind != data.end() && backfind->second.is() ) { - - backlog.json_load( actfind->second ); - } - - picouint(data,"driving_recoil",driving_recoil); - picobool(data,"in_vehicle",in_vehicle); - picobool(data,"controlling_vehicle",controlling_vehicle); - - picopoint(data,"grab_point", grab_point); - std::string grab_typestr="OBJECT_NONE"; - if( grab_point.x != 0 || grab_point.y != 0 ) { - grab_typestr = "OBJECT_VEHICLE"; - picostring(data, "grab_type", grab_typestr); - } - - if ( obj_type_id.find(grab_typestr) != obj_type_id.end() ) { - grab_type = (object_type)obj_type_id[grab_typestr]; - } - - picoint(data, "blocks_left", blocks_left); - picoint(data, "focus_pool", focus_pool); - picostring(data, "style_selected", style_selected ); - - picoint(data, "health", health ); - - picojson::array * parray=pgetarray(data,"mutations"); - if ( parray != NULL ) { - for( picojson::array::const_iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - my_mutations.insert ( (*pt).get() ); - } else {} - } - } - set_highest_cat_level(); -// testme drench_mut_calc(); - - parray=pgetarray(data,"temp_cur"); - if ( parray != NULL && parray->size() == num_bp ) { - for(int i=0; i < num_bp; i++) { - temp_cur[i]=(int)parray->at(i).get(); - } - } else { - debugmsg("Error, incompatible temp_cur in save file %s",parray!=NULL ? pv( *parray ).serialize().c_str() : "(missing)" ); - } - - parray=pgetarray(data,"temp_conv"); - if ( parray != NULL && parray->size() == num_bp ) { - for(int i=0; i < num_bp; i++) { - temp_conv[i]=(int)parray->at(i).get(); - } - } else { - debugmsg("Error, incompatible temp_conv in save file %s",parray!=NULL ? pv( *parray ).serialize().c_str() : "(missing)" ); - } - - parray=pgetarray(data,"frostbite_timer"); - if ( parray != NULL && parray->size() == num_bp ) { - for(int i=0; i < num_bp; i++) { - frostbite_timer[i]=(int)parray->at(i).get(); - } - } else { - debugmsg("Error, incompatible frostbite_timer in save file %s",parray!=NULL ? pv( *parray ).serialize().c_str() : "(missing)" ); - } - - parray=pgetarray(data,"learned_recipes"); - if ( parray != NULL ) { - learned_recipes.clear(); - std::string pstr=""; - for( picojson::array::iterator pit = parray->begin(); pit != parray->end(); ++pit) { - if ( (*pit).is() ) { - pstr = (*pit).get(); - learned_recipes[ pstr ] = recipe_by_name( pstr ); - } - } - } - - // todo: morale_point::json_save/load - parray = pgetarray(data,"morale"); - if ( parray != NULL ) { - morale.clear(); - for( picojson::array::iterator pit = parray->begin(); pit != parray->end(); ++pit) { - if ( (*pit).is() ) { - picojson::object & pmorale = (*pit).get(); - int tmptype; - if ( picoint(pmorale,"type_enum", tmptype) ) { - morale_point tmpmorale; - std::string tmpitype; - tmpmorale.type = (morale_type)tmptype; - if (picostring(pmorale,"item_type",tmpitype) ) { - if ( g->itypes.find(tmpitype) != g->itypes.end()) { - tmpmorale.item_type = g->itypes[tmpitype]; - } - } - picoint(pmorale,"bonus",tmpmorale.bonus); - picoint(pmorale,"duration",tmpmorale.duration); - picoint(pmorale,"decay_start",tmpmorale.decay_start); - picoint(pmorale,"age",tmpmorale.age); - morale.push_back(tmpmorale); - } else debugmsg("Bad morale: %s", pv(pmorale).serialize().c_str() ); - } - } - } - - picoint(data, "active_mission", active_mission ); - - picovector(data, "active_missions", active_missions ); - picovector(data, "failed_missions", failed_missions ); - picovector(data, "completed_missions", completed_missions ); - - picojson::object * pmap=pgetmap(data,"player_stats"); - if ( pmap != NULL ) { - stats & pstats = *lifetime_stats(); - picoint(*pmap,"squares_walked", pstats.squares_walked ); - picoint(*pmap,"damage_taken", pstats.damage_taken ); - picoint(*pmap,"damage_healed", pstats.damage_healed ); - picoint(*pmap,"headshots", pstats.headshots ); - } - - inv.clear(); - if ( data.find("inv") != data.end() ) { - inv.json_load_items( data.find("inv")->second, g ); - } - - worn.clear(); - picojson::object::iterator wfind = data.find("worn"); - if ( wfind != data.end() && wfind->second.is() ) { - json_load_worn(wfind->second, this, g); - } - - weapon.contents.clear(); - if ( data.find("weapon") != data.end() ) { - weapon.json_load( data.find("weapon")->second, g ); - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// npc.h - -picojson::value npc_combat_rules::json_save() { - std::map data; - data["engagement"] = pv( (int)engagement ); - data["use_guns"] = pv( use_guns ); - data["use_grenades"] = pv( use_grenades ); - data["use_silent"] = pv( use_silent ); - //todo data["guard_pos"] = pv( guard_pos ); - return pv ( data ); -} - -bool npc_combat_rules::json_load(std::map & data) { - int tmpeng; - picoint(data,"engagement", tmpeng); - engagement = (combat_engagement)tmpeng; - picobool(data, "use_guns", use_guns); - picobool(data, "use_grenades", use_grenades); - picobool(data, "use_silent", use_silent); - return true; -} - -picojson::value npc_chatbin::json_save() { - std::map data; - data["first_topic"] = pv ( (int)first_topic ); - data["mission_selected"] = pv ( mission_selected ); - data["tempvalue"] = pv ( tempvalue ); //No clue what this value does, but it is used all over the place. So it is NOT temp. - if ( skill ) { - data["skill"] = pv ( skill->ident() ); - } - data["missions"] = json_wrapped_vector( missions ); - data["missions_assigned"] = json_wrapped_vector( missions_assigned ); - return pv ( data ); -} - -bool npc_chatbin::json_load(std::map & data) { - int tmptopic; - std::string skill_ident; - - picoint(data, "first_topic", tmptopic); - first_topic = talk_topic(tmptopic); - - if ( picostring(data, "skill", skill_ident) ) { - skill = Skill::skill(skill_ident); - } - - picoint(data, "tempvalue", tempvalue); - picoint(data, "mission_selected", mission_selected); - picovector(data, "missions", missions ); - picovector(data, "missions_assigned", missions_assigned ); - return true; -} - -void npc_personality::json_load(std::map & data) { - int tmpagg, tmpbrav, tmpcol, tmpalt; - if ( picoint(data,"aggression", tmpagg) && - picoint(data,"bravery", tmpbrav) && - picoint(data,"collector", tmpcol) && - picoint(data,"altruism", tmpalt) ) { - aggression=(signed char)tmpagg; - bravery=(signed char)tmpbrav; - collector=(signed char)tmpcol; - altruism=(signed char)tmpalt; - } else { - debugmsg("npc_personality: bad data"); - } -} - -picojson::value npc_personality::json_save() { - std::map data; - data["aggression"] = pv( (int)aggression ); - data["bravery"] = pv( (int)bravery ); - data["collector"] = pv( (int)collector ); - data["altruism"] = pv( (int)altruism ); - return pv( data ); -}; - -bool npc_opinion::json_load(std::map & data) { - picoint(data,"trust",trust); - picoint(data,"fear",fear); - picoint(data,"value",value); - picoint(data,"anger",anger); - picoint(data,"owed",owed); - picojson::array * parray=pgetarray(data,"favors"); - if ( parray != NULL ) { - favors.clear(); - for( picojson::array::iterator pfav = parray->begin(); pfav != parray->end(); ++pfav) { - if ( (*pfav).is() ) { - npc_favor tmpfavor; - tmpfavor.json_load( (*pfav).get() ); - favors.push_back( tmpfavor ); - } - } - } - return true; -} - -picojson::value npc_opinion::json_save() { - std::map data; - data["trust"] = pv( trust ); - data["fear"] = pv( fear ); - data["value"] = pv( value ); - data["anger"] = pv( anger ); - data["owed"] = pv( owed ); - if ( favors.size() > 0 ) { - std::vector fdata; - for (int i = 0; i < favors.size(); i++) { - fdata.push_back( favors[i].json_save() ); - } - data["favors"] = pv( fdata ); - } - return pv( data ); -} - -bool npc_favor::json_load(std::map & data) { - int tmptype, tmpskill; - std::string tmpitem, tmpskillstr; - if ( picoint(data,"type",tmptype) && - picoint(data,"value",value) && - picostring(data,"itype_id",tmpitem) ) { - type = npc_favor_type(tmptype); - item_id = tmpitem; - skill = NULL; - if ( picoint(data, "skill_id", tmpskill ) ) { - skill = Skill::skill(tmpskill); - } else if ( picostring(data, "skill_id", tmpskillstr ) ) { - skill = Skill::skill(tmpskillstr); - } - return true; - } else { - debugmsg("npc_favor::load: bad favor"); - return false; - } -} - -picojson::value npc_favor::json_save() { - std::map data; - data["type"] = pv( (int)type ); - data["value"] = pv( value ); - data["itype_id"] = pv( (std::string)item_id ); - if ( skill != NULL ) { - data["skill_id"] = pv( skill->ident() ); - } - return pv( data ); -} - -/* - * load npc - */ -void npc::json_load(picojson::value & parsed, game * g) { - if ( ! parsed.is() ) { - debugmsg("npc::json_load: bad json:\n%s",parsed.serialize().c_str() ); - } - picojson::object &data = parsed.get(); - - json_load_common_variables(data); - - int misstmp, classtmp, flagstmp, atttmp, tmpid; - - picoint(data,"id",tmpid); setID(tmpid); - picostring(data,"name",name); - picobool(data, "marked_for_death", marked_for_death); - picobool(data, "dead", dead); - if ( picoint(data, "myclass", classtmp) ) { - myclass = npc_class( classtmp ); - } - - picojson::object * pmap=pgetmap(data,"personality"); - if ( pmap != NULL ) { - personality.json_load( *pmap ); - } - - picoint(data,"wandx",wandx); - picoint(data,"wandy",wandy); - picoint(data,"wandf",wandf); - picoint(data,"omx",omx); - picoint(data,"omy",omy); - picoint(data,"omz",omz); - - picoint(data,"mapx",mapx); - picoint(data,"mapy",mapy); - - picoint(data,"plx",plx); - picoint(data,"ply",ply); - - picoint(data,"goalx",goalx); - picoint(data,"goaly",goaly); - picoint(data,"goalz",goalz); - - if ( picoint(data,"mission",misstmp) ) { - mission = npc_mission( misstmp ); - } - - - if ( picoint(data, "flags", flagstmp) ) { - flags = flagstmp; - } - if ( picoint(data, "attitude", atttmp) ) { - attitude = npc_attitude(atttmp); - } - - inv.clear(); - if ( data.find("inv") != data.end() ) { - inv.json_load_items( data.find("inv")->second, g ); - } - - worn.clear(); - picojson::object::iterator wfind = data.find("worn"); - if ( wfind != data.end() && wfind->second.is() ) { - json_load_worn(wfind->second, this, g); - } - - weapon.contents.clear(); - if ( data.find("weapon") != data.end() ) { - weapon.json_load( data.find("weapon")->second, g ); - } - - pmap=pgetmap(data,"op_of_u"); - if ( pmap != NULL ) { - op_of_u.json_load( *pmap ); - } - - pmap=pgetmap(data,"chatbin"); - if ( pmap != NULL ) { - chatbin.json_load( *pmap ); - } - - pmap=pgetmap(data,"combat_rules"); - if ( pmap != NULL ) { - combat_rules.json_load( *pmap ); - } -} - -/* - * save npc - */ -picojson::value npc::json_save(bool save_contents) { - std::map data; - std::vector ptmpvect; - std::map ptmpmap; - - json_save_common_variables( data ); - - data["name"] = pv( name ); - data["id"] = pv( getID() ); - data["marked_for_death"] = pv( marked_for_death ); - data["dead"] = pv( dead ); - data["patience"] = pv( patience ); - data["myclass"] = pv( (int)myclass ); - - data["personality"] = personality.json_save(); - data["wandx"] = pv( wandx ); - data["wandy"] = pv( wandy ); - data["wandf"] = pv( wandf ); - data["omx"] = pv( omx ); - data["omy"] = pv( omy ); - data["omz"] = pv( omz ); - - data["mapx"] = pv( mapx ); - data["mapy"] = pv( mapy ); - data["plx"] = pv( plx ); - data["ply"] = pv( ply ); - data["goalx"] = pv( goalx ); - data["goaly"] = pv( goaly ); - data["goalz"] = pv( goalz ); - - data["mission"] = pv( mission ); // todo: stringid - data["flags"] = pv( flags ); - if ( my_fac != NULL ) { // set in constructor - data["my_fac"] = pv ( my_fac->id ); - } - data["attitude"] = pv ( (int)attitude ); - data["op_of_u"] = op_of_u.json_save(); - data["chatbin"] = chatbin.json_save(); - data["combat_rules"] = combat_rules.json_save(); - - if ( save_contents ) { - data["worn"] = json_save_worn(this); - data["inv"] = inv.json_save_items(); - if (!weapon.is_null()) { - data["weapon"] = weapon.json_save(true); - } - } - - return pv( data ); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// inventory.h -/* - * Save invlet cache - */ -picojson::value inventory::json_save_invcache() const { - std::vector data; - std::map pent; // why? because picojson sorts maps. Derp. - std::vector pvect; - for( std::map >::const_iterator invlet_id = invlet_cache.begin(); invlet_id != invlet_cache.end(); ++invlet_id ) { - pent.clear(); - pvect.clear(); - for( std::vector::const_iterator sym = invlet_id->second.begin(); - sym != invlet_id->second.end(); ++sym ) { - pvect.push_back( pv ( int(*sym) ) ); - } - pent[invlet_id->first]=pv( pvect ); - data.push_back( pv ( pent ) ); - } - return pv( data ); -} - -/* - * Invlet cache: player specific, thus not wrapped in inventory::json_load/save - */ -void inventory::json_load_invcache(picojson::value & parsed) { - if ( ! parsed.is() ) { - debugmsg(": bad invcache json:\n%s",parsed.serialize().c_str() ); - } - picojson::array &data = parsed.get(); - for( picojson::array::const_iterator pit = data.begin(); pit != data.end(); ++pit) { - if ( (*pit).is() ) { - picojson::object pent = (*pit).get(); - picojson::object::const_iterator peit = pent.begin(); - if ( peit->second.is() ) { - picojson::array pvect = peit->second.get(); - std::vector vect; - for( picojson::array::const_iterator pvit = pvect.begin(); pvit != pvect.end(); ++pvit) { - vect.push_back ( char((*pvit).get()) ); - } - invlet_cache[ peit->first ] = vect; - } - } - } -} - -/* - * save all items. Just this->items, invlet cache saved seperately - */ -picojson::value inventory::json_save_items() const { - std::vector data; - for (invstack::const_iterator iter = items.begin(); iter != items.end(); ++iter) { - for (std::list::const_iterator stack_iter = iter->begin(); - stack_iter != iter->end(); - ++stack_iter) - { - data.push_back ( stack_iter->json_save(true) ); - } - } - return pv( data ); -} - - -void inventory::json_load_items(picojson::value & parsed, game * g) { - if ( ! parsed.is() ) { - debugmsg(": bad inventory json:\n%s",parsed.serialize().c_str() ); - } - picojson::array &data = parsed.get(); - for( picojson::array::iterator pit = data.begin(); pit != data.end(); ++pit) { - if ( (*pit).is() ) { - push_back( item( (*pit), g ) ); - } - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// monster.h - -bool monster::json_load(picojson::value parsed, std::vector *mtypes) -{ - - const picojson::object &data = parsed.get(); - - int iidtmp; - std::string sidtmp; - // load->str->int - if ( ! picostring(data, "typeid", sidtmp) ) { - // or load->int->str->possibly_shifted_int - picoint(data, "typeid", iidtmp); - sidtmp = legacy_mon_id[ iidtmp ]; - } - type = GetMType(sidtmp); - picoint(data, "posx", _posx); - picoint(data, "posy", _posy); - picoint(data, "wandx", wandx); - picoint(data, "wandy", wandy); - picoint(data, "wandf", wandf); - picoint(data, "moves", moves); - picoint(data, "speed", speed); - picoint(data, "hp", hp); - picoint(data, "sp_timeout", sp_timeout); - picoint(data, "friendly", friendly); - picoint(data, "faction_id", faction_id); - picoint(data, "mission_id", mission_id); - picobool(data, "no_extra_death_drops", no_extra_death_drops); - picobool(data, "dead", dead); - picoint(data, "anger", anger); - picoint(data, "morale", morale); - picobool(data, "hallucination", hallucination); - - plans.clear(); - picojson::object::const_iterator pvplans_it = data.find("plans"); - if ( pvplans_it != data.end() ) { - const picojson::array &pvplans = pvplans_it->second.get(); - for( picojson::array::const_iterator pvpoint = pvplans.begin(); pvpoint != pvplans.end(); ++pvpoint) { - if ( ! (*pvpoint).is() ) { - continue; - } - point ptmp; - if ( ! (*pvpoint).get()[0].is() || - ! (*pvpoint).get()[1].is() ) { - continue; - } - ptmp.x = int ( (*pvpoint).get()[0].get() ); - ptmp.y = int ( (*pvpoint).get()[1].get() ); - plans.push_back(ptmp); - } - } - - picojson::object::const_iterator pinv_it = data.find("inv"); - if ( pinv_it != data.end() ) { - picojson::array pinv = pinv_it->second.get(); - inv.clear(); - for( picojson::array::iterator pit = pinv.begin(); pit != pinv.end(); ++pit) { - if ( (*pit).is() ) { - inv.push_back( item( *pit, g ) ); - } - } - } - return true; -} - -void monster::json_load(picojson::value parsed, game * g) { - std::vector *mt=&(g->mtypes); - json_load(parsed, mt); -} - -/* - * Save, json ed; serialization that won't break as easily. In theory. - */ -picojson::value monster::json_save(bool save_contents) -{ - std::map data; - - data["typeid"] = pv( type->id ); - data["posx"] = pv(_posx); - data["posy"] = pv(_posy); - data["wandx"] = pv(wandx); - data["wandy"] = pv(wandy); - data["wandf"] = pv(wandf); - data["moves"] = pv(moves); - data["speed"] = pv(speed); - data["hp"] = pv(hp); - data["sp_timeout"] = pv(sp_timeout); - data["friendly"] = pv(friendly); - data["faction_id"] = pv(faction_id); - data["mission_id"] = pv(mission_id); - data["no_extra_death_drops"] = pv( no_extra_death_drops ); - data["dead"] = pv(dead); - data["anger"] = pv(anger); - data["morale"] = pv(morale); - data["hallucination"] = pv(hallucination); - - if ( plans.size() > 0 ) { - std::vector pvplans; - for(int i = 0; i < plans.size(); i++) { - std::vector pvpoint; - pvpoint.push_back( pv( (int)plans[i].x ) ); - pvpoint.push_back( pv( (int)plans[i].y ) ); - pvplans.push_back( pv ( pvpoint ) ); - } - data["plans"] = pv( pvplans ); - } - - if ( save_contents ) { - std::vector pinv; - for(int i=0;i(); - - std::string idtmp=""; - std::string ammotmp="null"; - int lettmp = 0; - std::string corptmp = "null"; - int damtmp = 0; - - if ( ! picostring(data, "typeid", idtmp) ) { - debugmsg("Invalid item type: %s ", parsed.serialize().c_str() ); - idtmp = "null"; - } - - picoint(data, "charges", charges); - picoint(data, "burnt", burnt); - picoint(data, "poison", poison); - picoint(data, "owned", owned); - - picoint(data, "bday", bday); - - picostring(data, "mode", mode); - picoint(data, "mission_id", mission_id); - picoint(data, "player_id", player_id); - - if (!picostring(data, "corpse", corptmp)){ - int ctmp = -1; - picoint(data, "corpse", ctmp); - if (ctmp != -1){ - corptmp = legacy_mon_id[ctmp]; - } - else{ - corptmp = "null"; - } - } - if (corptmp != "null") { - corpse = GetMType(corptmp); - } else { - corpse = NULL; - } - - make(g->itypes[idtmp]); - - if ( ! picostring(data, "name", name) ) { - name=type->name; - } - - picoint(data, "invlet", lettmp); - invlet = char(lettmp); - - picoint(data, "damage", damtmp); - damage = damtmp; // todo: check why this is done after make(), using a tmp variable - picobool(data, "active", active); - - - picostring(data, "curammo", ammotmp); - if ( ammotmp != "null" ) { - curammo = dynamic_cast(g->itypes[ammotmp]); - } else { - curammo = NULL; - } - - picojson::object::const_iterator ptagsfind = data.find("item_tags"); - if ( ptagsfind != data.end() && ptagsfind->second.is()) { - const picojson::array& ptags = ptagsfind->second.get(); - for( picojson::array::const_iterator ptagsit = ptags.begin(); ptagsit != ptags.end(); ++ptagsit) { - if ( (*ptagsit).is() ) { - item_tags.insert( (*ptagsit).get() ); - } - } - } - - picojson::object::const_iterator pvarsfind = data.find("item_vars"); - if ( pvarsfind != data.end() && pvarsfind->second.is() ) { - const picojson::object& pvars = pvarsfind->second.get(); - for( picojson::object::const_iterator pvarsit = pvars.begin(); pvarsit != pvars.end(); ++pvarsit) { - if ( pvarsit->second.is() ) { - item_vars[ pvarsit->first ] = pvarsit->second.get(); - } - } - } - - int tmplum=0; - if ( picoint(data,"light",tmplum) ) { - - light=nolight; - int tmpwidth=0; - int tmpdir=0; - - picoint(data,"light_width",tmpwidth); - picoint(data,"light_dir",tmpdir); - light.luminance = tmplum; - light.width = (short)tmpwidth; - light.direction = (short)tmpdir; - } - - picojson::object::iterator pcontfind = data.find("contents"); - if ( pcontfind != data.end() && pcontfind->second.is()) { - picojson::array& pcont = pcontfind->second.get(); - for( picojson::array::iterator pcit = pcont.begin(); pcit != pcont.end(); ++pcit) { - if ( (*pcit).is() ) { - contents.push_back( item( *pcit, g) ); - } - } - } - - return true; -} - -picojson::value item::json_save(bool save_contents) const -{ - std::map data; - ///// - if (type == NULL) { - debugmsg("Tried to save an item with NULL type!"); - } - itype_id ammotmp = "null"; - - /* TODO: This causes a segfault sometimes, even though we check to make sure - * curammo isn't NULL. The crashes seem to occur most frequently when saving an - * NPC, or when saving map data containing an item an NPC has dropped. - */ - if (curammo != NULL) { - ammotmp = curammo->id; - } - if( std::find(unreal_itype_ids.begin(), unreal_itype_ids.end(), - ammotmp) != unreal_itype_ids.end() && - std::find(artifact_itype_ids.begin(), artifact_itype_ids.end(), - ammotmp) != artifact_itype_ids.end() - ) { - ammotmp = "null"; //Saves us from some bugs, apparently? - } - - ///// - data["invlet"] = pv( int(invlet) ); - data["typeid"] = pv( typeId() ); - data["bday"] = pv( bday ); - - if ( charges != -1 ) data["charges"] = pv( int(charges) ); - if ( damage != 0 ) data["damage"] = pv( int(damage) ); - if ( burnt != 0 ) data["burnt"] = pv( burnt ); - if ( poison != 0 ) data["poison"] = pv( poison ); - if ( ammotmp != "null" ) data["curammo"] = pv( ammotmp ); - if ( mode != "NULL" ) data["mode"] = pv( mode ); - if ( active == true ) data["active"] = pv( true ); - if ( corpse != NULL ) data["corpse"] = pv( corpse->id ); - - if ( owned != -1 ) data["owned"] = pv( owned ); - if ( player_id != -1 ) data["player_id"] = pv( player_id ); - if ( mission_id != -1 ) data["mission_id"] = pv( mission_id ); - - if (!item_tags.empty()) { - std::vector pvtags; - for( std::set::const_iterator it = item_tags.begin(); - it != item_tags.end(); ++it ) { - pvtags.push_back( pv( *it ) ); - } - data["item_tags"] = pv ( pvtags ); - } - - if (!item_vars.empty()) { - std::map pvvars; - for( std::map::const_iterator it = item_vars.begin(); it != item_vars.end(); ++it ) { - pvvars[ std::string(it->first) ] = pv( it->second ); - } - data["item_vars"] = pv ( pvvars ); - } - - if ( name != type->name ) { - data["name"] = pv ( name ); - } - - if ( light.luminance != 0 ) { - data["light"] = pv( int(light.luminance) ); - if ( light.width != 0 ) { - data["light_width"] = pv( int(light.width) ); - data["light_dir"] = pv( int(light.direction) ); - } - } - - if ( save_contents && contents.size() > 0 ) { - std::vector pcontents; - for (int k = 0; k < contents.size(); k++) { - pcontents.push_back( contents[k].json_save(false) ); // no matryoshka dolls - } - data["contents"] = pv ( pcontents ); - pcontents.clear(); - } - - return picojson::value(data); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///// vehicle.h -/* - * Load vehicle from a json blob that might just exceed player in size. - */ -void vehicle::json_load(picojson::value & parsed, game * g ) { - if ( ! parsed.is() ) { - debugmsg("vehicle::json_load: bad json:\n%s",parsed.serialize().c_str() ); - } - picojson::object &data = parsed.get(); - - int fdir, mdir; - - picostring(data,"type",type); - picoint(data, "posx", posx); - picoint(data, "posy", posy); - picoint(data, "faceDir", fdir); - picoint(data, "moveDir", mdir); - picoint(data, "turn_dir", turn_dir); - picoint(data, "velocity", velocity); - picoint(data, "cruise_velocity", cruise_velocity); - picobool(data, "cruise_on", cruise_on); - picobool(data, "lights_on", lights_on); - //Handle old vehicles that don't have this flag - if(data.count("overhead_lights_on") > 0) { - picobool(data, "overhead_lights_on", overhead_lights_on); - } - picobool(data, "skidding", skidding); - picoint(data, "turret_mode", turret_mode); - picojson::object::const_iterator oftcit = data.find("of_turn_carry"); - if(oftcit != data.end() && oftcit->second.is() ) { - of_turn_carry = (float)oftcit->second.get(); - } - face.init (fdir); - move.init (mdir); - picostring(data,"name",name); - - parts.clear(); - - picojson::array * parray=pgetarray(data,"parts"); - if ( parray != NULL ) { - for( picojson::array::iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - std::map & pdata = (*pt).get(); - int intpid, pflag; - std::string pid; - if ( picoint(pdata, "id_enum", intpid) && intpid < 74 ) { - pid = legacy_vpart_id[intpid]; - } else { - picostring(pdata,"id",pid); - } - vehicle_part new_part; - new_part.id = pid; - - picoint(pdata, "mount_dx", new_part.mount_dx); - picoint(pdata, "mount_dy", new_part.mount_dy); - picoint(pdata, "hp", new_part.hp ); - picoint(pdata, "amount", new_part.amount ); - picoint(pdata, "blood", new_part.blood ); - picoint(pdata, "bigness", new_part.bigness ); - if ( picoint(pdata, "flags", pflag ) ) { - new_part.flags = pflag; - } - picoint(pdata, "passenger_id", new_part.passenger_id ); - - picojson::array * piarray=pgetarray(pdata,"items"); - new_part.items.clear(); - if ( piarray != NULL ) { - for( picojson::array::iterator pit = piarray->begin(); pit != piarray->end(); ++pit) { - if ( (*pit).is() ) { - new_part.items.push_back( item( *pit, g ) ); - } - } - } - parts.push_back (new_part); - } - } - parray = NULL; - } - /* After loading, check if the vehicle is from the old rules and is missing - * frames. */ - if ( savegame_loading_version < 11 ) { - add_missing_frames(); - } - find_horns (); - find_lights (); - find_fuel_tanks (); - find_exhaust (); - insides_dirty = true; - precalc_mounts (0, face.dir()); - parray = pgetarray(data,"tags"); - if ( parray != NULL ) { - for( picojson::array::iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - tags.insert( (*pt).get() ); - } - } - } - return; -} - - -picojson::value vehicle::json_save( bool save_contents ) { - std::map data; - data["type"] = pv ( type ); - data["posx"] = pv ( posx ); - data["posy"] = pv ( posy ); - data["faceDir"] = pv ( face.dir() ); - data["moveDir"] = pv ( move.dir() ); - data["turn_dir"] = pv ( turn_dir ); - data["velocity"] = pv ( velocity ); - data["cruise_velocity"] = pv ( cruise_velocity ); - - data["cruise_on"] = pv ( cruise_on ); - data["lights_on"] = pv ( lights_on ); - data["overhead_lights_on"] = pv (overhead_lights_on); - data["turret_mode"] = pv ( turret_mode ); - data["skidding"] = pv ( skidding ); - data["turret_mode"] = pv ( turret_mode ); - - data["of_turn_carry"] = pv ( of_turn_carry ); - data["name"] = pv ( name ); - - std::vector ptmpvec; - std::map pdata; - std::vector pitms; - for (int p = 0; p < parts.size(); p++) { - pdata["id"] = pv ( parts[p].id ); - pdata["mount_dx"] = pv ( parts[p].mount_dx ); - pdata["mount_dy"] = pv ( parts[p].mount_dy ); - pdata["hp"] = pv ( parts[p].hp ); - pdata["amount"] = pv ( parts[p].amount ); - pdata["blood"] = pv ( parts[p].blood ); - pdata["bigness"] = pv ( parts[p].bigness ); - pdata["flags"] = pv ( parts[p].flags ); - pdata["passenger_id"] = pv ( parts[p].passenger_id ); - if ( parts[p].items.size() > 0 ) { - for (int i = 0; i < parts[p].items.size(); i++) { - pitms.push_back( parts[p].items[i].json_save(true) ); - } - pdata["items"] = pv ( pitms ); - pitms.clear(); - } - ptmpvec.push_back( pv ( pdata ) ); - pdata.clear(); - } - data["parts"] = pv ( ptmpvec ); - ptmpvec.clear(); - - for( std::set::const_iterator it = tags.begin(); it != tags.end(); ++it ) { - ptmpvec.push_back( pv( *it ) ); - } - data["tags"] = pv ( ptmpvec ); - ptmpvec.clear(); - return pv( data ); -} - -////////////////// mission.h -//// -void mission::json_load(picojson::value parsed, game * g) { - if ( ! parsed.is() ) { - debugmsg("mission::json_load: bad json:\n%s",parsed.serialize().c_str() ); - } - picojson::object &data = parsed.get(); - int type_id, tmpfollow; - std::string rew_item, itemid; - // todo; if( picostring(data, "type_id", .... - picoint(data, "type_id", type_id); - type = &(g->mission_types[type_id]); - picostring(data, "description", description); - picobool(data, "failed", failed); - picoint(data, "value", value); - picojson::object * pobj=pgetmap(data,"reward"); - - if ( pobj != NULL ) { - reward.json_load( *pobj ); - } - - picoint(data, "uid", uid ); - picopoint(data, "target", target); - picoint(data, "follow_up", tmpfollow ); - follow_up = mission_id(tmpfollow); - picostring(data, "item_id", itemid); - item_id = itype_id(itemid); - picoint(data, "deadline", deadline ); - picoint(data, "step", step ); - picoint(data, "count", count ); - picoint(data, "npc_id", npc_id ); - picoint(data, "good_fac_id", good_fac_id ); - picoint(data, "bad_fac_id", bad_fac_id ); -} - -picojson::value mission::json_save(bool save_contents) { - std::map data; - data["type_id"] = pv(type == NULL ? -1 : (int)type->id); - data["description"] = pv ( description ); - data["failed"] = pv( failed ); - data["value"] = pv( value ); - data["reward"] = pv( reward.json_save() ); - data["uid"] = pv( uid ); - std::vector ptmp; - ptmp.push_back( pv( target.x ) ); - ptmp.push_back( pv( target.y ) ); - data["target"] = pv ( ptmp ); - data["count"] = pv( count ); - data["deadline"] = pv( deadline ); - data["npc_id"] = pv( npc_id ); - data["good_fac_id"] = pv( good_fac_id ); - data["bad_fac_id"] = pv( bad_fac_id ); - data["step"] = pv( step ); - data["follow_up"] = pv( (int)follow_up ); - return pv( data ); -} - -////////////////// faction.h -//// -void faction::json_load(picojson::value parsed, game * g) { - if ( ! parsed.is() ) { - debugmsg("mission::json_load: bad json:\n%s",parsed.serialize().c_str() ); - } - picojson::object &data = parsed.get(); - int valuetmp, goaltmp, jobtmp1, jobtmp2; - picoint(data, "id", id); - picoint(data, "goal", goaltmp ); - picoint(data, "values", valuetmp ); - picoint(data, "job1", jobtmp1 ); - picoint(data, "job2", jobtmp2 ); - values = valuetmp; - goal = faction_goal(goaltmp); - job1 = faction_job(jobtmp1); - job2 = faction_job(jobtmp2); - picoint(data, "likes_u", likes_u); - picoint(data, "respects_u", respects_u); - picobool(data, "known_by_u", known_by_u); - - picoint(data, "strength", strength); - picoint(data, "sneak", sneak); - picoint(data, "crime", crime); - picoint(data, "cult", cult); - picoint(data, "good", good); - picoint(data, "omx", omx); - picoint(data, "omy", omy); - picoint(data, "mapx", mapx); - picoint(data, "mapy", mapy); - picoint(data, "size", size); - picoint(data, "power", power); - picojson::array * parray = pgetarray(data,"opinion_of"); - for( picojson::array::iterator pt = parray->begin(); pt != parray->end(); ++pt) { - if ( (*pt).is() ) { - opinion_of.push_back( (int)(*pt).get() ); - } - } - picostring(data,"name",name); -} - -picojson::value faction::json_save(bool save_contents) { - std::map data; - data["id"] = pv( id ); - data["values"] = pv( (int)values ); - data["goal"] = pv( goal ); - data["job1"] = pv( job1 ); - data["job2"] = pv( job2 ); - data["likes_u"] = pv( likes_u ); - data["respects_u"] = pv( respects_u ); - data["known_by_u"] = pv( known_by_u ); - data["strength"] = pv( strength ); - data["sneak"] = pv( sneak ); - data["crime"] = pv( crime ); - data["cult"] = pv( cult ); - data["good"] = pv( good ); - data["omx"] = pv( omx ); - data["omy"] = pv( omy ); - data["mapx"] = pv( mapx ); - data["mapy"] = pv( mapy ); - data["size"] = pv( size ); - data["power"] = pv( power ); - data["opinion_of"] = json_wrapped_vector( opinion_of ); - data["name"] = pv (name); - return pv( data ); -} - diff --git a/settlement.cpp b/settlement.cpp deleted file mode 100644 index c9d69404f4241..0000000000000 --- a/settlement.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "settlement.h" -#include "game.h" -#include "output.h" -#include "line.h" -#include "rng.h" -#include - -settlement::settlement() -{ - fact.randomize(); - posx = 0; - posy = 0; - size = 0; - pop = 0; -/* - for (int i = 0; i < ot_wall - ot_set_house + 1; i++) - buildings[i] = 0; -*/ -} - -settlement::settlement(int mapx, int mapy) -{ - fact.randomize(); - posx = mapx; - posy = mapy; - size = 0; - pop = 0; -/* - for (int i = 0; i < ot_wall - ot_set_house + 1; i++) - buildings[i] = 0; -*/ -} - -void settlement::set_population() -{ - pop = rng(4, 40); - pop += rng(0, (fact.power - 20) / 6); - if (pop < 4) - pop = 4; -} - -int settlement::num(oter_id ter) -{ - return -1; -/* - if (ter < ot_set_house || ter > ot_wall) { - debugmsg("settlement::num requested bad oter_id (%s)", - oterlist[ter].name.c_str()); - return -1; - } - return buildings[ter - ot_set_house]; -*/ -} - -void settlement::add_building(oter_id ter) -{ - return; -/* - if (ter < ot_set_house || ter > ot_wall) - return; - buildings[ter - ot_set_house]++; -*/ -} - -std::ostream & operator<<(std::ostream & out, const settlement & s) -{ - out << "settlement("; - out << "faction?, posx: " << s.posx << ", "; - out << "posy: " << s.posy << ", "; - out << "pop: " << s.pop << ", "; - out << "size: " << s.size << ")"; - return out; -} diff --git a/settlement.h b/settlement.h deleted file mode 100644 index 7a05f0fc13bcb..0000000000000 --- a/settlement.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _SETTLEMENT_H_ -#define _SETTLEMENT_H_ - -#include "npc.h" -#include "overmap.h" -#include "faction.h" -#include - -struct settlement { - settlement(); - settlement(int mapx, int mapy); - void pick_faction(game *g, int omx, int omy); - void set_population(); - void populate(game *g) { }; - - int num(oter_id ter); - void add_building(oter_id ter); - - - faction fact; - int posx; - int posy; - int pop; - int size; - //int buildings[ot_wall - ot_set_house + 1]; -}; - -std::ostream & operator<<(std::ostream &, const settlement &); - -#endif diff --git a/SDLMain.h b/src/SDLMain.h similarity index 100% rename from SDLMain.h rename to src/SDLMain.h diff --git a/SDLMain.m b/src/SDLMain.m similarity index 100% rename from SDLMain.m rename to src/SDLMain.m diff --git a/action.cpp b/src/action.cpp similarity index 96% rename from action.cpp rename to src/action.cpp index 8bfc93d3d3397..bc5e64c6cfbd0 100644 --- a/action.cpp +++ b/src/action.cpp @@ -662,7 +662,7 @@ std::string press_x(action_id act, std::string key_bound_pre, std::string key_bo return key_unbound; } else { std::string keyed = key_bound_pre.append(""); - for (int j = 0; j < keys.size(); j++) { + for (unsigned j = 0; j < keys.size(); j++) { if (keys[j] == '\'' || keys[j] == '"'){ if (j < keys.size() - 1) { keyed += keys[j]; keyed += _(" or "); @@ -695,7 +695,7 @@ std::string press_x(action_id act, std::string act_desc) return act_desc; } else { std::string keyed = (""); - for (int j = 0; j < keys.size(); j++) { + for (unsigned j = 0; j < keys.size(); j++) { if (tolower(keys[j])==zing) { if (z_ing) { keyed.replace(1,1,1,act_desc.at(0)); @@ -758,3 +758,23 @@ std::string press_x(action_id act, std::string act_desc) } } +action_id get_movement_direction_from_delta(const int dx, const int dy) +{ + if (dx == 0 && dy == -1) { + return ACTION_MOVE_N; + } else if (dx == 1 && dy == -1) { + return ACTION_MOVE_NE; + } else if (dx == 1 && dy == 0) { + return ACTION_MOVE_E; + } else if (dx == 1 && dy == 1) { + return ACTION_MOVE_SE; + } else if (dx == 0 && dy == 1) { + return ACTION_MOVE_S; + } else if (dx == -1 && dy == 1) { + return ACTION_MOVE_SW; + } else if (dx == -1 && dy == 0) { + return ACTION_MOVE_W; + } else { + return ACTION_MOVE_NW; + } +} diff --git a/action.h b/src/action.h similarity index 94% rename from action.h rename to src/action.h index e288f5192f364..fb9d366b0c92e 100644 --- a/action.h +++ b/src/action.h @@ -120,5 +120,7 @@ std::string press_x(action_id act, std::string key_bound_pre, // ('Z'ing|zing) (X( or Y))) std::string press_x(action_id act, std::string act_desc); +// Helper function to convert co-ordinate delta to a movement direction +action_id get_movement_direction_from_delta(const int dx, const int dy); #endif diff --git a/addiction.cpp b/src/addiction.cpp similarity index 100% rename from addiction.cpp rename to src/addiction.cpp diff --git a/addiction.h b/src/addiction.h similarity index 100% rename from addiction.h rename to src/addiction.h diff --git a/advanced_inv.cpp b/src/advanced_inv.cpp similarity index 99% rename from advanced_inv.cpp rename to src/advanced_inv.cpp index 7fdb1a1ec254b..6b2493e4fd84c 100644 --- a/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -324,7 +324,7 @@ void advanced_inv_update_area( advanced_inv_area &area, game *g ) { area.max_size = MAX_ITEM_IN_VEHICLE_STORAGE; area.max_volume = area.veh->max_volume(area.vstor); } else { - area.canputitems=(!(g->m.has_flag("NOITEM",u.posx+area.offx,u.posy+area.offy)) && !(g->m.has_flag("SEALED",u.posx+area.offx,u.posy+area.offy) )); + area.canputitems = g->m.can_put_items(u.posx+area.offx, u.posy+area.offy); area.size = g->m.i_at(u.posx+area.offx,u.posy+area.offy).size(); area.max_size = MAX_ITEM_IN_SQUARE; area.max_volume = g->m.max_volume(u.posx+area.offx,u.posy+area.offy); @@ -469,7 +469,7 @@ void advanced_inventory::recalc_pane(int i) if(panes[i].area == isinventory) { const invslice & stacks = u.inv.slice(0, u.inv.size()); - for( int x = 0; x < stacks.size(); ++x ) { + for (unsigned x = 0; x < stacks.size(); ++x ) { item &item = stacks[x]->front(); advanced_inv_listitem it; it.name = item.tname(g); @@ -525,7 +525,7 @@ void advanced_inventory::recalc_pane(int i) std::vector& items = squares[s].vstor >= 0 ? squares[s].veh->parts[squares[s].vstor].items : m.i_at(squares[s].x , squares[s].y ); - for(int x = 0; x < items.size() ; x++) { + for (unsigned x = 0; x < items.size(); x++) { advanced_inv_listitem it; it.idx = x; it.name = items[x].tname(g); diff --git a/advanced_inv.h b/src/advanced_inv.h similarity index 100% rename from advanced_inv.h rename to src/advanced_inv.h diff --git a/animation_curses.cpp b/src/animation_curses.cpp similarity index 94% rename from animation_curses.cpp rename to src/animation_curses.cpp index b727aa5723e12..0eef336360b07 100644 --- a/animation_curses.cpp +++ b/src/animation_curses.cpp @@ -58,6 +58,7 @@ void game::draw_hit_mon(int x, int y, monster m, bool dead) /* Player hit animation */ void game::draw_hit_player(player *p, bool dead) { + (void)dead; //unused hit_animation(POSX + (p->posx - (u.posx + u.view_offset_x)), POSY + (p->posy - (u.posy + u.view_offset_y)), red_background(p->color()), '@'); @@ -68,7 +69,7 @@ void game::draw_line(const int x, const int y, const point center_point, std::ve { if (u_see( x, y)) { - for (int i = 0; i < ret.size(); i++) + for (unsigned i = 0; i < ret.size(); i++) { int mondex = mon_at(ret[i].x, ret[i].y), npcdex = npc_at(ret[i].x, ret[i].y); @@ -91,7 +92,9 @@ void game::draw_line(const int x, const int y, const point center_point, std::ve } void game::draw_line(const int x, const int y, std::vector vPoint) { - for (int i = 1; i < vPoint.size(); i++) + (void)x; //unused + (void)y; //unused + for (unsigned i = 1; i < vPoint.size(); i++) { m.drawsq(w_terrain, u, vPoint[i-1].x, vPoint[i-1].y, true, true); } @@ -113,10 +116,10 @@ void game::draw_weather(weather_printable wPrint) // draws footsteps that have been created by monsters moving about void game::draw_footsteps() { - for (int i = 0; i < footsteps.size(); i++) { + for (unsigned i = 0; i < footsteps.size(); i++) { if (!u_see(footsteps_source[i]->posx(),footsteps_source[i]->posy())) { std::vector unseen_points; - for (int j = 0; j < footsteps[i].size(); j++) { + for (unsigned j = 0; j < footsteps[i].size(); j++) { if (!u_see(footsteps[i][j].x,footsteps[i][j].y)) { unseen_points.push_back(point(footsteps[i][j].x, footsteps[i][j].y)); diff --git a/animation_tiles.cpp b/src/animation_tiles.cpp similarity index 99% rename from animation_tiles.cpp rename to src/animation_tiles.cpp index c94beab387038..aad1757d05be8 100644 --- a/animation_tiles.cpp +++ b/src/animation_tiles.cpp @@ -41,6 +41,8 @@ void game::draw_explosion(int x, int y, int radius, nc_color col) // need to have a version where there is no player defined, possibly. That way shrapnel works as intended void game::draw_bullet(player &p, int tx, int ty, int i, std::vector trajectory, char bullet_char, timespec &ts) { + (void)i; //unused + (void)trajectory; //unused if (u_see(tx, ty)) { std::string bullet;// = "animation_bullet_normal"; switch(bullet_char) @@ -94,6 +96,7 @@ void game::draw_hit_mon(int x, int y, monster m, bool dead) /* Player hit animation */ void game::draw_hit_player(player *p, bool dead) { + (void)dead; //unused if (use_tiles) { // get base name of player id diff --git a/artifact.cpp b/src/artifact.cpp similarity index 81% rename from artifact.cpp rename to src/artifact.cpp index 20f2096647a07..b48c0372b4eb7 100644 --- a/artifact.cpp +++ b/src/artifact.cpp @@ -1,8 +1,13 @@ -#include -#include -#include "game.h" #include "artifact.h" -#include "artifactdata.h" + +#include "itype.h" +#include "output.h" // string_format +#include "json.h" + +#include +#include +#include +#include std::vector fill_good_passive(); std::vector fill_bad_passive(); @@ -101,7 +106,7 @@ std::string artifact_adj[NUM_ART_ADJS]; std::string artifact_noun[NUM_ART_NOUNS]; std::string artifact_name(std::string type); -void game::init_artifacts() +void init_artifacts() { artifact_shape_datum tmp_artifact_shape_data[ARTSHAPE_MAX] = { {"BUG", "BUG", 0, 0, 0, 0}, @@ -266,7 +271,7 @@ void game::init_artifacts() {_("Heavy"), 0,1400, 10, 20, 0, 0, -2, 0, ""}, {_("Knobbed"), 1,250, 14, 30, 0, 0, -1, 1, ""}, {_("Spiked"), 1,100, 0, 0, 20, 40, -1, 1, "SPEAR"}, - {_("Edged"), 2,450, 0, 0, 20, 50, -1, 2, ""}, + {_("Edged"), 2,450, 0, 0, 20, 50, -1, 2, "CHOP"}, {_("Bladed"), 1,2250, 0, 0, 12, 30, -1, 1, "STAB"} }; for(int i=0;icharge_type = ARTC_NULL; // 1 in 8 chance that it can't recharge! art->id = itypes.size(); - + itypes[art->id]=art; artifact_itype_ids.push_back(art->id); return art; @@ -612,7 +617,7 @@ itype* game::new_artifact() } } -itype* game::new_natural_artifact(artifact_natural_property prop) +itype* new_natural_artifact(itypemap &itypes, artifact_natural_property prop) { // Natural artifacts are always tools. it_artifact_tool *art = new it_artifact_tool(); @@ -771,273 +776,206 @@ std::string artifact_name(std::string type) } -void game::process_artifact(item *it, player *p, bool wielded) -{ - std::vector effects; - if (it->is_armor()) { - it_artifact_armor* armor = dynamic_cast(it->type); - effects = armor->effects_worn; - } else if (it->is_tool()) { - it_artifact_tool* tool = dynamic_cast(it->type); - effects = tool->effects_carried; - if (wielded) { - for (int i = 0; i < tool->effects_wielded.size(); i++) - effects.push_back(tool->effects_wielded[i]); - } -// Recharge it if necessary - if (it->charges < tool->max_charges) { - switch (tool->charge_type) { - case ARTC_TIME: - if (turn.seconds() == 0 && turn.minutes() == 0) // Once per hour - it->charges++; - break; - case ARTC_SOLAR: - if (turn.seconds() == 0 && turn.minutes() % 10 == 0 && - is_in_sunlight(p->posx, p->posy)) - it->charges++; - break; - case ARTC_PAIN: - if (turn.seconds() == 0) { - add_msg(_("You suddenly feel sharp pain for no reason.")); - p->pain += 3 * rng(1, 3); - it->charges++; - } - break; - case ARTC_HP: - if (turn.seconds() == 0) { - add_msg(_("You feel your body decaying.")); - p->hurtall(1); - it->charges++; - } - break; - } - } - } +/* Json Loading and saving */ - for (int i = 0; i < effects.size(); i++) { - switch (effects[i]) { - case AEP_STR_UP: - p->str_cur += 4; - break; - case AEP_DEX_UP: - p->dex_cur += 4; - break; - case AEP_PER_UP: - p->per_cur += 4; - break; - case AEP_INT_UP: - p->int_cur += 4; - break; - case AEP_ALL_UP: - p->str_cur += 2; - p->dex_cur += 2; - p->per_cur += 2; - p->int_cur += 2; - break; - case AEP_SPEED_UP: // Handled in player::current_speed() - break; - - case AEP_IODINE: - if (p->radiation > 0) - p->radiation--; - break; - - case AEP_SMOKE: - if (one_in(10)) { - int x = p->posx + rng(-1, 1), y = p->posy + rng(-1, 1); - if (m.add_field(this, x, y, fd_smoke, rng(1, 3))) - add_msg(_("The %s emits some smoke."), it->tname().c_str()); - } - break; - - case AEP_SNAKES: - break; // Handled in player::hit() - - case AEP_EXTINGUISH: - for (int x = p->posx - 1; x <= p->posx + 1; x++) { - for (int y = p->posy - 1; y <= p->posy + 1; y++) { - m.adjust_field_age(point(x,y), fd_fire, -1); +void load_artifacts(const std::string &artfilename, itypemap &itypes) +{ + std::ifstream file_test(artfilename.c_str(), + std::ifstream::in | std::ifstream::binary); + if (!file_test.good()) { + file_test.close(); + return; } - } - - case AEP_HUNGER: - if (one_in(100)) - p->hunger++; - break; - case AEP_THIRST: - if (one_in(120)) - p->thirst++; - break; - - case AEP_EVIL: - if (one_in(150)) { // Once every 15 minutes, on average - p->add_disease("evil", 300); - if (!wielded && !it->is_armor()) - add_msg((it->is_armor() ? _("You have an urge to wear the %s.") : _("You have an urge to wield the %s.")), it->tname().c_str()); - } - break; - - case AEP_SCHIZO: - break; // Handled in player::suffer() - - case AEP_RADIOACTIVE: - if (one_in(4)) - p->radiation++; - break; + try { + load_artifacts_from_ifstream(&file_test, itypes); + } catch (std::string e) { + debugmsg("%s: %s", artfilename.c_str(), e.c_str()); + } - case AEP_STR_DOWN: - p->str_cur -= 3; - break; + file_test.close(); +} - case AEP_DEX_DOWN: - p->dex_cur -= 3; - break; +void load_artifacts_from_ifstream(std::ifstream *f, itypemap &itypes) +{ + // delete current artefact ids + artifact_itype_ids.clear(); + // read and create artifacts from json array in artifacts.gsav + JsonIn artifact_json(f); + artifact_json.start_array(); + while (!artifact_json.end_array()) { + JsonObject jo = artifact_json.get_object(); + std::string type = jo.get_string("type"); + std::string id = jo.get_string("id"); + if (type == "artifact_tool") { + it_artifact_tool *art = new it_artifact_tool(jo); + itypes[id] = art; + artifact_itype_ids.push_back(id); + } else if (type == "artifact_armor") { + it_artifact_armor *art = new it_artifact_armor(jo); + itypes[id] = art; + artifact_itype_ids.push_back(id); + } else { + throw jo.line_number() + ": unrecognized artifact type."; + } + } +} - case AEP_PER_DOWN: - p->per_cur -= 3; - break; - case AEP_INT_DOWN: - p->int_cur -= 3; - break; +void it_artifact_tool::deserialize(JsonObject &jo) +{ + id = jo.get_string("id"); + name = jo.get_string("name"); + description = jo.get_string("description"); + sym = jo.get_int("sym"); + color = int_to_color(jo.get_int("color")); + price = jo.get_int("price"); + m1 = jo.get_string("m1"); + m2 = jo.get_string("m2"); + volume = jo.get_int("volume"); + weight = jo.get_int("weight"); + melee_dam = jo.get_int("melee_dam"); + melee_cut = jo.get_int("melee_cut"); + m_to_hit = jo.get_int("m_to_hit"); + item_tags = jo.get_tags("item_flags"); + + max_charges = jo.get_int("max_charges"); + def_charges = jo.get_int("def_charges"); + charges_per_use = jo.get_int("charges_per_use"); + turns_per_charge = jo.get_int("turns_per_charge"); + ammo = jo.get_string("ammo"); + revert_to = jo.get_string("revert_to"); + + charge_type = (art_charge)jo.get_int("charge_type"); + + JsonArray ja = jo.get_array("effects_wielded"); + while (ja.has_more()) { + effects_wielded.push_back((art_effect_passive)ja.next_int()); + } - case AEP_ALL_DOWN: - p->str_cur -= 2; - p->dex_cur -= 2; - p->per_cur -= 2; - p->int_cur -= 2; - break; + ja = jo.get_array("effects_activated"); + while (ja.has_more()) { + effects_activated.push_back((art_effect_active)ja.next_int()); + } - case AEP_SPEED_DOWN: - break; // Handled in player::current_speed() - } - } + ja = jo.get_array("effects_carried"); + while (ja.has_more()) { + effects_carried.push_back((art_effect_passive)ja.next_int()); + } } -void game::add_artifact_messages(std::vector effects) +void it_artifact_armor::deserialize(JsonObject &jo) { - int net_str = 0, net_dex = 0, net_per = 0, net_int = 0, net_speed = 0; - for (int i = 0; i < effects.size(); i++) { - switch (effects[i]) { - case AEP_STR_UP: net_str += 4; break; - case AEP_DEX_UP: net_dex += 4; break; - case AEP_PER_UP: net_per += 4; break; - case AEP_INT_UP: net_int += 4; break; - case AEP_ALL_UP: net_str += 2; - net_dex += 2; - net_per += 2; - net_int += 2; break; - case AEP_STR_DOWN: net_str -= 3; break; - case AEP_DEX_DOWN: net_dex -= 3; break; - case AEP_PER_DOWN: net_per -= 3; break; - case AEP_INT_DOWN: net_int -= 3; break; - case AEP_ALL_DOWN: net_str -= 2; - net_dex -= 2; - net_per -= 2; - net_int -= 2; break; - - case AEP_SPEED_UP: net_speed += 20; break; - case AEP_SPEED_DOWN: net_speed -= 20; break; - - case AEP_IODINE: - break; // No message - - case AEP_SNAKES: - add_msg(_("Your skin feels slithery.")); - break; - - case AEP_INVISIBLE: - add_msg(_("You fade into invisibility!")); - break; - - case AEP_CLAIRVOYANCE: - add_msg(_("You can see through walls!")); - break; - - case AEP_SUPER_CLAIRVOYANCE: - add_msg(_("You can see through everything!")); - break; - - case AEP_STEALTH: - add_msg(_("Your steps stop making noise.")); - break; - - case AEP_GLOW: - add_msg(_("A glow of light forms around you.")); - break; - - case AEP_PSYSHIELD: - add_msg(_("Your mental state feels protected.")); - break; - - case AEP_RESIST_ELECTRICITY: - add_msg(_("You feel insulated.")); - break; - - case AEP_CARRY_MORE: - add_msg(_("Your back feels strengthened.")); - break; - - case AEP_HUNGER: - add_msg(_("You feel hungry.")); - break; - - case AEP_THIRST: - add_msg(_("You feel thirsty.")); - break; - - case AEP_EVIL: - add_msg(_("You feel an evil presence...")); - break; - - case AEP_SCHIZO: - add_msg(_("You feel a tickle of insanity.")); - break; - - case AEP_RADIOACTIVE: - add_msg(_("Your skin prickles with radiation.")); - break; - - case AEP_MUTAGENIC: - add_msg(_("You feel your genetic makeup degrading.")); - break; - - case AEP_ATTENTION: - add_msg(_("You feel an otherworldly attention upon you...")); - break; - - case AEP_FORCE_TELEPORT: - add_msg(_("You feel a force pulling you inwards.")); - break; - - case AEP_MOVEMENT_NOISE: - add_msg(_("You hear a rattling noise coming from inside yourself.")); - break; - - case AEP_BAD_WEATHER: - add_msg(_("You feel storms coming.")); - break; - } - } - - std::string stat_info = ""; - if (net_str != 0) { - stat_info += string_format(_("Str %s%d! "), (net_str > 0 ? "+" : ""), net_str); - } - if (net_dex != 0) { - stat_info += string_format( _("Dex %s%d! "), (net_dex > 0 ? "+" : ""), net_dex); - } - if (net_int != 0) { - stat_info += string_format(_("Int %s%d! "), (net_int > 0 ? "+" : ""), net_int); - } - if (net_per != 0) { - stat_info += string_format(_("Per %s%d! "), (net_per > 0 ? "+" : ""), net_per); - } + id = jo.get_string("id"); + name = jo.get_string("name"); + description = jo.get_string("description"); + sym = jo.get_int("sym"); + color = int_to_color(jo.get_int("color")); + price = jo.get_int("price"); + m1 = jo.get_string("m1"); + m2 = jo.get_string("m2"); + volume = jo.get_int("volume"); + weight = jo.get_int("weight"); + melee_dam = jo.get_int("melee_dam"); + melee_cut = jo.get_int("melee_cut"); + m_to_hit = jo.get_int("m_to_hit"); + item_tags = jo.get_tags("item_flags"); + + covers = jo.get_int("covers"); + encumber = jo.get_int("encumber"); + coverage = jo.get_int("coverage"); + thickness = jo.get_int("material_thickness"); + env_resist = jo.get_int("env_resist"); + warmth = jo.get_int("warmth"); + storage = jo.get_int("storage"); + power_armor = jo.get_bool("power_armor"); + + JsonArray ja = jo.get_array("effects_worn"); + while (ja.has_more()) { + effects_worn.push_back((art_effect_passive)ja.next_int()); + } +} - if (stat_info.length() > 0) - add_msg(stat_info.c_str()); +void it_artifact_tool::serialize(JsonOut &json) const +{ + json.start_object(); + + json.member("type", "artifact_tool"); + + // generic data + json.member("id", id); + json.member("name", name); + json.member("description", description); + json.member("sym", sym); + json.member("color", color_to_int(color)); + json.member("price", price); + json.member("m1", m1); + json.member("m2", m2); + json.member("volume", volume); + json.member("weight", weight); + json.member("melee_dam", melee_dam); + json.member("melee_cut", melee_cut); + json.member("m_to_hit", m_to_hit); + + json.member("item_flags", item_tags); + json.member("techniques", techniques); + + // tool data + json.member("ammo", ammo); + json.member("max_charges", max_charges); + json.member("def_charges", def_charges); + json.member("charges_per_use", charges_per_use); + json.member("turns_per_charge", turns_per_charge); + json.member("revert_to", revert_to); + + // artifact data + json.member("charge_type", charge_type); + json.member("effects_wielded", effects_wielded); + json.member("effects_activated", effects_activated); + json.member("effects_carried", effects_carried); + + json.end_object(); +} - if (net_speed != 0) - add_msg(_("Speed %s%d! "), (net_speed > 0 ? "+" : ""), net_speed); +void it_artifact_armor::serialize(JsonOut &json) const +{ + json.start_object(); + + json.member("type", "artifact_armor"); + + // generic data + json.member("id", id); + json.member("name", name); + json.member("description", description); + json.member("sym", sym); + json.member("color", color_to_int(color)); + json.member("price", price); + json.member("m1", m1); + json.member("m2", m2); + json.member("volume", volume); + json.member("weight", weight); + json.member("id", id); + json.member("melee_dam", melee_dam); + json.member("melee_cut", melee_cut); + json.member("m_to_hit", m_to_hit); + + json.member("item_flags", item_tags); + + json.member("techniques", techniques); + + // armor data + json.member("covers", covers); + json.member("encumber", encumber); + json.member("coverage", coverage); + json.member("material_thickness", thickness); + json.member("env_resist", env_resist); + json.member("warmth", warmth); + json.member("storage", storage); + json.member("power_armor", power_armor); + + // artifact data + json.member("effects_worn", effects_worn); + + json.end_object(); } + diff --git a/src/artifact.h b/src/artifact.h new file mode 100644 index 0000000000000..7aa8cce91ed3c --- /dev/null +++ b/src/artifact.h @@ -0,0 +1,354 @@ +#ifndef _ARTIFACT_H_ +#define _ARTIFACT_H_ + +#include "itype.h" +#include "json.h" + +#include +#include +#include + +enum art_effect_passive { + AEP_NULL = 0, +// Good + AEP_STR_UP, // Strength + 4 + AEP_DEX_UP, // Dexterity + 4 + AEP_PER_UP, // Perception + 4 + AEP_INT_UP, // Intelligence + 4 + AEP_ALL_UP, // All stats + 2 + AEP_SPEED_UP, // +20 speed + AEP_IODINE, // Reduces radiation + AEP_SNAKES, // Summons friendly snakes when you're hit + AEP_INVISIBLE, // Makes you invisible + AEP_CLAIRVOYANCE, // See through walls + AEP_SUPER_CLAIRVOYANCE, // See through walls to a great distance + AEP_STEALTH, // Your steps are quieted + AEP_EXTINGUISH, // May extinguish nearby flames + AEP_GLOW, // Four-tile light source + AEP_PSYSHIELD, // Protection from stare attacks + AEP_RESIST_ELECTRICITY, // Protection from electricity + AEP_CARRY_MORE, // Increases carrying capacity by 200 + AEP_SAP_LIFE, // Killing non-zombie monsters may heal you +// Splits good from bad + AEP_SPLIT, +// Bad + AEP_HUNGER, // Increases hunger + AEP_THIRST, // Increases thirst + AEP_SMOKE, // Emits smoke occasionally + AEP_EVIL, // Addiction to the power + AEP_SCHIZO, // Mimicks schizophrenia + AEP_RADIOACTIVE, // Increases your radiation + AEP_MUTAGENIC, // Mutates you slowly + AEP_ATTENTION, // Draws netherworld attention slowly + AEP_STR_DOWN, // Strength - 3 + AEP_DEX_DOWN, // Dex - 3 + AEP_PER_DOWN, // Per - 3 + AEP_INT_DOWN, // Int - 3 + AEP_ALL_DOWN, // All stats - 2 + AEP_SPEED_DOWN, // -20 speed + AEP_FORCE_TELEPORT, // Occasionally force a teleport + AEP_MOVEMENT_NOISE, // Makes noise when you move + AEP_BAD_WEATHER, // More likely to experience bad weather + AEP_SICK, // Decreases health + + NUM_AEPS +}; + +extern int passive_effect_cost[NUM_AEPS]; + +enum art_effect_active { + AEA_NULL = 0, + + AEA_STORM, // Emits shock fields + AEA_FIREBALL, // Targeted + AEA_ADRENALINE, // Adrenaline rush + AEA_MAP, // Maps the area around you + AEA_BLOOD, // Shoots blood all over + AEA_FATIGUE, // Creates interdimensional fatigue + AEA_ACIDBALL, // Targeted acid + AEA_PULSE, // Destroys adjacent terrain + AEA_HEAL, // Heals minor damage + AEA_CONFUSED, // Confuses all monsters in view + AEA_ENTRANCE, // Chance to make nearby monsters friendly + AEA_BUGS, // Chance to summon friendly insects + AEA_TELEPORT, // Teleports you + AEA_LIGHT, // Temporary light source + AEA_GROWTH, // Grow plants, a la triffid queen + AEA_HURTALL, // Hurts all monsters! + + AEA_SPLIT, // Split between good and bad + + AEA_RADIATION, // Spew radioactive gas + AEA_PAIN, // Increases player pain + AEA_MUTATE, // Chance of mutation + AEA_PARALYZE, // You lose several turns + AEA_FIRESTORM, // Spreads minor fire all around you + AEA_ATTENTION, // Attention from sub-prime denizens + AEA_TELEGLOW, // Teleglow disease + AEA_NOISE, // Loud noise + AEA_SCREAM, // Noise & morale penalty + AEA_DIM, // Darkens the sky slowly + AEA_FLASH, // Flashbang + AEA_VOMIT, // User vomits + AEA_SHADOWS, // Summon shadow creatures + + NUM_AEAS +}; + +extern int active_effect_cost[NUM_AEAS]; + +enum art_charge +{ + ARTC_NULL, // Never recharges! + ARTC_TIME, // Very slowly recharges with time + ARTC_SOLAR, // Recharges in sunlight + ARTC_PAIN, // Creates pain to recharge + ARTC_HP, // Drains HP to recharge + NUM_ARTCS +}; + +enum artifact_natural_shape +{ + ARTSHAPE_NULL, + ARTSHAPE_SPHERE, + ARTSHAPE_ROD, + ARTSHAPE_TEARDROP, + ARTSHAPE_LAMP, + ARTSHAPE_SNAKE, + ARTSHAPE_DISC, + ARTSHAPE_BEADS, + ARTSHAPE_NAPKIN, + ARTSHAPE_URCHIN, + ARTSHAPE_JELLY, + ARTSHAPE_SPIRAL, + ARTSHAPE_PIN, + ARTSHAPE_TUBE, + ARTSHAPE_PYRAMID, + ARTSHAPE_CRYSTAL, + ARTSHAPE_KNOT, + ARTSHAPE_CRESCENT, + ARTSHAPE_MAX +}; + +enum artifact_natural_property +{ + ARTPROP_NULL, + ARTPROP_WRIGGLING, // + ARTPROP_GLOWING, // + ARTPROP_HUMMING, // + ARTPROP_MOVING, // + ARTPROP_WHISPERING, // + ARTPROP_BREATHING, // + ARTPROP_DEAD, // + ARTPROP_ITCHY, // + ARTPROP_GLITTERING, // + ARTPROP_ELECTRIC, // + ARTPROP_SLIMY, // + ARTPROP_ENGRAVED, // + ARTPROP_CRACKLING, // + ARTPROP_WARM, // + ARTPROP_RATTLING, // + ARTPROP_SCALED, + ARTPROP_FRACTAL, + ARTPROP_MAX +}; + +struct artifact_shape_datum +{ + std::string name; + std::string desc; + int volume_min, volume_max; + int weight_min, weight_max; +}; + +extern artifact_shape_datum artifact_shape_data[ARTSHAPE_MAX]; + +struct artifact_property_datum +{ + std::string name; + std::string desc; + art_effect_passive passive_good[4]; + art_effect_passive passive_bad[4]; + art_effect_active active_good[4]; + art_effect_active active_bad[4]; +}; + +extern artifact_property_datum artifact_property_data[ARTPROP_MAX]; + +enum artifact_weapon_type +{ + ARTWEAP_NULL, + ARTWEAP_BULK, // A bulky item that works okay for bashing + ARTWEAP_CLUB, // An item designed to bash + ARTWEAP_SPEAR, // A stab-only weapon + ARTWEAP_SWORD, // A long slasher + ARTWEAP_KNIFE, // Short, slash and stab + NUM_ARTWEAPS +}; + +struct artifact_tool_form_datum +{ + std::string name; + char sym; + nc_color color; + std::string m1; + std::string m2; + int volume_min, volume_max; + int weight_min, weight_max; + artifact_weapon_type base_weapon; + artifact_weapon_type extra_weapons[3]; +}; + +enum artifact_tool_form +{ + ARTTOOLFORM_NULL, + ARTTOOLFORM_HARP, + ARTTOOLFORM_STAFF, + ARTTOOLFORM_SWORD, + ARTTOOLFORM_KNIFE, + ARTTOOLFORM_CUBE, + NUM_ARTTOOLFORMS +}; + +extern artifact_tool_form_datum artifact_tool_form_data[NUM_ARTTOOLFORMS]; + +struct artifact_weapon_datum +{ + std::string adjective; + int volume, weight; // Only applicable if this is an *extra* weapon + int bash_min, bash_max; + int cut_min, cut_max; + int to_hit_min, to_hit_max; + std::string tag; +}; + +extern artifact_weapon_datum artifact_weapon_data[NUM_ARTWEAPS]; + +enum artifact_armor_mod +{ + ARMORMOD_NULL, + ARMORMOD_LIGHT, + ARMORMOD_BULKY, + ARMORMOD_POCKETED, + ARMORMOD_FURRED, + ARMORMOD_PADDED, + ARMORMOD_PLATED, + NUM_ARMORMODS +}; + +struct artifact_armor_form_datum +{ + std::string name; + nc_color color; + std::string m1; + std::string m2; + int volume, weight; + int encumb; + int coverage; + int thickness; + int env_resist; + int warmth; + int storage; + int melee_bash, melee_cut, melee_hit; + unsigned char covers; + bool plural; + artifact_armor_mod available_mods[5]; +}; + +enum artifact_armor_form +{ + ARTARMFORM_NULL, + ARTARMFORM_ROBE, + ARTARMFORM_COAT, + ARTARMFORM_MASK, + ARTARMFORM_HELM, + ARTARMFORM_GLOVES, + ARTARMFORM_BOOTS, + ARTARMFORM_RING, + NUM_ARTARMFORMS +}; + +extern artifact_armor_form_datum artifact_armor_form_data[NUM_ARTARMFORMS]; + +/* Armor mods alter the normal values of armor. + * If the basic armor type has "null" as its second material, and the mod has a + * material attached, the second material will be changed. + */ +extern artifact_armor_form_datum artifact_armor_mod_data[NUM_ARMORMODS]; + +#define NUM_ART_ADJS 20 +extern std::string artifact_adj[NUM_ART_ADJS]; + +#define NUM_ART_NOUNS 20 +extern std::string artifact_noun[NUM_ART_NOUNS]; + + +/* CLASSES */ + +class it_artifact_tool : public it_tool, public JsonSerializer, public JsonDeserializer +{ +public: + art_charge charge_type; + std::vector effects_wielded; + std::vector effects_activated; + std::vector effects_carried; + + bool is_artifact() { return true; } + + using JsonSerializer::serialize; + void serialize(JsonOut &json) const; + using JsonDeserializer::deserialize; + void deserialize(JsonObject &jo); + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + deserialize(jo); + } + + it_artifact_tool(JsonObject &jo) : it_tool() { deserialize(jo); }; + + it_artifact_tool() : it_tool() { + ammo = "NULL"; + price = 0; + def_charges = 0; + charges_per_use = 1; + charge_type = ARTC_NULL; + turns_per_charge = 0; + revert_to = "null"; + use = &iuse::artifact; + }; +}; + +class it_artifact_armor : public it_armor, public JsonSerializer, public JsonDeserializer +{ +public: + std::vector effects_worn; + + bool is_artifact() { return true; } + + using JsonSerializer::serialize; + void serialize(JsonOut &json) const; + using JsonDeserializer::deserialize; + void deserialize(JsonObject &jo); + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + deserialize(jo); + } + + it_artifact_armor(JsonObject &jo) : it_armor() { deserialize(jo); }; + it_artifact_armor() : it_armor() { price = 0; }; +}; + + +/* FUNCTIONS */ + +typedef std::map itypemap; + +void init_artifacts(); +itype* new_artifact(itypemap &itypes); +itype* new_natural_artifact(itypemap &itypes, artifact_natural_property prop = ARTPROP_NULL); + +// note: needs to be called by main() before MAPBUFFER.load +void load_artifacts(const std::string &filename, itypemap &itypes); +void load_artifacts_from_ifstream(std::ifstream *f, itypemap &itypes); + +#endif diff --git a/auto_pickup.cpp b/src/auto_pickup.cpp similarity index 97% rename from auto_pickup.cpp rename to src/auto_pickup.cpp index fdfca0707c71b..ec4b1e534cbc4 100644 --- a/auto_pickup.cpp +++ b/src/auto_pickup.cpp @@ -319,7 +319,7 @@ void test_pattern(int iCurrentPage, int iCurrentLine) //Loop through all itemfactory items //TODO: somehow generate damaged, fitting or container items - for (int i = 0; i < standard_itype_ids.size(); i++) { + for (unsigned i = 0; i < standard_itype_ids.size(); i++) { sItemName = item_controller->find_template(standard_itype_ids[i])->name; if (vAutoPickupRules[iCurrentPage][iCurrentLine].bActive && auto_pickup_match(sItemName, vAutoPickupRules[iCurrentPage][iCurrentLine].sRule)) { vMatchingItems.push_back(sItemName); @@ -489,8 +489,8 @@ void merge_vector() { vAutoPickupRules[0].clear(); - for (int i=1; i <= 2; i++) { //Loop through global 1 and character 2 - for (int j=0; j < vAutoPickupRules[i].size(); j++) { + for (unsigned i = 1; i <= 2; i++) { //Loop through global 1 and character 2 + for (unsigned j = 0; j < vAutoPickupRules[i].size(); j++) { if (vAutoPickupRules[i][j].sRule != "") { vAutoPickupRules[0].push_back(cPickupRules(vAutoPickupRules[i][j].sRule, vAutoPickupRules[i][j].bActive, vAutoPickupRules[i][j].bExclude)); } @@ -500,7 +500,7 @@ void merge_vector() bool hasPickupRule(std::string sRule) { - for (int i = 0; i < vAutoPickupRules[2].size(); i++) { + for (unsigned i = 0; i < vAutoPickupRules[2].size(); i++) { if (sRule.length() == (vAutoPickupRules[2][i].sRule).length() && ci_find_substr(sRule, vAutoPickupRules[2][i].sRule) != -1) { return true; } @@ -518,7 +518,7 @@ void addPickupRule(std::string sRule) void removePickupRule(std::string sRule) { - for (int i = 0; i < vAutoPickupRules[2].size(); i++) { + for (unsigned i = 0; i < vAutoPickupRules[2].size(); i++) { if (sRule.length() == (vAutoPickupRules[2][i].sRule).length() && ci_find_substr(sRule, vAutoPickupRules[2][i].sRule) != -1) { vAutoPickupRules[2].erase(vAutoPickupRules[2].begin() + i); merge_vector(); @@ -536,7 +536,7 @@ void createPickupRules(const std::string sItemNameIn) std::string sItemName = ""; - for (int iPattern = 0; iPattern < vAutoPickupRules[0].size(); iPattern++) { //Includes only + for (unsigned iPattern = 0; iPattern < vAutoPickupRules[0].size(); iPattern++) { //Includes only if (!vAutoPickupRules[0][iPattern].bExclude) { if (sItemNameIn != "") { if (vAutoPickupRules[0][iPattern].bActive && auto_pickup_match(sItemNameIn, vAutoPickupRules[0][iPattern].sRule)) { @@ -545,7 +545,7 @@ void createPickupRules(const std::string sItemNameIn) } } else { //Check include paterns against all itemfactory items - for (int i = 0; i < standard_itype_ids.size(); i++) { + for (unsigned i = 0; i < standard_itype_ids.size(); i++) { sItemName = item_controller->find_template(standard_itype_ids[i])->name; if (vAutoPickupRules[0][iPattern].bActive && auto_pickup_match(sItemName, vAutoPickupRules[0][iPattern].sRule)) { mapAutoPickupItems[sItemName] = "true"; @@ -555,7 +555,7 @@ void createPickupRules(const std::string sItemNameIn) } } - for (int iPattern = 0; iPattern < vAutoPickupRules[0].size(); iPattern++) { //Excludes only + for (unsigned iPattern = 0; iPattern < vAutoPickupRules[0].size(); iPattern++) { //Excludes only if (vAutoPickupRules[0][iPattern].bExclude) { if (sItemNameIn != "") { if (vAutoPickupRules[0][iPattern].bActive && auto_pickup_match(sItemNameIn, vAutoPickupRules[0][iPattern].sRule)) { @@ -578,7 +578,7 @@ void save_reset_changes(bool bReset) { for (int i=1; i <= 2; i++) { //Loop through global 1 and character 2 vAutoPickupRules[i + ((bReset) ? 0: 2)].clear(); - for (int j=0; j < vAutoPickupRules[i + ((bReset) ? 2: 0)].size(); j++) { + for (unsigned j=0; j < vAutoPickupRules[i + ((bReset) ? 2: 0)].size(); j++) { if (vAutoPickupRules[i + ((bReset) ? 2: 0)][j].sRule != "") { vAutoPickupRules[i + ((bReset) ? 0: 2)].push_back(cPickupRules(vAutoPickupRules[i + ((bReset) ? 2: 0)][j].sRule, vAutoPickupRules[i + ((bReset) ? 2: 0)][j].bActive, vAutoPickupRules[i + ((bReset) ? 2: 0)][j].bExclude)); } @@ -628,7 +628,7 @@ void save_auto_pickup(bool bCharacter) } fout << auto_pickup_header(bCharacter) << std::endl; - for(int i = 0; i < vAutoPickupRules[(bCharacter) ? 2 : 1].size(); i++) { + for (unsigned i = 0; i < vAutoPickupRules[(bCharacter) ? 2 : 1].size(); i++) { fout << vAutoPickupRules[(bCharacter) ? 2 : 1][i].sRule << ";"; fout << (vAutoPickupRules[(bCharacter) ? 2 : 1][i].bActive ? "T" : "F") << ";"; fout << (vAutoPickupRules[(bCharacter) ? 2 : 1][i].bExclude ? "T" : "F"); @@ -710,7 +710,7 @@ bool auto_pickup_match(std::string sText, std::string sPattern) return false; } - for (int i=0; i < vPattern.size(); i++) { + for (unsigned i=0; i < vPattern.size(); i++) { if (i==0 && vPattern[i] != "") { //beginning: ^vPat[i] if (sText.length() < vPattern[i].length() || ci_find_substr(sText.substr(0, vPattern[i].length()), vPattern[i]) == -1) { //debugmsg(("1: sText: " + sText + " | sPattern: ^" + vPattern[i] + " | no match").c_str()); diff --git a/auto_pickup.h b/src/auto_pickup.h similarity index 100% rename from auto_pickup.h rename to src/auto_pickup.h diff --git a/basecamp.cpp b/src/basecamp.cpp similarity index 100% rename from basecamp.cpp rename to src/basecamp.cpp diff --git a/basecamp.h b/src/basecamp.h similarity index 100% rename from basecamp.h rename to src/basecamp.h diff --git a/bionics.cpp b/src/bionics.cpp similarity index 91% rename from bionics.cpp rename to src/bionics.cpp index f30514e7e931a..97d8470d2e6a4 100644 --- a/bionics.cpp +++ b/src/bionics.cpp @@ -85,7 +85,7 @@ void player::power_bionics(game *g) mvwputch(wBio, DESCRIPTION_LINE_Y, 0, c_ltgray, LINE_XXXO); // |- mvwputch(wBio, DESCRIPTION_LINE_Y, 79, c_ltgray, LINE_XOXX); // -| - for (int i = 0; i < my_bionics.size(); i++) { + for (unsigned i = 0; i < my_bionics.size(); i++) { if (!bionics[my_bionics[i].id]->activated) passive.push_back(my_bionics[i]); else @@ -94,7 +94,7 @@ void player::power_bionics(game *g) nc_color type; if (!passive.empty()) { mvwprintz(wBio, 3, 1, c_ltblue, _("Passive:")); - for (int i = 0; i < passive.size(); i++) { + for (unsigned i = 0; i < passive.size(); i++) { if (bionics[passive[i].id]->power_source) type = c_ltcyan; else @@ -105,7 +105,7 @@ void player::power_bionics(game *g) } if (!active.empty()) { mvwprintz(wBio, 3, 33, c_ltblue, _("Active:")); - for (int i = 0; i < active.size(); i++) { + for (unsigned i = 0; i < active.size(); i++) { if (active[i].powered && !bionics[active[i].id]->power_source) type = c_red; else if (bionics[active[i].id]->power_source && !active[i].powered) @@ -139,7 +139,7 @@ void player::power_bionics(game *g) } else if (ch == ' ') ch = KEY_ESCAPE; else if (ch != KEY_ESCAPE) { - for (int i = 0; i < my_bionics.size(); i++) { + for (unsigned i = 0; i < my_bionics.size(); i++) { if (ch == my_bionics[i].invlet) { tmp = &my_bionics[i]; b = i; @@ -304,7 +304,7 @@ void player::activate_bionic(int b, game *g) if (good.empty() && bad.empty()) mvwprintz(w, 1, 1, c_white, _("No effects.")); else { - for (int line = 1; line < 39 && line <= good.size() + bad.size(); line++) { + for (unsigned line = 1; line < 39 && line <= good.size() + bad.size(); line++) { if (line <= bad.size()) mvwprintz(w, line, 1, c_red, bad[line - 1].c_str()); else @@ -317,6 +317,7 @@ void player::activate_bionic(int b, game *g) delwin(w); } else if(bio.id == "bio_blood_filter"){ rem_disease("fungus"); + rem_disease("dermatik"); rem_disease("poison"); rem_disease("pkill1"); rem_disease("pkill2"); @@ -336,7 +337,7 @@ void player::activate_bionic(int b, game *g) pkill = 0; stim = 0; } else if(bio.id == "bio_evap"){ - item water = item(g->itypes["water_clean"], 0); + item water = item(itypes["water_clean"], 0); if (g->handle_liquid(water, true, true)) { moves -= 100; @@ -359,6 +360,19 @@ void player::activate_bionic(int b, game *g) power_level += bionics["bio_lighter"]->power_cost; } + } if(bio.id == "bio_geiger"){ + g->add_msg(_("Your radiation level: %d"), radiation); + + + + } if(bio.id == "bio_radscrubber"){ + if (radiation > 4){ + g->add_msg(_("You activate your radiation scrubber system.")); + radiation -= 5; + } else { + g->add_msg(_("You activate your radiation scrubber system.")); + radiation = 0; + } } else if(bio.id == "bio_claws"){ if (weapon.type->id == "bio_claws_weapon") { g->add_msg(_("You withdraw your claws.")); @@ -367,25 +381,25 @@ void player::activate_bionic(int b, game *g) g->add_msg(_("Your claws extend, forcing you to drop your %s."), weapon.tname().c_str()); g->m.add_item_or_charges(posx, posy, weapon); - weapon = item(g->itypes["bio_claws_weapon"], 0); + weapon = item(itypes["bio_claws_weapon"], 0); weapon.invlet = '#'; } else { g->add_msg(_("Your claws extend!")); - weapon = item(g->itypes["bio_claws_weapon"], 0); + weapon = item(itypes["bio_claws_weapon"], 0); weapon.invlet = '#'; } } else if(bio.id == "bio_blaster"){ tmp_item = weapon; - weapon = item(g->itypes["bio_blaster_gun"], 0); - weapon.curammo = dynamic_cast(g->itypes["generic_no_ammo"]); + weapon = item(itypes["bio_blaster_gun"], 0); + weapon.curammo = dynamic_cast(itypes["generic_no_ammo"]); weapon.charges = 1; g->refresh_all(); g->plfire(false); weapon = tmp_item; } else if (bio.id == "bio_laser"){ tmp_item = weapon; - weapon = item(g->itypes["bio_laser_gun"], 0); - weapon.curammo = dynamic_cast(g->itypes["generic_no_ammo"]); + weapon = item(itypes["bio_laser_gun"], 0); + weapon.curammo = dynamic_cast(itypes["generic_no_ammo"]); weapon.charges = 1; g->refresh_all(); g->plfire(false); @@ -401,7 +415,7 @@ void player::activate_bionic(int b, game *g) g->add_msg(_("Your muscles hiss as hydraulic strength fills them!")); } else if (bio.id == "bio_water_extractor"){ bool extracted = false; - for (int i = 0; i < g->m.i_at(posx, posy).size(); i++) { + for (unsigned i = 0; i < g->m.i_at(posx, posy).size(); i++) { item & tmp = g->m.i_at(posx, posy)[i]; if (tmp.type->id == "corpse" ) { int avail=0; @@ -411,7 +425,7 @@ void player::activate_bionic(int b, game *g) avail = tmp.volume() / 2; } if(avail > 0 && query_yn(_("Extract water from the %s"), tmp.tname().c_str())) { - item water = item(g->itypes["water_clean"], 0); + item water = item(itypes["water_clean"], 0); if (g->handle_liquid(water, true, true)) { moves -= 100; } else if (query_yn(_("Drink directly from the condensor?"))) { @@ -440,7 +454,7 @@ void player::activate_bionic(int b, game *g) traj = line_to(i, j, posx, posy, 0); } traj.insert(traj.begin(), point(i, j)); - for (int k = 0; k < g->m.i_at(i, j).size(); k++) { + for (unsigned k = 0; k < g->m.i_at(i, j).size(); k++) { if (g->m.i_at(i, j)[k].made_of("iron") || g->m.i_at(i, j)[k].made_of("steel")){ int l = 0; tmp_item = g->m.i_at(i, j)[k]; @@ -486,8 +500,8 @@ void player::activate_bionic(int b, game *g) g->add_msg_if_player(this,_("You unleash a powerful shockwave!")); } else if(bio.id == "bio_chain_lightning"){ tmp_item = weapon; - weapon = item(g->itypes["bio_lightning"], 0); - weapon.curammo = dynamic_cast(g->itypes["generic_no_ammo"]); + weapon = item(itypes["bio_lightning"], 0); + weapon.curammo = dynamic_cast(itypes["generic_no_ammo"]); weapon.charges = 1; g->refresh_all(); g->plfire(false); diff --git a/bionics.h b/src/bionics.h similarity index 68% rename from bionics.h rename to src/bionics.h index 10432aa83f325..d1b5452697303 100644 --- a/bionics.h +++ b/src/bionics.h @@ -25,7 +25,8 @@ class bionic_data { bool faulty; // Whether or not the bionic is faulty }; -struct bionic { +struct bionic : public JsonSerializer, public JsonDeserializer +{ bionic_id id; char invlet; bool powered; @@ -41,6 +42,23 @@ struct bionic { powered = false; charge = 0; }; + using JsonSerializer::serialize; + void serialize(JsonOut &json) const { + json.start_object(); + json.member("id", id); + json.member("invlet", (int)invlet); + json.member("powered", powered); + json.member("charge", charge); + json.end_object(); + } + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + id = jo.get_string("id"); + invlet = jo.get_int("invlet"); + powered = jo.get_bool("powered"); + charge = jo.get_int("charge"); + } }; extern std::map bionics; diff --git a/bodypart.cpp b/src/bodypart.cpp similarity index 100% rename from bodypart.cpp rename to src/bodypart.cpp diff --git a/bodypart.h b/src/bodypart.h similarity index 100% rename from bodypart.h rename to src/bodypart.h diff --git a/calendar.cpp b/src/calendar.cpp similarity index 100% rename from calendar.cpp rename to src/calendar.cpp diff --git a/calendar.h b/src/calendar.h similarity index 100% rename from calendar.h rename to src/calendar.h diff --git a/cata_tiles.cpp b/src/cata_tiles.cpp similarity index 63% rename from cata_tiles.cpp rename to src/cata_tiles.cpp index acf73ec06f568..5b6e48314b63a 100644 --- a/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -10,13 +10,13 @@ // SDL headers end up in different places depending on the OS, sadly #if (defined SDLTILES) - #if (defined _WIN32 || defined WINDOWS) - #include "SDL_image.h" // Make sure to add this to the other OS inclusions - #elif (defined OSX_SDL_FW) - #include "SDL_image/SDL_image.h" // Make sure to add this to the other OS inclusions - #else - #include "SDL/SDL_image.h" // Make sure to add this to the other OS inclusions - #endif +#if (defined _WIN32 || defined WINDOWS) +#include "SDL_image.h" // Make sure to add this to the other OS inclusions +#elif (defined OSX_SDL_FW) +#include "SDL_image/SDL_image.h" // Make sure to add this to the other OS inclusions +#else +#include "SDL/SDL_image.h" // Make sure to add this to the other OS inclusions +#endif #endif #define ITEM_HIGHLIGHT "highlight_item" @@ -53,44 +53,37 @@ cata_tiles::cata_tiles() sight_impaired = false; bionight_bionic_active = false; - last_pos_x = 0; last_pos_y = 0; + last_pos_x = 0; + last_pos_y = 0; } cata_tiles::~cata_tiles() { //dtor // free surfaces - if (buffer) - { + if (buffer) { SDL_FreeSurface(buffer); } - if (tile_atlas) - { + if (tile_atlas) { SDL_FreeSurface(tile_atlas); } // release maps - if (tile_values) - { - for (tile_iterator it = tile_values->begin(); it != tile_values->end(); ++it) - { + if (tile_values) { + for (tile_iterator it = tile_values->begin(); it != tile_values->end(); ++it) { it->second = NULL; } tile_values->clear(); tile_values = NULL; } - if (tile_ids) - { - for (tile_id_iterator it = tile_ids->begin(); it != tile_ids->end(); ++it) - { + if (tile_ids) { + for (tile_id_iterator it = tile_ids->begin(); it != tile_ids->end(); ++it) { it->second = NULL; } tile_ids->clear(); tile_ids = NULL; } - if (screen_tiles) - { - for (int i = 0; i < num_tiles; ++i) - { + if (screen_tiles) { + for (int i = 0; i < num_tiles; ++i) { delete &(screen_tiles[i]); } screen_tiles = NULL; @@ -99,7 +92,7 @@ cata_tiles::~cata_tiles() void cata_tiles::init(SDL_Surface *screen, std::string json_path, std::string tileset_path) { - if (screen){ + if (screen) { display_screen = screen; } // load files @@ -134,17 +127,17 @@ void cata_tiles::get_tile_information(std::string dir_path, std::string &json_pa std::vector files; files = file_finder::get_files_from_path(filename, dir_path, true); // search for the files (tileset.txt) - for(std::vector::iterator it = files.begin(); it !=files.end(); ++it) { // iterate through every file found + for(std::vector::iterator it = files.begin(); it != files.end(); ++it) { // iterate through every file found std::ifstream fin; fin.open(it->c_str()); if(!fin.is_open()) { fin.close(); - DebugLog() << "\tCould not read ."<<*it<<" -- Setting to default values!\n"; + DebugLog() << "\tCould not read ." << *it << " -- Setting to default values!\n"; json_path = default_json; tileset_path = default_tileset; return; } -// should only have 2 values inside it, otherwise is going to only load the last 2 values + // should only have 2 values inside it, otherwise is going to only load the last 2 values while(!fin.eof()) { std::string sOption; fin >> sOption; @@ -155,42 +148,33 @@ void cata_tiles::get_tile_information(std::string dir_path, std::string &json_pa getline(fin, sOption); } else { - if (sOption.find("NAME") != std::string::npos) - { + if (sOption.find("NAME") != std::string::npos) { std::string tileset_name; tileset_name = ""; fin >> tileset_name; - if(tileset_name != OPTIONS["TILES"].getValue()) // if the current tileset name isn't the same - { // as the current one in the options break + if(tileset_name != OPTIONS["TILES"].getValue()) { // if the current tileset name isn't the same + // as the current one in the options break break; // out of the while loop, close the file and } // continue with the next file - } - else if (sOption.find("VIEW") != std::string::npos) // we don't need the view name here - { + } else if (sOption.find("VIEW") != std::string::npos) { // we don't need the view name here getline(fin, sOption); // so we just skip it - } - else if (sOption.find("JSON") != std::string::npos) - { + } else if (sOption.find("JSON") != std::string::npos) { fin >> json_path; - DebugLog() << "\tJSON path set to [" << json_path <<"].\n"; - } - else if (sOption.find("TILESET") != std::string::npos) - { + DebugLog() << "\tJSON path set to [" << json_path << "].\n"; + } else if (sOption.find("TILESET") != std::string::npos) { fin >> tileset_path; - DebugLog() << "\tTILESET path set to [" << tileset_path <<"].\n"; + DebugLog() << "\tTILESET path set to [" << tileset_path << "].\n"; } } } fin.close(); } - if (json_path == "") - { + if (json_path == "") { json_path = default_json; DebugLog() << "\tJSON set to default [" << json_path << "].\n"; } - if (tileset_path == "") - { + if (tileset_path == "") { tileset_path = default_tileset; DebugLog() << "\tTILESET set to default [" << tileset_path << "].\n"; } @@ -198,30 +182,28 @@ void cata_tiles::get_tile_information(std::string dir_path, std::string &json_pa void cata_tiles::load_tileset(std::string path) { - /** release buffer from memory if it has already been initialized */ - if (buffer) - { + /* release buffer from memory if it has already been initialized */ + if (buffer) { SDL_FreeSurface(buffer); } - /** release tile_atlas from memory if it has already been initialized */ - if (tile_atlas) - { + /* release tile_atlas from memory if it has already been initialized */ + if (tile_atlas) { SDL_FreeSurface(tile_atlas); } - /* release stored rectangles */ - if (tile_values){ - for (tile_iterator it = tile_values->begin(); it != tile_values->end(); ++it){ + /* release stored tiles */ + if (tile_values) { + for (tile_iterator it = tile_values->begin(); it != tile_values->end(); ++it) { delete it->second; } tile_values->clear(); } - /** create the buffer screen */ + /* create the buffer screen */ buffer = SDL_AllocSurface(SDL_SWSURFACE, WindowWidth, WindowHeight, 32, 0xff0000, 0xff00, 0xff, 0); screentile_height = WindowHeight / tile_height; screentile_width = WindowWidth / tile_width; -DebugLog() << "Buffer Surface-- Width: " << buffer->w << " Height: " << buffer->h << "\n"; + DebugLog() << "Buffer Surface-- Width: " << buffer->w << " Height: " << buffer->h << "\n"; /** reinit tile_atlas */ tile_atlas = IMG_Load(path.c_str()); if(!tile_atlas) { @@ -230,8 +212,7 @@ DebugLog() << "Buffer Surface-- Width: " << buffer->w << " Height: " << buffer-> } /** Check to make sure the tile_atlas loaded correctly, will be NULL if didn't load */ - if (tile_atlas) - { + if (tile_atlas) { /** get dimensions of the atlas image */ int w = tile_atlas->w; int h = tile_atlas->h; @@ -242,27 +223,36 @@ DebugLog() << "Buffer Surface-- Width: " << buffer->w << " Height: " << buffer-> sx *= tile_width; sy *= tile_height; + // set up initial source and destination information. Destination is going to be unchanging + SDL_Rect *source_rect = new SDL_Rect(), *dest_rect = new SDL_Rect(); + source_rect->w = dest_rect->w = tile_width; + source_rect->h = dest_rect->h = tile_height; + source_rect->x = 0; + dest_rect->x = 0; + source_rect->y = 0; + dest_rect->y = 0; + /** split the atlas into tiles using SDL_Rect structs instead of slicing the atlas into individual surfaces */ int tilecount = 0; - for (int y = 0; y < sy; y += tile_height) - { - for (int x = 0; x < sx; x += tile_width) - { - SDL_Rect *this_tile = new SDL_Rect(); - - this_tile->w = tile_width; - this_tile->h = tile_height; - this_tile->x = x; - this_tile->y = y; - - if (!tile_values) - { + for (int y = 0; y < sy; y += tile_height) { + for (int x = 0; x < sx; x += tile_width) { + source_rect->x = x; + source_rect->y = y; + + // make new surface to place the tile onto + // REALLY hacky workaround, but without it the tile's alpha channel is missing. + // Approximately as fast as creating and then blitting manually + SDL_Surface *new_tile = rotate_tile(tile_atlas, source_rect, 0); + if (!tile_values) { tile_values = new tile_map; } - (*tile_values)[tilecount++] = this_tile; + (*tile_values)[tilecount++] = new_tile; } } + // release source and destination rectangles + delete source_rect; + delete dest_rect; DebugLog() << "Tiles Created: " << tilecount << "\n"; } } @@ -292,16 +282,15 @@ void cata_tiles::load_tilejson_from_file(std::ifstream *f) // it's all one json object JsonObject config = config_json.get_object(); - if (tile_ids){ - for (tile_id_iterator it = tile_ids->begin(); it != tile_ids->end(); ++it){ + if (tile_ids) { + for (tile_id_iterator it = tile_ids->begin(); it != tile_ids->end(); ++it) { delete it->second; } tile_ids->clear(); } /** 1) Make sure that the loaded file has the "tile_info" section */ - if (!config.has_member("tile_info")) - { + if (!config.has_member("tile_info")) { throw (std::string)"ERROR: \"tile_info\" missing\n"; } @@ -313,8 +302,7 @@ void cata_tiles::load_tilejson_from_file(std::ifstream *f) } /** 2) Load tile information if available */ - if (!config.has_member("tiles")) - { + if (!config.has_member("tiles")) { throw (std::string)"ERROR: \"tiles\" section missing\n"; } @@ -328,8 +316,7 @@ void cata_tiles::load_tilejson_from_file(std::ifstream *f) int t_bg = entry.get_int("bg", -1); bool t_multi = entry.get_bool("multitile", false); bool t_rota = entry.get_bool("rotates", t_multi); - if (t_multi) - { + if (t_multi) { // fetch additional tiles JsonArray subentries = entry.get_array("additional_tiles"); while (subentries.has_more()) { @@ -377,51 +364,23 @@ void cata_tiles::create_rotation_cache() 3 is a West rotation These rotations are stored in a map > with 3 values relating to east, south, and west in that order */ - for (tile_iterator it = tile_values->begin(); it != tile_values->end(); ++it) - { + for (tile_iterator it = tile_values->begin(); it != tile_values->end(); ++it) { const int tile_num = it->first; - SDL_Rect *tile_rect = it->second; + SDL_Surface *tile_surface = it->second; - std::vector rotations; - for (int i = 1; i < 4; ++i) - { - rotations.push_back(rotate_tile(tile_atlas, tile_rect, i)); + std::vector rotations; + for (int i = 1; i < 4; ++i) { + rotations.push_back(rotate_tile(tile_surface, NULL, i)); } rotation_cache[tile_num] = rotations; - //DebugLog() << "Tile ["<u.posx + g->u.view_offset_x != g->ter_view_x || - g->u.posy + g->u.view_offset_y != g->ter_view_y) - { + g->u.posy + g->u.view_offset_y != g->ter_view_y) { draw_from_id_string("cursor", g->ter_view_x, g->ter_view_y, 0, 0); - } + } apply_changes(); @@ -523,26 +477,33 @@ bool cata_tiles::draw_from_id_string(std::string id, int x, int y, int subtile, // The "unknown" tile is one that is highly visible so you kinda can't miss it :D // check to make sure that we are drawing within a valid area [0->width|height / tile_width|height] - if (is_at_screen_position && (x < 0 || x > screentile_width || y < 0 || y > screentile_height)) return false; - else if (!is_at_screen_position && ((x-o_x) < 0 || (x-o_x) > screentile_width || (y-o_y) < 0 || (y-o_y) > screentile_height)) return false; + if (is_at_screen_position && (x < 0 || x > screentile_width || y < 0 || y > screentile_height)) { + return false; + } else if (!is_at_screen_position && ((x - o_x) < 0 || (x - o_x) > screentile_width || (y - o_y) < 0 || (y - o_y) > screentile_height)) { + return false; + } tile_id_iterator it = tile_ids->find(id); // if id is not found, return unknown tile - if (it == tile_ids->end()) return draw_from_id_string("unknown", x, y, subtile, rota, is_at_screen_position); + if (it == tile_ids->end()) { + return draw_from_id_string("unknown", x, y, subtile, rota, is_at_screen_position); + } tile_type *display_tile = it->second; // if found id does not have a valid tile_type then return unknown tile - if (!display_tile) return draw_from_id_string("unknown", x, y, subtile, rota, is_at_screen_position); + if (!display_tile) { + return draw_from_id_string("unknown", x, y, subtile, rota, is_at_screen_position); + } // if both bg and fg are -1 then return unknown tile - if (display_tile->bg == -1 && display_tile->fg == -1) return draw_from_id_string("unknown", x, y, subtile, rota, is_at_screen_position); + if (display_tile->bg == -1 && display_tile->fg == -1) { + return draw_from_id_string("unknown", x, y, subtile, rota, is_at_screen_position); + } // check to see if the display_tile is multitile, and if so if it has the key related to subtile - if (subtile != -1 && display_tile->multitile) - { + if (subtile != -1 && display_tile->multitile) { std::vector display_subtiles = display_tile->available_subtiles; - if (std::find(display_subtiles.begin(), display_subtiles.end(), multitile_keys[subtile]) != display_subtiles.end()) - { + if (std::find(display_subtiles.begin(), display_subtiles.end(), multitile_keys[subtile]) != display_subtiles.end()) { // append subtile name to tile and re-find display_tile id += "_" + multitile_keys[subtile]; //DebugLog() << "<"<< id << ">\n"; @@ -551,45 +512,44 @@ bool cata_tiles::draw_from_id_string(std::string id, int x, int y, int subtile, } // make sure we aren't going to rotate the tile if it shouldn't be rotated - if (!display_tile->rotates) - { + if (!display_tile->rotates) { rota = 0; } // translate from player-relative to screen relative tile position int screen_x;// = (x - o_x) * tile_width; int screen_y;// = (y - o_y) * tile_height; - if (!is_at_screen_position) - { + if (!is_at_screen_position) { screen_x = (x - o_x) * tile_width; screen_y = (y - o_y) * tile_height; - } - else - { + } else { screen_x = x * tile_width; screen_y = y * tile_width; } // Schedule the draw call to be invoked later - tile_drawing_cache& cache_item = tiles_to_draw_this_frame[point(screen_x, screen_y)]; - cache_item.rotations.push_back(rota); cache_item.sprites.push_back(display_tile); + tile_drawing_cache &cache_item = tiles_to_draw_this_frame[point(screen_x, screen_y)]; + cache_item.rotations.push_back(rota); + cache_item.sprites.push_back(display_tile); return true; } -void cata_tiles::apply_changes() { +void cata_tiles::apply_changes() +{ // Scroll to avoid too much redrawing scroll(g->u.posx - last_pos_x, g->u.posy - last_pos_y); - last_pos_x = g->u.posx; last_pos_y = g->u.posy; + last_pos_x = g->u.posx; + last_pos_y = g->u.posy; - for(std::map::iterator i = tiles_to_draw_this_frame.begin(); i != tiles_to_draw_this_frame.end(); i++) { - const point& location = i->first; - const tile_drawing_cache& compare_to = cache[location]; - tile_drawing_cache& to_draw = i->second; + for(std::map::iterator i = tiles_to_draw_this_frame.begin(); i != tiles_to_draw_this_frame.end(); i++) { + const point &location = i->first; + const tile_drawing_cache &compare_to = cache[location]; + tile_drawing_cache &to_draw = i->second; if(to_draw != compare_to) { // TODO: fill with black - for(int i=0; i < to_draw.sprites.size(); i++) { + for(int i = 0; i < to_draw.sprites.size(); i++) { draw_tile_at(to_draw.sprites[i], location.x, location.y, to_draw.rotations[i]); } } @@ -598,7 +558,7 @@ void cata_tiles::apply_changes() { cache = tiles_to_draw_this_frame; } -bool cata_tiles::draw_tile_at(tile_type* tile, int x, int y, int rota) +bool cata_tiles::draw_tile_at(tile_type *tile, int x, int y, int rota) { // don't need to check for tile existance, should always exist if it gets this far const int fg = tile->fg; @@ -611,28 +571,22 @@ bool cata_tiles::draw_tile_at(tile_type* tile, int x, int y, int rota) destination.h = tile_height; // blit background first : always non-rotated - if (bg >= 0 && bg < tile_values->size()) - { - SDL_Rect *bgrect = (*tile_values)[bg]; - SDL_BlitSurface(tile_atlas, bgrect, buffer, &destination); + if (bg >= 0 && bg < tile_values->size()) { + SDL_Surface *bg_surf = (*tile_values)[bg]; + SDL_BlitSurface(bg_surf, NULL, buffer, &destination); } // blit foreground based on rotation - if (rota == 0) - { - if (fg >= 0 && fg < tile_values->size()) - { - SDL_Rect *fgrect = (*tile_values)[fg]; - SDL_BlitSurface(tile_atlas, fgrect, buffer, &destination); + if (rota == 0) { + if (fg >= 0 && fg < tile_values->size()) { + SDL_Surface *fg_surf = (*tile_values)[fg]; + SDL_BlitSurface(fg_surf, NULL, buffer, &destination); } - } - else - { - if (fg >= 0 && fg < tile_values->size()) - { + } else { + if (fg >= 0 && fg < tile_values->size()) { // get rect // get new surface of just the rotated fgrect and blit it to the screen - std::vector fgtiles = rotation_cache[fg]; + std::vector fgtiles = rotation_cache[fg]; SDL_Surface *rotatile = fgtiles[rota - 1]; SDL_BlitSurface(rotatile, NULL, buffer, &destination); } @@ -648,49 +602,80 @@ bool cata_tiles::draw_tile_at(tile_type* tile, int x, int y, int rota) 2 rota would have a 180 degree rotation 3 rota would have a 90 degree left (270 right) rotation */ -SDL_Surface *cata_tiles::rotate_tile(SDL_Surface *src, SDL_Rect* rect, int rota) +SDL_Surface *cata_tiles::rotate_tile(SDL_Surface *src, SDL_Rect *rect, int rota) { - if (!src || !rect || rect->w == 0 || rect->h == 0) - { + SDL_Rect *used_rect; + bool delete_used_rect = false; + + if (!src) { return NULL; } + if (!rect || rect->w == 0 || rect->h == 0) { + used_rect = new SDL_Rect(); + delete_used_rect = true; + used_rect->w = src->w; + used_rect->h = src->h; + used_rect->x = 0; + used_rect->y = 0; + } else { + used_rect = rect; + } double cx, cy; - cx = (double)(rect->w-1) / 2; - cy = (double)(rect->h-1) / 2; + cx = (double)(used_rect->w - 1) / 2; + cy = (double)(used_rect->h - 1) / 2; double X, Y; double X2, Y2; double cosAngle, sinAngle; - SDL_Surface *ret = SDL_CreateRGBSurface(src->flags, rect->w, rect->h, src->format->BitsPerPixel, src->format->Rmask, src->format->Gmask, src->format->Bmask, src->format->Amask); + SDL_Surface *ret = SDL_CreateRGBSurface(src->flags, used_rect->w, used_rect->h, src->format->BitsPerPixel, src->format->Rmask, src->format->Gmask, src->format->Bmask, src->format->Amask); // simple rotational values wooo! - switch(rota) - { - case 0: cosAngle = 1; sinAngle = 0; break; - case 1: cosAngle = 0; sinAngle = 1; break; - case 2: cosAngle = -1; sinAngle = 0; break; - case 3: cosAngle = 0; sinAngle = -1; break; - default: cosAngle = 0; sinAngle = 0; break; + switch(rota) { + case 0: + cosAngle = 1; + sinAngle = 0; + break; + case 1: + cosAngle = 0; + sinAngle = 1; + break; + case 2: + cosAngle = -1; + sinAngle = 0; + break; + case 3: + cosAngle = 0; + sinAngle = -1; + break; + default: + cosAngle = 0; + sinAngle = 0; + break; } - for (int x = 0; x < rect->w; ++x) - { - for (int y = 0; y < rect->h; ++y) - { + for (int x = 0; x < used_rect->w; ++x) { + for (int y = 0; y < used_rect->h; ++y) { X = (double)x - cx; Y = (double)y - cy; X2 = (X * cosAngle - Y * sinAngle); Y2 = (X * sinAngle + Y * cosAngle); - X2 += cx + rect->x; - Y2 += cy + rect->y; + X2 += cx + used_rect->x; + Y2 += cy + used_rect->y; - if( (int)X2 >= (int)src->w || (int)X2 < 0 || (int)Y2 >= src->h || (int)Y2 < 0) put_pixel(ret, x, y, SDL_MapRGB(src->format, 255, 0, 255)); - else put_pixel(ret, x, y, get_pixel(src, X2, Y2)); + if( (int)X2 >= (int)src->w || (int)X2 < 0 || (int)Y2 >= src->h || (int)Y2 < 0) { + put_pixel(ret, x, y, SDL_MapRGB(src->format, 255, 0, 255)); + } else { + put_pixel(ret, x, y, get_pixel(src, X2, Y2)); + } } } + if (delete_used_rect) { + delete used_rect; + } + return ret; } Uint32 cata_tiles::get_pixel(SDL_Surface *surface, int x, int y) @@ -700,27 +685,28 @@ Uint32 cata_tiles::get_pixel(SDL_Surface *surface, int x, int y) Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp; switch(bpp) { - case 1: - return *p; - break; + case 1: + return *p; + break; - case 2: - return *(Uint16 *)p; - break; + case 2: + return *(Uint16 *)p; + break; - case 3: - if(SDL_BYTEORDER == SDL_BIG_ENDIAN) - return p[0] << 16 | p[1] << 8 | p[2]; - else - return p[0] | p[1] << 8 | p[2] << 16; - break; + case 3: + if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { + return p[0] << 16 | p[1] << 8 | p[2]; + } else { + return p[0] | p[1] << 8 | p[2] << 16; + } + break; - case 4: - return *(Uint32 *)p; - break; + case 4: + return *(Uint32 *)p; + break; - default: - return 0; /* shouldn't happen, but avoids warnings */ + default: + return 0; /* shouldn't happen, but avoids warnings */ } } void cata_tiles::put_pixel(SDL_Surface *surface, int x, int y, Uint32 pixel) @@ -730,42 +716,51 @@ void cata_tiles::put_pixel(SDL_Surface *surface, int x, int y, Uint32 pixel) Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp; switch(bpp) { - case 1: - *p = pixel; - break; - - case 2: - *(Uint16 *)p = pixel; - break; - - case 3: - if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { - p[0] = (pixel >> 16) & 0xff; - p[1] = (pixel >> 8) & 0xff; - p[2] = pixel & 0xff; - } else { - p[0] = pixel & 0xff; - p[1] = (pixel >> 8) & 0xff; - p[2] = (pixel >> 16) & 0xff; - } - break; + case 1: + *p = pixel; + break; - case 4: - *(Uint32 *)p = pixel; - break; + case 2: + *(Uint16 *)p = pixel; + break; + + case 3: + if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { + p[0] = (pixel >> 16) & 0xff; + p[1] = (pixel >> 8) & 0xff; + p[2] = pixel & 0xff; + } else { + p[0] = pixel & 0xff; + p[1] = (pixel >> 8) & 0xff; + p[2] = (pixel >> 16) & 0xff; + } + break; + + case 4: + *(Uint32 *)p = pixel; + break; } } bool cata_tiles::draw_lighting(int x, int y, LIGHTING l) { std::string light_name; - switch(l) - { - case HIDDEN: light_name = "lighting_hidden"; break; - case LIGHT_NORMAL: light_name = "lighting_lowlight_light"; break; - case LIGHT_DARK: light_name = "lighting_lowlight_dark"; break; - case BOOMER_NORMAL: light_name = "lighting_boomered_light"; break; - case BOOMER_DARK: light_name = "lighting_boomered_dark"; break; + switch(l) { + case HIDDEN: + light_name = "lighting_hidden"; + break; + case LIGHT_NORMAL: + light_name = "lighting_lowlight_light"; + break; + case LIGHT_DARK: + light_name = "lighting_lowlight_dark"; + break; + case BOOMER_NORMAL: + light_name = "lighting_boomered_light"; + break; + case BOOMER_DARK: + light_name = "lighting_boomered_dark"; + break; } // lighting is never rotated, though, could possibly add in random rotation? @@ -778,7 +773,9 @@ bool cata_tiles::draw_terrain(int x, int y) { int t = g->m.ter(x, y); // get the ter_id value at this point // check for null, if null return false - if (t == t_null) return false; + if (t == t_null) { + return false; + } // need to check for walls, and then deal with wallfication details! int s = terlist[t].sym; @@ -787,17 +784,13 @@ bool cata_tiles::draw_terrain(int x, int y) int subtile = 0, rotation = 0; // check walls - if (s == LINE_XOXO /*vertical*/ || s == LINE_OXOX /*horizontal*/) - { + if (s == LINE_XOXO /*vertical*/ || s == LINE_OXOX /*horizontal*/) { get_wall_values(x, y, LINE_XOXO, LINE_OXOX, subtile, rotation); } // check windows and doors for wall connections, may or may not have a subtile available, but should be able to rotate to some extent - else if (s == '"' || s == '+' || s == '\'') - { + else if (s == '"' || s == '+' || s == '\'') { get_wall_values(x, y, LINE_XOXO, LINE_OXOX, subtile, rotation); - } - else - { + } else { get_terrain_orientation(x, y, rotation, subtile); // do something to get other terrain orientation values } @@ -812,18 +805,19 @@ bool cata_tiles::draw_terrain(int x, int y) bool cata_tiles::draw_furniture(int x, int y) { // get furniture ID at x,y - bool has_furn = g->m.has_furn(x,y); - if (!has_furn) return false; + bool has_furn = g->m.has_furn(x, y); + if (!has_furn) { + return false; + } - int f_id = g->m.furn(x,y); + int f_id = g->m.furn(x, y); // for rotation inforomation - const int neighborhood[4] = - { - static_cast (g->m.furn(x, y+1)), // south - static_cast (g->m.furn(x+1, y)), // east - static_cast (g->m.furn(x-1, y)), // west - static_cast (g->m.furn(x, y-1)) // north + const int neighborhood[4] = { + static_cast (g->m.furn(x, y + 1)), // south + static_cast (g->m.furn(x + 1, y)), // east + static_cast (g->m.furn(x - 1, y)), // west + static_cast (g->m.furn(x, y - 1)) // north }; int subtile = 0, rotation = 0; @@ -832,7 +826,7 @@ bool cata_tiles::draw_furniture(int x, int y) // get the name of this furniture piece std::string f_name = furnlist[f_id].id; // replace with furniture names array access bool ret = draw_from_id_string(f_name, x, y, subtile, rotation); - if (ret && g->m.i_at(x, y).size() > 0){ + if (ret && g->m.i_at(x, y).size() > 0) { draw_item_highlight(x, y); } return ret; @@ -840,17 +834,18 @@ bool cata_tiles::draw_furniture(int x, int y) bool cata_tiles::draw_trap(int x, int y) { - int tr_id = g->m.tr_at(x,y); - if (tr_id == tr_null) return false; + int tr_id = g->m.tr_at(x, y); + if (tr_id == tr_null) { + return false; + } std::string tr_name = trap_names[tr_id]; - const int neighborhood[4] = - { - static_cast (g->m.tr_at(x, y+1)), // south - static_cast (g->m.tr_at(x+1, y)), // east - static_cast (g->m.tr_at(x-1, y)), // west - static_cast (g->m.tr_at(x, y-1)) // north + const int neighborhood[4] = { + static_cast (g->m.tr_at(x, y + 1)), // south + static_cast (g->m.tr_at(x + 1, y)), // east + static_cast (g->m.tr_at(x - 1, y)), // west + static_cast (g->m.tr_at(x, y - 1)) // north }; int subtile = 0, rotation = 0; @@ -862,48 +857,47 @@ bool cata_tiles::draw_trap(int x, int y) bool cata_tiles::draw_field_or_item(int x, int y) { // check for field - field f = g->m.field_at(x,y); + field f = g->m.field_at(x, y); // check for items std::vector items = g->m.i_at(x, y); field_id f_id = f.fieldSymbol(); bool is_draw_field; bool do_item; - switch(f_id){ - case fd_null: - //only draw items - is_draw_field = false; - do_item = true; - break; - case fd_blood: - case fd_gibs_flesh: - case fd_bile: - case fd_slime: - case fd_acid: - case fd_gibs_veggy: - case fd_sap: - case fd_sludge: - //need to draw fields and items both - is_draw_field = true; - do_item = true; - break; - default: - //only draw fields - do_item = false; - is_draw_field = true; - break; + switch(f_id) { + case fd_null: + //only draw items + is_draw_field = false; + do_item = true; + break; + case fd_blood: + case fd_gibs_flesh: + case fd_bile: + case fd_slime: + case fd_acid: + case fd_gibs_veggy: + case fd_sap: + case fd_sludge: + //need to draw fields and items both + is_draw_field = true; + do_item = true; + break; + default: + //only draw fields + do_item = false; + is_draw_field = true; + break; } bool ret_draw_field = true; bool ret_draw_item = true; - if (is_draw_field){ + if (is_draw_field) { std::string fd_name = field_names[f.fieldSymbol()]; // for rotation inforomation - const int neighborhood[4] = - { - static_cast (g->m.field_at(x, y+1).fieldSymbol()), // south - static_cast (g->m.field_at(x+1, y).fieldSymbol()), // east - static_cast (g->m.field_at(x-1, y).fieldSymbol()), // west - static_cast (g->m.field_at(x, y-1).fieldSymbol()) // north + const int neighborhood[4] = { + static_cast (g->m.field_at(x, y + 1).fieldSymbol()), // south + static_cast (g->m.field_at(x + 1, y).fieldSymbol()), // east + static_cast (g->m.field_at(x - 1, y).fieldSymbol()), // west + static_cast (g->m.field_at(x, y - 1).fieldSymbol()) // north }; int subtile = 0, rotation = 0; @@ -911,8 +905,8 @@ bool cata_tiles::draw_field_or_item(int x, int y) ret_draw_field = draw_from_id_string(fd_name, x, y, subtile, rotation); } - if(do_item){ - if (g->m.has_flag("CONTAINER", x, y) || g->m.has_furn(x,y) || items.empty()){ + if(do_item) { + if (g->m.has_flag("CONTAINER", x, y) || g->m.has_furn(x, y) || items.empty()) { return false; } // get the last item in the stack, it will be used for display @@ -920,27 +914,27 @@ bool cata_tiles::draw_field_or_item(int x, int y) // get the item's name, as that is the key used to find it in the map std::string it_name = display_item.type->id; ret_draw_item = draw_from_id_string(it_name, x, y, 0, 0); - if (ret_draw_item && items.size() > 1){ + if (ret_draw_item && items.size() > 1) { draw_item_highlight(x, y); } } return ret_draw_field && ret_draw_item; } -/** Deprecated: combined with field drawing as they are mutex */ -bool cata_tiles::draw_item(int x, int y) -{ - return false; -} + bool cata_tiles::draw_vpart(int x, int y) { int veh_part = 0; vehicle *veh = g->m.veh_at(x, y, veh_part); - if (!veh) return false; + if (!veh) { + return false; + } // veh_part is the index of the part // get a north-east-south-west value instead of east-south-west-north value to use with rotation int veh_dir = (veh->face.dir4() + 1) % 4; - if (veh_dir == 1 || veh_dir == 3) veh_dir = (veh_dir + 2) % 4; + if (veh_dir == 1 || veh_dir == 3) { + veh_dir = (veh_dir + 2) % 4; + } // Gets the visible part, should work fine once tileset vp_ids are updated to work with the vehicle part json ids // get the vpart_id @@ -950,16 +944,20 @@ bool cata_tiles::draw_vpart(int x, int y) // prefix with vp_ ident vpid = "vp_" + vpid; int subtile = 0; - if (part_mod > 0){ - switch (part_mod){ - case 1: subtile = open_; break; - case 2: subtile = broken; break; + if (part_mod > 0) { + switch (part_mod) { + case 1: + subtile = open_; + break; + case 2: + subtile = broken; + break; } } int cargopart = veh->part_with_feature(veh_part, "CARGO"); bool draw_highlight = (cargopart > 0) && (!veh->parts[cargopart].items.empty()); bool ret = draw_from_id_string(vpid, x, y, subtile, veh_dir); - if (ret && draw_highlight){ + if (ret && draw_highlight) { draw_item_highlight(x, y); } return ret; @@ -971,33 +969,27 @@ bool cata_tiles::draw_entity(int x, int y) std::string ent_name; bool entity_here = false; // check for monster (most common) - if (!entity_here && g->mon_at(x,y) >= 0) - { - monster m = g->zombie(g->mon_at(x,y)); - if (!m.dead) - { + if (!entity_here && g->mon_at(x, y) >= 0) { + monster m = g->zombie(g->mon_at(x, y)); + if (!m.dead) { ent_name = m.type->id; entity_here = true; } } // check for NPC (next most common) - if (!entity_here && g->npc_at(x,y) >= 0) - { - npc &m = *g->active_npc[g->npc_at(x,y)]; - if (!m.dead) - { - ent_name = m.male? "npc_male":"npc_female"; + if (!entity_here && g->npc_at(x, y) >= 0) { + npc &m = *g->active_npc[g->npc_at(x, y)]; + if (!m.dead) { + ent_name = m.male ? "npc_male" : "npc_female"; entity_here = true; } } // check for PC (least common, only ever 1) - if (!entity_here && g->u.posx == x && g->u.posy == y) - { - ent_name = g->u.male? "player_male":"player_female"; + if (!entity_here && g->u.posx == x && g->u.posy == y) { + ent_name = g->u.male ? "player_male" : "player_female"; entity_here = true; } - if (entity_here) - { + if (entity_here) { int subtile = corner; return draw_from_id_string(ent_name, x, y, subtile, 0); } @@ -1006,14 +998,34 @@ bool cata_tiles::draw_entity(int x, int y) bool cata_tiles::draw_item_highlight(int x, int y) { - DebugLog() << "Trying to draw item highlight at <"< -- "; - if (tile_ids->find(ITEM_HIGHLIGHT) != tile_ids->end()){ - DebugLog() << "Done\n"; - return draw_from_id_string(ITEM_HIGHLIGHT, x, y, 0, 0); - }else{ - DebugLog() << "Not Done\n"; - return true; + bool item_highlight_available = tile_ids->find(ITEM_HIGHLIGHT) != tile_ids->end(); + + if (!item_highlight_available) { + create_default_item_highlight(); + item_highlight_available = true; } + return draw_from_id_string(ITEM_HIGHLIGHT, x, y, 0, 0); +} + +void cata_tiles::create_default_item_highlight() +{ + const Uint8 highlight_alpha = 127; + + std::string key = ITEM_HIGHLIGHT; + SDL_Surface *surface; + int index = tile_values->size(); +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + surface = SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_SRCALPHA, tile_width, tile_height, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF); +#else + surface = SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_SRCALPHA, tile_width, tile_height, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); +#endif + SDL_FillRect(surface, NULL, SDL_MapRGBA(surface->format, 0, 0, 127, highlight_alpha)); + + (*tile_values)[index] = surface; + tile_type *type = new tile_type; + type->fg = index; + type->bg = -1; + (*tile_ids)[key] = type; } /* Animation Functions */ @@ -1107,8 +1119,7 @@ void cata_tiles::draw_explosion_frame(int destx, int desty, int centerx, int cen int subtile, rotation; const int mx = exp_pos_x, my = exp_pos_y; - for (int i = 1; i < exp_rad; ++i) - { + for (int i = 1; i < exp_rad; ++i) { subtile = corner; rotation = 0; @@ -1118,8 +1129,7 @@ void cata_tiles::draw_explosion_frame(int destx, int desty, int centerx, int cen draw_from_id_string(exp_name, mx + i, my - i, subtile, rotation++); subtile = edge; - for (int j = 1 - i; j < 0 + i; j++) - { + for (int j = 1 - i; j < 0 + i; j++) { rotation = 0; draw_from_id_string(exp_name, mx + j, my - i, subtile, rotation); draw_from_id_string(exp_name, mx + j, my + i, subtile, rotation); @@ -1148,41 +1158,38 @@ void cata_tiles::draw_line(int destx, int desty, int centerx, int centery, int w { int mx = line_pos_x, my = line_pos_y; std::string line_overlay = "animation_line"; - if (!is_target_line || g->u_see(mx,my)) - { - for (int i = 0; i < line_trajectory.size()-1; i++) - { + if (!is_target_line || g->u_see(mx, my)) { + for (int i = 0; i < line_trajectory.size() - 1; i++) { mx = line_trajectory[i].x; my = line_trajectory[i].y; draw_from_id_string(line_overlay, mx, my, 0, 0); } } - mx = line_trajectory[line_trajectory.size()-1].x; - my = line_trajectory[line_trajectory.size()-1].y; + mx = line_trajectory[line_trajectory.size() - 1].x; + my = line_trajectory[line_trajectory.size() - 1].y; draw_from_id_string(line_endpoint_id, mx, my, 0, 0); } void cata_tiles::draw_weather_frame(int destx, int desty, int centerx, int centery, int width, int height) { for (std::vector >::iterator weather_iterator = anim_weather.vdrops.begin(); - weather_iterator != anim_weather.vdrops.end(); - ++weather_iterator) - { + weather_iterator != anim_weather.vdrops.end(); + ++weather_iterator) { // currently in ascii screen coordinates int x = weather_iterator->first; int y = weather_iterator->second; - x = x + g->ter_view_x - getmaxx(g->w_terrain)/2; - y = y + g->ter_view_y - getmaxy(g->w_terrain)/2; + x = x + g->ter_view_x - getmaxx(g->w_terrain) / 2; + y = y + g->ter_view_y - getmaxy(g->w_terrain) / 2; - draw_from_id_string(weather_name, x, y,0, 0, false); + draw_from_id_string(weather_name, x, y, 0, 0, false); } } void cata_tiles::draw_footsteps_frame(int destx, int desty, int centerx, int centery, int width, int height) { const std::string footstep_tilestring = "footstep"; - while (!footsteps.empty()){ + while (!footsteps.empty()) { point p = footsteps.front(); footsteps.pop(); @@ -1202,7 +1209,7 @@ void cata_tiles::init_light() sightrange_natural = g->u.sight_range(1); g_lightlevel = (int)g->light_level(); sightrange_light = g->u.sight_range(g_lightlevel); - sightrange_lowlight = std::max(g_lightlevel/2, sightrange_natural); + sightrange_lowlight = std::max(g_lightlevel / 2, sightrange_natural); sightrange_max = g->u.unimpaired_range(); u_clairvoyance = g->u.clairvoyance(); @@ -1224,52 +1231,41 @@ LIGHTING cata_tiles::light_at(int x, int y) bool can_see = g->m.pl_sees(g->u.posx, g->u.posy, x, y, distance_to_look); lit_level lit = g->m.light_at(x, y); - if (lit != LL_BRIGHT && dist > real_max_sight_range) - { - int intlit = (int)lit - (dist - real_max_sight_range)/2; - if (intlit < 0) intlit = LL_DARK; + if (lit != LL_BRIGHT && dist > real_max_sight_range) { + int intlit = (int)lit - (dist - real_max_sight_range) / 2; + if (intlit < 0) { + intlit = LL_DARK; + } lit = (lit_level)intlit; } - if (lit > LL_DARK && real_max_sight_range > 1) - { + if (lit > LL_DARK && real_max_sight_range > 1) { real_max_sight_range = distance_to_look; } /** Conditional Returns */ if ((bionight_bionic_active && dist < 15 && dist > sightrange_natural) || - dist > real_max_sight_range || - (dist > sightrange_light && - (lit == LL_DARK || - (sight_impaired && lit != LL_BRIGHT)|| - !can_see))) - { - if (boomered) - { + dist > real_max_sight_range || + (dist > sightrange_light && + (lit == LL_DARK || + (sight_impaired && lit != LL_BRIGHT) || + !can_see))) { + if (boomered) { // exit w/ dark boomerfication return BOOMER_DARK; - } - else - { + } else { // exit w/ dark normal return LIGHT_DARK; } - } - else if (dist > sightrange_light && sight_impaired && lit == LL_BRIGHT) - { - if (boomered) - { + } else if (dist > sightrange_light && sight_impaired && lit == LL_BRIGHT) { + if (boomered) { // exit w/ light boomerfication return BOOMER_NORMAL; - } - else - { + } else { // exit w/ light normal return LIGHT_NORMAL; } - } - else if (dist <= u_clairvoyance || can_see) - { + } else if (dist <= u_clairvoyance || can_see) { // check for rain // return with okay to draw the square = 0 @@ -1279,24 +1275,22 @@ LIGHTING cata_tiles::light_at(int x, int y) return HIDDEN; } -void cata_tiles::get_terrain_orientation(int x, int y, int& rota, int& subtile) +void cata_tiles::get_terrain_orientation(int x, int y, int &rota, int &subtile) { // get terrain at x,y ter_id tid = g->m.ter(x, y); - if (tid == t_null) - { + if (tid == t_null) { subtile = 0; rota = 0; return; } // get terrain neighborhood - const ter_id neighborhood[4] = - { - g->m.ter(x, y+1), // south - g->m.ter(x+1, y), // east - g->m.ter(x-1, y), // west - g->m.ter(x, y-1) // north + const ter_id neighborhood[4] = { + g->m.ter(x, y + 1), // south + g->m.ter(x + 1, y), // east + g->m.ter(x - 1, y), // west + g->m.ter(x, y - 1) // north }; bool connects[4]; @@ -1304,12 +1298,10 @@ void cata_tiles::get_terrain_orientation(int x, int y, int& rota, int& subtile) int num_connects = 0; // populate connection information - for (int i = 0; i < 4; ++i) - { + for (int i = 0; i < 4; ++i) { connects[i] = (neighborhood[i] == tid); - if (connects[i]) - { + if (connects[i]) { ++num_connects; val += 1 << i; } @@ -1319,52 +1311,89 @@ void cata_tiles::get_terrain_orientation(int x, int y, int& rota, int& subtile) } void cata_tiles::get_rotation_and_subtile(const char val, const int num_connects, int &rotation, int &subtile) { - switch(num_connects) - { - case 0: rotation = 0; subtile = unconnected; break; - case 4: rotation = 0; subtile = center; break; + switch(num_connects) { + case 0: + rotation = 0; + subtile = unconnected; + break; + case 4: + rotation = 0; + subtile = center; + break; case 1: // all end pieces subtile = end_piece; - switch(val) - { - case 8: rotation = 2; break; - case 4: rotation = 3; break; - case 2: rotation = 1; break; - case 1: rotation = 0; break; + switch(val) { + case 8: + rotation = 2; + break; + case 4: + rotation = 3; + break; + case 2: + rotation = 1; + break; + case 1: + rotation = 0; + break; } break; case 2: - switch(val) - {// edges - case 9: subtile = edge; rotation = 0; break; - case 6: subtile = edge; rotation = 1; break; - // corners - case 12: subtile = corner; rotation = 2; break; - case 10: subtile = corner; rotation = 1; break; - case 3: subtile = corner; rotation = 0; break; - case 5: subtile = corner; rotation = 3; break; + switch(val) { + // edges + case 9: + subtile = edge; + rotation = 0; + break; + case 6: + subtile = edge; + rotation = 1; + break; + // corners + case 12: + subtile = corner; + rotation = 2; + break; + case 10: + subtile = corner; + rotation = 1; + break; + case 3: + subtile = corner; + rotation = 0; + break; + case 5: + subtile = corner; + rotation = 3; + break; } break; case 3: // all t_connections subtile = t_connection; - switch(val) - { - case 14: rotation = 2; break; - case 11: rotation = 1; break; - case 7: rotation = 0; break; - case 13: rotation = 3; break; + switch(val) { + case 14: + rotation = 2; + break; + case 11: + rotation = 1; + break; + case 7: + rotation = 0; + break; + case 13: + rotation = 3; + break; } break; } } -void cata_tiles::get_wall_values(const int x, const int y, const long vertical_wall_symbol, const long horizontal_wall_symbol, int& subtile, int& rotation) +void cata_tiles::get_wall_values(const int x, const int y, const long vertical_wall_symbol, const long horizontal_wall_symbol, int &subtile, int &rotation) { // makes the assumption that x,y is a wall | window | door of some sort const long neighborhood[4] = { - terlist[g->m.ter(x, y+1)].sym, // south - terlist[g->m.ter(x+1, y)].sym, // east - terlist[g->m.ter(x-1, y)].sym, // west - terlist[g->m.ter(x, y-1)].sym // north + terlist[g->m.ter(x, y + 1)].sym, // south + terlist[g->m.ter(x + 1, y)].sym, // east + terlist[g->m.ter(x - 1, y)].sym, // west + terlist[g->m.ter(x, y - 1)].sym // north }; bool connects[4]; @@ -1373,12 +1402,10 @@ void cata_tiles::get_wall_values(const int x, const int y, const long vertical_w int num_connects = 0; // populate connection information - for (int i = 0; i < 4; ++i) - { + for (int i = 0; i < 4; ++i) { connects[i] = (neighborhood[i] == vertical_wall_symbol || neighborhood[i] == horizontal_wall_symbol) || (neighborhood[i] == '"' || neighborhood[i] == '+' || neighborhood[i] == '\''); - if (connects[i]) - { + if (connects[i]) { ++num_connects; val += 1 << i; } @@ -1391,11 +1418,9 @@ void cata_tiles::get_tile_values(const int t, const int *tn, int &subtile, int & bool connects[4]; int num_connects = 0; char val = 0; - for (int i = 0; i < 4; ++i) - { + for (int i = 0; i < 4; ++i) { connects[i] = (tn[i] == t); - if (connects[i]) - { + if (connects[i]) { ++num_connects; val += 1 << i; } @@ -1403,7 +1428,8 @@ void cata_tiles::get_tile_values(const int t, const int *tn, int &subtile, int & get_rotation_and_subtile(val, num_connects, rotation, subtile); } -void cata_tiles::scroll(int x, int y) { +void cata_tiles::scroll(int x, int y) +{ if(abs(x) > 1 || abs(y) > 1) { cache.clear(); return; @@ -1416,12 +1442,12 @@ void cata_tiles::scroll(int x, int y) { int rightMostTile = (WindowWidth / tile_width) * tile_width; int bottomMostTile = (WindowHeight / tile_height) * tile_height; if(rightMostTile != WindowWidth && x == 1) { - for(int y=0; y < WindowHeight; y+=tile_height) { + for(int y = 0; y < WindowHeight; y += tile_height) { cache[point(rightMostTile, y)] = tile_drawing_cache(); } } if(bottomMostTile != WindowHeight && y == 1) { - for(int x=0; x < WindowWidth; x+=tile_width) { + for(int x = 0; x < WindowWidth; x += tile_width) { cache[point(x, bottomMostTile)] = tile_drawing_cache(); } } @@ -1440,8 +1466,8 @@ void cata_tiles::scroll(int x, int y) { SDL_BlitSurface(buffer, &srcrect, buffer, NULL); std::map new_cache; - for(std::map::iterator i=cache.begin(); i!=cache.end(); i++) { - const point& old_point = i->first; + for(std::map::iterator i = cache.begin(); i != cache.end(); i++) { + const point &old_point = i->first; new_cache[point(old_point.x - x, old_point.y - y)] = i->second; } cache = new_cache; diff --git a/cata_tiles.h b/src/cata_tiles.h similarity index 98% rename from cata_tiles.h rename to src/cata_tiles.h index 1d6f08feead27..c31b0a1aebd9b 100644 --- a/cata_tiles.h +++ b/src/cata_tiles.h @@ -86,7 +86,7 @@ enum MULTITILE_TYPE }; /** Typedefs */ -typedef std::map tile_map; +typedef std::map tile_map; typedef std::map tile_id_map; typedef tile_map::iterator tile_iterator; @@ -141,7 +141,6 @@ class cata_tiles /* After loading tileset, create additional cache for rotating each tile assuming it is used for rotations */ void create_rotation_cache(); /** Draw to screen */ - void draw(); /* Deprecated */ void draw(int destx, int desty, int centerx, int centery, int width, int height); /** How many rows and columns of tiles fit into given dimensions **/ @@ -174,7 +173,6 @@ class cata_tiles bool draw_furniture(int x, int y); bool draw_trap(int x, int y); bool draw_field_or_item(int x, int y); - bool draw_item(int x, int y); bool draw_vpart(int x, int y); bool draw_entity(int x, int y); @@ -278,6 +276,7 @@ class cata_tiles protected: private: + void create_default_item_highlight(); int sightrange_natural, sightrange_light, diff --git a/catacharset.cpp b/src/catacharset.cpp similarity index 100% rename from catacharset.cpp rename to src/catacharset.cpp diff --git a/catacharset.h b/src/catacharset.h similarity index 100% rename from catacharset.h rename to src/catacharset.h diff --git a/catacurse.h b/src/catacurse.h similarity index 98% rename from catacurse.h rename to src/catacurse.h index 26974a9cfaf0b..3de83946242d4 100644 --- a/catacurse.h +++ b/src/catacurse.h @@ -14,9 +14,6 @@ #include #include #include "json.h" - -#include "input_defs.h" - typedef int chtype; typedef unsigned short attr_t; typedef unsigned int u_int32_t; @@ -78,6 +75,7 @@ typedef struct { } WINDOW; + #define A_NORMAL __NORMAL #define A_STANDOUT __STANDOUT #define A_UNDERLINE __UNDERSCORE @@ -117,6 +115,9 @@ typedef struct { #define KEY_PPAGE 0x153 /* page up */ #define KEY_ENTER 0x157 /* enter */ +#define ERR (-1) // Error return. +#define OK (0) // Success return. + /* Curses external declarations. */ extern WINDOW *stdscr; @@ -124,8 +125,6 @@ extern WINDOW *stdscr; #define getmaxyx(w, y, x) (y = getmaxy(w), x = getmaxx(w)) //Curses Functions -#define ERR (-1) // Error return. -#define OK (0) // Success return. WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x); int delwin(WINDOW *win); int wborder(WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br); @@ -191,7 +190,6 @@ void curses_drawwindow(WINDOW* win); void curses_delay(int delay); void curses_timeout(int t); int curses_getch(WINDOW* win); -input_event getch_kyb_mouse(WINDOW* capture_win = NULL); int curses_start_color(); #ifdef SDLTILES void init_tiles(); diff --git a/src/catalua.cpp b/src/catalua.cpp new file mode 100644 index 0000000000000..a06846c05f06d --- /dev/null +++ b/src/catalua.cpp @@ -0,0 +1,327 @@ +#include "catalua.h" + +#include "game.h" +#include "item_factory.h" +#include "item.h" +#include "pldata.h" + +#ifdef LUA +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} + +lua_State *lua_state; + +// Helper functions for making working with the lua API more straightforward. +// -------------------------------------------------------------------------- + +// Stores item at the given stack position into the registry. +int luah_store_in_registry(lua_State* L, int stackpos) { + lua_pushvalue(L, stackpos); + return luaL_ref(L, LUA_REGISTRYINDEX); +} + +// Removes item from registry and pushes on the top of stack. +void luah_remove_from_registry(lua_State* L, int item_index) { + lua_rawgeti(L, LUA_REGISTRYINDEX, item_index); + luaL_unref(L, LUA_REGISTRYINDEX, item_index); +} + +// Sets the metatable for the element on top of the stack. +void luah_setmetatable(lua_State* L, const char* metatable_name) { + // Push the metatable on top of the stack. + lua_getglobal(L, metatable_name); + + // The element we want to set the metatable for is now below the top. + lua_setmetatable(L, -2); +} + +void luah_setglobal(lua_State*L, const char* name, int index) { + lua_pushvalue(L, index); + lua_setglobal(L, name); +} + +void update_globals(lua_State *L) { + // Make sure the player reference is up to date. + { + player** player_userdata = (player**) lua_newuserdata(L, sizeof(player*)); + *player_userdata = &g->u; + + // Set the metatable for the player. + luah_setmetatable(L, "player_metatable"); + + luah_setglobal(L, "player", -1); + } + + // Make sure the map reference is up to date. + { + map** map_userdata = (map**) lua_newuserdata(L, sizeof(map*)); + *map_userdata = &g->m; + + // Set the metatable for the player. + luah_setmetatable(L, "map_metatable"); + + luah_setglobal(L, "map", -1); + } +} + +// iuse abstraction to make iuse's both in lua and C++ possible +// ------------------------------------------------------------ +void Item_factory::register_iuse_lua(const char* name, int lua_function) { + iuse_function_list[name] = use_function(lua_function); +} + +// Call the given string directly, used in the lua debug command. +int call_lua(std::string tocall) { + lua_State* L = lua_state; + + update_globals(L); + + int err = luaL_dostring(L, tocall.c_str()); + if(err) { + // Error handling. + const char* error = lua_tostring(L, -1); + debugmsg("Error in lua command: %s", error); + } + return err; +} + +// Lua monster movement override +int lua_monster_move(monster* m) { + lua_State *L = lua_state; + + update_globals(L); + + lua_getglobal(L, "monster_move"); + lua_getfield(L, -1, m->type->name.c_str()); + + // OK our function should now be at the top. + if(lua_isnil(L, -1)) { + lua_settop(L, 0); + return 0; + } + + // Push the monster on top of the stack. + monster** monster_userdata = (monster**) lua_newuserdata(L, sizeof(monster*)); + *monster_userdata = m; + + // Set the metatable for the monster. + luah_setmetatable(L, "monster_metatable"); + + // Call the function + int err = lua_pcall(lua_state, 1, 0, 0); + if(err) { + // Error handling. + const char* error = lua_tostring(L, -1); + debugmsg("Error in lua monster move function: %s", error); + } + lua_settop(L, 0); + + return 1; +} + +// Custom functions that are to be wrapped from lua. +// ------------------------------------------------- +static uimenu uimenu_instance; +uimenu* create_uimenu() { + uimenu_instance = uimenu(); + return &uimenu_instance; +} + +ter_t* get_terrain_type(int id) { + return (ter_t*) &terlist[id]; +} + +// Manually implemented lua functions +// +// Most lua functions are generated by lua/generate_bindings.lua, +// these generated functions can be found in lua/catabindings.cpp + +/* + This function is commented out until I find a way to get a list of all + currently loaded monsters >_> + +// monster_list = game.get_monsters() +static int game_get_monsters(lua_State *L) { + lua_createtable(L, g->_z.size(), 0); // Preallocate enough space for all our monsters. + + // Iterate over the monster list and insert each monster into our returned table. + for(int i=0; i < g->_z.size(); i++) { + // The stack will look like this: + // 1 - t, table containing monsters + // 2 - k, index at which the next monster will be inserted + // 3 - v, next monster to insert + // + // lua_rawset then does t[k] = v and pops v and k from the stack + + lua_pushnumber(L, i + 1); + monster** monster_userdata = (monster**) lua_newuserdata(L, sizeof(monster*)); + *monster_userdata = &(g->_z[i]); + luah_setmetatable(L, "monster_metatable"); + lua_rawset(L, -3); + } + + return 1; // 1 return values +} +*/ + +// items = game.items_at(x, y) +static int game_items_at(lua_State *L) { + int x = lua_tointeger(L, 1); + int y = lua_tointeger(L, 2); + + std::vector& items = g->m.i_at(x, y); + + lua_createtable(L, items.size(), 0); // Preallocate enough space for all our items. + + // Iterate over the monster list and insert each monster into our returned table. + for(int i=0; i < items.size(); i++) { + // The stack will look like this: + // 1 - t, table containing item + // 2 - k, index at which the next item will be inserted + // 3 - v, next item to insert + // + // lua_rawset then does t[k] = v and pops v and k from the stack + + lua_pushnumber(L, i + 1); + item** item_userdata = (item**) lua_newuserdata(L, sizeof(item*)); + *item_userdata = &(items[i]); + luah_setmetatable(L, "item_metatable"); + lua_rawset(L, -3); + } + + return 1; // 1 return values +} + +// game.remove_item(x, y, item) +void game_remove_item(int x, int y, item *it) { + std::vector& items = g->m.i_at(x, y); + + for(int i=0; iregister_iuse_lua(name, function_index); + + return 0; // 0 return values +} + +#include "../lua/catabindings.cpp" + +// Registry containing all the game functions exported to lua. +// ----------------------------------------------------------- +static const struct luaL_Reg global_funcs [] = { + {"register_iuse", game_register_iuse}, + //{"get_monsters", game_get_monsters}, + {"items_at", game_items_at}, + {NULL, NULL} +}; + +// Lua initialization. +void game::init_lua() { + lua_state = luaL_newstate(); + + luaL_openlibs(lua_state); // Load standard lua libs + + // Load our custom "game" module + luaL_register(lua_state, "game", gamelib); + luaL_register(lua_state, "game", global_funcs); + + // Load lua-side metatables etc. + luaL_dofile(lua_state, "lua/autoexec.lua"); + + // Load main lua mod + int err = luaL_dofile(lua_state,"data/main.lua"); + if(err) { + // Error handling. + const char* error = lua_tostring(lua_state, -1); + debugmsg("Error in lua module: %s", error); + } +} +#endif // #ifdef LUA + +// If we're not using lua, need to define Use_function in a way to always call the C++ function +int use_function::call(player* player_instance, item* item_instance, bool active) { + if(function_type == USE_FUNCTION_CPP) { + // If it's a C++ function, simply call it with the given arguments. + iuse tmp; + return (tmp.*cpp_function)(player_instance, item_instance, active); + } else { + #ifdef LUA + + // We'll be using lua_state a lot! + lua_State* L = lua_state; + + // If it's a lua function, the arguments have to be wrapped in + // lua userdata's and passed on the lua stack. + // We will now call the function f(player, item, active) + + update_globals(L); + + // Push the lua function on top of the stack + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_function); + + // Push the item on top of the stack. + int item_in_registry; + { + item** item_userdata = (item**) lua_newuserdata(L, sizeof(item*)); + *item_userdata = item_instance; + + // Save a reference to the item in the registry so that we can deallocate it + // when we're done. + item_in_registry = luah_store_in_registry(L, -1); + + // Set the metatable for the item. + luah_setmetatable(L, "item_metatable"); + } + + // Push the "active" parameter on top of the stack. + lua_pushboolean(L, active); + + // Call the iuse function + int err = lua_pcall(L, 3, 1, 0); + if(err) { + // Error handling. + const char* error = lua_tostring(L, -1); + debugmsg("Error in lua iuse function: %s", error); + } + + // Make sure the now outdated parameters we passed to lua aren't + // being used anymore by setting a metatable that will error on + // access. + luah_remove_from_registry(L, item_in_registry); + luah_setmetatable(L, "outdated_metatable"); + + return lua_tointeger(L, -1); + + #else + + // If LUA isn't defined and for some reason we registered a lua function, + // simply do nothing. + return 0; + + #endif + + } +} diff --git a/src/catalua.h b/src/catalua.h new file mode 100644 index 0000000000000..e23e7bc7c8d62 --- /dev/null +++ b/src/catalua.h @@ -0,0 +1,20 @@ +#ifndef _CATALUA_H_ +#define _CATALUA_H_ + +#include "monster.h" + +#ifdef LUA + +/** If this returns 0, no lua function was defined to override behavior. + * If this returns 1, lua behavior was called and regular behavior should be omitted. + */ +int lua_monster_move(monster* m); + +/** + * Call the given string as lua code, used for interactive debugging. + */ +int call_lua(std::string tocall); + +#endif + +#endif diff --git a/char_validity_check.cpp b/src/char_validity_check.cpp similarity index 100% rename from char_validity_check.cpp rename to src/char_validity_check.cpp diff --git a/char_validity_check.h b/src/char_validity_check.h similarity index 100% rename from char_validity_check.h rename to src/char_validity_check.h diff --git a/color.cpp b/src/color.cpp similarity index 76% rename from color.cpp rename to src/color.cpp index c4629e249baca..4f557c661d166 100644 --- a/color.cpp +++ b/src/color.cpp @@ -632,6 +632,174 @@ nc_color rand_color() return c_dkgray; } +std::map colormap; + +void init_colormap() +{ + colormap["black"] = c_black; + colormap["white"] = c_white; + colormap["ltgray"] = c_ltgray; + colormap["light_gray"] = c_ltgray; + colormap["dkgray"] = c_dkgray; + colormap["dark_gray"] = c_dkgray; + colormap["red"] = c_red; + colormap["green"] = c_green; + colormap["blue"] = c_blue; + colormap["cyan"] = c_cyan; + colormap["magenta"] = c_magenta; + colormap["brown"] = c_brown; + colormap["ltred"] = c_ltred; + colormap["light_red"] = c_ltred; + colormap["ltgreen"] = c_ltgreen; + colormap["light_green"] = c_ltgreen; + colormap["ltblue"] = c_ltblue; + colormap["light_blue"] = c_ltblue; + colormap["ltcyan"] = c_ltcyan; + colormap["light_cyan"] = c_ltcyan; + colormap["pink"] = c_pink; + colormap["yellow"] = c_yellow; + + colormap["h_black"] = h_black; + colormap["h_white"] = h_white; + colormap["h_ltgray"] = h_ltgray; + colormap["h_dkgray"] = h_dkgray; + colormap["h_red"] = h_red; + colormap["h_green"] = h_green; + colormap["h_blue"] = h_blue; + colormap["h_cyan"] = h_cyan; + colormap["h_magenta"] = h_magenta; + colormap["h_brown"] = h_brown; + colormap["h_ltred"] = h_ltred; + colormap["h_ltgreen"] = h_ltgreen; + colormap["h_ltblue"] = h_ltblue; + colormap["h_ltcyan"] = h_ltcyan; + colormap["h_pink"] = h_pink; + colormap["h_yellow"] = h_yellow; + + colormap["i_black"] = i_black; + colormap["i_white"] = i_white; + colormap["i_ltgray"] = i_ltgray; + colormap["i_dkgray"] = i_dkgray; + colormap["i_red"] = i_red; + colormap["i_green"] = i_green; + colormap["i_blue"] = i_blue; + colormap["i_cyan"] = i_cyan; + colormap["i_magenta"] = i_magenta; + colormap["i_brown"] = i_brown; + colormap["i_ltred"] = i_ltred; + colormap["i_ltgreen"] = i_ltgreen; + colormap["i_ltblue"] = i_ltblue; + colormap["i_ltcyan"] = i_ltcyan; + colormap["i_pink"] = i_pink; + colormap["i_yellow"] = i_yellow; + + colormap["white_red"] = c_white_red; + colormap["ltgray_red"] = c_ltgray_red; + colormap["light_gray_red"] = c_ltgray_red; + colormap["dkgray_red"] = c_dkgray_red; + colormap["dark_gray_red"] = c_dkgray_red; + colormap["red_red"] = c_red_red; + colormap["green_red"] = c_green_red; + colormap["blue_red"] = c_blue_red; + colormap["cyan_red"] = c_cyan_red; + colormap["magenta_red"] = c_magenta_red; + colormap["brown_red"] = c_brown_red; + colormap["ltred_red"] = c_ltred_red; + colormap["light_red_red"] = c_ltred_red; + colormap["ltgreen_red"] = c_ltgreen_red; + colormap["light_green_red"] = c_ltgreen_red; + colormap["ltblue_red"] = c_ltblue_red; + colormap["light_blue_red"] = c_ltblue_red; + colormap["ltcyan_red"] = c_ltcyan_red; + colormap["light_cyan_red"] = c_ltcyan_red; + colormap["pink_red"] = c_pink_red; + colormap["yellow_red"] = c_yellow_red; + + colormap["unset"] = c_unset; + + colormap["black_white"] = c_black_white; + colormap["dkgray_white"] = c_dkgray_white; + colormap["ltgray_white"] = c_ltgray_white; + colormap["white_white"] = c_white_white; + colormap["red_white"] = c_red_white; + colormap["ltred_white"] = c_ltred_white; + colormap["green_white"] = c_green_white; + colormap["ltgreen_white"] = c_ltgreen_white; + colormap["brown_white"] = c_brown_white; + colormap["yellow_white"] = c_yellow_white; + colormap["blue_white"] = c_blue_white; + colormap["ltblue_white"] = c_ltblue_white; + colormap["magenta_white"] = c_magenta_white; + colormap["pink_white"] = c_pink_white; + colormap["cyan_white"] = c_cyan_white; + colormap["ltcyan_white"] = c_ltcyan_white; + + colormap["black_green"] = c_black_green; + colormap["dkgray_green"] = c_dkgray_green; + colormap["ltgray_green"] = c_ltgray_green; + colormap["white_green"] = c_white_green; + colormap["red_green"] = c_red_green; + colormap["ltred_green"] = c_ltred_green; + colormap["green_green"] = c_green_green; + colormap["ltgreen_green"] = c_ltgreen_green; + colormap["brown_green"] = c_brown_green; + colormap["yellow_green"] = c_yellow_green; + colormap["blue_green"] = c_blue_green; + colormap["ltblue_green"] = c_ltblue_green; + colormap["magenta_green"] = c_magenta_green; + colormap["pink_green"] = c_pink_green; + colormap["cyan_green"] = c_cyan_green; + colormap["ltcyan_green"] = c_ltcyan_green; + colormap["black_yellow"] = c_black_yellow; + colormap["dkgray_yellow"] = c_dkgray_yellow; + colormap["ltgray_yellow"] = c_ltgray_yellow; + colormap["white_yellow"] = c_white_yellow; + colormap["red_yellow"] = c_red_yellow; + colormap["ltred_yellow"] = c_ltred_yellow; + colormap["green_yellow"] = c_green_yellow; + colormap["ltgreen_yellow"] = c_ltgreen_yellow; + colormap["brown_yellow"] = c_brown_yellow; + colormap["yellow_yellow"] = c_yellow_yellow; + colormap["blue_yellow"] = c_blue_yellow; + colormap["ltblue_yellow"] = c_ltblue_yellow; + colormap["magenta_yellow"] = c_magenta_yellow; + colormap["pink_yellow"] = c_pink_yellow; + colormap["cyan_yellow"] = c_cyan_yellow; + colormap["ltcyan_yellow"] = c_ltcyan_yellow; + colormap["black_magenta"] = c_black_magenta; + colormap["dkgray_magenta"] = c_dkgray_magenta; + colormap["ltgray_magenta"] = c_ltgray_magenta; + colormap["white_magenta"] = c_white_magenta; + colormap["red_magenta"] = c_red_magenta; + colormap["ltred_magenta"] = c_ltred_magenta; + colormap["green_magenta"] = c_green_magenta; + colormap["ltgreen_magenta"] = c_ltgreen_magenta; + colormap["brown_magenta"] = c_brown_magenta; + colormap["yellow_magenta"] = c_yellow_magenta; + colormap["blue_magenta"] = c_blue_magenta; + colormap["ltblue_magenta"] = c_ltblue_magenta; + colormap["magenta_magenta"] = c_magenta_magenta; + colormap["pink_magenta"] = c_pink_magenta; + colormap["cyan_magenta"] = c_cyan_magenta; + colormap["ltcyan_magenta"] = c_ltcyan_magenta; + colormap["black_cyan"] = c_black_cyan; + colormap["dkgray_cyan"] = c_dkgray_cyan; + colormap["ltgray_cyan"] = c_ltgray_cyan; + colormap["white_cyan"] = c_white_cyan; + colormap["red_cyan"] = c_red_cyan; + colormap["ltred_cyan"] = c_ltred_cyan; + colormap["green_cyan"] = c_green_cyan; + colormap["ltgreen_cyan"] = c_ltgreen_cyan; + colormap["brown_cyan"] = c_brown_cyan; + colormap["yellow_cyan"] = c_yellow_cyan; + colormap["blue_cyan"] = c_blue_cyan; + colormap["ltblue_cyan"] = c_ltblue_cyan; + colormap["magenta_cyan"] = c_magenta_cyan; + colormap["pink_cyan"] = c_pink_cyan; + colormap["cyan_cyan"] = c_cyan_cyan; + colormap["ltcyan_cyan"] = c_ltcyan_cyan; +} + /** * Given the name of a color, returns the nc_color constant that matches. If * no match is found, c_white is returned. @@ -639,70 +807,11 @@ nc_color rand_color() * @return The nc_color constant that matches the input. */ nc_color color_from_string(std::string new_color){ - if("red"==new_color){ - return c_red; - } else if("blue"==new_color){ - return c_blue; - } else if("green"==new_color){ - return c_green; - } else if("light_cyan"==new_color || "ltcyan"==new_color){ - return c_ltcyan; - } else if("brown"==new_color){ - return c_brown; - } else if("light_red"==new_color || "ltred"==new_color){ - return c_ltred; - } else if("white"==new_color){ - return c_white; - } else if("black"==new_color){ - return c_black; - } else if("light_blue"==new_color || "ltblue"==new_color){ - return c_ltblue; - } else if("yellow"==new_color){ - return c_yellow; - } else if("magenta"==new_color){ - return c_magenta; - } else if("cyan"==new_color){ - return c_cyan; - } else if("light_gray"==new_color || "ltgray"==new_color){ - return c_ltgray; - } else if("dark_gray"==new_color || "dkgray"==new_color){ - return c_dkgray; - } else if("light_green"==new_color || "ltgreen"==new_color){ - return c_ltgreen; - } else if("pink"==new_color){ - return c_pink; - } else if("white_red"==new_color){ - return c_white_red; - } else if("ltgray_red"==new_color || "light_gray_red"==new_color){ - return c_ltgray_red; - } else if("dkgray_red"==new_color || "dark_gray_red"==new_color){ - return c_dkgray_red; - } else if("red_red"==new_color){ - return c_red_red; - } else if("green_red"==new_color){ - return c_green_red; - } else if("blue_red"==new_color){ - return c_blue_red; - } else if("cyan_red"==new_color){ - return c_cyan_red; - } else if("magenta_red"==new_color){ - return c_magenta_red; - } else if("brown_red"==new_color){ - return c_brown_red; - } else if("ltred_red"==new_color || "light_red_red"==new_color){ - return c_ltred_red; - } else if("ltgreen_red"==new_color || "light_green_red"==new_color){ - return c_ltgreen_red; - } else if("ltblue_red"==new_color || "light_blue_red"==new_color){ - return c_ltblue_red; - } else if("ltcyan_red"==new_color || "light_cyan_red"==new_color){ - return c_ltcyan_red; - } else if("pink_red"==new_color){ - return c_pink_red; - } else if("yellow_red"==new_color){ - return c_yellow_red; + std::map::iterator iter = colormap.find(new_color); + if (iter == colormap.end()) { + return c_unset; } else { - return c_white; + return iter->second; } } diff --git a/color.h b/src/color.h similarity index 99% rename from color.h rename to src/color.h index 1481e1aeeb7e5..7d8898acd51e3 100644 --- a/color.h +++ b/src/color.h @@ -188,6 +188,7 @@ nc_color get_color_from_tag(const std::string &s, const nc_color base_color); void setattr(nc_color &col, col_attribute attr); void load_colors(JsonObject &jo); +void init_colormap(); #endif diff --git a/computer.cpp b/src/computer.cpp similarity index 97% rename from computer.cpp rename to src/computer.cpp index a2b32e8b373dd..4526771bdb3d8 100644 --- a/computer.cpp +++ b/src/computer.cpp @@ -43,11 +43,11 @@ computer& computer::operator=(const computer &rhs) name = rhs.name; mission_id = rhs.mission_id; options.clear(); - for (int i = 0; i < rhs.options.size(); i++) { + for (unsigned i = 0; i < rhs.options.size(); i++) { options.push_back(rhs.options[i]); } failures.clear(); - for (int i = 0; i < rhs.failures.size(); i++) { + for (unsigned i = 0; i < rhs.failures.size(); i++) { failures.push_back(rhs.failures[i]); } w_terminal = NULL; @@ -148,7 +148,7 @@ void computer::use(game *g) //reset_terminal(); print_newline(); print_line("%s - %s", name.c_str(), _("Root Menu")); - for (int i = 0; i < options.size(); i++) + for (unsigned i = 0; i < options.size(); i++) { print_line("%d - %s", i + 1, options[i].name.c_str()); } @@ -229,7 +229,7 @@ std::string computer::save_data() } data << savename << " " << security << " " << mission_id << " " << options.size() << " "; - for (int i = 0; i < options.size(); i++) + for (unsigned i = 0; i < options.size(); i++) { savename = options[i].name; found = savename.find(" "); @@ -242,7 +242,7 @@ std::string computer::save_data() options[i].security << " "; } data << failures.size() << " "; - for (int i = 0; i < failures.size(); i++) + for (unsigned i = 0; i < failures.size(); i++) { data << int(failures[i]) << " "; } @@ -341,11 +341,11 @@ void computer::activate_function(game *g, computer_action action) if (g->m.furn(x1, y1) == f_counter) { bool found_item = false; - for (int i = 0; i < g->m.i_at(x1, y1).size(); i++) + for (unsigned i = 0; i < g->m.i_at(x1, y1).size(); i++) { item *it = &(g->m.i_at(x1, y1)[i]); if (it->is_container()){ - item sewage = item(g->itypes["sewage"], g->turn); + item sewage = item(itypes["sewage"], g->turn); it_container* container = dynamic_cast(it->type); it_comest* comest = dynamic_cast(sewage.type); int maxCharges = container->contains * comest->charges; @@ -368,7 +368,7 @@ void computer::activate_function(game *g, computer_action action) } if (!found_item) { - item sewage(g->itypes["sewage"], g->turn); + item sewage(itypes["sewage"], g->turn); g->m.add_item_or_charges(x1, y1, sewage); } } @@ -541,10 +541,8 @@ void computer::activate_function(game *g, computer_action action) for (int i = minx; i <= maxx; i++) { for (int j = miny; j <= maxy; j++) - if ((g->cur_om->ter(i, j, g->levz) >= ot_sewer_ns && - g->cur_om->ter(i, j, g->levz) <= ot_sewer_nesw) || - (g->cur_om->ter(i, j, g->levz) >= ot_sewage_treatment && - g->cur_om->ter(i, j, g->levz) <= ot_sewage_treatment_under)) + if (is_ot_type("sewer", g->cur_om->ter(i, j, g->levz)) || + is_ot_type("sewage", g->cur_om->ter(i, j, g->levz))) { g->cur_om->seen(i, j, g->levz) = true; } @@ -606,7 +604,7 @@ void computer::activate_function(game *g, computer_action action) } g->u.add_memorial_log(_("Launched a nuke at a %s."), - oterlist[g->cur_om->ter(target.x, target.y, 0)].name.c_str()); + otermap[g->cur_om->ter(target.x, target.y, 0)].name.c_str()); for(int x = target.x - 2; x <= target.x + 2; x++) { for(int y = target.y - 2; y <= target.y + 2; y++) @@ -643,7 +641,7 @@ void computer::activate_function(game *g, computer_action action) { for (int y = 0; y < SEEY * MAPSIZE; y++) { - for (int i = 0; i < g->m.i_at(x, y).size(); i++) + for (unsigned i = 0; i < g->m.i_at(x, y).size(); i++) { if (g->m.i_at(x, y)[i].is_bionic()) { @@ -666,7 +664,7 @@ void computer::activate_function(game *g, computer_action action) print_line(_("Bionic access - Manifest:")); print_newline(); - for (int i = 0; i < names.size(); i++) + for (unsigned i = 0; i < names.size(); i++) { print_line(names[i].c_str()); } @@ -819,7 +817,7 @@ of pureed bone & LSD.")); debugmsg(_("Computer couldn't find its mission!")); return; } - item software(g->itypes[miss->item_id], 0); + item software(itypes[miss->item_id], 0); software.mission_id = mission_id; item* usb = g->u.pick_usb(); usb->contents.clear(); @@ -875,7 +873,7 @@ of pureed bone & LSD.")); } else { - item software(g->itypes["software_blood_data"], 0); + item software(itypes["software_blood_data"], 0); item* usb = g->u.pick_usb(); usb->contents.clear(); usb->put_in(software); @@ -927,7 +925,7 @@ of pureed bone & LSD.")); if (g->m.i_at(x, y)[0].type->id == "black_box") { print_line(_("Memory Bank: Military Hexron Encryption\nPrinting Transcript\n")); - item transcript(g->itypes["black_box_transcript"], g->turn); + item transcript(itypes["black_box_transcript"], g->turn); g->m.add_item_or_charges(g->u.posx, g->u.posy, transcript); } else @@ -1391,7 +1389,7 @@ void computer::activate_failure(game *g, computer_failure fail) { if (g->m.ter(x, y) == t_centrifuge) { - for (int i = 0; i < g->m.i_at(x, y).size(); i++) + for (unsigned i = 0; i < g->m.i_at(x, y).size(); i++) { if (g->m.i_at(x, y).empty()) { @@ -1433,7 +1431,7 @@ void computer::activate_failure(game *g, computer_failure fail) { if (g->m.ter(x, y) == t_floor_blue) { - for (int i = 0; i < g->m.i_at(x, y).size(); i++) + for (unsigned i = 0; i < g->m.i_at(x, y).size(); i++) { if (g->m.i_at(x, y).empty()) { diff --git a/computer.h b/src/computer.h similarity index 100% rename from computer.h rename to src/computer.h diff --git a/construction.cpp b/src/construction.cpp similarity index 85% rename from construction.cpp rename to src/construction.cpp index b71986fe7f19d..002af15346e52 100644 --- a/construction.cpp +++ b/src/construction.cpp @@ -358,6 +358,7 @@ void game::init_construction() TOOLCONT("primitive_hammer"); TOOLCONT("hatchet"); TOOL("wrench"); + TOOLCONT("toolset"); COMP("sheet_metal", 2); COMP("pipe", 8); @@ -368,7 +369,18 @@ void game::init_construction() TOOLCONT("primitive_hammer"); TOOLCONT("hatchet"); TOOL("wrench"); + TOOLCONT("toolset"); COMP("pipe", 12); + + CONSTRUCT(_("Build Cupboard"), 0, &construct::able_empty, + &construct::done_nothing); + STAGE(furnlist[f_cupboard], 20); + TOOL("hammer"); + TOOLCONT("primitive_hammer"); + TOOLCONT("hatchet"); + TOOLCONT("nailgun"); + COMP("nail", 8); + COMP("2x4", 3); CONSTRUCT(_("Build Counter"), 0, &construct::able_empty, &construct::done_nothing); @@ -380,6 +392,26 @@ void game::init_construction() COMP("nail", 8); COMP("2x4", 6); + CONSTRUCT(_("Build Table"), 0, &construct::able_empty, + &construct::done_nothing); + STAGE(furnlist[f_table], 20); + TOOL("hammer"); + TOOLCONT("primitive_hammer"); + TOOLCONT("hatchet"); + TOOLCONT("nailgun"); + COMP("nail", 8); + COMP("2x4", 4); + + CONSTRUCT(_("Build Chair"), 0, &construct::able_empty, + &construct::done_nothing); + STAGE(furnlist[f_chair], 20); + TOOL("hammer"); + TOOLCONT("primitive_hammer"); + TOOLCONT("hatchet"); + TOOLCONT("nailgun"); + COMP("nail", 8); + COMP("2x4", 2); + CONSTRUCT(_("Build Makeshift Bed"), 0, &construct::able_empty, &construct::done_nothing); STAGE(furnlist[f_makeshift_bed], 20); @@ -520,7 +552,7 @@ void game::construction_menu() // Print stages and their requirements int posx = 33, posy = 2; - for (int n = 0; n < current_con->stages.size(); n++) { + for (unsigned n = 0; n < current_con->stages.size(); n++) { nc_color color_stage = (player_can_build(u, total_inv, current_con, n, false, true) ? c_white : c_dkgray); @@ -551,7 +583,7 @@ void game::construction_menu() posx = 33; for (int i = 0; i < 9 && !has_tool[i]; i++) { mvwprintz(w_con, posy, posx-2, c_white, ">"); - for (int j = 0; j < stage.tools[i].size(); j++) { + for (unsigned j = 0; j < stage.tools[i].size(); j++) { itype_id tool = stage.tools[i][j].type; nc_color col = c_red; if (total_inv.has_amount(tool, 1)) { @@ -593,7 +625,7 @@ void game::construction_menu() if (has_component[i]) continue; mvwprintz(w_con, posy, posx-2, c_white, ">"); - for (int j = 0; j < stage.components[i].size() && i < 10; j++) { + for (unsigned j = 0; j < stage.components[i].size() && i < 10; j++) { nc_color col = c_red; component comp = stage.components[i][j]; if (( item_controller->find_template(comp.type)->is_ammo() && @@ -723,7 +755,7 @@ bool game::player_can_build(player &p, inventory pinv, constructable* con, if (stage->tools[j].size() > 0) { tools_required = true; has_tool = false; - for (int k = 0; k < stage->tools[j].size(); k++) { + for (unsigned k = 0; k < stage->tools[j].size(); k++) { if (pinv.has_amount(stage->tools[j][k].type, 1)) { has_tool = true; @@ -740,7 +772,7 @@ bool game::player_can_build(player &p, inventory pinv, constructable* con, if (stage->components[j].size() > 0) { components_required = true; has_component = false; - for (int k = 0; k < stage->components[j].size(); k++) { + for (unsigned k = 0; k < stage->components[j].size(); k++) { if (( item_controller->find_template(stage->components[j][k].type)->is_ammo() && pinv.has_charges(stage->components[j][k].type, stage->components[j][k].count) ) || @@ -783,7 +815,7 @@ void game::place_construction(constructable *con) y++; construct test; bool place_okay = (test.*(con->able))(this, point(x, y)); - for (int i = 0; i < con->stages.size() && !place_okay; i++) { + for (unsigned i = 0; i < con->stages.size() && !place_okay; i++) { ter_id t = con->stages[i].terrain; furn_id f = con->stages[i].furniture; if ((t != t_null || f != f_null) && (m.ter(x, y) == t || t == t_null) && @@ -794,7 +826,7 @@ void game::place_construction(constructable *con) if (place_okay) { // Make sure we're not trying to continue a construction that we can't finish int starting_stage = 0, max_stage = -1; - for (int i = 0; i < con->stages.size(); i++) { + for (unsigned i = 0; i < con->stages.size(); i++) { ter_id t = con->stages[i].terrain; furn_id f = con->stages[i].furniture; if ((t != t_null || f != f_null) && (m.ter(x, y) == t || t == t_null) && @@ -805,7 +837,7 @@ void game::place_construction(constructable *con) if (starting_stage == con->stages.size() && con->loopstages) starting_stage = 0; // Looping stages - for(int i = starting_stage; i < con->stages.size(); i++) { + for (int i = starting_stage; i < con->stages.size(); i++) { if (player_can_build(u, total_inv, con, i, true, true)) max_stage = i; else @@ -829,7 +861,7 @@ void game::place_construction(constructable *con) if (!choose_adjacent(_("Contruct where?"), dirx, diry)) return; bool point_is_okay = false; - for (int i = 0; i < valid.size() && !point_is_okay; i++) { + for (unsigned i = 0; i < valid.size() && !point_is_okay; i++) { if (valid[i].x == dirx && valid[i].y == diry) point_is_okay = true; } @@ -840,7 +872,7 @@ void game::place_construction(constructable *con) // Figure out what stage to start at, and what stage is the maximum int starting_stage = 0, max_stage = 0; - for (int i = 0; i < con->stages.size(); i++) { + for (unsigned i = 0; i < con->stages.size(); i++) { ter_id t = con->stages[i].terrain; furn_id f = con->stages[i].furniture; if ((t != t_null || f != f_null) && (m.ter(dirx, diry) == t || t == t_null) && @@ -988,17 +1020,13 @@ bool construct::able_pit(game *g, point p) bool construct::able_between_walls(game *g, point p) { + // need two or more orthogonally adjacent supports int num_supports = 0; - if (g->m.move_cost(p.x, p.y) != 0) { - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -1; dy <= 1; dy++) { - if (((dx == 0) ^ (dy == 0)) - && g->m.has_flag("SUPPORTS_ROOF", p.x + dx, p.y + dy)) { - num_supports++; - } - } - } - } + if (g->m.move_cost(p.x, p.y) == 0) { return false; } + if (g->m.has_flag("SUPPORTS_ROOF", p.x, p.y - 1)) { ++num_supports; } + if (g->m.has_flag("SUPPORTS_ROOF", p.x, p.y + 1)) { ++num_supports; } + if (g->m.has_flag("SUPPORTS_ROOF", p.x - 1, p.y)) { ++num_supports; } + if (g->m.has_flag("SUPPORTS_ROOF", p.x + 1, p.y)) { ++num_supports; } return num_supports >= 2; } @@ -1009,11 +1037,14 @@ bool construct::able_deconstruct(game *g, point p) void construct::done_window_pane(game *g, point p) { - g->m.spawn_item(g->u.posx, g->u.posy, "glass_sheet", 0); + (void)p; //unused + g->m.spawn_item(g->u.posx, g->u.posy, "glass_sheet"); } +// STUB void construct::done_move(game *g, point p) { + (void)g; (void)p; // TODO: something? return; // stub } @@ -1026,7 +1057,7 @@ void construct::done_tree(game *g, point p) x = p.x + x * 3 + rng(-1, 1); y = p.y + y * 3 + rng(-1, 1); std::vector tree = line_to(p.x, p.y, x, y, rng(1, 8)); - for (int i = 0; i < tree.size(); i++) { + for (unsigned i = 0; i < tree.size(); i++) { g->m.destroy(g, tree[i].x, tree[i].y, true); g->m.ter_set(tree[i].x, tree[i].y, t_trunk); } @@ -1034,15 +1065,16 @@ void construct::done_tree(game *g, point p) void construct::done_trunk_log(game *g, point p) { - g->m.spawn_item(p.x, p.y, "log", int(g->turn), rng(5, 15)); + g->m.spawn_item(p.x, p.y, "log", rng(5, 15), 0, g->turn); } void construct::done_trunk_plank(game *g, point p) { + (void)p; //unused int num_logs = rng(5, 15); for( int i = 0; i < num_logs; ++i ) { - item tmplog(g->itypes["log"], int(g->turn), g->nextinv); - iuse::cut_log_into_planks( g, &(g->u), &tmplog); + item tmplog(itypes["log"], int(g->turn), g->nextinv); + iuse::cut_log_into_planks( &(g->u), &tmplog); } } @@ -1093,9 +1125,9 @@ void construct::done_deconstruct(game *g, point p) case old_f_makeshift_bed: case old_f_bed: case old_f_armchair: - g->m.spawn_item(p.x, p.y, "2x4", 0, 10); - g->m.spawn_item(p.x, p.y, "rag", 0, rng(10,15)); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,8)); + g->m.spawn_item(p.x, p.y, "2x4", 10); + g->m.spawn_item(p.x, p.y, "rag", rng(10,15)); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,8)); g->m.furn_set(p.x, p.y, f_null); case old_f_bench: case old_f_crate_o: @@ -1104,57 +1136,57 @@ void construct::done_deconstruct(game *g, point p) case old_f_cupboard: case old_f_desk: case old_f_bulletin: - g->m.spawn_item(p.x, p.y, "2x4", 0, 4); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,10)); + g->m.spawn_item(p.x, p.y, "2x4", 4); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,10)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_locker: - g->m.spawn_item(p.x, p.y, "sheet_metal", 0, rng(1,2)); - g->m.spawn_item(p.x, p.y, "pipe", 0, rng(4,8)); + g->m.spawn_item(p.x, p.y, "sheet_metal", rng(1,2)); + g->m.spawn_item(p.x, p.y, "pipe", rng(4,8)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_rack: - g->m.spawn_item(p.x, p.y, "pipe", 0, rng(6,12)); + g->m.spawn_item(p.x, p.y, "pipe", rng(6,12)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_oven: - g->m.spawn_item(p.x, p.y, "scrap", 0, rng(2,6)); - g->m.spawn_item(p.x, p.y, "steel_chunk", 0, rng(2,3)); - g->m.spawn_item(p.x, p.y, "element", 0, rng(1,4)); - g->m.spawn_item(p.x, p.y, "pilot_light", 0, 1); + g->m.spawn_item(p.x, p.y, "scrap", rng(2,6)); + g->m.spawn_item(p.x, p.y, "steel_chunk", rng(2,3)); + g->m.spawn_item(p.x, p.y, "element", rng(1,4)); + g->m.spawn_item(p.x, p.y, "pilot_light", 1); g->m.furn_set(p.x, p.y, f_null); case old_f_fridge: - g->m.spawn_item(p.x, p.y, "scrap", 0, rng(2,6)); - g->m.spawn_item(p.x, p.y, "steel_chunk", 0, rng(2,3)); - g->m.spawn_item(p.x, p.y, "hose", 0, 1); - g->m.spawn_item(p.x, p.y, "cu_pipe", 0, rng(3, 6)); + g->m.spawn_item(p.x, p.y, "scrap", rng(2,6)); + g->m.spawn_item(p.x, p.y, "steel_chunk", rng(2,3)); + g->m.spawn_item(p.x, p.y, "hose", 1); + g->m.spawn_item(p.x, p.y, "cu_pipe", rng(3, 6)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_glass_fridge: - g->m.spawn_item(p.x, p.y, "scrap", 0, rng(2,6)); - g->m.spawn_item(p.x, p.y, "steel_chunk", 0, rng(2,3)); - g->m.spawn_item(p.x, p.y, "hose", 0, 1); - g->m.spawn_item(p.x, p.y, "glass_sheet", 0, 1); - g->m.spawn_item(p.x, p.y, "cu_pipe", 0, rng(3, 6)); + g->m.spawn_item(p.x, p.y, "scrap", rng(2,6)); + g->m.spawn_item(p.x, p.y, "steel_chunk", rng(2,3)); + g->m.spawn_item(p.x, p.y, "hose", 1); + g->m.spawn_item(p.x, p.y, "glass_sheet", 1); + g->m.spawn_item(p.x, p.y, "cu_pipe", rng(3, 6)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_counter: case old_f_dresser: case old_f_table: - g->m.spawn_item(p.x, p.y, "2x4", 0, 6); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,8)); + g->m.spawn_item(p.x, p.y, "2x4", 6); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,8)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_pool_table: - g->m.spawn_item(p.x, p.y, "2x4", 0, 4); - g->m.spawn_item(p.x, p.y, "rag", 0, 4); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,10)); + g->m.spawn_item(p.x, p.y, "2x4", 4); + g->m.spawn_item(p.x, p.y, "rag", 4); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,10)); g->m.furn_set(p.x, p.y, f_null); break; case old_f_bookcase: - g->m.spawn_item(p.x, p.y, "2x4", 0, 12); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(12,16)); + g->m.spawn_item(p.x, p.y, "2x4", 12); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(12,16)); g->m.furn_set(p.x, p.y, f_null); break; default: @@ -1167,40 +1199,40 @@ void construct::done_deconstruct(game *g, point p) { case old_t_door_c: case old_t_door_o: - g->m.spawn_item(p.x, p.y, "2x4", 0, 4); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,12)); + g->m.spawn_item(p.x, p.y, "2x4", 4); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,12)); g->m.ter_set(p.x, p.y, t_door_frame); break; case old_t_curtains: case old_t_window_domestic: - g->m.spawn_item(g->u.posx, g->u.posy, "stick", 0); - g->m.spawn_item(g->u.posx, g->u.posy, "sheet", 0, 2); - g->m.spawn_item(g->u.posx, g->u.posy, "glass_sheet", 0); - g->m.spawn_item(g->u.posx, g->u.posy, "nail", 0, 0, rng(3,4)); - g->m.spawn_item(g->u.posx, g->u.posy, "string_36", 0, 0, 1); + g->m.spawn_item(g->u.posx, g->u.posy, "stick"); + g->m.spawn_item(g->u.posx, g->u.posy, "sheet", 2); + g->m.spawn_item(g->u.posx, g->u.posy, "glass_sheet"); + g->m.spawn_item(g->u.posx, g->u.posy, "nail", 0, rng(3,4)); + g->m.spawn_item(g->u.posx, g->u.posy, "string_36", 0, 1); g->m.ter_set(p.x, p.y, t_window_empty); break; case old_t_window: - g->m.spawn_item(p.x, p.y, "glass_sheet", 0); + g->m.spawn_item(p.x, p.y, "glass_sheet"); g->m.ter_set(p.x, p.y, t_window_empty); break; case old_t_backboard: - g->m.spawn_item(p.x, p.y, "2x4", 0, 4); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,10)); + g->m.spawn_item(p.x, p.y, "2x4", 4); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,10)); g->m.ter_set(p.x, p.y, t_pavement); break; case old_t_sandbox: - g->m.spawn_item(p.x, p.y, "2x4", 0, 4); - g->m.spawn_item(p.x, p.y, "nail", 0, 0, rng(6,10)); + g->m.spawn_item(p.x, p.y, "2x4", 4); + g->m.spawn_item(p.x, p.y, "nail", 0, rng(6,10)); g->m.ter_set(p.x, p.y, t_floor); break; case old_t_slide: - g->m.spawn_item(p.x, p.y, "sheet_metal", 0); - g->m.spawn_item(p.x, p.y, "pipe", 0, rng(4,8)); + g->m.spawn_item(p.x, p.y, "sheet_metal"); + g->m.spawn_item(p.x, p.y, "pipe", rng(4,8)); g->m.ter_set(p.x, p.y, t_grass); break; case old_t_monkey_bars: - g->m.spawn_item(p.x, p.y, "pipe", 0, rng(6,12)); + g->m.spawn_item(p.x, p.y, "pipe", rng(6,12)); g->m.ter_set(p.x, p.y, t_grass); break; } diff --git a/construction.h b/src/construction.h similarity index 100% rename from construction.h rename to src/construction.h diff --git a/coordinates.h b/src/coordinates.h similarity index 100% rename from coordinates.h rename to src/coordinates.h diff --git a/crafting.cpp b/src/crafting.cpp similarity index 94% rename from crafting.cpp rename to src/crafting.cpp index 00899a6f4db87..5e8d07458a03d 100644 --- a/crafting.cpp +++ b/src/crafting.cpp @@ -640,7 +640,7 @@ recipe* game::select_crafting_recipe() } } } else { - for (int i = 0; i < current.size() && i < dataHeight+1; ++i) { + for (unsigned i = 0; i < current.size() && i < dataHeight+1; ++i) { if (i == line) { mvwprintz(w_data, i, 2, (available[i] ? h_white : h_dkgray), item_controller->find_template(current[i]->result)->name.c_str()); @@ -711,7 +711,7 @@ recipe* game::select_crafting_recipe() ypos++; xpos = 32; mvwputch(w_data, ypos, 30, col, '>'); - for (int j = 0; j < current[line]->tools[i].size(); j++) + for (unsigned j = 0; j < current[line]->tools[i].size(); j++) { itype_id type = current[line]->tools[i][j].type; int charges = current[line]->tools[i][j].count; @@ -761,7 +761,7 @@ recipe* game::select_crafting_recipe() // Loop to print the required components ypos++; mvwprintz(w_data, ypos, 30, col, _("Components required:")); - for (int i = 0; i < current[line]->components.size(); i++) + for (unsigned i = 0; i < current[line]->components.size(); i++) { if (current[line]->components[i].size() > 0) { @@ -769,7 +769,7 @@ recipe* game::select_crafting_recipe() mvwputch(w_data, ypos, 30, col, '>'); } xpos = 32; - for (int j = 0; j < current[line]->components[i].size(); j++) + for (unsigned j = 0; j < current[line]->components[i].size(); j++) { int count = current[line]->components[i][j].count; itype_id type = current[line]->components[i][j].type; @@ -974,7 +974,7 @@ void game::pick_recipes(std::vector ¤t, } } - for (int i = 0; i < current.size(); i++) + for (unsigned i = 0; i < current.size(); i++) { //Check if we have the requisite tools and components if(can_make(current[i])) @@ -1065,13 +1065,13 @@ void game::complete_craft() if (making->difficulty != 0 && diff_roll > skill_roll * (1 + 0.1 * rng(1, 5))) { add_msg(_("You fail to make the %s, and waste some materials."), item_controller->find_template(making->result)->name.c_str()); - for (int i = 0; i < making->components.size(); i++) + for (unsigned i = 0; i < making->components.size(); i++) { if (making->components[i].size() > 0) consume_items(&u, making->components[i]); } - for (int i = 0; i < making->tools.size(); i++) { + for (unsigned i = 0; i < making->tools.size(); i++) { if (making->tools[i].size() > 0) consume_tools(&u, making->tools[i], false); } @@ -1089,13 +1089,13 @@ void game::complete_craft() // If we're here, the craft was a success! // Use up the components and tools std::list used; - for (int i = 0; i < making->components.size(); i++) { + for (unsigned i = 0; i < making->components.size(); i++) { if (making->components[i].size() > 0) { std::list tmp = consume_items(&u, making->components[i]); used.splice(used.end(), tmp); } } - for (int i = 0; i < making->tools.size(); i++) { + for (unsigned i = 0; i < making->tools.size(); i++) { if (making->tools[i].size() > 0) consume_tools(&u, making->tools[i], false); } @@ -1178,7 +1178,7 @@ std::list game::consume_items(player *p, std::vector components inventory map_inv; map_inv.form_from_map(this, point(p->posx, p->posy), PICKUP_RANGE); - for (int i = 0; i < components.size(); i++) + for (unsigned i = 0; i < components.size(); i++) { itype_id type = components[i].type; int count = abs(components[i].count); @@ -1246,16 +1246,16 @@ std::list game::consume_items(player *p, std::vector components { std::vector options; // List for the menu_vec below // Populate options with the names of the items - for (int i = 0; i < map_has.size(); i++) + for (unsigned i = 0; i < map_has.size(); i++) { std::string tmpStr = item_controller->find_template(map_has[i].type)->name + _(" (nearby)"); options.push_back(tmpStr); } - for (int i = 0; i < player_has.size(); i++) + for (unsigned i = 0; i < player_has.size(); i++) { options.push_back(item_controller->find_template(player_has[i].type)->name); } - for (int i = 0; i < mixed.size(); i++) + for (unsigned i = 0; i < mixed.size(); i++) { std::string tmpStr = item_controller->find_template(mixed[i].type)->name +_(" (on person & nearby)"); options.push_back(tmpStr); @@ -1286,7 +1286,7 @@ std::list game::consume_items(player *p, std::vector components } } - for (int i = 0; i < player_use.size(); i++) + for (unsigned i = 0; i < player_use.size(); i++) { if (item_controller->find_template(player_use[i].type)->count_by_charges() && player_use[i].count > 0) @@ -1301,7 +1301,7 @@ std::list game::consume_items(player *p, std::vector components ret.splice(ret.end(), tmp); } } - for (int i = 0; i < map_use.size(); i++) + for (unsigned i = 0; i < map_use.size(); i++) { if (item_controller->find_template(map_use[i].type)->count_by_charges() && map_use[i].count > 0) @@ -1318,7 +1318,7 @@ std::list game::consume_items(player *p, std::vector components ret.splice(ret.end(), tmp); } } - for (int i = 0; i < mixed_use.size(); i++) + for (unsigned i = 0; i < mixed_use.size(); i++) { if (item_controller->find_template(mixed_use[i].type)->count_by_charges() && mixed_use[i].count > 0) @@ -1355,7 +1355,7 @@ void game::consume_tools(player *p, std::vector tools, bool force_ava std::vector player_has; std::vector map_has; // Use charges of any tools that require charges used - for (int i = 0; i < tools.size() && !found_nocharge; i++) { + for (unsigned i = 0; i < tools.size() && !found_nocharge; i++) { if (!force_available && tools[i].available != 1) { continue; @@ -1382,11 +1382,11 @@ void game::consume_tools(player *p, std::vector tools, bool force_ava } else { // Variety of options, list them and pick one // Populate the list std::vector options; - for (int i = 0; i < map_has.size(); i++) { + for (unsigned i = 0; i < map_has.size(); i++) { std::string tmpStr = item_controller->find_template(map_has[i].type)->name + _(" (nearby)"); options.push_back(tmpStr); } - for (int i = 0; i < player_has.size(); i++) + for (unsigned i = 0; i < player_has.size(); i++) options.push_back(item_controller->find_template(player_has[i].type)->name); if (options.empty()) // This SHOULD only happen if cooking with a fire, @@ -1439,14 +1439,14 @@ void game::disassemble(char ch) // loop over the tools and see what's required...again inventory crafting_inv = crafting_inventory(&u); bool have_all_tools = true; - for (int j = 0; j < cur_recipe->tools.size(); j++) + for (unsigned j = 0; j < cur_recipe->tools.size(); j++) { if (cur_recipe->tools[j].size() == 0) // no tools required, may change this { continue; } bool have_this_tool = false; - for (int k = 0; k < cur_recipe->tools[j].size(); k++) + for (unsigned k = 0; k < cur_recipe->tools[j].size(); k++) { itype_id type = cur_recipe->tools[j][k].type; int req = cur_recipe->tools[j][k].count; // -1 => 1 @@ -1533,7 +1533,7 @@ void game::disassemble(char ch) { //twice the volume then multiplied by 10 (a book with volume 3 will give 60 pages) int num_pages = (dis_item->volume() *2) * 10; - m.spawn_item(u.posx,u.posy,"paper", 0, 1, num_pages); + m.spawn_item(u.posx, u.posy, "paper", 0, num_pages); u.inv.remove_item(dis_item); } return; @@ -1585,7 +1585,7 @@ void game::complete_disassemble() } // consume tool charges - for (int j = 0; j < dis->tools.size(); j++) + for (unsigned j = 0; j < dis->tools.size(); j++) { if (dis->tools[j].size() > 0) consume_tools(&u, dis->tools[j], false); @@ -1607,7 +1607,7 @@ void game::complete_disassemble() if (dis->skill_used) u.practice(turn, dis->skill_used, (dis->difficulty) * 2); - for (int j = 0; j < dis->components.size(); j++) + for (unsigned j = 0; j < dis->components.size(); j++) { if (dis->components[j].size() != 0) { @@ -1624,7 +1624,7 @@ void game::complete_disassemble() if (newit.count_by_charges()) { if (dis->difficulty == 0 || comp_success) - m.spawn_item(u.posx, u.posy, dis->components[j][0].type, 0, 0, compcount); + m.spawn_item(u.posx, u.posy, dis->components[j][0].type, 0, compcount); else add_msg(_("You fail to recover a component.")); compcount = 0; diff --git a/crafting.h b/src/crafting.h similarity index 100% rename from crafting.h rename to src/crafting.h diff --git a/cursesdef.h b/src/cursesdef.h similarity index 82% rename from cursesdef.h rename to src/cursesdef.h index 262d18ef3112d..c74f9f641a1a8 100644 --- a/cursesdef.h +++ b/src/cursesdef.h @@ -4,10 +4,8 @@ #if (defined TILES || defined SDLTILES || defined _WIN32 || defined WINDOWS) #include "catacurse.h" #elif (defined __CYGWIN__) - #include "input_defs.h" #include "ncurses/curses.h" #else - #include "input_defs.h" #include #endif diff --git a/cursesport.cpp b/src/cursesport.cpp similarity index 99% rename from cursesport.cpp rename to src/cursesport.cpp index f4ee66bb50370..b703f71a12eeb 100644 --- a/cursesport.cpp +++ b/src/cursesport.cpp @@ -4,6 +4,8 @@ #include "color.h" #include "catacharset.h" +#include // strlen + //*********************************** //Globals * //*********************************** @@ -73,6 +75,10 @@ WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x) //Deletes the window and marks it as free. Clears it just in case. int delwin(WINDOW *win) { + if (win == NULL) { + return 1; + } + int j; win->inuse = false; win->draw = false; @@ -83,6 +89,7 @@ int delwin(WINDOW *win) } delete[] win->line; delete win; + win = NULL; return 1; } diff --git a/debug.cpp b/src/debug.cpp similarity index 100% rename from debug.cpp rename to src/debug.cpp diff --git a/debug.h b/src/debug.h similarity index 100% rename from debug.h rename to src/debug.h diff --git a/defense.cpp b/src/defense.cpp similarity index 94% rename from defense.cpp rename to src/defense.cpp index f615a1d4899a4..d4fe368a6b8dc 100644 --- a/defense.cpp +++ b/src/defense.cpp @@ -158,10 +158,12 @@ void defense_game::pre_action(game *g, action_id &act) void defense_game::post_action(game *g, action_id act) { + (void)g; (void)act; } void defense_game::game_over(game *g) { + (void)g; //unused popup(_("You managed to survive through wave %d!"), current_wave); // Reset changed information reset_mtypes(); @@ -191,16 +193,16 @@ void defense_game::reset_mtypes() void defense_game::reset_itypes() { - g->itypes["2x4"]->volume = original_itype_values["2x4"][0]; - g->itypes["2x4"]->weight = original_itype_values["2x4"][1]; - g->itypes["landmine"]->price = original_itype_values["landmine"][0]; - g->itypes["bot_turret"]->price = original_itype_values["bot_turret"][0]; + itypes["2x4"]->volume = original_itype_values["2x4"][0]; + itypes["2x4"]->weight = original_itype_values["2x4"][1]; + itypes["landmine"]->price = original_itype_values["landmine"][0]; + itypes["bot_turret"]->price = original_itype_values["bot_turret"][0]; } void defense_game::reset_constructions() { - for (int i = 0; i < g->constructions.size(); i++) { - for (int j = 0; j < g->constructions[i]->stages.size(); j++) { + for (unsigned i = 0; i < g->constructions.size(); i++) { + for (unsigned j = 0; j < g->constructions[i]->stages.size(); j++) { g->constructions[i]->stages[j].time = original_construction_values[i][j]; } } @@ -221,23 +223,24 @@ void defense_game::reset_recipes() void defense_game::init_itypes(game *g) { std::vector change_2x4, change_landmine, change_bot; - change_2x4.push_back(g->itypes["2x4"]->volume); - change_2x4.push_back(g->itypes["2x4"]->weight); - change_landmine.push_back(g->itypes["landmine"]->price); - change_bot.push_back(g->itypes["bot_turret"]->price); + change_2x4.push_back(itypes["2x4"]->volume); + change_2x4.push_back(itypes["2x4"]->weight); + change_landmine.push_back(itypes["landmine"]->price); + change_bot.push_back(itypes["bot_turret"]->price); original_itype_values["2x4"] = change_2x4; original_itype_values["landmine"] = change_landmine; original_itype_values["bot_turret"] = change_bot; - g->itypes["2x4"]->volume = 0; - g->itypes["2x4"]->weight = 0; - g->itypes["landmine"]->price = 300; - g->itypes["bot_turret"]->price = 6000; + itypes["2x4"]->volume = 0; + itypes["2x4"]->weight = 0; + itypes["landmine"]->price = 300; + itypes["bot_turret"]->price = 6000; } void defense_game::init_mtypes(game *g) { + (void)g; //unused m_flag flags[] = {MF_BASHES, MF_SMELLS, MF_HEARS, MF_SEES}; monflags_to_add.insert(flags, flags + 4); @@ -263,8 +266,8 @@ void defense_game::init_mtypes(game *g) void defense_game::init_constructions(game *g) { - for (int i = 0; i < g->constructions.size(); i++) { - for (int j = 0; j < g->constructions[i]->stages.size(); j++) { + for (unsigned i = 0; i < g->constructions.size(); i++) { + for (unsigned j = 0; j < g->constructions[i]->stages.size(); j++) { original_construction_values[i].push_back(g->constructions[i]->stages[j].time); g->constructions[i]->stages[j].time = 1; // Everything takes 1 minute } @@ -273,6 +276,7 @@ void defense_game::init_constructions(game *g) void defense_game::init_recipes(game *g) { + (void)g; //unused for (recipe_map::iterator map_iter = recipes.begin(); map_iter != recipes.end(); ++map_iter) { for (recipe_list::iterator list_iter = map_iter->second.begin(); list_iter != map_iter->second.end(); ++list_iter) @@ -287,7 +291,7 @@ void defense_game::init_map(game *g) { for (int x = 0; x < OMAPX; x++) { for (int y = 0; y < OMAPY; y++) { - g->cur_om->ter(x, y, 0) = ot_field; + g->cur_om->ter(x, y, 0) = "field"; g->cur_om->seen(x, y, 0) = true; } } @@ -299,36 +303,40 @@ void defense_game::init_map(game *g) g->u.posx = SEEX; g->u.posy = SEEY; - switch (location) { + switch (location) { - case DEFLOC_HOSPITAL: - for (int x = 49; x <= 51; x++) { - for (int y = 49; y <= 51; y++) - g->cur_om->ter(x, y, 0) = ot_hospital; - } - g->cur_om->ter(50, 49, 0) = ot_hospital_entrance; - break; + case DEFLOC_HOSPITAL: + for (int x = 49; x <= 51; x++) { + for (int y = 49; y <= 51; y++) { + g->cur_om->ter(x, y, 0) = "hospital"; + } + } + g->cur_om->ter(50, 49, 0) = "hospital_entrance"; + break; - case DEFLOC_MALL: - for (int x = 49; x <= 51; x++) { - for (int y = 49; y <= 51; y++) - g->cur_om->ter(x, y, 0) = ot_megastore; - } - g->cur_om->ter(50, 49, 0) = ot_megastore_entrance; - break; + case DEFLOC_MALL: + for (int x = 49; x <= 51; x++) { + for (int y = 49; y <= 51; y++) { + g->cur_om->ter(x, y, 0) = "megastore"; + } + } + g->cur_om->ter(50, 49, 0) = "megastore_entrance"; + break; - case DEFLOC_BAR: - g->cur_om->ter(50, 50, 0) = ot_bar_north; - break; + case DEFLOC_BAR: + g->cur_om->ter(50, 50, 0) = "bar_north"; + break; + + case DEFLOC_MANSION: + for (int x = 49; x <= 51; x++) { + for (int y = 49; y <= 51; y++) { + g->cur_om->ter(x, y, 0) = "mansion"; + } + } + g->cur_om->ter(50, 49, 0) = "mansion_entrance"; + break; + } - case DEFLOC_MANSION: - for (int x = 49; x <= 51; x++) { - for (int y = 49; y <= 51; y++) - g->cur_om->ter(x, y, 0) = ot_mansion; - } - g->cur_om->ter(50, 49, 0) = ot_mansion_entrance; - break; - } // Init the map int old_percent = 0; for (int i = 0; i <= MAPSIZE * 2; i += 2) { @@ -978,17 +986,17 @@ Press Enter to buy everything in your cart, Esc to buy nothing.")); if (current_window == 1 && items[category_selected].size() > 0) { item_count[category_selected][item_selected]++; itype_id tmp_itm = items[category_selected][item_selected]; - total_price += caravan_price(g->u, g->itypes[tmp_itm]->price); + total_price += caravan_price(g->u, itypes[tmp_itm]->price); if (category_selected == CARAVAN_CART) { // Find the item in its category for (int i = 1; i < NUM_CARAVAN_CATEGORIES; i++) { - for (int j = 0; j < items[i].size(); j++) { + for (unsigned j = 0; j < items[i].size(); j++) { if (items[i][j] == tmp_itm) item_count[i][j]++; } } } else { // Add / increase the item in the shopping cart bool found_item = false; - for (int i = 0; i < items[0].size() && !found_item; i++) { + for (unsigned i = 0; i < items[0].size() && !found_item; i++) { if (items[0][i] == tmp_itm) { found_item = true; item_count[0][i]++; @@ -1012,17 +1020,17 @@ Press Enter to buy everything in your cart, Esc to buy nothing.")); item_count[category_selected][item_selected] > 0) { item_count[category_selected][item_selected]--; itype_id tmp_itm = items[category_selected][item_selected]; - total_price -= caravan_price(g->u, g->itypes[tmp_itm]->price); + total_price -= caravan_price(g->u, itypes[tmp_itm]->price); if (category_selected == CARAVAN_CART) { // Find the item in its category for (int i = 1; i < NUM_CARAVAN_CATEGORIES; i++) { - for (int j = 0; j < items[i].size(); j++) { + for (unsigned j = 0; j < items[i].size(); j++) { if (items[i][j] == tmp_itm) item_count[i][j]--; } } } else { // Decrease / remove the item in the shopping cart bool found_item = false; - for (int i = 0; i < items[0].size() && !found_item; i++) { + for (unsigned i = 0; i < items[0].size() && !found_item; i++) { if (items[0][i] == tmp_itm) { found_item = true; item_count[0][i]--; @@ -1079,9 +1087,9 @@ Press Enter to buy everything in your cart, Esc to buy nothing.")); if (!cancel) { g->u.cash -= total_price; bool dropped_some = false; - for (int i = 0; i < items[0].size(); i++) { - item tmp(g->itypes[ items[0][i] ], g->turn); - tmp = tmp.in_its_container(&(g->itypes)); + for (unsigned i = 0; i < items[0].size(); i++) { + item tmp(itypes[ items[0][i] ], g->turn); + tmp = tmp.in_its_container(&(itypes)); for (int j = 0; j < item_count[0][i]; j++) { if (g->u.can_pickVolume(tmp.volume()) && g->u.can_pickWeight(tmp.weight()) && g->u.inv.size() < inv_chars.size()) @@ -1249,7 +1257,7 @@ void draw_caravan_items(WINDOW *w, game *g, std::vector *items, mvwprintz(w, i, 1, c_black, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); // THEN print it--if item_selected is valid if (item_selected < items->size()) { - item tmp(g->itypes[ (*items)[item_selected] ], 0); // Dummy item to get info + item tmp(itypes[ (*items)[item_selected] ], 0); // Dummy item to get info fold_and_print(w, 12, 1, 38, c_white, tmp.info().c_str()); } // Next, clear the item list on the right @@ -1258,10 +1266,10 @@ void draw_caravan_items(WINDOW *w, game *g, std::vector *items, // Finally, print the item list on the right for (int i = offset; i <= offset + FULL_SCREEN_HEIGHT-2 && i < items->size(); i++) { mvwprintz(w, i - offset + 1, 40, (item_selected == i ? h_white : c_white), - g->itypes[ (*items)[i] ]->name.c_str()); + itypes[ (*items)[i] ]->name.c_str()); wprintz(w, c_white, " x %2d", (*counts)[i]); if ((*counts)[i] > 0) { - int price = caravan_price(g->u, g->itypes[(*items)[i]]->price *(*counts)[i]); + int price = caravan_price(g->u, itypes[(*items)[i]]->price *(*counts)[i]); wprintz(w, (price > g->u.cash ? c_red : c_green), "($%6d)", price); } } @@ -1318,6 +1326,7 @@ void defense_game::spawn_wave(game *g) std::vector defense_game::pick_monster_wave(game *g) { + (void)g; //unused std::vector valid; std::vector ret; @@ -1375,7 +1384,7 @@ std::string defense_game::special_wave_message(std::string name) // Capitalize capitalize_letter(name); - for (int i = 2; i < name.size(); i++) { + for (unsigned i = 2; i < name.size(); i++) { if (name[i - 1] == ' ') { capitalize_letter(name, i); } diff --git a/dialogue.h b/src/dialogue.h similarity index 100% rename from dialogue.h rename to src/dialogue.h diff --git a/disease.cpp b/src/disease.cpp similarity index 99% rename from disease.cpp rename to src/disease.cpp index 37730cff64bc3..89fa74a202585 100644 --- a/disease.cpp +++ b/src/disease.cpp @@ -1000,7 +1000,7 @@ void dis_effect(player &p, disease &dis) { body_part_name(dis.bp, dis.side).c_str()); g->cancel_activity(); } else if (g->u_see(p.posx, p.posy)) { - g->add_msg(_("%s starts scratching their %s!"), p.name.c_str(), + g->add_msg(_("%s starts scratching their %s!"), p.name.c_str(), body_part_name(dis.bp, dis.side).c_str()); } p.moves -= 150; @@ -1124,7 +1124,7 @@ void dis_effect(player &p, disease &dis) { if (dis.duration > 3600) { // 12 teles if (one_in(4000 - int(.25 * (dis.duration - 3600)))) { - MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup("GROUP_NETHER", &g->mtypes); + MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup("GROUP_NETHER"); monster beast(GetMType(spawn_details.name)); int x, y; int tries = 0; @@ -1191,7 +1191,7 @@ void dis_effect(player &p, disease &dis) { case DI_ATTENTION: if (one_in(100000 / dis.duration) && one_in(100000 / dis.duration) && one_in(250)) { - MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup("GROUP_NETHER", &g->mtypes); + MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup("GROUP_NETHER"); monster beast(GetMType(spawn_details.name)); int x, y; int tries = 0; @@ -2222,7 +2222,7 @@ void manage_fungal_infection(player& p, disease& dis) { g->add_msg(_("The %s is covered in tiny spores!"), g->zombie(zid).name().c_str()); } - if (!g->zombie(zid).make_fungus(g)) { + if (!g->zombie(zid).make_fungus()) { g->kill_mon(zid); } } else if (one_in(4) && g->num_zombies() <= 1000){ @@ -2244,18 +2244,27 @@ void manage_fungal_infection(player& p, disease& dis) { void manage_sleep(player& p, disease& dis) { p.moves = 0; - if(int(g->turn) % 25 == 0) { + if(int(g->turn) % 50 == 0) { + int recovery_chance; + // Accelerated recovery capped to 2x over 2 hours + // After 16 hours of activity, equal to 7.25 hours of rest + if (dis.intensity < 24) { + dis.intensity++; + } else if (dis.intensity < 1) { + dis.intensity = 1; + } + recovery_chance = 24 - dis.intensity + 1; if (p.fatigue > 0) { - p.fatigue -= 1 + rng(0, 1) * rng(0, 1); + p.fatigue -= 1 + one_in(recovery_chance); } if (p.has_trait("FASTHEALER")) { - p.healall(rng(0, 1)); + p.healall(1); } else if (p.has_trait("FASTHEALER2")) { - p.healall(rng(0, 2)); + p.healall(1 + one_in(2)); } else if (p.has_trait("REGEN")) { - p.healall(rng(1, 2)); + p.healall(2); } else { - p.healall(rng(0, 1) * rng(0, 1) * rng(0, 1)); + p.healall(one_in(4)); } if (p.fatigue <= 0 && p.fatigue > -20) { diff --git a/disease.h b/src/disease.h similarity index 100% rename from disease.h rename to src/disease.h diff --git a/editmap.cpp b/src/editmap.cpp similarity index 96% rename from editmap.cpp rename to src/editmap.cpp index 7c9323804158e..ba3911fed97d2 100644 --- a/editmap.cpp +++ b/src/editmap.cpp @@ -28,7 +28,6 @@ #include #include #include "debug.h" -#include "artifactdata.h" #define dbg(x) dout((DebugLevel)(x),D_GAME) << __FILE__ << ":" << __LINE__ << ": " #define maplim 132 @@ -80,8 +79,7 @@ void edit_json( SAVEOBJ *it, game * g ) { int tmret = -1; - picojson::value js1=it->json_save(true); - std::string save1 = js1.serialize(); + std::string save1 = it->serialize(); std::string osave1=save1; std::vector fs1 = fld_string(save1, TERMX-10); std::string save2; @@ -95,11 +93,8 @@ void edit_json( SAVEOBJ *it, game * g ) if(tmret == 0) { std::stringstream dump; dump << save1; - dump >> js1; - - it->json_load(js1, g); - picojson::value s2=it->json_save(true); - save2 = s2.serialize(); + it->deserialize(dump); + save2 = it->serialize(); fs2 = fld_string(save2, TERMX-10); tm.addentry(-1, true, -2, "== Reloaded: =====================" ); @@ -125,7 +120,7 @@ void edit_json( SAVEOBJ *it, game * g ) fout.close(); fout.open("save/jtest-2j.txt"); - fout << it->json_save(true).serialize(); + fout << it->serialize(); fout.close(); } tm.addentry(0,true,'r',"rehash"); @@ -264,7 +259,7 @@ void editmap::uphelp (std::string txt1, std::string txt2, std::string title) * main() */ -point editmap::edit(point coords) +point editmap::edit() { target.x = g->u.posx + g->u.view_offset_x; target.y = g->u.posy + g->u.view_offset_y; @@ -298,16 +293,16 @@ point editmap::edit(point coords) input = get_input(ch); // get_input: Not very useful for arbitrary keys, so check getch value first. } if(ch == 'g') { - edit_ter( target ); + edit_ter(); lastop = 'g'; } else if ( ch == 'f' ) { - edit_fld( target ); + edit_fld(); lastop = 'f'; } else if ( ch == 'i' ) { - edit_itm( target ); + edit_itm(); lastop = 'i'; } else if ( ch == 't' ) { - edit_trp( target ); + edit_trp(); lastop = 't'; } else if ( ch == 'v' ) { uberdraw = !uberdraw; @@ -317,14 +312,14 @@ point editmap::edit(point coords) int veh_part = -1; vehicle *veh = g->m.veh_at(target.x, target.y, veh_part); if(mon_index >= 0) { - edit_mon(target); + edit_mon(); } else if (npc_index >= 0) { - edit_npc(target); + edit_npc(); } else if (veh) { - edit_veh(target); + edit_veh(); } } else if ( ch == 'o' ) { - edit_mapgen( target ); + edit_mapgen(); lastop = 'o'; target_list.clear(); origin = target; @@ -630,7 +625,7 @@ int get_alt_ter(bool isvert, ter_id sel_ter) { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///// edit terrain type / furniture -int editmap::edit_ter(point coords) +int editmap::edit_ter() { int ret = 0; int pwh = TERRAIN_WINDOW_HEIGHT - 4; @@ -945,7 +940,7 @@ void editmap::update_fmenu_entry(uimenu *fmenu, field *field, int idx) fmenu->entries[idx].extratxt.color = ftype.color[fdens-1]; } -void editmap::setup_fmenu(uimenu *fmenu, field *field) +void editmap::setup_fmenu(uimenu *fmenu) { std::string fname; fmenu->entries.clear(); @@ -963,7 +958,7 @@ void editmap::setup_fmenu(uimenu *fmenu, field *field) } } -int editmap::edit_fld(point coords) +int editmap::edit_fld() { int ret = 0; uimenu fmenu; @@ -972,7 +967,7 @@ int editmap::edit_fld(point coords) fmenu.w_y = 0; fmenu.w_x = TERRAIN_WINDOW_WIDTH + VIEW_OFFSET_X; fmenu.return_invalid = true; - setup_fmenu(&fmenu, cur_field); + setup_fmenu(&fmenu); do { uphelp("[s/tab] shape select, [m]ove, [<,>] density", @@ -1064,7 +1059,7 @@ int editmap::edit_fld(point coords) int sel_tmp = fmenu.selected; int ret = select_shape(editshape, ( fmenu.keypress == 'm' ? 1 : 0 ) ); if ( ret > 0 ) { - setup_fmenu(&fmenu, cur_field); + setup_fmenu(&fmenu); } fmenu.selected = sel_tmp; } else if ( fmenu.keypress == 'v' ) { @@ -1078,7 +1073,7 @@ int editmap::edit_fld(point coords) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///// edit traps -int editmap::edit_trp(point coords) +int editmap::edit_trp() { int ret = 0; int pwh = TERRAIN_WINDOW_HEIGHT - infoHeight - 1; @@ -1166,7 +1161,7 @@ enum editmap_imenu_ent { imenu_exit, }; -int editmap::edit_itm(point coords) +int editmap::edit_itm() { int ret = 0; uimenu ilmenu; @@ -1281,7 +1276,7 @@ int editmap::edit_itm(point coords) /* * Todo */ -int editmap::edit_mon(point coords) +int editmap::edit_mon() { int ret = 0; int mon_index = g->mon_at(target.x, target.y); @@ -1291,7 +1286,7 @@ int editmap::edit_mon(point coords) } -int editmap::edit_veh(point coords) +int editmap::edit_veh() { int ret = 0; int veh_part = -1; @@ -1400,7 +1395,7 @@ bool editmap::move_target( InputEvent &input, int ch, int moveorigin ) /* * Todo */ -int editmap::edit_npc(point coords) +int editmap::edit_npc() { int ret = 0; int npc_index = g->npc_at(target.x, target.y); @@ -1548,11 +1543,11 @@ int editmap::mapgen_preview( real_coords &tc, uimenu &gmenu ) update_view(true); - oms[1][1]->ter(tc.om_pos.x, tc.om_pos.y, zlevel) = (oter_id)gmenu.ret; + oms[1][1]->ter(tc.om_pos.x, tc.om_pos.y, zlevel) = (int)gmenu.ret; tinymap tmpmap(&g->traps); tmpmap.load(g, tc.om_sub.x, tc.om_sub.y, zlevel, false, oms[1][1]); // this should -not- be saved, map::save appends a dupe to mapbuffer. - tmpmap.generate(g, oms[1][1], tc.abs_sub.x, tc.abs_sub.y, zlevel, int(g->turn));; + tmpmap.generate(g, oms[1][1], tc.om_sub.x, tc.om_sub.y, zlevel, int(g->turn));; point pofs = pos2screen(target.x - 11, target.y - 11); // WINDOW *w_preview = newwin(24, 24, pofs.y, pofs.x ); @@ -1577,16 +1572,16 @@ int editmap::mapgen_preview( real_coords &tc, uimenu &gmenu ) gpmenu.show(); uphelp("[pgup/pgdn]: prev/next oter type", "[up/dn] select, [enter] accept, [q] abort", - string_format("Mapgen: %s", oterlist[(oter_id)gmenu.ret].name.substr(0, 40).c_str() ) + string_format("Mapgen: %s", terlist[gmenu.ret].id.substr(0, 40).c_str() ) ); int lastsel = gmenu.selected; bool showpreview = true; do { if ( gmenu.selected != lastsel ) { lastsel = gmenu.selected; - oms[1][1]->ter(tc.om_pos.x, tc.om_pos.y, zlevel) = (oter_id)gmenu.selected; + oms[1][1]->ter(tc.om_pos.x, tc.om_pos.y, zlevel) = gmenu.selected; cleartmpmap( tmpmap ); - tmpmap.generate(g, oms[1][1], tc.abs_sub.x, tc.abs_sub.y, zlevel, int(g->turn));; + tmpmap.generate(g, oms[1][1], tc.om_sub.x, tc.om_sub.y, zlevel, int(g->turn));; showpreview = true; } if ( showpreview ) { @@ -1611,7 +1606,7 @@ int editmap::mapgen_preview( real_coords &tc, uimenu &gmenu ) if ( gpmenu.ret == 0 ) { cleartmpmap( tmpmap ); - tmpmap.generate(g, oms[1][1], tc.abs_sub.x, tc.abs_sub.y, zlevel, int(g->turn));; + tmpmap.generate(g, oms[1][1], tc.om_sub.x, tc.om_sub.y, zlevel, int(g->turn));; showpreview = true; } else if ( gpmenu.ret == 1 ) { tmpmap.rotate(1); @@ -1714,7 +1709,7 @@ int editmap::mapgen_preview( real_coords &tc, uimenu &gmenu ) /* * Move mapgen's target, which is different enough from the standard tile edit to warrant it's own function. */ -int editmap::mapgen_retarget ( WINDOW *preview, map *mptr) +int editmap::mapgen_retarget() { int ret = 0; int ch = 0; @@ -1762,7 +1757,7 @@ int editmap::mapgen_retarget ( WINDOW *preview, map *mptr) /* * apply mapgen to a temporary map and overlay over terrain window, optionally regenerating, rotating, and applying to the real in-game map */ -int editmap::edit_mapgen(point coords) +int editmap::edit_mapgen() { int ret = 0; point orig = target; @@ -1773,21 +1768,22 @@ int editmap::edit_mapgen(point coords) gmenu.w_x = TERRAIN_WINDOW_WIDTH + VIEW_OFFSET_X; gmenu.return_invalid = true; - std::map broken_oter_blacklist; - broken_oter_blacklist[ot_null]=true; - broken_oter_blacklist[ot_road_null]=true; - broken_oter_blacklist[ot_nuke_plant_entrance]=true; - broken_oter_blacklist[ot_nuke_plant]=true; - broken_oter_blacklist[ot_temple_core]=true; - - for(int i = 0; i < num_ter_types; i++) { - gmenu.addentry(-1, true, 0, "%s", oterlist[i].name.c_str() ); - if ( broken_oter_blacklist.find( (oter_id)i ) != broken_oter_blacklist.end() ) { + std::map broken_oter_blacklist; + broken_oter_blacklist[""] = true; + broken_oter_blacklist["road_null"] = true; + broken_oter_blacklist["nuke_plant_entrance"] = true; + broken_oter_blacklist["nuke_plant"] = true; + broken_oter_blacklist["temple_core"] = true; + + for (int i = 0; i < terlist.size(); i++) { + oter_id id = oter_id(i); + gmenu.addentry(-1, true, 0, "[%3d] %s", (int)id, std::string(id).c_str() ); + if ( broken_oter_blacklist.find(id) != broken_oter_blacklist.end() ) { gmenu.entries[i].enabled = false; } std::string special = ""; - if ( oter_special.find((oter_id)i) != oter_special.end() ) { - unsigned long flags = overmap_specials[ oter_special[(oter_id)i] ].flags; + if ( oter_special.find(id) != oter_special.end() ) { + unsigned long flags = overmap_specials[ oter_special[id] ].flags; if (flags & mfb(OMS_FLAG_2X2)) { special += " 2x2"; } @@ -1808,8 +1804,8 @@ int editmap::edit_mapgen(point coords) gmenu.entries[i].txt += " (" + special + " )"; } gmenu.entries[i].extratxt.left = 1; - gmenu.entries[i].extratxt.color = oterlist[i].color; - gmenu.entries[i].extratxt.txt = string_format("%c", oterlist[i].sym); + gmenu.entries[i].extratxt.color = otermap[id].color; + gmenu.entries[i].extratxt.txt = string_format("%c", otermap[id].sym); } real_coords tc; do { @@ -1818,8 +1814,7 @@ int editmap::edit_mapgen(point coords) // point msub=point(target.x/12, target.y/12); tc.fromabs(g->m.getabs(target.x, target.y)); - point omt = tc.om_pos; - point omt_lpos = g->m.getlocal(omt.x * 2 * 12, omt.y * 2 * 12); + point omt_lpos = g->m.getlocal( tc.begin_om_pos() ); point om_ltarget = point(omt_lpos.x + 11, omt_lpos.y + 11); if ( target.x != om_ltarget.x || target.y != om_ltarget.y ) { diff --git a/editmap.h b/src/editmap.h similarity index 91% rename from editmap.h rename to src/editmap.h index 60fecd272aa5f..c1bc5d18c27b7 100644 --- a/editmap.h +++ b/src/editmap.h @@ -38,25 +38,25 @@ class editmap point pos2screen( const int x, const int y ); point screen2pos( const int i, const int j ); bool eget_direction ( int &x, int &y, InputEvent &input, int ch ); - point edit(point coords); + point edit(); void uber_draw_ter( WINDOW * w, map * m ); void update_view(bool update_info = false); - int edit_ter(point coords); - - int edit_fld(point coords); - int edit_trp(point coords); - int edit_itm(point coords); - int edit_mon(point coords); - int edit_npc(point coords); - int edit_veh(point coords); - int edit_mapgen(point coords); + int edit_ter(); + + int edit_fld(); + int edit_trp(); + int edit_itm(); + int edit_mon(); + int edit_npc(); + int edit_veh(); + int edit_mapgen(); void cleartmpmap( tinymap & tmpmap ); int mapgen_preview(real_coords &tc, uimenu &gmenu); - int mapgen_retarget(WINDOW * preview = NULL, map * mptr = NULL); + int mapgen_retarget(); int select_shape(shapetype shape, int mode = -1 ); void update_fmenu_entry(uimenu *fmenu, field *field, int idx); - void setup_fmenu(uimenu *fmenu, field *field); + void setup_fmenu(uimenu *fmenu); bool change_fld(std::vector coords, field_id fid, int density); WINDOW *w_info; WINDOW *w_help; diff --git a/enums.h b/src/enums.h similarity index 67% rename from enums.h rename to src/enums.h index af735b707741d..988edc109f0ee 100644 --- a/enums.h +++ b/src/enums.h @@ -1,6 +1,8 @@ #ifndef _ENUMS_H_ #define _ENUMS_H_ +#include "json.h" // (de)serialization for points + #ifndef sgn #define sgn(x) (((x) < 0) ? -1 : 1) #endif @@ -38,12 +40,26 @@ enum damage_type NUM_DAM_TYPES }; -struct point { - int x; - int y; - point(int X = 0, int Y = 0) : x (X), y (Y) {} - point(const point &p) : x (p.x), y (p.y) {} - ~point(){} +struct point : public JsonSerializer, public JsonDeserializer +{ + int x; + int y; + point(int X = 0, int Y = 0) : x (X), y (Y) {} + point(const point &p) : x (p.x), y (p.y) {} + ~point(){} + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const { + jsout.start_array(); + jsout.write(x); + jsout.write(y); + jsout.end_array(); + } + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin) { + JsonArray ja = jsin.get_array(); + x = ja.get_int(0); + y = ja.get_int(1); + } }; inline bool operator<(const point& a, const point& b) diff --git a/event.cpp b/src/event.cpp similarity index 100% rename from event.cpp rename to src/event.cpp diff --git a/event.h b/src/event.h similarity index 100% rename from event.h rename to src/event.h diff --git a/faction.cpp b/src/faction.cpp similarity index 100% rename from faction.cpp rename to src/faction.cpp diff --git a/faction.h b/src/faction.h similarity index 90% rename from faction.h rename to src/faction.h index 753a7f3d4dfd0..4e638ca30ee00 100644 --- a/faction.h +++ b/src/faction.h @@ -1,12 +1,13 @@ #ifndef _FACTION_H_ #define _FACTION_H_ +#include "json.h" + #include #include // TODO: Redefine? #define MAX_FAC_NAME_SIZE 40 -#include "picojson.h" #ifndef mfb #define mfb(n) static_cast (1 << (n)) #endif @@ -77,7 +78,9 @@ struct faction_value_datum { int cult; }; -struct faction { +class faction : public JsonSerializer, public JsonDeserializer +{ +public: static std::string faction_adj_pos[15]; static std::string faction_adj_neu[15]; static std::string faction_adj_bad[15]; @@ -92,13 +95,15 @@ struct faction { static faction_value_datum facjob_data[NUM_FACJOBS]; static faction_value_datum facval_data[NUM_FACVALS]; - faction(); - faction(int uid); - ~faction(); - std::string save_info(); - void load_info(std::string data); - void json_load(picojson::value parsed, game * g); - picojson::value json_save(bool save_contents = false); + faction(); + faction(int uid); + ~faction(); + std::string save_info(); + void load_info(std::string data); + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; void randomize(); void make_army(); diff --git a/field.cpp b/src/field.cpp similarity index 99% rename from field.cpp rename to src/field.cpp index 59c1067c3dc00..8284c64a7d7df 100644 --- a/field.cpp +++ b/src/field.cpp @@ -1654,8 +1654,8 @@ Returns the next iterator or field_list.end(). std::map::iterator field::removeField(const field_id field_to_remove){ std::map::iterator it = field_list.find(field_to_remove); std::map::iterator next = it; - ++next; if(it != field_list.end()) { + ++next; field_entry* tmp = it->second; delete tmp; field_list.erase(it); diff --git a/field.h b/src/field.h similarity index 100% rename from field.h rename to src/field.h diff --git a/file_finder.cpp b/src/file_finder.cpp similarity index 100% rename from file_finder.cpp rename to src/file_finder.cpp diff --git a/file_finder.h b/src/file_finder.h similarity index 100% rename from file_finder.h rename to src/file_finder.h diff --git a/game.cpp b/src/game.cpp similarity index 85% rename from game.cpp rename to src/game.cpp index 1efd5933c36b1..3e35d4a8d6847 100644 --- a/game.cpp +++ b/src/game.cpp @@ -49,7 +49,7 @@ #endif #include #include "debug.h" -#include "artifactdata.h" +#include "catalua.h" #if (defined _WIN32 || defined __WIN32__) #ifndef NOMINMAX @@ -90,7 +90,8 @@ game::game() : dangerous_proximity(5), run_mode(1), mostseen(0), - gamemode(NULL) + gamemode(NULL), + lookHeight(13) { world_generator = new worldfactory(); // do nothing, everything that was in here is moved to init_data() which is called immediately after g = new game; in main.cpp @@ -99,22 +100,18 @@ game::game() : void game::init_data() { dout() << "Game initialized."; - try { - if(!picojson::get_last_error().empty()) - throw (std::string)"Failed to initialize a static variable"; // Gee, it sure is init-y around here! init_data_structures(); // initialize cata data structures load_json_dir("data/json"); // load it, load it all! init_npctalk(); init_artifacts(); init_weather(); - init_overmap(); init_fields(); init_faction_data(); init_morale(); init_itypes(); // Set up item types (SEE itypedef.cpp) - item_controller->init(this); //Item manager + item_controller->init_old(); //Item manager init_monitems(); // Set up the items monsters carry (SEE monitemsdef.cpp) init_traps(); // Set up the trap types (SEE trapdef.cpp) init_missions(); // Set up mission templates (SEE missiondef.cpp) @@ -126,7 +123,12 @@ void game::init_data() MonsterGenerator::generator().finalize_mtypes(); finalize_vehicles(); - finalize_recipes(); + finalize_recipes(); + + #ifdef LUA + init_lua(); // Set up lua (SEE catalua.cpp) + #endif + } catch(std::string &error_message) { uquit = QUIT_ERROR; @@ -144,8 +146,6 @@ game::~game() { delete gamemode; itypes.clear(); - for (int i = 0; i < mtypes.size(); i++) - delete mtypes[i]; delwin(w_terrain); delwin(w_minimap); delwin(w_HP); @@ -228,6 +228,7 @@ void game::init_ui(){ int locX, locY, locW, locH; int statX, statY, statW, statH; int stat2X, stat2Y, stat2W, stat2H; + int mouseview_y, mouseview_h; if (use_narrow_sidebar()) { // First, figure out how large each element will be. @@ -255,6 +256,9 @@ void game::init_ui(){ stat2Y = locY + locH; messX = 0; messY = stat2Y + stat2H; + + mouseview_y = messY + 7; + mouseview_h = TERMY - mouseview_y - 5; } else { // standard sidebar style minimapX = 0; @@ -277,12 +281,13 @@ void game::init_ui(){ statW = sidebarWidth; // The default style only uses one status window. - // The second status window needs to consume the void at the bottom - // of the sidebar. stat2X = 0; stat2Y = statY + statH; - stat2H = TERMY - stat2Y; + stat2H = 1; stat2W = sidebarWidth; + + mouseview_y = stat2Y + stat2H; + mouseview_h = TERMY - mouseview_y; } int _y = VIEW_OFFSET_Y; @@ -303,6 +308,21 @@ void game::init_ui(){ w_status = newwin(statH, statW, _y + statY, _x + statX); werase(w_status); + int mouse_view_x = _x + minimapX; + int mouse_view_width = sidebarWidth; + if (mouseview_h < lookHeight) { + // Not enough room below the status bar, just use the regular lookaround area + get_lookaround_dimensions(mouse_view_width, mouseview_y, mouse_view_x); + mouseview_h = lookHeight; + liveview.compact_view = true; + if (!use_narrow_sidebar()) { + // Second status window must now take care of clearing the area to the + // bottom of the screen. + stat2H = TERMY - stat2Y; + } + } + liveview.init(this, mouse_view_x, mouseview_y, sidebarWidth, mouseview_h); + w_status2 = newwin(stat2H, stat2W, _y + stat2Y, _x + stat2X); werase(w_status2); } @@ -359,7 +379,7 @@ void game::setup() load_auto_pickup(false); // Load global auto pickup rules // back to menu for save loading, new game etc -} + } // Set up all default values for a new game void game::start_game(std::string worldname) @@ -533,7 +553,7 @@ void game::cleanup_at_end(){ if (uquit == QUIT_DIED || uquit == QUIT_SUICIDE) { death_screen(); u.add_memorial_log("%s %s", u.name.c_str(), - uquit == QUIT_SUICIDE ? _("committed suicide.") : _("was killed.")); + uquit == QUIT_SUICIDE ? _("committed suicide.") : _("was killed.")); write_memorial_file(); u.memorial_log.clear(); std::vector characters = list_active_characters(); @@ -550,8 +570,6 @@ void game::cleanup_at_end(){ } else { delete_world(world_generator->active_world->world_name, true); } - MAPBUFFER.reset(); - MAPBUFFER.make_volatile(); } } else if (ACTIVE_WORLD_OPTIONS["DELETE_WORLD"] != "no") { std::stringstream message; @@ -566,10 +584,8 @@ void game::cleanup_at_end(){ gamemode = new special_game; // null gamemode or something.. } } - if (uquit == QUIT_SAVED && gamemode->id() != SGAME_NULL) { - MAPBUFFER.reset(); - MAPBUFFER.make_volatile(); - } + MAPBUFFER.reset(); + MAPBUFFER.make_volatile(); overmap_buffer.clear(); } @@ -577,28 +593,28 @@ void game::cleanup_at_end(){ // Returns true if game is over (death, saved, quit, etc) bool game::do_turn() { - if (is_game_over()) { - cleanup_at_end(); - return true; - } -// Actual stuff - gamemode->per_turn(this); - turn.increment(); - process_events(); - process_missions(); - if (turn.hours() == 0 && turn.minutes() == 0 && turn.seconds() == 0) // Midnight! - cur_om->process_mongroups(); - -// Check if we've overdosed... in any deadly way. - if (u.stim > 250) { - add_msg(_("You have a sudden heart attack!")); - u.add_memorial_log(_("Died of a drug overdose.")); - u.hp_cur[hp_torso] = 0; - } else if (u.stim < -200 || u.pkill > 240) { - add_msg(_("Your breathing stops completely.")); - u.add_memorial_log(_("Died of a drug overdose.")); - u.hp_cur[hp_torso] = 0; - } + if (is_game_over()) { + cleanup_at_end(); + return true; + } + // Actual stuff + gamemode->per_turn(this); + turn.increment(); + process_events(); + process_missions(); + if (turn.hours() == 0 && turn.minutes() == 0 && turn.seconds() == 0) // Midnight! + cur_om->process_mongroups(); + + // Check if we've overdosed... in any deadly way. + if (u.stim > 250) { + add_msg(_("You have a sudden heart attack!")); + u.add_memorial_log(_("Died of a drug overdose.")); + u.hp_cur[hp_torso] = 0; + } else if (u.stim < -200 || u.pkill > 240) { + add_msg(_("Your breathing stops completely.")); + u.add_memorial_log(_("Died of a drug overdose.")); + u.hp_cur[hp_torso] = 0; + } // Check if we're starving or have starved if (u.hunger >= 3000){ if (u.hunger >= 6000){ @@ -643,118 +659,135 @@ bool game::do_turn() } } - if (turn % 50 == 0) { // Hunger, thirst, & fatigue up every 5 minutes - if ((!u.has_trait("LIGHTEATER") || !one_in(3)) && - (!u.has_bionic("bio_recycler") || turn % 300 == 0)) - u.hunger++; - if ((!u.has_bionic("bio_recycler") || turn % 100 == 0) && - (!u.has_trait("PLANTSKIN") || !one_in(5))) - u.thirst++; - // Fatigue caps at slightly after the point where characters will fall asleep without player input - if(u.fatigue < 1050){ - u.fatigue++; - } - if (u.fatigue == 192 && !u.has_disease("lying_down") && !u.has_disease("sleep")) { - if (u.activity.type == ACT_NULL){ - add_msg(_("You're feeling tired. %s to lie down for sleep."), - press_x(ACTION_SLEEP).c_str()); - } else { - cancel_activity_query(_("You're feeling tired.")); - } - } - if (u.stim < 0) - u.stim++; - if (u.stim > 0) - u.stim--; - if (u.pkill > 0) - u.pkill--; - if (u.pkill < 0) - u.pkill++; - if (u.has_bionic("bio_solar") && is_in_sunlight(u.posx, u.posy)) - u.charge_power(1); - } - if (turn % 300 == 0) { // Pain up/down every 30 minutes - if (u.pain > 0) - u.pain -= 1 + int(u.pain / 10); - else if (u.pain < 0) - u.pain++; -// Mutation healing effects - if (u.has_trait("FASTHEALER2") && one_in(5)) - u.healall(1); - if (u.has_trait("REGEN") && one_in(2)) - u.healall(1); - if (u.has_trait("ROT2") && one_in(5)) - u.hurtall(1); - if (u.has_trait("ROT3") && one_in(2)) - u.hurtall(1); - - if (u.radiation > 1 && one_in(3)) - u.radiation--; - u.get_sick(this); - } - -// Auto-save if autosave is enabled - if (OPTIONS["AUTOSAVE"] && - turn % ((int)OPTIONS["AUTOSAVE_TURNS"] * 10) == 0) - autosave(); - - update_weather(); - -// The following happens when we stay still; 10/40 minutes overdue for spawn - if ((!u.has_trait("INCONSPICUOUS") && turn > nextspawn + 100) || - ( u.has_trait("INCONSPICUOUS") && turn > nextspawn + 400) ) { - spawn_mon(-1 + 2 * rng(0, 1), -1 + 2 * rng(0, 1)); - nextspawn = turn; - } - - process_activity(); - if(u.moves > 0) { - while (u.moves > 0) { - cleanup_dead(); - if (!u.has_disease("sleep") && u.activity.type == ACT_NULL) - draw(); - - if(handle_action()) { - ++moves_since_last_save; - u.action_taken(); - } + if (turn % 50 == 0) { // Hunger, thirst, & fatigue up every 5 minutes + if ((!u.has_trait("LIGHTEATER") || !one_in(3)) && + (!u.has_bionic("bio_recycler") || turn % 300 == 0)) { + u.hunger++; + } + if ((!u.has_bionic("bio_recycler") || turn % 100 == 0) && + (!u.has_trait("PLANTSKIN") || !one_in(5))) { + u.thirst++; + } + // Don't increase fatigue if sleeping or trying to sleep or if we're at the cap. + if (u.fatigue < 1050 && !(u.has_disease("sleep") || u.has_disease("lying_down"))) { + u.fatigue++; + } + if (u.fatigue == 192 && !u.has_disease("lying_down") && !u.has_disease("sleep")) { + if (u.activity.type == ACT_NULL) { + add_msg(_("You're feeling tired. %s to lie down for sleep."), + press_x(ACTION_SLEEP).c_str()); + } else { + cancel_activity_query(_("You're feeling tired.")); + } + } + if (u.stim < 0) { + u.stim++; + } + if (u.stim > 0) { + u.stim--; + } + if (u.pkill > 0) { + u.pkill--; + } + if (u.pkill < 0) { + u.pkill++; + } + if (u.has_bionic("bio_solar") && is_in_sunlight(u.posx, u.posy)) { + u.charge_power(1); + } + } - if (is_game_over()) { - cleanup_at_end(); - return true; - } - } - } else { - handle_key_blocking_activity(); - } - update_scent(); - m.vehmove(this); - m.process_fields(this); - m.process_active_items(this); - m.step_in_field(u.posx, u.posy, this); + if (turn % 300 == 0) { // Pain up/down every 30 minutes + if (u.pain > 0) { + u.pain -= 1 + int(u.pain / 10); + } else if (u.pain < 0) { + u.pain++; + } + // Mutation healing effects + if (u.has_trait("FASTHEALER2") && one_in(5)) { + u.healall(1); + } + if (u.has_trait("REGEN") && one_in(2)) { + u.healall(1); + } + if (u.has_trait("ROT2") && one_in(5)) { + u.hurtall(1); + } + if (u.has_trait("ROT3") && one_in(2)) { + u.hurtall(1); + } - monmove(); - update_stair_monsters(); - u.reset(this); - u.process_active_items(this); - u.suffer(this); + if (u.radiation > 1 && one_in(3)) { + u.radiation--; + } + u.get_sick( this ); + } - if (levz >= 0 && !u.is_underwater()) { - weather_effect weffect; - (weffect.*(weather_data[weather].effect))(this); - } + // Auto-save if autosave is enabled + if (OPTIONS["AUTOSAVE"] && + turn % ((int)OPTIONS["AUTOSAVE_TURNS"] * 10) == 0) { + autosave(); + } - if (u.has_disease("sleep") && int(turn) % 300 == 0) { - draw(); - refresh(); - } + update_weather(); - u.update_bodytemp(this); + // The following happens when we stay still; 10/40 minutes overdue for spawn + if ((!u.has_trait("INCONSPICUOUS") && turn > nextspawn + 100) || + ( u.has_trait("INCONSPICUOUS") && turn > nextspawn + 400) ) { + spawn_mon(-1 + 2 * rng(0, 1), -1 + 2 * rng(0, 1)); + nextspawn = turn; + } - rustCheck(); - if (turn % 10 == 0) - u.update_morale(); - return false; + process_activity(); + if(u.moves > 0) { + while (u.moves > 0) { + cleanup_dead(); + if (!u.has_disease("sleep") && u.activity.type == ACT_NULL) { + draw(); + } + + if(handle_action()) { + ++moves_since_last_save; + u.action_taken(); + } + + if (is_game_over()) { + cleanup_at_end(); + return true; + } + } + } else { + handle_key_blocking_activity(); + } + update_scent(); + m.vehmove(this); + m.process_fields(this); + m.process_active_items(this); + m.step_in_field(u.posx, u.posy, this); + + monmove(); + update_stair_monsters(); + u.reset(this); + u.process_active_items(this); + u.suffer(this); + + if (levz >= 0 && !u.is_underwater()) { + weather_effect weffect; + (weffect.*(weather_data[weather].effect))(this); + } + + if (u.has_disease("sleep") && int(turn) % 300 == 0) { + draw(); + refresh(); + } + + u.update_bodytemp(this); + + rustCheck(); + if (turn % 10 == 0) { + u.update_morale(); + } + return false; } void game::rustCheck() @@ -794,6 +827,7 @@ void game::process_activity() { it_book* reading; item* book_item; + item* reloadable; bool no_recipes; if (u.activity.type != ACT_NULL) { if (int(turn) % 150 == 0) { @@ -866,20 +900,25 @@ void game::process_activity() switch (u.activity.type) { case ACT_RELOAD: - if (u.weapon.reload(u, u.activity.invlet)) - if (u.weapon.is_gun() && u.weapon.has_flag("RELOAD_ONE")) { + if (u.activity.name[0] == u.weapon.invlet) { + reloadable = &u.weapon; + } else { + reloadable = &u.inv.item_by_letter(u.activity.name[0]); + } + if (reloadable->reload(u, u.activity.invlet)) + if (reloadable->is_gun() && reloadable->has_flag("RELOAD_ONE")) { add_msg(_("You insert a cartridge into your %s."), - u.weapon.tname(this).c_str()); + reloadable->tname(this).c_str()); if (u.recoil < 8) u.recoil = 8; if (u.recoil > 8) u.recoil = (8 + u.recoil) / 2; } else { - add_msg(_("You reload your %s."), u.weapon.tname(this).c_str()); + add_msg(_("You reload your %s."), reloadable->tname(this).c_str()); u.recoil = 6; } else - add_msg(_("Can't reload your %s."), u.weapon.tname(this).c_str()); + add_msg(_("Can't reload your %s."), reloadable->tname(this).c_str()); break; case ACT_READ: @@ -1140,6 +1179,10 @@ bool game::cancel_activity_query(const char* message, ...) std::string stop_message = s + stop_phrase[u.activity.type]; if (ACT_NULL == u.activity.type) { + if (u.has_destination()) { + add_msg(_("You were hurt. Auto-move cancelled")); + u.clear_destination(); + } doit = false; } else if (query_yn(stop_message.c_str())) { doit = true; @@ -1499,6 +1542,7 @@ void game::process_missions() { for (int i = 0; i < active_missions.size(); i++) { if (active_missions[i].deadline > 0 && + !active_missions[i].failed && int(turn) > active_missions[i].deadline) fail_mission(active_missions[i].uid); } @@ -1507,7 +1551,7 @@ void game::process_missions() void game::handle_key_blocking_activity() { // If player is performing a task and a monster is dangerously close, warn them // regardless of previous safemode warnings - if (is_hostile_very_close() && + if (is_hostile_very_close() && u.activity.type != ACT_NULL && u.activity.moves_left > 0 && !u.activity.warned_of_proximity) @@ -1659,9 +1703,49 @@ int game::inventory_item_menu(char chItem, int iStartX, int iWidth) { } // -bool game::handle_action() +// Checks input to see if mouse was moved and handles the mouse view box accordingly. +// Returns true if input requires breaking out into a game action. +bool game::handle_mouseview(input_context &ctxt, std::string &action) +{ + do { + action = ctxt.handle_input(); + if (action == "MOUSE_MOVE") { + int mx, my; + if (!ctxt.get_coordinates(w_terrain, mx, my)) { + hide_mouseview(); + } else { + liveview.show(mx, my); + } + } + } while (action == "MOUSE_MOVE"); // Freeze animation when moving the mouse + + if (action != "TIMEOUT" && ctxt.get_raw_input().get_first_input() != ERR) { + // Keyboard event, break out of animation loop + hide_mouseview(); + return false; + } + + // Mouse movement or un-handled key + return true; +} + +// Hides the mouse hover box and redraws what was under it +void game::hide_mouseview() +{ + if (liveview.hide()) { + write_msg(); // Redraw anything hidden by mouseview + } +} + +input_context game::get_player_input(std::string &action) { - char ch = '.'; + input_context ctxt("DEFAULTMODE"); + ctxt.register_directions(); + ctxt.register_action("ANY_INPUT"); + ctxt.register_action("COORDINATE"); + ctxt.register_action("MOUSE_MOVE"); + ctxt.register_action("SELECT"); + ctxt.register_action("SEC_SELECT"); char cGlyph = ','; nc_color colGlyph = c_ltblue; @@ -1734,9 +1818,6 @@ bool game::handle_action() wPrint.endx = iEndX; wPrint.endy = iEndY; - int iCh; - - timeout(125); /* Location to add rain drop animation bits! Since it refreshes w_terrain it can be added to the animation section easily Get tile information from above's weather information: @@ -1777,34 +1858,174 @@ bool game::handle_action() draw_weather(wPrint); wrefresh(w_terrain); - } while ((iCh = get_keypress()) == ERR); - timeout(-1); + inp_mngr.set_timeout(125); + } while (handle_mouseview(ctxt, action)); + inp_mngr.set_timeout(-1); - ch = input(iCh); } else { - ch = input(); + while (handle_mouseview(ctxt, action)) {;} } - if (keymap.find(ch) == keymap.end()) { - if (ch != ' ' && ch != '\n') - add_msg(_("Unknown command: '%c'"), ch); - return false; - } + return ctxt; +} + +bool game::handle_action() +{ + std::string action; + input_context ctxt; + + action_id act = ACTION_NULL; + // Check if we have an auto-move destination + if (u.has_destination()) { + act = u.get_next_auto_move_direction(); + if (act == ACTION_NULL) { + add_msg(_("Auto-move cancelled")); + u.clear_destination(); + return false; + } + } else { + // No auto-move, ask player for input + ctxt = get_player_input(action); + } + + int veh_part; + vehicle *veh = m.veh_at(u.posx, u.posy, veh_part); + bool veh_ctrl = veh && veh->player_in_control (&u); + + // If performing an action with right mouse button, co-ordinates + // of location clicked. + int mouse_action_x = -1, mouse_action_y = -1; + + if (act == ACTION_NULL) { + if (action == "SELECT" || action == "SEC_SELECT") { + // Mouse button click + if (veh_ctrl) { + // No mouse use in vehicle + return false; + } + + int mx, my; + if (!ctxt.get_coordinates(w_terrain, mx, my) || !u_see(mx, my)) { + // Not clicked in visible terrain + return false; + } + + if (action == "SELECT") { + bool new_destination = true; + if (destination_preview.size() > 0) { + point final_destination = destination_preview.back(); + if (final_destination.x == mx && final_destination.y == my) { + // Second click + new_destination = false; + u.set_destination(destination_preview); + destination_preview.clear(); + act = u.get_next_auto_move_direction(); + if (act == ACTION_NULL) { + // Something went wrong + u.clear_destination(); + return false; + } + } + } + + if (new_destination) { + destination_preview = m.route(u.posx, u.posy, mx, my, false); + return false; + } + } else { + // Right mouse button + + bool had_destination_to_clear = destination_preview.size() > 0; + u.clear_destination(); + destination_preview.clear(); + + if (had_destination_to_clear) { + return false; + } + + mouse_action_x = mx; + mouse_action_y = my; + int mouse_selected_mondex = mon_at(mx, my); + if (mouse_selected_mondex != -1) { + monster &z = _active_monsters[mouse_selected_mondex]; + if (!u_see(&z)) { + add_msg(_("Nothing relevant here.")); + return false; + } + + if (!u.weapon.is_gun()) { + add_msg(_("You are not wielding a ranged weapon.")); + return false; + } - action_id act = keymap[ch]; + //TODO: Add weapon range check. This requires weapon to be reloaded. + + act = ACTION_FIRE; + } else if (m.close_door(mx, my, !m.is_outside(mx, my), true)) { + act = ACTION_CLOSE; + } else { + int dx = abs(u.posx - mx); + int dy = abs(u.posy - my); + if (dx < 2 && dy < 2) { + if (dy == 0 && dx == 0) { + // Clicked on self + act = ACTION_PICKUP; + } else { + // Clicked adjacent tile + act = ACTION_EXAMINE; + } + } else { + add_msg(_("Nothing relevant here.")); + return false; + } + } + } + } + } + + if (act == ACTION_NULL) { + // No auto-move action, no mouse clicks. + u.clear_destination(); + destination_preview.clear(); + + int ch = ctxt.get_raw_input().get_first_input(); + // Hack until new input system is fully implemented + if (ch == KEY_UP) { + act = ACTION_MOVE_N; + } else if (ch == KEY_RIGHT) { + act = ACTION_MOVE_E; + } else if (ch == KEY_DOWN) { + act = ACTION_MOVE_S; + } else if (ch == KEY_LEFT) { + act = ACTION_MOVE_W; + } else if (ch == KEY_NPAGE) { + act = ACTION_MOVE_DOWN; + } else if (ch == KEY_PPAGE) { + act = ACTION_MOVE_UP; + } else { + if (keymap.find(ch) == keymap.end()) { + if (ch != ' ' && ch != '\n') { + add_msg(_("Unknown command: '%c'"), ch); + } + return false; + } + + act = keymap[ch]; + } + } // This has no action unless we're in a special game mode. gamemode->pre_action(this, act); - int veh_part; - vehicle *veh = m.veh_at(u.posx, u.posy, veh_part); - bool veh_ctrl = veh && veh->player_in_control (&u); - int soffset = (int)OPTIONS["MOVE_VIEW_OFFSET"]; int soffsetr = 0 - soffset; int before_action_moves = u.moves; + // Use to track if auto-move should be cancelled due to a failed + // move or obstacle + bool continue_auto_move = false; + switch (act) { case ACTION_PAUSE: @@ -1821,7 +2042,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(0, -1); else - plmove(0, -1); + continue_auto_move = plmove(0, -1); break; case ACTION_MOVE_NE: @@ -1830,7 +2051,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(1, -1); else - plmove(1, -1); + continue_auto_move = plmove(1, -1); break; case ACTION_MOVE_E: @@ -1839,7 +2060,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(1, 0); else - plmove(1, 0); + continue_auto_move = plmove(1, 0); break; case ACTION_MOVE_SE: @@ -1848,7 +2069,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(1, 1); else - plmove(1, 1); + continue_auto_move = plmove(1, 1); break; case ACTION_MOVE_S: @@ -1857,7 +2078,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(0, 1); else - plmove(0, 1); + continue_auto_move = plmove(0, 1); break; case ACTION_MOVE_SW: @@ -1866,7 +2087,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(-1, 1); else - plmove(-1, 1); + continue_auto_move = plmove(-1, 1); break; case ACTION_MOVE_W: @@ -1875,7 +2096,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(-1, 0); else - plmove(-1, 0); + continue_auto_move = plmove(-1, 0); break; case ACTION_MOVE_NW: @@ -1884,7 +2105,7 @@ bool game::handle_action() if (veh_ctrl) pldrive(-1, -1); else - plmove(-1, -1); + continue_auto_move = plmove(-1, -1); break; case ACTION_MOVE_DOWN: @@ -1943,7 +2164,7 @@ bool game::handle_action() break; case ACTION_CLOSE: - close(); + close(mouse_action_x, mouse_action_y); break; case ACTION_SMASH: @@ -1954,7 +2175,7 @@ bool game::handle_action() break; case ACTION_EXAMINE: - examine(); + examine(mouse_action_x, mouse_action_y); break; case ACTION_ADVANCEDINV: @@ -1992,7 +2213,7 @@ bool game::handle_action() do { if ( startas != 2 ) { // last mode 2 = list_monster startas = 0; // but only for the first bit of the loop - iRetItems = list_items(); + iRetItems = list_items(); } else { iRetItems = -2; // so we'll try list_items if list_monsters found 0 } @@ -2003,7 +2224,7 @@ bool game::handle_action() iRetItems = -1; // will fire, exit loop } else if ( iRetMonsters == -1 && iRetItems == -2 ) { iRetItems = -1; // exit if requested on list_monsters firstrun - } + } } } while (iRetItems != -1 && iRetMonsters != -1 && !(iRetItems == 0 && iRetMonsters == 0)); @@ -2020,7 +2241,7 @@ bool game::handle_action() int cMenu = ' '; do { char chItem = inv(_("Inventory:")); - cMenu = inventory_item_menu(chItem); + cMenu=inventory_item_menu(chItem); } while (cMenu == ' ' || cMenu == '.' || cMenu == 'q' || cMenu == '\n' || cMenu == KEY_ESCAPE || cMenu == KEY_LEFT || cMenu == '=' ); refresh_all(); @@ -2080,11 +2301,11 @@ bool game::handle_action() break; case ACTION_FIRE: - plfire(false); + plfire(false, mouse_action_x, mouse_action_y); break; case ACTION_FIRE_BURST: - plfire(true); + plfire(true, mouse_action_x, mouse_action_y); break; case ACTION_SELECT_FIRE_MODE: @@ -2320,6 +2541,10 @@ bool game::handle_action() break; } + if (!continue_auto_move) { + u.clear_destination(); + } + gamemode->post_action(this, act); u.movecounter = before_action_moves - u.moves; @@ -2422,7 +2647,7 @@ bool game::is_game_over() { if (uquit == QUIT_SUICIDE){ if (u.in_vehicle) - g->m.unboard_vehicle(this, u.posx, u.posy); + g->m.unboard_vehicle(u.posx, u.posy); std::stringstream playerfile; playerfile << world_generator->active_world->world_path << "/" << base64_encode(u.name) << ".sav"; DebugLog() << "Unlinking player file: <"<< playerfile.str() << "> -- "; @@ -2436,7 +2661,7 @@ bool game::is_game_over() for (int i = 0; i <= hp_torso; i++){ if (u.hp_cur[i] < 1) { if (u.in_vehicle) - g->m.unboard_vehicle(this, u.posx, u.posy); + g->m.unboard_vehicle(u.posx, u.posy); place_corpse(); std::stringstream playerfile; playerfile << world_generator->active_world->world_path << "/" << base64_encode(u.name) << ".sav"; @@ -2517,7 +2742,11 @@ void game::death_screen() (void)rename( save_dirent->d_name, graveyard_path.c_str() ); } } - (void)chdir(".."); + int ret; + ret = chdir(".."); + if (ret != 0) { + debugmsg("game::death_screen: Can\'t chdir(\"..\") from \"save\" directory"); + } (void)closedir(save_dir); } #endif @@ -2549,7 +2778,7 @@ bool game::load_master(std::string worldname) std::string data; std::stringstream datafile; datafile << world_generator->all_worlds[worldname]->world_path << "/master.gsav"; - fin.open(datafile.str().c_str()); + fin.open(datafile.str().c_str(), std::ifstream::in | std::ifstream::binary); if (!fin.is_open()) return false; @@ -2563,149 +2792,19 @@ void game::load_uistate(std::string worldname) { savefile << world_generator->all_worlds[worldname]->world_path << "/uistate.json"; std::ifstream fin; - fin.open(savefile.str().c_str()); + fin.open(savefile.str().c_str(), std::ifstream::in | std::ifstream::binary); if(!fin.good()) { fin.close(); return; } - picojson::value wrapped_data; - fin >> wrapped_data; - fin.close(); - std::string jsonerr=picojson::get_last_error(); - if ( ! jsonerr.empty() ) { - dbg(D_ERROR) << "load_uistate: " << jsonerr.c_str(); - return; - } - bool success=uistate.load(wrapped_data); - if ( ! success ) { - dbg(D_ERROR) << "load_uistate: " << uistate.errdump; - } - uistate.errdump=""; -} - -void game::load_artifacts(std::string worldname) -{ - std::stringstream artifactfile; - artifactfile << world_generator->all_worlds[worldname]->world_path << "/artifacts.gsav"; - std::ifstream file_test(artifactfile.str().c_str(), std::ifstream::in | std::ifstream::binary); - if (!file_test.good()) { - file_test.close(); - return; - } - try { - load_artifacts_from_file(&file_test); + JsonIn jsin(&fin); + uistate.deserialize(jsin); } catch (std::string e) { - debugmsg("%s: %s", artifactfile.str().c_str(), e.c_str()); - } - - file_test.close(); -} - -void game::load_artifacts_from_file(std::ifstream *f) -{ - // read artifacts from json array in artifacts.gsav - JsonIn artifact_json(f); - artifact_json.start_array(); - while (!artifact_json.end_array()) { - JsonObject jo = artifact_json.get_object(); - - std::string id = jo.get_string("id"); - unsigned int price = jo.get_int("price"); - std::string name = jo.get_string("name"); - std::string description = jo.get_string("description"); - char sym = jo.get_int("sym"); - nc_color color = int_to_color(jo.get_int("color")); - std::string m1 = jo.get_string("m1"); - std::string m2 = jo.get_string("m2"); - unsigned int volume = jo.get_int("volume"); - unsigned int weight = jo.get_int("weight"); - signed char melee_dam = jo.get_int("melee_dam"); - signed char melee_cut = jo.get_int("melee_cut"); - signed char m_to_hit = jo.get_int("m_to_hit"); - std::set item_tags = jo.get_tags("item_flags"); - - std::string type = jo.get_string("type"); - if (type == "artifact_tool") { - unsigned int max_charges = jo.get_int("max_charges"); - unsigned int def_charges = jo.get_int("def_charges"); - unsigned char charges_per_use = jo.get_int("charges_per_use"); - unsigned char turns_per_charge = jo.get_int("turns_per_charge"); - ammotype ammo = jo.get_string("ammo"); - std::string revert_to = jo.get_string("revert_to"); - - it_artifact_tool* art_type = new it_artifact_tool( - id, price, name, description, sym, color, m1, m2, volume, - weight, melee_dam, melee_cut, m_to_hit, item_tags, - max_charges, def_charges, charges_per_use, turns_per_charge, - ammo, revert_to); - - art_charge charge_type = (art_charge)jo.get_int("charge_type"); - - JsonArray effects_wielded_json = jo.get_array("effects_wielded"); - std::vector effects_wielded; - while (effects_wielded_json.has_more()) { - art_effect_passive effect = - (art_effect_passive)effects_wielded_json.next_int(); - effects_wielded.push_back(effect); - } - - JsonArray effects_activated_json = jo.get_array("effects_activated"); - std::vector effects_activated; - while (effects_activated_json.has_more()) { - art_effect_active effect = - (art_effect_active)effects_activated_json.next_int(); - effects_activated.push_back(effect); - } - - JsonArray effects_carried_json = jo.get_array("effects_carried"); - std::vector effects_carried; - while (effects_carried_json.has_more()) { - art_effect_passive effect = - (art_effect_passive)effects_carried_json.next_int(); - effects_carried.push_back(effect); - } - - art_type->charge_type = charge_type; - art_type->effects_wielded = effects_wielded; - art_type->effects_activated = effects_activated; - art_type->effects_carried = effects_carried; - - itypes[id] = art_type; - } - else if (type == "artifact_armor") - { - unsigned char covers = jo.get_int("covers"); - signed char encumber = jo.get_int("encumber"); - unsigned char coverage = jo.get_int("coverage"); - unsigned char thickness = jo.get_int("material_thickness"); - unsigned char env_resist = jo.get_int("env_resist"); - signed char warmth = jo.get_int("warmth"); - unsigned char storage = jo.get_int("storage"); - bool power_armor = jo.get_bool("power_armor"); - - it_artifact_armor* art_type = new it_artifact_armor( - id, price, name, description, sym, color, m1, m2, volume, - weight, melee_dam, melee_cut, m_to_hit, item_tags, - covers, encumber, coverage, thickness, env_resist, warmth, - storage); - art_type->power_armor = power_armor; - - JsonArray effects_worn_json = jo.get_array("effects_worn"); - std::vector effects_worn; - while (effects_worn_json.has_more()) { - art_effect_passive effect = - (art_effect_passive)effects_worn_json.next_int(); - effects_worn.push_back(effect); - } - art_type->effects_worn = effects_worn; - - itypes[id] = art_type; - } - - jo.finish(); + dbg(D_ERROR) << "load_uistate: " << e; + } + fin.close(); } -} void game::load(std::string worldname, std::string name) { @@ -2714,7 +2813,7 @@ void game::load(std::string worldname, std::string name) worldpath += "/"; std::stringstream playerfile; playerfile << worldpath << name << ".sav"; - fin.open(playerfile.str().c_str()); + fin.open(playerfile.str().c_str(), std::ifstream::in | std::ifstream::binary); // First, read in basic game state information. if (!fin.is_open()) { dbg(D_ERROR) << "game:load: No save game exists!"; @@ -2728,6 +2827,13 @@ void game::load(std::string worldname, std::string name) unserialize(fin); fin.close(); + // Stair handling. + if (!coming_to_stairs.empty()) { + monstairx = -1; + monstairy = -1; + monstairz = 999; + } + // weather std::string wfile = std::string( worldpath + base64_encode(u.name) + ".weather" ); fin.open(wfile.c_str()); @@ -2777,18 +2883,22 @@ void game::save_factions_missions_npcs () void game::save_artifacts() { std::ofstream fout; - std::vector artifacts; - std::stringstream artifactfile; - artifactfile << world_generator->active_world->world_path << "/artifacts.gsav"; - fout.open(artifactfile.str().c_str()); + std::string artfilename = world_generator->active_world->world_path + "/artifacts.gsav"; + fout.open(artfilename.c_str(), std::ofstream::trunc); + JsonOut json(&fout); + json.start_array(); for ( std::vector::iterator it = artifact_itype_ids.begin(); it != artifact_itype_ids.end(); ++it) { - artifacts.push_back(itypes[*it]->save_data()); + it_artifact_tool *art = dynamic_cast(itypes[*it]); + if (art) { + json.write(*art); + } else { + json.write(*(dynamic_cast(itypes[*it]))); + } } - picojson::value out = picojson::value(artifacts); - fout << out.serialize(); + json.end_array(); fout.close(); } @@ -2804,9 +2914,8 @@ void game::save_uistate() { savefile << world_generator->active_world->world_path << "/uistate.json"; std::ofstream fout; fout.open(savefile.str().c_str()); - fout << uistate.save(); + fout << uistate.serialize(); fout.close(); - uistate.errdump=""; } void game::save() @@ -2848,7 +2957,7 @@ void game::delete_world(std::string worldname, bool delete_folder) do { filetmp = FindFileData.cFileName; if (delete_folder || filetmp != world_opfile){ - DeleteFile(FindFileData.cFileName); + DeleteFile(FindFileData.cFileName); } } while(FindNextFile(hFind, &FindFileData) != 0); FindClose(hFind); @@ -2926,8 +3035,23 @@ void game::write_memorial_file() { } } - std::string memorial_file_path = string_format("memorial/%s-%s.txt", - u.name.c_str(), timestamp.c_str()); + /* Remove non-ASCII glyphs from character names - unicode symbols are not + * valid in filenames. */ + std::stringstream player_name; + for(int index = 0; index < u.name.size(); index++) { + if((unsigned char)u.name[index] <= '~') { + player_name << u.name[index]; + } + } + if(player_name.str().length() > 0) { + //Separate name and timestamp + player_name << '-'; + } + + //Omit the name if too many unusable characters stripped + std::string memorial_file_path = string_format("memorial/%s%s.txt", + player_name.str().length() <= (u.name.length() / 5) ? "" : player_name.str().c_str(), + timestamp.c_str()); std::ofstream memorial_file; memorial_file.open(memorial_file_path.c_str()); @@ -3110,7 +3234,10 @@ void game::debug() _("Spawn Clarivoyance Artifact"), //15 _("Map editor"), // 16 _("Change weather"), // 17 - _("Cancel"), // 18 + #ifdef LUA + _("Lua Command"), // 18 + #endif + _("Cancel"), NULL); int veh_num; std::vector opts; @@ -3120,7 +3247,7 @@ void game::debug() break; case 2: - teleport(); + teleport(&u, false); break; case 3: { @@ -3138,6 +3265,12 @@ void game::debug() active_npc[i]->posy %= SEEY; } active_npc.clear(); + m.clear_vehicle_cache(); + m.vehicle_list.clear(); + // Save monsters. + for (unsigned int i = 0; i < num_zombies(); i++) { + force_save_monster(zombie(i)); + } clear_zombies(); levx = tmp.x * 2 - int(MAPSIZE / 2); levy = tmp.y * 2 - int(MAPSIZE / 2); @@ -3190,7 +3323,7 @@ Current turn: %d; Next spawn %d.\n\ %d currently active NPC's.\n\ %d events planned."), u.posx, u.posy, levx, levy, - oterlist[cur_om->ter(levx / 2, levy / 2, levz)].name.c_str(), + otermap[cur_om->ter(levx / 2, levy / 2, levz)].name.c_str(), int(turn), int(nextspawn), (!ACTIVE_WORLD_OPTIONS["RANDOM_NPC"] ? _("NPCs are going to spawn.") : _("NPCs are NOT going to spawn.")), num_zombies(), active_npc.size(), events.size()); @@ -3267,7 +3400,7 @@ Current turn: %d; Next spawn %d.\n\ npc_attitude_name(p->attitude) << std::endl; if (p->has_destination()) { data << _("Destination: ") << p->goalx << ":" << p->goaly << "(" << - oterlist[ cur_om->ter(p->goalx, p->goaly, p->goalz) ].name << ")" << std::endl; + otermap[ cur_om->ter(p->goalx, p->goaly, p->goalz) ].name << ")" << std::endl; } else { data << _("No destination.") << std::endl; } @@ -3296,7 +3429,7 @@ Current turn: %d; Next spawn %d.\n\ artifact_natural_property prop = artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1)); m.create_anomaly(center.x, center.y, prop); - m.spawn_artifact(center.x, center.y, new_natural_artifact(prop), 0); + m.spawn_artifact(center.x, center.y, new_natural_artifact(itypes, prop), 0); } break; @@ -3381,12 +3514,20 @@ Current turn: %d; Next spawn %d.\n\ ); if ( it->first == cweather ) { weather_log_menu.entries.back().text_color = c_yellow; - } + } } weather_log_menu.query(); } } break; + + #ifdef LUA + case 18: { + std::string luacode = string_input_popup(_("Lua:"), 60, ""); + call_lua(luacode); + } + break; + #endif } erase(); refresh_all(); @@ -3736,6 +3877,9 @@ void game::draw() draw_HP(); werase(w_status); werase(w_status2); + if (!liveview.compact_view) { + liveview.hide(true, true); + } u.disp_status(w_status, w_status2, this); bool sideStyle = use_narrow_sidebar(); @@ -3789,7 +3933,7 @@ void game::draw() point cur_loc = om_location(); oter_id cur_ter = cur_om->ter(cur_loc.x, cur_loc.y, levz); - if (cur_ter == ot_null) + if (cur_ter == "") { if (cur_loc.x >= OMAPX && cur_loc.y >= OMAPY) cur_ter = om_diag->ter(cur_loc.x - OMAPX, cur_loc.y - OMAPY, levz); @@ -3799,9 +3943,9 @@ void game::draw() cur_ter = om_vert->ter(cur_loc.x, cur_loc.y - OMAPY, levz); } - std::string tername = oterlist[cur_ter].name; + std::string tername = otermap[cur_ter].name; werase(w_location); - mvwprintz(w_location, 0, 0, oterlist[cur_ter].color, utf8_substr(tername, 0, 14).c_str()); + mvwprintz(w_location, 0, 0, otermap[cur_ter].color, utf8_substr(tername, 0, 14).c_str()); if (levz < 0) { mvwprintz(w_location, 0, 18, c_ltgray, _("Underground")); @@ -3888,7 +4032,8 @@ void game::draw_ter(int posx, int posy) && mx >= 0 && my >= 0 && mx < TERRAIN_WINDOW_WIDTH && my < TERRAIN_WINDOW_HEIGHT && (u.has_active_bionic("bio_infrared") - || u.has_trait("INFRARED")) + || u.has_trait("INFRARED") + || u.has_trait("LIZ_IR")) && m.pl_sees(u.posx,u.posy,z.posx(),z.posy(), u.sight_range(DAYLIGHT_LEVEL))) { mvwputch(w_terrain, my, mx, c_red, '?'); @@ -3925,6 +4070,12 @@ void game::draw_ter(int posx, int posy) } } + if (destination_preview.size() > 0) { + // Draw auto-move preview trail + point final_destination = destination_preview.back(); + draw_line(final_destination.x, final_destination.y, destination_preview); + } + wrefresh(w_terrain); if (u.has_disease("visuals") || (u.has_disease("hot_head") && @@ -4119,7 +4270,7 @@ void game::draw_minimap() int omx = cursx + i; int omy = cursy + j; bool seen = false; - oter_id cur_ter = ot_null; + oter_id cur_ter;// = ""; long note_sym = 0; bool note = false; if (omx >= 0 && omx < OMAPX && omy >= 0 && omy < OMAPY) { @@ -4171,8 +4322,8 @@ void game::draw_minimap() << omx << " omy: " << omy; debugmsg("No data loaded! omx: %d omy: %d", omx, omy); } - nc_color ter_color = oterlist[cur_ter].color; - long ter_sym = oterlist[cur_ter].sym; + nc_color ter_color = otermap[cur_ter].color; + long ter_sym = otermap[cur_ter].sym; if (note) { ter_sym = note_sym ? note_sym : 'N'; @@ -4367,14 +4518,14 @@ faction* game::random_evil_faction() bool game::sees_u(int x, int y, int &t) { int range = 0; - int mondex = mon_at(x, y); - if (mondex != -1) { - monster &z = _active_monsters[mondex]; + int mondex = mon_at(x,y); + if (mondex != -1) { + monster &z = _active_monsters[mondex]; range = z.vision_range(u.posx, u.posy); - } + } - return (!(u.has_active_bionic("bio_cloak") || u.has_active_bionic("bio_night") || - u.has_artifact_with(AEP_INVISIBLE)) && m.sees(x, y, u.posx, u.posy, range, t)); + return (!(u.has_active_bionic("bio_cloak") || u.has_active_bionic("bio_night") || + u.has_artifact_with(AEP_INVISIBLE)) && m.sees(x, y, u.posx, u.posy, range, t)); } bool game::u_see(int x, int y) @@ -4409,7 +4560,7 @@ bool game::u_see(monster *mon) return false; // Can't see digging monsters until we're right next to them } if (m.is_divable(mon->posx(), mon->posy()) && mon->can_submerge() - && !m.is_divable(u.posx, u.posy)) { + && !u.is_underwater()) { //Monster is in the water and submerged, and we're out of/above the water return false; } @@ -4427,18 +4578,48 @@ bool game::pl_sees(player *p, monster *mon, int &t) return m.sees(p->posx, p->posy, mon->posx(), mon->posy(), range, t); } +/** + * Attempts to find which map co-ordinates the specified item is located at, + * looking at the player, the ground, NPCs, and vehicles in that order. + * @param it A pointer to the item to find. + * @return The location of the item, or (-999, -999) if it wasn't found. + */ point game::find_item(item *it) { - if (u.has_item(it)) - return point(u.posx, u.posy); - point ret = m.find_item(it); - if (ret.x != -1 && ret.y != -1) - return ret; - for (int i = 0; i < active_npc.size(); i++) { - if (active_npc[i]->inv.has_item(it)) - return point(active_npc[i]->posx, active_npc[i]->posy); - } - return point(-999, -999); + //Does the player have it? + if (u.has_item(it)) { + return point(u.posx, u.posy); + } + //Is it in a vehicle? + for (std::set::iterator veh_iterator = m.vehicle_list.begin(); + veh_iterator != m.vehicle_list.end(); veh_iterator++) { + vehicle *next_vehicle = *veh_iterator; + std::vector cargo_parts = next_vehicle->all_parts_with_feature("CARGO", false); + for(std::vector::iterator part_index = cargo_parts.begin(); + part_index != cargo_parts.end(); part_index++) { + std::vector *items_in_part = &(next_vehicle->parts[*part_index].items); + for (int n = items_in_part->size() - 1; n >= 0; n--) { + if (&((*items_in_part)[n]) == it) { + int mapx = next_vehicle->global_x() + next_vehicle->parts[*part_index].precalc_dx[0]; + int mapy = next_vehicle->global_y() + next_vehicle->parts[*part_index].precalc_dy[0]; + return point(mapx, mapy); + } + } + } + } + //Does an NPC have it? + for (int i = 0; i < active_npc.size(); i++) { + if (active_npc[i]->inv.has_item(it)) { + return point(active_npc[i]->posx, active_npc[i]->posy); + } + } + //Is it on the ground? (Check this last - takes the most time) + point ret = m.find_item(it); + if (ret.x != -1 && ret.y != -1) { + return ret; + } + //Not found anywhere + return point(-999, -999); } void game::remove_item(item *it) @@ -4970,23 +5151,23 @@ bool game::sound(int x, int y, int vol, std::string description) // Mutation/Bionic volume modifiers if (u.has_bionic("bio_ears")) { - vol *= 3.5; + vol *= 3.5; } if (u.has_trait("BADHEARING")) { - vol *= .5; + vol *= .5; } if (u.has_trait("CANINE_EARS")) { - vol *= 1.5; + vol *= 1.5; } // Too far away, we didn't hear it! if (dist > vol) { - return false; - } + return false; + } if (u.has_disease("deaf")) { // Has to be here as well to work for stacking deafness (loud noises prolong deafness) - if (!u.has_bionic("bio_ears") && rng((vol - dist) / 2, (vol - dist)) >= 150) { + if (!u.has_bionic("bio_ears") && rng( (vol - dist) / 2, (vol - dist) ) >= 150) { int duration = std::min(40, (vol - dist - 130) / 4); u.add_disease("deaf", duration); } @@ -4996,9 +5177,9 @@ bool game::sound(int x, int y, int vol, std::string description) // Check for deafness if (!u.has_bionic("bio_ears") && rng((vol - dist) / 2, (vol - dist)) >= 150) { - int duration = (vol - dist - 130) / 4; - u.add_disease("deaf", duration); - } + int duration = (vol - dist - 130) / 4; + u.add_disease("deaf", duration); + } // See if we need to wake someone up if (u.has_disease("sleep")){ @@ -5011,34 +5192,34 @@ bool game::sound(int x, int y, int vol, std::string description) } } - if (x != u.posx || y != u.posy) { - if(u.activity.ignore_trivial != true) { - std::string query; + if (x != u.posx || y != u.posy) { + if(u.activity.ignore_trivial != true) { + std::string query; if (description != "") { - query = string_format(_("Heard %s!"), description.c_str()); - } else { - query = _("Heard a noise!"); - } + query = string_format(_("Heard %s!"), description.c_str()); + } else { + query = _("Heard a noise!"); + } - if (cancel_activity_or_ignore_query(query.c_str())) { - u.activity.ignore_trivial = true; - } - } + if( cancel_activity_or_ignore_query(query.c_str()) ) { + u.activity.ignore_trivial = true; } + } + } // Only print a description if it exists if (description != "") { - // If it came from us, don't print a direction +// If it came from us, don't print a direction if (x == u.posx && y == u.posy) { - capitalize_letter(description, 0); - add_msg("%s", description.c_str()); + capitalize_letter(description, 0); + add_msg("%s", description.c_str()); } else { // Else print a direction as well - std::string direction = direction_name(direction_from(u.posx, u.posy, x, y)); - add_msg(_("From the %s you hear %s"), direction.c_str(), description.c_str()); + std::string direction = direction_name(direction_from(u.posx, u.posy, x, y)); + add_msg(_("From the %s you hear %s"), direction.c_str(), description.c_str()); } } - return true; + return true; } // add_footstep will create a list of locations to draw monster @@ -5285,6 +5466,10 @@ void game::knockback(int sx, int sy, int tx, int ty, int force, int stun, int da void game::knockback(std::vector& traj, int force, int stun, int dam_mult) { + (void)force; //FIXME: unused but header says it should do something + // TODO: make the force parameter actually do something. + // the header file says higher force causes more damage. + // perhaps that is what it should do? int tx = traj.front().x; int ty = traj.front().y; const int zid = mon_at(tx, ty); @@ -5653,7 +5838,7 @@ void game::resonance_cascade(int x, int y) case 13: case 14: case 15: - spawn_details = MonsterGroupManager::GetResultFromGroup("GROUP_NETHER", &mtypes); + spawn_details = MonsterGroupManager::GetResultFromGroup("GROUP_NETHER"); invader = monster(GetMType(spawn_details.name), i, j); add_zombie(invader); break; @@ -5898,8 +6083,8 @@ bool game::is_in_ice_lab(point location) oter_id cur_ter = cur_om->ter(location.x, location.y, levz); bool is_in_ice_lab = false; - if (cur_ter == ot_ice_lab || cur_ter == ot_ice_lab_stairs || - cur_ter == ot_ice_lab_core || cur_ter == ot_ice_lab_finale) { + if (cur_ter == "ice_lab" || cur_ter == "ice_lab_stairs" || + cur_ter == "ice_lab_core" || cur_ter == "ice_lab_finale") { is_in_ice_lab = true; } @@ -5920,7 +6105,7 @@ void game::kill_mon(int index, bool u_did_it) if (u_did_it) { if (z.has_flag(MF_GUILT)) { mdeath tmpdeath; - tmpdeath.guilt(this, &z); + tmpdeath.guilt(&z); } if (!z.is_hallucination()) { kills[z.type->id]++; // Increment our kill counter @@ -6003,7 +6188,7 @@ void game::explode_mon(int index) } } } - m.spawn_item(tarx, tary, meat, turn); + m.spawn_item(tarx, tary, meat, 1, 0, turn); } } } @@ -6062,16 +6247,24 @@ void game::open() int vpart; vehicle *veh = m.veh_at(openx, openy, vpart); if (veh) { - int door = veh->part_with_feature(vpart, "OPENABLE"); - if(door >= 0) { - if (veh->parts[door].open) { - add_msg(_("That door is already open.")); + int openable = veh->part_with_feature(vpart, "OPENABLE"); + if(openable >= 0) { + const char *name = veh->part_info(openable).name.c_str(); + if (veh->part_info(openable).has_flag("OPENCLOSE_INSIDE")){ + const vehicle *in_veh = m.veh_at(u.posx, u.posy); + if (!in_veh || in_veh != veh){ + add_msg(_("That %s can only opened from the inside."), name); + return; + } + } + if (veh->parts[openable].open) { + add_msg(_("That %s is already open."), name); u.moves += 100; } else { - veh->open(door); + veh->open(openable); } - return; } + return; } if (m.is_outside(u.posx, u.posy)) @@ -6097,11 +6290,13 @@ void game::open() } } -void game::close() +void game::close(int closex, int closey) { - int closex, closey; - if (!choose_adjacent(_("Close where?"), closex, closey)) - return; + if (closex == -1) { + if (!choose_adjacent(_("Close where?"), closex, closey)) { + return; + } + } bool didit = false; @@ -6113,13 +6308,21 @@ void game::close() add_msg(_("There's a %s in the way!"), z.name().c_str()); } else if (veh) { - int door = veh->part_with_feature(vpart, "OPENABLE"); - if(door >= 0) { - if(veh->parts[door].open) { - veh->close(door); + int openable = veh->part_with_feature(vpart, "OPENABLE"); + if(openable >= 0) { + const char *name = veh->part_info(openable).name.c_str(); + if (veh->part_info(openable).has_flag("OPENCLOSE_INSIDE")){ + const vehicle *in_veh = m.veh_at(u.posx, u.posy); + if (!in_veh || in_veh != veh){ + add_msg(_("That %s can only closed from the inside."), name); + return; + } + } + if (veh->parts[openable].open) { + veh->close(openable); didit = true; } else { - add_msg(_("That door is already closed.")); + add_msg(_("That %s is already closed."), name); } } } else if (m.furn(closex, closey) != f_safe_o && m.i_at(closex, closey).size() > 0) @@ -6133,7 +6336,7 @@ void game::close() } else if (m.has_furn(closex, closey) && m.furn_at(closex, closey).close.size() == 0 ) { add_msg(_("There's a %s in the way!"), m.furnname(closex, closey).c_str()); } else - didit = m.close_door(closex, closey, true); + didit = m.close_door(closex, closey, true, false); if (didit) u.moves -= 90; @@ -6188,22 +6391,22 @@ void game::smash() // Increase damage as we keep smashing, // to insure that we eventually smash the target. if (x_in_y(pulp_power, it->volume())) { - damage++; - } + damage++; + } it->damage += damage; // Splatter some blood around for (int x = smashx - 1; x <= smashx + 1; x++) { for (int y = smashy - 1; y <= smashy + 1; y++) { if (!one_in(damage+1)) { - m.add_field(this, x, y, fd_blood, 1); + m.add_field(this, x, y, fd_blood, 1); } } } if (it->damage >= full_pulp_threshold) { it->damage = full_pulp_threshold; // TODO mark corpses as inactive when appropriate - } + } } while( it->damage < full_pulp_threshold ); } @@ -6589,7 +6792,7 @@ void game::moving_vehicle_dismount(int tox, int toy) } int d = (45 * (direction_from(u.posx, u.posy, tox, toy)) - 90) % 360; add_msg(_("You dive from the %s."), veh->name.c_str()); - m.unboard_vehicle(this, u.posx, u.posy); + m.unboard_vehicle(u.posx, u.posy); u.moves -= 200; // Dive three tiles in the direction of tox and toy fling_player_or_monster(&u, 0, d, 30, true); @@ -6631,11 +6834,13 @@ void game::control_vehicle() } } -void game::examine() +void game::examine(int examx, int examy) { - int examx, examy; - if (!choose_adjacent(_("Examine where?"), examx, examy)) - return; + if (examx == -1) { + if (!choose_adjacent(_("Examine where?"), examx, examy)) { + return; + } + } int veh_part = 0; vehicle *veh = m.veh_at (examx, examy, veh_part); @@ -6713,34 +6918,194 @@ void game::peek() u.posy = prevy; } //////////////////////////////////////////////////////////////////////////////////////////// -point game::look_debug(point coords) { +point game::look_debug() { editmap * edit=new editmap(this); - point ret=edit->edit(coords); + point ret=edit->edit(); delete edit; edit=0; return ret; } //////////////////////////////////////////////////////////////////////////////////////////// -point game::look_around() + +void game::print_all_tile_info(int lx, int ly, WINDOW* w_look, int column, int &line, bool mouse_hover) { - draw_ter(); - int lx = u.posx + u.view_offset_x, ly = u.posy + u.view_offset_y; - int mx, my; - mapped_input input; - bool fast_scroll = false; - int soffset = (int)OPTIONS["MOVE_VIEW_OFFSET"]; + print_terrain_info(lx, ly, w_look, column, line); + print_fields_info(lx, ly, w_look, column, line); + print_trap_info(lx, ly, w_look, column, line); + print_object_info(lx, ly, w_look, column, line, mouse_hover); +} - const int lookHeight = 13; - const int lookWidth = getmaxx(w_messages); - int lookY = TERMY - lookHeight + 1; - if (getbegy(w_messages) < lookY) lookY = getbegy(w_messages); - WINDOW* w_look = newwin(lookHeight, lookWidth, lookY, getbegx(w_messages)); - wborder(w_look, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, - LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); - mvwprintz(w_look, 1, 1, c_white, _("Looking Around")); - mvwprintz(w_look, 2, 1, c_white, _("Use directional keys to move the cursor")); - mvwprintz(w_look, 3, 1, c_white, _("to a nearby square.")); - wrefresh(w_look); +void game::print_terrain_info(int lx, int ly, WINDOW* w_look, int column, int &line) +{ + int ending_line = line + 3; + std::string tile = m.tername(lx, ly); + if (m.has_furn(lx, ly)) { + tile += "; " + m.furnname(lx, ly); + } + + if (m.move_cost(lx, ly) == 0) { + mvwprintw(w_look, line, column, _("%s; Impassable"), tile.c_str()); + } else { + mvwprintw(w_look, line, column, _("%s; Movement cost %d"), tile.c_str(), + m.move_cost(lx, ly) * 50); + } + mvwprintw(w_look, ++line, column, "%s", m.features(lx, ly).c_str()); + if (line < ending_line) { + line = ending_line; + } +} + +void game::print_fields_info(int lx, int ly, WINDOW* w_look, int column, int &line) +{ + field &tmpfield = m.field_at(lx, ly); + if (tmpfield.fieldCount() == 0) { + return; + } + + field_entry *cur = NULL; + typedef std::map::iterator field_iterator; + for (field_iterator it = tmpfield.getFieldStart(); it != tmpfield.getFieldEnd(); ++it) { + cur = it->second; + if (cur == NULL) { + continue; + } + mvwprintz(w_look, line++, column, fieldlist[cur->getFieldType()].color[cur->getFieldDensity()-1], "%s", + fieldlist[cur->getFieldType()].name[cur->getFieldDensity()-1].c_str()); + } +} + +void game::print_trap_info(int lx, int ly, WINDOW* w_look, const int column, int &line) +{ + trap_id trapid = m.tr_at(lx, ly); + if (trapid == tr_null) { + return; + } + + int vis = traps[trapid]->visibility; + if (vis == -1 || u.per_cur - u.encumb(bp_eyes) >= vis) { + mvwprintz(w_look, line++, column, traps[trapid]->color, "%s", traps[trapid]->name.c_str()); + } +} + +void game::print_object_info(int lx, int ly, WINDOW* w_look, const int column, int &line, bool mouse_hover) +{ + int veh_part = 0; + vehicle *veh = m.veh_at(lx, ly, veh_part); + int dex = mon_at(lx, ly); + if (dex != -1 && u_see(&zombie(dex))) + { + if (!mouse_hover) { + zombie(dex).draw(w_terrain, lx, ly, true); + } + line = zombie(dex).print_info(this, w_look, line, 6, column); + handle_multi_item_info(lx, ly, w_look, column, line, mouse_hover); + } + else if (npc_at(lx, ly) != -1) + { + if (!mouse_hover) { + active_npc[npc_at(lx, ly)]->draw(w_terrain, lx, ly, true); + } + line = active_npc[npc_at(lx, ly)]->print_info(w_look, column, line); + handle_multi_item_info(lx, ly, w_look, column, line, mouse_hover); + } + else if (veh) + { + mvwprintw(w_look, line++, column, _("There is a %s there. Parts:"), veh->name.c_str()); + line = veh->print_part_desc(w_look, line, (mouse_hover) ? getmaxx(w_look) : 48, veh_part); + if (!mouse_hover) { + m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); + } + } + else if (!m.has_flag("CONTAINER", lx, ly) && m.i_at(lx, ly).size() > 0) + { + if (!mouse_hover) { + mvwprintw(w_look, line++, column, _("There is a %s there."), + m.i_at(lx, ly)[0].tname(this).c_str()); + if (m.i_at(lx, ly).size() > 1) + { + mvwprintw(w_look, line++, column, _("There are other items there as well.")); + } + m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); + } + } else if (m.has_flag("CONTAINER", lx, ly)) { + mvwprintw(w_look, line++, column, _("You cannot see what is inside of it.")); + if (!mouse_hover) { + m.drawsq(w_terrain, u, lx, ly, true, false, lx, ly); + } + } + // The player is not at + // Should not be putting the "You (name)" at this location + // Changing it to reflect actual position not view-center position + else if (lx == u.posx && ly == u.posy ) + { + int x,y; + x = getmaxx(w_terrain)/2 - u.view_offset_x; + y = getmaxy(w_terrain)/2 - u.view_offset_y; + if (!mouse_hover) { + mvwputch_inv(w_terrain, y, x, u.color(), '@'); + } + + mvwprintw(w_look, line++, column, _("You (%s)"), u.name.c_str()); + if (veh) { + mvwprintw(w_look, line++, column, _("There is a %s there. Parts:"), veh->name.c_str()); + line = veh->print_part_desc(w_look, line, (mouse_hover) ? getmaxx(w_look) : 48, veh_part); + if (!mouse_hover) { + m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); + } + } + + } + else if (!mouse_hover) + { + m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); + } +} + +void game::handle_multi_item_info(int lx, int ly, WINDOW* w_look, const int column, int &line, bool mouse_hover) +{ + if (!m.has_flag("CONTAINER", lx, ly)) + { + if (!mouse_hover) { + if (m.i_at(lx, ly).size() > 1) { + mvwprintw(w_look, line++, column, _("There are several items there.")); + } else if (m.i_at(lx, ly).size() == 1) { + mvwprintw(w_look, line++, column, _("There is an item there.")); + } + } + } else { + mvwprintw(w_look, line++, column, _("You cannot see what is inside of it.")); + } +} + + +void game::get_lookaround_dimensions(int &lookWidth, int &begin_y, int &begin_x) const +{ + lookWidth = getmaxx(w_messages); + begin_y = TERMY - lookHeight + 1; + if (getbegy(w_messages) < begin_y) { + begin_y = getbegy(w_messages); + } + begin_x = getbegx(w_messages); +} + + +point game::look_around() +{ + draw_ter(); + int lx = u.posx + u.view_offset_x, ly = u.posy + u.view_offset_y; + std::string action; + bool fast_scroll = false; + int soffset = (int) OPTIONS["MOVE_VIEW_OFFSET"]; + + int lookWidth, lookY, lookX; + get_lookaround_dimensions(lookWidth, lookY, lookX); + WINDOW* w_look = newwin(lookHeight, lookWidth, lookY, lookX); + wborder(w_look, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, + LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); + mvwprintz(w_look, 1, 1, c_white, _("Looking Around")); + mvwprintz(w_look, 2, 1, c_white, _("Use directional keys to move the cursor")); + mvwprintz(w_look, 3, 1, c_white, _("to a nearby square.")); + wrefresh(w_look); do { werase(w_terrain); draw_ter(lx, ly); @@ -6752,124 +7117,15 @@ point game::look_around() // Debug helper //mvwprintw(w_look, 6, 1, "Items: %d", m.i_at(lx, ly).size() ); int junk; - int veh_part = 0; - int off = 4; - vehicle *veh = m.veh_at(lx, ly, veh_part); + int off = 1; if (u_see(lx, ly)) { - std::string tile = m.tername(lx, ly); - if (m.has_furn(lx, ly)) - tile += "; " + m.furnname(lx, ly); - - if (m.move_cost(lx, ly) == 0) - mvwprintw(w_look, 1, 1, _("%s; Impassable"), tile.c_str()); - else - mvwprintw(w_look, 1, 1, _("%s; Movement cost %d"), tile.c_str(), - m.move_cost(lx, ly) * 50); - mvwprintw(w_look, 2, 1, "%s", m.features(lx, ly).c_str()); - - field &tmpfield = m.field_at(lx, ly); - - if (tmpfield.fieldCount() > 0) { - field_entry *cur = NULL; - for(std::map::iterator field_list_it = tmpfield.getFieldStart(); field_list_it != tmpfield.getFieldEnd(); ++field_list_it){ - cur = field_list_it->second; - if(cur == NULL) continue; - mvwprintz(w_look, off, 1, fieldlist[cur->getFieldType()].color[cur->getFieldDensity()-1], "%s", - fieldlist[cur->getFieldType()].name[cur->getFieldDensity()-1].c_str()); - off++; // 4ish - } - } - //if (tmpfield.type != fd_null) - // mvwprintz(w_look, 4, 1, fieldlist[tmpfield.type].color[tmpfield.density-1], - // "%s", fieldlist[tmpfield.type].name[tmpfield.density-1].c_str()); - - if (m.tr_at(lx, ly) != tr_null && (traps[m.tr_at(lx, ly)]->visibility == -1 || - u.per_cur - u.encumb(bp_eyes) >= traps[m.tr_at(lx, ly)]->visibility)) - mvwprintz(w_look, ++off, 1, traps[m.tr_at(lx, ly)]->color, "%s", - traps[m.tr_at(lx, ly)]->name.c_str()); - - int dex = mon_at(lx, ly); - if (dex != -1 && u_see(&zombie(dex))) - { - zombie(dex).draw(w_terrain, lx, ly, true); - zombie(dex).print_info(this, w_look,5,6); - if (!m.has_flag("CONTAINER", lx, ly)) - { - if (m.i_at(lx, ly).size() > 1) - { - mvwprintw(w_look, 3, 1, _("There are several items there.")); - } - else if (m.i_at(lx, ly).size() == 1) - { - mvwprintw(w_look, 3, 1, _("There is an item there.")); - } - } else { - mvwprintw(w_look, 3, 1, _("You cannot see what is inside of it.")); - } - } - else if (npc_at(lx, ly) != -1) - { - active_npc[npc_at(lx, ly)]->draw(w_terrain, lx, ly, true); - active_npc[npc_at(lx, ly)]->print_info(w_look); - if (!m.has_flag("CONTAINER", lx, ly)) - { - if (m.i_at(lx, ly).size() > 1) - { - mvwprintw(w_look, 3, 1, _("There are several items there.")); - } - else if (m.i_at(lx, ly).size() == 1) - { - mvwprintw(w_look, 3, 1, _("There is an item there.")); - } - } else { - mvwprintw(w_look, 3, 1, _("You cannot see what is inside of it.")); - } - } - else if (veh) - { - mvwprintw(w_look, 3, 1, _("There is a %s there. Parts:"), veh->name.c_str()); - veh->print_part_desc(w_look, ++off, 48, veh_part); - m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); - } - else if (!m.has_flag("CONTAINER", lx, ly) && m.i_at(lx, ly).size() > 0) - { - mvwprintw(w_look, 3, 1, _("There is a %s there."), - m.i_at(lx, ly)[0].tname(this).c_str()); - if (m.i_at(lx, ly).size() > 1) - { - mvwprintw(w_look, ++off, 1, _("There are other items there as well.")); - } - m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); - } else if (m.has_flag("CONTAINER", lx, ly)) { - mvwprintw(w_look, 3, 1, _("You cannot see what is inside of it.")); - m.drawsq(w_terrain, u, lx, ly, true, false, lx, ly); - } - // The player is not at - // Should not be putting the "You (name)" at this location - // Changing it to reflect actual position not view-center position - else if (lx == u.posx && ly == u.posy ) - { - int x,y; - x = getmaxx(w_terrain)/2 - u.view_offset_x; - y = getmaxy(w_terrain)/2 - u.view_offset_y; - mvwputch_inv(w_terrain, y, x, u.color(), '@'); - - mvwprintw(w_look, 1, 1, _("You (%s)"), u.name.c_str()); - if (veh) { - mvwprintw(w_look, 3, 1, _("There is a %s there. Parts:"), veh->name.c_str()); - veh->print_part_desc(w_look, 4, 48, veh_part); - m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); - } + print_all_tile_info(lx, ly, w_look, 1, off, false); - } - else - { - m.drawsq(w_terrain, u, lx, ly, true, true, lx, ly); - } } else if (u.sight_impaired() && m.light_at(lx, ly) == LL_BRIGHT && rl_dist(u.posx, u.posy, lx, ly) < u.unimpaired_range() && - m.sees(u.posx, u.posy, lx, ly, u.unimpaired_range(), junk)) { + m.sees(u.posx, u.posy, lx, ly, u.unimpaired_range(), junk)) + { if (u.has_disease("boomered")) mvwputch_inv(w_terrain, POSY + (ly - u.posy), POSX + (lx - u.posx), c_pink, '#'); else @@ -6879,46 +7135,60 @@ point game::look_around() mvwputch(w_terrain, POSY, POSX, c_white, 'x'); mvwprintw(w_look, 1, 1, _("Unseen.")); } + + if (fast_scroll) { + // print a light green mark below the top right corner of the w_look window + mvwprintz(w_look, 1, lookWidth-1, c_ltgreen, _("F")); + } else { + // redraw the border to clear out the marker. + wborder(w_look, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, + LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); + } + if (m.graffiti_at(lx, ly).contents) mvwprintw(w_look, ++off + 1, 1, _("Graffiti: %s"), m.graffiti_at(lx, ly).contents->c_str()); //mvwprintw(w_look, 5, 1, _("Maploc: <%d,%d>"), lx, ly); wrefresh(w_look); wrefresh(w_terrain); - DebugLog() << __FUNCTION__ << ": calling get_input() \n"; - input = get_input_from_kyb_mouse(); - if (!u_see(lx, ly)) - mvwputch(w_terrain, POSY + (ly - u.posy), POSX + (lx - u.posx), c_black, ' '); - if (input.evt.type != CATA_INPUT_MOUSE) { - get_direction(mx, my, input.command); - if (mx != -2 && my != -2) { // Directional key pressed - // if fastmove is set, use the option value for MOVE_VIEW_OFFSET - lx += mx * ( fast_scroll ? soffset : 1); - ly += my * ( fast_scroll ? soffset : 1); - } else if (input.command == Filter){ - fast_scroll = !fast_scroll; - // If we are now fast scrolling, print it out. Otherwise redraw the border. - // This is only done on toggle, so it shouldn't be used heavily. - if (fast_scroll) { - // print a light green mark below the top right corner of the w_look window - //~ Fast-scroll indicator - mvwprintz(w_look, 1, lookWidth-1, c_ltgreen, _("F")); - } else { - // redraw the border to clear out the marker. - wborder(w_look, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, - LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); - } - } - } else if (input.evt.get_first_input() == MOUSE_BUTTON_LEFT) { - // Left click on map - lx = input.evt.mouse_x; - ly = input.evt.mouse_y; - } - } while (input.command != Close && input.command != Cancel && input.command != Confirm); + DebugLog() << __FUNCTION__ << ": calling handle_input() \n"; + + input_context ctxt("LOOK"); + ctxt.register_directions(); + ctxt.register_action("COORDINATE"); + ctxt.register_action("SELECT"); + ctxt.register_action("CONFIRM"); + ctxt.register_action("QUIT"); + ctxt.register_action("TOGGLE_FAST_SCROLL"); + action = ctxt.handle_input(); + + if (!u_see(lx, ly)) + mvwputch(w_terrain, POSY + (ly - u.posy), POSX + (lx - u.posx), c_black, ' '); + + // Our coordinates will either be determined by coordinate input(mouse), + // by a direction key, or by the previous value. + if (action == "TOGGLE_FAST_SCROLL") { + fast_scroll = !fast_scroll; + } else if (!ctxt.get_coordinates(g->w_terrain, lx, ly)) { + int dx, dy; + ctxt.get_direction(dx, dy, action); + if (dx == -2) { + dx = 0; + dy = 0; + } else { + if (fast_scroll) { + dx *= soffset; + dy *= soffset; + } + } + lx += dx; + ly += dy; + } + } while (action != "QUIT" && action != "CONFIRM"); werase(w_look); delwin(w_look); - if (input.command == Confirm) + if (action == "CONFIRM") return point(lx, ly); return point(-1, -1); } @@ -7626,9 +7896,9 @@ int game::list_monsters() } } break; - default: - break; - } + default: + break; + } } break; } @@ -7797,13 +8067,13 @@ void game::pickup(int posx, int posy, int min) used_feature = true; if (veh->fuel_left("battery") > 0) { //Will be -1 if no battery at all - item tmp_hotplate( g->itypes["hotplate"], 0 ); + item tmp_hotplate( itypes["hotplate"], 0 ); // Drain a ton of power tmp_hotplate.charges = veh->drain( "battery", 100 ); if( tmp_hotplate.is_tool() ) { it_tool * tmptool = static_cast((&tmp_hotplate)->type); if ( tmp_hotplate.charges >= tmptool->charges_per_use ) { - tmptool->use.call(g, &u, &tmp_hotplate, false); + tmptool->use.call(&u, &tmp_hotplate, false); tmp_hotplate.charges -= tmptool->charges_per_use; veh->refill( "battery", tmp_hotplate.charges ); } @@ -7819,7 +8089,7 @@ void game::pickup(int posx, int posy, int min) if (veh->fuel_left("water") > 0) //Will be -1 if no water at all { int amt = veh->drain("water", veh->fuel_left("water")); - item fill_water(g->itypes[default_ammo("water")], g->turn); + item fill_water(itypes[default_ammo("water")], g->turn); fill_water.charges = amt; int back = g->move_liquid(fill_water); if(back >= 0) @@ -7861,13 +8131,13 @@ void game::pickup(int posx, int posy, int min) used_feature = true; if (veh->fuel_left("battery") > 0) { //Will be -1 if no battery at all - item tmp_welder( g->itypes["welder"], 0 ); + item tmp_welder( itypes["welder"], 0 ); // Drain a ton of power tmp_welder.charges = veh->drain( "battery", 1000 ); if( tmp_welder.is_tool() ) { it_tool * tmptool = static_cast((&tmp_welder)->type); if ( tmp_welder.charges >= tmptool->charges_per_use ) { - tmptool->use.call( g, &u, &tmp_welder, false ); + tmptool->use.call( &u, &tmp_welder, false ); tmp_welder.charges -= tmptool->charges_per_use; veh->refill( "battery", tmp_welder.charges ); } @@ -7883,13 +8153,13 @@ void game::pickup(int posx, int posy, int min) used_feature = true; if (veh->fuel_left("battery") > 0) { //Will be -1 if no battery at all - item tmp_purifier( g->itypes["water_purifier"], 0 ); + item tmp_purifier( itypes["water_purifier"], 0 ); // Drain a ton of power tmp_purifier.charges = veh->drain( "battery", 100 ); if( tmp_purifier.is_tool() ) { it_tool * tmptool = static_cast((&tmp_purifier)->type); if ( tmp_purifier.charges >= tmptool->charges_per_use ) { - tmptool->use.call( g, &u, &tmp_purifier, false ); + tmptool->use.call( &u, &tmp_purifier, false ); tmp_purifier.charges -= tmptool->charges_per_use; veh->refill( "battery", tmp_purifier.charges ); } @@ -8163,6 +8433,10 @@ void game::pickup(int posx, int posy, int min) { if(itemcount != 0 || pickup_count[idx] == 0) { + if(itemcount >= here[idx].charges) { + // Ignore the count if we pickup the whole stack anyway + itemcount = 0; + } pickup_count[idx] = itemcount; itemcount = 0; @@ -8318,104 +8592,104 @@ void game::pickup(int posx, int posy, int min) bool offered_swap = false; std::map mapPickup; for (int i = 0; i < here.size(); i++) { - iter = 0; - // This while loop guarantees the inventory letter won't be a repeat. If it - // tries all 52 letters, it fails and we don't pick it up. + iter = 0; + // This while loop guarantees the inventory letter won't be a repeat. If it + // tries all 52 letters, it fails and we don't pick it up. if (getitem[i] && here[i].made_of(LIQUID)) { - got_water = true; + got_water = true; } else if (getitem[i]) { bool picked_up = false; item temp = here[i].clone(); - iter = 0; + iter = 0; while (iter < inv_chars.size() && (here[i].invlet == 0 || (u.has_item(here[i].invlet) && - !u.i_at(here[i].invlet).stacks_with(here[i]))) ) { - here[i].invlet = nextinv; - iter++; - advance_nextinv(); - } + !u.i_at(here[i].invlet).stacks_with(here[i]))) ) { + here[i].invlet = nextinv; + iter++; + advance_nextinv(); + } if(pickup_count[i] != 0) { // Reinserting leftovers happens after item removal to avoid stacking issues. - int leftover_charges = here[i].charges - pickup_count[i]; + int leftover_charges = here[i].charges - pickup_count[i]; if(leftover_charges > 0) { - temp.charges = leftover_charges; - here[i].charges = pickup_count[i]; - } - } + temp.charges = leftover_charges; + here[i].charges = pickup_count[i]; + } + } - if (iter == inv_chars.size()) { - add_msg(_("You're carrying too many items!")); - werase(w_pickup); - wrefresh(w_pickup); - delwin(w_pickup); - return; - } else if (!u.can_pickWeight(here[i].weight(), false)) { - add_msg(_("The %s is too heavy!"), here[i].tname(this).c_str()); - decrease_nextinv(); - } else if (!u.can_pickVolume(here[i].volume())) { - if (u.is_armed()) { - if (!u.weapon.has_flag("NO_UNWIELD")) { - if (here[i].is_armor() && // Armor can be instantly worn - query_yn(_("Put on the %s?"), here[i].tname(this).c_str())) { + if (iter == inv_chars.size()) { + add_msg(_("You're carrying too many items!")); + werase(w_pickup); + wrefresh(w_pickup); + delwin(w_pickup); + return; + } else if (!u.can_pickWeight(here[i].weight(), false)) { + add_msg(_("The %s is too heavy!"), here[i].tname(this).c_str()); + decrease_nextinv(); + } else if (!u.can_pickVolume(here[i].volume())) { + if (u.is_armed()) { + if (!u.weapon.has_flag("NO_UNWIELD")) { + if (here[i].is_armor() && // Armor can be instantly worn + query_yn(_("Put on the %s?"), here[i].tname(this).c_str())) { if(u.wear_item(this, &(here[i]))) { picked_up = true; - } - } else if (!offered_swap) { - if (query_yn(_("Drop your %s and pick up %s?"), - u.weapon.tname(this).c_str(), here[i].tname(this).c_str())) { + } + } else if (!offered_swap) { + if (query_yn(_("Drop your %s and pick up %s?"), + u.weapon.tname(this).c_str(), here[i].tname(this).c_str())) { picked_up = true; - m.add_item_or_charges(posx, posy, u.remove_weapon(), 1); - u.wield(this, u.i_add(here[i], this).invlet); - mapPickup[here[i].tname(this)]++; + m.add_item_or_charges(posx, posy, u.remove_weapon(), 1); + u.wield(this, u.i_add(here[i], this).invlet); + mapPickup[here[i].tname(this)]++; add_msg(_("Wielding %c - %s"), u.weapon.invlet, u.weapon.tname(this).c_str()); - } - offered_swap = true; + } + offered_swap = true; } else { - decrease_nextinv(); + decrease_nextinv(); } - } else { - add_msg(_("There's no room in your inventory for the %s, and you can't\ - unwield your %s."), here[i].tname(this).c_str(), u.weapon.tname(this).c_str()); - decrease_nextinv(); - } - } else { - u.wield(this, u.i_add(here[i], this).invlet); - mapPickup[here[i].tname(this)]++; + } else { + add_msg(_("There's no room in your inventory for the %s, and you can't\ + unwield your %s."), here[i].tname(this).c_str(), u.weapon.tname(this).c_str()); + decrease_nextinv(); + } + } else { + u.wield(this, u.i_add(here[i], this).invlet); + mapPickup[here[i].tname(this)]++; picked_up = true; - } - } else if (!u.is_armed() && - (u.volume_carried() + here[i].volume() > u.volume_capacity() - 2 || - here[i].is_weap() || here[i].is_gun())) { - u.weapon = here[i]; + } + } else if (!u.is_armed() && + (u.volume_carried() + here[i].volume() > u.volume_capacity() - 2 || + here[i].is_weap() || here[i].is_gun())) { + u.weapon = here[i]; picked_up = true; - } else { - u.i_add(here[i], this); - mapPickup[here[i].tname(this)]++; + } else { + u.i_add(here[i], this); + mapPickup[here[i].tname(this)]++; picked_up = true; } if( picked_up ) { if (from_veh) { - veh->remove_item (veh_part, curmit); + veh->remove_item (veh_part, curmit); } else { - m.i_rem(posx, posy, curmit); + m.i_rem(posx, posy, curmit); } curmit--; - u.moves -= 100; + u.moves -= 100; if( pickup_count[i] != 0 ) { bool to_map = !from_veh; if( from_veh ) { to_map = !veh->add_item( veh_part, temp ); - } + } if( to_map ) { m.add_item_or_charges( posx, posy, temp ); - } + } } } } - curmit++; + curmit++; } if (min == -1) { //Auto pickup item message @@ -8487,7 +8761,7 @@ void game::grab() } // Handle_liquid returns false if we didn't handle all the liquid. -bool game::handle_liquid(item &liquid, bool from_ground, bool infinite, item *source) +bool game::handle_liquid(item &liquid, bool from_ground, bool infinite, item *source, item *cont) { if (!liquid.made_of(LIQUID)) { dbg(D_ERROR) << "game:handle_liquid: Tried to handle_liquid a non-liquid!"; @@ -8542,22 +8816,26 @@ bool game::handle_liquid(item &liquid, bool from_ground, bool infinite, item *so return true; } - std::stringstream text; - text << _("Container for ") << liquid.tname(this); - char ch = inv_type(text.str().c_str(), IC_CONTAINER); - if (!u.has_item(ch)) { - // No container selected (escaped, ...), ask to pour - // we asked to pour rotten already - if (!from_ground && !liquid.rotten(this) && + if (cont == NULL) { + std::stringstream text; + text << _("Container for ") << liquid.tname(this); + + char ch = inv_for_liquid(liquid, text.str().c_str(), false); + if (!u.has_item(ch)) { + // No container selected (escaped, ...), ask to pour + // we asked to pour rotten already + if (!from_ground && !liquid.rotten(this) && query_yn(_("Pour %s on the ground?"), liquid.tname(this).c_str())) { - if (!m.has_flag("SWIMMABLE", u.posx, u.posy)) - m.add_item_or_charges(u.posx, u.posy, liquid, 1); - return true; + if (!m.has_flag("SWIMMABLE", u.posx, u.posy)) + m.add_item_or_charges(u.posx, u.posy, liquid, 1); + return true; + } + return false; } - return false; + + cont = &(u.i_at(ch)); } - item *cont = &(u.i_at(ch)); if (cont == NULL || cont->is_null()) { // Container is null, ask to pour. // we asked to pour rotten already @@ -8604,7 +8882,7 @@ bool game::handle_liquid(item &liquid, bool from_ground, bool infinite, item *so return false; } - if (cont->charges > 0 && cont->curammo->id != liquid.type->id) { + if (cont->charges > 0 && cont->curammo != NULL && cont->curammo->id != liquid.type->id) { add_msg(_("You can't mix loads in your %s."), cont->tname(this).c_str()); return false; } @@ -8626,98 +8904,77 @@ bool game::handle_liquid(item &liquid, bool from_ground, bool infinite, item *so } return true; - } else if (!cont->is_container()) { - add_msg(_("That %s won't hold %s."), cont->tname(this).c_str(), - liquid.tname(this).c_str()); - return false; } else { // filling up normal containers - // first, check if liquid types are compatible - if (!cont->contents.empty()) { - if (cont->contents[0].type->id != liquid.type->id) { + LIQUID_FILL_ERROR error; + int remaining_capacity = cont->get_remaining_capacity_for_liquid(liquid, error); + if (remaining_capacity <= 0) { + switch (error) + { + case L_ERR_NO_MIX: add_msg(_("You can't mix loads in your %s."), cont->tname(this).c_str()); - return false; + break; + case L_ERR_NOT_CONTAINER: + add_msg(_("That %s won't hold %s."), cont->tname(this).c_str(), liquid.tname(this).c_str()); + break; + case L_ERR_NOT_WATERTIGHT: + add_msg(_("That %s isn't water-tight."), cont->tname(this).c_str()); + break; + case L_ERR_NOT_SEALED: + add_msg(_("You can't seal that %s!"), cont->tname(this).c_str()); + break; + case L_ERR_FULL: + add_msg(_("Your %s can't hold any more %s."), cont->tname(this).c_str(), + liquid.tname(this).c_str()); + break; + default: + break; } + return false; } - // ok, liquids are compatible. Now check what the type of liquid is - // this will determine how much the holding container can hold - - it_container *container = dynamic_cast(cont->type); - int holding_container_charges; - - if (liquid.type->is_food()) { - it_comest *tmp_comest = dynamic_cast(liquid.type); - holding_container_charges = container->contains * tmp_comest->charges; - } else if (liquid.type->is_ammo()) { - it_ammo *tmp_ammo = dynamic_cast(liquid.type); - holding_container_charges = container->contains * tmp_ammo->count; - } else { - holding_container_charges = container->contains; - } - - // if the holding container is NOT empty if (!cont->contents.empty()) { - // case 1: container is completely full - if (cont->contents[0].charges == holding_container_charges) { - add_msg(_("Your %s can't hold any more %s."), cont->tname(this).c_str(), - liquid.tname(this).c_str()); - return false; - } - - // case 2: container is half full - + // Container is partly full if (infinite) { - cont->contents[0].charges = holding_container_charges; + cont->contents[0].charges += remaining_capacity; add_msg(_("You pour %s into your %s."), liquid.tname(this).c_str(), cont->tname(this).c_str()); return true; } else { // Container is finite, not empty and not full, add liquid to it add_msg(_("You pour %s into your %s."), liquid.tname(this).c_str(), cont->tname(this).c_str()); - cont->contents[0].charges += liquid.charges; - if (cont->contents[0].charges > holding_container_charges) { - int extra = cont->contents[0].charges - holding_container_charges; - cont->contents[0].charges = holding_container_charges; - liquid.charges = extra; + if (remaining_capacity > liquid.charges) { + remaining_capacity = liquid.charges; + } + cont->contents[0].charges += remaining_capacity; + liquid.charges -= remaining_capacity; + if (liquid.charges > 0) { add_msg(_("There's some left over!")); // Why not try to find another container here? return false; } return true; } - } else { // pouring into an empty container - if (!cont->has_flag("WATERTIGHT")) { // invalid container types - add_msg(_("That %s isn't water-tight."), cont->tname(this).c_str()); - return false; - } else if (!(cont->has_flag("SEALS"))) { - add_msg(_("You can't seal that %s!"), cont->tname(this).c_str()); - return false; - } + } else { // pouring into a valid empty container - int default_charges = 1; - - if (liquid.is_food()) { - it_comest *comest = dynamic_cast(liquid.type); - default_charges = comest->charges; - } else if (liquid.is_ammo()) { - it_ammo *ammo = dynamic_cast(liquid.type); - default_charges = ammo->count; - } - + item liquid_copy = liquid; + bool all_poured = true; if (infinite) { // if filling from infinite source, top it to max - liquid.charges = container->contains * default_charges; - } else if (liquid.charges > container->contains * default_charges) { + liquid_copy.charges = remaining_capacity; + add_msg(_("You pour %s into your %s."), liquid.tname(this).c_str(), + cont->tname(this).c_str()); + } else if (liquid.charges > remaining_capacity) { add_msg(_("You fill your %s with some of the %s."), cont->tname(this).c_str(), liquid.tname(this).c_str()); u.inv.unsort(); - int oldcharges = liquid.charges - container->contains * default_charges; - liquid.charges = container->contains * default_charges; - cont->put_in(liquid); - liquid.charges = oldcharges; - return false; + liquid.charges -= remaining_capacity; + liquid_copy.charges = remaining_capacity; + all_poured = false; + } else { + add_msg(_("You pour %s into your %s."), liquid.tname(this).c_str(), + cont->tname(this).c_str()); } - cont->put_in(liquid); - return true; + cont->put_in(liquid_copy); + return all_poured; } } return false; @@ -8736,7 +8993,7 @@ int game::move_liquid(item &liquid) //liquid is in fact a liquid. std::stringstream text; text << _("Container for ") << liquid.tname(this); - char ch = inv_type(text.str().c_str(), IC_CONTAINER); + char ch = inv_for_liquid(liquid, text.str().c_str(), false); //is container selected? if(u.has_item(ch)) { @@ -8964,7 +9221,7 @@ void game::drop_in_direction() to_veh = veh_part >= 0; } - if (m.has_flag("NOITEM", dirx, diry) || m.has_flag("SEALED", dirx, diry)) { + if (!m.can_put_items(dirx, diry)) { add_msg(_("You can't place items there!")); return; } @@ -9138,7 +9395,7 @@ void game::plthrow(char chInput) throw_item(u, x, y, thrown, trajectory); } -void game::plfire(bool burst) +void game::plfire(bool burst, int default_target_x, int default_target_y) { char reload_invlet = 0; if (!u.weapon.is_gun()) @@ -9232,7 +9489,8 @@ void game::plfire(bool burst) if(rl_dist( u.posx, u.posy, z.posx(), z.posy() ) <= range) { mon_targets.push_back(z); targetindices.push_back(i); - if (i == last_target) { + bool is_default_target = default_target_x == z.posx() && default_target_y == z.posy(); + if (is_default_target || (passtarget == -1 && i == last_target)) { passtarget = mon_targets.size() - 1; } } @@ -9400,20 +9658,20 @@ void game::complete_butcher(int index) if (bones > 0) { if (corpse->has_flag(MF_BONES)) { - m.spawn_item(u.posx, u.posy, "bone", age, bones); + m.spawn_item(u.posx, u.posy, "bone", bones, 0, age); add_msg(_("You harvest some usable bones!")); } else if (corpse->mat == "veggy") { - m.spawn_item(u.posx, u.posy, "plant_sac", age, bones); + m.spawn_item(u.posx, u.posy, "plant_sac", bones, 0, age); add_msg(_("You harvest some fluid bladders!")); } } if (sinews > 0) { if (corpse->has_flag(MF_BONES)) { - m.spawn_item(u.posx, u.posy, "sinew", age, sinews); + m.spawn_item(u.posx, u.posy, "sinew", sinews, 0, age); add_msg(_("You harvest some usable sinews!")); } else if (corpse->mat == "veggy") { - m.spawn_item(u.posx, u.posy, "plant_fibre", age, sinews); + m.spawn_item(u.posx, u.posy, "plant_fibre", sinews, 0, age); add_msg(_("You harvest some plant fibres!")); } } @@ -9443,14 +9701,14 @@ void game::complete_butcher(int index) } } - if(chitin) m.spawn_item(u.posx, u.posy, "chitin_piece", age, chitin); - if(fur) m.spawn_item(u.posx, u.posy, "fur", age, fur); - if(leather) m.spawn_item(u.posx, u.posy, "leather", age, leather); + if(chitin) m.spawn_item(u.posx, u.posy, "chitin_piece", chitin, 0, age); + if(fur) m.spawn_item(u.posx, u.posy, "fur", fur, 0, age); + if(leather) m.spawn_item(u.posx, u.posy, "leather", leather, 0, age); } if (feathers > 0) { if (corpse->has_flag(MF_FEATHER)) { - m.spawn_item(u.posx, u.posy, "feather", age, feathers); + m.spawn_item(u.posx, u.posy, "feather", feathers, 0, age); add_msg(_("You harvest some feathers!")); } } @@ -9462,18 +9720,18 @@ void game::complete_butcher(int index) add_msg(_("You discover a CBM in the %s!"), corpse->name.c_str()); //To see if it spawns a battery if(rng(0,1) == 1){ //The battery works - m.spawn_item(u.posx, u.posy, "bio_power_storage", age); + m.spawn_item(u.posx, u.posy, "bio_power_storage", 1, 0, age); }else{//There is a burnt out CBM - m.spawn_item(u.posx, u.posy, "burnt_out_bionic", age); + m.spawn_item(u.posx, u.posy, "burnt_out_bionic", 1, 0, age); } } if(skill_shift >= 0){ //To see if it spawns a random additional CBM if(rng(0,1) == 1){ //The CBM works Item_tag bionic_item = item_controller->id_from("bionics"); - m.spawn_item(u.posx, u.posy, bionic_item, age); + m.spawn_item(u.posx, u.posy, bionic_item, 1, 0, age); }else{//There is a burnt out CBM - m.spawn_item(u.posx, u.posy, "burnt_out_bionic", age); + m.spawn_item(u.posx, u.posy, "burnt_out_bionic", 1, 0, age); } } } @@ -9484,7 +9742,7 @@ void game::complete_butcher(int index) add_msg(_("You discover a %s in the %s!"), contents[i].tname().c_str(), corpse->name.c_str()); m.add_item_or_charges(u.posx, u.posy, contents[i]); } else if (contents[i].is_bionic()){ - m.spawn_item(u.posx, u.posy, "burnt_out_bionic", age); + m.spawn_item(u.posx, u.posy, "burnt_out_bionic", 1, 0, age); } } @@ -9509,11 +9767,11 @@ void game::complete_butcher(int index) } else if(corpse->mat == "bone") { meat = "bone"; } else if(corpse->mat == "veggy") { - meat = "veggy"; + meat = "veggy"; } else { //Don't generate anything return; - } + } } item tmpitem=item_controller->create(meat, age); tmpitem.corpse=dynamic_cast(corpse); @@ -9532,7 +9790,7 @@ void game::forage() { add_msg(_("You found some wild veggies!")); u.practice(turn, "survival", 10); - m.spawn_item(u.activity.placement.x, u.activity.placement.y, "veggy_wild", turn, 0); + m.spawn_item(u.activity.placement.x, u.activity.placement.y, "veggy_wild", 1, 0, turn); m.ter_set(u.activity.placement.x, u.activity.placement.y, t_dirt); } else @@ -9611,99 +9869,113 @@ void game::takeoff(char chInput) void game::reload(char chInput) { - //Quick and dirty hack - //Save old weapon in temp variable - //Wield item that should be unloaded - //Reload weapon - //Put unloaded item back into inventory - //Wield old weapon - bool bSwitch = false; - item oTempWeapon; - item inv_it = u.inv.item_by_letter(chInput); - - if (u.weapon.invlet != chInput && !inv_it.is_null()) { - oTempWeapon = u.weapon; - u.weapon = inv_it; - u.inv.remove_item_by_letter(chInput); - bSwitch = true; + item* it; + if (u.weapon.invlet == chInput) { + it = &u.weapon; + } else { + it = &u.inv.item_by_letter(chInput); } - if (bSwitch || u.weapon.invlet == chInput) { - reload(); - u.activity.moves_left = 0; - monmove(); - process_activity(); - } + // Gun reloading is more complex. + if (it->is_gun()) { - if (bSwitch) { - u.inv.push_back(u.weapon); - u.weapon = oTempWeapon; - } -} + // bows etc do not need to reload. + if (it->has_flag("RELOAD_AND_SHOOT")) { + add_msg(_("Your %s does not need to be reloaded, it reloads and fires " + "a single motion."), it->tname().c_str()); + return; + } -void game::reload() -{ - if (u.weapon.is_gun()) { - if (u.weapon.has_flag("RELOAD_AND_SHOOT")) { - add_msg(_("Your %s does not need to be reloaded; it reloads and fires in a \ -single action."), u.weapon.tname().c_str()); - return; - } - if (u.weapon.ammo_type() == "NULL") { - add_msg(_("Your %s does not reload normally."), u.weapon.tname().c_str()); - return; - } - if (u.weapon.charges == u.weapon.clip_size()) { - int alternate_magazine = -1; - for (int i = 0; i < u.weapon.contents.size(); i++) - { - if ((u.weapon.contents[i].is_gunmod() && - (u.weapon.contents[i].typeId() == "spare_mag" && - u.weapon.contents[i].charges < (dynamic_cast(u.weapon.type))->clip)) || - ((u.weapon.contents[i].has_flag("MODE_AUX") && - u.weapon.contents[i].charges < u.weapon.contents[i].clip_size()))) - { - alternate_magazine = i; - } - } - if(alternate_magazine == -1) { - add_msg(_("Your %s is fully loaded!"), u.weapon.tname(this).c_str()); - return; - } - } - char invlet = u.weapon.pick_reload_ammo(u, true); - if (invlet == 0) { - add_msg(_("Out of ammo!")); - return; - } - u.assign_activity(this, ACT_RELOAD, u.weapon.reload_time(u), -1, invlet); - u.moves = 0; - } else if (u.weapon.is_tool()) { - it_tool* tool = dynamic_cast(u.weapon.type); - if (tool->ammo == "NULL") { - add_msg(_("You can't reload a %s!"), u.weapon.tname(this).c_str()); - return; - } - char invlet = u.weapon.pick_reload_ammo(u, true); - if (invlet == 0) { -// Reload failed - add_msg(_("Out of %s!"), ammo_name(tool->ammo).c_str()); - return; - } - u.assign_activity(this, ACT_RELOAD, u.weapon.reload_time(u), -1, invlet); - u.moves = 0; - } else if (!u.is_armed()) - add_msg(_("You're not wielding anything.")); - else - add_msg(_("You can't reload a %s!"), u.weapon.tname(this).c_str()); - refresh_all(); -} + // Make sure the item is actually reloadable + if (it->ammo_type() == "NULL") { + add_msg(_("Your %s does not reload normally."), it->tname().c_str()); + return; + } -// Unload a containter, gun, or tool -// If it's a gun, some gunmods can also be loaded -void game::unload(char chInput) -{ // this is necessary to prevent re-selection of the same item later - item it = (u.inv.remove_item_by_letter(chInput)); + // See if the gun is fully loaded. + if (it->charges == it->clip_size()) { + + // Also see if the spare magazine is loaded + bool magazine_isfull = true; + item contents; + + for (int i = 0; i < it->contents.size(); i++) + { + contents = it->contents[i]; + if ((contents.is_gunmod() && + (contents.typeId() == "spare_mag" && + contents.charges < (dynamic_cast(it->type))->clip)) || + (contents.has_flag("AUX_MODE") && + contents.charges < contents.clip_size())) + { + magazine_isfull = false; + break; + } + } + + if (magazine_isfull) { + add_msg(_("Your %s is fully loaded!"), it->tname().c_str()); + return; + } + } + + // pick ammo + char am_invlet = it->pick_reload_ammo(u, true); + if (am_invlet == 0) { + add_msg(_("Out of ammo!")); + return; + } + + // and finally reload. + const char chStr[2]={chInput, '\0'}; + u.assign_activity(this, ACT_RELOAD, it->reload_time(u), -1, am_invlet, chStr); + u.moves = 0; + + } else if (it->is_tool()) { // tools are simpler + it_tool* tool = dynamic_cast(it->type); + + // see if its actually reloadable. + if (tool->ammo == "NULL") { + add_msg(_("You can't reload a %s!"), it->tname().c_str()); + return; + } + + // pick ammo + char am_invlet = it->pick_reload_ammo(u, true); + + if (am_invlet == 0) { + // no ammo, fail reload + add_msg(_("Out of %s!"), ammo_name(tool->ammo).c_str()); + return; + } + + // do the actual reloading + const char chStr[2]={chInput, '\0'}; + u.assign_activity(this, ACT_RELOAD, it->reload_time(u), -1, am_invlet, chStr); + u.moves = 0; + + } else { // what else is there? + add_msg(_("You can't reload a %s!"), it->tname().c_str()); + } + + // all done. + refresh_all(); +} + +void game::reload() +{ + if (!u.is_armed()) { + add_msg(_("You're not wielding anything.")); + } else { + reload(u.weapon.invlet); + } +} + +// Unload a containter, gun, or tool +// If it's a gun, some gunmods can also be loaded +void game::unload(char chInput) +{ // this is necessary to prevent re-selection of the same item later + item it = (u.inv.remove_item_by_letter(chInput)); if (!it.is_null()) { unload(it); @@ -9741,17 +10013,26 @@ void game::unload(item& it) } int spare_mag = -1; int has_m203 = -1; + int has_40mml = -1; int has_shotgun = -1; + int has_shotgun2 = -1; + int has_shotgun3 = -1; if (it.is_gun()) { spare_mag = it.has_gunmod ("spare_mag"); has_m203 = it.has_gunmod ("m203"); + has_40mml = it.has_gunmod ("pipe_launcher40mm"); has_shotgun = it.has_gunmod ("u_shotgun"); + has_shotgun2 = it.has_gunmod ("masterkey"); + has_shotgun3 = it.has_gunmod ("rm121aux"); } if (it.is_container() || (it.charges == 0 && (spare_mag == -1 || it.contents[spare_mag].charges <= 0) && (has_m203 == -1 || it.contents[has_m203].charges <= 0) && - (has_shotgun == -1 || it.contents[has_shotgun].charges <= 0))) + (has_40mml == -1 || it.contents[has_40mml].charges <= 0) && + (has_shotgun == -1 || it.contents[has_shotgun].charges <= 0) && + (has_shotgun2 == -1 || it.contents[has_shotgun2].charges <= 0) && + (has_shotgun3 == -1 || it.contents[has_shotgun3].charges <= 0))) { if (it.contents.size() == 0) { @@ -9824,9 +10105,18 @@ void game::unload(item& it) // Then try the grenade launcher else if (has_m203 != -1 && weapon->contents[has_m203].charges > 0) weapon = &weapon->contents[has_m203]; + // Then try the pipe 40mm launcher + else if (has_40mml != -1 && weapon->contents[has_40mml].charges > 0) + weapon = &weapon->contents[has_40mml]; // Then try an underslung shotgun else if (has_shotgun != -1 && weapon->contents[has_shotgun].charges > 0) weapon = &weapon->contents[has_shotgun]; + // Then try a masterkey shotgun + else if (has_shotgun2 != -1 && weapon->contents[has_shotgun2].charges > 0) + weapon = &weapon->contents[has_shotgun2]; + // Then try a Rivtech shotgun + else if (has_shotgun3 != -1 && weapon->contents[has_shotgun3].charges > 0) + weapon = &weapon->contents[has_shotgun3]; } item newam; @@ -10010,14 +10300,14 @@ void game::pldrive(int x, int y) { } } -void game::plmove(int dx, int dy) +bool game::plmove(int dx, int dy) { if (run_mode == 2) { // Monsters around and we don't wanna run add_msg(_("Monster spotted--safe mode is on! \ (%s to turn it off or %s to ignore monster.)"), press_x(ACTION_TOGGLE_SAFEMODE).c_str(), from_sentence_case(press_x(ACTION_IGNORE_ENEMY)).c_str()); - return; + return false; } int x = 0; int y = 0; @@ -10044,12 +10334,17 @@ void game::plmove(int dx, int dy) if (mondex != -1) { monster &z = zombie(mondex); if (z.friendly == 0 && !(z.type->has_flag(MF_VERMIN))) { + if (u.has_destination()) { + add_msg(_("Monster in the way. Auto-move canceled. Click directly on monster to attack.")); + u.clear_destination(); + return false; + } int udam = u.hit_mon(this, &z); if (z.hurt(udam) || z.is_hallucination()) { kill_mon(mondex, true); } draw_hit_mon(x,y,z,z.dead); - return; + return false; } else { displace = true; } @@ -10057,6 +10352,7 @@ void game::plmove(int dx, int dy) // If not a monster, maybe there's an NPC there int npcdex = npc_at(x, y); if (npcdex != -1) { + bool force_attack = false; if(!active_npc[npcdex]->is_enemy()){ if (!query_yn(_("Really attack %s?"), active_npc[npcdex]->name.c_str())) { if (active_npc[npcdex]->is_friend()) { @@ -10064,20 +10360,27 @@ void game::plmove(int dx, int dy) active_npc[npcdex]->move_away_from(this, u.posx, u.posy); } - return; // Cancel the attack + return false; // Cancel the attack } else { //The NPC knows we started the fight, used for morale penalty. active_npc[npcdex]->hit_by_player = true; + force_attack = true; } } + if (u.has_destination() && !force_attack) { + add_msg(_("NPC in the way. Auto-move canceled. Click directly on NPC to attack.")); + u.clear_destination(); + return false; + } + u.hit_player(this, *active_npc[npcdex]); active_npc[npcdex]->make_angry(); if (active_npc[npcdex]->hp_cur[hp_head] <= 0 || active_npc[npcdex]->hp_cur[hp_torso] <= 0 ) { active_npc[npcdex]->die(this, true); } - return; + return false; } // Otherwise, actual movement, zomg @@ -10097,7 +10400,7 @@ void game::plmove(int dx, int dy) } if (newdist > curdist) { add_msg(_("You cannot pull yourself away from the faultline...")); - return; + return false; } } @@ -10105,7 +10408,7 @@ void game::plmove(int dx, int dy) if (rng(0, 40) > u.str_cur + int(u.dex_cur / 2)) { add_msg(_("You try to escape the pit, but slip back in.")); u.moves -= 100; - return; + return false; } else { add_msg(_("You escape the pit!")); u.rem_disease("in_pit"); @@ -10115,12 +10418,12 @@ void game::plmove(int dx, int dy) if (rng(0, 40) > u.dex_cur + int(u.str_cur / 2)) { add_msg(_("You struggle to stand.")); u.moves -= 100; - return; + return false; } else { add_msg(_("You stand up.")); u.rem_disease("downed"); u.moves -= 100; - return; + return false; } } @@ -10158,7 +10461,11 @@ void game::plmove(int dx, int dy) bool veh_closed_door = false; if (veh1) { dpart = veh1->part_with_feature (vpart1, "OPENABLE"); - veh_closed_door = dpart >= 0 && !veh1->parts[dpart].open; + if (veh1->part_info(dpart).has_flag("OPENCLOSE_INSIDE") && (!veh0 || veh0 != veh1)){ + veh_closed_door = false; + } else { + veh_closed_door = dpart >= 0 && !veh1->parts[dpart].open; + } } if (veh0 && abs(veh0->velocity) > 100) { @@ -10166,24 +10473,24 @@ void game::plmove(int dx, int dy) if (query_yn(_("Dive from moving vehicle?"))) { moving_vehicle_dismount(x, y); } - return; + return false; } else if (veh1 != veh0) { add_msg(_("There is another vehicle in the way.")); - return; + return false; } else if (veh1->part_with_feature(vpart1, "BOARDABLE") < 0) { add_msg(_("That part of the vehicle is currently unsafe.")); - return; + return false; } } if (m.move_cost(x, y) > 0 || pushing_furniture || shifting_furniture ) { // move_cost() of 0 = impassible (e.g. a wall) - u.set_underwater(false); + u.set_underwater(false); - //Ask for EACH bad field, maybe not? Maybe say "theres X bad shit in there don't do it." - field_entry *cur = NULL; - field &tmpfld = m.field_at(x, y); + //Ask for EACH bad field, maybe not? Maybe say "theres X bad shit in there don't do it." + field_entry *cur = NULL; + field &tmpfld = m.field_at(x, y); std::map::iterator field_it; for (field_it = tmpfld.getFieldStart(); field_it != tmpfld.getFieldEnd(); ++field_it) { cur = field_it->second; @@ -10207,15 +10514,15 @@ void game::plmove(int dx, int dy) break; } if ((dangerous) && !query_yn(_("Really step into that %s?"), cur->name().c_str())) { - return; - } + return false; + } } if (m.tr_at(x, y) != tr_null && u.per_cur - u.encumb(bp_eyes) >= traps[m.tr_at(x, y)]->visibility){ if ( !traps[m.tr_at(x, y)]->is_benign() && !query_yn(_("Really step onto that %s?"),traps[m.tr_at(x, y)]->name.c_str())){ - return; + return false; } } @@ -10228,13 +10535,13 @@ void game::plmove(int dx, int dy) if( NULL != grabbed_vehicle ) { if( grabbed_vehicle == veh0 ) { add_msg(_("You can't move %s while standing on it!"), grabbed_vehicle->name.c_str()); - return; + return false; } drag_multiplier += (float)(grabbed_vehicle->total_mass() * 1000) / (float)(u.weight_capacity() * 5); if( drag_multiplier > 2.0 ) { add_msg(_("The %s is too heavy for you to budge!"), grabbed_vehicle->name.c_str()); - return; + return false; } tileray mdir; @@ -10282,7 +10589,7 @@ void game::plmove(int dx, int dy) u.posy = player_prev_y; u.grab_point.x = prev_grab_x; u.grab_point.y = prev_grab_y; - return; + return false; } u.posx = player_prev_x; u.posy = player_prev_y; @@ -10342,15 +10649,15 @@ void game::plmove(int dx, int dy) if ( ! canmove ) { add_msg( _("The %s collides with something."), furntype.name.c_str() ); u.moves -= 50; // "oh was that your foot? Sorry :-O" - return; + return false; } else if ( ! m.can_move_furniture( fpos.x, fpos.y, &u ) ) { add_msg(_("The %s is too heavy for you to budge!"), furntype.name.c_str() ); u.moves -= 100; // time spent straining and going 'hnngh!' - return; // furniture and or obstacle wins. + return false; // furniture and or obstacle wins. } else if ( ! src_item_ok && dst_items > 0 ) { add_msg( _("There's stuff in the way.") ); u.moves -= 50; // "oh was that your stuffed parrot? Sorry :-O" - return; + return false; } if ( pulling_furniture ) { // normalize movecost for pulling: furniture moves into our current square -then- we move away @@ -10394,7 +10701,7 @@ void game::plmove(int dx, int dy) u.grab_point = point (0, 0); u.grab_type = OBJECT_NONE; } - return; // We moved furniture but stayed still. + return false; // We moved furniture but stayed still. } else if ( pushing_furniture && m.move_cost(x, y) <= 0 ) { // Not sure how that chair got into a wall, but don't let player follow. add_msg( _("You let go of the %s as it slides past %s"), furntype.name.c_str(), m.ter_at(x,y).name.c_str() ); u.grab_point = point (0, 0); @@ -10471,12 +10778,12 @@ void game::plmove(int dx, int dy) if (query_yn(_("Deactivate the turret?"))) { remove_zombie(mondex); u.moves -= 100; - m.spawn_item(x, y, "bot_turret", turn); + m.spawn_item(x, y, "bot_turret", 1, 0, turn); } - return; + return false; } else { add_msg(_("You can't displace your %s."), z.name().c_str()); - return; + return false; } } z.move_to(this, u.posx, u.posy, true); // Force the movement even though the player is there right now. @@ -10489,7 +10796,7 @@ void game::plmove(int dx, int dy) // If the player is in a vehicle, unboard them from the current part if (u.in_vehicle) - m.unboard_vehicle(this, u.posx, u.posy); + m.unboard_vehicle(u.posx, u.posy); // Move the player u.posx = x; @@ -10511,7 +10818,7 @@ void game::plmove(int dx, int dy) trap* tr = traps[m.tr_at(x, y)]; if (!u.avoid_trap(tr)) { trapfunc f; - (f.*(tr->act))(this, x, y); + (f.*(tr->act))(x, y); } } @@ -10553,29 +10860,73 @@ void game::plmove(int dx, int dy) if (m.has_flag("SWIMMABLE", x, y)) u.drench(this, 40, mfb(bp_feet) | mfb(bp_legs)); - // List items here - if (!m.has_flag("SEALED", x, y)) { - if (!u.has_disease("blind") && m.i_at(x, y).size() <= 3 && m.i_at(x, y).size() != 0) { - // TODO: Rewrite to be localizable - std::string buff = _("You see here "); - - for (int i = 0; i < m.i_at(x, y).size(); i++) { - buff += m.i_at(x, y)[i].tname(this); - - if (i + 2 < m.i_at(x, y).size()) - buff += _(", "); - else if (i + 1 < m.i_at(x, y).size()) - buff += _(", and "); - - } - - buff += _("."); - - add_msg(buff.c_str()); - } else if (m.i_at(x, y).size() != 0) { - add_msg(_("There are many items here.")); + // List items here + if (!m.has_flag("SEALED", x, y)) { + if (u.has_disease("blind") && !m.i_at(x, y).empty()) { + add_msg(_("There's something here, but you can't see what it is.")); + } else if (!m.i_at(x, y).empty()) { + std::vector names; + std::vector counts; + names.push_back(m.i_at(x, y)[0].tname(this)); + if (m.i_at(x, y)[0].count_by_charges()) { + counts.push_back(m.i_at(x, y)[0].charges); + } else { + counts.push_back(1); + } + for (int i = 1; i < m.i_at(x, y).size(); i++) { + item& tmpitem = m.i_at(x, y)[i]; + std::string next = tmpitem.tname(this); + bool got_it = false; + for (int i = 0; i < names.size(); ++i) { + if (next == names[i]) { + if (tmpitem.count_by_charges()) { + counts[i] += tmpitem.charges; + } else { + counts[i] += 1; + } + got_it = true; + break; + } + } + if (!got_it) { + names.push_back(next); + if (tmpitem.count_by_charges()) { + counts.push_back(tmpitem.charges); + } else { + counts.push_back(1); + } + } + if (names.size() > 6) { + break; + } + } + for (int i = 0; i < names.size(); ++i) { + std::string fmt; + if (counts[i] == 1) { + //~ one item (e.g. "a dress") + fmt = _("a %s"); + names[i] = string_format(fmt, names[i].c_str()); + } else { + //~ number of items: " " + fmt = ngettext("%1$d %2$s", "%1$d %2$ss", counts[i]); + names[i] = string_format(fmt, counts[i], names[i].c_str()); + } + } + if (names.size() == 1) { + add_msg(_("You see here %s."), names[0].c_str()); + } else if (names.size() == 2) { + add_msg(_("You see here %s and %s."), + names[0].c_str(), names[1].c_str()); + } else if (names.size() == 3) { + add_msg(_("You see here %s, %s, and %s."), names[0].c_str(), + names[1].c_str(), names[2].c_str()); + } else if (names.size() < 7) { + add_msg(_("There are %d items here."), names.size()); + } else { + add_msg(_("There are many items here.")); + } + } } - } if (veh1 && veh1->part_with_feature(vpart1, "CONTROLS") >= 0 && u.in_vehicle) @@ -10613,7 +10964,7 @@ void game::plmove(int dx, int dy) if(tunneldist) //you tunneled { if (u.in_vehicle) - m.unboard_vehicle(this, u.posx, u.posy); + m.unboard_vehicle(u.posx, u.posy); u.power_level -= (tunneldist * 10); //tunneling costs 10 bionic power per impassable tile u.moves -= 100; //tunneling costs 100 moves u.posx += (tunneldist + 1) * (x - u.posx); //move us the number of tiles we tunneled in the x direction, plus 1 for the last tile @@ -10625,6 +10976,7 @@ void game::plmove(int dx, int dy) else //or you couldn't tunnel due to lack of energy { u.power_level -= 10; //failure is expensive! + return false; } } else if (veh_closed_door) { // move_cost <= 0 @@ -10657,7 +11009,10 @@ void game::plmove(int dx, int dy) u.moves -= 80; add_msg(_("You rattle the bars but the door is locked!")); } + return false; } + + return true; } void game::plswim(int x, int y) @@ -10850,8 +11205,39 @@ void game::fling_player_or_monster(player *p, monster *zz, const int& dir, float } } -void game::vertical_move(int movez, bool force) -{ +void game::vertical_move(int movez, bool force) { +// Check if there are monsters are using the stairs. + bool slippedpast = false; + if (!coming_to_stairs.empty()) { + // TODO: Allow travel if zombie couldn't reach stairs, but spawn him when we go up. + add_msg(_("You try to use the stairs. Suddenly you are blocked by a %s!"), coming_to_stairs[0].name().c_str()); + // Roll. + int dexroll = dice(6, u.dex_cur + u.skillLevel("dodge") * 2); + int strroll = dice(3, u.str_cur + u.skillLevel("melee") * 1.5); + if (coming_to_stairs.size() > 4) { + add_msg(_("The are a lot of them on the %s!"), m.tername(u.posx, u.posy).c_str()); + dexroll /= 4; + strroll /= 2; + } + else if (coming_to_stairs.size() > 1) { + add_msg(_("There's something else behind it!")); + dexroll /= 2; + } + + if (dexroll < 14 || strroll < 12) { + update_stair_monsters(); + u.moves -= 100; + return; + } + + if (dexroll >= 14) + add_msg(_("You manage to slip past!")); + else if (strroll >= 12) + add_msg(_("You manage to push past!")); + slippedpast = true; + u.moves -=100; + } + // > and < are used for diving underwater. if (m.move_cost(u.posx, u.posy) == 0 && m.has_flag("SWIMMABLE", u.posx, u.posy)){ if (movez == -1) { @@ -10949,19 +11335,26 @@ void game::vertical_move(int movez, bool force) } } - bool replace_monsters = false; -// Replace the stair monsters if we just came back - if (abs(monstairx - levx) <= 1 && abs(monstairy - levy) <= 1 && - monstairz == levz + movez) - replace_monsters = true; - if (!force) { monstairx = levx; monstairy = levy; monstairz = levz; } - // Despawn monsters, only push them onto the stair monster list if we're taking stairs. - despawn_monsters( abs(movez) == 1 && !force ); + // Make sure monsters are saved! + for (unsigned int i = 0; i < num_zombies(); i++) { + monster &z = zombie(i); + int turns = z.turns_to_reach(this, u.posx, u.posy); + if (turns < 10 && coming_to_stairs.size() < 8 && z.will_reach(this, u.posx, u.posy) + && !slippedpast) { + z.onstairs = true; + z.staircount = 10 + turns; + coming_to_stairs.push_back(z); + //remove_zombie(i); + } else { + force_save_monster(z); + } +} + despawn_monsters(); clear_zombies(); // Figure out where we know there are up/down connectors @@ -10969,8 +11362,8 @@ void game::vertical_move(int movez, bool force) for (int x = 0; x < OMAPX; x++) { for (int y = 0; y < OMAPY; y++) { if (cur_om->seen(x, y, levz) && - ((movez == 1 && oterlist[ cur_om->ter(x, y, levz) ].known_up) || - (movez == -1 && oterlist[ cur_om->ter(x, y, levz) ].known_down) )) + ((movez == 1 && otermap[ cur_om->ter(x, y, levz) ].known_up) || + (movez == -1 && otermap[ cur_om->ter(x, y, levz) ].known_down) )) discover.push_back( point(x, y) ); } } @@ -10980,10 +11373,10 @@ void game::vertical_move(int movez, bool force) for (int i = 0; i < discover.size(); i++) { int x = discover[i].x, y = discover[i].y; cur_om->seen(x, y, z_coord) = true; - if (movez == 1 && !oterlist[ cur_om->ter(x, y, z_coord) ].known_down && + if (movez == 1 && !otermap[ cur_om->ter(x, y, z_coord) ].known_down && !cur_om->has_note(x, y, z_coord)) cur_om->add_note(x, y, z_coord, _("AUTO: goes down")); - if (movez == -1 && !oterlist[ cur_om->ter(x, y, z_coord) ].known_up && + if (movez == -1 && !otermap[ cur_om->ter(x, y, z_coord) ].known_up && !cur_om->has_note(x, y, z_coord)) cur_om->add_note(x, y, z_coord, _("AUTO: goes up")); } @@ -10998,13 +11391,10 @@ void game::vertical_move(int movez, bool force) if (rope_ladder) m.ter_set(u.posx, u.posy, t_rope_up); if (m.ter(stairx, stairy) == t_manhole_cover) { - m.spawn_item(stairx + rng(-1, 1), stairy + rng(-1, 1), "manhole_cover", 0); + m.spawn_item(stairx + rng(-1, 1), stairy + rng(-1, 1), "manhole_cover"); m.ter_set(stairx, stairy, t_manhole); } - if (replace_monsters) - replace_stair_monsters(); - m.spawn_monsters(this); if (force) { // Basically, we fell. @@ -11026,7 +11416,7 @@ void game::vertical_move(int movez, bool force) trap* tr = traps[m.tr_at(u.posx, u.posy)]; if (force || !u.avoid_trap(tr)) { trapfunc f; - (f.*(tr->act))(this, u.posx, u.posy); + (f.*(tr->act))(u.posx, u.posy); } } @@ -11035,8 +11425,7 @@ void game::vertical_move(int movez, bool force) } -void game::update_map(int &x, int &y) -{ +void game::update_map(int &x, int &y) { int shiftx = 0, shifty = 0; int olevx = 0, olevy = 0; while (x < SEEX * int(MAPSIZE / 2)) { @@ -11079,8 +11468,10 @@ void game::update_map(int &x, int &y) set_adjacent_overmaps(); // Shift monsters if we're actually shifting - if(shiftx || shifty) - despawn_monsters(false, shiftx, shifty); + if (shiftx || shifty) { + despawn_monsters(shiftx, shifty); + u.shift_destination(-shiftx * SEEX, -shifty * SEEY); + } // Shift NPCs for (int i = 0; i < active_npc.size(); i++) { @@ -11164,21 +11555,21 @@ void game::update_overmap_seen() for (int i = 0; i < line.size() && sight_points >= 0; i++) { int lx = line[i].x, ly = line[i].y; if (lx >= 0 && lx < OMAPX && ly >= 0 && ly < OMAPY) - cost = oterlist[cur_om->ter(lx, ly, levz)].see_cost; + cost = otermap[cur_om->ter(lx, ly, levz)].see_cost; else if ((lx < 0 || lx >= OMAPX) && (ly < 0 || ly >= OMAPY)) { if (lx < 0) lx += OMAPX; else lx -= OMAPX; if (ly < 0) ly += OMAPY; else ly -= OMAPY; - cost = oterlist[om_diag->ter(lx, ly, levz)].see_cost; + cost = otermap[om_diag->ter(lx, ly, levz)].see_cost; } else if (lx < 0 || lx >= OMAPX) { if (lx < 0) lx += OMAPX; else lx -= OMAPX; - cost = oterlist[om_hori->ter(lx, ly, levz)].see_cost; + cost = otermap[om_hori->ter(lx, ly, levz)].see_cost; } else if (ly < 0 || ly >= OMAPY) { if (ly < 0) ly += OMAPY; else ly -= OMAPY; - cost = oterlist[om_vert->ter(lx, ly, levz)].see_cost; + cost = otermap[om_vert->ter(lx, ly, levz)].see_cost; } sight_points -= cost; } @@ -11216,64 +11607,134 @@ point game::om_location() void game::replace_stair_monsters() { - for (int i = 0; i < coming_to_stairs.size(); i++) - add_zombie(coming_to_stairs[i].mon); + for (int i = 0; i < coming_to_stairs.size(); i++) { + coming_to_stairs[i].onstairs = false; + coming_to_stairs[i].staircount = 0; + add_zombie(coming_to_stairs[i]); + } coming_to_stairs.clear(); } //TODO: abstract out the location checking code //TODO: refactor so zombies can follow up and down stairs instead of this mess -void game::update_stair_monsters() -{ - if (abs(levx - monstairx) > 1 || abs(levy - monstairy) > 1) - return; +void game::update_stair_monsters() { + + // Search for the stairs closest to the player. + std::vector stairx, stairy; + std::vector stairdist; + + if (!coming_to_stairs.empty()) { + for (int x = 0; x < SEEX * MAPSIZE; x++) { + for (int y = 0; y < SEEY * MAPSIZE; y++) { + if (m.has_flag("GOES_UP", x, y) || m.has_flag("GOES_DOWN", x, y)) { + stairx.push_back(x); + stairy.push_back(y); + stairdist.push_back(rl_dist(x, y, u.posx, u.posy)); + } + } + } + if (stairdist.empty()) + return; // Found no stairs? + + // Find closest stairs. + int si = 0; + for (int i = 0; i < stairdist.size(); i++) { + if (stairdist[i] < stairdist[si]) + si = i; + } + + // Attempt to spawn zombies. + for (int i = 0; i < coming_to_stairs.size(); i++) { + int mposx = stairx[si], mposy = stairy[si]; + monster &z = coming_to_stairs[i]; + + // We might be not be visible. + if (!( z.posx() < 0 - (SEEX * MAPSIZE) / 6 || + z.posy() < 0 - (SEEY * MAPSIZE) / 6 || + z.posx() > (SEEX * MAPSIZE * 7) / 6 || + z.posy() > (SEEY * MAPSIZE * 7) / 6 ) ) { + + coming_to_stairs[i].staircount -= 4; + // Let the player know zombies are trying to come. + z.setpos(mposx, mposy, true); + if (u_see(mposx, mposy)) { + std::stringstream dump; + if (coming_to_stairs[i].staircount > 4) + dump << _("You see a ") << z.name() << _(" on the stairs!"); + else + dump << _("The ") << z.name() << _(" is almost at the ") + << (m.has_flag("GOES_UP", mposx, mposy) ? _("bottom") : _("top")) << _(" of the ") + << m.tername(mposx, mposy).c_str() << "!"; + add_msg(dump.str().c_str()); + } + else { + sound(mposx, mposy, 5, _("a sound nearby from the stairs!")); + } - for (int i = 0; i < coming_to_stairs.size(); i++) { - coming_to_stairs[i].count--; - if (coming_to_stairs[i].count <= 0) { - int startx = rng(0, SEEX * MAPSIZE - 1), starty = rng(0, SEEY * MAPSIZE - 1); - bool found_stairs = false; - for (int x = 0; x < SEEX * MAPSIZE && !found_stairs; x++) { - for (int y = 0; y < SEEY * MAPSIZE && !found_stairs; y++) { - int sx = (startx + x) % (SEEX * MAPSIZE), - sy = (starty + y) % (SEEY * MAPSIZE); - if (m.has_flag("GOES_UP", sx, sy) || m.has_flag("GOES_DOWN", sx, sy)) { - found_stairs = true; - int mposx = sx, mposy = sy; - int tries = 0; - while (!is_empty(mposx, mposy) && tries < 10) { - mposx = sx + rng(-2, 2); - mposy = sy + rng(-2, 2); - tries++; - } - if (tries < 10) { - coming_to_stairs[i].mon.setpos(mposx, mposy, true); - add_zombie( coming_to_stairs[i].mon ); - if (u_see(sx, sy)) { - if (m.has_flag("GOES_UP", sx, sy)) { - add_msg(_("A %s comes down the %s!"), coming_to_stairs[i].mon.name().c_str(), - m.tername(sx, sy).c_str()); - } else { - add_msg(_("A %s comes up the %s!"), coming_to_stairs[i].mon.name().c_str(), - m.tername(sx, sy).c_str()); + if (is_empty(mposx, mposy) && coming_to_stairs[i].staircount <= 0) { + z.setpos(mposx, mposy, true); + z.onstairs = false; + z.staircount = 0; + add_zombie(z); + if (u_see(mposx, mposy)) { + if (m.has_flag("GOES_UP", mposx, mposy)) { + add_msg(_("The %s comes down the %s!"), z.name().c_str(), + m.tername(mposx, mposy).c_str()); + } else { + add_msg(_("The %s comes up the %s!"), z.name().c_str(), + m.tername(mposx, mposy).c_str()); + } + } + coming_to_stairs.erase(coming_to_stairs.begin() + i); + } else if (u.posx == mposx && u.posy == mposy && z.staircount <= 0) { + // Search for a clear tile. + int pushx = -1, pushy = -1; + int tries = 0; + z.setpos(mposx, mposy, true); + while(tries < 9) { + pushx = rng(-1, 1), pushy = rng(-1, 1); + if (z.can_move_to(this, mposx + pushx, mposy + pushy) && pushx != 0 && pushy != 0) { + add_msg(_("The %s pushed you back!"), z.name().c_str()); + u.posx += pushx; + u.posy += pushy; + u.moves -= 100; + // Stumble. + if (u.dodge(this) < 12) + u.add_disease("downed", 2); + return; + } + tries++; + } + add_msg(_("The %s tried to push you back but failed! It attacks you!"), z.name().c_str()); + z.hit_player(this, u, false); + u.moves -= 100; + return; + } + } } - } - } - } } - } - coming_to_stairs.erase(coming_to_stairs.begin() + i); - i--; - } - } - if (coming_to_stairs.empty()) { - monstairx = -1; - monstairy = -1; - monstairz = 999; - } + + if (coming_to_stairs.empty()) { + monstairx = -1; + monstairy = -1; + monstairz = 999; + } +} + +void game::force_save_monster(monster &z) { + real_coords rc( m.getabs(z.posx(), z.posy() ) ); + z.spawnmapx = rc.om_sub.x; + z.spawnmapy = rc.om_sub.y; + z.spawnposx = rc.sub_pos.x; + z.spawnposy = rc.sub_pos.y; + + tinymap tmp(&traps); + tmp.load(this, z.spawnmapx, z.spawnmapy, levz, false); + tmp.add_spawn(&z); + tmp.save(cur_om, turn, z.spawnmapx, z.spawnmapy, levz); } -void game::despawn_monsters(const bool stairs, const int shiftx, const int shifty) +void game::despawn_monsters(const int shiftx, const int shifty) { for (unsigned int i = 0; i < num_zombies(); i++) { monster &z = zombie(i); @@ -11281,47 +11742,49 @@ void game::despawn_monsters(const bool stairs, const int shiftx, const int shift if(shiftx != 0 || shifty != 0) { z.shift(shiftx, shifty); if( z.posx() >= 0 && z.posx() <= SEEX * MAPSIZE && - z.posy() >= 0 && z.posy() <= SEEY * MAPSIZE ) { + z.posy() >= 0 && z.posy() <= SEEY * MAPSIZE) { // We're inbounds, so don't despawn after all. continue; - } - } - - if (stairs && z.will_reach(this, u.posx, u.posy)) { - int turns = z.turns_to_reach(this, u.posx, u.posy); - if (turns < 999) { - coming_to_stairs.push_back( monster_and_count(z, 1 + turns) ); - } - } else if ( (z.spawnmapx != -1) || - ((stairs || shiftx != 0 || shifty != 0) && z.friendly != 0 ) ) { - // translate shifty relative coordinates to submapx, submapy, subtilex, subtiley - real_coords rc( m.getabs(z.posx(), z.posy() ) ); // still madness, bud handles straddling omap and -/+ - z.spawnmapx = rc.om_sub.x; - z.spawnmapy = rc.om_sub.y; - z.spawnposx = rc.sub_pos.x; - z.spawnposy = rc.sub_pos.y; - - tinymap tmp(&traps); - tmp.load(this, z.spawnmapx, z.spawnmapy, levz, false); - tmp.add_spawn(&z); - tmp.save(cur_om, turn, z.spawnmapx, z.spawnmapy, levz); - } else { - // No spawn site, so absorb them back into a group. - int group = valid_group((z.type->id), levx + shiftx, levy + shifty, levz); - if (group != -1) { - cur_om->zg[group].population++; - if (cur_om->zg[group].population / - (cur_om->zg[group].radius * cur_om->zg[group].radius) > 5 && - !cur_om->zg[group].diffuse) { - cur_om->zg[group].radius++; + } else { + if ( (z.spawnmapx != -1) || z.getkeep() || + ((shiftx != 0 || shifty != 0) && z.friendly != 0 ) ) { + // translate shifty relative coordinates to submapx, submapy, subtilex, subtiley + real_coords rc( m.getabs(z.posx(), z.posy() ) ); // still madness, bud handles straddling omap and -/+ + z.spawnmapx = rc.om_sub.x; + z.spawnmapy = rc.om_sub.y; + z.spawnposx = rc.sub_pos.x; + z.spawnposy = rc.sub_pos.y; + + // We're saving him, so there's no need to keep anymore. + z.setkeep(false); + + tinymap tmp(&traps); + tmp.load(this, z.spawnmapx, z.spawnmapy, levz, false); + tmp.add_spawn(&z); + tmp.save(cur_om, turn, z.spawnmapx, z.spawnmapy, levz); + } + else + { + // No spawn site, so absorb them back into a group. + int group = valid_group((z.type->id), levx + shiftx, levy + shifty, levz); + if (group != -1) + { + cur_om->zg[group].population++; + if (cur_om->zg[group].population / + (cur_om->zg[group].radius * cur_om->zg[group].radius) > 5 && + !cur_om->zg[group].diffuse) + { + cur_om->zg[group].radius++; + } + } + } + // Check if we should keep him. + if (!z.getkeep()) { + remove_zombie(i); + i--; } } } - // Shifting needs some cleanup for despawned monsters since they won't be cleared afterwards. - if(shiftx != 0 || shifty != 0) { - remove_zombie(i); - i--; - } } // The order in which zombies are shifted may cause zombies to briefly exist on @@ -11389,7 +11852,7 @@ void game::spawn_mon(int shiftx, int shifty) nextspawn += rng(group * 4 + num_zombies() * 4, group * 10 + num_zombies() * 10); for (int j = 0; j < group; j++) { // For each monster in the group get some spawn details - MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup( cur_om->zg[i].type, &mtypes, + MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup( cur_om->zg[i].type, &group, (int)turn ); zom = monster(GetMType(spawn_details.name)); for (int kk = 0; kk < spawn_details.pack_size; kk++){ @@ -11624,7 +12087,7 @@ void game::msg_buffer() refresh_all(); } -void game::teleport(player *p) +void game::teleport(player *p, bool add_teleglow) { if (p == NULL) { p = &u; @@ -11632,7 +12095,9 @@ void game::teleport(player *p) int newx, newy, tries = 0; bool is_u = (p == &u); - p->add_disease("teleglow", 300); + if(add_teleglow) { + p->add_disease("teleglow", 300); + } do { newx = p->posx + rng(0, SEEX * 2) - SEEX; newy = p->posy + rng(0, SEEY * 2) - SEEY; @@ -11640,7 +12105,7 @@ void game::teleport(player *p) } while (tries < 15 && !is_empty(newx, newy)); bool can_see = (is_u || u_see(newx, newy)); if (p->in_vehicle) { - m.unboard_vehicle (this, p->posx, p->posy); + m.unboard_vehicle(p->posx, p->posy); } p->posx = newx; p->posy = newy; @@ -11698,7 +12163,7 @@ void game::nuke(int x, int y) } } tmpmap.save(cur_om, turn, mapx, mapy, 0); - cur_om->ter(x, y, 0) = ot_crater; + cur_om->ter(x, y, 0) = "crater"; //Kill any npcs on that omap location. for(int i = 0; i < cur_om->npcs.size();i++) if(cur_om->npcs[i]->mapx/2== x && cur_om->npcs[i]->mapy/2 == y && cur_om->npcs[i]->omz == 0) @@ -11788,7 +12253,7 @@ bool game::spread_fungus(int x, int y) for (int k = 0; k < g->m.i_at(x, y).size(); k++) { m.i_rem(x, y, k); } - item seeds(g->itypes["fungal_seeds"], int(g->turn)); + item seeds(itypes["fungal_seeds"], int(g->turn)); m.add_item_or_charges(x, y, seeds); } } @@ -11872,7 +12337,7 @@ bool game::spread_fungus(int x, int y) for (int k = 0; k < g->m.i_at(i, j).size(); k++) { m.i_rem(i, j, k); } - item seeds(g->itypes["fungal_seeds"], int(g->turn)); + item seeds(itypes["fungal_seeds"], int(g->turn)); m.add_item_or_charges(x, y, seeds); } } @@ -12006,3 +12471,295 @@ make the terminal just a smidgen taller?"), erase(); } +void game::process_artifact(item *it, player *p, bool wielded) +{ + std::vector effects; + if (it->is_armor()) { + it_artifact_armor* armor = dynamic_cast(it->type); + effects = armor->effects_worn; + } else if (it->is_tool()) { + it_artifact_tool* tool = dynamic_cast(it->type); + effects = tool->effects_carried; + if (wielded) { + for (int i = 0; i < tool->effects_wielded.size(); i++) { + effects.push_back(tool->effects_wielded[i]); + } + } + // Recharge it if necessary + if (it->charges < tool->max_charges) { + switch (tool->charge_type) { + case ARTC_TIME: + // Once per hour + if (turn.seconds() == 0 && turn.minutes() == 0) { + it->charges++; + } + break; + case ARTC_SOLAR: + if (turn.seconds() == 0 && turn.minutes() % 10 == 0 && + is_in_sunlight(p->posx, p->posy)) { + it->charges++; + } + break; + case ARTC_PAIN: + if (turn.seconds() == 0) { + add_msg(_("You suddenly feel sharp pain for no reason.")); + p->pain += 3 * rng(1, 3); + it->charges++; + } + break; + case ARTC_HP: + if (turn.seconds() == 0) { + add_msg(_("You feel your body decaying.")); + p->hurtall(1); + it->charges++; + } + break; + } + } + } + + for (int i = 0; i < effects.size(); i++) { + switch (effects[i]) { + case AEP_STR_UP: + p->str_cur += 4; + break; + case AEP_DEX_UP: + p->dex_cur += 4; + break; + case AEP_PER_UP: + p->per_cur += 4; + break; + case AEP_INT_UP: + p->int_cur += 4; + break; + case AEP_ALL_UP: + p->str_cur += 2; + p->dex_cur += 2; + p->per_cur += 2; + p->int_cur += 2; + break; + case AEP_SPEED_UP: // Handled in player::current_speed() + break; + + case AEP_IODINE: + if (p->radiation > 0) { + p->radiation--; + } + break; + + case AEP_SMOKE: + if (one_in(10)) { + int x = p->posx + rng(-1, 1), y = p->posy + rng(-1, 1); + if (m.add_field(this, x, y, fd_smoke, rng(1, 3))) { + add_msg(_("The %s emits some smoke."), + it->tname().c_str()); + } + } + break; + + case AEP_SNAKES: + break; // Handled in player::hit() + + case AEP_EXTINGUISH: + for (int x = p->posx - 1; x <= p->posx + 1; x++) { + for (int y = p->posy - 1; y <= p->posy + 1; y++) { + m.adjust_field_age(point(x,y), fd_fire, -1); + } + } + + case AEP_HUNGER: + if (one_in(100)) { + p->hunger++; + } + break; + + case AEP_THIRST: + if (one_in(120)) { + p->thirst++; + } + break; + + case AEP_EVIL: + if (one_in(150)) { // Once every 15 minutes, on average + p->add_disease("evil", 300); + if (it->is_armor()) { + add_msg(_("You have an urge to wear the %s."), + it->tname().c_str()); + } else if (!wielded) { + add_msg(_("You have an urge to wield the %s."), + it->tname().c_str()); + } + } + break; + + case AEP_SCHIZO: + break; // Handled in player::suffer() + + case AEP_RADIOACTIVE: + if (one_in(4)) { + p->radiation++; + } + break; + + case AEP_STR_DOWN: + p->str_cur -= 3; + break; + + case AEP_DEX_DOWN: + p->dex_cur -= 3; + break; + + case AEP_PER_DOWN: + p->per_cur -= 3; + break; + + case AEP_INT_DOWN: + p->int_cur -= 3; + break; + + case AEP_ALL_DOWN: + p->str_cur -= 2; + p->dex_cur -= 2; + p->per_cur -= 2; + p->int_cur -= 2; + break; + + case AEP_SPEED_DOWN: + break; // Handled in player::current_speed() + } + } +} + +void game::add_artifact_messages(std::vector effects) +{ + int net_str = 0, net_dex = 0, net_per = 0, net_int = 0, net_speed = 0; + + for (int i = 0; i < effects.size(); i++) { + switch (effects[i]) { + case AEP_STR_UP: net_str += 4; break; + case AEP_DEX_UP: net_dex += 4; break; + case AEP_PER_UP: net_per += 4; break; + case AEP_INT_UP: net_int += 4; break; + case AEP_ALL_UP: net_str += 2; + net_dex += 2; + net_per += 2; + net_int += 2; break; + case AEP_STR_DOWN: net_str -= 3; break; + case AEP_DEX_DOWN: net_dex -= 3; break; + case AEP_PER_DOWN: net_per -= 3; break; + case AEP_INT_DOWN: net_int -= 3; break; + case AEP_ALL_DOWN: net_str -= 2; + net_dex -= 2; + net_per -= 2; + net_int -= 2; break; + + case AEP_SPEED_UP: net_speed += 20; break; + case AEP_SPEED_DOWN: net_speed -= 20; break; + + case AEP_IODINE: + break; // No message + + case AEP_SNAKES: + add_msg(_("Your skin feels slithery.")); + break; + + case AEP_INVISIBLE: + add_msg(_("You fade into invisibility!")); + break; + + case AEP_CLAIRVOYANCE: + add_msg(_("You can see through walls!")); + break; + + case AEP_SUPER_CLAIRVOYANCE: + add_msg(_("You can see through everything!")); + break; + + case AEP_STEALTH: + add_msg(_("Your steps stop making noise.")); + break; + + case AEP_GLOW: + add_msg(_("A glow of light forms around you.")); + break; + + case AEP_PSYSHIELD: + add_msg(_("Your mental state feels protected.")); + break; + + case AEP_RESIST_ELECTRICITY: + add_msg(_("You feel insulated.")); + break; + + case AEP_CARRY_MORE: + add_msg(_("Your back feels strengthened.")); + break; + + case AEP_HUNGER: + add_msg(_("You feel hungry.")); + break; + + case AEP_THIRST: + add_msg(_("You feel thirsty.")); + break; + + case AEP_EVIL: + add_msg(_("You feel an evil presence...")); + break; + + case AEP_SCHIZO: + add_msg(_("You feel a tickle of insanity.")); + break; + + case AEP_RADIOACTIVE: + add_msg(_("Your skin prickles with radiation.")); + break; + + case AEP_MUTAGENIC: + add_msg(_("You feel your genetic makeup degrading.")); + break; + + case AEP_ATTENTION: + add_msg(_("You feel an otherworldly attention upon you...")); + break; + + case AEP_FORCE_TELEPORT: + add_msg(_("You feel a force pulling you inwards.")); + break; + + case AEP_MOVEMENT_NOISE: + add_msg(_("You hear a rattling noise coming from inside yourself.")); + break; + + case AEP_BAD_WEATHER: + add_msg(_("You feel storms coming.")); + break; + } + } + + std::string stat_info = ""; + if (net_str != 0) { + stat_info += string_format(_("Str %s%d! "), + (net_str > 0 ? "+" : ""), net_str); + } + if (net_dex != 0) { + stat_info += string_format(_("Dex %s%d! "), + (net_dex > 0 ? "+" : ""), net_dex); + } + if (net_int != 0) { + stat_info += string_format(_("Int %s%d! "), + (net_int > 0 ? "+" : ""), net_int); + } + if (net_per != 0) { + stat_info += string_format(_("Per %s%d! "), + (net_per > 0 ? "+" : ""), net_per); + } + + if (stat_info.length() > 0) { + add_msg(stat_info.c_str()); + } + + if (net_speed != 0) { + add_msg(_("Speed %s%d! "), (net_speed > 0 ? "+" : ""), net_speed); + } +} diff --git a/game.h b/src/game.h similarity index 90% rename from game.h rename to src/game.h index aa11b9880bb83..b8e08e8903c60 100644 --- a/game.h +++ b/src/game.h @@ -22,6 +22,7 @@ #include "artifact.h" #include "mutation.h" #include "gamemode.h" +#include "live_view.h" #include "worldfactory.h" #include #include @@ -29,6 +30,20 @@ #include #include +// Fixed window sizes +#define HP_HEIGHT 14 +#define HP_WIDTH 7 +#define MINIMAP_HEIGHT 7 +#define MINIMAP_WIDTH 7 +#define MONINFO_HEIGHT 12 +#define MONINFO_WIDTH 48 +#define MESSAGES_HEIGHT 8 +#define MESSAGES_WIDTH 48 +#define LOCATION_HEIGHT 1 +#define LOCATION_WIDTH 48 +#define STATUS_HEIGHT 4 +#define STATUS_WIDTH 55 + #define LONG_RANGE 10 #define BLINK_SPEED 300 #define BULLET_SPEED 10000000 @@ -73,6 +88,8 @@ enum quit_status { QUIT_ERROR }; +// Refactoring into base monster class. + struct monster_and_count { monster mon; @@ -126,7 +143,7 @@ class game void decrease_nextinv(); // Decrement the next inventory letter void vadd_msg(const char* msg, va_list ap ); void add_msg_string(const std::string &s); - void add_msg(const char* msg, ...); + void add_msg(const char* msg, ...); void add_msg_if_player(player *p, const char* msg, ...); void add_msg_if_npc(player* p, const char* msg, ...); void add_msg_player_or_npc(player *p, const char* player_str, const char* npc_str, ...); @@ -182,7 +199,7 @@ class game void revive_corpse(int x, int y, item *it); // revives a corpse by item pointer, caller handles item deletion // hit_monster_with_flags processes ammo flags (e.g. incendiary, etc) void hit_monster_with_flags(monster &z, const std::set &effects); - void plfire(bool burst); // Player fires a gun (target selection)... + void plfire(bool burst, int default_target_x = -1, int default_target_y = -1); // Player fires a gun (target selection)... // ... a gun is fired, maybe by an NPC (actual damage, etc.). void fire(player &p, int tarx, int tary, std::vector &trajectory, bool burst); @@ -215,7 +232,7 @@ class game void mission_step_complete(int id, int step); // Parial completion void process_missions(); // Process missions, see if time's run out - void teleport(player *p = NULL); + void teleport(player *p = NULL, bool add_teleglow = true); void plswim(int x, int y); // Called by plmove. Handles swimming // when player is thrown (by impact or something) void fling_player_or_monster(player *p, monster *zz, const int& dir, float flvel, bool controlled = false); @@ -245,16 +262,17 @@ class game faction* random_good_faction(); faction* random_evil_faction(); - itype* new_artifact(); - itype* new_natural_artifact(artifact_natural_property prop = ARTPROP_NULL); void process_artifact(item *it, player *p, bool wielded = false); void add_artifact_messages(std::vector effects); void peek(); - point look_debug(point pnt=point(-256,-256)); + point look_debug(); point look_around();// Look at nearby terrain ';' int list_items(); //List all items around the player int list_monsters(); //List all monsters around the player + // Shared method to print "look around" info + void print_all_tile_info(int lx, int ly, WINDOW* w_look, int column, int &line, bool mouse_hover); + bool list_items_match(std::string sText, std::string sPattern); int list_filter_high_priority(std::vector &stack, std::string prorities); int list_filter_low_priority(std::vector &stack,int start, std::string prorities); @@ -271,6 +289,7 @@ class game char inv(inventory&,std::string); char inv_activatable(std::string title); char inv_type(std::string title, item_cat inv_item_type = IC_NULL); + char inv_for_liquid(const item &liquid, const std::string title, bool auto_choose_single); int inventory_item_menu(char chItem, int startx = 0, int width = 50); std::vector multidrop(); faction* list_factions(std::string title = "FACTIONS:"); @@ -284,8 +303,6 @@ class game bool has_gametype() const { return gamemode && gamemode->id() != SGAME_NULL; } special_game_id gametype() const { return (gamemode) ? gamemode->id() : SGAME_NULL; } - std::map itypes; - std::vector mtypes; std::map vtypes; std::vector traps; std::vector constructions; // The list of constructions @@ -304,7 +321,7 @@ class game map m; int levx, levy, levz; // Placement inside the overmap player u; - std::vector coming_to_stairs; + std::vector coming_to_stairs; int monstairx, monstairy, monstairz; std::vector active_npc; std::vector factions; @@ -326,8 +343,9 @@ class game WINDOW *w_status; WINDOW *w_status2; overmap *om_hori, *om_vert, *om_diag; // Adjacent overmaps + live_view liveview; - bool handle_liquid(item &liquid, bool from_ground, bool infinite, item *source = NULL); + bool handle_liquid(item &liquid, bool from_ground, bool infinite, item *source = NULL, item *cont = NULL); //Move_liquid returns the amount of liquid left if we didn't move all the liquid, //otherwise returns sentinel -1, signifies transaction fail. @@ -337,10 +355,6 @@ class game bionic_id random_good_bionic() const; // returns a non-faulty, valid bionic - void load_artifacts(std::string worldname); // Load artifact data - // Needs to be called by main() before MAPBUFFER.load - void load_artifacts_from_file(std::ifstream *f); // Load artifact data - // Knockback functions: knock target at (tx,ty) along a line, either calculated // from source position (sx,sy) using force parameter or passed as an argument; // force determines how far target is knocked, if trajectory is calculated @@ -365,8 +379,6 @@ class game void draw_line(const int x, const int y, std::vector ret); void draw_weather(weather_printable wPrint); -// Mi-Go speech bubble loading - void load_migo_speech(JsonObject &jo); // Vehicle related JSON loaders and variables void load_vehiclepart(JsonObject &jo); void load_vehicle(JsonObject &jo); @@ -405,8 +417,6 @@ class game void init_npctalk(); void init_fields(); void init_weather(); - void init_overmap(); - void init_artifacts(); void init_morale(); void init_itypes(); // Initializes item types void init_skills() throw (std::string); @@ -421,6 +431,7 @@ class game void init_autosave(); // Initializes autosave parameters void init_diseases(); // Initializes disease lookup table. void init_savedata_translation_tables(); + void init_lua(); // Initializes lua interpreter. void create_factions(); // Creates new factions (for a new game world) void load_npcs(); //Make any nearby NPCs from the overmap active. void create_starting_npcs(); // Creates NPCs that start near you @@ -433,10 +444,12 @@ class game void mutation_wish(); // Mutate void pldrive(int x, int y); // drive vehicle - void plmove(int x, int y); // Standard movement; handles attacks, traps, &c + // Standard movement; handles attacks, traps, &c. Returns false if auto move + // should be canceled + bool plmove(int dx, int dy); void wait(); // Long wait (player action) '^' void open(); // Open a door 'o' - void close(); // Close a door 'c' + void close(int closex = -1, int closey = -1); // Close a door 'c' void smash(); // Smash terrain void craft(); // See crafting.cpp void recraft(); // See crafting.cpp @@ -467,7 +480,7 @@ class game bool vehicle_near (); void handbrake (); void control_vehicle(); // Use vehicle controls '^' - void examine();// Examine nearby terrain 'e' + void examine(int examx = -1, int examy = -1);// Examine nearby terrain 'e' void advanced_inv(); // open vehicle interaction screen void exam_vehicle(vehicle &veh, int examx, int examy, int cx=0, int cy=0); @@ -497,6 +510,15 @@ class game void chat(); // Talk to a nearby NPC 'C' void plthrow(char chInput = '.'); // Throw an item 't' + // Internal methods to show "look around" info + void print_fields_info(int lx, int ly, WINDOW* w_look, int column, int &line); + void print_terrain_info(int lx, int ly, WINDOW* w_look, int column, int &line); + void print_trap_info(int lx, int ly, WINDOW* w_look, const int column, int &line); + void print_object_info(int lx, int ly, WINDOW* w_look, const int column, int &line, bool mouse_hover); + void handle_multi_item_info(int lx, int ly, WINDOW* w_look, const int column, int &line, bool mouse_hover); + void get_lookaround_dimensions(int &lookWidth, int &begin_y, int &begin_x) const; + + input_context get_player_input(std::string &action); // Target is an interactive function which allows the player to choose a nearby // square. It display information on any monster/NPC on that square, and also // returns a Bresenham line to that square. It is called by plfire() and @@ -508,7 +530,8 @@ class game // Map updating and monster spawning void replace_stair_monsters(); void update_stair_monsters(); - void despawn_monsters(const bool stairs = false, const int shiftx = 0, const int shifty = 0); + void despawn_monsters(const int shiftx = 0, const int shifty = 0); + void force_save_monster(monster &z); void spawn_mon(int shift, int shifty); // Called by update_map, sometimes int valid_group(std::string type, int x, int y, int z);// Picks a group from cur_om void set_adjacent_overmaps(bool from_scratch = false); @@ -539,6 +562,10 @@ class game void autosave(); // automatic quicksaves - Performs some checks before calling quicksave() void quicksave(); // Saves the game without quitting +// Input related + bool handle_mouseview(input_context &ctxt, std::string &action); // Handles box showing items under mouse + void hide_mouseview(); // Hides the mouse hover box and redraws what was under it + // On-request draw functions void draw_overmap(); // Draws the overmap, allows note-taking etc. void disp_kills(); // Display the player's kill counts @@ -561,8 +588,8 @@ class game signed char last_target; // The last monster targeted int run_mode; // 0 - Normal run always; 1 - Running allowed, but if a new + // monsters spawns, go to 2 - No movement allowed std::vector new_seen_mon; - // monsters spawns, go to 2 - No movement allowed int mostseen; // # of mons seen last turn; if this increases, run_mode++ bool autosafemode; // is autosafemode enabled? int turnssincelastmon; // needed for auto run mode @@ -588,6 +615,10 @@ class game special_game *gamemode; int moveCount; //Times the player has moved (not pause, sleep, etc) + const int lookHeight; // Look Around window height + + // Preview for auto move route + std::vector destination_preview; bool is_hostile_within(int distance); }; diff --git a/gamemode.cpp b/src/gamemode.cpp similarity index 100% rename from gamemode.cpp rename to src/gamemode.cpp diff --git a/gamemode.h b/src/gamemode.h similarity index 94% rename from gamemode.h rename to src/gamemode.h index f7f6a170dbacf..30fc60170e00c 100644 --- a/gamemode.h +++ b/src/gamemode.h @@ -25,16 +25,16 @@ struct special_game virtual ~special_game() { return; }; virtual special_game_id id() { return SGAME_NULL; }; // init is run when the game begins - virtual bool init(game *g) { return true; }; + virtual bool init(game *) { return true; }; // per_turn is run every turn--before any player actions - virtual void per_turn(game *g) { }; + virtual void per_turn(game *) { }; // pre_action is run after a keypress, but before the game handles the action // It may modify the action, e.g. to cancel it - virtual void pre_action(game *g, action_id &act) { }; + virtual void pre_action(game *, action_id &) { }; // post_action is run after the game handles the action - virtual void post_action(game *g, action_id act) { }; + virtual void post_action(game *, action_id) { }; // game_over is run when the player dies (or the game otherwise ends) - virtual void game_over(game *g) { }; + virtual void game_over(game *) { }; }; @@ -72,7 +72,7 @@ struct tutorial_game : public special_game virtual void per_turn(game *g); virtual void pre_action(game *g, action_id &act); virtual void post_action(game *g, action_id act); - virtual void game_over(game *g) { }; + virtual void game_over(game *) { }; private: void add_message(game *g, tut_lesson lesson); diff --git a/get_version.h b/src/get_version.h similarity index 100% rename from get_version.h rename to src/get_version.h diff --git a/graffiti.cpp b/src/graffiti.cpp similarity index 100% rename from graffiti.cpp rename to src/graffiti.cpp diff --git a/graffiti.h b/src/graffiti.h similarity index 100% rename from graffiti.h rename to src/graffiti.h diff --git a/help.cpp b/src/help.cpp similarity index 95% rename from help.cpp rename to src/help.cpp index a576cca13fab7..672637c937114 100644 --- a/help.cpp +++ b/src/help.cpp @@ -41,7 +41,7 @@ d: Hunger, Thirst, and Sleep l: Items overview\n\ e: Pain and Stimulants m: Combat\n\ f: Addiction n: Unarmed Styles\n\ g: Morale and Learning o: Survival tips\n\ -h: Radioactivity and Mutation\n\ +h: Radioactivity and Mutation p: Driving\n\ \n\ 1: List of all commands (you can change key commands here)\n\ 2: List of all options (you can change options here)\n\ @@ -550,6 +550,48 @@ extremities from frostbite and to keep your distance from large fires.")); getch(); break; + case 'p': + case 'P': + werase(w_help); + mvwprintz(w_help, 0, 0, c_white, _("\ +You control vehicles using the numpad, or vikeys. However, you control their\n\ + controls, rather than the vehicle directly. In order to\n\ + assume control of the vehicle, get to a location with\n\ + \\ | / \\ | / \"vehicle controls\" and %s. Once you are in control,\n\ + \\|/ \\|/ %s accelerates, %s slows or reverses, and %s & %s turn\n\ + -- -- -- -- left or right, respectively. Your diagonals both turn\n\ + /|\\ /|\\ and adjust speed. Typically, you will be using \"cruise\n\ + / | \\ / | \\ control\", so the gas/brake adjust the speed which\n\ + the vehicle will attempt to maintain. 10-30 MPH, or 16-48\n\ + KPH, is a good speed for beginning drivers, who have a\n\ +tendency to fumble the controls. As your Driving skill improves, you will\n\ +fumble less and less. To simply maintain course and speed, hit %s.\n\ +\n\ +It's a good idea to pull the handbrake-\"s\"-when parking, just to be safe.\n\ +If you want to get out, hit the lights, toggle cruise control, or otherwise\n\ +use the vehicle controls, %s to bring up the \"Vehicle Controls\" menu."), + press_x(ACTION_CONTROL_VEHICLE, _("press "), _("'Vehicle Controls'")).c_str(), + press_x(ACTION_MOVE_N, _(" "), _("'move_n'")).c_str(), + press_x(ACTION_MOVE_S, _(" "), _("'move_s'")).c_str(), + press_x(ACTION_MOVE_W, _(" "), _("'move_w'")).c_str(), + press_x(ACTION_MOVE_E, _(" "), _("'move_e'")).c_str(), + press_x(ACTION_PAUSE, _(" "), _("'pause'")).c_str(), + press_x(ACTION_CONTROL_VEHICLE, _("press "), _("'Vehicle Controls'")).c_str()); + for(int acty = 0; acty < 3; acty++) { + for(int actx = 0; actx < 3; actx++) { + std::vector keys = keys_bound_to( movearray[acty*3+actx] ); + if (!keys.empty()) { + mvwputch(w_help, (acty * 3 + 2), (actx * 3), c_ltblue, keys[0]); + if (keys.size() >0) { + mvwputch(w_help, (acty * 3 + 2), (actx * 3 + 10), c_ltblue, keys[1]); + } + } + } + } + wrefresh(w_help); + refresh(); + getch(); + break; // Keybindings case '1': { diff --git a/help.h b/src/help.h similarity index 100% rename from help.h rename to src/help.h diff --git a/helper.cpp b/src/helper.cpp similarity index 100% rename from helper.cpp rename to src/helper.cpp diff --git a/helper.h b/src/helper.h similarity index 100% rename from helper.h rename to src/helper.h diff --git a/iexamine.cpp b/src/iexamine.cpp similarity index 90% rename from iexamine.cpp rename to src/iexamine.cpp index 042e5f07b0f82..d1a54447843fd 100644 --- a/iexamine.cpp +++ b/src/iexamine.cpp @@ -19,8 +19,10 @@ #include #include -void iexamine::none(game *g, player *p, map *m, int examx, int examy) { - g->add_msg(_("That is a %s."), m->name(examx, examy).c_str()); +void iexamine::none(game *g, player *p, map *m, int examx, int examy) +{ + (void)p; //unused + g->add_msg(_("That is a %s."), m->name(examx, examy).c_str()); }; void iexamine::gaspump(game *g, player *p, map *m, int examx, int examy) { @@ -105,10 +107,14 @@ void iexamine::toilet(game *g, player *p, map *m, int examx, int examy) { } } -void iexamine::elevator(game *g, player *p, map *m, int examx, int examy){ - if (!query_yn(_("Use the %s?"),m->tername(examx, examy).c_str())) return; - int movez = (g->levz < 0 ? 2 : -2); - g->vertical_move( movez, false ); +void iexamine::elevator(game *g, player *p, map *m, int examx, int examy) +{ + (void)p; //unused + if (!query_yn(_("Use the %s?"), m->tername(examx, examy).c_str())) { + return; + } + int movez = (g->levz < 0 ? 2 : -2); + g->vertical_move( movez, false ); } void iexamine::controls_gate(game *g, player *p, map *m, int examx, int examy) { @@ -182,7 +188,7 @@ void iexamine::cardreader(game *g, player *p, map *m, int examx, int examy) { } } } else { - g->add_msg(_("Looks like you need a %s."),g->itypes[card_type]->name.c_str()); + g->add_msg(_("Looks like you need a %s."),itypes[card_type]->name.c_str()); } } } @@ -199,7 +205,7 @@ void iexamine::rubble(game *g, player *p, map *m, int examx, int examy) { // "Replace" if(m->ter(examx,examy) == t_rubble) { - item rock(g->itypes["rock"], g->turn); + item rock(itypes["rock"], g->turn); m->add_item_or_charges(p->posx, p->posy, rock); m->add_item_or_charges(p->posx, p->posy, rock); } @@ -241,7 +247,7 @@ void iexamine::tent(game *g, player *p, map *m, int examx, int examy) { for (int j = -1; j <= 1; j++) m->furn_set(examx + i, examy + j, f_null); g->add_msg(_("You take down the tent")); - item dropped(g->itypes["tent_kit"], g->turn); + item dropped(itypes["tent_kit"], g->turn); m->add_item_or_charges(examx, examy, dropped); } @@ -255,7 +261,7 @@ void iexamine::shelter(game *g, player *p, map *m, int examx, int examy) { for (int j = -1; j <= 1; j++) m->furn_set(examx + i, examy + j, f_null); g->add_msg(_("You take down the shelter")); - item dropped(g->itypes["shelter_kit"], g->turn); + item dropped(itypes["shelter_kit"], g->turn); m->add_item_or_charges(examx, examy, dropped); } @@ -268,10 +274,10 @@ void iexamine::wreckage(game *g, player *p, map *m, int examx, int examy) { if (query_yn(_("Clear up that wreckage?"))) { p->moves -= 200; m->ter_set(examx, examy, t_dirt); - item chunk(g->itypes["steel_chunk"], g->turn); - item scrap(g->itypes["scrap"], g->turn); - item pipe(g->itypes["pipe"], g->turn); - item wire(g->itypes["wire"], g->turn); + item chunk(itypes["steel_chunk"], g->turn); + item scrap(itypes["scrap"], g->turn); + item pipe(itypes["pipe"], g->turn); + item wire(itypes["wire"], g->turn); m->add_item_or_charges(examx, examy, chunk); m->add_item_or_charges(examx, examy, scrap); if (one_in(5)) { @@ -339,7 +345,7 @@ void iexamine::pit_covered(game *g, player *p, map *m, int examx, int examy) return; } - item plank(g->itypes["2x4"], g->turn); + item plank(itypes["2x4"], g->turn); g->add_msg(_("You remove the plank.")); m->add_item_or_charges(p->posx, p->posy, plank); @@ -396,7 +402,7 @@ void iexamine::remove_fence_rope(game *g, player *p, map *m, int examx, int exam none(g, p, m, examx, examy); return; } - item rope(g->itypes["rope_6"], g->turn); + item rope(itypes["rope_6"], g->turn); m->add_item_or_charges(p->posx, p->posy, rope); m->add_item_or_charges(p->posx, p->posy, rope); m->ter_set(examx, examy, t_fence_post); @@ -410,7 +416,7 @@ void iexamine::remove_fence_wire(game *g, player *p, map *m, int examx, int exam return; } - item rope(g->itypes["wire"], g->turn); + item rope(itypes["wire"], g->turn); m->add_item_or_charges(p->posx, p->posy, rope); m->add_item_or_charges(p->posx, p->posy, rope); m->ter_set(examx, examy, t_fence_post); @@ -423,35 +429,37 @@ void iexamine::remove_fence_barbed(game *g, player *p, map *m, int examx, int ex return; } - item rope(g->itypes["wire_barbed"], g->turn); + item rope(itypes["wire_barbed"], g->turn); m->add_item_or_charges(p->posx, p->posy, rope); m->add_item_or_charges(p->posx, p->posy, rope); m->ter_set(examx, examy, t_fence_post); p->moves -= 200; } -void iexamine::slot_machine(game *g, player *p, map *m, int examx, int examy) { - if (p->cash < 10) - g->add_msg(_("You need $10 to play.")); - else if (query_yn(_("Insert $10?"))) { - do { - if (one_in(5)) - popup(_("Three cherries... you get your money back!")); - else if (one_in(20)) { - popup(_("Three bells... you win $50!")); - p->cash += 40; // Minus the $10 we wagered - } else if (one_in(50)) { - popup(_("Three stars... you win $200!")); - p->cash += 190; - } else if (one_in(1000)) { - popup(_("JACKPOT! You win $5000!")); - p->cash += 4990; - } else { - popup(_("No win.")); - p->cash -= 10; - } - } while (p->cash >= 10 && query_yn(_("Play again?"))); - } +void iexamine::slot_machine(game *g, player *p, map *m, int examx, int examy) +{ + (void)m; (void)examx; (void)examy; //unused + if (p->cash < 10) { + g->add_msg(_("You need $10 to play.")); + } else if (query_yn(_("Insert $10?"))) { + do { + if (one_in(5)) { + popup(_("Three cherries... you get your money back!")); + } else if (one_in(20)) { + popup(_("Three bells... you win $50!")); + p->cash += 40; // Minus the $10 we wagered + } else if (one_in(50)) { + popup(_("Three stars... you win $200!")); + p->cash += 190; + } else if (one_in(1000)) { + popup(_("JACKPOT! You win $5000!")); + p->cash += 4990; + } else { + popup(_("No win.")); + p->cash -= 10; + } + } while (p->cash >= 10 && query_yn(_("Play again?"))); + } } void iexamine::safe(game *g, player *p, map *m, int examx, int examy) { @@ -473,33 +481,36 @@ void iexamine::safe(game *g, player *p, map *m, int examx, int examy) { } void iexamine::bulletin_board(game *g, player *p, map *m, int examx, int examy) { - basecamp *camp = m->camp_at(examx, examy); - if (camp && camp->board_x() == examx && camp->board_y() == examy) { - std::vector options; - options.push_back(_("Cancel")); - // Causes a warning due to being unused, but don't want to delete since - // it's clearly what's intened for future functionality. - //int choice = menu_vec(true, camp->board_name().c_str(), options) - 1; - } - else { - bool create_camp = m->allow_camp(examx, examy); - std::vector options; - if (create_camp) - options.push_back(_("Create camp")); - options.push_back(_("Cancel")); - // TODO: Other Bulletin Boards - int choice = menu_vec(true, _("Bulletin Board"), options) - 1; - if (choice >= 0 && choice < options.size()) { - if (options[choice] == _("Create camp")) { - // TODO: Allow text entry for name - m->add_camp(_("Home"), examx, examy); - } - } - } + (void)g; (void)p; //unused + basecamp *camp = m->camp_at(examx, examy); + if (camp && camp->board_x() == examx && camp->board_y() == examy) { + std::vector options; + options.push_back(_("Cancel")); + // Causes a warning due to being unused, but don't want to delete + // since it's clearly what's intened for future functionality. + //int choice = menu_vec(true, camp->board_name().c_str(), options) - 1; + } else { + bool create_camp = m->allow_camp(examx, examy); + std::vector options; + if (create_camp) { + options.push_back(_("Create camp")); + } + options.push_back(_("Cancel")); + // TODO: Other Bulletin Boards + int choice = menu_vec(true, _("Bulletin Board"), options) - 1; + if (choice >= 0 && choice < options.size()) { + if (options[choice] == _("Create camp")) { + // TODO: Allow text entry for name + m->add_camp(_("Home"), examx, examy); + } + } + } } -void iexamine::fault(game *g, player *p, map *m, int examx, int examy) { - popup(_("\ +void iexamine::fault(game *g, player *p, map *m, int examx, int examy) +{ + (void)g; (void)p; (void)m; (void)examx; (void)examy; //unused + popup(_("\ This wall is perfectly vertical. Odd, twisted holes are set in it, leading\n\ as far back into the solid rock as you can see. The holes are humanoid in\n\ shape, but with long, twisted, distended limbs.")); @@ -621,8 +632,8 @@ void iexamine::flower_poppy(game *g, player *p, map *m, int examx, int examy) { } m->furn_set(examx, examy, f_null); - m->spawn_item(examx, examy, "poppy_flower", 0); - m->spawn_item(examx, examy, "poppy_bud", 0); + m->spawn_item(examx, examy, "poppy_flower"); + m->spawn_item(examx, examy, "poppy_bud"); } void iexamine::fungus(game *g, player *p, map *m, int examx, int examy) { @@ -640,7 +651,7 @@ void iexamine::fungus(game *g, player *p, map *m, int examx, int examy) { g->add_msg(_("The %s is covered in tiny spores!"), g->zombie(mondex).name().c_str()); } - if (!g->zombie(mondex).make_fungus(g)) { + if (!g->zombie(mondex).make_fungus()) { g->kill_mon(mondex, false); } } else if (g->u.posx == i && g->u.posy == j) { @@ -741,7 +752,7 @@ void iexamine::dirtmound(game *g, player *p, map *m, int examx, int examy) { g->u.remove_weapon(); } } - m->spawn_item(examx, examy, seed_types[seed_index], g->turn, 1, 1); + m->spawn_item(examx, examy, seed_types[seed_index], 1, 1, g->turn); m->set(examx, examy, t_dirt, f_plant_seed); p->moves -= 500; g->add_msg(_("Planted %s"), seed_names[seed_index].c_str()); @@ -765,8 +776,8 @@ void iexamine::aggie_plant(game *g, player *p, map *m, int examx, int examy) { plantCount = 12; } - m->spawn_item(examx, examy, seedType.substr(5), g->turn, plantCount); - m->spawn_item(examx, examy, seedType, 0, 1, rng(plantCount / 4, plantCount / 2)); + m->spawn_item(examx, examy, seedType.substr(5), plantCount, 0, g->turn); + m->spawn_item(examx, examy, seedType, 1, rng(plantCount / 4, plantCount / 2)); p->moves -= 500; } @@ -780,7 +791,7 @@ void iexamine::aggie_plant(game *g, player *p, map *m, int examx, int examy) { m->i_at(examx, examy)[0].bday = 0; } p->use_charges("fertilizer_liquid", 1); - m->spawn_item(examx, examy, "fertilizer", 0, 1, 1); + m->i_at(examx, examy).push_back(item_controller->create("fertilizer", (int) g->turn)); } } @@ -800,10 +811,10 @@ void iexamine::pick_plant(game *g, player *p, map *m, int examx, int examy, std: if (plantCount > 12) plantCount = 12; - m->spawn_item(examx, examy, itemType, g->turn, plantCount); + m->spawn_item(examx, examy, itemType, plantCount, 0, g->turn); if (seeds) { - m->spawn_item(examx, examy, "seed_" + itemType, g->turn, 1, rng(plantCount / 4, plantCount / 2)); + m->spawn_item(examx, examy, "seed_" + itemType, 1, rng(plantCount / 4, plantCount / 2), g->turn); } m->ter_set(examx, examy, (ter_id)new_ter); @@ -934,22 +945,22 @@ void iexamine::recycler(game *g, player *p, map *m, int examx, int examy) { for (int i = 0; i < num_lumps; i++) { - m->spawn_item(p->posx, p->posy, "steel_lump", 0); + m->spawn_item(p->posx, p->posy, "steel_lump"); } for (int i = 0; i < num_sheets; i++) { - m->spawn_item(p->posx, p->posy, "sheet_metal", 0); + m->spawn_item(p->posx, p->posy, "sheet_metal"); } for (int i = 0; i < num_chunks; i++) { - m->spawn_item(p->posx, p->posy, "steel_chunk", 0); + m->spawn_item(p->posx, p->posy, "steel_chunk"); } for (int i = 0; i < num_scraps; i++) { - m->spawn_item(p->posx, p->posy, "scrap", 0); + m->spawn_item(p->posx, p->posy, "scrap"); } } diff --git a/iexamine.h b/src/iexamine.h similarity index 100% rename from iexamine.h rename to src/iexamine.h diff --git a/init.cpp b/src/init.cpp similarity index 95% rename from init.cpp rename to src/init.cpp index 5f7c7b005f108..c1d2bd9074c22 100644 --- a/init.cpp +++ b/src/init.cpp @@ -17,6 +17,9 @@ #include "monstergenerator.h" #include "inventory.h" #include "tutorial.h" +#include "overmap.h" +#include "artifact.h" +#include "speech.h" #include #include @@ -36,7 +39,7 @@ std::map reverse_legacy_furn_id; void init_data_mappings() { set_ter_ids(); set_furn_ids(); - + set_oter_ids(); // temporary (reliable) kludge until switch statements are rewritten std::map legacy_lookup; for(int i=0; i< num_legacy_ter;i++) { @@ -69,6 +72,7 @@ void init_data_mappings() { // TODO: make this actually load files from the named directory std::vector listfiles(std::string const &dirname) { + (void)dirname; //not used yet std::vector ret; ret.push_back("data/json/materials.json"); @@ -84,6 +88,7 @@ std::vector listfiles(std::string const &dirname) ret.push_back("data/json/furniture.json"); ret.push_back("data/json/terrain.json"); ret.push_back("data/json/migo_speech.json"); + ret.push_back("data/json/doll_speech.json"); ret.push_back("data/json/names.json"); ret.push_back("data/json/vehicle_parts.json"); ret.push_back("data/json/vehicles.json"); @@ -105,6 +110,7 @@ std::vector listfiles(std::string const &dirname) ret.push_back("data/json/martialarts.json"); ret.push_back("data/json/tutorial.json"); ret.push_back("data/json/tool_qualities.json"); + ret.push_back("data/json/overmap_terrain.json"); ret.push_back("data/json/recipes.json"); return ret; @@ -124,7 +130,7 @@ void load_object(JsonObject &jo) } } -void null_load_target(JsonObject &jo){} +void null_load_target(JsonObject &) {} void init_data_structures() { @@ -142,12 +148,13 @@ void init_data_structures() type_function_map["furniture"] = new StaticFunctionAccessor(&load_furniture); type_function_map["terrain"] = new StaticFunctionAccessor(&load_terrain); type_function_map["monstergroup"] = new StaticFunctionAccessor(&MonsterGroupManager::LoadMonsterGroup); + type_function_map["speech"] = new StaticFunctionAccessor(&load_speech); + //data/json/colors.json would be listed here, but it's loaded before the others (see curses_start_color()) // Non Static Function Access type_function_map["snippet"] = new ClassFunctionAccessor(&SNIPPET, &snippet_library::load_snippet); type_function_map["item_group"] = new ClassFunctionAccessor(item_controller, &Item_factory::load_item_group); - type_function_map["migo_speech"] = new ClassFunctionAccessor(g, &game::load_migo_speech); type_function_map["NAME"] = new ClassFunctionAccessor(&NameGenerator::generator(), &NameGenerator::load_name); type_function_map["vehicle_part"] = new ClassFunctionAccessor(g, &game::load_vehiclepart); @@ -172,12 +179,16 @@ void init_data_structures() type_function_map["martial_art"] = new StaticFunctionAccessor(&load_martial_art); type_function_map["tutorial_messages"] = new StaticFunctionAccessor(&load_tutorial_messages); + type_function_map["overmap_terrain"] = + new StaticFunctionAccessor(&load_overmap_terrain); mutations_category[""].clear(); init_mutation_parts(); init_translation(); init_martial_arts(); init_inventory_categories(); + init_colormap(); + init_artifacts(); } void release_data_structures() diff --git a/init.h b/src/init.h similarity index 100% rename from init.h rename to src/init.h diff --git a/input.cpp b/src/input.cpp similarity index 78% rename from input.cpp rename to src/input.cpp index b5d3ac7ea1ca2..2d93dc36d1293 100644 --- a/input.cpp +++ b/src/input.cpp @@ -1,6 +1,6 @@ #include "cursesdef.h" #include "input.h" -#include "picojson.h" +#include "json.h" #include "output.h" #include "keypress.h" #include @@ -78,27 +78,6 @@ InputEvent get_input(int ch) } -// Gets input from both keyboard and mouse -mapped_input get_input_from_kyb_mouse() -{ - input_event raw_event; - -#if (defined TILES || defined SDLTILES) - raw_event = getch_kyb_mouse(); -#else - raw_event.type = CATA_INPUT_KEYBOARD; - raw_event.add_input(get_keypress()); -#endif - - mapped_input mapped; - mapped.evt = raw_event; - if (raw_event.type != CATA_INPUT_MOUSE) { - mapped.command = get_input(raw_event.get_first_input()); - } - - return mapped; -} - bool is_mouse_enabled() { #if !(defined TILES || defined SDLTILES) @@ -175,83 +154,64 @@ void input_manager::init() { init_keycode_mapping(); std::ifstream data_file; - picojson::value input_value; std::string file_name = "data/raw/keybindings.json"; - data_file.open(file_name.c_str()); + data_file.open(file_name.c_str(), std::ifstream::in | std::ifstream::binary); if(!data_file.good()) { throw "Could not read " + file_name; } - data_file >> input_value; - data_file.close(); - - if(!input_value.is()) { - throw file_name + "is not an array"; - } + JsonIn jsin(&data_file); //Crawl through once and create an entry for every definition - const picojson::array& root = input_value.get(); - - for (picojson::array::const_iterator entry = root.begin(); - entry != root.end(); ++entry) { - if( !(entry->is()) ){ - debugmsg("Invalid keybinding setting, entry not a JSON object"); - continue; - } - + jsin.start_array(); + while (!jsin.end_array()) { // JSON object representing the action - const picojson::value& action_object = *entry; + JsonObject action = jsin.get_object(); - const std::string& action_id = action_object.get("id").get(); - - std::string context = "default"; - if(action_object.contains("category")) { - context = action_object.get("category").get(); - } + const std::string action_id = action.get_string("id"); + actionID_to_name[action_id] = action.get_string("name", action_id); + const std::string context = action.get_string("category", "default"); // Iterate over the bindings JSON array - const picojson::array& keybindings = action_object.get("bindings").get(); - for (picojson::array::const_iterator subentry = keybindings.begin(); - subentry != keybindings.end(); ++subentry) { - - const picojson::value& keybinding = *subentry; - const std::string& input_method = keybinding.get("input_method").get(); + JsonArray bindings = action.get_array("bindings"); + const bool defaultcontext = (context == "default"); + while (bindings.has_more()) { + JsonObject keybinding = bindings.next_object(); + std::string input_method = keybinding.get_string("input_method"); input_event new_event; if(input_method == "keyboard") { new_event.type = CATA_INPUT_KEYBOARD; } else if(input_method == "gamepad") { new_event.type = CATA_INPUT_GAMEPAD; + } else if(input_method == "mouse") { + new_event.type = CATA_INPUT_MOUSE; } - if(keybinding.get("key").is()) { - const std::string& key = keybinding.get("key").get(); - - new_event.sequence.push_back(inp_mngr.get_keycode(key)); - } else if(keybinding.get("key").is()) { - picojson::array keys = keybinding.get("key").get(); - for(int i=0; i(); - - new_event.sequence.push_back(inp_mngr.get_keycode(next_key)); + if (keybinding.has_array("key")) { + JsonArray keys = keybinding.get_array("key"); + while (keys.has_more()) { + new_event.sequence.push_back( + get_keycode(keys.next_string()) + ); } + } else { // assume string if not array, and throw if not string + new_event.sequence.push_back( + get_keycode(keybinding.get_string("key")) + ); } - if(context == "default") { + if (defaultcontext) { action_to_input[action_id].push_back(new_event); } else { action_contexts[context][action_id].push_back(new_event); } } + } - if(!action_object.contains("name")) { - actionID_to_name[action_id] = action_id; - } else { - actionID_to_name[action_id] = action_object.get("name").get(); + data_file.close(); } - } -} void input_manager::add_keycode_pair(long ch, const std::string& name) { keycode_to_keyname[ch] = name; @@ -297,6 +257,12 @@ void input_manager::init_keycode_mapping() { add_gamepad_keycode_pair(JOY_5, "JOY_5"); add_gamepad_keycode_pair(JOY_6, "JOY_6"); add_gamepad_keycode_pair(JOY_7, "JOY_7"); + + keyname_to_keycode["MOUSE_LEFT"] = MOUSE_BUTTON_LEFT; + keyname_to_keycode["MOUSE_RIGHT"] = MOUSE_BUTTON_RIGHT; + keyname_to_keycode["SCROLL_UP"] = SCROLLWHEEL_UP; + keyname_to_keycode["SCROLL_DOWN"] = SCROLLWHEEL_DOWN; + keyname_to_keycode["MOUSE_MOVE"] = MOUSE_MOVE; } long input_manager::get_keycode(std::string name) { @@ -306,8 +272,24 @@ long input_manager::get_keycode(std::string name) { std::string input_manager::get_keyname(long ch, input_event_t inp_type) { if(inp_type == CATA_INPUT_KEYBOARD) { return keycode_to_keyname[ch]; - } else { + } else if(inp_type == CATA_INPUT_MOUSE) { + if(ch == MOUSE_BUTTON_LEFT) { + return "MOUSE_LEFT"; + } else if(ch == MOUSE_BUTTON_RIGHT) { + return "MOUSE_RIGHT"; + } else if(ch == SCROLLWHEEL_UP) { + return "SCROLL_UP"; + } else if(ch == SCROLLWHEEL_DOWN) { + return "SCROLL_DOWN"; + } else if(ch == MOUSE_MOVE) { + return "MOUSE_MOVE"; + } else { + return "MOUSE_UNKNOWN"; + } + } else if (inp_type == CATA_INPUT_GAMEPAD) { return gamepad_keycode_to_keyname[ch]; + } else { + return "UNKNOWN"; } } @@ -330,6 +312,8 @@ const std::string& input_manager::get_action_name(const std::string& action) { const std::string CATA_ERROR = "ERROR"; const std::string UNDEFINED = "UNDEFINED"; const std::string ANY_INPUT = "ANY_INPUT"; +const std::string COORDINATE = "COORDINATE"; +const std::string TIMEOUT = "TIMEOUT"; const std::string& input_context::input_to_action(input_event& inp) { for(int i=0; i 0; +} + + void input_context::register_action(const std::string& action_descriptor) { if(action_descriptor == "ANY_INPUT") { registered_any_input = true; + } else if(action_descriptor == "COORDINATE") { + handling_coordinate_input = true; } registered_actions.push_back(action_descriptor); @@ -392,8 +386,13 @@ const std::string input_context::get_desc(const std::string& action_descriptor) } const std::string& input_context::handle_input() { + next_action.type = CATA_INPUT_ERROR; while(1) { - input_event next_action = inp_mngr.get_input_event(NULL); + next_action = inp_mngr.get_input_event(NULL); + + if (next_action.type == CATA_INPUT_TIMEOUT) { + return TIMEOUT; + } const std::string& action = input_to_action(next_action); @@ -403,9 +402,22 @@ const std::string& input_context::handle_input() { continue; } + if(next_action.type == CATA_INPUT_MOUSE) { + if(!handling_coordinate_input) { + continue; // Ignore this mouse input. + } + + coordinate_input_received = true; + coordinate_x = next_action.mouse_x; + coordinate_y = next_action.mouse_y; + } else { + coordinate_input_received = false; + } + if(action != CATA_ERROR) { return action; } + // If we registered to receive any input, return ANY_INPUT // to signify that an unregistered key was pressed. if(registered_any_input) { @@ -517,19 +529,28 @@ void input_context::display_help() { werase(w_help); } +input_event input_context::get_raw_input() +{ + return next_action; +} + #ifndef TILES // If we're using curses, we need to provide get_input_event() here. input_event input_manager::get_input_event(WINDOW* win) { - int key = getch(); + int key = get_keypress(); input_event rval; if(key == ERR) { - rval.type = CATA_INPUT_ERROR; + if (should_timeout) { + rval.type = CATA_INPUT_TIMEOUT; + } else { + rval.type = CATA_INPUT_ERROR; + } } else { rval.type = CATA_INPUT_KEYBOARD; rval.sequence.push_back(key); } - + should_timeout = false; return rval; } @@ -537,4 +558,9 @@ void input_context::display_help() { bool gamepad_available() { return false; } + + // Coordinates just never happen(no mouse input) + bool input_context::get_coordinates(WINDOW* capture_win, int& x, int& y) { + return false; + } #endif diff --git a/input.h b/src/input.h similarity index 65% rename from input.h rename to src/input.h index 0ddfd7e3a4824..4ef6aa8091a48 100644 --- a/input.h +++ b/src/input.h @@ -37,23 +37,88 @@ enum InputEvent { Undefined }; -// Raw input that's been translated into a command -struct mapped_input { - InputEvent command; - input_event evt; - - mapped_input() - { - command = Undefined; - } -}; - InputEvent get_input(int ch = '\0'); -mapped_input get_input_from_kyb_mouse(); bool is_mouse_enabled(); void get_direction(int &x, int &y, InputEvent &input); std::string get_input_string_from_file(std::string fname="input.txt"); +enum mouse_buttons { MOUSE_BUTTON_LEFT=1, MOUSE_BUTTON_RIGHT, SCROLLWHEEL_UP, SCROLLWHEEL_DOWN, MOUSE_MOVE }; + +enum input_event_t { + CATA_INPUT_ERROR, + CATA_INPUT_TIMEOUT, + CATA_INPUT_KEYBOARD, + CATA_INPUT_GAMEPAD, + CATA_INPUT_MOUSE +}; + +/** + * An instance of an input, like a keypress etc. + * + * Gamepad, mouse and keyboard keypresses will be represented as `long`. + * Whether a gamepad, mouse or keyboard was used can be checked using the + * `type` member. + * + */ +struct input_event { + input_event_t type; + + std::vector modifiers; // Keys that need to be held down for + // this event to be activated. + + std::vector sequence; // The sequence of key or mouse events that + // triggers this event. For single-key + // events, simply make this of size 1. + + int mouse_x, mouse_y; // Mouse click co-ordinates, if applicable + + input_event() + { + mouse_x = mouse_y = 0; + } + + long get_first_input() const + { + if (sequence.size() == 0) { + return 0; + } + + return sequence[0]; + } + + void add_input(const long input) + { + sequence.push_back(input); + } + + bool operator==(const input_event& other) const + { + if(type != other.type) { + return false; + } + + if(sequence.size() != other.sequence.size()) { + return false; + } + for(int i=0; i > action_to_input; std::map > > action_contexts; @@ -146,6 +221,8 @@ class input_manager { void init_keycode_mapping(); void add_keycode_pair(long ch, const std::string& name); void add_gamepad_keycode_pair(long ch, const std::string& name); + + bool should_timeout; }; // Singleton for our input manager. @@ -164,6 +241,8 @@ extern input_manager inp_mngr; class input_context { public: input_context() : registered_any_input(false), category("default") {}; + // TODO: consider making the curses WINDOW an argument to the constructor, so that mouse input + // outside that window can be ignored input_context(std::string category) : registered_any_input(false), category(category) {}; /** @@ -176,6 +255,11 @@ class input_context { * If `action_descriptor` is the special "ANY_INPUT", instead of ignoring * unregistered keys, those keys will all be linked to this "ANY_INPUT" * action. + * + * If `action_descriptor` is the special "COORDINATE", coordinate input will be processed + * and the specified coordinates can be retrieved using `get_coordinates()`. Currently the + * only form of coordinate input is mouse input(you can directly click coordinates on + * the screen). */ void register_action(const std::string& action_descriptor); @@ -191,6 +275,8 @@ class input_context { * This internally calls getch() or whatever other input method * is available(e.g. gamepad). * + * If the action is mouse input, returns "MOUSE". + * * @return One of the input actions formerly registered with * `register_action()`, or "ERROR" if an error happened. * @@ -205,6 +291,17 @@ class input_context { */ void get_direction(int& dx, int& dy, const std::string& action); + /** + * Get the coordinates associated with the last mouse click. + * + * TODO: This right now is more or less specific to the map window, + * and returns the absolute map coordinate. + * Eventually this should be made more flexible. + * + * @return true if we could process a click inside the window, false otherwise. + */ + bool get_coordinates(WINDOW* window, int& x, int& y); + // Below here are shortcuts for registering common key combinations. void register_directions(); void register_updown(); @@ -217,16 +314,29 @@ class input_context { */ void display_help(); + /** + * Temporary method to retrieve the raw input received, so that input_contexts + * can be used in screens where not all possible actions have been defined in + * keybindings.json yet. + */ + input_event get_raw_input(); + + /* For the future, something like this might be nice: * const std::string register_action(const std::string& action_descriptor, x, y, width, height); * (x, y, width, height) would describe an area on the visible window that, if clicked, triggers the action. */ private: + std::vector registered_actions; const std::string& input_to_action(input_event& inp); bool registered_any_input; std::string category; // The input category this context uses. + int coordinate_x, coordinate_y; + bool coordinate_input_received; + bool handling_coordinate_input; + input_event next_action; }; /** diff --git a/inventory.cpp b/src/inventory.cpp similarity index 97% rename from inventory.cpp rename to src/inventory.cpp index f344095e89cc5..0f6e514514107 100644 --- a/inventory.cpp +++ b/src/inventory.cpp @@ -273,6 +273,19 @@ inventory inventory::filter_by_category(item_cat cat, const player& u) const return reduced_inv; } +inventory inventory::filter_by_capacity_for_liquid(const item &liquid) const +{ + inventory reduced_inv; + for (invstack::const_iterator iter = items.begin(); iter != items.end(); ++iter) { + const item& it = iter->front(); + LIQUID_FILL_ERROR error; + if (it.get_remaining_capacity_for_liquid(liquid, error) > 0) { + reduced_inv.clone_stack(*iter); + } + } + return reduced_inv; +} + void inventory::unsort() { @@ -553,12 +566,12 @@ void inventory::form_from_map(game *g, point origin, int range) // Kludges for now! ter_id terrain_id = g->m.ter(x, y); if ((g->m.field_at(x, y).findField(fd_fire)) || (terrain_id == t_lava)) { - item fire(g->itypes["fire"], 0); + item fire(itypes["fire"], 0); fire.charges = 1; add_item(fire); } if (terrain_id == t_water_sh || terrain_id == t_water_dp){ - item water(g->itypes["water"], 0); + item water(itypes["water"], 0); water.charges = 50; add_item(water); } @@ -590,43 +603,43 @@ void inventory::form_from_map(game *g, point origin, int range) const int forgepart = veh->part_with_feature(vpart, "FORGE"); if (kpart >= 0) { - item hotplate(g->itypes["hotplate"], 0); + item hotplate(itypes["hotplate"], 0); hotplate.charges = veh->fuel_left("battery", true); add_item(hotplate); - item water(g->itypes["water_clean"], 0); + item water(itypes["water_clean"], 0); water.charges = veh->fuel_left("water"); add_item(water); - item pot(g->itypes["pot"], 0); + item pot(itypes["pot"], 0); add_item(pot); - item pan(g->itypes["pan"], 0); + item pan(itypes["pan"], 0); add_item(pan); } if (weldpart >= 0) { - item welder(g->itypes["welder"], 0); + item welder(itypes["welder"], 0); welder.charges = veh->fuel_left("battery", true); add_item(welder); - item soldering_iron(g->itypes["soldering_iron"], 0); + item soldering_iron(itypes["soldering_iron"], 0); soldering_iron.charges = veh->fuel_left("battery", true); add_item(soldering_iron); } if (craftpart >= 0) { - item vac_sealer(g->itypes["vac_sealer"], 0); + item vac_sealer(itypes["vac_sealer"], 0); vac_sealer.charges = veh->fuel_left("battery", true); add_item(vac_sealer); - item dehydrator(g->itypes["dehydrator"], 0); + item dehydrator(itypes["dehydrator"], 0); dehydrator.charges = veh->fuel_left("battery", true); add_item(dehydrator); - item press(g->itypes["press"], 0); + item press(itypes["press"], 0); press.charges = veh->fuel_left("battery", true); add_item(press); } if (forgepart >= 0) { - item forge(g->itypes["forge"], 0); + item forge(itypes["forge"], 0); forge.charges = veh->fuel_left("battery", true); add_item(forge); } diff --git a/inventory.h b/src/inventory.h similarity index 94% rename from inventory.h rename to src/inventory.h index 76c152872d23b..377ce53b79fa4 100644 --- a/inventory.h +++ b/src/inventory.h @@ -2,6 +2,8 @@ #define _INVENTORY_H_ #include "item.h" +#include "artifact.h" + #include #include #include @@ -39,6 +41,7 @@ class inventory inventory filter_by_activation(player& u); inventory filter_by_category(item_cat cat, const player& u) const; + inventory filter_by_capacity_for_liquid(const item &liquid) const; void unsort(); // flags the inventory as unsorted void sort(); @@ -117,11 +120,11 @@ class inventory void load_invlet_cache( std::ifstream &fin ); // see savegame_legacy.cpp - void json_load_invcache(picojson::value & parsed); - void json_load_items(picojson::value & parsed, game * g); + void json_load_invcache(JsonIn &jsin); + void json_load_items(JsonIn &jsin); - picojson::value json_save_invcache() const; - picojson::value json_save_items() const; + void json_save_invcache(JsonOut &jsout) const; + void json_save_items(JsonOut &jsout) const; item nullitem; std::list nullstack; diff --git a/inventory_ui.cpp b/src/inventory_ui.cpp similarity index 97% rename from inventory_ui.cpp rename to src/inventory_ui.cpp index 91443ce9d7b86..d0beeb0fabf13 100644 --- a/inventory_ui.cpp +++ b/src/inventory_ui.cpp @@ -117,7 +117,7 @@ void print_inv_statics(game *g, WINDOW* w_inv, std::string title, mvwprintz(w_inv, 3, 45, c_white, "%c + %s", g->u.weapon.invlet, g->u.weapname().c_str()); else - mvwprintz(w_inv, 3, 45, g->u.weapon.color_in_inventory(&(g->u)), "%c - %s", + mvwprintz(w_inv, 3, 45, g->u.weapon.color_in_inventory(), "%c - %s", g->u.weapon.invlet, g->u.weapname().c_str()); } else mvwprintz(w_inv, 3, 45, c_ltgray, g->u.weapname().c_str()); @@ -199,7 +199,7 @@ char game::inv(inventory& inv, std::string title) item& it = slice[cur_it]->front(); if(cur_it==selected) selected_char=(int)it.invlet; mvwputch (w_inv, cur_line, 0, (cur_it == selected ? h_white : c_white), it.invlet); - mvwprintz(w_inv, cur_line, 1, (cur_it == selected ? h_white : it.color_in_inventory(&u) ), " %s", + mvwprintz(w_inv, cur_line, 1, (cur_it == selected ? h_white : it.color_in_inventory() ), " %s", it.tname(this).c_str()); if (slice[cur_it]->size() > 1) wprintw(w_inv, " x %d", slice[cur_it]->size()); @@ -278,10 +278,24 @@ char game::inv_activatable(std::string title) char game::inv_type(std::string title, item_cat inv_item_type) { - u.inv.restack(&u); - u.inv.sort(); - inventory reduced_inv = u.inv.filter_by_category(inv_item_type, u); - return inv(reduced_inv,title); + u.inv.restack(&u); + u.inv.sort(); + inventory reduced_inv = u.inv.filter_by_category(inv_item_type, u); + return inv(reduced_inv,title); +} + +char game::inv_for_liquid(const item &liquid, const std::string title, bool auto_choose_single) +{ + u.inv.restack(&u); + u.inv.sort(); + inventory reduced_inv = u.inv.filter_by_capacity_for_liquid(liquid); + if (auto_choose_single && reduced_inv.size() == 1) { + std::list cont_stack = reduced_inv.const_stack(0); + if (cont_stack.size() > 0) { + return cont_stack.front().invlet; + } + } + return inv(reduced_inv, title); } std::vector game::multidrop() diff --git a/item.cpp b/src/item.cpp similarity index 95% rename from item.cpp rename to src/item.cpp index b1fb71edaa513..43b926672a441 100644 --- a/item.cpp +++ b/src/item.cpp @@ -3,8 +3,6 @@ #include "output.h" #include "skill.h" #include "game.h" -#include -#include #include "cursesdef.h" #include "text_snippets.h" #include "material.h" @@ -12,6 +10,10 @@ #include "options.h" #include "uistate.h" +#include // floor +#include +#include + // mfb(n) converts a flag to its appropriate position in covers's bitfield #ifndef mfb #define mfb(n) static_cast (1 << (n)) @@ -99,8 +101,12 @@ item::item(itype *it, unsigned int turn, char let) it_tool* tool = dynamic_cast(it); if (tool->max_charges == 0) charges = -1; - else + else { charges = tool->def_charges; + if (tool->ammo != "NULL") { + curammo = dynamic_cast(item_controller->find_template(default_ammo(tool->ammo))); + } + } } else if (it->is_gunmod() && it->id == "spare_mag") { charges = 0; } else { @@ -147,9 +153,9 @@ item::item(std::string itemdata, game *g) load_info(itemdata, g); } -item::item(picojson::value & parsed, game *g) - { - json_load(parsed, g); +item::item(JsonObject &jo) +{ + deserialize(jo); } item::~item() @@ -273,7 +279,11 @@ const char ivaresc=001; */ std::string item::save_info() const { - return json_save().serialize(); + // doing this manually so as not to recurse + std::stringstream s; + JsonOut jsout(&s); + serialize(jsout, false); + return s.str(); } bool itag2ivar( std::string &item_tag, std::map &item_vars ) { @@ -323,13 +333,11 @@ void item::load_info(std::string data, game *g) check=data[1]; } if ( check == '{' ) { - picojson::value pdata; - dump >> pdata; - std::string jsonerr = picojson::get_last_error(); - if ( ! jsonerr.empty() ) { + JsonIn jsin(&dump); + try { + deserialize(jsin); + } catch (std::string jsonerr) { debugmsg("Bad item json\n%s", jsonerr.c_str() ); - } else { - json_load(pdata, g); } return; } else { @@ -744,14 +752,13 @@ nc_color item::color(player *u) const return ret; } -nc_color item::color_in_inventory(player *u) +nc_color item::color_in_inventory() { // Items in our inventory get colorized specially - nc_color ret = c_white; - if (active && !is_food() && !is_food_container()) - ret = c_yellow; - - return ret; + if (active && !is_food() && !is_food_container()) { + return c_yellow; + } + return c_white; } std::string item::tname(game *g) @@ -1092,6 +1099,7 @@ bool item::has_quality(std::string quality_id) const { bool item::has_quality(std::string quality_id, int quality_value) const { // TODO: actually implement this >:( + (void)quality_id; (void)quality_value; //unused grrr bool ret = false; if(type->qualities.size() > 0){ @@ -1100,7 +1108,7 @@ bool item::has_quality(std::string quality_id, int quality_value) const { return ret; } -bool item::has_technique(matec_id tech, player *p) +bool item::has_technique(matec_id tech) { return type->techniques.count(tech); } @@ -2092,6 +2100,15 @@ char item::pick_reload_ammo(player &u, bool interactive) am = u.has_ammo(ammo_type()); } + // Check if the player is wielding ammo + if (g->u.is_armed() && g->u.weapon.is_ammo()){ + // if it is compatible then include it. + it_ammo* w_ammo = dynamic_cast(u.weapon.type); + if (w_ammo->type == ammo_type()) + am.push_back(&u.weapon); + } + + char am_invlet = 0; if (am.size() > 1 && interactive) {// More than one option; list 'em and pick @@ -2144,6 +2161,12 @@ bool item::reload(player &u, char ammo_invlet) item *reload_target = NULL; item *ammo_to_use = (ammo_invlet != 0 ? &u.inv.item_by_letter(ammo_invlet) : NULL); + // also check if wielding ammo + if (ammo_to_use->is_null()) { + if (u.is_armed() && u.weapon.is_ammo() && u.weapon.invlet == ammo_invlet) + ammo_to_use = &u.weapon; + } + // Handle ammo in containers, currently only gasoline if(ammo_to_use && ammo_to_use->is_container()) ammo_to_use = &ammo_to_use->contents[0]; @@ -2235,7 +2258,7 @@ bool item::reload(player &u, char ammo_invlet) } else if (reload_target->typeId() == "adv_UPS_off" || reload_target->typeId() == "adv_UPS_on") { int charges_per_plut = 500; - int max_plut = std::floor( static_cast((max_load - reload_target->charges) / charges_per_plut) ); + int max_plut = floor( static_cast((max_load - reload_target->charges) / charges_per_plut) ); int charges_used = std::min(ammo_to_use->charges, max_plut); reload_target->charges += (charges_used * charges_per_plut); ammo_to_use->charges -= charges_used; @@ -2254,6 +2277,9 @@ bool item::reload(player &u, char ammo_invlet) { ammo_to_use->contents.erase(ammo_to_use->contents.begin()); } + else if (u.weapon.invlet == ammo_to_use->invlet) { + u.remove_weapon(); + } else { u.i_remn(ammo_invlet); @@ -2264,10 +2290,11 @@ bool item::reload(player &u, char ammo_invlet) return false; } -void item::use(player &u) +void item::use() { - if (charges > 0) + if (charges > 0) { charges--; + } } bool item::burn(int amount) @@ -2386,3 +2413,51 @@ int item::getlight_emit(bool calculate_dimming) const { } return lumint / 10; } + +// How much more of this liquid can be put in this container +int item::get_remaining_capacity_for_liquid(const item &liquid, LIQUID_FILL_ERROR &error) const +{ + error = L_ERR_NONE; + if (!is_container()) { + error = L_ERR_NOT_CONTAINER; + return 0; + } + + if (contents.empty()) { + if (!has_flag("WATERTIGHT")) { // invalid container types + error = L_ERR_NOT_WATERTIGHT; + return 0; + } else if (!has_flag("SEALS")) { + error = L_ERR_NOT_SEALED; + return 0; + } + } else { // Not empty + if (contents[0].type->id != liquid.type->id) { + error = L_ERR_NO_MIX; + return 0; + } + } + + it_container *container = dynamic_cast(type); + int total_capacity = container->contains; + + if (liquid.is_food()) { + it_comest *tmp_comest = dynamic_cast(liquid.type); + total_capacity = container->contains * tmp_comest->charges; + } else if (liquid.is_ammo()) { + it_ammo *tmp_ammo = dynamic_cast(liquid.type); + total_capacity = container->contains * tmp_ammo->count; + } + + int remaining_capacity = total_capacity; + if (!contents.empty()) { + remaining_capacity -= contents[0].charges; + } + + if (remaining_capacity <= 0) { + error = L_ERR_FULL; + return 0; + } + + return remaining_capacity; +} diff --git a/item.h b/src/item.h similarity index 91% rename from item.h rename to src/item.h index 6361a018fc6a0..f4512d97676b1 100644 --- a/item.h +++ b/src/item.h @@ -5,8 +5,8 @@ #include #include "itype.h" #include "mtype.h" -//#include "npc.h" +class game; class player; class npc; struct itype; @@ -56,7 +56,10 @@ struct iteminfo{ } }; -class item +enum LIQUID_FILL_ERROR {L_ERR_NONE, L_ERR_NO_MIX, L_ERR_NOT_CONTAINER, L_ERR_NOT_WATERTIGHT, + L_ERR_NOT_SEALED, L_ERR_FULL}; + +class item : public JsonSerializer, public JsonDeserializer { public: item(); @@ -64,7 +67,7 @@ class item item(itype* it, unsigned int turn, char let); void make_corpse(itype* it, mtype* mt, unsigned int turn); // Corpse item(std::string itemdata, game *g); - item(picojson::value & parsed, game * g); + item(JsonObject &jo); virtual ~item(); void init(); void make(itype* it); @@ -74,9 +77,9 @@ class item item in_its_container(std::map *itypes); nc_color color(player *u) const; - nc_color color_in_inventory(player *u); + nc_color color_in_inventory(); std::string tname(game *g = NULL); // g needed for rotten-test - void use(player &u); + void use(); bool burn(int amount = 1); // Returns true if destroyed // Firearm specifics @@ -93,8 +96,19 @@ class item char pick_reload_ammo(player &u, bool interactive); bool reload(player &u, char invlet); void next_mode(); - bool json_load(picojson::value & parsed, game * g); - virtual picojson::value json_save(bool save_contents=false) const; + + using JsonSerializer::serialize; + // give the option not to save recursively, but recurse by default + void serialize(JsonOut &jsout) const { serialize(jsout, true); } + virtual void serialize(JsonOut &jsout, bool save_contents) const; + using JsonDeserializer::deserialize; + // easy deserialization from JsonObject + virtual void deserialize(JsonObject &jo); + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + deserialize(jo); + } + std::string save_info() const; // Formatted for save files // void load_legacy(game * g, std::stringstream & dump); @@ -122,7 +136,7 @@ class item bool has_flag(std::string f) const; bool has_quality(std::string quality_id) const; bool has_quality(std::string quality_id, int quality_value) const; - bool has_technique(std::string t, player *p = NULL); + bool has_technique(std::string t); int has_gunmod(itype_id type); item* active_gunmod(); item const* inspect_active_gunmod() const; @@ -185,6 +199,8 @@ class item bool is_var_veh_part() const; bool is_artifact() const; + int get_remaining_capacity_for_liquid(const item &liquid, LIQUID_FILL_ERROR &error) const; + bool operator<(const item& other) const; itype_id typeId() const; diff --git a/item_factory.cpp b/src/item_factory.cpp similarity index 97% rename from item_factory.cpp rename to src/item_factory.cpp index b5347bd9bc4e0..6418f2ad74c2e 100644 --- a/item_factory.cpp +++ b/src/item_factory.cpp @@ -40,6 +40,7 @@ void Item_factory::init(){ iuse_function_list["FIRSTAID"] = &iuse::firstaid; iuse_function_list["DISINFECTANT"] = &iuse::disinfectant; iuse_function_list["CAFF"] = &iuse::caff; + iuse_function_list["ATOMIC_CAFF"] = &iuse::atomic_caff; iuse_function_list["ALCOHOL"] = &iuse::alcohol; iuse_function_list["ALCOHOL_WEAK"] = &iuse::alcohol_weak; iuse_function_list["PKILL"] = &iuse::pkill; @@ -97,6 +98,10 @@ void Item_factory::init(){ iuse_function_list["NOISE_EMITTER_OFF"] = &iuse::noise_emitter_off; iuse_function_list["NOISE_EMITTER_ON"] = &iuse::noise_emitter_on; iuse_function_list["ROADMAP"] = &iuse::roadmap; + iuse_function_list["SURVIVORMAP"] = &iuse::survivormap; + iuse_function_list["MILITARYMAP"] = &iuse::militarymap; + iuse_function_list["RESTAURANTMAP"] = &iuse::restaurantmap; + iuse_function_list["TOURISTMAP"] = &iuse::touristmap; iuse_function_list["PICKLOCK"] = &iuse::picklock; iuse_function_list["CROWBAR"] = &iuse::crowbar; iuse_function_list["MAKEMOUND"] = &iuse::makemound; @@ -202,6 +207,7 @@ void Item_factory::init(){ iuse_function_list["ADRENALINE_INJECTOR"] = &iuse::adrenaline_injector; iuse_function_list["AIRHORN"] = &iuse::airhorn; iuse_function_list["HOTPLATE"] = &iuse::hotplate; + iuse_function_list["DOLLCHAT"] = &iuse::talking_doll; // MACGUFFINS iuse_function_list["MCG_NOTE"] = &iuse::mcg_note; // ARTIFACTS @@ -225,13 +231,13 @@ void Item_factory::init(){ } //Will eventually be deprecated - Loads existing item format into the item factory, and vice versa -void Item_factory::init(game* main_game) throw(std::string){ +void Item_factory::init_old() { // Make a copy of our items loaded from JSON std::map new_templates = m_templates; //Copy the hardcoded template pointers to the factory list - m_templates.insert(main_game->itypes.begin(), main_game->itypes.end()); + m_templates.insert(itypes.begin(), itypes.end()); //Copy the JSON-derived items to the legacy list - main_game->itypes.insert(new_templates.begin(), new_templates.end()); + itypes.insert(new_templates.begin(), new_templates.end()); //And add them to the various item lists, as needed. for(std::map::iterator iter = new_templates.begin(); iter != new_templates.end(); ++iter) { standard_itype_ids.push_back(iter->first); @@ -633,8 +639,8 @@ void Item_factory::load_item_group(JsonObject &jsobj) } } -Use_function Item_factory::use_from_string(std::string function_name){ - std::map::iterator found_function = iuse_function_list.find(function_name); +use_function Item_factory::use_from_string(std::string function_name){ + std::map::iterator found_function = iuse_function_list.find(function_name); //Before returning, make sure sure the function actually exists if(found_function != iuse_function_list.end()){ diff --git a/item_factory.h b/src/item_factory.h similarity index 92% rename from item_factory.h rename to src/item_factory.h index 112fbb34d7ef2..4b897ebcf7985 100644 --- a/item_factory.h +++ b/src/item_factory.h @@ -5,7 +5,6 @@ #include "itype.h" #include "item.h" #include "color.h" -#include "picojson.h" #include "json.h" #include "item_group.h" #include "iuse.h" @@ -16,7 +15,6 @@ typedef std::string Item_tag; typedef std::vector Item_list; -typedef int (iuse::*Use_function)(game*,player*,item*,bool); //For the iuse arguments class game; @@ -28,7 +26,8 @@ class Item_factory //Setup Item_factory(); void init(); - void init(game* main_game) throw (std::string); + void init_old(); + void register_iuse_lua(const char* name, int lua_function); void load_item_group(JsonObject &jsobj); @@ -64,7 +63,7 @@ class Item_factory std::map m_template_groups; //json data handlers - Use_function use_from_string(std::string name); + use_function use_from_string(std::string name); phase_id phase_from_tag(Item_tag name); void load_basic_info(JsonObject &jo, itype *new_item); @@ -83,7 +82,7 @@ class Item_factory unsigned& cur_bitmask, std::string new_flag); //iuse stuff - std::map iuse_function_list; + std::map iuse_function_list; //techniques stuff std::map techniques_list; //bodyparts diff --git a/item_group.cpp b/src/item_group.cpp similarity index 100% rename from item_group.cpp rename to src/item_group.cpp diff --git a/item_group.h b/src/item_group.h similarity index 100% rename from item_group.h rename to src/item_group.h diff --git a/itype.h b/src/itype.h similarity index 70% rename from itype.h rename to src/itype.h index d5691e583617c..002e92cd10a9d 100644 --- a/itype.h +++ b/src/itype.h @@ -8,11 +8,11 @@ #include "bodypart.h" #include "skill.h" #include "bionics.h" -#include "artifact.h" -#include "picojson.h" #include "rng.h" #include "material.h" #include "mtype.h" +#include "json.h" + #include #include #include @@ -43,6 +43,9 @@ extern std::vector artifact_itype_ids; extern std::vector standard_itype_ids; extern std::vector pseudo_itype_ids; +struct itype; +extern std::map itypes; + typedef std::string ammotype; enum software_type { @@ -149,7 +152,6 @@ struct itype virtual bool is_wheel() { return false; } virtual bool count_by_charges() { return false; } virtual int charges_to_use() { return 1; } - virtual picojson::value save_data() { return picojson::value(); } std::string dmg_adj(int dam) { return material_type::find_material(m1)->dmg_adj(dam); } @@ -233,7 +235,7 @@ struct it_comest : public itype signed char pquench, unsigned char pnutr, signed char pspoils, signed char pstim, signed char phealthy, unsigned char paddict, unsigned char pcharges, signed char pfun, itype_id pcontainer, - itype_id ptool, int (iuse::*puse)(game *, player *, item *, bool), + itype_id ptool, int (iuse::*puse)(player *, item *, bool), add_type padd, std::string pcomesttype) : itype(pid, pprice, pname, pdes, psym, pcolor, pm1, "null", pphase, pvolume, pweight, pmelee_dam, pmelee_cut, pm_to_hit), comesttype(pcomesttype), container(pcontainer), tool(ptool) @@ -276,7 +278,6 @@ struct it_var_veh_part: public itype char psym, nc_color pcolor, std::string pm1, std::string pm2, unsigned short pvolume, unsigned int pweight, signed char pmelee_dam, signed char pmelee_cut, signed char pm_to_hit, - unsigned effects, unsigned int big_min, unsigned int big_max, @@ -482,7 +483,6 @@ struct it_armor : public itype virtual bool is_armor() { return true; } virtual bool is_power_armor() { return power_armor; } virtual bool is_artifact() { return false; } - virtual picojson::value save_data() { return picojson::value(); } std::string bash_dmg_verb() { return m2 == "null" || !one_in(3) ? material_type::find_material(m1)->bash_dmg_verb() : material_type::find_material(m2)->bash_dmg_verb(); @@ -579,7 +579,6 @@ struct it_tool : public itype virtual bool is_tool() { return true; } virtual bool is_artifact() { return false; } - virtual picojson::value save_data() { return picojson::value(); } int charges_to_use() { return charges_per_use; } it_tool() :itype() @@ -602,7 +601,7 @@ struct it_tool : public itype unsigned int pmax_charges, unsigned int pdef_charges, unsigned char pcharges_per_use, unsigned char pturns_per_charge, ammotype pammo, itype_id prevert_to, - int (iuse::*puse)(game *, player *, item *, bool)) + int (iuse::*puse)(player *, item *, bool)) :itype(pid, pprice, pname, pdes, psym, pcolor, pm1, pm2, pphase, pvolume, pweight, pmelee_dam, pmelee_cut, pm_to_hit) { max_charges = pmax_charges; @@ -651,7 +650,7 @@ struct it_macguffin : public itype signed char pm_to_hit, bool preadable, - int (iuse::*puse)(game *, player *, item *, bool)) + int (iuse::*puse)(player *, item *, bool)) :itype(pid, pprice, pname, pdes, psym, pcolor, pm1, pm2, SOLID, pvolume, pweight, pmelee_dam, pmelee_cut, pm_to_hit) { readable = preadable; @@ -702,219 +701,4 @@ struct it_stationary : public itype } }; -struct it_artifact_tool : public it_tool -{ - art_charge charge_type; - std::vector effects_wielded; - std::vector effects_activated; - std::vector effects_carried; - - virtual bool is_artifact() { return true; } - virtual picojson::value save_data() - { - std::map data; - - data[std::string("type")] = picojson::value("artifact_tool"); - - // generic data - data[std::string("id")] = picojson::value(id); - data[std::string("price")] = picojson::value(price); - data[std::string("name")] = picojson::value(name); - data[std::string("description")] = picojson::value(description); - data[std::string("sym")] = picojson::value(sym); - data[std::string("color")] = picojson::value(color_to_int(color)); - data[std::string("m1")] = picojson::value(m1); - data[std::string("m2")] = picojson::value(m2); - data[std::string("volume")] = picojson::value(volume); - data[std::string("weight")] = picojson::value(weight); - data[std::string("id")] = picojson::value(id); - data[std::string("melee_dam")] = picojson::value(melee_dam); - data[std::string("melee_cut")] = picojson::value(melee_cut); - data[std::string("m_to_hit")] = picojson::value(m_to_hit); - - std::vector tags_json; - for(std::set::iterator it = item_tags.begin(); - it != item_tags.end(); ++it) - { - tags_json.push_back(picojson::value(*it)); - } - data[std::string("item_flags")] = picojson::value(tags_json); - - std::vector techniques_json; - for(std::set::iterator it = techniques.begin(); - it != techniques.end(); ++it) - { - techniques_json.push_back(picojson::value(*it)); - } - data[std::string("techniques")] = - picojson::value(techniques_json); - - // tool data - data[std::string("ammo")] = picojson::value(ammo); - data[std::string("max_charges")] = picojson::value(max_charges); - data[std::string("def_charges")] = picojson::value(def_charges); - data[std::string("charges_per_use")] = picojson::value(charges_per_use); - data[std::string("turns_per_charge")] = picojson::value(turns_per_charge); - data[std::string("revert_to")] = picojson::value(revert_to); - - // artifact data - data[std::string("charge_type")] = picojson::value(charge_type); - - std::vector effects_wielded_json; - for(std::vector::iterator it = effects_wielded.begin(); - it != effects_wielded.end(); ++it) - { - effects_wielded_json.push_back(picojson::value(*it)); - } - data[std::string("effects_wielded")] = - picojson::value(effects_wielded_json); - - std::vector effects_activated_json; - for(std::vector::iterator it = - effects_activated.begin(); - it != effects_activated.end(); ++it) - { - effects_activated_json.push_back(picojson::value(*it)); - } - data[std::string("effects_activated")] = - picojson::value(effects_activated_json); - - std::vector effects_carried_json; - for(std::vector::iterator it = effects_carried.begin(); - it != effects_carried.end(); ++it) - { - effects_carried_json.push_back(picojson::value(*it)); - } - data[std::string("effects_carried")] = - picojson::value(effects_carried_json); - - return picojson::value(data); - } - - it_artifact_tool() :it_tool(){ - ammo = "NULL"; - price = 0; - def_charges = 0; - charges_per_use = 1; - charge_type = ARTC_NULL; - turns_per_charge = 0; - revert_to = "null"; - use = &iuse::artifact; - }; - - it_artifact_tool(std::string pid, unsigned int pprice, std::string pname, - std::string pdes, char psym, nc_color pcolor, std::string pm1, - std::string pm2, unsigned short pvolume, unsigned int pweight, - signed char pmelee_dam, signed char pmelee_cut, - signed char pm_to_hit, std::set pitem_tags, - - unsigned int pmax_charges, unsigned int pdef_charges, - unsigned char pcharges_per_use, - unsigned char pturns_per_charge, - ammotype pammo, itype_id prevert_to) - -:it_tool(pid, pprice, pname, pdes, psym, pcolor, pm1, pm2, SOLID, - pvolume, pweight, pmelee_dam, pmelee_cut, pm_to_hit, - pmax_charges, pdef_charges, pcharges_per_use, pturns_per_charge, - pammo, prevert_to, &iuse::artifact) - { - charge_type = ARTC_NULL; - item_tags = pitem_tags; - artifact_itype_ids.push_back(pid); - }; -}; - -struct it_artifact_armor : public it_armor -{ - std::vector effects_worn; - - virtual bool is_artifact() { return true; } - - virtual picojson::value save_data() - { - std::map data; - - data[std::string("type")] = picojson::value("artifact_armor"); - - // generic data - data[std::string("id")] = picojson::value(id); - data[std::string("price")] = picojson::value(price); - data[std::string("name")] = picojson::value(name); - data[std::string("description")] = picojson::value(description); - data[std::string("sym")] = picojson::value(sym); - data[std::string("color")] = picojson::value(color_to_int(color)); - data[std::string("m1")] = picojson::value(m1); - data[std::string("m2")] = picojson::value(m2); - data[std::string("volume")] = picojson::value(volume); - data[std::string("weight")] = picojson::value(weight); - data[std::string("id")] = picojson::value(id); - data[std::string("melee_dam")] = picojson::value(melee_dam); - data[std::string("melee_cut")] = picojson::value(melee_cut); - data[std::string("m_to_hit")] = picojson::value(m_to_hit); - - std::vector tags_json; - for(std::set::iterator it = item_tags.begin(); - it != item_tags.end(); ++it) - { - tags_json.push_back(picojson::value(*it)); - } - data[std::string("item_flags")] = picojson::value(tags_json); - - std::vector techniques_json; - for(std::set::iterator it = techniques.begin(); - it != techniques.end(); ++it) - { - techniques_json.push_back(picojson::value(*it)); - } - data[std::string("techniques")] = - picojson::value(techniques_json); - - // armor data - data[std::string("covers")] = picojson::value(covers); - data[std::string("encumber")] = picojson::value(encumber); - data[std::string("coverage")] = picojson::value(coverage); - data[std::string("material_thickness")] = picojson::value(thickness); - data[std::string("env_resist")] = picojson::value(env_resist); - data[std::string("warmth")] = picojson::value(warmth); - data[std::string("storage")] = picojson::value(storage); - data[std::string("power_armor")] = picojson::value(power_armor); - - // artifact data - std::vector effects_worn_json; - for(std::vector::iterator it = effects_worn.begin(); - it != effects_worn.end(); ++it) - { - effects_worn_json.push_back(picojson::value(*it)); - } - data[std::string("effects_worn")] = - picojson::value(effects_worn_json); - - return picojson::value(data); - } - - it_artifact_armor() :it_armor() - { - price = 0; - }; - - it_artifact_armor(std::string pid, unsigned int pprice, std::string pname, - std::string pdes, char psym, nc_color pcolor, std::string pm1, - std::string pm2, unsigned short pvolume, unsigned int pweight, - signed char pmelee_dam, signed char pmelee_cut, - signed char pm_to_hit, std::set pitem_tags, - - unsigned char pcovers, signed char pencumber, - unsigned char pcoverage, unsigned char pthickness, - unsigned char penv_resist, signed char pwarmth, - unsigned char pstorage) -:it_armor(pid, pprice, pname, pdes, psym, pcolor, pm1, pm2, - pvolume, pweight, pmelee_dam, pmelee_cut, pm_to_hit, - pcovers, pencumber, pcoverage, pthickness, penv_resist, pwarmth, - pstorage) - { - item_tags = pitem_tags; - artifact_itype_ids.push_back(pid); - }; -}; - #endif diff --git a/itypedef.cpp b/src/itypedef.cpp similarity index 83% rename from itypedef.cpp rename to src/itypedef.cpp index 8169d1225e394..186593e78b449 100644 --- a/itypedef.cpp +++ b/src/itypedef.cpp @@ -26,6 +26,8 @@ std::vector artifact_itype_ids; std::vector standard_itype_ids; std::vector pseudo_itype_ids; +std::map itypes; + // GENERAL GUIDELINES // When adding a new item, you MUST REMEMBER to insert it in the itype_id enum // at the top of itype.h! @@ -59,72 +61,72 @@ void game::init_itypes () "A fake item. If you are reading this it's a bug! (itypdef:apparatus)", '$', c_red, "null", "null", PNULL, 0, 0, 0, 0, 0); -#define VAR_VEH_PART(id, name,price,sym,color,mat1,mat2,volume,wgt,dam,cut,to_hit,\ - flags, bigmin, bigmax, bigaspect, des)\ -itypes[id]=new it_var_veh_part(id,price,name,des,sym,\ -color,mat1,mat2,volume,wgt,dam,cut,to_hit,flags, bigmin, bigmax, bigaspect) +#define VAR_VEH_PART(id, name, price, sym, color, mat1, mat2, volume, wgt,\ + dam, cut, to_hit, bigmin, bigmax, bigaspect, des)\ +itypes[id]=new it_var_veh_part(id, price, name, des, sym, color, mat1, mat2,\ + volume, wgt, dam, cut, to_hit, bigmin, bigmax, bigaspect) //"wheel", "wheel_wide", "wheel_bicycle", "wheel_motorbike", "wheel_small", // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("wheel", _("wheel"), 100, ']', c_dkgray, "steel", "plastic", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT - 40, 8845, 12, 0, -1, 0, 13, 20, BIGNESS_WHEEL_DIAMETER, _("\ -A car wheel")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 40, 8845, 12, 0, -1, 13, 20, BIGNESS_WHEEL_DIAMETER, + _("A car wheel")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("wheel_wide", _("wide wheel"), 340, ']', c_dkgray, "steel", "plastic", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 70,22600, 17, 0, -1, 0, 17, 36, BIGNESS_WHEEL_DIAMETER, _("\ -A wide wheel. \\o/ This wide.")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 70,22600, 17, 0, -1, 17, 36, BIGNESS_WHEEL_DIAMETER, + _("A wide wheel. \\o/ This wide.")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("wheel_bicycle", _("bicycle wheel"), 40, ']', c_dkgray, "steel", "plastic", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 28,1500, 8, 0, -1, 0, 9, 18, BIGNESS_WHEEL_DIAMETER, _("\ -A bicycle wheel")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 28,1500, 8, 0, -1, 9, 18, BIGNESS_WHEEL_DIAMETER, + _("A bicycle wheel")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("wheel_motorbike", _("motorbike wheel"), 140, ']', c_dkgray, "steel", "plastic", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 33,5443, 10, 0, -1, 0, 9, 14, BIGNESS_WHEEL_DIAMETER, _("\ -A motorbike wheel")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 33,5443, 10, 0, -1, 9, 14, BIGNESS_WHEEL_DIAMETER, + _("A motorbike wheel")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("wheel_small", _("small wheel"),140, ']', c_dkgray, "steel", "plastic", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 9, 2722, 10, 0, -1, 0, 6, 14, BIGNESS_WHEEL_DIAMETER, _("\ -A pretty small wheel. Probably from one of those segway things.\ +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 9, 2722, 10, 0, -1, 6, 14, BIGNESS_WHEEL_DIAMETER, + _("A pretty small wheel. Probably from one of those segway things.\ It is not very menacing.")); VAR_VEH_PART("wheel_caster", _("casters"),140, ']', c_dkgray, "steel", "plastic", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 5, 1500, 6, 0, -1, 0, 4, 6, BIGNESS_WHEEL_DIAMETER, _("\ -A set of casters, like on a shopping cart.")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 5, 1500, 6, 0, -1, 4, 6, BIGNESS_WHEEL_DIAMETER, + _("A set of casters, like on a shopping cart.")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("1cyl_combustion", _("1-cylinder engine"), 100, ':', c_ltcyan, "iron", "null", -// VOL WGT DAM CUT HIT FLAGS 0BIGNESS_MIN BIGNESS_MAX ASPECT - 6, 20000, 4, 0, -1, 0, 28, 75, BIGNESS_ENGINE_DISPLACEMENT, _("\ +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 6, 20000, 4, 0, -1, 28, 75, BIGNESS_ENGINE_DISPLACEMENT, _("\ A single-cylinder 4-stroke combustion engine.")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("v2_combustion", _("V-twin engine"), 100, ':', c_ltcyan, "iron", "null", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 6, 45000, 4, 0, -1, 0, 65, 260, BIGNESS_ENGINE_DISPLACEMENT, _("\ +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 6, 45000, 4, 0, -1, 65, 260, BIGNESS_ENGINE_DISPLACEMENT, _("\ A 2-cylinder 4-stroke combustion engine.")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("i4_combustion", _("Inline-4 engine"), 150, ':', c_ltcyan, "iron", "null", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 6, 70000, 8, 0, -2, 0, 220, 350, BIGNESS_ENGINE_DISPLACEMENT, _("\ +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 6, 70000, 8, 0, -2, 220, 350, BIGNESS_ENGINE_DISPLACEMENT, _("\ A small, yet powerful 4-cylinder combustion engine.")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("v6_combustion", _("V6 engine"), 180, ':', c_ltcyan, "iron", "null", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 14,100000, 12, 0, -3, 0, 250, 520, BIGNESS_ENGINE_DISPLACEMENT, _("\ -A powerful 6-cylinder combustion engine.")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 14,100000, 12, 0, -3, 250, 520, BIGNESS_ENGINE_DISPLACEMENT, + _("A powerful 6-cylinder combustion engine.")); // NAME RAR PRC SYM COLOR MAT1 MAT2 VAR_VEH_PART("v8_combustion", _("V8 engine"), 250, ':', c_ltcyan, "iron", "null", -// VOL WGT DAM CUT HIT FLAGS BIGNESS_MIN BIGNESS_MAX ASPECT - 25,144000, 15, 0, -5, 0, 380, 700, BIGNESS_ENGINE_DISPLACEMENT, _("\ -A large and very powerful 8-cylinder combustion engine.")); +// VOL WGT DAM CUT HIT BIGNESS_MIN BIGNESS_MAX BIGNESS_ASPECT + 25,144000, 15, 0, -5, 380, 700, BIGNESS_ENGINE_DISPLACEMENT, + _("A large and very powerful 8-cylinder combustion engine.")); // GUNS // ammo_type matches one of the ammo_types above. @@ -211,6 +213,8 @@ BIO_SINGLE("bio_sunglasses", 4500, c_ltgreen, 4); BIO_SINGLE("bio_climate", 3500, c_ltgreen, 3); BIO_SINGLE("bio_heatsink", 3500, c_ltgreen, 3); BIO_SINGLE("bio_blood_filter", 3500, c_ltgreen, 3); +BIO_SINGLE("bio_geiger", 3500, c_ltgreen, 3); +BIO_SINGLE("bio_radscrubber", 4500, c_ltgreen, 4); // nutritional BIO_SINGLE("bio_recycler", 8500, c_green, 6); BIO_SINGLE("bio_digestion", 5500, c_green, 6); @@ -221,6 +225,7 @@ BIO_SINGLE("bio_water_extractor", 5500, c_green, 5); BIO_SINGLE("bio_shock", 5500, c_red, 5); BIO_SINGLE("bio_heat_absorb", 5500, c_red, 5); BIO_SINGLE("bio_claws", 5500, c_red, 5); +BIO_SINGLE("bio_razors", 4500, c_red, 4); BIO_SINGLE("bio_shockwave", 5500, c_red, 5); // armor: BIO_SINGLE("bio_carbon", 7500, c_cyan, 9); @@ -228,6 +233,7 @@ BIO_SINGLE("bio_armor_head", 3500, c_cyan, 5); BIO_SINGLE("bio_armor_torso", 3500, c_cyan, 4); BIO_SINGLE("bio_armor_arms", 3500, c_cyan, 3); BIO_SINGLE("bio_armor_legs", 3500, c_cyan, 3); +BIO_SINGLE("bio_armor_eyes", 5500, c_cyan, 5); // espionage BIO_SINGLE("bio_face_mask", 8500, c_magenta, 5); BIO_SINGLE("bio_scent_mask", 8500, c_magenta, 5); @@ -365,11 +371,14 @@ std::string ammo_name(ammotype t) if( t == "plasma" ) return _("hydrogen"); if( t == "water" ) return _("clean water"); if( t == "8x40mm" ) return _("8x40mm caseless"); + if( t == "20x66mm" ) return _("20x66mm caseless shotgun"); if( t == "5x50" ) return _("5x50mm flechette"); if( t == "signal_flare")return _("signal flare"); + if( t == "mininuke_mod")return _("modified mininuke"); if( t == "charcoal" ) return _("charcoal"); if( t == "metal_rail" ) return _("ferrous rail projectile"); if( t == "UPS" ) return _("UPS"); + if( t == "thrown" ) return _("throwing weapon"); if( t == "components" ) return _("components"); return "XXX"; } @@ -411,11 +420,14 @@ itype_id default_ammo(ammotype guntype) if( guntype == "water" ) return "water_clean"; if( guntype == "charcoal" ) return "charcoal"; if( guntype == "8x40mm" ) return "8mm_caseless"; + if( guntype == "20x66mm" ) return "20x66_shot"; if( guntype == "5x50" ) return "5x50dart"; if( guntype == "signal_flare") return "signal_flare"; + if( guntype == "mininuke_mod") return "mininuke_mod"; if( guntype == "metal_rail" ) return "rebar_rail"; - if( guntype == "UPS" ) return _("UPS"); - if( guntype == "components" ) return _("components"); + if( guntype == "UPS" ) return "UPS"; + if( guntype == "components" ) return "components"; + if( guntype == "thrown" ) return "thrown"; if( guntype == "50" ) return "50bmg"; return "null"; } diff --git a/iuse.cpp b/src/iuse.cpp similarity index 86% rename from iuse.cpp rename to src/iuse.cpp index b7f3e07da26fc..5672b6fc277ee 100644 --- a/iuse.cpp +++ b/src/iuse.cpp @@ -12,6 +12,7 @@ #include "uistate.h" #include "action.h" #include "monstergenerator.h" +#include "speech.h" #include #include @@ -25,8 +26,9 @@ #include "iuse_software.h" // Return false if we weren't able to use the item. -static bool use_fire(game *g, player *p, item *it) +static bool use_fire(player *p, item *it) { + (void)it; //unused if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p, _("You need a source of flame!")); @@ -35,9 +37,10 @@ static bool use_fire(game *g, player *p, item *it) return true; } -static bool item_inscription( game *g, player *p, item *cut, std::string verb, std::string gerund, +static bool item_inscription( player *p, item *cut, std::string verb, std::string gerund, bool carveable) { + (void)p; //unused if (!cut->made_of(SOLID)) { std::string lower_verb = verb; std::transform(lower_verb.begin(), lower_verb.end(), lower_verb.begin(), ::tolower); @@ -87,7 +90,7 @@ static bool item_inscription( game *g, player *p, item *cut, std::string verb, s // Returns false if the inscription failed or if the player canceled the action. Otherwise, returns true. -static bool inscribe_item( game *g, player *p, std::string verb, std::string gerund, bool carveable ) +static bool inscribe_item( player *p, std::string verb, std::string gerund, bool carveable ) { //Note: this part still strongly relies on English grammar. //Although it can be easily worked around in language like Chinese, @@ -98,10 +101,10 @@ static bool inscribe_item( game *g, player *p, std::string verb, std::string ger g->add_msg(_("You do not have that item!")); return false; } - return item_inscription( g, p, cut, verb, gerund, carveable ); + return item_inscription( p, cut, verb, gerund, carveable ); } -int iuse::none(game *g, player *p, item *it, bool t) +int iuse::none(player *p, item *it, bool t) { g->add_msg(_("You can't do anything interesting with your %s."), it->tname(g).c_str()); @@ -113,7 +116,7 @@ int iuse::none(game *g, player *p, item *it, bool t) * Regardless, returning 0 indicates the item has not been used up, * though it may have been successfully activated. */ -int iuse::sewage(game *g, player *p, item *it, bool t) +int iuse::sewage(player *p, item *it, bool t) { if(!p->is_npc()) { p->add_memorial_log(_("Ate a sewage sample.")); @@ -125,13 +128,13 @@ int iuse::sewage(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::honeycomb(game *g, player *p, item *it, bool t) +int iuse::honeycomb(player *p, item *it, bool t) { - g->m.spawn_item(p->posx, p->posy, "wax",0, 2); + g->m.spawn_item(p->posx, p->posy, "wax", 2); return it->type->charges_to_use(); } -int iuse::royal_jelly(game *g, player *p, item *it, bool t) +int iuse::royal_jelly(player *p, item *it, bool t) { // TODO: Add other diseases here; royal jelly is a cure-all! p->pkill += 5; @@ -140,6 +143,10 @@ int iuse::royal_jelly(game *g, player *p, item *it, bool t) message = _("You feel cleansed inside!"); p->rem_disease("fungus"); } + if (p->has_disease("dermatik")) { + message = _("You feel cleansed inside!"); + p->rem_disease("dermatik"); + } if (p->has_disease("blind")) { message = _("Your sight returns!"); p->rem_disease("blind"); @@ -376,7 +383,7 @@ static hp_part body_window(player *p, item *it, std::string item_name, int norma } // returns true if we want to use the special action -static hp_part use_healing_item(game *g, player *p, item *it, int normal_power, int head_power, +static hp_part use_healing_item(player *p, item *it, int normal_power, int head_power, int torso_power, std::string item_name, int bleed, int bite, int infect, bool force) { @@ -475,32 +482,32 @@ static hp_part use_healing_item(game *g, player *p, item *it, int normal_power, return healed; } -int iuse::bandage(game *g, player *p, item *it, bool t) +int iuse::bandage(player *p, item *it, bool t) { - if( num_hp_parts != use_healing_item(g, p, it, 3, 1, 4, it->name, 90, 0, 0, false) ) { + if( num_hp_parts != use_healing_item(p, it, 3, 1, 4, it->name, 90, 0, 0, false) ) { return it->type->charges_to_use(); } return 0; } -int iuse::firstaid(game *g, player *p, item *it, bool t) +int iuse::firstaid(player *p, item *it, bool t) { - if( num_hp_parts != use_healing_item(g, p, it, 14, 10, 18, it->name, 95, 99, 95, false) ) { - pkill(g, p, it, t); + if( num_hp_parts != use_healing_item(p, it, 14, 10, 18, it->name, 95, 99, 95, false) ) { + pkill(p, it, t); return it->type->charges_to_use(); } return 0; } -int iuse::disinfectant(game *g, player *p, item *it, bool t) +int iuse::disinfectant(player *p, item *it, bool t) { - if( num_hp_parts != use_healing_item(g, p, it, 6, 5, 9, it->name, 0, 95, 0, false) ) { + if( num_hp_parts != use_healing_item(p, it, 6, 5, 9, it->name, 0, 95, 0, false) ) { return it->type->charges_to_use(); } return 0; } -int iuse::pkill(game *g, player *p, item *it, bool t) +int iuse::pkill(player *p, item *it, bool t) { // Aspirin if (it->has_flag("PKILL_1")) { @@ -528,7 +535,7 @@ int iuse::pkill(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::xanax(game *g, player *p, item *it, bool t) +int iuse::xanax(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You take some %s."), it->tname().c_str()); @@ -540,14 +547,23 @@ int iuse::xanax(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::caff(game *g, player *p, item *it, bool t) +int iuse::caff(player *p, item *it, bool t) { it_comest *food = dynamic_cast (it->type); p->fatigue -= food->stim * 3; return it->type->charges_to_use(); } -int iuse::alcohol(game *g, player *p, item *it, bool t) +int iuse::atomic_caff(player *p, item *it, bool t) +{ + g->add_msg_if_player(p,_("Wow! This %s has a kick."), it->tname().c_str()); + it_comest *food = dynamic_cast (it->type); + p->fatigue -= food->stim * 12; + p->radiation += 8; + return it->type->charges_to_use(); +} + +int iuse::alcohol(player *p, item *it, bool t) { int duration = 680 - (10 * p->str_max); // Weaker characters are cheap drunks if (p->has_trait("LIGHTWEIGHT")) { @@ -558,7 +574,7 @@ int iuse::alcohol(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::alcohol_weak(game *g, player *p, item *it, bool t) +int iuse::alcohol_weak(player *p, item *it, bool t) { int duration = 340 - (6 * p->str_max); if (p->has_trait("LIGHTWEIGHT")) { @@ -569,8 +585,8 @@ int iuse::alcohol_weak(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::cig(game *g, player *p, item *it, bool t) { - if (!use_fire(g, p, it)) return 0; +int iuse::cig(player *p, item *it, bool t) { + if (!use_fire(p, it)) return 0; if (it->type->id == "cig") { g->add_msg_if_player(p,_("You light a cigarette and smoke it.")); } else { // cigar @@ -585,7 +601,7 @@ int iuse::cig(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::antibiotic(game *g, player *p, item *it, bool t) { +int iuse::antibiotic(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You take some antibiotics.")); if (p->has_disease("infected")) { // cheap model of antibiotic resistance, but it's something. @@ -598,7 +614,7 @@ int iuse::antibiotic(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::fungicide(game *g, player *p, item *it, bool t) { +int iuse::fungicide(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You take some fungicide.")); if (p->has_disease("fungus")) { p->rem_disease("fungus"); @@ -629,7 +645,7 @@ int iuse::fungicide(game *g, player *p, item *it, bool t) { g->add_msg(_("The %s is covered in tiny spores!"), g->zombie(zid).name().c_str()); } - if (!g->zombie(zid).make_fungus(g)) { + if (!g->zombie(zid).make_fungus()) { g->kill_mon(zid); } } else { @@ -648,7 +664,7 @@ int iuse::fungicide(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::weed(game *g, player *p, item *it, bool t) { +int iuse::weed(player *p, item *it, bool t) { // Requires flame and something to smoke with. bool alreadyHigh = (p->has_disease("weed_high")); bool hasPipe = (p->has_amount("apparatus", 1)); @@ -680,7 +696,7 @@ int iuse::weed(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::coke(game *g, player *p, item *it, bool t) { +int iuse::coke(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You snort a bump of coke.")); int duration = 21 - p->str_cur + rng(0,10); if (p->has_trait("LIGHTWEIGHT")) { @@ -691,7 +707,7 @@ int iuse::coke(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::crack(game *g, player *p, item *it, bool t) { +int iuse::crack(player *p, item *it, bool t) { // Crack requires a fire source and a pipe. if (p->has_amount("apparatus", 1) && p->use_charges_if_avail("fire", 1)) { int duration = 15; @@ -706,7 +722,7 @@ int iuse::crack(game *g, player *p, item *it, bool t) { return 0; } -int iuse::grack(game *g, player *p, item *it, bool t) { +int iuse::grack(player *p, item *it, bool t) { // Grack requires a fire source AND a pipe. if (p->has_amount("apparatus", 1) && p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You smoke some Grack Cocaine. Time seems to stop.")); @@ -721,7 +737,7 @@ int iuse::grack(game *g, player *p, item *it, bool t) { return 0; } -int iuse::meth(game *g, player *p, item *it, bool t) { +int iuse::meth(player *p, item *it, bool t) { int duration = 10 * (40 - p->str_cur); if (p->has_amount("apparatus", 1) && p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You smoke your meth. The world seems to sharpen.")); @@ -740,7 +756,7 @@ int iuse::meth(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::vitamins(game *g, player *p, item *it, bool t) { +int iuse::vitamins(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You take some vitamins.")); if (p->health >= 10) { return it->type->charges_to_use(); @@ -752,7 +768,7 @@ int iuse::vitamins(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::vaccine(game *g, player *p, item *it, bool t) { +int iuse::vaccine(player *p, item *it, bool t) { g->add_msg_if_player(p, _("You inject the vaccine.")); g->add_msg_if_player(p, _("You feel tough.")); if (p->health >= 100) { @@ -766,20 +782,20 @@ int iuse::vaccine(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::poison(game *g, player *p, item *it, bool t) { +int iuse::poison(player *p, item *it, bool t) { p->add_disease("poison", 600); p->add_disease("foodpoison", 1800); return it->type->charges_to_use(); } -int iuse::hallu(game *g, player *p, item *it, bool t) { +int iuse::hallu(player *p, item *it, bool t) { if (!p->has_disease("hallu")) { p->add_disease("hallu", 3600); } return it->type->charges_to_use(); } -int iuse::thorazine(game *g, player *p, item *it, bool t) { +int iuse::thorazine(player *p, item *it, bool t) { p->fatigue += 5; p->rem_disease("hallu"); p->rem_disease("visuals"); @@ -796,7 +812,7 @@ int iuse::thorazine(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::prozac(game *g, player *p, item *it, bool t) { +int iuse::prozac(player *p, item *it, bool t) { if (!p->has_disease("took_prozac") && p->morale_level() < 0) { p->add_disease("took_prozac", 7200); } else { @@ -808,25 +824,25 @@ int iuse::prozac(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::sleep(game *g, player *p, item *it, bool t) { +int iuse::sleep(player *p, item *it, bool t) { p->fatigue += 40; g->add_msg_if_player(p,_("You feel very sleepy...")); return it->type->charges_to_use(); } -int iuse::iodine(game *g, player *p, item *it, bool t) { +int iuse::iodine(player *p, item *it, bool t) { p->add_disease("iodine", 1200); g->add_msg_if_player(p,_("You take an iodine tablet.")); return it->type->charges_to_use(); } -int iuse::flumed(game *g, player *p, item *it, bool t) { +int iuse::flumed(player *p, item *it, bool t) { p->add_disease("took_flumed", 6000); g->add_msg_if_player(p,_("You take some %s"), it->tname().c_str()); return it->type->charges_to_use(); } -int iuse::flusleep(game *g, player *p, item *it, bool t) { +int iuse::flusleep(player *p, item *it, bool t) { p->add_disease("took_flumed", 7200); p->fatigue += 30; g->add_msg_if_player(p,_("You take some %s"), it->tname().c_str()); @@ -834,7 +850,7 @@ int iuse::flusleep(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::inhaler(game *g, player *p, item *it, bool t) { +int iuse::inhaler(player *p, item *it, bool t) { p->rem_disease("asthma"); g->add_msg_if_player(p,_("You take a puff from your inhaler.")); if (one_in(50)) { // adverse reaction @@ -844,20 +860,20 @@ int iuse::inhaler(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::blech(game *g, player *p, item *it, bool t) { +int iuse::blech(player *p, item *it, bool t) { // TODO: Add more effects? g->add_msg_if_player(p,_("Blech, that burns your throat!")); p->vomit(g); return it->type->charges_to_use(); } -int iuse::chew(game *g, player *p, item *it, bool t) { +int iuse::chew(player *p, item *it, bool t) { // TODO: Add more effects? g->add_msg_if_player(p,_("You chew your %s."), it->tname().c_str()); return it->type->charges_to_use(); } -int iuse::mutagen(game *g, player *p, item *it, bool t) { +int iuse::mutagen(player *p, item *it, bool t) { if(!p->is_npc()) { p->add_memorial_log(_("Consumed mutagen.")); } @@ -905,6 +921,15 @@ int iuse::mutagen(game *g, player *p, item *it, bool t) { } else if( it->has_flag("MUTAGEN_TROGLOBITE") ) { g->add_msg_if_player(p, _("You yearn for a cool, dark place to hide.")); p->mutate_category(g, "MUTCAT_TROGLO"); + } else if( it->has_flag("MUTAGEN_ALPHA") ) { + g->add_msg_if_player(p, _("You feel...better. Somehow.")); + p->mutate_category(g, "MUTCAT_ALPHA"); + } else if( it->has_flag("MUTAGEN_MEDICAL") ) { + g->add_msg_if_player(p, _("You can feel the blood rushing through your veins and a strange, medicated feeling washes over your senses.")); + p->mutate_category(g, "MUTCAT_MEDICAL"); + } else if( it->has_flag("MUTAGEN_CHIMERA") ) { + g->add_msg_if_player(p, _("You need to roar, bask, bite, and flap. NOW.")); + p->mutate_category(g, "MUTCAT_CHIMERA"); } else { if (!one_in(3)) { p->mutate(g); @@ -913,7 +938,7 @@ int iuse::mutagen(game *g, player *p, item *it, bool t) { return it->type->charges_to_use(); } -int iuse::purifier(game *g, player *p, item *it, bool t) +int iuse::purifier(player *p, item *it, bool t) { if(!p->is_npc()) { p->add_memorial_log(_("Consumed purifier.")); @@ -941,7 +966,7 @@ int iuse::purifier(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::marloss(game *g, player *p, item *it, bool t) +int iuse::marloss(player *p, item *it, bool t) { if (p->is_npc()) { return it->type->charges_to_use(); @@ -996,7 +1021,7 @@ int iuse::marloss(game *g, player *p, item *it, bool t) } else if (effect <= 6) { // Radiation cleanse is below g->add_msg_if_player(p,_("This berry makes you feel better all over.")); p->pkill += 30; - this->purifier(g, p, it, t); + this->purifier(p, it, t); if (effect == 6) { p->radiation = 0; } @@ -1015,7 +1040,7 @@ int iuse::marloss(game *g, player *p, item *it, bool t) // TOOLS below this point! -int iuse::dogfood(game *g, player *p, item *it, bool t) +int iuse::dogfood(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Put the dog food where?"),dirx,diry)) { @@ -1037,7 +1062,7 @@ int iuse::dogfood(game *g, player *p, item *it, bool t) return 1; } -int iuse::catfood(game *g, player *p, item *it, bool t) +int iuse::catfood(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Put the cat food where?"),dirx,diry)) { @@ -1059,7 +1084,7 @@ int iuse::catfood(game *g, player *p, item *it, bool t) return 1; } -bool prep_firestarter_use(game *g, player *p, item *it, int &posx, int &posy) +bool prep_firestarter_use(player *p, item *it, int &posx, int &posy) { if (!g->choose_adjacent(_("Light where?"),posx,posy)) { return false; @@ -1083,29 +1108,29 @@ bool prep_firestarter_use(game *g, player *p, item *it, int &posx, int &posy) } } -void resolve_firestarter_use(game *g, player *p, item *it, int posx, int posy) +void resolve_firestarter_use(player *p, item *it, int posx, int posy) { if (g->m.add_field(g, point(posx, posy), fd_fire, 1, 100)) { g->add_msg_if_player(p, _("You successfully light a fire.")); } } -int iuse::lighter(game *g, player *p, item *it, bool t) +int iuse::lighter(player *p, item *it, bool t) { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 15; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); return it->type->charges_to_use(); } return 0; } -int iuse::primitive_fire(game *g, player *p, item *it, bool t) +int iuse::primitive_fire(player *p, item *it, bool t) { int posx, posy; - if (prep_firestarter_use(g, p, it, posx, posy)) { + if (prep_firestarter_use(p, it, posx, posy)) { p->moves -= 500; const int skillLevel = p->skillLevel("survival"); const int sides = 10; @@ -1113,7 +1138,7 @@ int iuse::primitive_fire(game *g, player *p, item *it, bool t) // aiming for ~50% success at skill level 3, and possible but unheard of at level 0 const int difficulty = (base_dice + 3) * sides / 2; if (dice(skillLevel+base_dice, 10) >= difficulty) { - resolve_firestarter_use(g, p, it, posx, posy); + resolve_firestarter_use(p, it, posx, posy); } else { g->add_msg_if_player(p, _("You try to light a fire, but fail.")); } @@ -1123,7 +1148,7 @@ int iuse::primitive_fire(game *g, player *p, item *it, bool t) return 0; } -int iuse::sew(game *g, player *p, item *it, bool t) +int iuse::sew(player *p, item *it, bool t) { if (p->fine_detail_vision_mod(g) > 2.5) { g->add_msg(_("You can't see to sew!")); @@ -1267,7 +1292,7 @@ int iuse::sew(game *g, player *p, item *it, bool t) return thread_used; } -int iuse::extra_battery(game *g, player *p, item *it, bool t) +int iuse::extra_battery(player *p, item *it, bool t) { char ch = g->inv_type(_("Modify what?"), IC_TOOL); item* modded = &(p->i_at(ch)); @@ -1301,7 +1326,7 @@ int iuse::extra_battery(game *g, player *p, item *it, bool t) return 1; } -static bool valid_fabric(game *g, player *p, item *it, bool t) +static bool valid_fabric(player *p, item *it, bool t) { if (it->type->id == "null") { g->add_msg_if_player(p, _("You do not have that item!")); @@ -1324,7 +1349,7 @@ static bool valid_fabric(game *g, player *p, item *it, bool t) return true; } -int iuse::cut_up(game *g, player *p, item *it, item *cut, bool t) +int iuse::cut_up(player *p, item *it, item *cut, bool t) { p->moves -= 25 * cut->volume(); int count = cut->volume(); @@ -1365,7 +1390,7 @@ int iuse::cut_up(game *g, player *p, item *it, item *cut, bool t) return it->type->charges_to_use(); } g->add_msg_if_player(p, sliced_text.c_str(), cut->tname().c_str(), count); - item result(g->itypes[type], int(g->turn), g->nextinv); + item result(itypes[type], int(g->turn), g->nextinv); p->i_rem(ch); bool drop = false; for (int i = 0; i < count; i++) { @@ -1387,19 +1412,19 @@ int iuse::cut_up(game *g, player *p, item *it, item *cut, bool t) return it->type->charges_to_use(); } -int iuse::scissors(game *g, player *p, item *it, bool t) +int iuse::scissors(player *p, item *it, bool t) { char ch = g->inv(_("Chop up what?")); item *cut = &(p->i_at(ch)); - if (!valid_fabric(g, p, cut, t)) { + if (!valid_fabric(p, cut, t)) { return 0; } - return cut_up(g, p, it, cut, t); + return cut_up(p, it, cut, t); } -int iuse::extinguisher(game *g, player *p, item *it, bool t) +int iuse::extinguisher(player *p, item *it, bool t) { g->draw(); int x, y; @@ -1441,7 +1466,7 @@ int iuse::extinguisher(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::hammer(game *g, player *p, item *it, bool t) +int iuse::hammer(player *p, item *it, bool t) { g->draw(); int x, y; @@ -1485,13 +1510,13 @@ int iuse::hammer(game *g, player *p, item *it, bool t) return 0; } p->moves -= 500; - g->m.spawn_item(p->posx, p->posy, "nail", 0, 0, nails); - g->m.spawn_item(p->posx, p->posy, "2x4", 0, boards); + g->m.spawn_item(p->posx, p->posy, "nail", 0, nails); + g->m.spawn_item(p->posx, p->posy, "2x4", boards); g->m.ter_set(x, y, newter); return it->type->charges_to_use(); } -int iuse::gasoline_lantern_off(game *g, player *p, item *it, bool t) +int iuse::gasoline_lantern_off(player *p, item *it, bool t) { if (it->charges == 0) { @@ -1506,13 +1531,13 @@ int iuse::gasoline_lantern_off(game *g, player *p, item *it, bool t) else { g->add_msg_if_player(p,_("You turn the lantern on.")); - it->make(g->itypes["gasoline_lantern_on"]); + it->make(itypes["gasoline_lantern_on"]); it->active = true; return it->type->charges_to_use(); } } -int iuse::gasoline_lantern_on(game *g, player *p, item *it, bool t) +int iuse::gasoline_lantern_on(player *p, item *it, bool t) { if (t) // Normal use { @@ -1521,32 +1546,32 @@ int iuse::gasoline_lantern_on(game *g, player *p, item *it, bool t) else // Turning it off { g->add_msg_if_player(p,_("The lantern is extinguished.")); - it->make(g->itypes["gasoline_lantern"]); + it->make(itypes["gasoline_lantern"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::light_off(game *g, player *p, item *it, bool t) +int iuse::light_off(player *p, item *it, bool t) { if (it->charges == 0) { g->add_msg_if_player(p,_("The flashlight's batteries are dead.")); return 0; } else { g->add_msg_if_player(p,_("You turn the flashlight on.")); - it->make(g->itypes["flashlight_on"]); + it->make(itypes["flashlight_on"]); it->active = true; return it->type->charges_to_use(); } } -int iuse::light_on(game *g, player *p, item *it, bool t) +int iuse::light_on(player *p, item *it, bool t) { if (t) { // Normal use // Do nothing... player::active_light and the lightmap::generate deal with this } else { // Turning it off g->add_msg_if_player(p,_("The flashlight flicks off.")); - it->make(g->itypes["flashlight"]); + it->make(itypes["flashlight"]); it->active = false; } return it->type->charges_to_use(); @@ -1554,35 +1579,35 @@ int iuse::light_on(game *g, player *p, item *it, bool t) // this function only exists because we need to set it->active = true // otherwise crafting would just give you the active version directly -int iuse::lightstrip(game *g, player *p, item *it, bool t) +int iuse::lightstrip(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You irreversibly activate the lightstrip.")); - it->make(g->itypes["lightstrip"]); + it->make(itypes["lightstrip"]); it->active = true; return it->type->charges_to_use(); } -int iuse::lightstrip_active(game *g, player *p, item *it, bool t) +int iuse::lightstrip_active(player *p, item *it, bool t) { if (t) { // Normal use // Do nothing... player::active_light and the lightmap::generate deal with this } else { // Turning it off g->add_msg_if_player(p,_("The lightstrip dies.")); - it->make(g->itypes["lightstrip_dead"]); + it->make(itypes["lightstrip_dead"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::glowstick(game *g, player *p, item *it, bool t) +int iuse::glowstick(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You activate the glowstick.")); - it->make(g->itypes["glowstick_lit"]); + it->make(itypes["glowstick_lit"]); it->active = true; return it->type->charges_to_use(); } -int iuse::glowstick_active(game *g, player *p, item *it, bool t) +int iuse::glowstick_active(player *p, item *it, bool t) { if (t) { // Normal use // Do nothing... player::active_light and the lightmap::generate deal with this @@ -1598,15 +1623,15 @@ int iuse::glowstick_active(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::handflare(game *g, player *p, item *it, bool t) +int iuse::handflare(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You strike your flare and light it.")); - it->make(g->itypes["handflare_lit"]); + it->make(itypes["handflare_lit"]); it->active = true; return it->type->charges_to_use(); } -int iuse::handflare_lit(game *g, player *p, item *it, bool t) +int iuse::handflare_lit(player *p, item *it, bool t) { if (t) { // Normal use // Do nothing... player::active_light and the lightmap::generate deal with this @@ -1624,7 +1649,7 @@ int iuse::handflare_lit(game *g, player *p, item *it, bool t) static int cauterize_effect(player *p, item *it, bool force = true) { - hp_part hpart = use_healing_item(g, p, it, -2, -2, -2, it->name, 100, 50, 0, force); + hp_part hpart = use_healing_item(p, it, -2, -2, -2, it->name, 100, 50, 0, force); if (hpart != num_hp_parts) { p->pain += 15; g->add_msg_if_player(p, _("You cauterize yourself. It hurts like hell!")); @@ -1639,7 +1664,7 @@ static int cauterize_effect(player *p, item *it, bool force = true) return 0; } -static int cauterize_elec(game *g, player *p, item *it) +static int cauterize_elec(player *p, item *it) { if (it->charges == 0) { g->add_msg_if_player(p,_("You need batteries to cauterize wounds.")); @@ -1662,7 +1687,7 @@ static int cauterize_elec(game *g, player *p, item *it) return it->type->charges_to_use(); } -int iuse::solder_weld(game *g, player *p, item *it, bool t) +int iuse::solder_weld(player *p, item *it, bool t) { int choice = 2; int charges_used = (dynamic_cast(it->type))->charges_to_use(); @@ -1681,7 +1706,7 @@ int iuse::solder_weld(game *g, player *p, item *it, bool t) switch (choice) { case 1: - return cauterize_elec(g, p, it); + return cauterize_elec(p, it); break; case 2: { @@ -1847,7 +1872,7 @@ int iuse::solder_weld(game *g, player *p, item *it, bool t) } -int iuse::water_purifier(game *g, player *p, item *it, bool t) +int iuse::water_purifier(player *p, item *it, bool t) { char ch = g->inv_type(_("Purify what?"), IC_COMESTIBLE); if (!p->has_item(ch)) { @@ -1868,12 +1893,12 @@ int iuse::water_purifier(game *g, player *p, item *it, bool t) return 0; } p->moves -= 150; - pure->make(g->itypes["water_clean"]); + pure->make(itypes["water_clean"]); pure->poison = 0; return pure->charges; } -int iuse::two_way_radio(game *g, player *p, item *it, bool t) +int iuse::two_way_radio(player *p, item *it, bool t) { WINDOW* w = newwin(6, 36, (TERMY-6)/2, (TERMX-36)/2); wborder(w, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, @@ -1953,19 +1978,19 @@ _( return it->type->charges_to_use(); } -int iuse::radio_off(game *g, player *p, item *it, bool t) +int iuse::radio_off(player *p, item *it, bool t) { if (it->charges == 0) { g->add_msg_if_player(p,_("It's dead.")); } else { g->add_msg_if_player(p,_("You turn the radio on.")); - it->make(g->itypes["radio_on"]); + it->make(itypes["radio_on"]); it->active = true; } return it->type->charges_to_use(); } -static radio_tower *find_radio_station( game *g, int frequency ) +static radio_tower *find_radio_station( int frequency ) { radio_tower *tower = NULL; for (int k = 0; k < g->cur_om->radios.size(); k++) @@ -1980,7 +2005,7 @@ static radio_tower *find_radio_station( game *g, int frequency ) return NULL; } -int iuse::directional_antenna(game *g, player *p, item *it, bool t) +int iuse::directional_antenna(player *p, item *it, bool t) { // Find out if we have an active radio item radio = p->i_of_type("radio_on"); @@ -1990,7 +2015,7 @@ int iuse::directional_antenna(game *g, player *p, item *it, bool t) return 0; } // Find the radio station its tuned to (if any) - radio_tower *tower = find_radio_station( g, radio.frequency ); + radio_tower *tower = find_radio_station( radio.frequency ); if( tower == NULL ) { g->add_msg( _("You can't find the direction if your radio isn't tuned.") ); @@ -2002,12 +2027,12 @@ int iuse::directional_antenna(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::radio_on(game *g, player *p, item *it, bool t) +int iuse::radio_on(player *p, item *it, bool t) { if (t) { // Normal use std::string message = _("Radio: Kssssssssssssh."); - radio_tower *selected_tower = find_radio_station( g, it->frequency ); + radio_tower *selected_tower = find_radio_station( it->frequency ); if( selected_tower != NULL ) { if( selected_tower->type == MESSAGE_BROADCAST ) @@ -2092,7 +2117,7 @@ int iuse::radio_on(game *g, player *p, item *it, bool t) break; case 2: g->add_msg_if_player(p,_("The radio dies.")); - it->make(g->itypes["radio"]); + it->make(itypes["radio"]); it->active = false; break; case 3: break; @@ -2101,7 +2126,7 @@ int iuse::radio_on(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::noise_emitter_off(game *g, player *p, item *it, bool t) +int iuse::noise_emitter_off(player *p, item *it, bool t) { if (it->charges == 0) { @@ -2110,13 +2135,13 @@ int iuse::noise_emitter_off(game *g, player *p, item *it, bool t) else { g->add_msg_if_player(p,_("You turn the noise emitter on.")); - it->make(g->itypes["noise_emitter_on"]); + it->make(itypes["noise_emitter_on"]); it->active = true; } return it->type->charges_to_use(); } -int iuse::airhorn(game *g, player *p, item *it, bool t) +int iuse::airhorn(player *p, item *it, bool t) { if (it->charges == 0) { @@ -2131,7 +2156,7 @@ int iuse::airhorn(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::horn_bicycle(game *g, player *p, item *it, bool t) +int iuse::horn_bicycle(player *p, item *it, bool t) { point pos = g->find_item(it); g->sound(pos.x, pos.y, 15, _("honk.")); @@ -2139,7 +2164,7 @@ int iuse::horn_bicycle(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::noise_emitter_on(game *g, player *p, item *it, bool t) +int iuse::noise_emitter_on(player *p, item *it, bool t) { if (t) // Normal use { @@ -2150,20 +2175,20 @@ int iuse::noise_emitter_on(game *g, player *p, item *it, bool t) else // Turning it off { g->add_msg_if_player(p,_("The infernal racket dies as you turn off the noise emitter.")); - it->make(g->itypes["noise_emitter"]); + it->make(itypes["noise_emitter"]); it->active = false; } return it->type->charges_to_use(); } -static void roadmap_targets(game *g, player *p, item *it, bool t, int target, - int target_range, int distance, int reveal_distance) +static void roadmap_targets(player *p, item *it, bool t, + const std::string &target, int distance, + int reveal_distance) { - oter_t oter_target = oterlist[target]; point place; point origin = g->om_location(); std::vector places = g->cur_om->find_all(tripoint(origin.x, origin.y, g->levz), - (oter_id)target, target_range, distance, false); + target, distance, false); for (std::vector::iterator iter = places.begin(); iter != places.end(); ++iter) { place = *iter; @@ -2181,34 +2206,144 @@ static void roadmap_targets(game *g, player *p, item *it, bool t, int target, } } -int iuse::roadmap(game *g, player *p, item *it, bool t) +int iuse::roadmap(player *p, item *it, bool t) { if (it->charges < 1) { g->add_msg_if_player(p, _("There isn't anything new on the map.")); return 0; } // Show roads - roadmap_targets(g, p, it, t, (int)ot_hiway_ns, 2, 0, 0); - roadmap_targets(g, p, it, t, (int)ot_road_ns, 12, 0, 0); - roadmap_targets(g, p, it, t, (int)ot_bridge_ns, 2, 0, 0); + roadmap_targets(p, it, t, "hiway", 0, 0); + roadmap_targets(p, it, t, "road", 0, 0); + roadmap_targets(p, it, t, "bridge", 0, 0); // Show evac shelters - roadmap_targets(g, p, it, t, (int)ot_shelter, 1, 0, 0); + roadmap_targets(p, it, t, "shelter", 0, 0); // Show hospital(s) - roadmap_targets(g, p, it, t, (int)ot_hospital_entrance, 2, 0, 0); - // Show megastores - roadmap_targets(g, p, it, t, (int)ot_megastore_entrance, 2, 0, 0); + roadmap_targets(p, it, t, "hospital", 0, 0); + // Show schools + roadmap_targets(p, it, t, "school", 0, 0); // Show police stations - roadmap_targets(g, p, it, t, (int)ot_police_north, 4, 0, 0); - // Show pharmacies - roadmap_targets(g, p, it, t, (int)ot_s_pharm_north, 4, 0, 0); + roadmap_targets(p, it, t, "police", 0, 0); + // Show subway entrances + roadmap_targets(p, it, t, "sub_station", 0, 0); + // Show banks + roadmap_targets(p, it, t, "bank", 0, 0); g->add_msg_if_player(p, _("You add roads and points of interest to your map.")); return 1; } -int iuse::picklock(game *g, player *p, item *it, bool t) +int iuse::survivormap(player *p, item *it, bool t) +{ + if (it->charges < 1) { + g->add_msg_if_player(p, _("There isn't anything new on the map.")); + return 0; + } + // Show roads + roadmap_targets(p, it, t, "hiway", 0, 0); + roadmap_targets(p, it, t, "road", 0, 0); + roadmap_targets(p, it, t, "bridge", 0, 0); + + // Show pharmacies + roadmap_targets(p, it, t, "s_pharm", 0, 0); + // Show gun stores + roadmap_targets(p, it, t, "s_gun", 0, 0); + // Show grocery stores + roadmap_targets(p, it, t, "s_grocery", 0, 0); + // Show military surplus stores + roadmap_targets(p, it, t, "mil_surplus", 0, 0); + // Show gas stations + roadmap_targets(p, it, t, "s_gas", 0, 0); + + g->add_msg_if_player(p, _("You add roads and possible supply points to your map.")); + + return 1; +} + +int iuse::militarymap(player *p, item *it, bool t) +{ + if (it->charges < 1) { + g->add_msg_if_player(p, _("There isn't anything new on the map.")); + return 0; + } + // Show roads + roadmap_targets(p, it, t, "hiway", 0, 0); + roadmap_targets(p, it, t, "road", 0, 0); + roadmap_targets(p, it, t, "bridge", 0, 0); + + // Show FEMA camps + roadmap_targets(p, it, t, "fema_entrance", 0, 0); + // Show bunkers + roadmap_targets(p, it, t, "bunker", 0, 0); + // Show outposts + roadmap_targets(p, it, t, "outpost", 0, 0); + // Show nuclear silos + roadmap_targets(p, it, t, "silo", 0, 0); + // Show evac shelters + roadmap_targets(p, it, t, "shelter", 0, 0); + // Show police stations + roadmap_targets(p, it, t, "police", 0, 0); + + g->add_msg_if_player(p, _("You add roads and facilities to your map.")); + + return 1; +} + +int iuse::restaurantmap(player *p, item *it, bool t) +{ + if (it->charges < 1) { + g->add_msg_if_player(p, _("There isn't anything new on the map.")); + return 0; + } + // Show roads + roadmap_targets(p, it, t, "hiway", 0, 0); + roadmap_targets(p, it, t, "road", 0, 0); + roadmap_targets(p, it, t, "bridge", 0, 0); + + // Show coffee shops + roadmap_targets(p, it, t, "s_restaurant_coffee", 0, 0); + // Show restaurants + roadmap_targets(p, it, t, "s_restaurant", 0, 0); + // Show bars + roadmap_targets(p, it, t, "bar", 0, 0); + // Show fast food joints + roadmap_targets(p, it, t, "s_restaurant_fast", 0, 0); + + g->add_msg_if_player(p, _("You add roads and restaurants to your map.")); + + return 1; +} + +int iuse::touristmap(player *p, item *it, bool t) +{ + if (it->charges < 1) { + g->add_msg_if_player(p, _("There isn't anything new on the map.")); + return 0; + } + // Show roads + roadmap_targets(p, it, t, "hiway", 0, 0); + roadmap_targets(p, it, t, "road", 0, 0); + roadmap_targets(p, it, t, "bridge", 0, 0); + + // Show hotels + roadmap_targets(p, it, t, "hotel_tower", 0, 0); + // Show restaurants + roadmap_targets(p, it, t, "s_restaurant", 0, 0); + // Show cathedrals + roadmap_targets(p, it, t, "cathedral", 0, 0); + // Show fast food joints + roadmap_targets(p, it, t, "s_restaurant_fast", 0, 0); + // Show fast megastores + roadmap_targets(p, it, t, "megastore", 0, 0); + + g->add_msg_if_player(p, _("You add roads and tourist attractions to your map.")); + + return 1; +} + +int iuse::picklock(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Use your pick lock where?"), dirx, diry)) { @@ -2289,7 +2424,7 @@ int iuse::picklock(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::crowbar(game *g, player *p, item *it, bool t) +int iuse::crowbar(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Pry where?"), dirx,diry)) { @@ -2370,8 +2505,8 @@ int iuse::crowbar(game *g, player *p, item *it, bool t) p->practice(g->turn, "carpentry", 1); } p->moves -= 500; - g->m.spawn_item(p->posx, p->posy, "nail", 0, 0, nails); - g->m.spawn_item(p->posx, p->posy, "2x4", 0, boards); + g->m.spawn_item(p->posx, p->posy, "nail", 0, nails); + g->m.spawn_item(p->posx, p->posy, "2x4", boards); g->m.ter_set(dirx, diry, newter); return it->type->charges_to_use(); } @@ -2390,7 +2525,7 @@ int iuse::crowbar(game *g, player *p, item *it, bool t) g->sound(dirx, diry, 12, _("crunch!")); } if ( type == t_manhole_cover ) { - g->m.spawn_item(dirx, diry, "manhole_cover", 0); + g->m.spawn_item(dirx, diry, "manhole_cover"); } if ( type == t_door_locked_alarm ) { g->u.add_memorial_log(_("Set off an alarm.")); @@ -2406,9 +2541,9 @@ int iuse::crowbar(game *g, player *p, item *it, bool t) g->add_msg_if_player(p,_("You break the glass.")); g->sound(dirx, diry, 24, _("glass breaking!")); g->m.ter_set(dirx, diry, t_window_frame); - g->m.spawn_item(dirx, diry, "sheet", 0, 2); - g->m.spawn_item(dirx, diry, "stick", 0); - g->m.spawn_item(dirx, diry, "string_36", 0); + g->m.spawn_item(dirx, diry, "sheet", 2); + g->m.spawn_item(dirx, diry, "stick"); + g->m.spawn_item(dirx, diry, "string_36"); return it->type->charges_to_use(); } } @@ -2417,7 +2552,7 @@ int iuse::crowbar(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::makemound(game *g, player *p, item *it, bool t) +int iuse::makemound(player *p, item *it, bool t) { if (g->m.has_flag("DIGGABLE", p->posx, p->posy) && !g->m.has_flag("PLANT", p->posx, p->posy)) { g->add_msg_if_player(p,_("You churn up the earth here.")); @@ -2431,13 +2566,13 @@ int iuse::makemound(game *g, player *p, item *it, bool t) } //TODO remove this? -int iuse::dig(game *g, player *p, item *it, bool t) +int iuse::dig(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You can dig a pit via the construction menu--hit *")); return it->type->charges_to_use(); } -int iuse::siphon(game *g, player *p, item *it, bool t) +int iuse::siphon(player *p, item *it, bool t) { int posx = 0; int posy = 0; @@ -2506,13 +2641,13 @@ int iuse::siphon(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::chainsaw_off(game *g, player *p, item *it, bool t) +int iuse::chainsaw_off(player *p, item *it, bool t) { p->moves -= 80; if (rng(0, 10) - it->damage > 5 && it->charges > 0) { g->sound(p->posx, p->posy, 20, _("With a roar, the chainsaw leaps to life!")); - it->make(g->itypes["chainsaw_on"]); + it->make(itypes["chainsaw_on"]); it->active = true; } else { g->add_msg_if_player(p,_("You yank the cord, but nothing happens.")); @@ -2520,7 +2655,7 @@ int iuse::chainsaw_off(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::chainsaw_on(game *g, player *p, item *it, bool t) +int iuse::chainsaw_on(player *p, item *it, bool t) { if (t) { // Effects while simply on if (one_in(15)) { @@ -2528,13 +2663,13 @@ int iuse::chainsaw_on(game *g, player *p, item *it, bool t) } } else { // Toggling g->add_msg_if_player(p,_("Your chainsaw dies.")); - it->make(g->itypes["chainsaw_off"]); + it->make(itypes["chainsaw_off"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::shishkebab_off(game *g, player *p, item *it, bool t) +int iuse::shishkebab_off(player *p, item *it, bool t) { int choice = menu(true, _("What's the plan?"), _("Bring the heat!"), _("Cut 'em up!"), _("I'm good."), NULL); @@ -2545,7 +2680,7 @@ int iuse::shishkebab_off(game *g, player *p, item *it, bool t) if (rng(0, 10) - it->damage > 5 && it->charges > 0) { g->sound(p->posx, p->posy, 10, _("Let's dance Zeds!")); - it->make(g->itypes["shishkebab_on"]); + it->make(itypes["shishkebab_on"]); it->active = true; } else { g->add_msg_if_player(p,_("Aw, dangit.")); @@ -2555,14 +2690,14 @@ int iuse::shishkebab_off(game *g, player *p, item *it, bool t) break; case 2: { - return iuse::knife(g, p, it, t); + return iuse::knife(p, it, t); } default: return 0; } } -int iuse::shishkebab_on(game *g, player *p, item *it, bool t) +int iuse::shishkebab_on(player *p, item *it, bool t) { if (t) // Effects while simply on { @@ -2573,14 +2708,14 @@ int iuse::shishkebab_on(game *g, player *p, item *it, bool t) if (one_in(75)) { g->add_msg_if_player(p,_("Bummer man, wipeout!")), - it->make(g->itypes["shishkebab_off"]), + it->make(itypes["shishkebab_off"]), it->active = false; } } else if (it->charges == 0) { g->add_msg_if_player(p,_("Uncool, outta gas.")); - it->make(g->itypes["shishkebab_off"]); + it->make(itypes["shishkebab_off"]); it->active = false; } else @@ -2592,17 +2727,17 @@ int iuse::shishkebab_on(game *g, player *p, item *it, bool t) case 1: { g->add_msg_if_player(p,_("Peace out.")); - it->make(g->itypes["shishkebab_off"]); + it->make(itypes["shishkebab_off"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); } } default: @@ -2612,7 +2747,7 @@ int iuse::shishkebab_on(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::firemachete_off(game *g, player *p, item *it, bool t) +int iuse::firemachete_off(player *p, item *it, bool t) { int choice = menu(true, _("No. 9"), _("Turn on"), _("Use as a knife"), _("Cancel"), NULL); @@ -2624,7 +2759,7 @@ int iuse::firemachete_off(game *g, player *p, item *it, bool t) if (rng(0, 10) - it->damage > 2 && it->charges > 0) { g->sound(p->posx, p->posy, 10, _("Your No. 9 glows!")); - it->make(g->itypes["firemachete_on"]); + it->make(itypes["firemachete_on"]); it->active = true; } else { g->add_msg_if_player(p,_("Click.")); @@ -2633,7 +2768,7 @@ int iuse::firemachete_off(game *g, player *p, item *it, bool t) break; case 2: { - iuse::knife(g, p, it, t); + iuse::knife(p, it, t); } default: return 0; @@ -2641,7 +2776,7 @@ int iuse::firemachete_off(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::firemachete_on(game *g, player *p, item *it, bool t) +int iuse::firemachete_on(player *p, item *it, bool t) { if (t) // Effects while simply on { @@ -2650,14 +2785,14 @@ int iuse::firemachete_on(game *g, player *p, item *it, bool t) if (one_in(100)) { g->add_msg_if_player(p,_("Your No. 9 cuts out!")), - it->make(g->itypes["firemachete_off"]), + it->make(itypes["firemachete_off"]), it->active = false; } } else if (it->charges == 0) { g->add_msg_if_player(p,_("Out of ammo!")); - it->make(g->itypes["firemachete_off"]); + it->make(itypes["firemachete_off"]); it->active = false; } else @@ -2668,17 +2803,17 @@ int iuse::firemachete_on(game *g, player *p, item *it, bool t) case 1: { g->add_msg_if_player(p,_("Your No. 9 goes dark.")); - it->make(g->itypes["firemachete_off"]); + it->make(itypes["firemachete_off"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); } } default: @@ -2688,7 +2823,7 @@ int iuse::firemachete_on(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::broadfire_off(game *g, player *p, item *it, bool t) +int iuse::broadfire_off(player *p, item *it, bool t) { int choice = menu(true, _("What will thou do?"), _("Ready for battle!"), _("Perform peasant work?"), _("Reconsider thy strategy"), NULL); @@ -2701,7 +2836,7 @@ int iuse::broadfire_off(game *g, player *p, item *it, bool t) { g->sound(p->posx, p->posy, 10, _("Charge!!")); - it->make(g->itypes["broadfire_on"]); + it->make(itypes["broadfire_on"]); it->active = true; } else { g->add_msg_if_player(p,_("No strength to fight!")); @@ -2710,13 +2845,13 @@ int iuse::broadfire_off(game *g, player *p, item *it, bool t) break; case 2: { - return iuse::knife(g, p, it, t); + return iuse::knife(p, it, t); } } return it->type->charges_to_use(); } -int iuse::broadfire_on(game *g, player *p, item *it, bool t) +int iuse::broadfire_on(player *p, item *it, bool t) { if (t) // Effects while simply on { @@ -2727,7 +2862,7 @@ int iuse::broadfire_on(game *g, player *p, item *it, bool t) else if (it->charges == 0) { g->add_msg_if_player(p,_("Thy strength fades!")); - it->make(g->itypes["broadfire_off"]); + it->make(itypes["broadfire_off"]); it->active = false; } else @@ -2739,17 +2874,17 @@ int iuse::broadfire_on(game *g, player *p, item *it, bool t) case 1: { g->add_msg_if_player(p,_("Run away!")); - it->make(g->itypes["broadfire_off"]); + it->make(itypes["broadfire_off"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); } } } @@ -2757,7 +2892,7 @@ int iuse::broadfire_on(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::firekatana_off(game *g, player *p, item *it, bool t) +int iuse::firekatana_off(player *p, item *it, bool t) { int choice = menu(true, _("The Dark of Night."), _("Daybreak"), _("The Moonlight's Edge"), _("Eternal Night"), NULL); @@ -2770,7 +2905,7 @@ int iuse::firekatana_off(game *g, player *p, item *it, bool t) { g->sound(p->posx, p->posy, 10, _("The Sun rises.")); - it->make(g->itypes["firekatana_on"]); + it->make(itypes["firekatana_on"]); it->active = true; } else { @@ -2780,13 +2915,13 @@ int iuse::firekatana_off(game *g, player *p, item *it, bool t) break; case 2: { - return iuse::knife(g, p, it, t); + return iuse::knife(p, it, t); } } return it->type->charges_to_use(); } -int iuse::firekatana_on(game *g, player *p, item *it, bool t) +int iuse::firekatana_on(player *p, item *it, bool t) { if (t) // Effects while simply on { @@ -2797,7 +2932,7 @@ int iuse::firekatana_on(game *g, player *p, item *it, bool t) else if (it->charges == 0) { g->add_msg_if_player(p,_("The Light Fades.")); - it->make(g->itypes["firekatana_off"]); + it->make(itypes["firekatana_off"]); it->active = false; } else @@ -2809,17 +2944,17 @@ int iuse::firekatana_on(game *g, player *p, item *it, bool t) case 1: { g->add_msg_if_player(p,_("The Sun sets.")); - it->make(g->itypes["firekatana_off"]); + it->make(itypes["firekatana_off"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); return it->type->charges_to_use(); } } @@ -2828,7 +2963,7 @@ int iuse::firekatana_on(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::zweifire_off(game *g, player *p, item *it, bool t) +int iuse::zweifire_off(player *p, item *it, bool t) { int choice = menu(true, _("Was willst du tun?"), _("Die Flamme entfachen."), _("Als Messer verwenden."), _("Nichts tun."), NULL); @@ -2840,7 +2975,7 @@ int iuse::zweifire_off(game *g, player *p, item *it, bool t) { g->sound(p->posx, p->posy, 10, _("Die Klinge deines Schwertes brennt!")); - it->make(g->itypes["zweifire_on"]); + it->make(itypes["zweifire_on"]); it->active = true; } else { @@ -2850,7 +2985,7 @@ int iuse::zweifire_off(game *g, player *p, item *it, bool t) break; case 2: { - return iuse::knife(g, p, it, t); + return iuse::knife(p, it, t); } default: return 0; @@ -2858,7 +2993,7 @@ int iuse::zweifire_off(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::zweifire_on(game *g, player *p, item *it, bool t) +int iuse::zweifire_on(player *p, item *it, bool t) { if (t) // Effects while simply on { @@ -2871,7 +3006,7 @@ int iuse::zweifire_on(game *g, player *p, item *it, bool t) { //~ (Flammenschwert) "Your Flammenscwhert (firesword) is out of fuel!" g->add_msg_if_player(p,_("Deinem Flammenschwert ist der Brennstoff ausgegangen!")); - it->make(g->itypes["zweifire_off"]); + it->make(itypes["zweifire_off"]); it->active = false; } else @@ -2891,17 +3026,17 @@ int iuse::zweifire_on(game *g, player *p, item *it, bool t) { //~ (Flammenschwert) "The flames on your sword die out." g->add_msg_if_player(p,_("Die Flamme deines Schwertes erlischt.")); - it->make(g->itypes["zweifire_off"]); + it->make(itypes["zweifire_off"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); return it->type->charges_to_use(); } } @@ -2912,7 +3047,7 @@ int iuse::zweifire_on(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::jackhammer(game *g, player *p, item *it, bool t) +int iuse::jackhammer(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Drill where?"),dirx,diry)) { @@ -2942,7 +3077,7 @@ int iuse::jackhammer(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::jacqueshammer(game *g, player *p, item *it, bool t) +int iuse::jacqueshammer(player *p, item *it, bool t) { // translator comments for everything to reduce confusion int dirx, diry; @@ -2983,14 +3118,14 @@ int iuse::jacqueshammer(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::pickaxe(game *g, player *p, item *it, bool t) +int iuse::pickaxe(player *p, item *it, bool t) { g->add_msg_if_player(p,_("Whoa buddy! You can't go cheating in items and")); g->add_msg_if_player(p,_("just expect them to work! Now put the pickaxe")); g->add_msg_if_player(p,_("down and go play the game.")); return 0; } -int iuse::set_trap(game *g, player *p, item *it, bool t) +int iuse::set_trap(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Place trap where?"),dirx,diry)) { @@ -3177,7 +3312,7 @@ if(it->type->id == "cot"){ return 1; } -int iuse::geiger(game *g, player *p, item *it, bool t) +int iuse::geiger(player *p, item *it, bool t) { if (t) { // Every-turn use when it's on int rads = g->m.radiation(p->posx, p->posy); @@ -3207,7 +3342,7 @@ int iuse::geiger(game *g, player *p, item *it, bool t) bool is_on = (type->id == "geiger_on"); if (is_on) { g->add_msg(_("The geiger counter's SCANNING LED flicks off.")); - it->make(g->itypes["geiger_off"]); + it->make(itypes["geiger_off"]); it->active = false; return 0; } @@ -3220,7 +3355,7 @@ int iuse::geiger(game *g, player *p, item *it, bool t) g->m.radiation(p->posx, p->posy)); break; case 3: g->add_msg_if_player(p,_("The geiger counter's scan LED flicks on.")); - it->make(g->itypes["geiger_on"]); + it->make(itypes["geiger_on"]); it->active = true; break; case 4: @@ -3229,16 +3364,16 @@ int iuse::geiger(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::teleport(game *g, player *p, item *it, bool t) +int iuse::teleport(player *p, item *it, bool t) { p->moves -= 100; g->teleport(p); return it->type->charges_to_use(); } -int iuse::can_goo(game *g, player *p, item *it, bool t) +int iuse::can_goo(player *p, item *it, bool t) { - it->make(g->itypes["canister_empty"]); + it->make(itypes["canister_empty"]); int tries = 0, goox, gooy; do { goox = p->posx + rng(-2, 2); @@ -3288,20 +3423,20 @@ int iuse::can_goo(game *g, player *p, item *it, bool t) } -int iuse::pipebomb(game *g, player *p, item *it, bool t) +int iuse::pipebomb(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter!")); return 0; } g->add_msg_if_player(p,_("You light the fuse on the pipe bomb.")); - it->make(g->itypes["pipebomb_act"]); + it->make(itypes["pipebomb_act"]); it->charges = 3; it->active = true; return it->type->charges_to_use(); } -int iuse::pipebomb_act(game *g, player *p, item *it, bool t) +int iuse::pipebomb_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3320,16 +3455,16 @@ int iuse::pipebomb_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::grenade(game *g, player *p, item *it, bool t) +int iuse::grenade(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the grenade.")); - it->make(g->itypes["grenade_act"]); + it->make(itypes["grenade_act"]); it->charges = 5; it->active = true; return it->type->charges_to_use(); } -int iuse::grenade_act(game *g, player *p, item *it, bool t) +int iuse::grenade_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3343,16 +3478,16 @@ int iuse::grenade_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::granade(game *g, player *p, item *it, bool t) +int iuse::granade(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the Granade.")); - it->make(g->itypes["granade_act"]); + it->make(itypes["granade_act"]); it->charges = 5; it->active = true; return it->type->charges_to_use(); } -int iuse::granade_act(game *g, player *p, item *it, bool t) +int iuse::granade_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3469,16 +3604,16 @@ int iuse::granade_act(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::flashbang(game *g, player *p, item *it, bool t) +int iuse::flashbang(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the flashbang.")); - it->make(g->itypes["flashbang_act"]); + it->make(itypes["flashbang_act"]); it->charges = 5; it->active = true; return it->type->charges_to_use(); } -int iuse::flashbang_act(game *g, player *p, item *it, bool t) +int iuse::flashbang_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3492,21 +3627,21 @@ int iuse::flashbang_act(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::c4(game *g, player *p, item *it, bool t) +int iuse::c4(player *p, item *it, bool t) { int time = query_int(_("Set the timer to (0 to cancel)?")); - if (time == 0) { - g->add_msg_if_player(p,"Never mind."); + if (time <= 0) { + g->add_msg_if_player(p,_("Never mind.")); return 0; } g->add_msg_if_player(p,_("You set the timer to %d."), time); - it->make(g->itypes["c4armed"]); + it->make(itypes["c4armed"]); it->charges = time; it->active = true; return it->type->charges_to_use(); } -int iuse::c4armed(game *g, player *p, item *it, bool t) +int iuse::c4armed(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3520,16 +3655,16 @@ int iuse::c4armed(game *g, player *p, item *it, bool t) return 0; } -int iuse::EMPbomb(game *g, player *p, item *it, bool t) +int iuse::EMPbomb(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the EMP grenade.")); - it->make(g->itypes["EMPbomb_act"]); + it->make(itypes["EMPbomb_act"]); it->charges = 3; it->active = true; return it->type->charges_to_use(); } -int iuse::EMPbomb_act(game *g, player *p, item *it, bool t) +int iuse::EMPbomb_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3547,16 +3682,16 @@ int iuse::EMPbomb_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::scrambler(game *g, player *p, item *it, bool t) +int iuse::scrambler(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the scrambler grenade.")); - it->make(g->itypes["scrambler_act"]); + it->make(itypes["scrambler_act"]); it->charges = 3; it->active = true; return it->type->charges_to_use(); } -int iuse::scrambler_act(game *g, player *p, item *it, bool t) +int iuse::scrambler_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3574,16 +3709,16 @@ int iuse::scrambler_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::gasbomb(game *g, player *p, item *it, bool t) +int iuse::gasbomb(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the teargas canister.")); - it->make(g->itypes["gasbomb_act"]); + it->make(itypes["gasbomb_act"]); it->charges = 20; it->active = true; return it->type->charges_to_use(); } -int iuse::gasbomb_act(game *g, player *p, item *it, bool t) +int iuse::gasbomb_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3603,21 +3738,21 @@ int iuse::gasbomb_act(game *g, player *p, item *it, bool t) } } } else { - it->make(g->itypes["canister_empty"]); + it->make(itypes["canister_empty"]); } return 0; } -int iuse::smokebomb(game *g, player *p, item *it, bool t) +int iuse::smokebomb(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the pin on the smoke bomb.")); - it->make(g->itypes["smokebomb_act"]); + it->make(itypes["smokebomb_act"]); it->charges = 20; it->active = true; return it->type->charges_to_use(); } -int iuse::smokebomb_act(game *g, player *p, item *it, bool t) +int iuse::smokebomb_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3637,23 +3772,23 @@ int iuse::smokebomb_act(game *g, player *p, item *it, bool t) } } } else { - it->make(g->itypes["canister_empty"]); + it->make(itypes["canister_empty"]); } return 0; } -int iuse::acidbomb(game *g, player *p, item *it, bool t) +int iuse::acidbomb(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You remove the divider, and the chemicals mix.")); p->moves -= 150; - it->make(g->itypes["acidbomb_act"]); + it->make(itypes["acidbomb_act"]); it->charges = 1; it->bday = int(g->turn); it->active = true; return it->type->charges_to_use(); } -int iuse::acidbomb_act(game *g, player *p, item *it, bool t) +int iuse::acidbomb_act(player *p, item *it, bool t) { if (!p->has_item(it)) { point pos = g->find_item(it); @@ -3668,7 +3803,7 @@ int iuse::acidbomb_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::arrow_flamable(game *g, player *p, item *it, bool t) +int iuse::arrow_flamable(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter!")); @@ -3676,11 +3811,11 @@ int iuse::arrow_flamable(game *g, player *p, item *it, bool t) } g->add_msg_if_player(p,_("You light the arrow!.")); p->moves -= 150; - it->make(g->itypes["arrow_flamming"]); + it->make(itypes["arrow_flamming"]); return it->type->charges_to_use(); } -int iuse::molotov(game *g, player *p, item *it, bool t) +int iuse::molotov(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter!")); @@ -3688,13 +3823,13 @@ int iuse::molotov(game *g, player *p, item *it, bool t) } g->add_msg_if_player(p,_("You light the molotov cocktail.")); p->moves -= 150; - it->make(g->itypes["molotov_lit"]); + it->make(itypes["molotov_lit"]); it->bday = int(g->turn); it->active = true; return it->type->charges_to_use(); } -int iuse::molotov_lit(game *g, player *p, item *it, bool t) +int iuse::molotov_lit(player *p, item *it, bool t) { int age = int(g->turn) - it->bday; if (p->has_item(it)) { @@ -3702,7 +3837,7 @@ int iuse::molotov_lit(game *g, player *p, item *it, bool t) if (age >= 5) { // More than 5 turns old = chance of going out if (rng(1, 50) < age) { g->add_msg_if_player(p,_("Your lit molotov goes out.")); - it->make(g->itypes["molotov"]); + it->make(itypes["molotov"]); it->active = false; } } @@ -3715,20 +3850,20 @@ int iuse::molotov_lit(game *g, player *p, item *it, bool t) return 0; } -int iuse::dynamite(game *g, player *p, item *it, bool t) +int iuse::dynamite(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter!")); return 0; } g->add_msg_if_player(p,_("You light the dynamite.")); - it->make(g->itypes["dynamite_act"]); + it->make(itypes["dynamite_act"]); it->charges = 20; it->active = true; return it->type->charges_to_use(); } -int iuse::dynamite_act(game *g, player *p, item *it, bool t) +int iuse::dynamite_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { return 0; } @@ -3742,20 +3877,20 @@ int iuse::dynamite_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::matchbomb(game *g, player *p, item *it, bool t) { +int iuse::matchbomb(player *p, item *it, bool t) { if( !p->use_charges_if_avail("fire", 1) ) { it->charges++; g->add_msg_if_player(p,_("You need a lighter!")); return 0; } g->add_msg_if_player(p,_("You light the match head bomb.")); - it->make( g->itypes["matchbomb_act"] ); + it->make( itypes["matchbomb_act"] ); it->charges = 3; it->active = true; return it->type->charges_to_use(); } -int iuse::matchbomb_act(game *g, player *p, item *it, bool t) { +int iuse::matchbomb_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { return 0; } // Simple timer effects @@ -3765,7 +3900,7 @@ int iuse::matchbomb_act(game *g, player *p, item *it, bool t) { return 0; } -int iuse::firecracker_pack(game *g, player *p, item *it, bool t) +int iuse::firecracker_pack(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter!")); @@ -3804,27 +3939,27 @@ int iuse::firecracker_pack(game *g, player *p, item *it, bool t) } else if(ch == 'A') { if(charges == it->charges) { g->add_msg_if_player(p,_("You light the pack of firecrackers.")); - it->make(g->itypes["firecracker_pack_act"]); + it->make(itypes["firecracker_pack_act"]); it->charges = charges; it->bday = g->turn; it->active = true; } else { if(charges == 1) { g->add_msg_if_player(p,_("You light one firecracker.")); - item new_it = item(g->itypes["firecracker_act"], int(g->turn)); + item new_it = item(itypes["firecracker_act"], int(g->turn)); new_it.charges = 2; new_it.active = true; p->i_add(new_it, g); } else { g->add_msg_if_player(p,_("You light a string of %d firecrackers."), charges); - item new_it = item(g->itypes["firecracker_pack_act"], int(g->turn)); + item new_it = item(itypes["firecracker_pack_act"], int(g->turn)); new_it.charges = charges; new_it.bday = g->turn; new_it.active = true; p->i_add(new_it, g); } if(it->charges == 1) { - it->make(g->itypes["firecracker"]); + it->make(itypes["firecracker"]); } } close = true; @@ -3838,7 +3973,7 @@ int iuse::firecracker_pack(game *g, player *p, item *it, bool t) return charges; } -int iuse::firecracker_pack_act(game *g, player *p, item *it, bool t) +int iuse::firecracker_pack_act(player *p, item *it, bool t) { point pos = g->find_item(it); int current_turn = g->turn; @@ -3860,7 +3995,7 @@ int iuse::firecracker_pack_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::firecracker(game *g, player *p, item *it, bool t) +int iuse::firecracker(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { @@ -3868,13 +4003,13 @@ int iuse::firecracker(game *g, player *p, item *it, bool t) return 0; } g->add_msg_if_player(p,_("You light the firecracker.")); - it->make(g->itypes["firecracker_act"]); + it->make(itypes["firecracker_act"]); it->charges = 2; it->active = true; return it->type->charges_to_use(); } -int iuse::firecracker_act(game *g, player *p, item *it, bool t) +int iuse::firecracker_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3888,19 +4023,24 @@ int iuse::firecracker_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::mininuke(game *g, player *p, item *it, bool t) +int iuse::mininuke(player *p, item *it, bool t) { + int time = query_int(_("Set the timer to (0 to cancel)?")); + if (time <= 0) { + g->add_msg_if_player(p,"Never mind."); + return 0; + } + g->add_msg_if_player(p,_("You set the timer to %d."), time); if(!p->is_npc()) { p->add_memorial_log(_("Activated a mininuke.")); } - g->add_msg_if_player(p,_("You activate the mininuke.")); - it->make(g->itypes["mininuke_act"]); - it->charges = 10; + it->make(itypes["mininuke_act"]); + it->charges = time; it->active = true; return it->type->charges_to_use(); } -int iuse::mininuke_act(game *g, player *p, item *it, bool t) +int iuse::mininuke_act(player *p, item *it, bool t) { point pos = g->find_item(it); if (pos.x == -999 || pos.y == -999) { @@ -3922,7 +4062,7 @@ int iuse::mininuke_act(game *g, player *p, item *it, bool t) return 0; } -int iuse::pheromone(game *g, player *p, item *it, bool t) +int iuse::pheromone(player *p, item *it, bool t) { point pos(p->posx, p->posy); @@ -3960,13 +4100,13 @@ int iuse::pheromone(game *g, player *p, item *it, bool t) } -int iuse::portal(game *g, player *p, item *it, bool t) +int iuse::portal(player *p, item *it, bool t) { g->m.add_trap(p->posx + rng(-2, 2), p->posy + rng(-2, 2), tr_portal); return it->type->charges_to_use(); } -int iuse::manhack(game *g, player *p, item *it, bool t) +int iuse::manhack(player *p, item *it, bool t) { std::vector valid; // Valid spawn locations for (int x = p->posx - 1; x <= p->posx + 1; x++) { @@ -3993,7 +4133,7 @@ int iuse::manhack(game *g, player *p, item *it, bool t) return 1; } -int iuse::turret(game *g, player *p, item *it, bool t) +int iuse::turret(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Place the turret where?"), dirx, diry)) { @@ -4016,7 +4156,7 @@ int iuse::turret(game *g, player *p, item *it, bool t) return 1; } -int iuse::UPS_off(game *g, player *p, item *it, bool t) +int iuse::UPS_off(player *p, item *it, bool t) { if (it->charges == 0) { g->add_msg_if_player(p,_("The power supply's batteries are dead.")); @@ -4027,13 +4167,13 @@ int iuse::UPS_off(game *g, player *p, item *it, bool t) g->add_msg_if_player(p,_("Your light amp goggles power on.")); if (p->worn.size() && p->worn[0].type->is_power_armor()) g->add_msg_if_player(p, _("Your power armor engages.")); - it->make(g->itypes["UPS_on"]); + it->make(itypes["UPS_on"]); it->active = true; } return it->type->charges_to_use(); } -int iuse::UPS_on(game *g, player *p, item *it, bool t) +int iuse::UPS_on(player *p, item *it, bool t) { if (t) { // Normal use if (p->worn.size() && p->worn[0].type->is_power_armor() && @@ -4050,14 +4190,14 @@ int iuse::UPS_on(game *g, player *p, item *it, bool t) g->add_msg_if_player(p,_("The UPS powers off with a soft hum.")); if (p->worn.size() && p->worn[0].type->is_power_armor()) g->add_msg_if_player(p, _("Your power armor disengages.")); - it->make(g->itypes["UPS_off"]); + it->make(itypes["UPS_off"]); it->active = false; return 0; } return it->type->charges_to_use(); } -int iuse::adv_UPS_off(game *g, player *p, item *it, bool t) +int iuse::adv_UPS_off(player *p, item *it, bool t) { if (it->charges == 0) { g->add_msg_if_player(p,_("The power supply has depleted the plutonium.")); @@ -4069,13 +4209,13 @@ int iuse::adv_UPS_off(game *g, player *p, item *it, bool t) if (p->worn.size() && p->worn[0].type->is_power_armor()) { g->add_msg_if_player(p, _("Your power armor engages.")); } - it->make(g->itypes["adv_UPS_on"]); + it->make(itypes["adv_UPS_on"]); it->active = true; } return it->type->charges_to_use(); } -int iuse::adv_UPS_on(game *g, player *p, item *it, bool t) +int iuse::adv_UPS_on(player *p, item *it, bool t) { if (t) { // Normal use if (p->worn.size() && p->worn[0].type->is_power_armor() && @@ -4091,13 +4231,13 @@ int iuse::adv_UPS_on(game *g, player *p, item *it, bool t) g->add_msg_if_player(p,_("The advanced UPS powers off with a soft hum.")); if (p->worn.size() && p->worn[0].type->is_power_armor()) g->add_msg_if_player(p, _("Your power armor disengages.")); - it->make(g->itypes["adv_UPS_off"]); + it->make(itypes["adv_UPS_off"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::tazer(game *g, player *p, item *it, bool t) +int iuse::tazer(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Shock where?"),dirx,diry)){ @@ -4163,7 +4303,7 @@ int iuse::tazer(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::tazer2(game *g, player *p, item *it, bool t) +int iuse::tazer2(player *p, item *it, bool t) { if (it->charges >= 100) { @@ -4267,14 +4407,14 @@ int iuse::tazer2(game *g, player *p, item *it, bool t) return 0; } -int iuse::shocktonfa_off(game *g, player *p, item *it, bool t) +int iuse::shocktonfa_off(player *p, item *it, bool t) { int choice = menu(true, _("tactical tonfa"), _("Zap something"), _("Turn on light"), _("Cancel"), NULL); switch (choice) { case 1: { - return iuse::tazer2(g, p, it, t); + return iuse::tazer2(p, it, t); } break; @@ -4284,49 +4424,45 @@ int iuse::shocktonfa_off(game *g, player *p, item *it, bool t) return 0; } else { g->add_msg_if_player(p, _("You turn the light on.")); - it->make(g->itypes["shocktonfa_on"]); + it->make(itypes["shocktonfa_on"]); it->active = true; return it->type->charges_to_use(); } } - - default - : - return 0; } + return 0; } -int iuse::shocktonfa_on(game *g, player *p, item *it, bool t) +int iuse::shocktonfa_on(player *p, item *it, bool t) { if (t) { // Effects while simply on } else if (it->charges == 0) { g->add_msg_if_player(p, _("Your tactical tonfa is out of power")); - it->make(g->itypes["shocktonfa_off"]); + it->make(itypes["shocktonfa_off"]); it->active = false; } else { int choice = menu(true, _("tactical tonfa"), _("Zap something"), - _("turn off light"), _("cancel"), NULL); + _("Turn off light"), _("cancel"), NULL); switch (choice) { case 1: { - return iuse::tazer2(g, p, it, t); + return iuse::tazer2(p, it, t); } break; case 2: { g->add_msg_if_player(p, _("You turn off the light")); - it->make(g->itypes["shocktonfa_off"]); + it->make(itypes["shocktonfa_off"]); it->active = false; } } } - - return it->type->charges_to_use(); + return 0; } -int iuse::mp3(game *g, player *p, item *it, bool t) +int iuse::mp3(player *p, item *it, bool t) { if (it->charges == 0) g->add_msg_if_player(p,_("The mp3 player's batteries are dead.")); @@ -4334,13 +4470,13 @@ int iuse::mp3(game *g, player *p, item *it, bool t) g->add_msg_if_player(p,_("You are already listening to an mp3 player!")); else { g->add_msg_if_player(p,_("You put in the earbuds and start listening to music.")); - it->make(g->itypes["mp3_on"]); + it->make(itypes["mp3_on"]); it->active = true; } return it->type->charges_to_use(); } -int iuse::mp3_on(game *g, player *p, item *it, bool t) +int iuse::mp3_on(player *p, item *it, bool t) { if (t) { // Normal use if (!p->has_item(it) || p->has_disease("deaf") ) { @@ -4368,13 +4504,13 @@ int iuse::mp3_on(game *g, player *p, item *it, bool t) } } else { // Turning it off g->add_msg_if_player(p,_("The mp3 player turns off.")); - it->make(g->itypes["mp3"]); + it->make(itypes["mp3"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::portable_game(game *g, player *p, item *it, bool t) +int iuse::portable_game(player *p, item *it, bool t) { if(p->has_trait("ILLITERATE")) { g->add_msg(_("You're illiterate!")); @@ -4436,7 +4572,7 @@ int iuse::portable_game(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::vortex(game *g, player *p, item *it, bool t) +int iuse::vortex(player *p, item *it, bool t) { std::vector spawn; for (int i = -3; i <= 3; i++) { @@ -4451,21 +4587,21 @@ int iuse::vortex(game *g, player *p, item *it, bool t) } if (spawn.empty()) { g->add_msg_if_player(p,_("Air swirls around you for a moment.")); - it->make(g->itypes["spiral_stone"]); + it->make(itypes["spiral_stone"]); return it->type->charges_to_use(); } g->add_msg_if_player(p,_("Air swirls all over...")); int index = rng(0, spawn.size() - 1); p->moves -= 100; - it->make(g->itypes["spiral_stone"]); + it->make(itypes["spiral_stone"]); monster mvortex(GetMType("mon_vortex"), spawn[index].x, spawn[index].y); mvortex.friendly = -1; g->add_zombie(mvortex); return it->type->charges_to_use(); } -int iuse::dog_whistle(game *g, player *p, item *it, bool t) +int iuse::dog_whistle(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You blow your dog whistle.")); for (int i = 0; i < g->num_zombies(); i++) { @@ -4485,7 +4621,7 @@ int iuse::dog_whistle(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::vacutainer(game *g, player *p, item *it, bool t) +int iuse::vacutainer(player *p, item *it, bool t) { if (p->is_npc()) return 0; // No NPCs for now! @@ -4495,7 +4631,7 @@ int iuse::vacutainer(game *g, player *p, item *it, bool t) return 0; } - item blood(g->itypes["blood"], g->turn); + item blood(itypes["blood"], g->turn); bool drew_blood = false; for (int i = 0; i < g->m.i_at(p->posx, p->posy).size() && !drew_blood; i++) { item *map_it = &(g->m.i_at(p->posx, p->posy)[i]); @@ -4517,7 +4653,7 @@ int iuse::vacutainer(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::knife(game *g, player *p, item *it, bool t) +int iuse::knife(player *p, item *it, bool t) { int choice = -1; const int cut_fabric = 0; @@ -4573,7 +4709,7 @@ int iuse::knife(game *g, player *p, item *it, bool t) } if (choice == carve_writing) { - item_inscription( g, p, cut, _("Carve"), _("Carved"), true ); + item_inscription( p, cut, _("Carve"), _("Carved"), true ); return 0; } @@ -4591,8 +4727,8 @@ int iuse::knife(game *g, player *p, item *it, bool t) int count = amount; if ((cut->made_of("cotton") || cut->made_of("leather")) ) { - if (valid_fabric(g, p, cut, t)) { - cut_up(g, p, it, cut, t); + if (valid_fabric(p, cut, t)) { + cut_up(p, it, cut, t); } return it->type->charges_to_use(); } else if( cut->made_of(found_mat.c_str()) || @@ -4608,15 +4744,15 @@ int iuse::knife(game *g, player *p, item *it, bool t) } if ( found_mat == "plastic" ) { - result = new item(g->itypes["plastic_chunk"], int(g->turn), g->nextinv); + result = new item(itypes["plastic_chunk"], int(g->turn), g->nextinv); } else { - result = new item(g->itypes["kevlar_plate"], int(g->turn), g->nextinv); + result = new item(itypes["kevlar_plate"], int(g->turn), g->nextinv); } } else if (cut->made_of("wood")) { action = "carve"; count = 2 * amount; // twice the volume, i.e. 12 skewers from 2x4 and heavy stick just as before. - result = new item(g->itypes["skewer"], int(g->turn), g->nextinv); + result = new item(itypes["skewer"], int(g->turn), g->nextinv); } else { // TODO: add the rest of the materials, gold and what not. g->add_msg(_("Material of this item is not applicable for cutting up.")); return 0; @@ -4666,12 +4802,12 @@ int iuse::knife(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::cut_log_into_planks(game *g, player *p, item *it) +int iuse::cut_log_into_planks(player *p, item *it) { p->moves -= 300; g->add_msg(_("You cut the log into planks.")); - item plank(g->itypes["2x4"], int(g->turn), g->nextinv); - item scrap(g->itypes["splinter"], int(g->turn), g->nextinv); + item plank(itypes["2x4"], int(g->turn), g->nextinv); + item scrap(itypes["splinter"], int(g->turn), g->nextinv); bool drop = false; int planks = (rng(1, 3) + (p->skillLevel("carpentry") * 2)); int scraps = 12 - planks; @@ -4683,7 +4819,7 @@ int iuse::cut_log_into_planks(game *g, player *p, item *it) } for (int i = 0; i < planks; i++) { int iter = 0; - while (p->has_item(plank.invlet)) { + while (p->has_item(plank.invlet) && iter < inv_chars.size()) { plank.invlet = g->nextinv; g->advance_nextinv(); iter++; @@ -4699,7 +4835,7 @@ int iuse::cut_log_into_planks(game *g, player *p, item *it) } for (int i = 0; i < scraps; i++) { int iter = 0; - while (p->has_item(scrap.invlet)) { + while (p->has_item(scrap.invlet) && iter < inv_chars.size()) { scrap.invlet = g->nextinv; g->advance_nextinv(); iter++; @@ -4714,7 +4850,7 @@ int iuse::cut_log_into_planks(game *g, player *p, item *it) return it->type->charges_to_use(); } -int iuse::lumber(game *g, player *p, item *it, bool t) +int iuse::lumber(player *p, item *it, bool t) { char ch = g->inv(_("Cut up what?")); item* cut = &(p->i_at(ch)); @@ -4724,7 +4860,7 @@ int iuse::lumber(game *g, player *p, item *it, bool t) } if (cut->type->id == "log") { p->i_rem(ch); - cut_log_into_planks(g, p, it); + cut_log_into_planks(p, it); return it->type->charges_to_use(); } else { g->add_msg(_("You can't cut that up!")); @@ -4733,7 +4869,7 @@ int iuse::lumber(game *g, player *p, item *it, bool t) } -int iuse::hacksaw(game *g, player *p, item *it, bool t) +int iuse::hacksaw(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Cut up metal where?"), dirx, diry)) @@ -4750,8 +4886,8 @@ int iuse::hacksaw(game *g, player *p, item *it, bool t) p->moves -= 500; g->m.furn_set(dirx, diry, f_null); g->sound(dirx, diry, 15,_("grnd grnd grnd")); - g->m.spawn_item(p->posx, p->posy, "pipe", 0, rng(1, 3)); - g->m.spawn_item(p->posx, p->posy, "steel_chunk", 0); + g->m.spawn_item(p->posx, p->posy, "pipe", rng(1, 3)); + g->m.spawn_item(p->posx, p->posy, "steel_chunk"); return it->type->charges_to_use(); } @@ -4763,15 +4899,15 @@ int iuse::hacksaw(game *g, player *p, item *it, bool t) p->moves -= 500; g->m.ter_set(dirx, diry, t_dirt); g->sound(dirx, diry, 15,_("grnd grnd grnd")); - g->m.spawn_item(dirx, diry, "pipe", 0, 6); - g->m.spawn_item(dirx, diry, "wire", 0, 20); + g->m.spawn_item(dirx, diry, "pipe", 6); + g->m.spawn_item(dirx, diry, "wire", 20); break; case old_t_chainfence_posts: p->moves -= 500; g->m.ter_set(dirx, diry, t_dirt); g->sound(dirx, diry, 15,_("grnd grnd grnd")); - g->m.spawn_item(dirx, diry, "pipe", 0, 6); + g->m.spawn_item(dirx, diry, "pipe", 6); break; case old_t_bars: @@ -4781,12 +4917,12 @@ int iuse::hacksaw(game *g, player *p, item *it, bool t) g->m.ter_set(dirx, diry, t_sewage); p->moves -= 1000; g->sound(dirx, diry, 15,_("grnd grnd grnd")); - g->m.spawn_item(p->posx, p->posy, "pipe", 0, 3); + g->m.spawn_item(p->posx, p->posy, "pipe", 3); } else if (g->m.ter(p->posx, p->posy)){ g->m.ter_set(dirx, diry, t_floor); p->moves -= 500; g->sound(dirx, diry, 15,_("grnd grnd grnd")); - g->m.spawn_item(p->posx, p->posy, "pipe", 0, 3); + g->m.spawn_item(p->posx, p->posy, "pipe", 3); } break; @@ -4797,7 +4933,7 @@ int iuse::hacksaw(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::tent(game *g, player *p, item *it, bool t) +int iuse::tent(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Pitch the tent where?"), dirx, diry)) { @@ -4833,7 +4969,7 @@ int iuse::tent(game *g, player *p, item *it, bool t) return 1; } -int iuse::shelter(game *g, player *p, item *it, bool t) +int iuse::shelter(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Put up the shelter where?"), dirx, diry)) { @@ -4869,28 +5005,28 @@ int iuse::shelter(game *g, player *p, item *it, bool t) return 1; } -int iuse::torch(game *g, player *p, item *it, bool t) +int iuse::torch(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter or fire to light this.")); return 0; } else { g->add_msg_if_player(p,_("You light the torch.")); - it->make(g->itypes["torch_lit"]); + it->make(itypes["torch_lit"]); it->active = true; return it->type->charges_to_use(); } } -int iuse::torch_lit(game *g, player *p, item *it, bool t) +int iuse::torch_lit(player *p, item *it, bool t) { if (t) { if (it->charges == 0) { g->add_msg_if_player(p,_("The torch burns out.")); - it->make(g->itypes["torch_done"]); + it->make(itypes["torch_done"]); it->active = false; } } @@ -4906,17 +5042,17 @@ int iuse::torch_lit(game *g, player *p, item *it, bool t) { g->add_msg_if_player(p,_("The torch is extinguished")); it->charges -= 1; - it->make(g->itypes["torch"]); + it->make(itypes["torch"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); } } } @@ -4925,28 +5061,28 @@ int iuse::torch_lit(game *g, player *p, item *it, bool t) } -int iuse::battletorch(game *g, player *p, item *it, bool t) +int iuse::battletorch(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p,_("You need a lighter or fire to light this.")); return 0; } else { g->add_msg_if_player(p,_("You light the Louisville Slaughterer.")); - it->make(g->itypes["battletorch_lit"]); + it->make(itypes["battletorch_lit"]); it->active = true; return it->type->charges_to_use(); } } -int iuse::battletorch_lit(game *g, player *p, item *it, bool t) +int iuse::battletorch_lit(player *p, item *it, bool t) { if (t) { if (it->charges == 0) { g->add_msg_if_player(p,_("The Louisville Slaughterer burns out.")); - it->make(g->itypes["bat"]); + it->make(itypes["bat"]); it->active = false; } } @@ -4962,17 +5098,17 @@ int iuse::battletorch_lit(game *g, player *p, item *it, bool t) { g->add_msg_if_player(p,_("The Louisville Slaughterer is extinguished")); it->charges -= 1; - it->make(g->itypes["battletorch"]); + it->make(itypes["battletorch"]); it->active = false; } break; case 2: { int dirx, diry; - if (prep_firestarter_use(g, p, it, dirx, diry)) + if (prep_firestarter_use(p, it, dirx, diry)) { p->moves -= 5; - resolve_firestarter_use(g, p, it, dirx, diry); + resolve_firestarter_use(p, it, dirx, diry); } } } @@ -4981,33 +5117,33 @@ int iuse::battletorch_lit(game *g, player *p, item *it, bool t) } -int iuse::candle(game *g, player *p, item *it, bool t) +int iuse::candle(player *p, item *it, bool t) { if (!p->use_charges_if_avail("fire", 1)) { g->add_msg_if_player(p, _("You need a lighter to light this.")); return 0; } else { g->add_msg_if_player(p, _("You light the candle.")); - it->make(g->itypes["candle_lit"]); + it->make(itypes["candle_lit"]); it->active = true; return it->type->charges_to_use(); } } -int iuse::candle_lit(game *g, player *p, item *it, bool t) +int iuse::candle_lit(player *p, item *it, bool t) { if (t) { // Normal use // Do nothing... player::active_light and the lightmap::generate deal with this } else { // Turning it off g->add_msg_if_player(p,_("The candle winks out")); - it->make(g->itypes["candle"]); + it->make(itypes["candle"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::bullet_puller(game *g, player *p, item *it, bool t) +int iuse::bullet_puller(player *p, item *it, bool t) { char ch = g->inv(_("Disassemble what?")); item* pull = &(p->i_at(ch)); @@ -5030,177 +5166,177 @@ int iuse::bullet_puller(game *g, player *p, item *it, bool t) item lead; if (pull->type->id == "556_incendiary" || pull->type->id == "3006_incendiary" || pull->type->id == "762_51_incendiary") { - lead.make(g->itypes["incendiary"]); + lead.make(itypes["incendiary"]); } else { - lead.make(g->itypes["lead"]); + lead.make(itypes["lead"]); } if (pull->type->id == "shot_bird") { - casing.make(g->itypes["shot_hull"]); - primer.make(g->itypes["shotgun_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["shot_hull"]); + primer.make(itypes["shotgun_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 12*multiply; lead.charges = 16*multiply; } else if (pull->type->id == "shot_00" || pull->type->id == "shot_slug") { - casing.make(g->itypes["shot_hull"]); - primer.make(g->itypes["shotgun_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["shot_hull"]); + primer.make(itypes["shotgun_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 20*multiply; lead.charges = 16*multiply; } else if (pull->type->id == "22_lr" || pull->type->id == "22_ratshot") { - casing.make(g->itypes["22_casing"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["22_casing"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 2*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "22_cb") { - casing.make(g->itypes["22_casing"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["22_casing"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 1*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "9mm") { - casing.make(g->itypes["9mm_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["9mm_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 4*multiply; lead.charges = 4*multiply; } else if (pull->type->id == "9mmP") { - casing.make(g->itypes["9mm_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["9mm_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 5*multiply; lead.charges = 4*multiply; } else if (pull->type->id == "9mmP2") { - casing.make(g->itypes["9mm_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["9mm_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 6*multiply; lead.charges = 4*multiply; } else if (pull->type->id == "38_special") { - casing.make(g->itypes["38_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["38_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 5*multiply; lead.charges = 5*multiply; } else if (pull->type->id == "38_super") { - casing.make(g->itypes["38_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["38_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 7*multiply; lead.charges = 5*multiply; } else if (pull->type->id == "10mm") { - casing.make(g->itypes["40_casing"]); - primer.make(g->itypes["lgpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["40_casing"]); + primer.make(itypes["lgpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 8*multiply; lead.charges = 8*multiply; } else if (pull->type->id == "40sw") { - casing.make(g->itypes["40_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["40_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 6*multiply; lead.charges = 6*multiply; } else if (pull->type->id == "44magnum") { - casing.make(g->itypes["44_casing"]); - primer.make(g->itypes["lgpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["44_casing"]); + primer.make(itypes["lgpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 10*multiply; lead.charges = 10*multiply; } else if (pull->type->id == "45_acp" || pull->type->id == "45_jhp") { - casing.make(g->itypes["45_casing"]); - primer.make(g->itypes["lgpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["45_casing"]); + primer.make(itypes["lgpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 10*multiply; lead.charges = 8*multiply; } else if (pull->type->id == "45_super") { - casing.make(g->itypes["45_casing"]); - primer.make(g->itypes["lgpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["45_casing"]); + primer.make(itypes["lgpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 12*multiply; lead.charges = 10*multiply; } else if (pull->type->id == "454_Casull") { - casing.make(g->itypes["454_casing"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["454_casing"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 20*multiply; lead.charges = 20*multiply; } else if (pull->type->id == "500_Magnum") { - casing.make(g->itypes["500_casing"]); - primer.make(g->itypes["lgpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["500_casing"]); + primer.make(itypes["lgpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 24*multiply; lead.charges = 24*multiply; } else if (pull->type->id == "57mm") { - casing.make(g->itypes["57mm_casing"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["57mm_casing"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 4*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "46mm") { - casing.make(g->itypes["46mm_casing"]); - primer.make(g->itypes["smpistol_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["46mm_casing"]); + primer.make(itypes["smpistol_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 4*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "762_m43") { - casing.make(g->itypes["762_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["762_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 7*multiply; lead.charges = 5*multiply; } else if (pull->type->id == "762_m87") { - casing.make(g->itypes["762_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["762_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 8*multiply; lead.charges = 5*multiply; } else if (pull->type->id == "223") { - casing.make(g->itypes["223_casing"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["223_casing"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 4*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "556" || pull->type->id == "556_incendiary") { - casing.make(g->itypes["223_casing"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["223_casing"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 6*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "270") { - casing.make(g->itypes["3006_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["3006_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 10*multiply; lead.charges = 5*multiply; } else if (pull->type->id == "3006" || pull->type->id == "3006_incendiary") { - casing.make(g->itypes["3006_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["3006_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 8*multiply; lead.charges = 6*multiply; } else if (pull->type->id == "308") { - casing.make(g->itypes["308_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["308_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 10*multiply; lead.charges = 6*multiply; } else if (pull->type->id == "762_51" || pull->type->id == "762_51_incendiary") { - casing.make(g->itypes["308_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["308_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 10*multiply; lead.charges = 6*multiply; } else if (pull->type->id == "5x50" || pull->type->id == "5x50dart") { - casing.make(g->itypes["5x50_hull"]); - primer.make(g->itypes["smrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["5x50_hull"]); + primer.make(itypes["smrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 3*multiply; lead.charges = 2*multiply; } else if (pull->type->id == "50") { - casing.make(g->itypes["50_casing"]); - primer.make(g->itypes["lgrifle_primer"]); - gunpowder.make(g->itypes["gunpowder"]); + casing.make(itypes["50_casing"]); + primer.make(itypes["lgrifle_primer"]); + gunpowder.make(itypes["gunpowder"]); gunpowder.charges = 45*multiply; lead.charges = 21*multiply; } else { @@ -5271,7 +5407,7 @@ int iuse::bullet_puller(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::boltcutters(game *g, player *p, item *it, bool t) +int iuse::boltcutters(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Cut up metal where?"),dirx,diry)) { @@ -5286,12 +5422,12 @@ if (dirx == p->posx && diry == p->posy) { p->moves -= 100; g->m.ter_set(dirx, diry, t_chaingate_c); g->sound(dirx, diry, 5, _("Gachunk!")); - g->m.spawn_item(p->posx, p->posy, "scrap", 0, 3); + g->m.spawn_item(p->posx, p->posy, "scrap", 3); } else if (g->m.ter(dirx, diry) == t_chainfence_v || g->m.ter(dirx, diry) == t_chainfence_h) { p->moves -= 500; g->m.ter_set(dirx, diry, t_chainfence_posts); g->sound(dirx, diry, 5,_("Snick, snick, gachunk!")); - g->m.spawn_item(dirx, diry, "wire", 0, 20); + g->m.spawn_item(dirx, diry, "wire", 20); } else { g->add_msg(_("You can't cut that.")); return 0; @@ -5299,7 +5435,7 @@ if (dirx == p->posx && diry == p->posy) { return it->type->charges_to_use(); } -int iuse::mop(game *g, player *p, item *it, bool t) +int iuse::mop(player *p, item *it, bool t) { int dirx, diry; if(!g->choose_adjacent(_("Mop where?"),dirx,diry)) { @@ -5322,12 +5458,12 @@ int iuse::mop(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::rag(game *g, player *p, item *it, bool t) +int iuse::rag(player *p, item *it, bool t) { if (p->has_disease("bleed")){ - if (use_healing_item(g, p, it, 0, 0, 0, it->name, 50, 0, 0, false) != num_hp_parts) { + if (use_healing_item(p, it, 0, 0, 0, it->name, 50, 0, 0, false) != num_hp_parts) { p->use_charges("rag", 1); - it->make(g->itypes["rag_bloody"]); + it->make(itypes["rag_bloody"]); } return 0; } else { @@ -5337,45 +5473,45 @@ int iuse::rag(game *g, player *p, item *it, bool t) } } -int iuse::pda(game *g, player *p, item *it, bool t) +int iuse::pda(player *p, item *it, bool t) { if (it->charges == 0) { g->add_msg_if_player(p,_("The PDA's batteries are dead.")); return 0; } else { g->add_msg_if_player(p,_("You activate the flashlight app.")); - it->make(g->itypes["pda_flashlight"]); + it->make(itypes["pda_flashlight"]); it->active = true; return it->type->charges_to_use(); } } -int iuse::pda_flashlight(game *g, player *p, item *it, bool t) +int iuse::pda_flashlight(player *p, item *it, bool t) { if (t) { // Normal use // Do nothing... player::active_light and the lightmap::generate deal with this } else { // Turning it off g->add_msg_if_player(p,_("The PDA screen goes blank.")); - it->make(g->itypes["pda"]); + it->make(itypes["pda"]); it->active = false; } return it->type->charges_to_use(); } -int iuse::LAW(game *g, player *p, item *it, bool t) +int iuse::LAW(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You pull the activating lever, readying the LAW to fire.")); - it->make(g->itypes["LAW"]); + it->make(itypes["LAW"]); it->charges++; // When converting a tool to a gun, you need to set the current ammo type, this is usually done when a gun is reloaded. - it->curammo = dynamic_cast(g->itypes["66mm_HEAT"]); + it->curammo = dynamic_cast(itypes["66mm_HEAT"]); return it->type->charges_to_use(); } /* MACGUFFIN FUNCTIONS * These functions should refer to it->associated_mission for the particulars */ -int iuse::mcg_note(game *g, player *p, item *it, bool t) +int iuse::mcg_note(player *p, item *it, bool t) { std::stringstream message; message << "Dear " << it->name << ":\n"; @@ -5422,7 +5558,7 @@ you can, I need to know you're alright."; return 0; } -int iuse::artifact(game *g, player *p, item *it, bool t) +int iuse::artifact(player *p, item *it, bool t) { if (!it->is_artifact()) { debugmsg("iuse::artifact called on a non-artifact item! %s", @@ -5577,7 +5713,7 @@ int iuse::artifact(game *g, player *p, item *it, bool t) case AEA_BUGS: { int roll = rng(1, 10); - mon_id bug = mon_null; + std::string bug = "mon_null"; int num = 0; std::vector empty; for (int x = p->posx - 1; x <= p->posx + 1; x++) { @@ -5590,19 +5726,19 @@ int iuse::artifact(game *g, player *p, item *it, bool t) g->add_msg_if_player(p,_("Flies buzz around you.")); else if (roll <= 7) { g->add_msg_if_player(p,_("Giant flies appear!")); - bug = mon_fly; + bug = "mon_fly"; num = rng(2, 4); } else if (roll <= 9) { g->add_msg_if_player(p,_("Giant bees appear!")); - bug = mon_bee; + bug = "mon_bee"; num = rng(1, 3); } else { g->add_msg_if_player(p,_("Giant wasps appear!")); - bug = mon_wasp; + bug = "mon_wasp"; num = rng(1, 2); } - if (bug != mon_null) { - monster spawned(GetMType("bug")); + if (bug != "mon_null") { + monster spawned(GetMType(bug)); spawned.friendly = -1; for (int j = 0; j < num && !empty.empty(); j++) { int index_inner = rng(0, empty.size() - 1); @@ -5626,7 +5762,7 @@ int iuse::artifact(game *g, player *p, item *it, bool t) case AEA_GROWTH: { monster tmptriffid(GetMType("mon_null"), p->posx, p->posy); mattack tmpattack; - tmpattack.growplants(g, &tmptriffid); + tmpattack.growplants(&tmptriffid); } break; case AEA_HURTALL: @@ -5738,7 +5874,7 @@ int iuse::artifact(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::spray_can(game *g, player *p, item *it, bool t) +int iuse::spray_can(player *p, item *it, bool t) { if ( it->type->id == _("permanent_marker") ) { @@ -5747,7 +5883,7 @@ int iuse::spray_can(game *g, player *p, item *it, bool t) if (ret == 2 ) { // inscribe_item returns false if the action fails or is canceled somehow. - bool canceled_inscription = !inscribe_item( g, p, _("Write"), _("Written"), false ); + bool canceled_inscription = !inscribe_item( p, _("Write"), _("Written"), false ); if( canceled_inscription ) { return 0; @@ -5770,7 +5906,7 @@ int iuse::spray_can(game *g, player *p, item *it, bool t) } else { - if(g->m.add_graffiti(g, p->posx, p->posy, message)) + if(g->m.add_graffiti(p->posx, p->posy, message)) { g->add_msg( ismarker? @@ -5796,7 +5932,7 @@ int iuse::spray_can(game *g, player *p, item *it, bool t) * Heats up a food item. * @return 1 if an item was heated, false if nothing was heated. */ -static bool heat_item(game *g, player *p) +static bool heat_item(player *p) { char ch = g->inv(_("Heat up what?")); item* heat = &(p->i_at(ch)); @@ -5817,15 +5953,15 @@ static bool heat_item(game *g, player *p) return false; } -int iuse::heatpack(game *g, player *p, item *it, bool t) +int iuse::heatpack(player *p, item *it, bool t) { - if(heat_item(g, p)) { - it->make(g->itypes["heatpack_used"]); + if(heat_item(p)) { + it->make(itypes["heatpack_used"]); } return 0; } -int iuse::hotplate(game *g, player *p, item *it, bool t) +int iuse::hotplate(player *p, item *it, bool t) { if(it->charges == 0) { g->add_msg_if_player(p, _("The %s's batteries are dead."), it->name.c_str()); @@ -5839,16 +5975,16 @@ int iuse::hotplate(game *g, player *p, item *it, bool t) } if(choice == 1) { - if(heat_item(g, p)) { + if(heat_item(p)) { return it->type->charges_to_use(); } } else if(choice == 2) { - return cauterize_elec(g, p, it); + return cauterize_elec(p, it); } return 0; } -int iuse::dejar(game *g, player *p, item *it, bool t) +int iuse::dejar(player *p, item *it, bool t) { if( (it->type->id).substr(0,4) == "jar_" ) { g->add_msg_if_player(p,_("You open the jar, exposing it to the atmosphere.")); @@ -5862,25 +5998,25 @@ int iuse::dejar(game *g, player *p, item *it, bool t) // Strips off "jar_" or "bag_" from the id to get the content type. itype_id ujfood = (it->type->id).substr(4); // temp create item to discover container - item ujitem( g->itypes[ujfood], 0 ); + item ujitem( itypes[ujfood], 0 ); //discovering container itype_id ujcont = (dynamic_cast(ujitem.type))->container; //turning "sealed jar of xxx" into container for "xxx" - it->make( g->itypes[ujcont] ); + it->make( itypes[ujcont] ); //shoving the "xxx" into the container - it->contents.push_back( item( g->itypes[ujfood], 0 ) ); + it->contents.push_back( item( itypes[ujfood], 0 ) ); it->contents[0].bday = g->turn + 3600 - (g->turn % 3600); return it->type->charges_to_use(); } -int iuse::rad_badge(game *g, player *p, item *it, bool t) +int iuse::rad_badge(player *p, item *it, bool t) { g->add_msg_if_player(p,_("You remove the badge from its wrapper, exposing it to ambient radiation.")); - it->make(g->itypes["rad_badge"]); + it->make(itypes["rad_badge"]); return 0; } -int iuse::boots(game *g, player *p, item *it, bool t) +int iuse::boots(player *p, item *it, bool t) { int choice = -1; if (it->contents.size() == 0) @@ -5922,7 +6058,7 @@ int iuse::boots(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::towel(game *g, player *p, item *it, bool t) +int iuse::towel(player *p, item *it, bool t) { // check if player is wet if( abs(p->has_morale(MORALE_WET)) ) @@ -5937,7 +6073,7 @@ int iuse::towel(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int iuse::unfold_bicycle(game *g, player *p, item *it, bool t) +int iuse::unfold_bicycle(player *p, item *it, bool t) { vehicle *bicycle = g->m.add_vehicle( g, "bicycle", p->posx, p->posy, 0, 0, 0, false); if( bicycle ) { @@ -5961,12 +6097,12 @@ int iuse::unfold_bicycle(game *g, player *p, item *it, bool t) return 1; } -int iuse::adrenaline_injector(game *g, player *p, item *it, bool t) +int iuse::adrenaline_injector(player *p, item *it, bool t) { p->moves -= 100; g->add_msg_if_player(p, "You inject yourself with adrenaline."); - p->inv.add_item_by_type(g->itypes["syringe"]->id); + p->inv.add_item_by_type(itypes["syringe"]->id); if(p->has_disease("adrenaline")) { //Increase current surge by 3 minutes (if not on comedown) p->add_disease("adrenaline", 30); @@ -5984,7 +6120,24 @@ int iuse::adrenaline_injector(game *g, player *p, item *it, bool t) return it->type->charges_to_use(); } -int use_function::call(game* g,player* p,item* i,bool b) { - iuse use; - return (use.*this->cpp_function)(g, p, i, b); +int iuse::talking_doll(player *p, item *it, bool t) +{ + if(it->charges == 0) { + g->add_msg_if_player(p, _("The %s's batteries are dead."), it->name.c_str()); + return 0; + } + + std::string label; + + if( it->type->id == "talking_doll" ) { + label = "doll"; + } else { + label = "creepy_doll"; + } + + const SpeechBubble speech = get_speech( label ); + + g->sound( p->posx, p->posy, speech.volume, speech.text ); + + return it->type->charges_to_use(); } diff --git a/src/iuse.h b/src/iuse.h new file mode 100644 index 0000000000000..a4cf8281dae24 --- /dev/null +++ b/src/iuse.h @@ -0,0 +1,242 @@ +#ifndef _IUSE_H_ +#define _IUSE_H_ + +class item; +class player; + +// iuse methods returning a bool indicating whether to consume a charge of the item being used. +class iuse +{ + public: + int none (player *p, item *it, bool t); + +// FOOD AND DRUGS (ADMINISTRATION) + int sewage (player *p, item *it, bool t); + int honeycomb (player *p, item *it, bool t); + int royal_jelly (player *p, item *it, bool t); + int bandage (player *p, item *it, bool t); + int firstaid (player *p, item *it, bool t); + int disinfectant (player *p, item *it, bool t); + int caff (player *p, item *it, bool t); + int atomic_caff (player *p, item *it, bool t); + int alcohol (player *p, item *it, bool t); + int alcohol_weak (player *p, item *it, bool t); + int pkill (player *p, item *it, bool t); + int xanax (player *p, item *it, bool t); + int cig (player *p, item *it, bool t); + int antibiotic (player *p, item *it, bool t); + int fungicide (player *p, item *it, bool t); + int weed (player *p, item *it, bool t); + int coke (player *p, item *it, bool t); + int crack (player *p, item *it, bool t); + int grack (player *p, item *it, bool t); + int meth (player *p, item *it, bool t); + int vitamins (player *p, item *it, bool t); + int vaccine (player *p, item *it, bool t); + int poison (player *p, item *it, bool t); + int hallu (player *p, item *it, bool t); + int thorazine (player *p, item *it, bool t); + int prozac (player *p, item *it, bool t); + int sleep (player *p, item *it, bool t); + int iodine (player *p, item *it, bool t); + int flumed (player *p, item *it, bool t); + int flusleep (player *p, item *it, bool t); + int inhaler (player *p, item *it, bool t); + int blech (player *p, item *it, bool t); + int chew (player *p, item *it, bool t); + int mutagen (player *p, item *it, bool t); + int purifier (player *p, item *it, bool t); + int marloss (player *p, item *it, bool t); + int dogfood (player *p, item *it, bool t); + int catfood (player *p, item *it, bool t); + +// TOOLS + int lighter (player *p, item *it, bool t); + int primitive_fire (player *p, item *it, bool t); + int sew (player *p, item *it, bool t); + int extra_battery (player *p, item *it, bool t); + int cut_up (player *p, item *it, item *cut, bool t); + int scissors (player *p, item *it, bool t); + int extinguisher (player *p, item *it, bool t); + int hammer (player *p, item *it, bool t); + int light_off (player *p, item *it, bool t); + int light_on (player *p, item *it, bool t); + int gasoline_lantern_off (player *p, item *it, bool t); + int gasoline_lantern_on (player *p, item *it, bool t); + int lightstrip (player *p, item *it, bool t); + int lightstrip_active(player *p, item *it, bool t); + int glowstick (player *p, item *it, bool t); + int glowstick_active (player *p, item *it, bool t); + int solder_weld (player *p, item *it, bool t); + int water_purifier (player *p, item *it, bool t); + int two_way_radio (player *p, item *it, bool t); + int directional_antenna (player *p, item *it, bool t); + int radio_off (player *p, item *it, bool t); + int radio_on (player *p, item *it, bool t); + int horn_bicycle (player *p, item *it, bool t); + int noise_emitter_off(player *p, item *it, bool t); + int noise_emitter_on (player *p, item *it, bool t); + int roadmap (player *p, item *it, bool t); + int survivormap (player *p, item *it, bool t); + int militarymap (player *p, item *it, bool t); + int restaurantmap (player *p, item *it, bool t); + int touristmap (player *p, item *it, bool t); + int picklock (player *p, item *it, bool t); + int crowbar (player *p, item *it, bool t); + int makemound (player *p, item *it, bool t); + int dig (player *p, item *it, bool t); + int siphon (player *p, item *it, bool t); + int chainsaw_off (player *p, item *it, bool t); + int chainsaw_on (player *p, item *it, bool t); + int shishkebab_off (player *p, item *it, bool t); + int shishkebab_on (player *p, item *it, bool t); + int firemachete_off (player *p, item *it, bool t); + int firemachete_on (player *p, item *it, bool t); + int broadfire_off (player *p, item *it, bool t); + int broadfire_on (player *p, item *it, bool t); + int firekatana_off (player *p, item *it, bool t); + int firekatana_on (player *p, item *it, bool t); + int zweifire_off (player *p, item *it, bool t); + int zweifire_on (player *p, item *it, bool t); + int jackhammer (player *p, item *it, bool t); + int jacqueshammer (player *p, item *it, bool t); + int pickaxe (player *p, item *it, bool t); + int set_trap (player *p, item *it, bool t); + int geiger (player *p, item *it, bool t); + int teleport (player *p, item *it, bool t); + int can_goo (player *p, item *it, bool t); + int pipebomb (player *p, item *it, bool t); + int pipebomb_act (player *p, item *it, bool t); + int grenade (player *p, item *it, bool t); + int grenade_act (player *p, item *it, bool t); + int granade (player *p, item *it, bool t); + int granade_act (player *p, item *it, bool t); + int flashbang (player *p, item *it, bool t); + int flashbang_act (player *p, item *it, bool t); + int c4 (player *p, item *it, bool t); + int c4armed (player *p, item *it, bool t); + int EMPbomb (player *p, item *it, bool t); + int EMPbomb_act (player *p, item *it, bool t); + int scrambler (player *p, item *it, bool t); + int scrambler_act (player *p, item *it, bool t); + int gasbomb (player *p, item *it, bool t); + int gasbomb_act (player *p, item *it, bool t); + int smokebomb (player *p, item *it, bool t); + int smokebomb_act (player *p, item *it, bool t); + int acidbomb (player *p, item *it, bool t); + int arrow_flamable (player *p, item *it, bool t); + int acidbomb_act (player *p, item *it, bool t); + int molotov (player *p, item *it, bool t); + int molotov_lit (player *p, item *it, bool t); + int matchbomb (player *p, item *it, bool t); + int matchbomb_act (player *p, item *it, bool t); + int dynamite (player *p, item *it, bool t); + int dynamite_act (player *p, item *it, bool t); + int firecracker_pack (player *p, item *it, bool t); + int firecracker_pack_act (player *p, item *it, bool t); + int firecracker (player *p, item *it, bool t); + int firecracker_act (player *p, item *it, bool t); + int mininuke (player *p, item *it, bool t); + int mininuke_act (player *p, item *it, bool t); + int pheromone (player *p, item *it, bool t); + int portal (player *p, item *it, bool t); + int manhack (player *p, item *it, bool t); + int turret (player *p, item *it, bool t); + int UPS_off (player *p, item *it, bool t); + int UPS_on (player *p, item *it, bool t); + int adv_UPS_off (player *p, item *it, bool t); + int adv_UPS_on (player *p, item *it, bool t); + int tazer (player *p, item *it, bool t); + int tazer2 (player *p, item *it, bool t); + int shocktonfa_off (player *p, item *it, bool t); + int shocktonfa_on (player *p, item *it, bool t); + int mp3 (player *p, item *it, bool t); + int mp3_on (player *p, item *it, bool t); + int portable_game (player *p, item *it, bool t); + int vortex (player *p, item *it, bool t); + int dog_whistle (player *p, item *it, bool t); + int vacutainer (player *p, item *it, bool t); + int knife (player *p, item *it, bool t); + static int cut_log_into_planks(player *p, item *it); + int lumber (player *p, item *it, bool t); + int hacksaw (player *p, item *it, bool t); + int tent (player *p, item *it, bool t); + int shelter (player *p, item *it, bool t); + int torch (player *p, item *it, bool t); + int torch_lit (player *p, item *it, bool t); + int handflare (player *p, item *it, bool t); + int handflare_lit (player *p, item *it, bool t); + int battletorch (player *p, item *it, bool t); + int battletorch_lit (player *p, item *it, bool t); + int candle (player *p, item *it, bool t); + int candle_lit (player *p, item *it, bool t); + int bullet_puller (player *p, item *it, bool t); + int boltcutters (player *p, item *it, bool t); + int mop (player *p, item *it, bool t); + int spray_can (player *p, item *it, bool t); + int rag (player *p, item *it, bool t); + int pda (player *p, item *it, bool t); + int pda_flashlight (player *p, item *it, bool t); + int LAW (player *p, item *it, bool t); + int heatpack (player *p, item *it, bool t); + int hotplate (player *p, item *it, bool t); + int dejar (player *p, item *it, bool t); + int rad_badge (player *p, item *it, bool t); + int boots (player *p, item *it, bool t); + int towel (player *p, item *it, bool t); + int unfold_bicycle (player *p, item *it, bool t); + int airhorn (player *p, item *it, bool t); + int adrenaline_injector (player *p, item *it, bool t); + int talking_doll (player *p, item *it, bool t); +// MACGUFFINS + int mcg_note (player *p, item *it, bool t); +// ARTIFACTS +// This function is used when an artifact is activated +// It examines the item's artifact-specific properties +// See artifact.h for a list + int artifact (player *p, item *it, bool t); +}; + + +typedef int (iuse::*use_function_pointer)(player*,item*,bool); + +enum use_function_t { + USE_FUNCTION_CPP, + USE_FUNCTION_LUA +}; + +struct use_function { + use_function_t function_type; + + union { + use_function_pointer cpp_function; + int lua_function; + }; + + use_function() : function_type(USE_FUNCTION_CPP) {}; + + use_function(use_function_pointer f) + : function_type(USE_FUNCTION_CPP), cpp_function(f) + { }; + + use_function(int f) + : function_type(USE_FUNCTION_LUA), lua_function(f) + { }; + + int call(player*,item*,bool); + + void operator=(use_function_pointer f) { + cpp_function = f; + } + + bool operator==(use_function_pointer f) const { + return (function_type == USE_FUNCTION_CPP) && (f == cpp_function); + } + + bool operator!=(use_function_pointer f) const { + return !(this->operator==(f)); + } +}; + + +#endif diff --git a/iuse_software.cpp b/src/iuse_software.cpp similarity index 100% rename from iuse_software.cpp rename to src/iuse_software.cpp diff --git a/iuse_software.h b/src/iuse_software.h similarity index 100% rename from iuse_software.h rename to src/iuse_software.h diff --git a/iuse_software_kitten.cpp b/src/iuse_software_kitten.cpp similarity index 100% rename from iuse_software_kitten.cpp rename to src/iuse_software_kitten.cpp diff --git a/iuse_software_kitten.h b/src/iuse_software_kitten.h similarity index 100% rename from iuse_software_kitten.h rename to src/iuse_software_kitten.h diff --git a/iuse_software_snake.cpp b/src/iuse_software_snake.cpp similarity index 100% rename from iuse_software_snake.cpp rename to src/iuse_software_snake.cpp diff --git a/iuse_software_snake.h b/src/iuse_software_snake.h similarity index 100% rename from iuse_software_snake.h rename to src/iuse_software_snake.h diff --git a/iuse_software_sokoban.cpp b/src/iuse_software_sokoban.cpp similarity index 100% rename from iuse_software_sokoban.cpp rename to src/iuse_software_sokoban.cpp diff --git a/iuse_software_sokoban.h b/src/iuse_software_sokoban.h similarity index 100% rename from iuse_software_sokoban.h rename to src/iuse_software_sokoban.h diff --git a/json.cpp b/src/json.cpp similarity index 57% rename from json.cpp rename to src/json.cpp index 0f62bdc4bc302..6869a2309369b 100644 --- a/json.cpp +++ b/src/json.cpp @@ -11,7 +11,7 @@ #include #include #include -#define STRICT_JSON true +#include // ensure user's locale doesn't interfere with output /* JSON parsing and serialization tools for Cataclysm-DDA * ~ @@ -63,8 +63,7 @@ bool is_whitespace(char ch) { - // TODO: this is not an exhaustive list of valid whitespace characters. - // it should probably be with the other utf8 processing functions as well. + // These are all the valid whitespace characters allowed by RFC 4627. if (ch == ' ' || ch == '\n' || ch == '\t' || ch == '\r') { return true; } else { @@ -79,30 +78,18 @@ bool is_whitespace(char ch) */ JsonObject::JsonObject(JsonIn *j) : positions() { - strict = STRICT_JSON; jsin = j; start = jsin->tell(); // cache the position of the value for each member jsin->start_object(); - bool gotsep = true; - bool lastsep = false; while (!jsin->end_object()) { std::string n = jsin->get_member_name(); int p = jsin->tell(); positions[n] = p; - if ( strict && ! gotsep ) { - end = jsin->tell(); - jsin->seek(start); - throw jsin->line_number() + ": missing comma: " + dump_input(); - } - gotsep = jsin->skip_value(); - lastsep = gotsep; + jsin->skip_value(); } end = jsin->tell(); - if ( strict && lastsep ) { - jsin->seek(start); - throw jsin->line_number() + ": trailing comma: " + dump_input(); - } + final_separator = jsin->get_ate_separator(); } JsonObject::JsonObject(const JsonObject &jo) @@ -111,23 +98,31 @@ JsonObject::JsonObject(const JsonObject &jo) start = jo.start; positions = jo.positions; end = jo.end; - strict = jo.strict; + final_separator = jo.final_separator; } void JsonObject::finish() { - jsin->seek(end); + if (jsin && jsin->good()) { + jsin->seek(end); + jsin->set_ate_separator(final_separator); + } } +size_t JsonObject::size() { return positions.size(); } +bool JsonObject::empty() { return positions.empty(); } + int JsonObject::verify_position(const std::string &name, const bool throw_exception) { int pos = positions[name]; // initialized to 0 if it doesn't exist if (pos > start) { return pos; + } else if (throw_exception && !jsin) { + throw (std::string)"member lookup on empty object: " + name; } else if (throw_exception) { jsin->seek(start); - throw jsin->line_number() + ": member not found: " + name; + jsin->error("member not found: " + name); } // 0 is always the opening brace, // so it will never indicate a valid member position @@ -139,12 +134,41 @@ bool JsonObject::has_member(const std::string &name) return (bool)verify_position(name, false); } +std::set JsonObject::get_member_names() +{ + std::set ret; + for (std::map::iterator it = positions.begin(); + it != positions.end(); ++it) { + ret.insert(it->first); + } + return ret; +} + std::string JsonObject::line_number() { jsin->seek(start); return jsin->line_number(); } +std::string JsonObject::str() +{ + if (jsin) { + return jsin->substr(start,end-start); + } else { + return "{}"; + } +} + +JsonIn* JsonObject::get_raw(const std::string &name) +{ + int pos = verify_position(name); + jsin->seek(pos); + return jsin; +} + + +/* returning values by name */ + bool JsonObject::get_bool(const std::string &name) { int pos = verify_position(name); @@ -213,6 +237,8 @@ std::string JsonObject::get_string(const std::string &name, const std::string &f return jsin->get_string(); } +/* returning containers by name */ + JsonArray JsonObject::get_array(const std::string &name) { int pos = positions[name]; @@ -223,9 +249,32 @@ JsonArray JsonObject::get_array(const std::string &name) return JsonArray(jsin); } +std::vector JsonObject::get_int_array(const std::string &name) +{ + JsonArray ja = get_array(name); + std::vector ret; + while (ja.has_more()) { + ret.push_back(ja.next_int()); + } + return ret; +} + +std::vector JsonObject::get_string_array(const std::string &name) +{ + JsonArray ja = get_array(name); + std::vector ret; + while (ja.has_more()) { + ret.push_back(ja.next_string()); + } + return ret; +} + JsonObject JsonObject::get_object(const std::string &name) { - int pos = verify_position(name); + int pos = positions[name]; + if (pos <= start) { + return JsonObject(); // empty object + } jsin->seek(pos); return jsin->get_object(); } @@ -251,6 +300,8 @@ std::set JsonObject::get_tags(const std::string &name) return ret; } +/* non-fatal member existence and type testing */ + bool JsonObject::has_null(const std::string &name) { int pos = verify_position(name, false); @@ -342,46 +393,98 @@ bool JsonObject::has_object(const std::string &name) return false; } -std::string JsonObject::dump_input() { - int origpos = jsin->tell(); - jsin->seek(start); - jsin->eat_whitespace(); - int len = end - jsin->tell(); - std::string ret; - ret.resize(len); - jsin->read(&ret[0],len); - jsin->seek(origpos); - return ret; +/* non-fatal value setting by reference */ + +bool JsonObject::read_into(const std::string &name, bool &b) +{ + if (!has_bool(name)) { + return false; + } + b = get_bool(name); + return true; +} + +bool JsonObject::read_into(const std::string &name, int &i) +{ + if (!has_number(name)) { + return false; + } + i = get_int(name); + return true; } + +bool JsonObject::read_into(const std::string &name, unsigned int &u) +{ + if (!has_number(name)) { + return false; + } + u = get_int(name); + return true; +} + +bool JsonObject::read_into(const std::string &name, float &f) +{ + if (!has_number(name)) { + return false; + } + f = get_float(name); + return true; +} + +bool JsonObject::read_into(const std::string &name, double &d) +{ + if (!has_number(name)) { + return false; + } + d = get_float(name); + return true; +} + +bool JsonObject::read_into(const std::string &name, std::string &s) +{ + if (!has_string(name)) { + return false; + } + s = get_string(name); + return true; +} + +bool JsonObject::read_into(const std::string &name, JsonDeserializer &j) +{ + // can't know what type of json object it will deserialize from, + // so just try to deserialize, catching any error. + // TODO: non-verbose flag for JsonIn errors so try/catch is faster here + int pos = verify_position(name, false); + if (!pos) { + return false; + } + try { + jsin->seek(pos); + j.deserialize(*jsin); + return true; + } catch (std::string e) { + return false; + } +} + + /* class JsonArray * represents a JSON array, * providing access to the underlying data. */ JsonArray::JsonArray(JsonIn *j) : positions() { - strict = STRICT_JSON; jsin = j; start = jsin->tell(); index = 0; // cache the position of each element - bool gotsep = true; - bool lastsep = false; jsin->start_array(); while (!jsin->end_array()) { positions.push_back(jsin->tell()); - if ( strict && ! gotsep ) { - end = jsin->tell(); - jsin->seek(start); - throw jsin->line_number() + ": missing comma: " + dump_input(); - } - gotsep = jsin->skip_value(); - lastsep = gotsep; + jsin->skip_value(); } end = jsin->tell(); - if ( strict && lastsep ) { - jsin->seek(start); - throw jsin->line_number() + ": trailing comma: " + dump_input(); - } + final_separator = jsin->get_ate_separator(); } JsonArray::JsonArray(const JsonArray &ja) @@ -391,17 +494,28 @@ JsonArray::JsonArray(const JsonArray &ja) index = 0; positions = ja.positions; end = ja.end; - strict = ja.strict; + final_separator = ja.final_separator; } -bool JsonArray::has_more() +void JsonArray::finish() { - return (index >= 0 && index < positions.size()); + if (jsin && jsin->good()) { + jsin->seek(end); + jsin->set_ate_separator(final_separator); + } } -int JsonArray::size() +bool JsonArray::has_more() { return (index >= 0 && index < positions.size()); } +int JsonArray::size() { return positions.size(); } +bool JsonArray::empty() { return positions.empty(); } + +std::string JsonArray::str() { - return positions.size(); + if (jsin) { + return jsin->substr(start,end-start); + } else { + return "[]"; + } } void JsonArray::verify_index(int i) @@ -411,12 +525,12 @@ void JsonArray::verify_index(int i) } else if (i < 0 || i >= positions.size()) { jsin->seek(start); std::stringstream err; - err << jsin->line_number() << ": "; err << "bad index value: " << i; - throw err.str(); + jsin->error(err.str()); } } + /* iterative access */ bool JsonArray::next_bool() @@ -461,6 +575,12 @@ JsonObject JsonArray::next_object() return jsin->get_object(); } +void JsonArray::skip_value() +{ + verify_index(index); + ++index; +} + /* static access */ bool JsonArray::get_bool(int i) @@ -621,33 +741,101 @@ bool JsonArray::has_object(int i) return jsin->test_object(); } -std::string JsonArray::dump_input() { - int origpos = jsin->tell(); - jsin->seek(start); - jsin->eat_whitespace(); - int len = end - jsin->tell(); - std::string ret; - ret.resize(len); - jsin->read(&ret[0],len); - jsin->seek(origpos); - return ret; +/* iterative value setting by reference */ + +bool JsonArray::read_into(bool &b) +{ + if (!test_bool()) { + skip_value(); + return false; + } + b = next_bool(); + return true; +} + +bool JsonArray::read_into(int &i) +{ + if (!test_number()) { + skip_value(); + return false; + } + i = next_int(); + return true; +} + +bool JsonArray::read_into(unsigned &u) +{ + if (!test_number()) { + skip_value(); + return false; + } + u = next_int(); + return true; +} + +bool JsonArray::read_into(float &f) +{ + if (!test_number()) { + skip_value(); + return false; + } + f = next_float(); + return true; +} + +bool JsonArray::read_into(double &d) +{ + if (!test_number()) { + skip_value(); + return false; + } + d = next_float(); + return true; +} + +bool JsonArray::read_into(std::string &s) +{ + if (!test_string()) { + skip_value(); + return false; + } + s = next_string(); + return true; } +bool JsonArray::read_into(JsonDeserializer &j) +{ + try { + verify_index(index); + jsin->seek(positions[index++]); + j.deserialize(*jsin); + return true; + } catch (std::string e) { + return false; + } +} + + /* class JsonIn * represents an istream of JSON data, * allowing easy extraction into c++ datatypes. */ -JsonIn::JsonIn(std::istream *s) +JsonIn::JsonIn(std::istream *s, bool strict) : + stream(s), strict(strict), ate_separator(false) { - stream = s; - strict = STRICT_JSON; } int JsonIn::tell() { return stream->tellg(); } -void JsonIn::seek(int pos) { stream->seekg(pos, std::istream::beg); } char JsonIn::peek() { return (char)stream->peek(); } bool JsonIn::good() { return stream->good(); } -void JsonIn::read(char * str, int len) { stream->read(str, len); } + +void JsonIn::seek(int pos) +{ + stream->clear(); + stream->seekg(pos); + ate_separator = false; +} + void JsonIn::eat_whitespace() { while (is_whitespace(peek())) { @@ -655,36 +843,87 @@ void JsonIn::eat_whitespace() } } -bool JsonIn::skip_member() +void JsonIn::uneat_whitespace() +{ + while (tell() > 0) { + stream->seekg(-1, std::istream::cur); + if (!is_whitespace(peek())) { + break; + } + } +} + +void JsonIn::end_value() +{ + ate_separator = false; + skip_separator(); +} + +void JsonIn::skip_member() { skip_string(); skip_pair_separator(); skip_value(); - return skip_separator(); } -bool JsonIn::skip_pair_separator() +void JsonIn::skip_separator() +{ + char ch; + eat_whitespace(); + ch = peek(); + if (ch == ',') { + if (strict && ate_separator) { + error("duplicate separator"); + } + stream->get(); + ate_separator = true; + } else if (ch == ']' || ch == '}' || ch == ':') { + // okay + if (strict && ate_separator) { + std::stringstream err; + err << "separator should not be found before '" << ch << "'"; + uneat_whitespace(); + error(err.str()); + } + ate_separator = false; + } else if (ch == EOF) { + // that's okay too... probably + if (strict && ate_separator) { + uneat_whitespace(); + error("separator at end of file not strictly allowed"); + } + ate_separator = false; + } else if (strict) { + // not okay >:( + uneat_whitespace(); + error("missing separator", 1); + } +} + +void JsonIn::skip_pair_separator() { char ch; eat_whitespace(); stream->get(ch); if (ch != ':') { std::stringstream err; - err << line_number(-1) << ": expected pair separator ':', not '" << ch << "'"; - throw err.str(); + err << "expected pair separator ':', not '" << ch << "'"; + error(err.str(), -1); + } else if (strict && ate_separator) { + error("duplicate separator not strictly allowed", -1); } - return false; + ate_separator = true; } -bool JsonIn::skip_string() +void JsonIn::skip_string() { char ch; eat_whitespace(); stream->get(ch); if (ch != '"') { std::stringstream err; - err << line_number(-1) << ": expecting string but found '" << ch << "'"; - throw err.str(); + err << "expecting string but found '" << ch << "'"; + error(err.str(), -1); } while (stream->good()) { stream->get(ch); @@ -693,214 +932,104 @@ bool JsonIn::skip_string() continue; } else if (ch == '"') { break; + } else if (strict && (ch == '\r' || ch == '\n')) { + error("string not closed before end of line", -1); } } - return skip_separator(); + end_value(); } -bool JsonIn::skip_value() +void JsonIn::skip_value() { char ch; - bool foundsep; eat_whitespace(); ch = peek(); // it's either a string '"' if (ch == '"') { - foundsep = skip_string(); + skip_string(); // or an object '{' } else if (ch == '{') { - foundsep = skip_object(); + skip_object(); // or an array '[' } else if (ch == '[') { - foundsep = skip_array(); + skip_array(); // or a number (-0123456789) } else if (ch == '-' || (ch >= '0' && ch <= '9')) { - foundsep = skip_number(); + skip_number(); // or "true", "false" or "null" } else if (ch == 't') { - foundsep = skip_true(); + skip_true(); } else if (ch == 'f') { - foundsep = skip_false(); + skip_false(); } else if (ch == 'n') { - foundsep = skip_null(); + skip_null(); // or an error. } else { std::stringstream err; - err << line_number() << ": expected JSON value but got '" << ch << "'"; - throw err.str(); + err << "expected JSON value but got '" << ch << "'"; + error(err.str()); } - return foundsep;//b( foundsep || skip_separator() ); + // skip_* end value automatically } -bool JsonIn::skip_object() +void JsonIn::skip_object() { - char ch; - bool lastsep = false; - int brackets = 1; - eat_whitespace(); - int startpos = tell(); - stream->get(ch); - if (ch != '{') { - std::stringstream err; - err << line_number(-1) << ": expected object but found '" << ch << "'"; - throw err.str(); - } - while (brackets && stream->good()) { - stream->get(ch); - // ignore everything inside strings - if (ch == '"') { - stream->unget(); - lastsep = skip_string(); - // otherwise count opening and closing brackets until they all match - } else if (ch == '{') { - brackets += 1; - lastsep = false; - } else if (ch == '}') { - brackets -= 1; - if ( strict && lastsep ) { - std::stringstream err; - std::string txt; - int errpos = tell(); - err << line_number(-1) << ": trailing comma: "; - stream->seekg(startpos); - stream->read(&txt[0],errpos-startpos); - err << txt; - throw err.str(); - } - lastsep = false; - } else if (!is_whitespace(ch)) { - lastsep = false; - } + start_object(); + while (!end_object()) { + skip_member(); } - if (brackets != 0) { - // something messed up! - std::stringstream err; - if (stream->fail()) { - throw (std::string)"stream failure while reading object."; - } else if (stream->eof()) { - stream->clear(); - seek(startpos); - err << line_number() << ": "; - err << "couldn't find end of object, reached EOF with "; - err << brackets << " bracket(s) left."; - throw err.str(); - } else { // this should be impossible - err << line_number() << " "; - seek(startpos); - err << "(" << line_number() << "): "; - err << "object brackets didn't match?"; - err << " " << brackets << " bracket(s) left."; - throw err.str(); - } - } - return skip_separator(); + // end_value called by end_object } -bool JsonIn::skip_array() +void JsonIn::skip_array() { - char ch; - bool lastsep = false; - int brackets = 1; - eat_whitespace(); - int startpos = tell(); - stream->get(ch); - if (ch != '[') { - std::stringstream err; - err << line_number(-1) << ": expected array but found '" << ch << "'"; - throw err.str(); + start_array(); + while (!end_array()) { + skip_value(); } - while (brackets && stream->good()) { - stream->get(ch); - // ignore everything inside strings - if (ch == '"') { - stream->unget(); - lastsep = skip_string(); - // otherwise count opening and closing brackets until they all match - } else if (ch == '[') { - brackets += 1; - lastsep = false; - } else if (ch == ']') { - brackets -= 1; - if ( strict && lastsep ) { - std::stringstream err; - std::string txt; - int errpos = tell(); - err << line_number(-1) << ": trailing comma: "; - stream->seekg(startpos); - stream->read(&txt[0],errpos-startpos); - err << txt; - throw err.str(); - } - lastsep = false; - } else if (!is_whitespace(ch)) { - lastsep = false; - } - - } - if (brackets != 0) { - // something messed up! - std::stringstream err; - if (stream->fail()) { - throw (std::string)"stream failure while reading array."; - } else if (stream->eof()) { - stream->clear(); - seek(startpos); - err << line_number() << ": "; - err << "couldn't find end of array, reached EOF with "; - err << brackets << " bracket(s) left."; - throw err.str(); - } else { // this should be impossible - err << line_number() << " "; - seek(startpos); - err << "(" << line_number() << "): "; - err << "array brackets didn't match?"; - err << " " << brackets << " bracket(s) left."; - throw err.str(); - } - } - return skip_separator(); + // end_value called by end_array } -bool JsonIn::skip_true() +void JsonIn::skip_true() { char text[5]; eat_whitespace(); stream->get(text, 5); if (strcmp(text, "true") != 0) { std::stringstream err; - err << line_number(-4) << ": expected \"true\", but found \"" << text << "\""; - throw err.str(); + err << "expected \"true\", but found \"" << text << "\""; + error(err.str(), -4); } - return skip_separator(); + end_value(); } -bool JsonIn::skip_false() +void JsonIn::skip_false() { char text[6]; eat_whitespace(); stream->get(text, 6); if (strcmp(text, "false") != 0) { std::stringstream err; - err << line_number(-5) << ": expected \"false\", but found \"" << text << "\""; - throw err.str(); + err << "expected \"false\", but found \"" << text << "\""; + error(err.str(), -5); } - return skip_separator(); + end_value(); } -bool JsonIn::skip_null() +void JsonIn::skip_null() { char text[5]; eat_whitespace(); stream->get(text, 5); if (strcmp(text, "null") != 0) { std::stringstream err; - err << line_number(-4) << ": expected \"null\", but found \"" << text << "\""; - throw err.str(); + err << "expected \"null\", but found \"" << text << "\""; + error(err.str(), -4); } - return skip_separator(); + end_value(); } -bool JsonIn::skip_number() +void JsonIn::skip_number() { char ch; eat_whitespace(); @@ -910,33 +1039,16 @@ bool JsonIn::skip_number() if (ch != '+' && ch != '-' && (ch < '0' || ch > '9') && ch != 'e' && ch != 'E' && ch != '.') { stream->unget(); - return (ch==','); + break; } } - return skip_separator(); -} - -bool JsonIn::skip_separator() -{ - char ch; - eat_whitespace(); - ch = peek(); - if (ch == ',') { - stream->get(); - return true; - } - return false; + end_value(); } std::string JsonIn::get_member_name() { - // get the name std::string s = get_string(); - // eat any whitespace - eat_whitespace(); - // skip the separator skip_pair_separator(); - // done return s; } @@ -952,8 +1064,8 @@ std::string JsonIn::get_string() stream->get(ch); if (ch != '"') { std::stringstream err; - err << line_number(-1) << ": expecting string but got '" << ch << "'"; - throw err.str(); + err << "expecting string but got '" << ch << "'"; + error(err.str(), -1); } // add chars to the string, one at a time, converting: // \", \\, \/, \b, \f, \n, \r, \t and \uxxxx according to JSON spec. @@ -997,22 +1109,23 @@ std::string JsonIn::get_string() } } else if (ch == '"') { // end of the string - skip_separator(); + end_value(); return s; + } else if (strict && (ch == '\r' || ch == '\n')) { + error("reached end of line without closing string", -1); + } else if (strict && (unsigned char)ch < 0x20) { + error("invalid character inside string", -1); } else { s += ch; } } // if we get to here, probably hit a premature EOF? - if (stream->fail()) { - throw (std::string)"stream failure while reading string."; - } else if (stream->eof()) { + if (stream->eof()) { stream->clear(); seek(startpos); - std::stringstream err; - err << line_number() << ": "; - err << "couldn't find end of string, reached EOF."; - throw err.str(); + error("couldn't find end of string, reached EOF."); + } else if (stream->fail()) { + throw (std::string)"stream failure while reading string."; } throw (std::string)"something went wrong D:"; } @@ -1037,6 +1150,18 @@ double JsonIn::get_float() if (ch == '-') { neg = true; stream->get(ch); + } else if (ch != '.' && (ch < '0' || ch > '9')) { + // not a valid float + std::stringstream err; + err << "expecting number but found '" << ch << "'"; + error(err.str(), -1); + } + if (strict && ch == '0') { + // allow a single leading zero in front of a '.' or 'e'/'E' + stream->get(ch); + if (ch >= '0' && ch <= '9') { + error("leading zeros not strictly allowed", -1); + } } while (ch >= '0' && ch <= '9') { i *= 10; @@ -1073,7 +1198,9 @@ double JsonIn::get_float() e *= -1; } } - skip_separator(); + // unget the final non-number character (probably a separator) + stream->unget(); + end_value(); // now put it all together! return i * pow(10.0f, static_cast(e + mod_e)); } @@ -1082,39 +1209,33 @@ bool JsonIn::get_bool() { char ch; char text[5]; - int pos = tell(); std::stringstream err; eat_whitespace(); stream->get(ch); if (ch == 't') { stream->get(text, 4); if (strcmp(text, "rue") == 0) { - skip_separator(); + end_value(); return true; } else { - err << line_number(-4) << ": "; err << "not a boolean. expected \"true\", but got \""; err << ch << text << "\""; - seek(pos); - throw err.str(); + error(err.str(), -4); } } else if (ch == 'f') { stream->get(text, 5); if (strcmp(text, "alse") == 0) { - skip_separator(); + end_value(); return false; } else { - err << line_number(-5) << ": "; err << "not a boolean. expected \"false\", but got \""; err << ch << text << "\""; - seek(pos); - throw err.str(); + error(err.str(), -5); } } - err << line_number(-1) << ": "; err << "not a boolean value! expected 't' or 'f' but got '" << ch << "'"; - seek(pos); - throw err.str(); + error(err.str(), -1); + throw (std::string)"warnings are silly"; } void JsonIn::start_array() @@ -1122,14 +1243,14 @@ void JsonIn::start_array() eat_whitespace(); if (peek() == '[') { stream->get(); + ate_separator = false; return; } else { // expecting an array, so this is an error std::stringstream err; - err << line_number() << ": "; err << "tried to start array, but found '"; err << peek() << "', not '['"; - throw err.str(); + error(err.str()); } } @@ -1137,12 +1258,13 @@ bool JsonIn::end_array() { eat_whitespace(); if (peek() == ']') { + if (strict && ate_separator) { + uneat_whitespace(); + error("separator not strictly allowed at end of array"); + } stream->get(); + end_value(); return true; - } else if (peek() == ',') { - // also eat separators, makes iterating easy - stream->get(); - return false; } else { // not the end yet, so just return false? return false; @@ -1154,14 +1276,14 @@ void JsonIn::start_object() eat_whitespace(); if (peek() == '{') { stream->get(); + ate_separator = false; // not that we want to return; } else { // expecting an object, so fail loudly std::stringstream err; - err << line_number() << ": "; err << "tried to start object, but found '"; err << peek() << "', not '{'"; - throw err.str(); + error(err.str()); } } @@ -1169,12 +1291,13 @@ bool JsonIn::end_object() { eat_whitespace(); if (peek() == '}') { + if (strict && ate_separator) { + uneat_whitespace(); + error("separator not strictly allowed at end of object"); + } stream->get(); + end_value(); return true; - } else if (peek() == ',') { - // also eat separators, makes iterating easy - stream->get(); - return false; } else { // not the end yet, so just return false? return false; @@ -1208,7 +1331,7 @@ bool JsonIn::test_int() // then add the number of digits after it, // then subtract this from the exponent, // and test if the exponent is greater than -1, - // but then we'd /still/ have to adjust for silly cases like 0.0003e4, + // but then we'd /still/ have to adjust for silly cases like 0.000300e4, // which, technically, is an integer. // feel free to implement. eat_whitespace(); @@ -1264,8 +1387,9 @@ bool JsonIn::test_object() return false; } -// WARNING: intended for occasional use only -// TODO: track character/line offset while parsing so this can be fast. +/* error display */ + +// WARNING: for occasional use only. std::string JsonIn::line_number(int offset_modifier) { if (stream->eof()) { @@ -1298,3 +1422,296 @@ std::string JsonIn::line_number(int offset_modifier) ret << "line " << line << ":" << (offset + offset_modifier); return ret.str(); } + +void JsonIn::error(std::string message, int offset) +{ + std::ostringstream err; + err << line_number(offset) << ": " << message; + // if we can't get more info from the stream don't try + if (!stream->good()) { + throw err.str(); + } + // also print surrounding few lines of context, if not too large + err << "\n\n"; + stream->seekg(offset, std::istream::cur); + size_t pos = tell(); + rewind(3, 240); + size_t startpos = tell(); + char buffer[241]; + stream->read(&buffer[0], pos-startpos); + buffer[pos-startpos] = '\0'; + err << buffer; + if (!is_whitespace(peek())) { + err << peek(); + } + // display a pointer to the position + rewind(1, 240); + startpos = tell(); + err << '\n'; + for (int i=0; i < pos-startpos-1; ++i) { + err << ' '; + } + err << "^\n"; + seek(pos); + // if that wasn't the end of the line, continue underneath pointer + char ch = stream->get(); + if (ch == '\r') { + if (peek() == '\n') { + stream->get(); + } + } else if (ch == '\n') { + // pass + } else if (peek() != '\r' && peek() != '\n') { + for (int i=0; i < pos-startpos; ++i) { + err << ' '; + } + } + // print the next couple lines as well + int line_count = 0; + for (int i=0; i < 240; ++i) { + stream->get(ch); + err << ch; + if (ch == '\r') { + ++line_count; + if (peek() == '\n') { + err << stream->get(); + } + } else if (ch == '\n') { + ++line_count; + } + if (line_count > 2) { + break; + } + } + throw err.str(); +} + +void JsonIn::rewind(int max_lines, int max_chars) +{ + if (max_lines < 0 && max_chars < 0) { + // just rewind to the beginning i guess + seek(0); + return; + } + if (tell() == 0) { + return; + } + int lines_found = 0; + stream->seekg(-1, std::istream::cur); + for (int i=0; i < max_chars; ++i) { + size_t tellpos = tell(); + if (peek() == '\n') { + ++lines_found; + if (tellpos > 0) { + stream->seekg(-1, std::istream::cur); + // note: does not update tellpos or count a character + if (peek() != '\r') { + continue; + } + } + } else if (peek() == '\r') { + ++lines_found; + } + if (tellpos == 0) { + break; + } else if (lines_found == max_lines) { + // don't include the last \n or \r + stream->seekg(1, std::istream::cur); + break; + } + stream->seekg(-1, std::istream::cur); + } +} + +std::string JsonIn::substr(size_t pos, size_t len) +{ + std::string ret; + if (len == std::string::npos) { + stream->seekg(0, std::istream::end); + size_t end = tell(); + len = end - pos; + } + ret.resize(len); + stream->seekg(pos); + stream->read(&ret[0],len); + return ret; +} + + +/* class JsonOut + * represents an ostream of JSON data, + * allowing easy serialization of c++ datatypes. + */ +JsonOut::JsonOut(std::ostream *s) +{ + stream = s; + need_separator = false; + // ensure user's locale doesn't interfere with number format + stream->imbue(std::locale::classic()); + // scientific format for floating-point numbers + stream->setf(std::ostream::scientific, std::ostream::floatfield); + // it's already decimal, but set it anyway + stream->setf(std::ostream::dec, std::ostream::basefield); + // could also set showbase and showpoint, + // but it currently doesn't matter. +} + +void JsonOut::write_separator() +{ + stream->put(','); + need_separator = false; +} + +void JsonOut::write_member_separator() +{ + stream->put(':'); + need_separator = false; +} + +void JsonOut::start_object() +{ + if (need_separator) { + write_separator(); + } + stream->put('{'); + need_separator = false; +} + +void JsonOut::end_object() +{ + stream->put('}'); + need_separator = true; +} + +void JsonOut::start_array() +{ + if (need_separator) { + write_separator(); + } + stream->put('['); + need_separator = false; +} + +void JsonOut::end_array() +{ + stream->put(']'); + need_separator = true; +} + +void JsonOut::write_null() +{ + if (need_separator) { + write_separator(); + } + stream->write("null", 4); + need_separator = true; +} + +void JsonOut::write(const bool &b) +{ + if (need_separator) { + write_separator(); + } + if (b) { + stream->write("true", 4); + } else { + stream->write("false", 5); + } + need_separator = true; +} + +void JsonOut::write(const int &i) +{ + if (need_separator) { + write_separator(); + } + // format specified in constructor, let's hope it hasn't changed + *stream << i; + need_separator = true; +} + +void JsonOut::write(const unsigned &u) +{ + if (need_separator) { + write_separator(); + } + // format specified in constructor, let's hope it hasn't changed + *stream << u; + need_separator = true; +} + +void JsonOut::write(const double &f) +{ + if (need_separator) { + write_separator(); + } + // format specified in constructor, let's hope it hasn't changed + *stream << f; + need_separator = true; +} + +void JsonOut::write(const std::string &s) +{ + if (need_separator) { + write_separator(); + } + unsigned char ch; + stream->put('"'); + for (int i = 0; i < s.size(); ++i) { + ch = s[i]; + if (ch == '"') { + stream->write("\\\"", 2); + } else if (ch == '\\') { + stream->write("\\\\", 2); + } else if (ch == '/') { + // don't technically need to escape this + stream->put('/'); + } else if (ch == '\b') { + stream->write("\\b", 2); + } else if (ch == '\f') { + stream->write("\\f", 2); + } else if (ch == '\n') { + stream->write("\\n", 2); + } else if (ch == '\r') { + stream->write("\\r", 2); + } else if (ch == '\t') { + stream->write("\\t", 2); + } else if (ch < 0x20) { + // convert to "\uxxxx" unicode escape + stream->write("\\u00", 4); + stream->put((ch < 0x10) ? '0' : '1'); + char remainder = ch & 0x0F; + if (remainder < 0x0A) { + stream->put('0' + remainder); + } else { + stream->put('A' + (remainder - 0x0A)); + } + } else { + stream->put(ch); + } + } + stream->put('"'); + need_separator = true; +} + +void JsonOut::write(const JsonSerializer &thing) +{ + if (need_separator) { + write_separator(); + } + thing.serialize(*this); + need_separator = true; +} + +void JsonOut::member(const std::string &name) +{ + write(name); + write_member_separator(); +} + +void JsonOut::null_member(const std::string &name) +{ + member(name); + write_null(); +} + diff --git a/json.h b/src/json.h similarity index 65% rename from json.h rename to src/json.h index d4a9e7eccd77b..a75c53360f30a 100644 --- a/json.h +++ b/src/json.h @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include @@ -108,7 +110,7 @@ * and calling the correct JsonIn method to read the value from the stream. * * As such, when processing items using a JsonIn, - * care must be taken to move the stream offset to the end of the item + * care should be taken to move the stream offset to the end of the item * after usage has finished. * This can be done by calling the .finish() method, * after the item has been dealt with, and before the stream continues. @@ -198,14 +200,18 @@ class JsonIn; class JsonObject; class JsonArray; +class JsonOut; +class JsonSerializer; +class JsonDeserializer; -bool is_whitespace(char ch); +bool is_whitespace(char ch); // RFC 4627 compliant class JsonObject { private: std::map positions; int start; int end; + bool final_separator; JsonIn *jsin; int verify_position(const std::string &name, const bool throw_exception=true); @@ -213,11 +219,20 @@ class JsonObject { public: JsonObject(JsonIn *jsin); JsonObject(const JsonObject &jsobj); + JsonObject() : positions(), start(0), end(0), jsin(NULL) {} + ~JsonObject() { finish(); } void finish(); // moves the stream to the end of the object + size_t size(); + bool empty(); bool has_member(const std::string &name); // true iff named member exists + std::set get_member_names(); + std::string str(); // copy object json as string + // seek to a value and return a pointer to the JsonIn (member must exist) + JsonIn* get_raw(const std::string &name); + // values by name // variants with no fallback throw an error if the name is not found. // variants with a fallback return the fallback value in stead. bool get_bool(const std::string &name); @@ -229,11 +244,14 @@ class JsonObject { std::string get_string(const std::string &name); std::string get_string(const std::string &name, const std::string &fallback); - // note: returns empty array if not found + // containers by name + // get_array returns empty array if the member is not found JsonArray get_array(const std::string &name); - // note: throws exception if not found (can change behaviour if desirable) + std::vector get_int_array(const std::string &name); + std::vector get_string_array(const std::string &name); + // get_object returns empty object if not found JsonObject get_object(const std::string &name); - // note: returns empty set if not found + // get_tags returns empty set if none found std::set get_tags(const std::string &name); // TODO: some sort of get_map(), maybe @@ -247,14 +265,23 @@ class JsonObject { bool has_array(const std::string &name); bool has_object(const std::string &name); + // set values by reference + // return true if the value was set, false otherwise. + // return false if the member is not found. + bool read_into(const std::string &name, bool &b); + bool read_into(const std::string &name, int &i); + bool read_into(const std::string &name, unsigned int &u); + bool read_into(const std::string &name, float &f); + bool read_into(const std::string &name, double &d); + bool read_into(const std::string &name, std::string &s); + bool read_into(const std::string &name, JsonDeserializer &j); + template + bool read_into(const std::string &name, std::vector &v); // see below + template + bool read_into(const std::string &name, std::set &v); // see below + // useful debug info std::string line_number(); // for occasional use only - - // sets and gets validation mode // todo constructor arg - bool strict; - - // dump substring of input, for error messages and copying - std::string dump_input(); }; class JsonArray { @@ -263,16 +290,22 @@ class JsonArray { int start; int index; int end; + bool final_separator; JsonIn *jsin; void verify_index(int i); public: JsonArray(JsonIn *jsin); JsonArray(const JsonArray &jsarr); - JsonArray() : positions(), start(0), index(0), jsin(NULL) {}; + JsonArray() : positions(), start(0), index(0), end(0), jsin(NULL) {}; + ~JsonArray() { finish(); } + + void finish(); // move the stream position to the end of the array bool has_more(); // true iff more elements may be retrieved with next_* int size(); + bool empty(); + std::string str(); // copy array json as string // iterative access bool next_bool(); @@ -281,6 +314,7 @@ class JsonArray { std::string next_string(); JsonArray next_array(); JsonObject next_object(); + void skip_value(); // ignore whatever is next // static access bool get_bool(int index); @@ -310,20 +344,34 @@ class JsonArray { bool has_array(int index); bool has_object(int index); - // sets and gets validation mode // todo constructor arg - bool strict; - - // dump substring of input, for error messages and copying - std::string dump_input(); + // iteratively set values by reference + bool read_into(bool &b); + bool read_into(int &i); + bool read_into(unsigned &u); + bool read_into(float &f); + bool read_into(double &d); + bool read_into(std::string &s); + bool read_into(JsonDeserializer &j); }; + +/* JsonIn */ + class JsonIn { private: - std::istream *stream; + bool strict; // throw errors on non-RFC-4627-compliant input + bool ate_separator; + + void skip_separator(); + void skip_pair_separator(); + void end_value(); public: - JsonIn(std::istream *stream); + JsonIn(std::istream *stream, bool strict = true); + + bool get_ate_separator() { return ate_separator; } + void set_ate_separator(bool s) { ate_separator = s; } int tell(); // get current stream position void seek(int pos); // seek to specified stream position @@ -332,19 +380,19 @@ class JsonIn { // advance seek head to the next non-whitespace character void eat_whitespace(); + // or rewind to the previous one + void uneat_whitespace(); // quick skipping for when values don't have to be parsed - bool skip_member(); - bool skip_pair_separator(); - bool skip_string(); - bool skip_value(); - bool skip_object(); - bool skip_array(); - bool skip_true(); - bool skip_false(); - bool skip_null(); - bool skip_number(); - bool skip_separator(); + void skip_member(); + void skip_string(); + void skip_value(); + void skip_object(); + void skip_array(); + void skip_true(); + void skip_false(); + void skip_null(); + void skip_number(); // data parsing std::string get_string(); // get the next value as a string @@ -371,14 +419,140 @@ class JsonIn { bool test_array(); bool test_object(); - // useful debug info + // error messages std::string line_number(int offset_modifier=0); // for occasional use only + void error(std::string message, int offset=0); // ditto + void rewind(int max_lines=-1, int max_chars=-1); + std::string substr(size_t pos, size_t len=std::string::npos); +}; + - // sets and gets validation mode // todo constructor arg - bool strict; +/* JsonOut */ - // raw read of string, for dump_input - void read(char * str, int len); +class JsonOut { +private: + std::ostream *stream; + bool need_separator; + +public: + JsonOut(std::ostream *stream); // TODO: pretty-printing + + // punctuation + void write_separator(); + void write_member_separator(); + void start_object(); + void end_object(); + void start_array(); + void end_array(); + + // write data to the output stream as JSON + void write_null(); + void write(const bool &b); + void write(const int &i); + void write(const unsigned &u); + void write(const double &f); + void write(const std::string &s); + void write(const char *cstr) { write(std::string(cstr)); } + void write(const JsonSerializer &thing); + // vector ~> array + template void write(const std::vector &v) + { + start_array(); + for (int i = 0; i < v.size(); ++i) { + write(v[i]); + } + end_array(); + } + // set ~> array + template void write(const std::set &v) + { + start_array(); + typename std::set::iterator it; + for (it = v.begin(); it != v.end(); ++it) { + write(*it); + } + end_array(); + } + + // convenience methods for writing named object members + void member(const std::string &name); // TODO: enforce value after + void null_member(const std::string &name); + template void member(const std::string &name, const T &value) + { + member(name); + write(value); + } + // map ~> object? }; + +// inheritable interface classes for easy serialization + +class JsonSerializer { +public: + virtual ~JsonSerializer() {} + virtual void serialize(JsonOut &jsout) const = 0; + std::string serialize() const { + std::ostringstream s; + serialize(s); + return s.str(); + } + void serialize(std::ostream &o) const { + JsonOut jout(&o); + serialize(jout); + } +}; + +class JsonDeserializer { +public: + virtual ~JsonDeserializer() {} + virtual void deserialize(JsonIn &jsin) = 0; + void deserialize(const std::string &json_string) { + std::istringstream s(json_string); + deserialize(s); + } + void deserialize(std::istream &i) { + JsonIn jin(&i); + deserialize(jin); + } +}; + +/* compound templates */ + +// JsonObject named array ~> vector +template +bool JsonObject::read_into(const std::string &name, std::vector &v) +{ + if (!has_array(name)) { return false; } + JsonArray ja = get_array(name); + v.clear(); + try { + while (ja.has_more()) { + T element; + if (ja.read_into(element)) { + v.push_back(element); + } + } + return true; + } catch (std::string e) { return false; } +} + +// JsonObject named array ~> set +template +bool JsonObject::read_into(const std::string &name, std::set &v) +{ + if (!has_array(name)) { return false; } + JsonArray ja = get_array(name); + v.clear(); + try { + while (ja.has_more()) { + T element; + if (ja.read_into(element)) { + v.insert(element); + } + } + return true; + } catch (std::string e) { return false; } +} + #endif // _JSON_H_ diff --git a/keypress.cpp b/src/keypress.cpp similarity index 100% rename from keypress.cpp rename to src/keypress.cpp diff --git a/keypress.h b/src/keypress.h similarity index 100% rename from keypress.h rename to src/keypress.h diff --git a/lightmap.cpp b/src/lightmap.cpp similarity index 100% rename from lightmap.cpp rename to src/lightmap.cpp diff --git a/lightmap.h b/src/lightmap.h similarity index 100% rename from lightmap.h rename to src/lightmap.h diff --git a/line.cpp b/src/line.cpp similarity index 100% rename from line.cpp rename to src/line.cpp diff --git a/line.h b/src/line.h similarity index 100% rename from line.h rename to src/line.h diff --git a/src/live_view.cpp b/src/live_view.cpp new file mode 100644 index 0000000000000..63c86f32e11ae --- /dev/null +++ b/src/live_view.cpp @@ -0,0 +1,143 @@ +#include "live_view.h" +#include "output.h" +#include "game.h" +#include "options.h" + +#define START_LINE 1 +#define START_COLUMN 1 + +live_view::live_view() : compact_view(false), w_live_view(NULL), + enabled(false), inuse(false), last_height(-1) +{ + +} + +live_view::~live_view() +{ + delwin(w_live_view); +} + +void live_view::init(game *g, int start_x, int start_y, int width, int height) +{ + enabled = true; + if (w_live_view != NULL) { + delwin(w_live_view); + } + + this->width = width; + this->height = height; + this->g = g; + w_live_view = newwin(height, width, start_y, start_x); + hide(); +} + +void live_view::show(const int x, const int y) +{ + if (!enabled || w_live_view == NULL) { + return; + } + + bool did_hide = hide(false); // Clear window if it's visible + + if (!g->u_see(x,y)) { + if (did_hide) { + wrefresh(w_live_view); + } + return; + } + + map &m = g->m; + mvwprintz(w_live_view, 0, START_COLUMN, c_white, "< "); + wprintz(w_live_view, c_green, _("Mouse View")); + wprintz(w_live_view, c_white, " >"); + int line = START_LINE; + + g->print_all_tile_info(x, y, w_live_view, START_COLUMN, line, true); + + if (m.can_put_items(x, y)) { + std::vector &items = m.i_at(x, y); + print_items(items, line); + } + +#if (defined TILES || defined SDLTILES || defined _WIN32 || defined WINDOWS) + // Because of the way the status UI is done, the live view window must + // be tall enough to clear the entire height of the viewport below the + // status bar. This hack allows the border around the live view box to + // be drawn only as big as it needs to be, while still leaving the + // window tall enough. Won't work for ncurses in Linux, but that doesn't + // currently support the mouse. If and when it does, there'll need to + // be a different code path here that works for ncurses. + int full_height = w_live_view->height; + if (line < w_live_view->height - 1) { + w_live_view->height = (line > 11) ? line : 11; + } + last_height = w_live_view->height; +#endif + + wborder(w_live_view, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, + LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); + +#if (defined TILES || defined SDLTILES || defined _WIN32 || defined WINDOWS) + w_live_view->height = full_height; +#endif + + inuse = true; + wrefresh(w_live_view); +} + +bool live_view::hide(bool refresh /*= true*/, bool force /*= false*/) +{ + if (!enabled || (!inuse && !force)) { + return false; + } + +#if (defined TILES || defined SDLTILES || defined _WIN32 || defined WINDOWS) + int full_height = w_live_view->height; + if (use_narrow_sidebar() && last_height > 0) { + // When using the narrow sidebar mode, the lower part of the screen + // is used for the message queue. Best not to obscure too much of it. + w_live_view->height = last_height; + } +#endif + + werase(w_live_view); + +#if (defined TILES || defined SDLTILES || defined _WIN32 || defined WINDOWS) + w_live_view->height = full_height; +#endif + + inuse = false; + last_height = -1; + if (refresh) { + wrefresh(w_live_view); + } + + return true; +} + +void live_view::print_items(std::vector &items, int &line) const +{ + std::map item_names; + for (int i = 0; i < items.size(); i++) { + std::string name = items[i].tname(g); + if (item_names.find(name) == item_names.end()) { + item_names[name] = 0; + } + item_names[name] += 1; + } + + int last_line = height - START_LINE - 1; + bool will_overflow = line-1 + item_names.size() > last_line; + + for (std::map::iterator it = item_names.begin(); + it != item_names.end() && (!will_overflow || line < last_line); it++) { + mvwprintz(w_live_view, line++, START_COLUMN, c_white, it->first.c_str()); + if (it->second > 1) { + wprintz(w_live_view, c_white, _(" [%d]"), it->second); + } + } + + if (will_overflow) { + mvwprintz(w_live_view, line++, START_COLUMN, c_yellow, _("More items here...")); + } +} diff --git a/src/live_view.h b/src/live_view.h new file mode 100644 index 0000000000000..f8a976d7e6b6e --- /dev/null +++ b/src/live_view.h @@ -0,0 +1,33 @@ +#ifndef _LIVE_VIEW_H_ +#define _LIVE_VIEW_H_ + +#include + +#include "cursesdef.h" + +class game; +class item; + +class live_view +{ +public: + live_view(); + ~live_view(); + + void init(game *g, int start_x, int start_y, int width, int height); + void show(const int x, const int y); + bool hide(bool refresh = true, bool force = false); + + bool compact_view; + +private: + WINDOW *w_live_view; + int width, height; + bool enabled; + game *g; + int inuse; + int last_height; + + void print_items(std::vector &items, int &line) const; +}; +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000000000..ec80f781de367 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,156 @@ +/* Main Loop for cataclysm + * Linux only I guess + * But maybe not + * Who knows + */ + +#include "cursesdef.h" +#include +#include "game.h" +#include "color.h" +#include "options.h" +#include "mapbuffer.h" +#include "debug.h" +#include +#include +#include +#ifdef LOCALIZE +#include +#endif +#include "translations.h" +#if (defined OSX_SDL_FW) +#include "SDL.h" +#elif (defined OSX_SDL_LIBS) +#include "SDL/SDL.h" +#endif + +void exit_handler(int s); + +#ifdef USE_WINMAIN +int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + int argc = __argc; + char **argv = __argv; +#else +int main(int argc, char *argv[]) +{ +#endif +#ifdef ENABLE_LOGGING + setupDebug(); +#endif + int seed = time(NULL); + bool verifyexit = false; + // set locale to system default + setlocale(LC_ALL, ""); +#ifdef LOCALIZE + bindtextdomain("cataclysm-dda", "lang/mo"); + bind_textdomain_codeset("cataclysm-dda", "UTF-8"); + textdomain("cataclysm-dda"); +#endif + + //args: world seeding only. + argc--; + argv++; + while (argc) { + if(std::string(argv[0]) == "--seed") { + argc--; + argv++; + if(argc) { + seed = djb2_hash((unsigned char *)argv[0]); + argc--; + argv++; + } + } else if(std::string(argv[0]) == "--jsonverify") { + argc--; + verifyexit = true; + } else { // ignore unknown args. + argc--; + } + argv++; + } + + // ncurses stuff + initOptions(); + load_options(); // For getting size options + initscr(); // Initialize ncurses +#ifdef SDLTILES + init_tiles(); +#endif // SDLTILES + noecho(); // Don't echo keypresses + cbreak(); // C-style breaks (e.g. ^C to SIGINT) + keypad(stdscr, true); // Numpad is numbers + init_colors(); // See color.cpp + // curs_set(0); // Invisible cursor + set_escdelay(10); // Make escape actually responsive + + std::srand(seed); + + bool quit_game = false; + g = new game; + g->init_data(); + if(g->game_error()) { + exit_handler(-999); + } + if ( verifyexit ) { + exit_handler(0); + } + + g->init_ui(); + MAPBUFFER.set_game(g); + if(g->game_error()) { + exit_handler(-999); + } + + curs_set(0); // Invisible cursor here, because MAPBUFFER.load() is crash-prone + +#if (!(defined _WIN32 || defined WINDOWS)) + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = exit_handler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); +#endif + + do { + if(!g->opening_screen()) { + quit_game = true; + } + while (!quit_game && !g->do_turn()) ; + if (g->game_quit() || g->game_error()) { + quit_game = true; + } + } while (!quit_game); + + + exit_handler(-999); + + return 0; +} + +void exit_handler(int s) { + if (s != 2 || query_yn(_("Really Quit? All unsaved changes will be lost."))) { + erase(); // Clear screen + endwin(); // End ncurses + int ret; + #if (defined _WIN32 || defined WINDOWS) + ret = system("cls"); // Tell the terminal to clear itself + ret = system("color 07"); + #else + ret = system("clear"); // Tell the terminal to clear itself + #endif + if (ret != 0) { + DebugLog() << "main.cpp:exit_handler(): system(\"clear\"): error returned\n"; + } + + if(g != NULL) { + if(g->game_error()) { + delete g; + exit(1); + } else { + delete g; + exit(0); + } + } + exit(0); + } +} diff --git a/main_menu.cpp b/src/main_menu.cpp similarity index 98% rename from main_menu.cpp rename to src/main_menu.cpp index f9897b4afa4ed..248ea2de971ab 100644 --- a/main_menu.cpp +++ b/src/main_menu.cpp @@ -348,7 +348,8 @@ bool game::opening_screen() werase(w_background); wrefresh(w_background); - load_artifacts(world->world_name); + load_artifacts(world->world_path + "/artifacts.gsav", + itypes); MAPBUFFER.load(world->world_name); start_game(world->world_name); start = true; @@ -511,7 +512,8 @@ bool game::opening_screen() delwin(w_open); return (opening_screen()); } - load_artifacts(world->world_name); + load_artifacts(world->world_path + "/artifacts.gsav", + itypes); MAPBUFFER.load(world->world_name); start = true; @@ -556,7 +558,8 @@ bool game::opening_screen() WORLDPTR world = world_generator->all_worlds[world_generator->all_worldnames[sel2]]; world_generator->set_active_world(world); - load_artifacts(world->world_name); + load_artifacts(world->world_path + "/artifacts.gsav", + itypes); MAPBUFFER.load(world->world_name); setup(); @@ -688,7 +691,8 @@ bool game::opening_screen() werase(w_background); wrefresh(w_background); - load_artifacts(world_generator->active_world->world_name); + std::string artfilename = world_generator->active_world->world_path + "/artifacts.gsav"; + load_artifacts(artfilename, itypes); MAPBUFFER.load(world_generator->active_world->world_name); start_game(world_generator->active_world->world_name); diff --git a/map.cpp b/src/map.cpp similarity index 93% rename from map.cpp rename to src/map.cpp index 11034aa66c0d7..73ca861e42543 100644 --- a/map.cpp +++ b/src/map.cpp @@ -232,7 +232,7 @@ void map::board_vehicle(game *g, int x, int y, player *p) g->update_map(x, y); } -void map::unboard_vehicle(game *g, const int x, const int y) +void map::unboard_vehicle(const int x, const int y) { int part = 0; vehicle *veh = veh_at(x, y, part); @@ -739,7 +739,7 @@ bool map::vehproceed(game* g){ g->add_msg(_("%s is hurled from the %s's seat by the power of the impact!"), psg->name.c_str(), veh->name.c_str()); } - g->m.unboard_vehicle(g, x + veh->parts[ppl[ps]].precalc_dx[0], + g->m.unboard_vehicle(x + veh->parts[ppl[ps]].precalc_dx[0], y + veh->parts[ppl[ps]].precalc_dy[0]); g->fling_player_or_monster(psg, 0, mdir.dir() + rng(0, 60) - 30, (vel1 - psg->str_cur < 10 ? 10 : @@ -1145,6 +1145,11 @@ bool map::has_flag(std::string flag, const int x, const int y) return (terlist[ter(x, y)].has_flag(flag) || (furnlist[furn(x, y)].has_flag(flag))); } +bool map::can_put_items(const int x, const int y) +{ + return !has_flag("NOITEM", x, y) && !has_flag("SEALED", x, y); +} + bool map::has_flag_ter(std::string flag, const int x, const int y) { return terlist[ter(x, y)].has_flag(flag); @@ -1227,6 +1232,20 @@ bool map::moppable_items_at(const int x, const int y) if (it->made_of(LIQUID)) return true; } + field &fld = field_at(x, y); + if(fld.findField(fd_blood) != 0 || fld.findField(fd_bile) != 0 || fld.findField(fd_slime) != 0 || fld.findField(fd_sludge) != 0) { + return true; + } + int vpart; + vehicle *veh = veh_at(x, y, vpart); + if(veh != 0) { + std::vector parts_here = veh->parts_at_relative(veh->parts[vpart].mount_dx, veh->parts[vpart].mount_dy); + for(size_t i = 0; i < parts_here.size(); i++) { + if(veh->parts[parts_here[i]].blood > 0) { + return true; + } + } + } return false; } @@ -1270,6 +1289,19 @@ void map::mop_spills(const int x, const int y) { i--; } } + field &fld = field_at(x, y); + fld.removeField(fd_blood); + fld.removeField(fd_bile); + fld.removeField(fd_slime); + fld.removeField(fd_sludge); + int vpart; + vehicle *veh = veh_at(x, y, vpart); + if(veh != 0) { + std::vector parts_here = veh->parts_at_relative(veh->parts[vpart].mount_dx, veh->parts[vpart].mount_dy); + for(size_t i = 0; i < parts_here.size(); i++) { + veh->parts[parts_here[i]].blood = 0; + } + } } bool map::bash(const int x, const int y, const int str, std::string &sound, int *res) @@ -1417,9 +1449,9 @@ if ( bash != NULL && bash->num_tests > 0 && bash->str_min != -1 ) { for (int i = -1; i <= 1; i++) for (int j = -1; j <= 1; j++) { if (furn(tentx + i, tenty + j) == f_groundsheet) - spawn_item(tentx + i, tenty + j, "broketent", 0); + spawn_item(tentx + i, tenty + j, "broketent"); if (furn(tentx + i, tenty + j) == f_skin_groundsheet) - spawn_item(tentx + i, tenty + j, "damaged_shelter_kit", 0); + spawn_item(tentx + i, tenty + j, "damaged_shelter_kit"); furn_set(tentx + i, tenty + j, f_null); } @@ -1454,8 +1486,8 @@ void map::destroy(game *g, const int x, const int y, const bool makesound) for (int i = x - 2; i <= x + 2; i++) { for (int j = y - 2; j <= y + 2; j++) { if(move_cost(i, j) == 0) continue; - if (one_in(3)) spawn_item(i, j, "gasoline", 0); - if (one_in(6)) spawn_item(i, j, "steel_chunk", 0, 0, 3); + if (one_in(3)) spawn_item(i, j, "gasoline"); + if (one_in(6)) spawn_item(i, j, "steel_chunk", 0, 3); } } } @@ -1470,8 +1502,8 @@ void map::destroy(game *g, const int x, const int y, const bool makesound) for (int i = x - 2; i <= x + 2; i++) { for (int j = y - 2; j <= y + 2; j++) { if(move_cost(i, j) == 0) continue; - if (one_in(6)) spawn_item(i, j, "2x4", 0); - if (one_in(6)) spawn_item(i, j, "nail", 0, 0, 3); + if (one_in(6)) spawn_item(i, j, "2x4"); + if (one_in(6)) spawn_item(i, j, "nail", 0, 3); } } break; @@ -1482,7 +1514,7 @@ void map::destroy(game *g, const int x, const int y, const bool makesound) for (int i = x - 2; i <= x + 2; i++) { for (int j = y - 2; j <= y + 2; j++) { if (move_cost(i, j) > 0 && one_in(5)) - spawn_item(i, j, "rock", 0); + spawn_item(i, j, "rock"); ter_set(x, y, t_rubble); } } @@ -1493,9 +1525,9 @@ void map::destroy(game *g, const int x, const int y, const bool makesound) for (int i = x - 2; i <= x + 2; i++) { for (int j = y - 2; j <= y + 2; j++) { if(move_cost(i, j) == 0) continue; - if (one_in(5)) { spawn_item(i, j, "splinter", 0); } - if (one_in(6)) { spawn_item(i, j, "nail", 0, 0, 3); } - if (one_in(100)) { spawn_item(x, y, "cu_pipe", 0); } + if (one_in(5)) { spawn_item(i, j, "splinter"); } + if (one_in(6)) { spawn_item(i, j, "nail", 0, 3); } + if (one_in(100)) { spawn_item(x, y, "cu_pipe"); } } } ter_set(x, y, t_rubble); @@ -1539,10 +1571,10 @@ void map::destroy(game *g, const int x, const int y, const bool makesound) for (int i = x - 2; i <= x + 2; i++) { for (int j = y - 2; j <= y + 2; j++) { if(move_cost(i, j) == 0) continue; - if (one_in(5)) spawn_item(i, j, "rock", 0); - if (one_in(4)) spawn_item(i, j, "splinter", 0); - if (one_in(3)) spawn_item(i, j, "rebar", 0); - if (one_in(6)) spawn_item(i, j, "nail", 0, 0, 3); + if (one_in(5)) spawn_item(i, j, "rock"); + if (one_in(4)) spawn_item(i, j, "splinter"); + if (one_in(3)) spawn_item(i, j, "rebar"); + if (one_in(6)) spawn_item(i, j, "nail", 0, 3); } } ter_set(x, y, t_rubble); @@ -1590,11 +1622,11 @@ void map::destroy(game *g, const int x, const int y, const bool makesound) for (int j = y - 1; j <= y + 1; j++) { if(move_cost(i, j) == 0) continue; - if (one_in(3)) spawn_item(i, j, "rope_6", 0); - if (one_in(2)) spawn_item(i, j, "splinter", 0); - if (one_in(3)) spawn_item(i, j, "stick", 0); - if (one_in(6)) spawn_item(i, j, "2x4", 0); - if (one_in(9)) spawn_item(i, j, "log", 0); + if (one_in(3)) spawn_item(i, j, "rope_6"); + if (one_in(2)) spawn_item(i, j, "splinter"); + if (one_in(3)) spawn_item(i, j, "stick"); + if (one_in(6)) spawn_item(i, j, "2x4"); + if (one_in(9)) spawn_item(i, j, "log"); } } ter_set(x, y, t_dirt); @@ -1689,9 +1721,9 @@ void map::shoot(game *g, const int x, const int y, int &dam, { g->sound(x, y, 16, _("glass breaking!")); ter_set(x, y, t_window_frame); - spawn_item(x, y, "sheet", 0, 1); - spawn_item(x, y, "stick", 0); - spawn_item(x, y, "string_36", 0); + spawn_item(x, y, "sheet", 1); + spawn_item(x, y, "stick"); + spawn_item(x, y, "string_36"); } } break; @@ -1792,7 +1824,7 @@ void map::shoot(game *g, const int x, const int y, int &dam, for (int j = y - 2; j <= y + 2; j++) { if (move_cost(i, j) > 0 && one_in(3)) - spawn_item(i, j, "gasoline", 0); + spawn_item(i, j, "gasoline"); } } g->sound(x, y, 10, _("smash!")); @@ -2032,7 +2064,7 @@ void map::translate_radius(const ter_id from, const ter_id to, float radi, int u } } -bool map::close_door(const int x, const int y, const bool inside) +bool map::close_door(const int x, const int y, const bool inside, const bool check_only) { const std::string terid = get_ter(x,y); const std::string furnid = furnlist[furn(x,y)].id; @@ -2044,7 +2076,9 @@ bool map::close_door(const int x, const int y, const bool inside) if ( has_flag("OPENCLOSE_INSIDE", x, y) && inside == false ) { return false; } - ter_set(x, y, termap[ terid ].close ); + if (!check_only) { + ter_set(x, y, termap[ terid ].close ); + } return true; } else if ( furnmap[ furnid ].close.size() > 0 && furnmap[ furnid ].close != "t_null" ) { if ( furnmap.find( furnmap[ furnid ].close ) == furnmap.end() ) { @@ -2054,7 +2088,9 @@ bool map::close_door(const int x, const int y, const bool inside) if ( has_flag("OPENCLOSE_INSIDE", x, y) && inside == false ) { return false; } - furn_set(x, y, furnmap[ furnid ].close ); + if (!check_only) { + furn_set(x, y, furnmap[ furnid ].close ); + } return true; } return false; @@ -2128,6 +2164,7 @@ item map::water_from(const int x, const int y) item map::acid_from(const int x, const int y) { + (void)x; (void)y; //all acid is acid, i guess? item ret(item_controller->find_template("water_acid"), 0); return ret; } @@ -2150,8 +2187,9 @@ point map::find_item(const item *it) for (ret.x = 0; ret.x < SEEX * my_MAPSIZE; ret.x++) { for (ret.y = 0; ret.y < SEEY * my_MAPSIZE; ret.y++) { for (int i = 0; i < i_at(ret.x, ret.y).size(); i++) { - if (it == &i_at(ret.x, ret.y)[i]) + if (it == &i_at(ret.x, ret.y)[i]) { return ret; + } } } } @@ -2160,15 +2198,15 @@ point map::find_item(const item *it) return ret; } -void map::spawn_item(const int x, const int y, item new_item, const int birthday, - const int quantity, const int charges, const int damlevel) +void map::spawn_item(const int x, const int y, item new_item, + const int charges, const int damlevel) { if (charges && new_item.charges > 0) { //let's fail silently if we specify charges for an item that doesn't support it new_item.charges = charges; } - new_item = new_item.in_its_container(&(g->itypes)); + new_item = new_item.in_its_container(&(itypes)); if ((new_item.made_of(LIQUID) && has_flag("SWIMMABLE", x, y)) || has_flag("DESTROY_ITEM", x, y)) { @@ -2202,20 +2240,25 @@ void map::spawn_artifact(const int x, const int y, itype* type, const int bday) //New spawn_item method, using item factory // added argument to spawn at various damage levels -void map::spawn_item(const int x, const int y, std::string type_id, const int birthday, - const int quantity, const int charges, const int damlevel) +void map::spawn_item(const int x, const int y, const std::string &type_id, + const unsigned quantity, const int charges, + const unsigned birthday, const int damlevel) { - item new_item = item_controller->create(type_id, birthday); + // recurse to spawn (quantity - 1) items for(int i = 1; i < quantity; i++) { - spawn_item(x, y, type_id, birthday, 0, charges); + spawn_item(x, y, type_id, 1, charges, birthday, damlevel); } - spawn_item( x, y, new_item, birthday, quantity, charges, damlevel ); + // spawn the item + item new_item = item_controller->create(type_id, birthday); + spawn_item(x, y, new_item, charges, damlevel); } // stub for now, could vary by ter type -int map::max_volume(const int x, const int y) { - return MAX_VOLUME_IN_SQUARE; +int map::max_volume(const int x, const int y) +{ + (void)x; (void)y; //stub + return MAX_VOLUME_IN_SQUARE; } // total volume of all the things @@ -2333,84 +2376,126 @@ void map::add_item(const int x, const int y, item new_item, const int maxitems) void map::process_active_items(game *g) { - for (int gx = 0; gx < my_MAPSIZE; gx++) { - for (int gy = 0; gy < my_MAPSIZE; gy++) { - if (grid[gx + gy * my_MAPSIZE]->active_item_count > 0) - process_active_items_in_submap(g, gx + gy * my_MAPSIZE); - } - } + for (int gx = 0; gx < my_MAPSIZE; gx++) { + for (int gy = 0; gy < my_MAPSIZE; gy++) { + const int nonant = gx + gy * my_MAPSIZE; + if (grid[nonant]->active_item_count > 0) { + process_active_items_in_submap(g, nonant); + } + if (grid[nonant]->vehicles.size() > 0) { + process_active_items_in_vehicles(g, nonant); + } + } + } } void map::process_active_items_in_submap(game *g, const int nonant) { - it_tool* tmp; for (int i = 0; i < SEEX; i++) { for (int j = 0; j < SEEY; j++) { std::vector *items = &(grid[nonant]->itm[i][j]); - for (int n = 0; n < items->size(); n++) { - if ((*items)[n].active || - ((*items)[n].is_container() && (*items)[n].contents.size() > 0 && - (*items)[n].contents[0].active)) - { - if ((*items)[n].is_food()) { // food items - if ((*items)[n].has_flag("HOT")) { - (*items)[n].item_counter--; - if ((*items)[n].item_counter == 0) { - (*items)[n].item_tags.erase("HOT"); - (*items)[n].active = false; - grid[nonant]->active_item_count--; - } - } - } else if ((*items)[n].is_food_container()) { // food in containers - if ((*items)[n].contents[0].has_flag("HOT")) { - (*items)[n].contents[0].item_counter--; - if ((*items)[n].contents[0].item_counter == 0) { - (*items)[n].contents[0].item_tags.erase("HOT"); - (*items)[n].contents[0].active = false; - grid[nonant]->active_item_count--; - } - } - } else if ((*items)[n].type->id == "corpse") { // some corpses rez over time - if ((*items)[n].ready_to_revive(g)) { - if (rng(0,(*items)[n].volume()) > (*items)[n].burnt) { - int mapx = (nonant % my_MAPSIZE) * SEEX + i; - int mapy = (nonant / my_MAPSIZE) * SEEY + j; - if (g->u_see(mapx, mapy)) { - g->add_msg(_("A nearby corpse rises and moves towards you!")); - } - g->revive_corpse(mapx, mapy, n); - } else { - (*items)[n].active = false; - } - } - } else if (!(*items)[n].is_tool()) { // It's probably a charger gun - (*items)[n].active = false; - (*items)[n].charges = 0; - } else { - tmp = dynamic_cast((*items)[n].type); - if (tmp->use != &iuse::none) { - tmp->use.call(g, &(g->u), &((*items)[n]), true); - } - if (tmp->turns_per_charge > 0 && int(g->turn) % tmp->turns_per_charge == 0) { - (*items)[n].charges--; - } - if ((*items)[n].charges <= 0) { - if (tmp->use != &iuse::none) { - tmp->use.call(g, &(g->u), &((*items)[n]), false); - } - if (tmp->revert_to == "null" || (*items)[n].charges == -1) { - items->erase(items->begin() + n); - grid[nonant]->active_item_count--; - n--; - } else { - (*items)[n].type = g->itypes[tmp->revert_to]; - } - } + //Do a count-down loop, as some items may be removed + for (int n = items->size() - 1; n >= 0; n--) { + if(process_active_item(g, &((*items)[n]), nonant, i, j)) { + items->erase(items->begin() + n); + grid[nonant]->active_item_count--; + } + } + } + } +} + +void map::process_active_items_in_vehicles(game *g, const int nonant) +{ + std::vector *vehicles = &(grid[nonant]->vehicles); + for (int v = vehicles->size() - 1; v >= 0; v--) { + vehicle *next_vehicle = (*vehicles)[v]; + std::vector cargo_parts = next_vehicle->all_parts_with_feature("CARGO", false); + for(std::vector::iterator part_index = cargo_parts.begin(); + part_index != cargo_parts.end(); part_index++) { + std::vector *items_in_part = &(next_vehicle->parts[*part_index].items); + int mapx = next_vehicle->posx + next_vehicle->parts[*part_index].precalc_dx[0]; + int mapy = next_vehicle->posy + next_vehicle->parts[*part_index].precalc_dy[0]; + for(int n = items_in_part->size() - 1; n >= 0; n--) { + if(process_active_item(g, &((*items_in_part)[n]), nonant, mapx, mapy)) { + next_vehicle->remove_item(*part_index, n); + } + } + } + } +} + +/** + * Processes a single active item. + * @param g A pointer to the current game. + * @param it A pointer to the item we're processing. + * @param nonant The current submap nonant. + * @param i The x-coordinate inside the submap. + * @param j The y-coordinate inside the submap. + * @return true If the item needs to be removed. + */ +bool map::process_active_item(game* g, item *it, const int nonant, const int i, const int j) { + if (it->active || + (it->is_container() && it->contents.size() > 0 && + it->contents[0].active)) + { + if (it->is_food()) { // food items + if (it->has_flag("HOT")) { + it->item_counter--; + if (it->item_counter == 0) { + it->item_tags.erase("HOT"); + it->active = false; + grid[nonant]->active_item_count--; + } + } + } else if (it->is_food_container()) { // food in containers + if (it->contents[0].has_flag("HOT")) { + it->contents[0].item_counter--; + if (it->contents[0].item_counter == 0) { + it->contents[0].item_tags.erase("HOT"); + it->contents[0].active = false; + grid[nonant]->active_item_count--; + } + } + } else if (it->type->id == "corpse") { // some corpses rez over time + if (it->ready_to_revive(g)) { + if (rng(0,it->volume()) > it->burnt) { + int mapx = (nonant % my_MAPSIZE) * SEEX + i; + int mapy = (nonant / my_MAPSIZE) * SEEY + j; + if (g->u_see(mapx, mapy)) { + g->add_msg(_("A nearby corpse rises and moves towards you!")); } + g->revive_corpse(mapx, mapy, it); + return true; + } else { + it->active = false; + } + } + } else if (!it->is_tool()) { // It's probably a charger gun + it->active = false; + it->charges = 0; + } else { + it_tool* tmp = dynamic_cast(it->type); + if (tmp->use != &iuse::none) { + tmp->use.call(&(g->u), it, true); + } + if (tmp->turns_per_charge > 0 && int(g->turn) % tmp->turns_per_charge == 0) { + it->charges--; + } + if (it->charges <= 0) { + if (tmp->use != &iuse::none) { + tmp->use.call(&(g->u), it, false); + } + if (tmp->revert_to == "null" || it->charges == -1) { + return true; + } else { + it->type = itypes[tmp->revert_to]; } } } } + //Default: Don't remove the item after processing + return false; } std::list map::use_amount(const point origin, const int range, const itype_id type, @@ -2501,7 +2586,7 @@ std::list map::use_charges(const point origin, const int range, const ityp if (quantity == 0) return ret; } - + if (craftpart >= 0) { // we have a craftrig, now to see what to drain ammotype ftype = "NULL"; @@ -2520,7 +2605,7 @@ std::list map::use_charges(const point origin, const int range, const ityp if (quantity == 0) return ret; } - + if (forgepart >= 0) { // we have a veh_forge, now to see what to drain ammotype ftype = "NULL"; @@ -2649,7 +2734,7 @@ void map::disarm_trap(game *g, const int x, const int y) std::vector comp = g->traps[tr_at(x, y)]->components; for (int i = 0; i < comp.size(); i++) { if (comp[i] != "null") - spawn_item(x, y, comp[i], 0, 0, 1); + spawn_item(x, y, comp[i], 1, 1); } if (tr_at(x, y) == tr_engine) { for (int i = -1; i <= 1; i++) { @@ -2672,7 +2757,7 @@ void map::disarm_trap(game *g, const int x, const int y) g->add_msg(_("You fail to disarm the trap, and you set it off!")); trap* tr = g->traps[tr_at(x, y)]; trapfunc f; - (f.*(tr->act))(g, x, y); + (f.*(tr->act))(x, y); if(diff - roll <= 6) // Give xp for failing, but not if we failed terribly (in which // case the trap may not be disarmable). @@ -2856,17 +2941,17 @@ bool map::allow_camp(const int x, const int y, const int radius) return camp_at(x, y, radius) == NULL; } +// locate the nearest camp in some radius (default CAMPSIZE) basecamp* map::camp_at(const int x, const int y, const int radius) { - // locate the nearest camp in a CAMPSIZE radius if (!INBOUNDS(x, y)) { return NULL; } - const int sx = std::max(0, x / SEEX - CAMPSIZE); - const int sy = std::max(0, y / SEEY - CAMPSIZE); - const int ex = std::min(MAPSIZE - 1, x / SEEX + CAMPSIZE); - const int ey = std::min(MAPSIZE - 1, y / SEEY + CAMPSIZE); + const int sx = std::max(0, x / SEEX - radius); + const int sy = std::max(0, y / SEEY - radius); + const int ex = std::min(MAPSIZE - 1, x / SEEX + radius); + const int ey = std::min(MAPSIZE - 1, y / SEEY + radius); for (int ly = sy; ly < ey; ++ly) { for (int lx = sx; lx < ex; ++lx) { @@ -3454,6 +3539,14 @@ void map::shift(game *g, const int wx, const int wy, const int wz, const int sx, } } + // update vehicles own overmap location + std::set::iterator veh; + for (veh = vehicle_list.begin(); veh != vehicle_list.end(); ++veh) + { + (*veh)->update_map_x(wx); + (*veh)->update_map_y(wy); + } + // Clear vehicle list and rebuild after shift clear_vehicle_cache(); vehicle_list.clear(); @@ -3672,8 +3765,8 @@ bool map::loadn(game *g, const int worldx, const int worldy, const int worldz, // overx, overy is where in the overmap we need to pull data from // Each overmap square is two nonants; to prevent overlap, generate only at // squares divisible by 2. - int newmapx = worldx + gridx - ((worldx + gridx) % 2); - int newmapy = worldy + gridy - ((worldy + gridy) % 2); + int newmapx = worldx + gridx - abs((worldx + gridx) % 2); + int newmapy = worldy + gridy - abs((worldy + gridy) % 2); overmap* this_om = om; int shiftx = 0; @@ -3799,7 +3892,7 @@ bool map::inbounds(const int x, const int y) return (x >= 0 && x < SEEX * my_MAPSIZE && y >= 0 && y < SEEY * my_MAPSIZE); } -bool map::add_graffiti(game *g, int x, int y, std::string contents) +bool map::add_graffiti(int x, int y, std::string contents) { int nx = x; int ny = y; diff --git a/map.h b/src/map.h similarity index 95% rename from map.h rename to src/map.h index a1c5463b02610..1553f87de24a8 100644 --- a/map.h +++ b/src/map.h @@ -191,7 +191,7 @@ class map // put player on vehicle at x,y void board_vehicle(game *g, int x, int y, player *p); - void unboard_vehicle(game *g, const int x, const int y);//remove player from vehicle at x,y + void unboard_vehicle(const int x, const int y);//remove player from vehicle at x,y void update_vehicle_cache(vehicle *, const bool brand_new = false); void reset_vehicle_cache(); void clear_vehicle_cache(); @@ -238,6 +238,7 @@ class map std::string features(const int x, const int y); // Words relevant to terrain (sharp, etc) bool has_flag(std::string flag, const int x, const int y); // checks terrain, furniture and vehicles + bool can_put_items(const int x, const int y); // True if items can be placed in this tile bool has_flag_ter(std::string flag, const int x, const int y); // checks terrain bool has_flag_furn(std::string flag, const int x, const int y); // checks furniture bool has_flag_ter_or_furn(std::string flag, const int x, const int y); // checks terrain or furniture @@ -254,7 +255,7 @@ class map void translate_radius(const std::string terfrom, const std::string terto, const float radi, const int uX, const int uY); void translate(const ter_id from, const ter_id to); // Change all instances of $from->$to void translate_radius(const ter_id from, const ter_id to, const float radi, const int uX, const int uY); - bool close_door(const int x, const int y, const bool inside); + bool close_door(const int x, const int y, const bool inside, const bool check_only); bool open_door(const int x, const int y, const bool inside); // bash: if res pointer is supplied, res will contain absorbed impact or -1 bool bash(const int x, const int y, const int str, std::string &sound, int *res = 0); @@ -282,14 +283,15 @@ class map void i_rem(const int x, const int y, const int index); point find_item(const item *it); void spawn_artifact(const int x, const int y, itype* type, int bday); - void spawn_item(const int x, const int y, std::string itype_id, int birthday, int quantity = 0, int charges = 0, int damlevel = 0); + void spawn_item(const int x, const int y, const std::string &itype_id, + const unsigned quantity=1, const int charges=0, + const unsigned birthday=0, const int damlevel=0); int max_volume(const int x, const int y); int free_volume(const int x, const int y); int stored_volume(const int x, const int y); bool is_full(const int x, const int y, const int addvolume = -1, const int addnumber = -1 ); bool add_item_or_charges(const int x, const int y, item new_item, int overflow_radius = 2); void process_active_items(game *g); - void process_active_items_in_submap(game *g, const int nonant); void process_vehicles(game *g); std::list use_amount(const point origin, const int range, const itype_id type, const int amount, @@ -332,7 +334,7 @@ class map // Graffiti graffiti graffiti_at(int x, int y); - bool add_graffiti(game *g, int x, int y, std::string contents); + bool add_graffiti(int x, int y, std::string contents); // mapgen.cpp functions void generate(game *g, overmap *om, const int x, const int y, const int z, const int turn); @@ -345,8 +347,8 @@ class map const int x2, const int y2, bool ongrass, const int turn); // put_items_from puts exactly num items, based on chances void put_items_from(items_location loc, const int num, const int x, const int y, const int turn = 0, const int quantity = 0, const int charges = 0, const int damlevel = 0); - void spawn_item(const int x, const int y, item new_item, const int birthday, - const int quantity, const int charges, const int damlevel); + void spawn_item(const int x, const int y, item new_item, + const int charges, const int damlevel); void add_spawn(std::string type, const int count, const int x, const int y, bool friendly = false, const int faction_id = -1, const int mission_id = -1, std::string name = "NONE"); @@ -376,7 +378,7 @@ class map int getmapsize() { return my_MAPSIZE; }; - // Not protected/private for building_generation.cpp access + // Not protected/private for mapgen_functions.cpp access void rotate(const int turns);// Rotates the current map 90*turns degress clockwise // Useful for houses, shops, etc void add_road_vehicles(bool city, int facing); @@ -435,6 +437,10 @@ submap * getsubmap( const int grididx ); void forget_traps(int gridx, int gridy); vehicle *add_vehicle_to_map(vehicle *veh, const int x, const int y, const bool merge_wrecks = true); void add_item(const int x, const int y, item new_item, int maxitems = 64); + + void process_active_items_in_submap(game *g, const int nonant); + void process_active_items_in_vehicles(game *g, const int nonant); + bool process_active_item(game *g, item *it, const int nonant, const int i, const int j); float lm[MAPSIZE*SEEX][MAPSIZE*SEEY]; float sm[MAPSIZE*SEEX][MAPSIZE*SEEY]; diff --git a/mapbuffer.cpp b/src/mapbuffer.cpp similarity index 78% rename from mapbuffer.cpp rename to src/mapbuffer.cpp index 7314507093164..bf7c345e5b06e 100644 --- a/mapbuffer.cpp +++ b/src/mapbuffer.cpp @@ -8,6 +8,7 @@ #include "picofunc.h" #define dbg(x) dout((DebugLevel)(x),D_MAP) << __FILE__ << ":" << __LINE__ << ": " +const int savegame_minver_map = 11; mapbuffer MAPBUFFER; @@ -125,81 +126,81 @@ void mapbuffer::save() submap *sm = it->second; fout << sm->turn_last_touched << std::endl; fout << sm->temperature << std::endl; -// Dump the terrain. - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) - fout << int(sm->ter[i][j]) << " "; - fout << std::endl; - } - // Dump the radiation - int lastrad = -1; - int count = 0; - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) { - int r = sm->rad[i][j]; - if (r == lastrad) { - count++; - } else { - if (count) { - fout << count << " "; - } - fout << r << " "; - lastrad = r; - count = 1; - } - } - } - fout << count; - fout << std::endl; - // Furniture - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) { - if (sm->frn[i][j] != f_null) - fout << "f " << i << " " << j << " " << sm->frn[i][j] << - std::endl; - } - } - // Items section; designate it with an I. Then check itm[][] for each square - // in the grid and print the coords and the item's details. - // Designate it with a C if it's contained in the prior item. - // Also, this wastes space since we print the coords for each item, when we - // could be printing a list of items for each coord (except the empty ones) - item tmp; - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) { - for (int k = 0; k < sm->itm[i][j].size(); k++) { - tmp = sm->itm[i][j][k]; - fout << "I " << i << " " << j << std::endl; - fout << tmp.save_info() << std::endl; - for (int l = 0; l < tmp.contents.size(); l++) - fout << "C " << std::endl << tmp.contents[l].save_info() << std::endl; - } - } - } - // Output the traps - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) { - if (sm->trp[i][j] != tr_null) - fout << "T " << i << " " << j << " " << sm->trp[i][j] << - std::endl; - } - } + std::stringstream terout; + std::stringstream radout; + std::stringstream furnout; + std::stringstream itemout; + std::stringstream trapout; + std::stringstream fieldout; + std::stringstream graffout; + int count = 0; + int lastrad = -1; + for(int j = 0; j < SEEY; j++){ + for(int i = 0; i < SEEX; i++){ + // Save terrains + terout << int(sm->ter[i][j]) << " "; + + // Save radiation, re-examine this because it doesnt look like it works right + int r = sm->rad[i][j]; + if (r == lastrad) { + count++; + } else { + if (count) { + radout << count << " "; + } + radout << r << " "; + lastrad = r; + count = 1; + } - // Output the fields - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) { - if (sm->fld[i][j].fieldCount() > 0){ - for(std::map::iterator it = sm->fld[i][j].getFieldStart(); - it != sm->fld[i][j].getFieldEnd(); ++it){ - if(it->second != NULL){ - fout << "F " << i << " " << j << " " << int(it->second->getFieldType()) << " " << - int(it->second->getFieldDensity()) << " " << (it->second->getFieldAge()) << std::endl; - } + // Save furniture + if (sm->frn[i][j] != f_null) + { + furnout << "f " << i << " " << j << " " << sm->frn[i][j] << std::endl; + } + + // Save items + item tmp; + for (int k = 0; k < sm->itm[i][j].size(); k++) { + tmp = sm->itm[i][j][k]; + itemout << "I " << i << " " << j << std::endl; + itemout << tmp.save_info() << std::endl; + for (int l = 0; l < tmp.contents.size(); l++) + { + itemout << "C " << std::endl << tmp.contents[l].save_info() << std::endl; + } + } + + // Save traps + if (sm->trp[i][j] != tr_null) + { + trapout << "T " << i << " " << j << " " << sm->trp[i][j] << std::endl; + } + + // Save fields + if (sm->fld[i][j].fieldCount() > 0){ + for(std::map::iterator it = sm->fld[i][j].getFieldStart(); + it != sm->fld[i][j].getFieldEnd(); ++it){ + if(it->second != NULL){ + fieldout << "F " << i << " " << j << " " << int(it->second->getFieldType()) << " " << + int(it->second->getFieldDensity()) << " " << (it->second->getFieldAge()) << std::endl; + } + } + } + + // Save graffiti + if (sm->graf[i][j].contents) + { + graffout << "G " << i << " " << j << *sm->graf[i][j].contents << std::endl; + } } - } - } - } + terout << std::endl; + } + radout << count << std::endl; + + fout << terout.str() << radout.str() << furnout.str() << itemout.str() << trapout.str() << graffout.str(); + // Output the spawn points spawn_point tmpsp; for (int i = 0; i < sm->spawns.size(); i++) { @@ -222,13 +223,6 @@ void mapbuffer::save() if (sm->camp.is_valid()) fout << "B " << sm->camp.save_data() << std::endl; - // Output the graffiti - for (int j = 0; j < SEEY; j++) { - for (int i = 0; i < SEEX; i++) { - if (sm->graf[i][j].contents) - fout << "G " << i << " " << j << *sm->graf[i][j].contents << std::endl; - } - } fout << "----" << std::endl; num_saved_submaps++; @@ -272,11 +266,11 @@ void mapbuffer::unserialize(std::ifstream & fin) { savegame_loading_version = savedver; } } - if (savegame_loading_version != savegame_version) { // We're version x but this is a save from version y, let's check to see if there's a loader + if (savegame_loading_version != savegame_version && savegame_loading_version < savegame_minver_map) { // We're version x but this is a save from version y, let's check to see if there's a loader if ( unserialize_legacy(fin) == true ) { // loader returned true, we're done. return; } else { // no unserialize_legacy for version y, continuing onwards towards possible disaster. Or not? - popup_nowait(_("Cannot find loader for overmap save data in old version %d, attempting to load as current version %d."),savegame_loading_version, savegame_version); + popup_nowait(_("Cannot find loader for map save data in old version %d, attempting to load as current version %d."),savegame_loading_version, savegame_version); } } diff --git a/mapbuffer.h b/src/mapbuffer.h similarity index 100% rename from mapbuffer.h rename to src/mapbuffer.h diff --git a/mapdata.cpp b/src/mapdata.cpp similarity index 100% rename from mapdata.cpp rename to src/mapdata.cpp diff --git a/mapdata.h b/src/mapdata.h similarity index 100% rename from mapdata.h rename to src/mapdata.h diff --git a/src/mapgen.cpp b/src/mapgen.cpp new file mode 100644 index 0000000000000..8fc0e1c4fde4c --- /dev/null +++ b/src/mapgen.cpp @@ -0,0 +1,16307 @@ +#include "map.h" +#include "omdata.h" +#include "mapitems.h" +#include "output.h" +#include "game.h" +#include "rng.h" +#include "line.h" +#include "debug.h" +#include "options.h" +#include "item_factory.h" +#include "mapgen_functions.h" +#include "mapgenformat.h" +#include "overmapbuffer.h" +#include "enums.h" +#include "monstergenerator.h" + +#include +#include +#include + +#ifndef sgn +#define sgn(x) (((x) < 0) ? -1 : 1) +#endif + +#define dbg(x) dout((DebugLevel)(x),D_MAP_GEN) << __FILE__ << ":" << __LINE__ << ": " + +#define MON_RADIUS 3 + +enum room_type { + room_null, + room_closet, + room_lobby, + room_chemistry, + room_teleport, + room_goo, + room_cloning, + room_vivisect, + room_bionics, + room_dorm, + room_living, + room_bathroom, + room_kitchen, + room_bedroom, + room_backyard, + room_study, + room_mine_shaft, + room_mine_office, + room_mine_storage, + room_mine_fuel, + room_mine_housing, + room_bunker_bots, + room_bunker_launcher, + room_bunker_rifles, + room_bunker_grenades, + room_bunker_armor, + room_mansion_courtyard, + room_mansion_entry, + room_mansion_bedroom, + room_mansion_library, + room_mansion_kitchen, + room_mansion_dining, + room_mansion_game, + room_mansion_pool, + room_mansion_study, + room_mansion_bathroom, + room_mansion_gallery, + room_split +}; + +bool connects_to(oter_id there, int dir_from_here); +void house_room(map *m, room_type type, int x1, int y1, int x2, int y2); +void science_room(map *m, int x1, int y1, int x2, int y2, int rotate); +void set_science_room(map *m, int x1, int y1, bool faces_right, int turn); +void silo_rooms(map *m); +void build_mine_room(map *m, room_type type, int x1, int y1, int x2, int y2); +map_extra random_map_extra(map_extras); + +room_type pick_mansion_room(int x1, int y1, int x2, int y2); +void build_mansion_room(map *m, room_type type, int x1, int y1, int x2, int y2); +void mansion_room(map *m, int x1, int y1, int x2, int y2); // pick & build + +void line(map *m, ter_id type, int x1, int y1, int x2, int y2); +void line_furn(map *m, furn_id type, int x1, int y1, int x2, int y2); +void fill_background(map *m, ter_id type); +void fill_background(map *m, ter_id (*f)()); +void square(map *m, ter_id type, int x1, int y1, int x2, int y2); +void square(map *m, ter_id (*f)(), int x1, int y1, int x2, int y2); +void square_furn(map *m, furn_id type, int x1, int y1, int x2, int y2); +void rough_circle(map *m, ter_id type, int x, int y, int rad); +void add_corpse(game *g, map *m, int x, int y); + +void map::generate(game *g, overmap *om, const int x, const int y, const int z, const int turn) +{ + dbg(D_INFO) << "map::generate( g[" << g << "], om[" << (void *)om << "], x[" << x << "], " + << "y[" << y << "], turn[" << turn << "] )"; + + // First we have to create new submaps and initialize them to 0 all over + // We create all the submaps, even if we're not a tinymap, so that map + // generation which overflows won't cause a crash. At the bottom of this + // function, we save the upper-left 4 submaps, and delete the rest. + for (int i = 0; i < my_MAPSIZE * my_MAPSIZE; i++) { + grid[i] = new submap; + grid[i]->active_item_count = 0; + grid[i]->field_count = 0; + grid[i]->turn_last_touched = turn; + grid[i]->temperature = 0; + grid[i]->comp = computer(); + grid[i]->camp = basecamp(); + for (int x = 0; x < SEEX; x++) { + for (int y = 0; y < SEEY; y++) { + grid[i]->ter[x][y] = t_null; + grid[i]->frn[x][y] = f_null; + grid[i]->trp[x][y] = tr_null; + grid[i]->rad[x][y] = 0; + grid[i]->graf[x][y] = graffiti(); + } + } + } + + oter_id terrain_type, t_north, t_neast, t_east, t_seast, t_south, + t_nwest, t_west, t_swest, t_above; + unsigned zones = 0; + int overx = x / 2; + int overy = y / 2; + if ( x >= OMAPX * 2 || x < 0 || y >= OMAPY * 2 || y < 0) { + dbg(D_INFO) << "map::generate: In section 1"; + + // This happens when we're at the very edge of the overmap, and are generating + // terrain for the adjacent overmap. + int sx = 0, sy = 0; + overx = (x % (OMAPX * 2)) / 2; + if (x >= OMAPX * 2) { + sx = 1; + } + if (x < 0) { + sx = -1; + overx = (OMAPX * 2 + x) / 2; + } + overy = (y % (OMAPY * 2)) / 2; + if (y >= OMAPY * 2) { + sy = 1; + } + if (y < 0) { + overy = (OMAPY * 2 + y) / 2; + sy = -1; + } + overmap tmp = overmap_buffer.get(g, om->pos().x + sx, om->pos().y + sy); + terrain_type = tmp.ter(overx, overy, z); + //zones = tmp.zones(overx, overy); + t_above = tmp.ter(overx, overy, z + 1); + + if (overy - 1 >= 0) { + t_north = tmp.ter(overx, overy - 1, z); + } else { + t_north = om->ter(overx, OMAPY - 1, z); + } + + if (overy - 1 >= 0 && overx + 1 < OMAPX) { + t_neast = tmp.ter(overx + 1, overy - 1, z); + } else if (overy - 1 >= 0) { + t_neast = om->ter(0, overy - 1, z); + } else if (overx + 1 < OMAPX) { + t_neast = om->ter(overx + 1, OMAPY - 1, z); + } else { + t_neast = om->ter(0, OMAPY - 1, z); + } + + if (overx + 1 < OMAPX) { + t_east = tmp.ter(overx + 1, overy, z); + } else { + t_east = om->ter(0, overy, z); + } + + if (overy + 1 < OMAPY && overx + 1 < OMAPX) { + t_seast = tmp.ter(overx + 1, overy + 1, z); + } else if (overy + 1 < OMAPY) { + t_seast = om->ter(0, overy + 1, z); + } else if (overx + 1 < OMAPX) { + t_seast = om->ter(overx + 1, 0, z); + } else { + t_seast = om->ter(0, 0, z); + } + + if (overy + 1 < OMAPY) { + t_south = tmp.ter(overx, overy + 1, z); + } else { + t_south = om->ter(overx, 0, z); + } + + if (overy - 1 >= 0 && overx - 1 >= 0) { + t_nwest = tmp.ter(overx - 1, overy - 1, z); + } else if (overy - 1 >= 0) { + t_nwest = om->ter(OMAPX - 1, overy - 1, z); + } else if (overx - 1 >= 0) { + t_nwest = om->ter(overx - 1, OMAPY - 1, z); + } else { + t_nwest = om->ter(OMAPX - 1, OMAPY - 1, z); + } + + if (overx - 1 >= 0) { + t_west = tmp.ter(overx - 1, overy, z); + } else { + t_west = om->ter(OMAPX - 1, overy, z); + } + + if (overy + 1 < OMAPY && overx - 1 >= 0) { + t_swest = tmp.ter(overx - 1, overy + 1, z); + } else if (overy + 1 < OMAPY) { + t_swest = om->ter(OMAPX - 1, overy + 1, z); + } else if (overx - 1 >= 0) { + t_swest = om->ter(overx - 1, 0, z); + } else { + t_swest = om->ter(OMAPX - 1, 0, z); + } + + } else { + dbg(D_INFO) << "map::generate: In section 2"; + + t_above = om->ter(overx, overy, z + 1); + terrain_type = om->ter(overx, overy, z); + + if (overy - 1 >= 0) { + t_north = om->ter(overx, overy - 1, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y - 1); + t_north = tmp.ter(overx, OMAPY - 1, z); + } + + if (overy - 1 >= 0 && overx + 1 < OMAPX) { + t_neast = om->ter(overx + 1, overy - 1, z); + } else if (overy - 1 >= 0) { + overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y - 1); + t_neast = tmp.ter(0, overy - 1, z); + } else if (overx + 1 < OMAPX) { + overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y); + t_neast = tmp.ter(overx + 1, OMAPY - 1, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y - 1); + t_neast = tmp.ter(0, OMAPY - 1, z); + } + + if (overx + 1 < OMAPX) { + t_east = om->ter(overx + 1, overy, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y); + t_east = tmp.ter(0, overy, z); + } + + if (overy + 1 < OMAPY && overx + 1 < OMAPX) { + t_seast = om->ter(overx + 1, overy + 1, z); + } else if (overy + 1 < OMAPY) { + overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y + 1); + t_seast = tmp.ter(0, overy + 1, z); + } else if (overx + 1 < OMAPX) { + overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y); + t_seast = tmp.ter(overx + 1, 0, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x + 1, om->pos().y + 1); + t_seast = tmp.ter(0, 0, z); + } + + if (overy + 1 < OMAPY) { + t_south = om->ter(overx, overy + 1, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y + 1); + t_south = tmp.ter(overx, 0, z); + } + + if (overy - 1 >= 0 && overx - 1 >= 0) { + t_nwest = om->ter(overx - 1, overy - 1, z); + } else if (overy - 1 >= 0) { + overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y - 1); + t_nwest = tmp.ter(OMAPX - 1, overy - 1, z); + } else if (overx - 1 >= 0) { + overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y); + t_nwest = tmp.ter(overx - 1, OMAPY - 1, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y - 1); + t_nwest = tmp.ter(OMAPX - 1, OMAPY - 1, z); + } + + if (overx - 1 >= 0) { + t_west = om->ter(overx - 1, overy, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y); + t_west = tmp.ter(OMAPX - 1, overy, z); + } + + if (overy + 1 < OMAPY && overx - 1 >= 0) { + t_swest = om->ter(overx - 1, overy + 1, z); + } else if (overy + 1 < OMAPY) { + overmap tmp = overmap_buffer.get(g, om->pos().x, om->pos().y + 1); + t_swest = tmp.ter(OMAPX - 1, overy + 1, z); + } else if (overx - 1 >= 0) { + overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y); + t_swest = tmp.ter(overx - 1, 0, z); + } else { + overmap tmp = overmap_buffer.get(g, om->pos().x - 1, om->pos().y + 1); + t_swest = tmp.ter(OMAPX - 1, 0, z); + } + } + + // This attempts to scale density of zombies inversely with distance from the nearest city. + // In other words, make city centers dense and perimiters sparse. + float density = 0.0; + for (int i = overx - MON_RADIUS; i <= overx + MON_RADIUS; i++) { + for (int j = overy - MON_RADIUS; j <= overy + MON_RADIUS; j++) { + density += otermap[om->ter(i, j, z)].mondensity; + } + } + density = density / 100; + + draw_map(terrain_type, t_north, t_east, t_south, t_west, t_neast, t_seast, t_nwest, t_swest, + t_above, turn, g, density, z); + + map_extras ex = get_extras(otermap[terrain_type].extras); + if ( one_in( ex.chance )) { + add_extra( random_map_extra( ex ), g); + } + + post_process(g, zones); + + // Okay, we know who are neighbors are. Let's draw! + // And finally save used submaps and delete the rest. + for (int i = 0; i < my_MAPSIZE; i++) { + for (int j = 0; j < my_MAPSIZE; j++) { + dbg(D_INFO) << "map::generate: submap (" << i << "," << j << ")"; + dbg(D_INFO) << grid[i + j]; + + if (i <= 1 && j <= 1) { + saven(om, turn, x, y, z, i, j); + } else { + delete grid[i + j * my_MAPSIZE]; + } + } + } +} + +// TODO: clean up variable shadowing in this function +// unfortunately, due to how absurdly long the function is (over 8000 lines!), it'll be hard to +// track down what is and isn't supposed to be carried around between bits of code. +// I suggest that we break the function down into smaller parts + +void map::draw_map(const oter_id terrain_type, const oter_id t_north, const oter_id t_east, + const oter_id t_south, const oter_id t_west, const oter_id t_neast, + const oter_id t_seast, const oter_id t_nwest, const oter_id t_swest, + const oter_id t_above, const int turn, game *g, const float density, + const int zlevel) +{ + // Big old switch statement with a case for each overmap terrain type. + // Many of these can be copied from another type, then rotated; for instance, + // "house_east" is identical to "house_north", just rotated 90 degrees to + // the right. The rotate(int) function is at the bottom of this file. + + // Below comment is outdated + // TODO: Update comment + // The place_items() function takes a mapitems type (see mapitems.h and + // mapitemsdef.cpp), an "odds" int giving the chance for a single item to be + // placed, four ints (x1, y1, x2, y2) corresponding to the upper left corner + // and lower right corner of a square where the items are placed, a boolean + // that indicates whether items may spawn on grass & dirt, and finally an + // integer that indicates on which turn the items were created. This final + // integer should be 0, unless the items are "fresh-grown" like wild fruit. + + //these variables are used in regular house generation. Placed here by Whales + int rn = 0; + int lw = 0; + int rw = 0; + int mw = 0; + int tw = 0; + int bw = 0; + int cw = 0; + int actual_house_height = 0; + int bw_old = 0; + + int x = 0; + int y = 0; + + // To distinguish between types of labs + bool ice_lab = true; + + oter_id t_nesw[] = {t_north, t_east, t_south, t_west, t_neast, t_seast, t_nwest, t_swest}; + int nesw_fac[] = {0, 0, 0, 0, 0, 0, 0, 0}; + int &n_fac = nesw_fac[0], &e_fac = nesw_fac[1], &s_fac = nesw_fac[2], &w_fac = nesw_fac[3]; + + mapgendata facing_data(t_north, t_east, t_south, t_west, t_neast, t_seast, t_nwest, t_swest); + + computer *tmpcomp = NULL; + bool terrain_type_found = true; + + if (terrain_type == "") { + mapgen_null(this); + } else if (terrain_type == "crater") { + mapgen_crater(this, facing_data); + } else if (terrain_type == "field") { + mapgen_field(this, turn); + } else if (terrain_type == "dirtlot") { + mapgen_dirtlot(this); + + } else if (is_ot_type("forest", terrain_type)) { + mapgen_forest_general(this, terrain_type, facing_data, turn); + + } else if (terrain_type == "hive") { + mapgen_hive(this, facing_data, turn); + + } else if (terrain_type == "spider_pit") { + mapgen_spider_pit(this, facing_data, turn); + + } else if (terrain_type == "fungal_bloom") { + mapgen_fungal_bloom(this); + + } else if (terrain_type == "road_ns" || + terrain_type == "road_ew") { + mapgen_road_straight(this, terrain_type, facing_data, turn, density); + + } else if (terrain_type == "road_ne" || + terrain_type == "road_es" || + terrain_type == "road_sw" || + terrain_type == "road_wn") { + mapgen_road_curved(this, terrain_type, facing_data, turn, density); + + } else if (terrain_type == "road_nes" || + terrain_type == "road_new" || + terrain_type == "road_nsw" || + terrain_type == "road_esw") { + mapgen_road_tee(this, terrain_type, facing_data, turn, density); + + } else if (terrain_type == "road_nesw" || + terrain_type == "road_nesw_manhole") { + mapgen_road_four_way(this, terrain_type, facing_data, turn, density); + + } else if (is_ot_type("bridge", terrain_type)) { + mapgen_bridge(this, terrain_type, turn); + + } else if (is_ot_type("hiway", terrain_type)) { + mapgen_highway(this, terrain_type, turn); + + } else if (terrain_type == "river_center") { + fill_background(this, t_water_dp); + + } else if (terrain_type == "river_c_not_ne" || + terrain_type == "river_c_not_se" || + terrain_type == "river_c_not_sw" || + terrain_type == "river_c_not_nw") { + mapgen_river_curved_not(this, terrain_type); + + } else if (terrain_type == "river_north" || + terrain_type == "river_east" || + terrain_type == "river_south" || + terrain_type == "river_west") { + mapgen_river_straight(this, terrain_type); + + } else if (terrain_type == "river_ne" || + terrain_type == "river_se" || + terrain_type == "river_sw" || + terrain_type == "river_nw") { + mapgen_river_curved(this, terrain_type); + + } else if (is_ot_type("house", terrain_type)) { + + lw = rng(0, 4); // West external wall + mw = lw + rng(7, 10); // Middle wall between bedroom & kitchen/bath + rw = SEEX * 2 - rng(1, 5); // East external wall + tw = rng(1, 6); // North external wall + bw = SEEX * 2 - rng(2, 5); // South external wall + cw = tw + rng(4, 7); // Middle wall between living room & kitchen/bed + actual_house_height = bw - rng(4, + 6); //reserving some space for backyard. Actual south external wall. + bw_old = bw; + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i > lw && i < rw && j > tw && j < bw) { + ter_set(i, j, t_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + if (i >= lw && i <= rw && (j == tw || j == bw)) { //placing north and south walls + ter_set(i, j, t_wall_h); + } + if ((i == lw || i == rw) && j > tw && + j < bw /*actual_house_height*/) { //placing west (lw) and east walls + ter_set(i, j, t_wall_v); + } + } + } + switch(rng(1, 3)) { + case 1: // Quadrants, essentially + mw = rng(lw + 5, rw - 5); + cw = tw + rng(4, 7); + house_room(this, room_living, mw, tw, rw, cw); + house_room(this, room_kitchen, lw, tw, mw, cw); + ter_set(mw, rng(tw + 2, cw - 2), (one_in(3) ? t_door_c : t_floor)); + rn = rng(lw + 1, mw - 2); + ter_set(rn , tw, t_window_domestic); + ter_set(rn + 1, tw, t_window_domestic); + rn = rng(mw + 1, rw - 2); + ter_set(rn , tw, t_window_domestic); + ter_set(rn + 1, tw, t_window_domestic); + rn = rng(lw + 3, rw - 3); // Bottom part mw + if (rn <= lw + 5) { + // Bedroom on right, bathroom on left + house_room(this, room_bedroom, rn, cw, rw, bw); + + // Put door between bedroom and living + ter_set(rng(rw - 1, rn > mw ? rn + 1 : mw + 1), cw, t_door_c); + + if (bw - cw >= 10 && rn - lw >= 6) { + // All fits, placing bathroom and 2nd bedroom + house_room(this, room_bathroom, lw, bw - 5, rn, bw); + house_room(this, room_bedroom, lw, cw, rn, bw - 5); + + // Put door between bathroom and bedroom + ter_set(rn, rng(bw - 4, bw - 1), t_door_c); + + if (one_in(3)) { + // Put door between 2nd bedroom and 1st bedroom + ter_set(rn, rng(cw + 1, bw - 6), t_door_c); + } else { + // ...Otherwise, between 2nd bedroom and kitchen + ter_set(rng(lw + 1, rn > mw ? mw - 1 : rn - 1), cw, t_door_c); + } + } else if (bw - cw > 4) { + // Too big for a bathroom, not big enough for 2nd bedroom + // Make it a bathroom anyway, but give the excess space back to + // the kitchen. + house_room(this, room_bathroom, lw, bw - 4, rn, bw); + for (int i = lw + 1; i < mw && i < rn; i++) { + ter_set(i, cw, t_floor); + } + + // Put door between excess space and bathroom + ter_set(rng(lw + 1, rn - 1), bw - 4, t_door_c); + + // Put door between excess space and bedroom + ter_set(rn, rng(cw + 1, bw - 5), t_door_c); + } else { + // Small enough to be a bathroom; make it one. + house_room(this, room_bathroom, lw, cw, rn, bw); + + if (one_in(5)) { + // Put door between batroom and kitchen with low chance + ter_set(rng(lw + 1, rn > mw ? mw - 1 : rn - 1), cw, t_door_c); + } else { + // ...Otherwise, between bathroom and bedroom + ter_set(rn, rng(cw + 1, bw - 1), t_door_c); + } + } + // Point on bedroom wall, for window + rn = rng(rn + 2, rw - 2); + } else { + // Bedroom on left, bathroom on right + house_room(this, room_bedroom, lw, cw, rn, bw); + + // Put door between bedroom and kitchen + ter_set(rng(lw + 1, rn > mw ? mw - 1 : rn - 1), cw, t_door_c); + + if (bw - cw >= 10 && rw - rn >= 6) { + // All fits, placing bathroom and 2nd bedroom + house_room(this, room_bathroom, rn, bw - 5, rw, bw); + house_room(this, room_bedroom, rn, cw, rw, bw - 5); + + // Put door between bathroom and bedroom + ter_set(rn, rng(bw - 4, bw - 1), t_door_c); + + if (one_in(3)) { + // Put door between 2nd bedroom and 1st bedroom + ter_set(rn, rng(cw + 1, bw - 6), t_door_c); + } else { + // ...Otherwise, between 2nd bedroom and living + ter_set(rng(rw - 1, rn > mw ? rn + 1 : mw + 1), cw, t_door_c); + } + } else if (bw - cw > 4) { + // Too big for a bathroom, not big enough for 2nd bedroom + // Make it a bathroom anyway, but give the excess space back to + // the living. + house_room(this, room_bathroom, rn, bw - 4, rw, bw); + for (int i = rw - 1; i > rn && i > mw; i--) { + ter_set(i, cw, t_floor); + } + + // Put door between excess space and bathroom + ter_set(rng(rw - 1, rn + 1), bw - 4, t_door_c); + + // Put door between excess space and bedroom + ter_set(rn, rng(cw + 1, bw - 5), t_door_c); + } else { + // Small enough to be a bathroom; make it one. + house_room(this, room_bathroom, rn, cw, rw, bw); + + if (one_in(5)) { + // Put door between bathroom and living with low chance + ter_set(rng(rw - 1, rn > mw ? rn + 1 : mw + 1), cw, t_door_c); + } else { + // ...Otherwise, between bathroom and bedroom + ter_set(rn, rng(cw + 1, bw - 1), t_door_c); + } + } + // Point on bedroom wall, for window + rn = rng(lw + 2, rn - 2); + } + ter_set(rn , bw, t_window_domestic); + ter_set(rn + 1, bw, t_window_domestic); + if (!one_in(3) && rw < SEEX * 2 - 1) { // Potential side windows + rn = rng(tw + 2, bw - 6); + ter_set(rw, rn , t_window_domestic); + ter_set(rw, rn + 4, t_window_domestic); + } + if (!one_in(3) && lw > 0) { // Potential side windows + rn = rng(tw + 2, bw - 6); + ter_set(lw, rn , t_window_domestic); + ter_set(lw, rn + 4, t_window_domestic); + } + if (one_in(2)) { // Placement of the main door + ter_set(rng(lw + 2, mw - 1), tw, (one_in(6) ? t_door_c : t_door_locked)); + if (one_in(5)) { // Placement of side door + ter_set(rw, rng(tw + 2, cw - 2), (one_in(6) ? t_door_c : t_door_locked)); + } + } else { + ter_set(rng(mw + 1, rw - 2), tw, (one_in(6) ? t_door_c : t_door_locked)); + if (one_in(5)) { + ter_set(lw, rng(tw + 2, cw - 2), (one_in(6) ? t_door_c : t_door_locked)); + } + } + break; + + case 2: // Old-style; simple; + //Modified by Jovan in 28 Aug 2013 + //Long narrow living room in front, big kitchen and HUGE bedroom + bw = SEEX * 2 - 2; + cw = tw + rng(3, 6); + mw = rng(lw + 7, rw - 4); + //int actual_house_height=bw-rng(4,6); + //in some rare cases some rooms (especially kitchen and living room) may get rather small + if ((tw <= 3) && ( abs((actual_house_height - 3) - cw) >= 3 ) ) { + //everything is fine + house_room(this, room_backyard, lw, actual_house_height + 1, rw, bw); + //door from bedroom to backyard + ter_set((lw + mw) / 2, actual_house_height, t_door_c); + } else { //using old layout + actual_house_height = bw_old; + } + // Plop down the rooms + house_room(this, room_living, lw, tw, rw, cw); + house_room(this, room_kitchen, mw, cw, rw, actual_house_height - 3); + house_room(this, room_bedroom, lw, cw, mw, actual_house_height ); //making bedroom smaller + house_room(this, room_bathroom, mw, actual_house_height - 3, rw, actual_house_height); + + // Space between kitchen & living room: + rn = rng(mw + 1, rw - 3); + ter_set(rn , cw, t_floor); + ter_set(rn + 1, cw, t_floor); + // Front windows + rn = rng(2, 5); + ter_set(lw + rn , tw, t_window_domestic); + ter_set(lw + rn + 1, tw, t_window_domestic); + ter_set(rw - rn , tw, t_window_domestic); + ter_set(rw - rn + 1, tw, t_window_domestic); + // Front door + ter_set(rng(lw + 4, rw - 4), tw, (one_in(6) ? t_door_c : t_door_locked)); + if (one_in(3)) { // Kitchen windows + rn = rng(cw + 1, actual_house_height - 5); + ter_set(rw, rn , t_window_domestic); + ter_set(rw, rn + 1, t_window_domestic); + } + if (one_in(3)) { // Bedroom windows + rn = rng(cw + 1, actual_house_height - 2); + ter_set(lw, rn , t_window_domestic); + ter_set(lw, rn + 1, t_window_domestic); + } + // Door to bedroom + if (one_in(4)) { + ter_set(rng(lw + 1, mw - 1), cw, t_door_c); + } else { + ter_set(mw, rng(cw + 3, actual_house_height - 4), t_door_c); + } + // Door to bathrom + if (one_in(4)) { + ter_set(mw, actual_house_height - 1, t_door_c); + } else { + ter_set(rng(mw + 2, rw - 2), actual_house_height - 3, t_door_c); + } + // Back windows + rn = rng(lw + 1, mw - 2); + ter_set(rn , actual_house_height, t_window_domestic); + ter_set(rn + 1, actual_house_height, t_window_domestic); + rn = rng(mw + 1, rw - 1); + ter_set(rn, actual_house_height, t_window_domestic); + break; + + case 3: // Long center hallway, kitchen, living room and office + mw = int((lw + rw) / 2); + cw = bw - rng(5, 7); + // Hallway doors and windows + ter_set(mw , tw, (one_in(6) ? t_door_c : t_door_locked)); + if (one_in(4)) { + ter_set(mw - 1, tw, t_window_domestic); + ter_set(mw + 1, tw, t_window_domestic); + } + for (int i = tw + 1; i < cw; i++) { // Hallway walls + ter_set(mw - 2, i, t_wall_v); + ter_set(mw + 2, i, t_wall_v); + } + if (one_in(2)) { // Front rooms are kitchen or living room + house_room(this, room_living, lw, tw, mw - 2, cw); + house_room(this, room_kitchen, mw + 2, tw, rw, cw); + } else { + house_room(this, room_kitchen, lw, tw, mw - 2, cw); + house_room(this, room_living, mw + 2, tw, rw, cw); + } + // Front windows + rn = rng(lw + 1, mw - 4); + ter_set(rn , tw, t_window_domestic); + ter_set(rn + 1, tw, t_window_domestic); + rn = rng(mw + 3, rw - 2); + ter_set(rn , tw, t_window_domestic); + ter_set(rn + 1, tw, t_window_domestic); + if (one_in(3) && lw > 0) { // Side windows? + rn = rng(tw + 1, cw - 2); + ter_set(lw, rn , t_window_domestic); + ter_set(lw, rn + 1, t_window_domestic); + } + if (one_in(3) && rw < SEEX * 2 - 1) { // Side windows? + rn = rng(tw + 1, cw - 2); + ter_set(rw, rn , t_window_domestic); + ter_set(rw, rn + 1, t_window_domestic); + } + if (one_in(2)) { // Bottom rooms are bedroom or bathroom + //bathroom to the left (eastern wall), study to the right + //house_room(this, room_bedroom, lw, cw, rw - 3, bw); + house_room(this, room_bedroom, mw - 2, cw, rw - 3, bw); + house_room(this, room_bathroom, rw - 3, cw, rw, bw); + house_room(this, room_study, lw, cw, mw - 2, bw); + //===Study Room Furniture== + ter_set(mw - 2, (bw + cw) / 2, t_door_o); + furn_set(lw + 1, cw + 1, f_chair); + furn_set(lw + 1, cw + 2, f_table); + ter_set(lw + 1, cw + 3, t_console_broken); + furn_set(lw + 3, bw - 1, f_bookcase); + place_items("magazines", 30, lw + 3, bw - 1, lw + 3, bw - 1, false, 0); + place_items("novels", 40, lw + 3, bw - 1, lw + 3, bw - 1, false, 0); + place_items("alcohol", 20, lw + 3, bw - 1, lw + 3, bw - 1, false, 0); + place_items("manuals", 30, lw + 3, bw - 1, lw + 3, bw - 1, false, 0); + //========================= + ter_set(rng(lw + 2, mw - 3), cw, t_door_c); + if (one_in(4)) { + ter_set(rng(rw - 2, rw - 1), cw, t_door_c); + } else { + ter_set(rw - 3, rng(cw + 2, bw - 2), t_door_c); + } + rn = rng(mw, rw - 5); //bedroom windows + ter_set(rn , bw, t_window_domestic); + ter_set(rn + 1, bw, t_window_domestic); + ter_set(rng(lw + 2, mw - 3), bw, t_window_domestic); //study window + + if (one_in(4)) { + ter_set(rng(rw - 2, rw - 1), bw, t_window_domestic); + } else { + ter(rw, rng(cw + 1, bw - 1)); + } + } else { //bathroom to the right + house_room(this, room_bathroom, lw, cw, lw + 3, bw); + //house_room(this, room_bedroom, lw + 3, cw, rw, bw); + house_room(this, room_bedroom, lw + 3, cw, mw + 2, bw); + house_room(this, room_study, mw + 2, cw, rw, bw); + //===Study Room Furniture== + ter_set(mw + 2, (bw + cw) / 2, t_door_c); + furn_set(rw - 1, cw + 1, f_chair); + furn_set(rw - 1, cw + 2, f_table); + ter_set(rw - 1, cw + 3, t_console_broken); + furn_set(rw - 3, bw - 1, f_bookcase); + place_items("magazines", 40, rw - 3, bw - 1, rw - 3, bw - 1, false, 0); + place_items("novels", 40, rw - 3, bw - 1, rw - 3, bw - 1, false, 0); + place_items("alcohol", 20, rw - 3, bw - 1, rw - 3, bw - 1, false, 0); + place_items("manuals", 20, rw - 3, bw - 1, rw - 3, bw - 1, false, 0); + //========================= + + if (one_in(4)) { + ter_set(rng(lw + 1, lw + 2), cw, t_door_c); + } else { + ter_set(lw + 3, rng(cw + 2, bw - 2), t_door_c); + } + rn = rng(lw + 4, mw); //bedroom windows + ter_set(rn , bw, t_window_domestic); + ter_set(rn + 1, bw, t_window_domestic); + ter_set(rng(mw + 3, rw - 1), bw, t_window_domestic); //study window + if (one_in(4)) { + ter_set(rng(lw + 1, lw + 2), bw, t_window_domestic); + } else { + ter(lw, rng(cw + 1, bw - 1)); + } + } + // Doors off the sides of the hallway + ter_set(mw - 2, rng(tw + 3, cw - 3), t_door_c); + ter_set(mw + 2, rng(tw + 3, cw - 3), t_door_c); + ter_set(mw, cw, t_door_c); + break; + } // Done with the various house structures + + if (rng(2, 7) < tw) { // Big front yard has a chance for a fence + for (int i = lw; i <= rw; i++) { + ter_set(i, 0, t_fence_h); + } + for (int i = 1; i < tw; i++) { + ter_set(lw, i, t_fence_v); + ter_set(rw, i, t_fence_v); + } + int hole = rng(SEEX - 3, SEEX + 2); + ter_set(hole, 0, t_dirt); + ter_set(hole + 1, 0, t_dirt); + if (one_in(tw)) { + ter_set(hole - 1, 1, t_tree_young); + ter_set(hole + 2, 1, t_tree_young); + } + } + + if (is_ot_type("house_base", terrain_type)) { + int attempts = 20; + do { + rn = rng(lw + 1, rw - 1); + attempts--; + } while (ter(rn, actual_house_height - 1) != t_floor && attempts); + if( ter(rn, actual_house_height - 1) == t_floor && attempts ) { + ter_set(rn, actual_house_height - 1, t_stairs_down); + } + } + if (one_in(100)) { // Houses have a 1 in 100 chance of wasps! + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (ter(i, j) == t_door_c || ter(i, j) == t_door_locked) { + ter_set(i, j, t_door_frame); + } + if (ter(i, j) == t_window_domestic && !one_in(3)) { + ter_set(i, j, t_window_frame); + } + if ((ter(i, j) == t_wall_h || ter(i, j) == t_wall_v) && one_in(8)) { + ter_set(i, j, t_paper); + } + } + } + int num_pods = rng(8, 12); + for (int i = 0; i < num_pods; i++) { + int podx = rng(1, SEEX * 2 - 2), pody = rng(1, SEEY * 2 - 2); + int nonx = 0, nony = 0; + while (nonx == 0 && nony == 0) { + nonx = rng(-1, 1); + nony = rng(-1, 1); + } + for (int x = -1; x <= 1; x++) { + for (int y = -1; y <= 1; y++) { + if ((x != nonx || y != nony) && (x != 0 || y != 0)) { + ter_set(podx + x, pody + y, t_paper); + } + } + } + add_spawn("mon_wasp", 1, podx, pody); + } + place_items("rare", 70, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, turn); + + } else if (one_in(150)) { // No wasps; black widows? + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (ter(i, j) == t_floor) { + if (one_in(15)) { + add_spawn("mon_spider_widow_giant", rng(1, 2), i, j); + for (int x = i - 1; x <= i + 1; x++) { + for (int y = j - 1; y <= j + 1; y++) { + if (ter(x, y) == t_floor) { + add_field(NULL, x, y, fd_web, rng(2, 3)); + } + } + } + } else if (move_cost(i, j) > 0 && one_in(5)) { + add_field(NULL, x, y, fd_web, 1); + } + } + } + } + place_items("rare", 60, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, turn); + } else { // Just boring old zombies + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + } + + if (terrain_type == "house_east" || + terrain_type == "house_base_east") { + rotate(1); + } else if (terrain_type == "house_south" || + terrain_type == "house_base_south") { + rotate(2); + } else if (terrain_type == "house_west" || + terrain_type == "house_base_west") { + rotate(3); + } + + } else if (terrain_type == "s_lot") { + mapgen_parking_lot(this, facing_data, turn); + + } else if (terrain_type == "pool") { + mapgen_pool(this); + + } else if (terrain_type == "park") { + mapgen_park(this); + + } else if (is_ot_type("s_gas", terrain_type)) { + mapgen_gas_station(this, terrain_type, density); + + } else if (is_ot_type("s_pharm", terrain_type)) { + + tw = rng(0, 4); + bw = SEEY * 2 - rng(1, 5); + mw = bw - rng(3, 4); // Top of the storage room + lw = rng(0, 4); + rw = SEEX * 2 - rng(1, 5); + cw = rng(13, rw - 5); // Left side of the storage room + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j == tw && ((i > lw + 2 && i < lw + 6) || (i > rw - 6 && i < rw - 2))) { + ter_set(i, j, t_window); + } else if ((j == tw && (i == lw + 8 || i == lw + 9)) || + (i == cw && j == mw + 1)) { + ter_set(i, j, t_door_c); + } else if (((j == tw || j == bw) && i >= lw && i <= rw) || + (j == mw && i >= cw && i < rw)) { + ter_set(i, j, t_wall_h); + } else if (((i == lw || i == rw) && j > tw && j < bw) || + (i == cw && j > mw && j < bw)) { + ter_set(i, j, t_wall_v); + } else if (((i == lw + 8 || i == lw + 9 || i == rw - 4 || i == rw - 3) && + j > tw + 3 && j < mw - 2) || + (j == bw - 1 && i > lw + 1 && i < cw - 1)) { + set(i, j, t_floor, f_rack); + } else if ((i == lw + 1 && j > tw + 8 && j < mw - 1) || + (j == mw - 1 && i > cw + 1 && i < rw)) { + set(i, j, t_floor, f_glass_fridge); + } else if ((j == mw && i > lw + 1 && i < cw) || + (j == tw + 6 && i > lw + 1 && i < lw + 6) || + (i == lw + 5 && j > tw && j < tw + 7)) { + set(i, j, t_floor, f_counter); + } else if (i > lw && i < rw && j > tw && j < bw) { + ter_set(i, j, t_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + + { + int num_carts = rng(0, 5); + for( int i = 0; i < num_carts; i++ ) { + add_vehicle (g, "shopping_cart", rng(lw, cw), rng(tw, mw), 90); + } + } + + if (one_in(3)) { + place_items("snacks", 74, lw + 8, tw + 4, lw + 8, mw - 3, false, 0); + } else if (one_in(4)) { + place_items("cleaning", 74, lw + 8, tw + 4, lw + 8, mw - 3, false, 0); + } else { + place_items("magazines", 74, lw + 8, tw + 4, lw + 8, mw - 3, false, 0); + } + if (one_in(5)) { + place_items("softdrugs", 84, lw + 9, tw + 4, lw + 9, mw - 3, false, 0); + } else if (one_in(4)) { + place_items("cleaning", 74, lw + 9, tw + 4, lw + 9, mw - 3, false, 0); + } else { + place_items("snacks", 74, lw + 9, tw + 4, lw + 9, mw - 3, false, 0); + } + if (one_in(5)) { + place_items("softdrugs", 84, rw - 4, tw + 4, rw - 4, mw - 3, false, 0); + } else { + place_items("snacks", 74, rw - 4, tw + 4, rw - 4, mw - 3, false, 0); + } + if (one_in(3)) { + place_items("snacks", 70, rw - 3, tw + 4, rw - 3, mw - 3, false, 0); + } else { + place_items("softdrugs", 80, rw - 3, tw + 4, rw - 3, mw - 3, false, 0); + } + place_items("fridgesnacks", 74, lw + 1, tw + 9, lw + 1, mw - 2, false, 0); + place_items("fridgesnacks", 74, cw + 2, mw - 1, rw - 1, mw - 1, false, 0); + place_items("harddrugs", 88, lw + 2, bw - 1, cw - 2, bw - 1, false, 0); + place_items("behindcounter", 78, lw + 1, tw + 1, lw + 4, tw + 5, false, 0); + if (terrain_type == "s_pharm_east") { + rotate(1); + } + if (terrain_type == "s_pharm_south") { + rotate(2); + } + if (terrain_type == "s_pharm_west") { + rotate(3); + } + place_spawns(g, "GROUP_PHARM", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("office_cubical", terrain_type)) { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + sss \n\ + ^sss^ \n\ + |---|-D|------|--|---| \n\ + |cdx|..|xdccxl|.^|cxc| \n\ + |.h....|.h..h......hd| \n\ + |---|..|------|..|---| \n\ + |xdl|....h..hd|..|xdc| \n\ + |ch....|dxcccx|....h.| \n\ + |---|..|------|..|---| \n\ + |xcc|...^cclc....|cdx| \n\ + |dh................hc| \n\ + |-------......|------| \n\ + |e.....+......|n.xdc.| \n\ + |S.....|----..|h.ch..| \n\ + |-+|-+-|......+.....^| \n\ + |..|..S|..hc..|------| \n\ + |l.|..T|cccc..|......| \n\ + |--|---|......|.htth.| \n\ + |^hhh..+......+.htth.| \n\ + |o.....|......|.htth.| \n\ + |o.dx..|--++--|.htth.| \n\ + |o.h...|$$ss$$|......| \n\ + |-wwww-| ss |-wwww-| \n\ + ss \n", + mapf::basic_bind("x $ ^ . - | # t + = D w T S e o h c d l s n", t_console_broken, t_shrub, t_floor, + t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, + t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_sidewalk, t_null), + mapf::basic_bind("x $ ^ . - | # t + = D w T S e o h c d l s n", f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null, f_safe_l)); + place_items("fridge", 50, 2, 12, 2, 13, false, 0); + place_items("cleaning", 50, 2, 15, 3, 16, false, 0); + place_items("office", 80, 11, 7, 13, 7, false, 0); + place_items("office", 80, 10, 3, 12, 3, false, 0); + place_items("cubical_office", 60, 2, 3, 3, 3, false, 0); + place_items("cubical_office", 60, 3, 6, 4, 6, false, 0); + place_items("cubical_office", 60, 3, 9, 4, 9, false, 0); + place_items("cubical_office", 60, 21, 3, 21, 4, false, 0); + place_items("cubical_office", 60, 20, 6, 21, 6, false, 0); + place_items("cubical_office", 60, 19, 9, 20, 9, false, 0); + place_items("cubical_office", 60, 18, 17, 19, 20, false, 0); + place_items("novels", 70, 2, 19, 2, 21, false, 0); + { + int num_chairs = rng(0, 6); + for( int i = 0; i < num_chairs; i++ ) { + add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); + } + } + if (terrain_type == "office_cubical_east") { + rotate(3); + } + if (terrain_type == "office_cubical_north") { + rotate(2); + } + if (terrain_type == "office_cubical_west") { + rotate(1); + } + + + } else if (terrain_type == "apartments_con_tower_1_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + |------|-|-|-|---|...\n\ + |.dBBd.+r|u+..eSc|...\n\ + w..BB..|-|-|....c|...\n\ + w......|STb|....O|...\n\ + |oo....+..b|..ccc|^..\n\ + |--|-+-|-+-|..hhh|...\n\ + RssX.............|...\n\ + Rssw.............D...\n\ + Rssw..A....A..|+-|...\n\ + Rss|...FFF...^|.r|...\n\ + |------|-|-|--|--|...\n\ + |.dBBd.+r|u+..eSc|...\n\ + w..BB..|-|-|....c|...\n\ + w......|STb|....O|...\n\ + |.d....+..b|..ccc|...\n\ + |--|-+-|-+-|....^|...\n\ + RssX...A.........|...\n\ + Rssw.............D...\n\ + Rssw.........o|+-|...\n\ + Rss|..A.FFF..o|.r|...\n\ + |--|--ww---ww-|--|w-G\n\ + ss\n\ + ss\n\ + ss\n", + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, + t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, + f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, + f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, + f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, + f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_north == "apartments_con_tower_1" && t_west == "apartments_con_tower_1") { + rotate(3); + } else if (t_north == "apartments_con_tower_1" && t_east == "apartments_con_tower_1") { + rotate(0); + } else if (t_south == "apartments_con_tower_1" && t_east == "apartments_con_tower_1") { + rotate(1); + } else if (t_west == "apartments_con_tower_1" && t_south == "apartments_con_tower_1") { + rotate(2); + } + + + } else if (terrain_type == "apartments_con_tower_1") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "apartments_con_tower_1_entrance" && t_east == "apartments_con_tower_1") || + (t_north == "apartments_con_tower_1" && t_east == "apartments_con_tower_1_entrance") + || (t_west == "apartments_con_tower_1" && t_north == "apartments_con_tower_1_entrance") || + (t_south == "apartments_con_tower_1" && t_west == "apartments_con_tower_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |------|-|-|ww---| \n\ + |.dBBd.+r|u+..eSc|-w-\n\ + w..BB..|-|-|....c|...\n\ + w.h....|STb|....O|.hc\n\ + |cxc...+..b|..ccc|cxc\n\ + |--|-+-|-+-|.....|-ww\n\ + RssX.............|^..\n\ + Rssw..F..........D...\n\ + Rssw..F.......|+-|...\n\ + Rss|..F...FFF^|.r|...\n\ + |------|-|-|--|--|...\n\ + |.dBBd.+r|u+..eSc|...\n\ + w..BB..|-|-|....c|...\n\ + w......|STb|....O|...\n\ + |od....+..b|..ccc|...\n\ + |--|-+-|-+-|...hh|...\n\ + RssX.............|...\n\ + Rssw.............D...\n\ + Rssw..A.....F.|+-|...\n\ + Rss|.....FFFF^|.r|...\n\ + |------------||--|...\n\ + |############|EEE=...\n\ + |############|EEx=...\n", + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, + t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, + f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, + f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, + f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, + f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_west == "apartments_con_tower_1_entrance") { + rotate(1); + } + if (t_north == "apartments_con_tower_1_entrance") { + rotate(2); + } + if (t_east == "apartments_con_tower_1_entrance") { + rotate(3); + } + } + + else if ((t_west == "apartments_con_tower_1_entrance" && t_north == "apartments_con_tower_1") || + (t_north == "apartments_con_tower_1_entrance" && t_east == "apartments_con_tower_1") + || (t_west == "apartments_con_tower_1" && t_south == "apartments_con_tower_1_entrance") || + (t_south == "apartments_con_tower_1" && t_east == "apartments_con_tower_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +...|---|-|-|-|------| \n\ +...|cSe..+u|r+.dBBd.| \n\ +...|c....|-|-|..BB..w \n\ +...|O....|bTS|......w \n\ +...|ccc..|b..+....d.| \n\ +...|.....|-+-|-+-|--| \n\ +...|.............+ssR \n\ +...D.............wssR \n\ +...|-+|...htth...wssR \n\ +...|r.|^..htth.oo|ssR \n\ +...|--|--|-|-|------| \n\ +...|cSe..+u|r+.dBBd.| \n\ +..^|c....|-|-|..BB..w \n\ +...|O....|bTS|......w \n\ +...|ccc..|b..+....d.| \n\ +...|.....|-+-|-+-|--| \n\ +...|.............+ssR \n\ +...D...........A.wssR \n\ +...|-+|..A...h...wssR \n\ +...|r.|o....cxc.^|ssR \n\ +G-w|--|-ww---ww--|--| \n\ +ss \n\ +ss \n\ +ss \n", + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, + t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, + f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, + f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, + f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, + f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_north == "apartments_con_tower_1_entrance") { + rotate(1); + } + if (t_east == "apartments_con_tower_1_entrance") { + rotate(2); + } + if (t_south == "apartments_con_tower_1_entrance") { + rotate(3); + } + } else { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |---ww|-|-|------| \n\ +-w-|cSe..+u|r+.dBBd.| \n\ +..l|c....|-|-|..BB..w \n\ +..l|O....|bTS|......w \n\ +...|ccc..|b..+....d.| \n\ +-D-|.hh..|-+-|-+-|--| \n\ +...|.............XssR \n\ +...D.............wssR \n\ +...|-+|..........wssR \n\ +...|r.|oo.FFFF..^|ssR \n\ +...|--|--|-|-|------| \n\ +...|cSe..+u|r+.dBBd.| \n\ +...|c....|-|-|..BB..w \n\ +...|O....|bTS|......w \n\ +...|ccc..|b..+....d.| \n\ +..^|h.h..|-+-|-+-|--| \n\ +...|.............XssR \n\ +...D......A......wssR \n\ +...|-+|..........wssR \n\ +...|r.|^....FFF.o|ssR \n\ +...|--||------------| \n\ +...=xEE|############| \n\ +...=EEE|############| \n", + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_glass_c, + t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", f_cupboard, + f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, f_null, + f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_bed, + f_null, f_null, f_null, f_null, f_null, f_bathtub, f_toilet, + f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("office", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_west == "apartments_con_tower_1" && t_north == "apartments_con_tower_1") { + rotate(1); + } else if (t_east == "apartments_con_tower_1" && t_north == "apartments_con_tower_1") { + rotate(2); + } else if (t_east == "apartments_con_tower_1" && t_south == "apartments_con_tower_1") { + rotate(3); + } + } + + + } else if (terrain_type == "apartments_mod_tower_1_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + w.htth..FFFF..eSc|....\n\ + w...............O|....\n\ + |-X|..........ccc|....\n\ + Rss|-+----|o...h.|....\n\ + Rss|...BBd|o....A|....\n\ + Rssw...BB.|^.....|....\n\ + Rssw...h..|--|...D....\n\ + Rss|..cxc.+.r|-+-|....\n\ + ||--|+|----|--|r..|....\n\ + |b....|bTS.+..|---|....\n\ + |b.T.S|b...|..+..u|....\n\ + |-----|-+|-|..|---|....\n\ + |.dBBd...+r|...eSc|....\n\ + w..BB....|-|.....O|....\n\ + |.....h..+.....ccc|....\n\ + |--|.cxc.|........D....\n\ + |-www-|o.tt....|....\n\ + Rsssss|.......F|....\n\ + RsssssX..A..FFF|-w-G\n\ + |aaaaa|----ww--| ss\n\ + ss\n\ + ss\n\ + ss\n\ + ss\n", + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, + t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", + f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, + f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, + f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_north == "apartments_mod_tower_1" && t_west == "apartments_mod_tower_1") { + rotate(3); + } else if (t_north == "apartments_mod_tower_1" && t_east == "apartments_mod_tower_1") { + rotate(0); + } else if (t_south == "apartments_mod_tower_1" && t_east == "apartments_mod_tower_1") { + rotate(1); + } else if (t_west == "apartments_mod_tower_1" && t_south == "apartments_mod_tower_1") { + rotate(2); + } + + + } else if (terrain_type == "apartments_mod_tower_1") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "apartments_mod_tower_1_entrance" && t_east == "apartments_mod_tower_1") || + (t_north == "apartments_mod_tower_1" && t_east == "apartments_mod_tower_1_entrance") + || (t_west == "apartments_mod_tower_1" && t_north == "apartments_mod_tower_1_entrance") || + (t_south == "apartments_mod_tower_1" && t_west == "apartments_mod_tower_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |----ww----| \n\ + |dBB....oddw \n\ + |--|.BB.......w \n\ + |r.+..........| \n\ + |--|-----+--|+|--| \n\ + RsswFFFF...^|.STb| \n\ + Rssw........+...b|-w\n\ + RssX........|--|-|EE\n\ + Rss|c.htth...oo|r|EE\n\ + Rss|e.htth.....+.|xE\n\ + |-----|c.........A|-|-=\n\ + |..BBd|cOS........|....\n\ + w..BB.|--|+|......D....\n\ + |d....+.r|u|^....t|....\n\ + |r...||--|-|------|....\n\ + w....|STb|u|...e.S|....\n\ + |....+..b|.+.....c|....\n\ + |--|+|-+-|-|.....O|....\n\ + RssX.....A....cccc|....\n\ + Rssw.........h.hh.|....\n\ + Rssw..............D....\n\ + Rss|..ooo.FFFF...^|....\n\ + R|-|--------------|....\n", + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, + t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", + f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, + f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, + f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_west == "apartments_mod_tower_1_entrance") { + rotate(1); + } + if (t_north == "apartments_mod_tower_1_entrance") { + rotate(2); + } + if (t_east == "apartments_mod_tower_1_entrance") { + rotate(3); + } + } + + else if ((t_west == "apartments_mod_tower_1_entrance" && t_north == "apartments_mod_tower_1") || + (t_north == "apartments_mod_tower_1_entrance" && t_east == "apartments_con_tower_1") + || (t_west == "apartments_mod_tower_1" && t_south == "apartments_mod_tower_1_entrance") || + (t_south == "apartments_mod_tower_1" && t_east == "apartments_mod_tower_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +....|cSe.u.htth...oo.w \n\ +....|O.....htth......w \n\ +....|ccc..........|X-| \n\ +....|......|----+-|ssR \n\ +....|.....A|dBB...|ssR \n\ +....|.....^|.BB...wssR \n\ +....D...|--|......wssR \n\ +....|-+-|r.+......|ssR \n\ +....|..r|--|----|+|--|| \n\ +....|---|..+.STb|....b| \n\ +....|u..+..|...b|S.T.b| \n\ +....|---|..|-|+-|-----| \n\ +....|cSe...|r+..d.BBd.| \n\ +....|O.....|-|....BB..w \n\ +....|ccc.....+........| \n\ +....D.......A|....o|--| \n\ +....|........|-www-| \n\ +....|t.......wsssssR \n\ +G-w-|t...FFF.XsssssR \n\ +ss |--ww----|aaaaa| \n\ +ss \n\ +ss \n\ +ss \n\ +ss \n", + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, + t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", + f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, + f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, + f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_north == "apartments_mod_tower_1_entrance") { + rotate(1); + } + if (t_east == "apartments_mod_tower_1_entrance") { + rotate(2); + } + if (t_south == "apartments_mod_tower_1_entrance") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |----ww----| \n\ + wcxc....BBd| \n\ + w.h.....BB.|--| \n\ + |..........+.r| \n\ + |--|+|--+-----|--| \n\ + |bTS.|...FFFF.wssR \n\ +w-|b...+........wssR \n\ +EE|-|--|........XssR \n\ +EE|r|..........c|ssR \n\ +EE|.+..........e|ssR \n\ +=-|-|..hh......c|-----| \n\ +....|..tt....SOc|dBB..| \n\ +....D..tt..|+|--|.BB..w \n\ +....|..hh.^|u|r.+....d| \n\ +....|------|-|--||...r| \n\ +....|S.e..^|u|bTS|....w \n\ +....|c.....+.|b..+....| \n\ +....|O.....|-|-+-|+|--| \n\ +....|cccc...oo..A..XssR \n\ +....|.h.h..........wssR \n\ +....D..............wssR \n\ +....|^....A..FFFF..|ssR \n\ +....|--------------|-|R \n", + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", t_floor, + t_floor, t_floor, t_elevator, t_stairs_down, t_stairs_up, t_railing_h, t_railing_v, t_rock, + t_door_glass_c, t_floor, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked_interior, t_door_metal_c, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_sidewalk, t_floor), + mapf::basic_bind("u A F E > < a R # G r x % ^ . - | t B + D = X w b T S e O h c d l s o", + f_cupboard, f_armchair, f_sofa, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_rack, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_table, f_bed, f_null, f_null, f_null, f_null, f_null, + f_bathtub, f_toilet, f_sink, f_fridge, f_oven, f_chair, f_counter, f_dresser, f_locker, f_null, + f_bookcase)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("office", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("dresser", 30, i, j, i, j, false, 0); + place_items("jackets", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_cupboard) { + place_items("cleaning", 50, i, j, i, j, false, 0); + place_items("home_hw", 30, i, j, i, j, false, 0); + place_items("cannedfood", 50, i, j, i, j, false, 0); + place_items("pasta", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("novels", 40, i, j, i, j, false, 0); + place_items("alcohol", 30, i, j, i, j, false, 0); + place_items("manuals", 20, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 15, 10); + } + if (t_west == "apartments_mod_tower_1" && t_north == "apartments_mod_tower_1") { + rotate(1); + } else if (t_east == "apartments_mod_tower_1" && t_north == "apartments_mod_tower_1") { + rotate(2); + } else if (t_east == "apartments_mod_tower_1" && t_south == "apartments_mod_tower_1") { + rotate(3); + } + } + + + } else if (terrain_type == "office_tower_1_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +ss%|....+...|...|EEED...\n\ +ss%|----|...|...|EEx|...\n\ +ss%Vcdc^|...|-+-|---|...\n\ +ss%Vch..+...............\n\ +ss%V....|...............\n\ +ss%|----|-|-+--ccc--|...\n\ +ss%|..C..C|.....h..r|-+-\n\ +sss=......+..h.....r|...\n\ +ss%|r..CC.|.ddd....r|T.S\n\ +ss%|------|---------|---\n\ +ss%|####################\n\ +ss%|#|------||------|###\n\ +ss%|#|......||......|###\n\ +ss%|||......||......|###\n\ +ss%||x......||......||##\n\ +ss%|||......||......x|##\n\ +ss%|#|......||......||##\n\ +ss%|#|......||......|###\n\ +ss%|#|XXXXXX||XXXXXX|###\n\ +ss%|-|__,,__||__,,__|---\n\ +ss%% x_,,,,_ __,,__ %%\n\ +ss __,,__ _,,,,_ \n\ +ssssss__,,__ss__,,__ssss\n\ +ssssss______ss______ssss\n", + mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, + t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, + f_null, f_null, f_rack, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + place_items("office", 75, 4, 2, 6, 2, false, 0); + place_items("office", 75, 19, 6, 19, 6, false, 0); + place_items("office", 75, 12, 8, 14, 8, false, 0); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 12, 3, density); + } else { + if (x_in_y(1, 2)) { + add_spawn("mon_zombie", 2, 15, 7); + } + if (x_in_y(1, 2)) { + add_spawn("mon_zombie", rng(1, 8), 22, 1); + } + if (x_in_y(1, 2)) { + add_spawn("mon_zombie_cop", 1, 22, 4); + } + } + { + int num_chairs = rng(0, 6); + for( int i = 0; i < num_chairs; i++ ) { + add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); + } + } + if (t_north == "office_tower_1" && t_west == "office_tower_1") { + rotate(3); + } else if (t_north == "office_tower_1" && t_east == "office_tower_1") { + rotate(0); + } else if (t_south == "office_tower_1" && t_east == "office_tower_1") { + rotate(1); + } else if (t_west == "office_tower_1" && t_south == "office_tower_1") { + rotate(2); + } + + + } else if (terrain_type == "office_tower_1") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "office_tower_1_entrance" && t_east == "office_tower_1") || + (t_north == "office_tower_1" && t_east == "office_tower_1_entrance") || + (t_west == "office_tower_1" && t_north == "office_tower_1_entrance") || + (t_south == "office_tower_1" && t_west == "office_tower_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +ss \n\ +ss%%%%%%%%%%%%%%%%%%%%%%\n\ +ss%|-HH-|-HH-|-HH-|HH|--\n\ +ss%Vdcxl|dxdl|lddx|..|.S\n\ +ss%Vdh..|dh..|..hd|..+..\n\ +ss%|-..-|-..-|-..-|..|--\n\ +ss%V.................|.T\n\ +ss%V.................|..\n\ +ss%|-..-|-..-|-..-|..|--\n\ +ss%V.h..|..hd|..hd|..|..\n\ +ss%Vdxdl|^dxd|.xdd|..G..\n\ +ss%|----|----|----|..G..\n\ +ss%|llll|..htth......|..\n\ +ss%V.................|..\n\ +ss%V.ddd..........|+-|..\n\ +ss%|..hd|.hh.ceocc|.l|..\n\ +ss%|----|---------|--|..\n\ +ss%Vcdcl|...............\n\ +ss%V.h..+...............\n\ +ss%V...^|...|---|---|...\n\ +ss%|----|...|.R>|EEE|...\n\ +ss%|rrrr|...|.R.|EEED...\n", + mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, + t_stairs_down, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, + t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, + t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, + f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, + f_null, f_rack, f_null, f_null, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 2, 8, density); + } else { + add_spawn("mon_zombie", rng(0, 5), 15, 7); + if (x_in_y(1, 1)) { + add_spawn("mon_zombie", 2, 5, 20); + } + } + place_items("office", 75, 4, 23, 7, 23, false, 0); + place_items("office", 75, 4, 19, 7, 19, false, 0); + place_items("office", 75, 4, 14, 7, 14, false, 0); + place_items("office", 75, 5, 16, 7, 16, false, 0); + place_items("fridge", 80, 14, 17, 14, 17, false, 0); + place_items("cleaning", 75, 19, 17, 20, 17, false, 0); + place_items("cubical_office", 75, 6, 12, 7, 12, false, 0); + place_items("cubical_office", 75, 12, 11, 12, 12, false, 0); + place_items("cubical_office", 75, 16, 11, 17, 12, false, 0); + place_items("cubical_office", 75, 4, 5, 5, 5, false, 0); + place_items("cubical_office", 75, 11, 5, 12, 5, false, 0); + place_items("cubical_office", 75, 14, 5, 16, 5, false, 0); + { + int num_chairs = rng(0, 6); + for( int i = 0; i < num_chairs; i++ ) { + add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); + } + } + if (t_west == "office_tower_1_entrance") { + rotate(1); + } + if (t_north == "office_tower_1_entrance") { + rotate(2); + } + if (t_east == "office_tower_1_entrance") { + rotate(3); + } + } + + else if ((t_west == "office_tower_1_entrance" && t_north == "office_tower_1") || + (t_north == "office_tower_1_entrance" && t_east == "office_tower_1") || + (t_west == "office_tower_1" && t_south == "office_tower_1_entrance") || + (t_south == "office_tower_1" && t_east == "office_tower_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +...DEEE|...|..|-----|%ss\n\ +...|EEE|...|..|^...lV%ss\n\ +...|---|-+-|......hdV%ss\n\ +...........G..|..dddV%ss\n\ +...........G..|-----|%ss\n\ +.......|---|..|...ddV%ss\n\ +|+-|...|...+......hdV%ss\n\ +|.l|...|rr.|.^|l...dV%ss\n\ +|--|...|---|--|-----|%ss\n\ +|...........c.......V%ss\n\ +|.......cxh.c.#####.Vsss\n\ +|.......ccccc.......Gsss\n\ +|...................Gsss\n\ +|...................Vsss\n\ +|#..................Gsss\n\ +|#..................Gsss\n\ +|#..................Vsss\n\ +|#............#####.V%ss\n\ +|...................|%ss\n\ +--HHHHHGGHHGGHHHHH--|%ss\n\ +%%%%% ssssssss %%%%%%%ss\n\ + ssssssss ss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, + t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_crate_c, + f_null, f_null, f_rack, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + place_items("office", 75, 19, 1, 19, 3, false, 0); + place_items("office", 75, 17, 3, 18, 3, false, 0); + place_items("office", 90, 8, 7, 9, 7, false, 0); + place_items("cubical_office", 75, 19, 5, 19, 7, false, 0); + place_items("cleaning", 80, 1, 7, 2, 7, false, 0); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 14, 10, density); + } else { + add_spawn("mon_zombie", rng(0, 15), 14, 10); + if (x_in_y(1, 2)) { + add_spawn("mon_zombie_cop", 2, 10, 10); + } + } + { + int num_chairs = rng(0, 6); + for( int i = 0; i < num_chairs; i++ ) { + add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); + } + } + if (t_north == "office_tower_1_entrance") { + rotate(1); + } + if (t_east == "office_tower_1_entrance") { + rotate(2); + } + if (t_south == "office_tower_1_entrance") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ + ss\n\ +%%%%%%%%%%%%%%%%%%%%%%ss\n\ +--|---|--HHHH-HHHH--|%ss\n\ +.T|..l|............^|%ss\n\ +..|-+-|...hhhhhhh...V%ss\n\ +--|...G...ttttttt...V%ss\n\ +.S|...G...ttttttt...V%ss\n\ +..+...|...hhhhhhh...V%ss\n\ +--|...|.............|%ss\n\ +..|...|-------------|%ss\n\ +..G....|l.......dxd^|%ss\n\ +..G....G...h....dh..V%ss\n\ +..|....|............V%ss\n\ +..|....|------|llccc|%ss\n\ +..|...........|-----|%ss\n\ +..|...........|...ddV%ss\n\ +..|----|---|......hdV%ss\n\ +.......+...|..|l...dV%ss\n\ +.......|rrr|..|-----|%ss\n\ +...|---|---|..|l.dddV%ss\n\ +...|xEE|.R>|......hdV%ss\n\ +...DEEE|.R.|..|.....V%ss\n", + mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_elevator, + t_stairs_down, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, t_pavement_y, + t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, + t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, t_door_locked_alarm, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E > R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_null, + f_null, f_null, f_null, f_null, f_null, f_crate_c, f_null, + f_null, f_rack, f_null, f_null, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + spawn_item(18, 15, "record_accounting"); + place_items("cleaning", 75, 3, 5, 5, 5, false, 0); + place_items("office", 75, 10, 7, 16, 8, false, 0); + place_items("cubical_office", 75, 15, 15, 19, 15, false, 0); + place_items("cubical_office", 75, 16, 12, 16, 13, false, 0); + place_items("cubical_office", 75, 17, 19, 19, 19, false, 0); + place_items("office", 75, 17, 21, 19, 21, false, 0); + place_items("office", 75, 16, 11, 17, 12, false, 0); + place_items("cleaning", 75, 8, 20, 10, 20, false, 0); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 9, 15, density); + } else { + add_spawn("mon_zombie", rng(0, 5), 9, 15); + } + { + int num_chairs = rng(0, 6); + for( int i = 0; i < num_chairs; i++ ) { + add_vehicle (g, "swivel_chair", rng(6, 16), rng(6, 16), 0, -1, -1, false); + } + } + if (t_west == "office_tower_1" && t_north == "office_tower_1") { + rotate(1); + } else if (t_east == "office_tower_1" && t_north == "office_tower_1") { + rotate(2); + } else if (t_east == "office_tower_1" && t_south == "office_tower_1") { + rotate(3); + } + } + + + } else if (terrain_type == "office_tower_b_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +sss|........|...|EEED___\n\ +sss|........|...|EEx|___\n\ +sss|........|-+-|---|HHG\n\ +sss|....................\n\ +sss|....................\n\ +sss|....................\n\ +sss|....................\n\ +sss|....,,......,,......\n\ +sss|...,,,,.....,,......\n\ +sss|....,,.....,,,,..xS.\n\ +sss|....,,......,,...SS.\n\ +sss|-|XXXXXX||XXXXXX|---\n\ +sss|s|EEEEEE||EEEEEE|sss\n\ +sss|||EEEEEE||EEEEEE|sss\n\ +sss||xEEEEEE||EEEEEE||ss\n\ +sss|||EEEEEE||EEEEEEx|ss\n\ +sss|s|EEEEEE||EEEEEE||ss\n\ +sss|s|EEEEEE||EEEEEE|sss\n\ +sss|s|------||------|sss\n\ +sss|--------------------\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", + t_elevator, t_rock, t_stairs_down, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, + t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, + t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, + t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, + f_null, f_null, f_null, f_null, f_bench, f_null, f_null, + f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + } else { + add_spawn("mon_zombie", rng(0, 5), SEEX * 2 - 1, SEEX * 2 - 1); + } + if (t_north == "office_tower_b" && t_west == "office_tower_b") { + rotate(3); + } else if (t_north == "office_tower_b" && t_east == "office_tower_b") { + rotate(0); + } else if (t_south == "office_tower_b" && t_east == "office_tower_b") { + rotate(1); + } else if (t_west == "office_tower_b" && t_south == "office_tower_b") { + rotate(2); + } + + + } else if (terrain_type == "office_tower_b") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "office_tower_b_entrance" && t_east == "office_tower_b") || + (t_north == "office_tower_b" && t_east == "office_tower_b_entrance") || + (t_west == "office_tower_b" && t_north == "office_tower_b_entrance") || + (t_south == "office_tower_b" && t_west == "office_tower_b_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +sss|--------------------\n\ +sss|,.....,.....,.....,S\n\ +sss|,.....,.....,.....,S\n\ +sss|,.....,.....,.....,S\n\ +sss|,.....,.....,.....,S\n\ +sss|,.....,.....,.....,S\n\ +sss|,.....,.....,.....,S\n\ +sss|....................\n\ +sss|....................\n\ +sss|....................\n\ +sss|....................\n\ +sss|....................\n\ +sss|....................\n\ +sss|...,,...,....,....,S\n\ +sss|..,,,,..,....,....,S\n\ +sss|...,,...,....,....,S\n\ +sss|...,,...,....,....,S\n\ +sss|........,....,....,S\n\ +sss|........,....,....,S\n\ +sss|........|---|---|HHG\n\ +sss|........|.R<|EEE|___\n\ +sss|........|.R.|EEED___\n", + mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", t_elevator, + t_rock, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, + f_null, f_null, f_null, f_bench, f_null, f_null, f_crate_c, f_null, + f_null, f_rack, f_null, f_null, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + } else { + add_spawn("mon_zombie", rng(0, 5), SEEX * 2 - 1, SEEX * 2 - 1); + } + if (t_west == "office_tower_b_entrance") { + rotate(1); + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 17, 7, 180); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "motorcycle", 17, 13, 180); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 17, 19, 180); + } + } else if (t_north == "office_tower_b_entrance") { + rotate(2); + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 10, 17, 270); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "motorcycle", 4, 18, 270); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 16, 17, 270); + } + } else if (t_east == "office_tower_b_entrance") { + rotate(3); + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 6, 4, 0); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "motorcycle", 6, 10, 180); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 6, 16, 0); + } + + } else { + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 7, 6, 90); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 14, 6, 90); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "motorcycle", 19, 6, 90); + } + } + } + + else if ((t_west == "office_tower_b_entrance" && t_north == "office_tower_b") || + (t_north == "office_tower_b_entrance" && t_east == "office_tower_b") || + (t_west == "office_tower_b" && t_south == "office_tower_b_entrance") || + (t_south == "office_tower_b" && t_east == "office_tower_b_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +___DEEE|...|...,,...|sss\n\ +___|EEE|...|..,,,,..|sss\n\ +GHH|---|-+-|...,,...|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +|...................|sss\n\ +|...................|sss\n\ +|,.....,.....,.....,|sss\n\ +|,.....,.....,.....,|sss\n\ +|,.....,.....,.....,|sss\n\ +|,.....,.....,.....,|sss\n\ +|,.....,.....,.....,|sss\n\ +|,.....,.....,.....,|sss\n\ +|-------------------|sss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", + t_elevator, t_rock, t_stairs_down, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, + t_door_glass_c, t_floor, t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, + t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, + t_door_c, t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E s > < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, + f_null, f_null, f_null, f_null, f_bench, f_null, f_null, + f_crate_c, f_null, f_null, f_rack, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + } else { + add_spawn("mon_zombie", rng(0, 5), SEEX * 2 - 1, SEEX * 2 - 1); + } + if (t_north == "office_tower_b_entrance") { + rotate(1); + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 8, 15, 0); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 7, 10, 180); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "beetle", 7, 3, 0); + } + } else if (t_east == "office_tower_b_entrance") { + rotate(2); + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 7, 7, 270); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 13, 8, 90); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "beetle", 20, 7, 90); + } + } else if (t_south == "office_tower_b_entrance") { + rotate(3); + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 16, 7, 0); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 15, 13, 180); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "beetle", 15, 20, 180); + } + } else { + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 16, 16, 90); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "car", 9, 15, 270); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "beetle", 4, 16, 270); + } + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +--------------------|sss\n\ +S,.....,.....,.....,|sss\n\ +S,.....,.....,.....,|sss\n\ +S,.....,.....,.....,|sss\n\ +S,.....,.....,.....,|sss\n\ +S,.....,.....,.....,|sss\n\ +S,.....,.....,.....,|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +....................|sss\n\ +S,....,....,........|sss\n\ +S,....,....,........|sss\n\ +S,....,....,........|sss\n\ +S,....,....,........|sss\n\ +S,....,....,........|sss\n\ +S,....,....,........|sss\n\ +GHH|---|---|........|sss\n\ +___|xEE|.R<|........|sss\n\ +___DEEE|.R.|...,,...|sss\n", + mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", t_elevator, + t_rock, t_stairs_up, t_railing_v, t_floor, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("E s < R # X G C , . r V H 6 x % ^ _ - | t + = D w T S e o h c d l S", f_null, + f_null, f_null, f_null, f_bench, f_null, f_null, f_crate_c, f_null, + f_null, f_rack, f_null, f_null, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + } else { + add_spawn("mon_zombie", rng(0, 5), SEEX * 2 - 1, SEEX * 2 - 1); + } + if (t_west == "office_tower_b" && t_north == "office_tower_b") { + rotate(1); + if (x_in_y(1, 5)) { + add_vehicle (g, "cube_van", 17, 4, 180); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 17, 10, 180); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "car", 17, 17, 180); + } + } else if (t_east == "office_tower_b" && t_north == "office_tower_b") { + rotate(2); + if (x_in_y(1, 5)) { + add_vehicle (g, "cube_van", 6, 17, 270); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 12, 17, 270); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "car", 18, 17, 270); + } + } else if (t_east == "office_tower_b" && t_south == "office_tower_b") { + rotate(3); + if (x_in_y(1, 5)) { + add_vehicle (g, "cube_van", 6, 6, 0); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 6, 13, 0); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "car", 5, 19, 180); + } + } else { + if (x_in_y(1, 5)) { + add_vehicle (g, "flatbed_truck", 16, 6, 90); + } + if (x_in_y(1, 5)) { + add_vehicle (g, "cube_van", 10, 6, 90); + } + if (x_in_y(1, 3)) { + add_vehicle (g, "car", 4, 6, 90); + } + } + } + + + } else if (is_ot_type("church", terrain_type)) { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if (one_in(2)) { + //New England or Country style, single centered steeple low clear windows + mapf::formatted_set_simple(this, 0, 0, + "\ + ^^^^^^ \n\ + |---|--------| \n\ + ||dh.|.6ooo.ll|| \n\ + |l...+.........Dsss \n\ + ^^|--+-|------+--|^^s \n\ + ^||..............||^s \n\ + w.......tt.......w s \n\ + |................| s \n\ + ^w................w^s \n\ + ^|.######..######.|^s \n\ + ^w................w^s \n\ + ^|.######..######.|^s \n\ + w................w s \n\ + |.######..######.| s \n\ + ^w................w^s \n\ + ^|.######..######.|^s \n\ + ^|................|^s \n\ + |-w|----..----|w-| s \n\ + ^^|ll|....|ST|^^ s \n\ + ^|.......+..|^ s \n\ + |----++-|--| s \n\ + O ss O s \n\ + ^^ ss ^^ s \n\ + ^^ ss ^^ s \n", + mapf::basic_bind("O 6 ^ . - | # t + = D w T S e o h c d l s", t_column, t_console, t_shrub, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("O 6 ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, + f_null, f_null, f_bench, f_table, f_null, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + spawn_item(9, 6, "brazier"); + spawn_item(14, 6, "brazier"); + place_items("church", 40, 5, 5, 8, 16, false, 0); + place_items("church", 40, 5, 5, 8, 16, false, 0); + place_items("church", 85, 12, 2, 14, 2, false, 0); + place_items("office", 60, 6, 2, 8, 3, false, 0); + place_items("jackets", 85, 7, 18, 8, 18, false, 0); + tmpcomp = add_computer(11, 2, _("Church Bells 1.2"), 0); + tmpcomp->add_option(_("Gathering Toll"), COMPACT_TOLL, 0); + tmpcomp->add_option(_("Wedding Toll"), COMPACT_TOLL, 0); + tmpcomp->add_option(_("Funeral Toll"), COMPACT_TOLL, 0); + } else { + //Gothic Style, unreachable high stained glass windows, stone construction + mapf::formatted_set_simple(this, 0, 0, + "\ + $$ W W $$ \n\ + $$ WWWWGVBBVGWWWW $$ \n\ + W..h.cccc.h..W \n\ + WWVWWR..........RWWBWW \n\ +WW#.#.R....cc....R.#.#WW\n\ + G#.#.R..........R.#.#V \n\ + V#.#.Rrrrr..rrrrR.#.#B \n\ +WW#..................#WW\n\ + WW+WW#####..#####WW+WW \n\ +ssss V............B ssss\n\ +s WW#####..#####WW s\n\ +s $ WW............WW $ s\n\ +s $ G#####..#####V $ s\n\ +s $ B............G $ s\n\ +s $ WW#####..#####WW $ s\n\ +s $ WW............WW $ s\n\ +s V####....####B s\n\ +s WWWW--|--gg-----WWWW s\n\ +s WllWTS|.....lll.W..W s\n\ +s W..+..+.........+..W s\n\ +s W..WWWWWW++WWWWWW6.W s\n\ +s W.CWW$$WWssWW$$WW..W s\n\ +s WWWWW ss WWWWW s\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("C V G B W R r 6 $ . - | # t + g T S h c l s", t_floor, t_window_stained_red, + t_window_stained_green, t_window_stained_blue, t_rock, t_railing_v, t_railing_h, t_console, t_shrub, + t_rock_floor, t_wall_h, t_wall_v, t_rock_floor, t_rock_floor, t_door_c, t_door_glass_c, + t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor, t_sidewalk), + mapf::basic_bind("C V G B W R r 6 $ . - | # t + g T S h c l s", f_crate_c, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_bench, f_table, f_null, f_null, f_toilet, + f_sink, f_chair, f_counter, f_locker, f_null)); + spawn_item(8, 4, "brazier"); + spawn_item(15, 4, "brazier"); + place_items("church", 70, 6, 7, 17, 16, false, 0); + place_items("church", 70, 6, 7, 17, 16, false, 0); + place_items("church", 60, 6, 7, 17, 16, false, 0); + place_items("cleaning", 60, 3, 18, 4, 21, false, 0); + place_items("jackets", 85, 14, 18, 16, 18, false, 0); + tmpcomp = add_computer(19, 20, _("Church Bells 1.2"), 0); + tmpcomp->add_option(_("Gathering Toll"), COMPACT_TOLL, 0); + tmpcomp->add_option(_("Wedding Toll"), COMPACT_TOLL, 0); + tmpcomp->add_option(_("Funeral Toll"), COMPACT_TOLL, 0); + } + if (terrain_type == "church_east") { + rotate(3); + } + if (terrain_type == "church_north") { + rotate(2); + } + if (terrain_type == "church_west") { + rotate(1); + } + + + } else if (terrain_type == "cathedral_1_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +ss ##...........\n\ +ss ##bbbb...bbbb\n\ +ss #...........\n\ +ss wbbbb...bbbb\n\ +ss w...........\n\ +ss wbbbb...bbbb\n\ +ss #...........\n\ +ss ##bbbb...bbbb\n\ +ss ##...........\n\ +ss #bbb....bbbb\n\ +ss w...........\n\ +ss #####GG###HH\n\ +ss w>R.....#...\n\ +ss ########...........\n\ +ss #......#...........\n\ +ss w......#.lllcc.....\n\ +ss #......###ww####++#\n\ +ss w......# ##sss\n\ +ss #......# ssss\n\ +ss ###ww### ssss\n\ +ss ssss\n\ +ss ssss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, + t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bench) { + place_items("church", 10, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_locker) { + place_items("jackets", 60, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_window_stained_red) { + if (one_in(3)) { + ter_set(i, j, t_window_stained_blue); + } else if (one_in(3)) { + ter_set(i, j, t_window_stained_green); + } + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); + } + if (t_north == "cathedral_1" && t_west == "cathedral_1") { + rotate(3); + } else if (t_north == "cathedral_1" && t_east == "cathedral_1") { + rotate(0); + } else if (t_south == "cathedral_1" && t_east == "cathedral_1") { + rotate(1); + } else if (t_west == "cathedral_1" && t_south == "cathedral_1") { + rotate(2); + } + + + } else if (terrain_type == "cathedral_1") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "cathedral_1_entrance" && t_east == "cathedral_1") || (t_north == "cathedral_1" && + t_east == "cathedral_1_entrance") || (t_west == "cathedral_1" && + t_north == "cathedral_1_entrance") || + (t_south == "cathedral_1" && t_west == "cathedral_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ + ## \n\ + ###wwww\n\ + ##....tt\n\ + ##.......\n\ + w..h.....\n\ + ###.....ttt\n\ + w..........\n\ + ## ###R.........\n\ + ####www#..rrrrrrrr..\n\ + ###...................\n\ + #...C.................\n\ + ##......bbbbbbb...bbbbb\n\ + w.....................\n\ + w..bbbbbbbbbbb...bbbbb\n\ + w.....................\n\ + ##..bbbbbbbbbbb...bbbbb\n\ + #.....................\n\ + ###...................\n\ + #####+##............\n\ + ##sss##bbbb...bbbb\n\ +sssssssssss>#...........\n\ +sssssssssssswbbbb...bbbb\n\ +ss w...........\n\ +ss #bbbb...bbbb\n", + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, + t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + spawn_item(20, 2, "brazier"); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bench) { + place_items("church", 10, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_locker) { + place_items("jackets", 60, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_window_stained_red) { + if (one_in(3)) { + ter_set(i, j, t_window_stained_blue); + } else if (one_in(3)) { + ter_set(i, j, t_window_stained_green); + } + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); + } + if (t_west == "cathedral_1_entrance") { + rotate(1); + } + if (t_north == "cathedral_1_entrance") { + rotate(2); + } + if (t_east == "cathedral_1_entrance") { + rotate(3); + } + } + + else if ((t_west == "cathedral_1_entrance" && t_north == "cathedral_1") || + (t_north == "cathedral_1_entrance" && t_east == "cathedral_1") || (t_west == "cathedral_1" && + t_south == "cathedral_1_entrance") || + (t_south == "cathedral_1" && t_east == "cathedral_1_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +..........## ss\n\ +bbb...bbbb## ss\n\ +..........# ss\n\ +bbb...bbbbw ss\n\ +..........w ss\n\ +bbb...bbbbw ss\n\ +..........# ss\n\ +bbb...bbbb## ss\n\ +..........## ss\n\ +bbb....bbb# ss\n\ +..........w ss\n\ +H###GG##### ss\n\ +..#.....R>w ss\n\ +..........######## ss\n\ +..........#......# ss\n\ +...ccccc..#......w ss\n\ +++####ww###......# ss\n\ +ss## #......w ss\n\ +sss #......# ss\n\ +sss ###ww### ss\n\ +sss ss\n\ +sss ss\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, + t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bench) { + place_items("church", 10, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_locker) { + place_items("jackets", 60, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_window_stained_red) { + if (one_in(3)) { + ter_set(i, j, t_window_stained_blue); + } else if (one_in(3)) { + ter_set(i, j, t_window_stained_green); + } + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); + } + if (t_north == "cathedral_1_entrance") { + rotate(1); + } + if (t_east == "cathedral_1_entrance") { + rotate(2); + } + if (t_south == "cathedral_1_entrance") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ + ## \n\ +www### \n\ +t....## \n\ +......## \n\ +....h..w \n\ +tt.....### \n\ +.........w \n\ +........R### ## \n\ +.rrrrrrrr..#www#### \n\ +..................### \n\ +................C...# \n\ +bbbb...bbbbbbb......## \n\ +....................w \n\ +bbbb...bbbbbbbbbbb..w \n\ +....................w \n\ +bbbb...bbbbbbbbbbb..## \n\ +....................# \n\ +..................### \n\ +...........##+##### \n\ +bbb...bbbb##sss## \n\ +..........#>ssssssssssss\n\ +bbb...bbbbwsssssssssssss\n\ +..........w ss\n\ +bbb...bbbb# ss\n", + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_railing_v, t_rock, t_door_metal_locked, t_door_glass_c, + t_floor, t_pavement_y, t_pavement, t_railing_h, t_wall_glass_v, t_wall_glass_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("b E > < R # X G C , _ r V H 6 x % ^ . - | t + = D w T S e o h c d l s", f_bench, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_crate_c, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + spawn_item(2, 2, "brazier"); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bench) { + place_items("church", 10, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_window_stained_red) { + if (one_in(3)) { + ter_set(i, j, t_window_stained_blue); + } else if (one_in(3)) { + ter_set(i, j, t_window_stained_green); + } + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); + } + if (t_west == "cathedral_1" && t_north == "cathedral_1") { + rotate(1); + } else if (t_east == "cathedral_1" && t_north == "cathedral_1") { + rotate(2); + } else if (t_east == "cathedral_1" && t_south == "cathedral_1") { + rotate(3); + } + } + + + } else if (terrain_type == "cathedral_b_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +############|+|+|+|..|..\n\ +############|T|T|T|..|..\n\ +############|-|-|-|--|..\n\ +############|......d.|..\n\ +############|hdhd..dh|..\n\ +############|........|..\n\ +############|hdhd....+..\n\ +############|........|..\n\ +############|hdhd....|..\n\ +############|--------|..\n\ +############|..^tt^.....\n\ +############|...........\n\ +############|<..........\n\ +############|--D-|-+-ccc\n\ +############|l...|......\n\ +############|l..r|...ddd\n\ +############|l..r|....hd\n\ +############|----|------\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n", + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, + f_null, f_null, f_null, f_null, f_null, f_null, + f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, + f_counter, f_desk, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("school", 50, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("cleaning", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("cleaning", 50, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); + } + if (t_north == "cathedral_b" && t_west == "cathedral_b") { + rotate(3); + } else if (t_north == "cathedral_b" && t_east == "cathedral_b") { + rotate(0); + } else if (t_south == "cathedral_b" && t_east == "cathedral_b") { + rotate(1); + } else if (t_west == "cathedral_b" && t_south == "cathedral_b") { + rotate(2); + } + + + } else if (terrain_type == "cathedral_b") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "cathedral_b_entrance" && t_east == "cathedral_b") || (t_north == "cathedral_b" && + t_east == "cathedral_b_entrance") || (t_west == "cathedral_b" && + t_north == "cathedral_b_entrance") || + (t_south == "cathedral_b" && t_west == "cathedral_b_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +########################\n\ +####################____\n\ +###################__o__\n\ +###################_____\n\ +###################__o__\n\ +################________\n\ +################________\n\ +#######|---|______o___o_\n\ +#######|rrr|____________\n\ +#######|...D____________\n\ +######||-+-|------------\n\ +######|c....c.hhh.......\n\ +######|S....c.....C..C..\n\ +######|c....c...........\n\ +######|O....c.....C..C..\n\ +######|O....|...........\n\ +######|e....+.htth......\n\ +######|e...r|.htth......\n\ +######|---|-|.htth..ht..\n\ +##########|<+........t..\n\ +##########|-|--------|..\n\ +############|..S.S.S.|..\n\ +############|........+..\n", + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, + f_null, f_null, f_null, f_null, f_null, f_null, + f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, + f_counter, f_desk, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_fridge) { + place_items("fridge", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_oven) { + place_items("oven", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_table) { + place_items("fridgesnacks", 40, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_rack) { + place_items("cannedfood", 40, i, j, i, j, false, 0); + } + } + } + add_spawn("mon_blank", rng(1, 3), 23, 5); + if (t_west == "cathedral_b_entrance") { + rotate(1); + } else if (t_north == "cathedral_b_entrance") { + rotate(2); + } else if (t_east == "cathedral_b_entrance") { + rotate(3); + } + } + + else if ((t_west == "cathedral_b_entrance" && t_north == "cathedral_b") || + (t_north == "cathedral_b_entrance" && t_east == "cathedral_b") || (t_west == "cathedral_b" && + t_south == "cathedral_b_entrance") || + (t_south == "cathedral_b" && t_east == "cathedral_b_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +.|..|+|D|+|#############\n\ +.|..|T|T|T|#############\n\ +.|--|-|-|-|#############\n\ +.|........|#############\n\ +.|..htth..|#############\n\ +.|..htth..|#############\n\ +.+..htth..|#############\n\ +.|..htth..|#############\n\ +.|........|#############\n\ +.|--------|#############\n\ +...hhh...^|#############\n\ +..........|#############\n\ +.........<|#############\n\ +cc-|-D----|#############\n\ +...|^..dxd|#############\n\ +...+....hd|#############\n\ +.ll|l.....|#############\n\ +---|------|#############\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n", + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, + f_null, f_null, f_null, f_null, f_null, f_null, + f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, + f_counter, f_desk, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("office", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_locker) { + place_items("office", 70, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_table) { + place_items("office", 30, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, .20); + } + if (t_north == "cathedral_b_entrance") { + rotate(1); + } else if (t_east == "cathedral_b_entrance") { + rotate(2); + } else if (t_south == "cathedral_b_entrance") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +########################\n\ +____####################\n\ +t_o__###################\n\ +_____###################\n\ +__o__###################\n\ +________################\n\ +________################\n\ +_o___o______############\n\ +____________############\n\ +____________############\n\ +----------|---|#########\n\ +..........|htt|#########\n\ +C..C..C...|.tt|#########\n\ +..........D.tt|#########\n\ +C..C..C...D.tt|#########\n\ +..........|.tt|#########\n\ +C..C..C...|hhh|#########\n\ +..........|hhh|#########\n\ +..........|-|-|#########\n\ +....hh....+<|###########\n\ +.|--------|-|###########\n\ +.|.S.S.S..|#############\n\ +.+........|#############\n", + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", t_floor, + t_elevator, t_stairs_down, t_stairs_up, t_rock, t_door_metal_locked, t_door_glass_c, t_floor, + t_pavement_y, t_pavement, t_floor, t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, + t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_locked, + t_door_locked_interior, t_window_stained_red, t_floor, t_floor, t_floor, t_column, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("O E > < # X G C , _ r V H 6 x ^ . - | t + = D w T S e o h c d l s", f_oven, + f_null, f_null, f_null, f_null, f_null, f_null, + f_makeshift_bed, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_null, f_chair, + f_counter, f_desk, f_locker, f_null)); + spawn_item(0, 3, "small_relic"); + add_spawn("mon_blank", rng(1, 3), 0, 5); + if (t_west == "cathedral_b" && t_north == "cathedral_b") { + rotate(1); + } else if (t_east == "cathedral_b" && t_north == "cathedral_b") { + rotate(2); + } else if (t_east == "cathedral_b" && t_south == "cathedral_b") { + rotate(3); + } + } + + + } else if (is_ot_type("s_grocery", terrain_type)) { + + fill_background(this, &grass_or_dirt); + square(this, t_floor, 3, 3, SEEX * 2 - 4, SEEX * 2 - 4); + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j == 2 && ((i > 4 && i < 8) || (i > 15 && i < 19))) { + ter_set(i, j, t_window); + } else if ((j == 2 && (i == 11 || i == 12)) || (i == 6 && j == 20)) { + ter_set(i, j, t_door_c); + } else if (((j == 2 || j == SEEY * 2 - 3) && i > 1 && i < SEEX * 2 - 2) || + (j == 18 && i > 2 && i < 7)) { + ter_set(i, j, t_wall_h); + } else if (((i == 2 || i == SEEX * 2 - 3) && j > 2 && j < SEEY * 2 - 3) || + (i == 6 && j == 19)) { + ter_set(i, j, t_wall_v); + } else if (j > 4 && j < 8) { + if (i == 5 || i == 9 || i == 13 || i == 17) { + set(i, j, t_floor, f_counter); + } else if (i == 8 || i == 12 || i == 16 || i == 20) { + set(i, j, t_floor, f_rack); + } else if (i > 2 && i < SEEX * 2 - 3) { + ter_set(i, j, t_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + } else if ((j == 7 && (i == 3 || i == 4)) || + ((j == 11 || j == 14) && (i == 18 || i == 19)) || + ((j > 9 && j < 16) && (i == 6 || i == 7 || i == 10 || + i == 11 || i == 14 || i == 15 || + i == 20))) { + set(i, j, t_floor, f_rack); + } else if ((j == 18 && i > 15 && i < 21) || (j == 19 && i == 16)) { + set(i, j, t_floor, f_counter); + } else if ((i == 3 && j > 9 && j < 16) || + (j == 20 && ((i > 7 && i < 15) || (i > 18 && i < 21)))) { + set(i, j, t_floor, f_glass_fridge); + } else if (i > 2 && i < SEEX * 2 - 3 && j > 2 && j < SEEY * 2 - 3) { + ter_set(i, j, t_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + + { + int num_carts = rng(0, 5); + for( int i = 0; i < num_carts; i++ ) { + add_vehicle (g, "shopping_cart", rng(3, 21), rng(3, 21), 90); + } + } + + place_items("fridgesnacks", 65, 3, 10, 3, 15, false, 0); + place_items("fridge", 70, 8, 20, 14, 20, false, 0); + place_items("fridge", 50, 19, 20, 20, 20, false, 0); + place_items("softdrugs", 55, 6, 10, 6, 15, false, 0); + place_items("cleaning", 88, 7, 10, 7, 15, false, 0); + place_items("kitchen", 75, 10, 10, 10, 15, false, 0); + place_items("snacks", 78, 11, 10, 11, 15, false, 0); + place_items("cannedfood", 80, 14, 10, 14, 15, false, 0); + place_items("pasta", 74, 15, 10, 15, 15, false, 0); + place_items("produce", 60, 20, 10, 20, 15, false, 0); + place_items("produce", 50, 18, 11, 19, 11, false, 0); + place_items("produce", 50, 18, 10, 20, 15, false, 0); + for (int i = 8; i < 21; i += 4) { // Checkout snacks & magazines + place_items("snacks", 50, i, 5, i, 6, false, 0); + place_items("magazines", 70, i, 7, i, 7, false, 0); + } + if (terrain_type == "s_grocery_east") { + rotate(1); + } + if (terrain_type == "s_grocery_south") { + rotate(2); + } + if (terrain_type == "s_grocery_west") { + rotate(3); + } + place_spawns(g, "GROUP_GROCERY", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_hardware", terrain_type)) { + + fill_background(this, &grass_or_dirt); + square(this, t_floor, 3, 3, SEEX * 2 - 4, SEEX * 2 - 4); + rn = 0; // No back door + // if (!one_in(3)) + // rn = 1; // Old-style back door + if (!one_in(6)) { + rn = 2; // Paved back area + } + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j == 3 && ((i > 5 && i < 9) || (i > 14 && i < 18))) { + ter_set(i, j, t_window); + } else if ((j == 3 && i > 1 && i < SEEX * 2 - 2) || + (j == 15 && i > 1 && i < 14) || + (j == SEEY * 2 - 3 && i > 12 && i < SEEX * 2 - 2)) { + ter_set(i, j, t_wall_h); + } else if ((i == 2 && j > 3 && j < 15) || + (i == SEEX * 2 - 3 && j > 3 && j < SEEY * 2 - 3) || + (i == 13 && j > 15 && j < SEEY * 2 - 3)) { + ter_set(i, j, t_wall_v); + } else if ((i > 3 && i < 10 && j == 6) || (i == 9 && j > 3 && j < 7)) { + set(i, j, t_floor, f_counter); + } else if (((i == 3 || i == 6 || i == 7 || i == 10 || i == 11) && + j > 8 && j < 15) || + (i == SEEX * 2 - 4 && j > 3 && j < SEEX * 2 - 4) || + (i > 14 && i < 18 && + (j == 8 || j == 9 || j == 12 || j == 13)) || + (j == SEEY * 2 - 4 && i > 13 && i < SEEX * 2 - 4) || + (i > 15 && i < 18 && j > 15 && j < 18) || + (i == 9 && j == 7)) { + set(i, j, t_floor, f_rack); + } else if ((i > 2 && i < SEEX * 2 - 3 && j > 3 && j < 15) || + (i > 13 && i < SEEX * 2 - 3 && j > 14 && j < SEEY * 2 - 3)) { + ter_set(i, j, t_floor); + } else if (rn == 2 && i > 1 && i < 13 && j > 15 && j < SEEY * 2 - 3) { + ter_set(i, j, t_pavement); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + ter_set(rng(10, 13), 3, t_door_c); + if (rn > 0) { + ter_set(13, rng(16, 19), (one_in(3) ? t_door_c : t_door_locked)); + } + if (rn == 2) { + if (one_in(5)) { + place_gas_pump(rng(4, 10), 16, rng(500, 5000)); + } else { + ter_set(rng(4, 10), 16, t_recycler); + } + if (one_in(3)) { // Place a dumpster + int startx = rng(2, 11), starty = rng(18, 19); + if (startx == 11) { + starty = 18; + } + bool hori = (starty == 18 ? false : true); + for (int i = startx; i <= startx + (hori ? 3 : 2); i++) { + for (int j = starty; j <= starty + (hori ? 2 : 3); j++) { + furn_set(i, j, f_dumpster); + } + } + if (hori) { + place_items("trash", 30, startx, starty, startx + 3, starty + 2, false, 0); + } else { + place_items("trash", 30, startx, starty, startx + 2, starty + 3, false, 0); + } + } + place_items("road", 30, 2, 16, 12, SEEY * 2 - 3, false, 0); + } + + place_items("magazines", 70, 9, 7, 9, 7, false, 0); + if (one_in(4)) { + place_items("snacks", 70, 9, 7, 9, 7, false, 0); + } + + if (!one_in(3)) { + place_items("hardware", 80, 3, 9, 3, 14, false, 0); + } else if (!one_in(3)) { + place_items("tools", 80, 3, 9, 3, 14, false, 0); + } else { + place_items("bigtools", 80, 3, 9, 3, 14, false, 0); + } + + if (!one_in(3)) { + place_items("hardware", 80, 6, 9, 6, 14, false, 0); + } else if (!one_in(3)) { + place_items("tools", 80, 6, 9, 6, 14, false, 0); + } else { + place_items("bigtools", 80, 6, 9, 6, 14, false, 0); + } + + if (!one_in(4)) { + place_items("tools", 80, 7, 9, 7, 14, false, 0); + } else if (one_in(4)) { + place_items("mischw", 80, 7, 9, 7, 14, false, 0); + } else { + place_items("hardware", 80, 7, 9, 7, 14, false, 0); + } + if (!one_in(4)) { + place_items("tools", 80, 10, 9, 10, 14, false, 0); + } else if (one_in(4)) { + place_items("mischw", 80, 10, 9, 10, 14, false, 0); + } else { + place_items("hardware", 80, 10, 9, 10, 14, false, 0); + } + + if (!one_in(3)) { + place_items("bigtools", 75, 11, 9, 11, 14, false, 0); + } else if (one_in(2)) { + place_items("cleaning", 75, 11, 9, 11, 14, false, 0); + } else { + place_items("tools", 75, 11, 9, 11, 14, false, 0); + } + if (one_in(2)) { + place_items("cleaning", 65, 15, 8, 17, 8, false, 0); + } else { + place_items("snacks", 65, 15, 8, 17, 8, false, 0); + } + if (one_in(4)) { + place_items("hardware", 74, 15, 9, 17, 9, false, 0); + } else { + place_items("cleaning", 74, 15, 9, 17, 9, false, 0); + } + if (one_in(4)) { + place_items("hardware", 74, 15, 12, 17, 12, false, 0); + } else { + place_items("cleaning", 74, 15, 12, 17, 12, false, 0); + } + place_items("mischw", 90, 20, 4, 20, 19, false, 0); + { + int num_carts = rng(1, 3); + for( int i = 0; i < num_carts; i++ ) { + add_vehicle (g, "wheelbarrow", rng(4, 19), rng(3, 11), 90, -1, -1, false); + } + } + if (terrain_type == "s_hardware_east") { + rotate(1); + } + if (terrain_type == "s_hardware_south") { + rotate(2); + } + if (terrain_type == "s_hardware_west") { + rotate(3); + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_electronics", terrain_type)) { + + fill_background(this, &grass_or_dirt); + square(this, t_floor, 4, 4, SEEX * 2 - 4, SEEY * 2 - 4); + line(this, t_wall_v, 3, 4, 3, SEEY * 2 - 4); + line(this, t_wall_v, SEEX * 2 - 3, 4, SEEX * 2 - 3, SEEY * 2 - 4); + line(this, t_wall_h, 3, 3, SEEX * 2 - 3, 3); + line(this, t_wall_h, 3, SEEY * 2 - 3, SEEX * 2 - 3, SEEY * 2 - 3); + ter_set(13, 3, t_door_c); + line(this, t_window, 10, 3, 11, 3); + line(this, t_window, 16, 3, 18, 3); + line(this, t_window, SEEX * 2 - 3, 9, SEEX * 2 - 3, 11); + line(this, t_window, SEEX * 2 - 3, 14, SEEX * 2 - 3, 16); + line_furn(this, f_counter, 4, SEEY * 2 - 4, SEEX * 2 - 4, SEEY * 2 - 4); + line_furn(this, f_counter, 4, SEEY * 2 - 5, 4, SEEY * 2 - 9); + line_furn(this, f_counter, SEEX * 2 - 4, SEEY * 2 - 5, SEEX * 2 - 4, SEEY * 2 - 9); + line_furn(this, f_counter, SEEX * 2 - 7, 4, SEEX * 2 - 7, 6); + line_furn(this, f_counter, SEEX * 2 - 7, 7, SEEX * 2 - 5, 7); + line_furn(this, f_rack, 9, SEEY * 2 - 5, 9, SEEY * 2 - 9); + line_furn(this, f_rack, SEEX * 2 - 9, SEEY * 2 - 5, SEEX * 2 - 9, SEEY * 2 - 9); + line_furn(this, f_rack, 4, 4, 4, SEEY * 2 - 10); + line_furn(this, f_rack, 5, 4, 8, 4); + place_items("consumer_electronics", 85, 4, SEEY * 2 - 4, SEEX * 2 - 4, + SEEY * 2 - 4, false, turn - 50); + place_items("consumer_electronics", 85, 4, SEEY * 2 - 5, 4, SEEY * 2 - 9, + false, turn - 50); + place_items("consumer_electronics", 85, SEEX * 2 - 4, SEEY * 2 - 5, + SEEX * 2 - 4, SEEY * 2 - 9, false, turn - 50); + place_items("consumer_electronics", 85, 9, SEEY * 2 - 5, 9, SEEY * 2 - 9, + false, turn - 50); + place_items("consumer_electronics", 85, SEEX * 2 - 9, SEEY * 2 - 5, + SEEX * 2 - 9, SEEY * 2 - 9, false, turn - 50); + place_items("consumer_electronics", 85, 4, 4, 4, SEEY * 2 - 10, false, + turn - 50); + place_items("consumer_electronics", 85, 5, 4, 8, 4, false, turn - 50); + if (terrain_type == "s_electronics_east") { + rotate(1); + } + if (terrain_type == "s_electronics_south") { + rotate(2); + } + if (terrain_type == "s_electronics_west") { + rotate(3); + } + place_spawns(g, "GROUP_ELECTRO", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_sports", terrain_type)) { + + lw = rng(0, 3); + rw = SEEX * 2 - 1 - rng(0, 3); + tw = rng(3, 10); + bw = SEEY * 2 - 1 - rng(0, 3); + cw = bw - rng(3, 5); + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (((j == tw || j == bw) && i >= lw && i <= rw) || + (j == cw && i > lw && i < rw)) { + ter_set(i, j, t_wall_h); + } else if ((i == lw || i == rw) && j > tw && j < bw) { + ter_set(i, j, t_wall_v); + } else if ((j == cw - 1 && i > lw && i < rw - 4) || + (j < cw - 3 && j > tw && (i == lw + 1 || i == rw - 1))) { + set(i, j, t_floor, f_rack); + } else if (j == cw - 3 && i > lw && i < rw - 4) { + set(i, j, t_floor, f_counter); + } else if (j > tw && j < bw && i > lw && i < rw) { + ter_set(i, j, t_floor); + } else if (tw >= 6 && j >= tw - 6 && j < tw && i >= lw && i <= rw) { + if ((i - lw) % 4 == 0) { + ter_set(i, j, t_pavement_y); + } else { + ter_set(i, j, t_pavement); + } + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + rn = rng(tw + 2, cw - 6); + for (int i = lw + 3; i <= rw - 5; i += 4) { + if (cw - 6 > tw + 1) { + furn_set(i , rn + 1, f_rack); + furn_set(i , rn , f_rack); + furn_set(i + 1, rn + 1, f_rack); + furn_set(i + 1, rn , f_rack); + place_items("camping", 86, i, rn, i + 1, rn + 1, false, 0); + } else if (cw - 5 > tw + 1) { + furn_set(i , cw - 5, f_rack); + furn_set(i + 1, cw - 5, f_rack); + place_items("camping", 80, i, cw - 5, i + 1, cw - 5, false, 0); + } + } + ter_set(rw - rng(2, 3), cw, t_door_c); + rn = rng(2, 4); + for (int i = lw + 2; i <= lw + 2 + rn; i++) { + ter_set(i, tw, t_window); + } + for (int i = rw - 2; i >= rw - 2 - rn; i--) { + ter_set(i, tw, t_window); + } + ter_set(rng(lw + 3 + rn, rw - 3 - rn), tw, t_door_c); + if (one_in(4)) { + ter_set(rng(lw + 2, rw - 2), bw, t_door_locked); + } + place_items("allsporting", 90, lw + 1, cw - 1, rw - 5, cw - 1, false, 0); + place_items("sports", 82, lw + 1, tw + 1, lw + 1, cw - 4, false, 0); + place_items("sports", 82, rw - 1, tw + 1, rw - 1, cw - 4, false, 0); + if (!one_in(4)) { + place_items("allsporting", 92, lw + 1, cw + 1, rw - 1, bw - 1, false, 0); + } + + if (terrain_type == "s_sports_east") { + rotate(1); + } + if (terrain_type == "s_sports_south") { + rotate(2); + } + if (terrain_type == "s_sports_west") { + rotate(3); + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_liquor", terrain_type)) { + + fill_background(this, &grass_or_dirt); + square(this, t_pavement, 3, 13, SEEX * 2 - 4, SEEY * 2 - 1); + square(this, t_floor, 3, 2, SEEX * 2 - 4, 12); + mapf::formatted_set_simple(this, 3, 2, + "\ +--:------------:--\n\ +|# ##### c |\n\ +|# ## c |\n\ +|# ## ## ccc |\n\ +|# ## ## |\n\ +|# ## &|\n\ +| ##### &|\n\ +|---- ##### &|\n\ +| | &|\n\ +| | &&&|\n\ +------------------\n", + mapf::basic_bind("- | :", t_wall_h, t_wall_v, t_window), + mapf::basic_bind("# c &", f_rack, f_counter, f_glass_fridge)); + square_furn(this, f_dumpster, 5, 13, 7, 14); + square_furn(this, f_dumpster, SEEX * 2 - 6, 15, SEEX * 2 - 5, 17); + + ter_set(rng(13, 15), 2, t_door_c); + ter_set(rng(4, 6), 9, t_door_c); + ter_set(rng(9, 16), 12, t_door_c); + + place_items("alcohol", 96, 4, 3, 4, 7, false, 0); + place_items("alcohol", 96, 7, 3, 11, 3, false, 0); + place_items("alcohol", 96, 7, 4, 8, 7, false, 0); + place_items("alcohol", 96, 11, 8, 15, 9, false, 0); + place_items("snacks", 85, 11, 5, 12, 6, false, 0); + place_items("fridgesnacks", 90, 19, 7, 19, 10, false, 0); + place_items("fridgesnacks", 90, 17, 11, 19, 11, false, 0); + place_items("behindcounter", 80, 17, 3, 19, 4, false, 0); + place_items("trash", 30, 5, 14, 7, 14, false, 0); + place_items("trash", 30, 18, 15, 18, 17, false, 0); + + { + int num_carts = rng(0, 3); + for( int i = 0; i < num_carts; i++ ) { + add_vehicle (g, "shopping_cart", rng(4, 19), rng(3, 11), 90); + } + } + + if (terrain_type == "s_liquor_east") { + rotate(1); + } + if (terrain_type == "s_liquor_south") { + rotate(2); + } + if (terrain_type == "s_liquor_west") { + rotate(3); + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_gun", terrain_type)) { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i == 2 || i == SEEX * 2 - 3) && j > 6 && j < SEEY * 2 - 1) { + ter_set(i, j, t_wall_v); + } else if ((i == 8 && j > 6 && j < 13) || + (j == 16 && (i == 5 || i == 8 || i == 11 || i == 14 || i == 17))) { + set(i, j, t_floor, f_counter); + } else if ((j == 6 && ((i > 4 && i < 8) || (i > 15 && i < 19)))) { + ter_set(i, j, t_window); + } else if ((j == 14 && i > 3 && i < 15)) { + ter_set(i, j, t_wall_glass_h); + } else if (j == 16 && i == SEEX * 2 - 4) { + ter_set(i, j, t_door_c); + } else if (((j == 6 || j == SEEY * 2 - 1) && i > 1 && i < SEEX * 2 - 2) || + ((j == 16 || j == 14) && i > 2 && i < SEEX * 2 - 3)) { + ter_set(i, j, t_wall_h); + } else if (((i == 3 || i == SEEX * 2 - 4) && j > 6 && j < 14) || + ((j > 8 && j < 12) && (i == 12 || i == 13 || i == 16)) || + (j == 13 && i > 15 && i < SEEX * 2 - 4)) { + set(i, j, t_floor, f_rack); + } else if (i > 2 && i < SEEX * 2 - 3 && j > 6 && j < SEEY * 2 - 1) { + ter_set(i, j, t_floor); + } else if ((j > 0 && j < 6 && + (i == 2 || i == 6 || i == 10 || i == 17 || i == SEEX * 2 - 3))) { + ter_set(i, j, t_pavement_y); + } else if (j < 6 && i > 1 && i < SEEX * 2 - 2) { + ter_set(i, j, t_pavement); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + ter_set(rng(11, 14), 6, t_door_c); + ter_set(rng(5, 14), 14, t_door_c); + place_items("pistols", 70, 12, 9, 13, 11, false, 0); + place_items("shotguns", 60, 16, 9, 16, 11, false, 0); + place_items("rifles", 80, 20, 7, 20, 12, false, 0); + place_items("smg", 25, 3, 7, 3, 8, false, 0); + place_items("assault", 18, 3, 9, 3, 10, false, 0); + place_items("ammo", 93, 3, 11, 3, 13, false, 0); + place_items("allguns", 12, 5, 16, 17, 16, false, 0); + place_items("gunxtras", 67, 16, 13, 19, 13, false, 0); + if (terrain_type == "s_gun_east") { + rotate(1); + } + if (terrain_type == "s_gun_south") { + rotate(2); + } + if (terrain_type == "s_gun_west") { + rotate(3); + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_clothes", terrain_type)) { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j == 2 && (i == 11 || i == 12)) { + ter_set(i, j, t_door_glass_c); + } else if (j == 2 && i > 3 && i < SEEX * 2 - 4) { + ter_set(i, j, t_wall_glass_h); + } else if (((j == 2 || j == SEEY * 2 - 2) && i > 1 && i < SEEX * 2 - 2) || + (j == 4 && i > 12 && i < SEEX * 2 - 3) || + (j == 17 && i > 2 && i < 12) || + (j == 20 && i > 2 && i < 11)) { + ter_set(i, j, t_wall_h); + } else if (((i == 2 || i == SEEX * 2 - 3) && j > 1 && j < SEEY * 2 - 1) || + (i == 11 && (j == 18 || j == 20 || j == 21)) || + (j == 21 && (i == 5 || i == 8))) { + ter_set(i, j, t_wall_v); + } else if ((i == 16 && j > 4 && j < 9) || + (j == 8 && (i == 17 || i == 18)) || + (j == 18 && i > 2 && i < 11)) { + set(i, j, t_floor, f_counter); + } else if ((i == 3 && j > 4 && j < 13) || + (i == SEEX * 2 - 4 && j > 9 && j < 20) || + ((j == 10 || j == 11) && i > 6 && i < 13) || + ((j == 14 || j == 15) && i > 4 && i < 13) || + ((i == 15 || i == 16) && j > 10 && j < 18) || + (j == SEEY * 2 - 3 && i > 11 && i < 18)) { + set(i, j, t_floor, f_rack); + } else if (i > 2 && i < SEEX * 2 - 3 && j > 2 && j < SEEY * 2 - 2) { + ter_set(i, j, t_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + + for (int i = 3; i <= 9; i += 3) { + if (one_in(2)) { + ter_set(i, SEEY * 2 - 4, t_door_c); + } else { + ter_set(i + 1, SEEY * 2 - 4, t_door_c); + } + } + + { + int num_carts = rng(0, 5); + for( int i = 0; i < num_carts; i++ ) { + add_vehicle (g, "shopping_cart", rng(3, 16), rng(3, 21), 90); + } + } + + place_items("shoes", 70, 7, 10, 12, 10, false, 0); + place_items("pants", 88, 5, 14, 12, 14, false, 0); + place_items("shirts", 88, 7, 11, 12, 11, false, 0); + place_items("jackets", 80, 3, 5, 3, 12, false, 0); + place_items("winter", 60, 5, 15, 12, 15, false, 0); + place_items("bags", 70, 15, 11, 15, 17, false, 0); + place_items("dresser", 50, 12, 21, 17, 21, false, 0); + place_items("allclothes", 20, 3, 21, 10, 21, false, 0); + place_items("allclothes", 20, 3, 18, 10, 18, false, 0); + switch (rng(0, 2)) { + case 0: + place_items("pants", 70, 16, 11, 16, 17, false, 0); + break; + case 1: + place_items("shirts", 70, 16, 11, 16, 17, false, 0); + break; + case 2: + place_items("bags", 70, 16, 11, 16, 17, false, 0); + break; + } + switch (rng(0, 2)) { + case 0: + place_items("pants", 75, 20, 10, 20, 19, false, 0); + break; + case 1: + place_items("shirts", 75, 20, 10, 20, 19, false, 0); + break; + case 2: + place_items("jackets", 75, 20, 10, 20, 19, false, 0); + break; + } + + if (terrain_type == "s_clothes_east") { + rotate(1); + } + if (terrain_type == "s_clothes_south") { + rotate(2); + } + if (terrain_type == "s_clothes_west") { + rotate(3); + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_library", terrain_type)) { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j == 2) { + if (i == 5 || i == 6 || i == 17 || i == 18) { + ter_set(i, j, t_window_domestic); + } else if (i == 11 || i == 12) { + ter_set(i, j, t_door_c); + } else if (i > 1 && i < SEEX * 2 - 2) { + ter_set(i, j, t_wall_h); + } else { + ter_set(i, j, grass_or_dirt()); + } + } else if (j == 17 && i > 1 && i < SEEX * 2 - 2) { + ter_set(i, j, t_wall_h); + } else if (i == 2) { + if (j == 6 || j == 7 || j == 10 || j == 11 || j == 14 || j == 15) { + ter_set(i, j, t_window_domestic); + } else if (j > 1 && j < 17) { + ter_set(i, j, t_wall_v); + } else { + ter_set(i, j, grass_or_dirt()); + } + } else if (i == SEEX * 2 - 3) { + if (j == 6 || j == 7) { + ter_set(i, j, t_window_domestic); + } else if (j > 1 && j < 17) { + ter_set(i, j, t_wall_v); + } else { + ter_set(i, j, grass_or_dirt()); + } + } else if (((j == 4 || j == 5) && i > 2 && i < 10) || + ((j == 8 || j == 9 || j == 12 || j == 13 || j == 16) && + i > 2 && i < 16) || (i == 20 && j > 7 && j < 17)) { + set(i, j, t_floor, f_bookcase); + } else if ((i == 14 && j < 6 && j > 2) || (j == 5 && i > 14 && i < 19)) { + set(i, j, t_floor, f_counter); + } else if (i > 2 && i < SEEX * 2 - 3 && j > 2 && j < 17) { + ter_set(i, j, t_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + if (!one_in(3)) { + ter_set(18, 17, t_door_c); + } + place_items("magazines", 70, 3, 4, 9, 4, false, 0); + place_items("magazines", 70, 20, 8, 20, 16, false, 0); + place_items("novels", 96, 3, 5, 9, 5, false, 0); + place_items("novels", 96, 3, 8, 15, 9, false, 0); + place_items("manuals", 92, 3, 12, 15, 13, false, 0); + place_items("textbooks", 88, 3, 16, 15, 16, false, 0); + if (terrain_type == "s_library_east") { + rotate(1); + } + if (terrain_type == "s_library_south") { + rotate(2); + } + if (terrain_type == "s_library_west") { + rotate(3); + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (terrain_type == "s_restaurant_north" || + terrain_type == "s_restaurant_east" || + terrain_type == "s_restaurant_south" || + terrain_type == "s_restaurant_west") { + + // Init to grass/dirt + fill_background(this, &grass_or_dirt); + ter_id doortype = (one_in(4) ? t_door_c : t_door_glass_c); + lw = rng(0, 4); + rw = rng(19, 23); + tw = rng(0, 4); + bw = rng(17, 23); + // Fill in with floor + square(this, t_floor, lw + 1, tw + 1, rw - 1, bw - 1); + // Draw the walls + line(this, t_wall_h, lw, tw, rw, tw); + line(this, t_wall_h, lw, bw, rw, bw); + line(this, t_wall_v, lw, tw + 1, lw, bw - 1); + line(this, t_wall_v, rw, tw + 1, rw, bw - 1); + + // What's the front wall look like? + switch (rng(1, 3)) { + case 1: // Door to one side + case 2: + // Mirror it? + if (one_in(2)) { + ter_set(lw + 2, tw, doortype); + } else { + ter_set(rw - 2, tw, doortype); + } + break; + case 3: // Double-door in center + line(this, doortype, (lw + rw) / 2, tw, 1 + ((lw + rw) / 2), tw); + break; + } + // What type of windows? + switch (rng(1, 6)) { + case 1: // None! + break; + case 2: + case 3: // Glass walls everywhere + for (int i = lw + 1; i <= rw - 1; i++) { + if (ter(i, tw) == t_wall_h) { + ter_set(i, tw, t_wall_glass_h); + } + } + while (!one_in(3)) { // 2 in 3 chance of having some walls too + rn = rng(1, 3); + if (ter(lw + rn, tw) == t_wall_glass_h) { + ter_set(lw + rn, tw, t_wall_h); + } + if (ter(rw - rn, tw) == t_wall_glass_h) { + ter_set(rw - rn, tw, t_wall_h); + } + } + break; + case 4: + case 5: + case 6: { // Just some windows + rn = rng(1, 3); + int win_width = rng(1, 3); + for (int i = rn; i <= rn + win_width; i++) { + if (ter(lw + i, tw) == t_wall_h) { + ter_set(lw + i, tw, t_window); + } + if (ter(rw - i, tw) == t_wall_h) { + ter_set(rw - i, tw, t_window); + } + } + } + break; + } // Done building windows + // Build a kitchen + mw = rng(bw - 6, bw - 3); + cw = (one_in(3) ? rw - 3 : rw - 1); // 1 in 3 chance for corridor to back + line(this, t_wall_h, lw + 1, mw, cw, mw); + line(this, t_wall_v, cw, mw + 1, cw, bw - 1); + furn_set(lw + 1, mw + 1, f_fridge); + furn_set(lw + 2, mw + 1, f_fridge); + place_items("fridge", 80, lw + 1, mw + 1, lw + 2, mw + 1, false, 0); + line_furn(this, f_counter, lw + 3, mw + 1, cw - 1, mw + 1); + place_items("kitchen", 70, lw + 3, mw + 1, cw - 1, mw + 1, false, 0); + // Place a door to the kitchen + if (cw != rw - 1 && one_in(2)) { // side door + ter_set(cw, rng(mw + 2, bw - 1), t_door_c); + } else { // north-facing door + rn = rng(lw + 4, cw - 2); + // Clear the counters around the door + line(this, t_floor, rn - 1, mw + 1, rn + 1, mw + 1); + ter_set(rn, mw, t_door_c); + } + // Back door? + if (bw <= 19 || one_in(3)) { + // If we have a corridor, put it over there + if (cw == rw - 3) { + // One in two chance of a double-door + if (one_in(2)) { + line(this, t_door_locked, cw + 1, bw, rw - 1, bw); + } else { + ter_set( rng(cw + 1, rw - 1), bw, t_door_locked); + } + } else { // No corridor + ter_set( rng(lw + 1, rw - 1), bw, t_door_locked); + } + } + // Build a dining area + int table_spacing = rng(2, 4); + for (int i = lw + table_spacing + 1; i <= rw - 2 - table_spacing; + i += table_spacing + 2) { + for (int j = tw + table_spacing + 1; j <= mw - 1 - table_spacing; + j += table_spacing + 2) { + square_furn(this, f_table, i, j, i + 1, j + 1); + place_items("dining", 70, i, j, i + 1, j + 1, false, 0); + } + } + // Dumpster out back? + if (rng(18, 21) > bw) { + square(this, t_pavement, lw, bw + 1, rw, 24); + rn = rng(lw + 1, rw - 4); + square_furn(this, f_dumpster, rn, 22, rn + 2, 23); + place_items("trash", 40, rn, 22, rn + 3, 23, false, 0); + place_items("fridge", 50, rn, 22, rn + 3, 23, false, 0); + } + + if (terrain_type == "s_restaurant_east") { + rotate(1); + } + if (terrain_type == "s_restaurant_south") { + rotate(2); + } + if (terrain_type == "s_restaurant_west") { + rotate(3); + } + + place_spawns(g, "GROUP_GROCERY", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("s_restaurant_fast", terrain_type)) { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + dd \n\ + ,,,,,,,,,,,,,,,,,,,, \n\ + ,_______,____________, \n\ +,________,_____________,\n\ +,________,_____________,\n\ +,________,_____________,\n\ +,_____#|----w-|-|#_____,\n\ +,_____||erle.x|T||_____,\n\ +,_____|O.....S|.S|_____,\n\ +,_____|e.ccl.c|+-|_____,\n\ +,_____w.......+..|_____,\n\ +,_____|ccccxcc|..%_____,\n\ +,,,,,,|..........+_____,\n\ +,_____|..........%_____,\n\ +,_____%.hh....hh.|_____,\n\ +,_____%.tt....tt.%_____,\n\ +,_____%.tt....tt.%_____,\n\ +,_____|.hh....hh.%_____,\n\ +,__,__|-555++555-|__,__,\n\ +,__,__#ssssssssss#_,,,_,\n\ +,__,__#hthsssshth#__,__,\n\ +,_,,,_#ssssssssss#__,__,\n\ +,__,__#### ss ####__,__,\n\ +,_____ssssssssssss_____,\n", + mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", t_floor, + t_wall_glass_h, t_wall_glass_v, t_floor, t_pavement_y, t_pavement, t_floor, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_shrub, t_floor, + t_door_glass_c, t_door_locked_alarm, t_door_locked, t_window_domestic, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", f_dumpster, f_null, + f_null, f_oven, f_null, f_null, f_rack, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_chair, f_counter, f_locker, + f_null)); + place_items("fast_food", 80, 8, 7, 8, 7, false, 0); + place_items("fast_food", 70, 7, 9, 7, 9, false, 0); + place_items("fast_food", 60, 11, 7, 11, 7, false, 0); + if (terrain_type == "s_restaurant_fast_east") { + rotate(3); + } + if (terrain_type == "s_restaurant_fast_north") { + rotate(2); + } + if (terrain_type == "s_restaurant_fast_west") { + rotate(1); + } + + + } else if (is_ot_type("s_restaurant_coffee", terrain_type)) { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +|--------=------|--|--| \n\ +|ltSrrrrr..eOSll|T.|.T| \n\ +|...............|S.|.S| \n\ +|cccxccxccc..ccc|-D|D-| \n\ +|.....................| \n\ +|.....................| \n\ +|hh.......hth.hth.hth.| \n\ +|tt....|--555-555-555-| \n\ +|tt....%ssssssssssssssss\n\ +|hh....+ss______________\n\ +|......+ss______________\n\ +|......%ss______________\n\ +|.htth.|ss______________\n\ +|-5555-|ss,,,,,,,_______\n\ +#ssssss#ss______________\n\ +#shtths#ss______________\n\ +#sssssssss______________\n\ +#shsshssss______________\n\ +#stsstssss,,,,,,,_______\n\ +#shsshssss______________\n\ +#sssssssss______________\n\ +#shtthssss______________\n\ +#ssssss#ss______________\n\ +########ss,,,,,,,_______\n", + mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", t_floor, + t_wall_glass_h, t_wall_glass_v, t_floor, t_pavement_y, t_pavement, t_floor, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_shrub, t_floor, + t_door_glass_c, t_door_locked_alarm, t_door_locked, t_window_domestic, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("d 5 % O , _ r 6 x $ ^ . - | # t + = D w T S e h c l s", f_dumpster, f_null, + f_null, f_oven, f_null, f_null, f_rack, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_chair, f_counter, f_locker, + f_null)); + place_items("coffee_shop", 85, 4, 1, 8, 1, false, 0); + place_items("coffee_shop", 85, 11, 1, 11, 1, false, 0); + place_items("cleaning", 60, 14, 1, 15, 1, false, 0); + if (terrain_type == "s_restaurant_coffee_east") { + rotate(3); + } + if (terrain_type == "s_restaurant_coffee_north") { + rotate(2); + } + if (terrain_type == "s_restaurant_coffee_west") { + rotate(1); + } + + } else if (terrain_type == "shelter") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + square(this, t_floor, 5, 5, SEEX * 2 - 6, SEEY * 2 - 6); + mapf::formatted_set_simple(this, 4, 4, + "\ +|----:-++-:----|\n\ +|llll c 6|\n\ +| b b b c |\n\ +| b b b c |\n\ +| b b b c |\n\ +: b b b :\n\ +| |\n\ ++ >> +\n\ ++ >> +\n\ +| |\n\ +: b b b :\n\ +| b b b c |\n\ +| b b b c |\n\ +| b b b c |\n\ +| c x|\n\ +|----:-++-:----|\n", + mapf::basic_bind("- | + : 6 x >", t_wall_h, t_wall_v, t_door_c, t_window_domestic, t_console, + t_console_broken, t_stairs_down), + mapf::basic_bind("b c l", f_bench, f_counter, f_locker)); + tmpcomp = add_computer(SEEX + 6, 5, _("Evac shelter computer"), 0); + tmpcomp->add_option(_("Emergency Message"), COMPACT_EMERG_MESS, 0); + if(ACTIVE_WORLD_OPTIONS["BLACK_ROAD"]) { + //place zombies outside + place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], 0, 0, SEEX * 2 - 1, 3, 0.4f); + place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], 0, 4, 3, SEEX * 2 - 4, 0.4f); + place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], SEEX * 2 - 3, 4, + SEEX * 2 - 1, SEEX * 2 - 4, 0.4f); + place_spawns(g, "GROUP_ZOMBIE", ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"], 0, SEEX * 2 - 3, + SEEX * 2 - 1, SEEX * 2 - 1, 0.4f); + } + + + } else if (terrain_type == "shelter_under") { + + // Make the whole area rock, then plop an open area in the center. + square(this, t_rock, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); + square(this, t_rock_floor, 6, 6, SEEX * 2 - 8, SEEY * 2 - 8); + // Create an anteroom with hte stairs and some locked doors. + ter_set(SEEX - 1, SEEY * 2 - 7, t_door_locked); + ter_set(SEEX , SEEY * 2 - 7, t_door_locked); + ter_set(SEEX - 1, SEEY * 2 - 6, t_rock_floor); + ter_set(SEEX , SEEY * 2 - 6, t_rock_floor); + ter_set(SEEX - 1, SEEY * 2 - 5, t_stairs_up); + ter_set(SEEX , SEEY * 2 - 5, t_stairs_up); + if( one_in(10) ) { + // Scatter around lots of items and some zombies. + for( int x = 0; x < 10; ++x ) { + place_items("shelter", 90, 6, 6, SEEX * 2 - 8, SEEY * 2 - 8, false, 0); + } + place_spawns(g, "GROUP_ZOMBIE", 1, 6, 6, SEEX * 2 - 8, SEEX * 2 - 8, 0.2); + } else { + // Scatter around some items. + place_items("shelter", 80, 6, 6, SEEX * 2 - 8, SEEY * 2 - 8, false, 0); + } + + + } else if (terrain_type == "lmoe") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + square(this, t_shrub, 7, 6, 16, 12); + square(this, t_rock, 10, 9, 13, 12); + square(this, t_rock_floor, 11, 10, 12, 11); + line(this, t_stairs_down, 11, 10, 12, 10); + ter_set(11, 12, t_door_metal_c); + line(this, t_tree, 9, 8, 14, 8); + line(this, t_tree, 9, 8, 9, 12); + line(this, t_tree, 14, 8, 14, 12); + square(this, t_shrub, 13, 13, 15, 14); + square(this, t_shrub, 8, 13, 10, 14); + ter_set(10, 6, t_tree_young); + ter_set(14, 6, t_tree_young); + line(this, t_tree_young, 9, 7, 10, 7); + ter_set(12, 7, t_tree_young); + ter_set(14, 7, t_tree_young); + ter_set(8, 9, t_tree_young); + line(this, t_tree_young, 7, 11, 8, 11); + line(this, t_tree_young, 15, 10, 15, 11); + ter_set(16, 12, t_tree_young); + ter_set(9, 13, t_tree_young); + ter_set(12, 13, t_tree_young); + ter_set(16, 12, t_tree_young); + line(this, t_tree_young, 14, 13, 15, 13); + ter_set(10, 14, t_tree_young); + ter_set(13, 14, t_tree_young); + + + } else if (terrain_type == "lmoe_under") { + + fill_background(this, t_rock); + square(this, t_rock_floor, 3, 3, 20, 20); + line(this, t_stairs_up, 11, 20, 12, 20); + line(this, t_wall_metal_h, 3, 12, 20, 12); + line(this, t_wall_metal_v, 10, 12, 10, 20); + line(this, t_wall_metal_v, 13, 12, 13, 20); + line(this, t_chainfence_v, 7, 3, 7, 6); + line(this, t_chainfence_h, 3, 6, 6, 6); + line(this, t_wall_metal_v, 15, 3, 15, 10); + line(this, t_wall_metal_h, 15, 9, 20, 9); + line(this, t_wall_metal_v, 17, 10, 17, 11); + ter_set(10, 16, t_door_metal_c); + ter_set(13, 16, t_door_metal_c); + ter_set(5, 6, t_chaingate_c); + line(this, t_door_metal_c, 11, 12, 12, 12); + ter_set(17, 11, t_door_metal_c); + ter_set(15, 6, t_door_metal_c); + square(this, t_rubble, 18, 18, 20, 20); + line(this, t_rubble, 16, 20, 20, 16); + line(this, t_rubble, 17, 20, 20, 17); + line(this, t_water_sh, 15, 20, 20, 15); + //square(this, t_emergency_light_flicker, 11, 13, 12, 19); + furn_set(17, 16, f_woodstove); + furn_set(14, 13, f_chair); + furn_set(14, 18, f_chair); + square_furn(this, f_crate_c, 18, 13, 20, 14); + line_furn(this, f_crate_c, 17, 13, 19, 15); + line_furn(this, f_counter, 3, 13, 3, 20); + line_furn(this, f_counter, 3, 20, 9, 20); + line_furn(this, f_bookcase, 5, 13, 8, 13); + square_furn(this, f_table, 5, 15, 6, 17); + furn_set(7, 16, f_chair); + line_furn(this, f_rack, 3, 11, 7, 11); + line_furn(this, f_rack, 3, 9, 7, 9); + line_furn(this, f_rack, 3, 3, 6, 3); + ter_set(10, 7, t_column); + ter_set(13, 7, t_column); + line_furn(this, f_bookcase, 16, 3, 16, 5); + square_furn(this, f_bed, 19, 3, 20, 4); + furn_set(19, 7, f_chair); + furn_set(20, 7, f_desk); + line(this, t_rubble, 15, 10, 16, 10); + furn_set(19, 10, f_sink); + place_toilet(20, 11); + place_items("allguns", 80, 3, 3, 6, 3, false, 0); + place_items("ammo", 80, 3, 3, 6, 3, false, 0); + place_items("cannedfood", 90, 3, 9, 7, 9, false, 0); + place_items("survival_tools", 80, 3, 11, 7, 11, false, 0); + place_items("bags", 50, 3, 11, 7, 11, false, 0); + place_items("softdrugs", 50, 3, 11, 7, 11, false, 0); + place_items("manuals", 60, 5, 13, 8, 13, false, 0); + place_items("textbooks", 60, 5, 13, 8, 13, false, 0); + place_items("tools", 90, 5, 15, 6, 17, false, 0); + place_items("hardware", 70, 3, 13, 3, 20, false, 0); + place_items("stash_wood", 70, 3, 20, 9, 20, false, 0); + place_items("shelter", 70, 18, 13, 20, 14, false, 0); + place_items("novels", 70, 16, 3, 16, 5, false, 0); + place_items("office", 50, 20, 7, 20, 7, false, 0); + + + } else if (terrain_type == "lab" || + terrain_type == "lab_stairs" || + terrain_type == "lab_core" || + terrain_type == "ice_lab" || + terrain_type == "ice_lab_stairs" || + terrain_type == "ice_lab_core") { + + if (is_ot_type("ice_lab", terrain_type)) { + ice_lab = true; + } else { + ice_lab = false; + } + + if (ice_lab) { + int temperature = -20 + 30 * (zlevel); + set_temperature(x, y, temperature); + } + + // Check for adjacent sewers; used below + tw = 0; + rw = 0; + bw = 0; + lw = 0; + if (is_ot_type("sewer", t_north) && connects_to(t_north, 2)) { + tw = SEEY * 2; + } + if (is_ot_type("sewer", t_east) && connects_to(t_east, 3)) { + rw = SEEX * 2; + } + if (is_ot_type("sewer", t_south) && connects_to(t_south, 0)) { + bw = SEEY * 2; + } + if (is_ot_type("sewer", t_west) && connects_to(t_west, 1)) { + lw = SEEX * 2; + } + if (t_above == "") { // We're on ground level + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i <= 1 || i >= SEEX * 2 - 2 || + (j > 1 && j < SEEY * 2 - 2 && (i == SEEX - 2 || i == SEEX + 1))) { + ter_set(i, j, t_wall_v); + } else if (j <= 1 || j >= SEEY * 2 - 2) { + ter_set(i, j, t_wall_h); + } else { + ter_set(i, j, t_floor); + } + } + } + ter_set(SEEX - 1, 0, t_dirt); + ter_set(SEEX - 1, 1, t_door_metal_locked); + ter_set(SEEX , 0, t_dirt); + ter_set(SEEX , 1, t_door_metal_locked); + ter_set(SEEX - 2 + rng(0, 1) * 4, 0, t_card_science); + ter_set(SEEX - 2, SEEY , t_door_metal_c); + ter_set(SEEX + 1, SEEY , t_door_metal_c); + ter_set(SEEX - 2, SEEY - 1, t_door_metal_c); + ter_set(SEEX + 1, SEEY - 1, t_door_metal_c); + ter_set(SEEX - 1, SEEY * 2 - 3, t_stairs_down); + ter_set(SEEX , SEEY * 2 - 3, t_stairs_down); + science_room(this, 2 , 2, SEEX - 3 , SEEY * 2 - 3, 1); + science_room(this, SEEX + 2, 2, SEEX * 2 - 3, SEEY * 2 - 3, 3); + + add_spawn("mon_turret", 1, SEEX, 5); + + if (is_ot_type("road", t_east)) { + rotate(1); + } else if (is_ot_type("road", t_south)) { + rotate(2); + } else if (is_ot_type("road", t_west)) { + rotate(3); + } + } else if (tw != 0 || rw != 0 || lw != 0 || bw != 0) { // Sewers! + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + ter_set(i, j, t_rock_floor); + if (((i < lw || i > SEEX * 2 - 1 - rw) && j > SEEY - 3 && j < SEEY + 2) || + ((j < tw || j > SEEY * 2 - 1 - bw) && i > SEEX - 3 && i < SEEX + 2)) { + ter_set(i, j, t_sewage); + } + if ((i == 0 && t_east >= "lab" && t_east <= "lab_core") || + (i == 0 && t_east >= "ice_lab" && t_east <= "ice_lab_core") || + i == SEEX * 2 - 1) { + if (ter(i, j) == t_sewage) { + ter_set(i, j, t_bars); + } else if (j == SEEY - 1 || j == SEEY) { + ter_set(i, j, t_door_metal_c); + } else { + ter_set(i, j, t_concrete_v); + } + } else if ((j == 0 && t_north >= "lab" && t_north <= "lab_core") || + (j == 0 && t_north >= "ice_lab" && t_north <= "ice_lab_core") || + j == SEEY * 2 - 1) { + if (ter(i, j) == t_sewage) { + ter_set(i, j, t_bars); + } else if (i == SEEX - 1 || i == SEEX) { + ter_set(i, j, t_door_metal_c); + } else { + ter_set(i, j, t_concrete_h); + } + } + } + } + } else { // We're below ground, and no sewers + // Set up the boudaries of walls (connect to adjacent lab squares) + // Are we in an ice lab? + if ( ice_lab ) { + tw = is_ot_type("ice_lab", t_north) ? 0 : 2; + rw = is_ot_type("ice_lab", t_east) ? 1 : 2; + bw = is_ot_type("ice_lab", t_south) ? 1 : 2; + lw = is_ot_type("ice_lab", t_west) ? 0 : 2; + } else { + tw = is_ot_type("lab", t_north) ? 0 : 2; + rw = is_ot_type("lab", t_east) ? 1 : 2; + bw = is_ot_type("lab", t_south) ? 1 : 2; + lw = is_ot_type("lab", t_west) ? 0 : 2; + } + int boarders = 0; + if (tw == 0 ) { + boarders++; + } + if (rw == 1 ) { + boarders++; + } + if (bw == 1 ) { + boarders++; + } + if (lw == 0 ) { + boarders++; + } + //A lab area with only one entrance + if (boarders == 1) { + fill_background(this, t_rock_floor); + if (one_in(2)) { //armory and military barracks + mapf::formatted_set_simple(this, 0, 0, + "\ +|----------------------|\n\ +|r....................r|\n\ +|r..rr..rr....rr..rr..r|\n\ +|r..rr..rr....rr..rr..r|\n\ +|r..rr..rr....rr..rr..r|\n\ +|r..rr..rr....rr..rr..r|\n\ +|r..rr..rr....rr..rr..r|\n\ +|......................|\n\ +|......................|\n\ +|..rrrrrr..........rrr.|\n\ +|-----|----DD-|--+|--|-|\n\ +|b.ddd|.......gc..|T.|T|\n\ +|b..h.+.......g6h.|-+|+|\n\ +|l....|.......gc..|....|\n\ +|-----|.......|--D|...S|\n\ +|b....+...........|...S|\n\ +|b...l|...........|-+--|\n\ +|-----|................|\n\ +|b....+...x............|\n\ +|b...l|..|-DD-|+-|+-|+-|\n\ +|-----|..|....|.l|.l|.l|\n\ +|b....+..|6...|..|..|..|\n\ +|b...l|..|....|bb|bb|bb|\n\ +|-----|--|-..-|--|--|--|\n", + mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", t_rock_floor, t_rock_floor, t_floor, + t_rock_floor, t_rock_floor, t_centrifuge, t_rock_floor, t_console, t_console_broken, + t_reinforced_glass_v, t_reinforced_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, + t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor), + mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", f_bed, f_locker, f_crate_c, + f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_table, f_counter, f_sink, f_toilet)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("mil_surplus", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_desk) { + place_items("office", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_rack) { + if (one_in(3)) { + place_items("mil_surplus", 30, i, j, i, j, false, 0); + } else if (one_in(2)) { + place_items("ammo", 30, i, j, i, j, false, 0); + } else if (one_in(3)) { + place_items("military", 30, i, j, i, j, false, 0); + } else { + place_items("mil_rifles", 30, i, j, i, j, false, 0); + } + } + } + } + computer *tmpcomp2 = NULL; + tmpcomp2 = add_computer(10, 21, _("Barracks Entrance"), 4); + tmpcomp2->add_option(_("UNLOCK ENTRANCE"), COMPACT_UNLOCK, 6); + tmpcomp = add_computer(15, 12, _("Magazine Entrance"), 6); + tmpcomp->add_option(_("UNLOCK ENTRANCE"), COMPACT_UNLOCK, 7); + if (one_in(2)) { + add_spawn("mon_zombie_soldier", rng(1, 4), 12, 12); + } + } else { //human containment + mapf::formatted_set_simple(this, 0, 0, + "\ +|----|-|----|----|-|---|\n\ +|b.T.|.|.T.b|b.T.|.|A.A|\n\ +|b...D.D...b|b...D.|..A|\n\ +|....|.|....|....|.|...|\n\ +|....|.|....|....|.|l..|\n\ +|-GG-|+|-GG-|-GG-|.|-D-|\n\ +|................+.....|\n\ +|................|--D--|\n\ +|................|...bb|\n\ +|................g.....|\n\ +|-GGGGGG-|.......g....T|\n\ +|..cc6c..g.......|.....|\n\ +|..ch.c..|-GGDGG-|-GGG-|\n\ +|........g.............|\n\ +|^.......|.............|\n\ +|-GGG+GG-|.............|\n\ +|ddd.....|.............|\n\ +|.hd.....+....|-G+GGGG-|\n\ +|........|...x|.......c|\n\ +|.......r|-DD-|l......S|\n\ +|ddd....r|...6|l......c|\n\ +|.hd....r|....|........|\n\ +|........|....|..cxcC..|\n\ +|--------|-..-|--------|\n", + mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", t_rock_floor, t_rock_floor, t_floor, + t_rock_floor, t_rock_floor, t_centrifuge, t_rock_floor, t_console, t_console_broken, + t_reinforced_glass_v, t_reinforced_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, + t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, t_rock_floor, t_rock_floor), + mapf::basic_bind("b l A r d C h 6 x g G , . - | + D t c S T", f_bed, f_locker, f_crate_c, + f_rack, f_desk, f_null, f_chair, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_table, f_counter, f_sink, f_toilet)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("science", 60, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_desk) { + place_items("office", 60, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_counter) { + place_items("office", 40, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack || this->furn(i, j) == f_crate_c) { + place_items("softdrugs", 40, i, j, i, j, false, 0); + place_items("harddrugs", 30, i, j, i, j, false, 0); + } + } + } + computer *tmpcomp2 = NULL; + tmpcomp2 = add_computer(13, 20, _("Prisoner Containment Entrance"), 4); + tmpcomp2->add_option(_("UNLOCK ENTRANCE"), COMPACT_UNLOCK, 4); + tmpcomp = add_computer(5, 11, _("Containment Control"), 4); + tmpcomp->add_option(_("EMERGENCY CONTAINMENT RELEASE"), COMPACT_OPEN, 5); + add_trap(19, 19, tr_dissector); + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + if (one_in(2)) { + add_item(1, 1, body); + } else { + add_spawn("mon_zombie_shrieker", 1, 1, 1); + } + if (one_in(2)) { + add_item(9, 3, body); + } else { + add_spawn("mon_zombie_brute", 1, 9, 3); + } + if (one_in(2)) { + add_item(14, 4, body); + } else { + add_spawn("mon_zombie_child", 1, 14, 4); + } + if (one_in(2)) { + add_item(19, 9, body); + } else { + add_spawn("mon_zombie_grabber", 1, 19, 9); + } + if (one_in(2)) { + add_spawn("mon_zombie_scientist", rng(1, 2), 12, 14); + } + } + if (bw == 2) { + rotate(2); + } + if (rw == 2) { + rotate(3); + } + if (lw == 2) { + rotate(1); + } + if (t_above == "lab_stairs" || t_above == "ice_lab_stairs") { + int sx, sy; + do { + sx = rng(lw, SEEX * 2 - 1 - rw); + sy = rng(tw, SEEY * 2 - 1 - bw); + } while (ter(sx, sy) != t_rock_floor); + ter_set(sx, sy, t_stairs_up); + } + + if (terrain_type == "lab_stairs" || terrain_type == "ice_lab_stairs") { + int sx, sy; + do { + sx = rng(lw, SEEX * 2 - 1 - rw); + sy = rng(tw, SEEY * 2 - 1 - bw); + } while (ter(sx, sy) != t_rock_floor); + ter_set(sx, sy, t_stairs_down); + } + } else switch (rng(1, 4)) { // Pick a random lab layout + case 1: // Cross shaped + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i < lw || i > SEEX * 2 - 1 - rw) || + ((j < SEEY - 1 || j > SEEY) && (i == SEEX - 2 || i == SEEX + 1))) { + ter_set(i, j, t_concrete_v); + } else if ((j < tw || j > SEEY * 2 - 1 - bw) || + ((i < SEEX - 1 || i > SEEX) && (j == SEEY - 2 || j == SEEY + 1))) { + ter_set(i, j, t_concrete_h); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + if (t_above == "lab_stairs" || t_above == "ice_lab_stairs") { + ter_set(rng(SEEX - 1, SEEX), rng(SEEY - 1, SEEY), t_stairs_up); + } + // Top left + if (one_in(2)) { + ter_set(SEEX - 2, int(SEEY / 2), t_door_metal_c); + science_room(this, lw, tw, SEEX - 3, SEEY - 3, 1); + } else { + ter_set(int(SEEX / 2), SEEY - 2, t_door_metal_c); + science_room(this, lw, tw, SEEX - 3, SEEY - 3, 2); + } + // Top right + if (one_in(2)) { + ter_set(SEEX + 1, int(SEEY / 2), t_door_metal_c); + science_room(this, SEEX + 2, tw, SEEX * 2 - 1 - rw, SEEY - 3, 3); + } else { + ter_set(SEEX + int(SEEX / 2), SEEY - 2, t_door_metal_c); + science_room(this, SEEX + 2, tw, SEEX * 2 - 1 - rw, SEEY - 3, 2); + } + // Bottom left + if (one_in(2)) { + ter_set(int(SEEX / 2), SEEY + 1, t_door_metal_c); + science_room(this, lw, SEEY + 2, SEEX - 3, SEEY * 2 - 1 - bw, 0); + } else { + ter_set(SEEX - 2, SEEY + int(SEEY / 2), t_door_metal_c); + science_room(this, lw, SEEY + 2, SEEX - 3, SEEY * 2 - 1 - bw, 1); + } + // Bottom right + if (one_in(2)) { + ter_set(SEEX + int(SEEX / 2), SEEY + 1, t_door_metal_c); + science_room(this, SEEX + 2, SEEY + 2, SEEX * 2 - 1 - rw, SEEY * 2 - 1 - bw, 0); + } else { + ter_set(SEEX + 1, SEEY + int(SEEY / 2), t_door_metal_c); + science_room(this, SEEX + 2, SEEY + 2, SEEX * 2 - 1 - rw, SEEY * 2 - 1 - bw, 3); + } + if (rw == 1) { + ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); + ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); + } + if (bw == 1) { + ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); + ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); + } + if (terrain_type == "lab_stairs" || terrain_type == "ice_lab_stairs") { // Stairs going down + std::vector stair_points; + if (tw != 0) { + stair_points.push_back(point(SEEX - 1, 2)); + stair_points.push_back(point(SEEX - 1, 2)); + stair_points.push_back(point(SEEX , 2)); + stair_points.push_back(point(SEEX , 2)); + } + if (rw != 1) { + stair_points.push_back(point(SEEX * 2 - 3, SEEY - 1)); + stair_points.push_back(point(SEEX * 2 - 3, SEEY - 1)); + stair_points.push_back(point(SEEX * 2 - 3, SEEY )); + stair_points.push_back(point(SEEX * 2 - 3, SEEY )); + } + if (bw != 1) { + stair_points.push_back(point(SEEX - 1, SEEY * 2 - 3)); + stair_points.push_back(point(SEEX - 1, SEEY * 2 - 3)); + stair_points.push_back(point(SEEX , SEEY * 2 - 3)); + stair_points.push_back(point(SEEX , SEEY * 2 - 3)); + } + if (lw != 0) { + stair_points.push_back(point(2, SEEY - 1)); + stair_points.push_back(point(2, SEEY - 1)); + stair_points.push_back(point(2, SEEY )); + stair_points.push_back(point(2, SEEY )); + } + stair_points.push_back(point(int(SEEX / 2) , SEEY )); + stair_points.push_back(point(int(SEEX / 2) , SEEY - 1)); + stair_points.push_back(point(int(SEEX / 2) + SEEX, SEEY )); + stair_points.push_back(point(int(SEEX / 2) + SEEX, SEEY - 1)); + stair_points.push_back(point(SEEX , int(SEEY / 2) )); + stair_points.push_back(point(SEEX + 2, int(SEEY / 2) )); + stair_points.push_back(point(SEEX , int(SEEY / 2) + SEEY)); + stair_points.push_back(point(SEEX + 2, int(SEEY / 2) + SEEY)); + rn = rng(0, stair_points.size() - 1); + ter_set(stair_points[rn].x, stair_points[rn].y, t_stairs_down); + } + + break; + + case 2: // tic-tac-toe # layout + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < lw || i > SEEX * 2 - 1 - rw || i == SEEX - 4 || i == SEEX + 3) { + ter_set(i, j, t_concrete_v); + } else if (j < lw || j > SEEY * 2 - 1 - bw || j == SEEY - 4 || j == SEEY + 3) { + ter_set(i, j, t_concrete_h); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + if (t_above == "lab_stairs" || t_above == "ice_lab_stairs") { + ter_set(SEEX - 1, SEEY - 1, t_stairs_up); + ter_set(SEEX , SEEY - 1, t_stairs_up); + ter_set(SEEX - 1, SEEY , t_stairs_up); + ter_set(SEEX , SEEY , t_stairs_up); + } + ter_set(SEEX - rng(0, 1), SEEY - 4, t_door_metal_c); + ter_set(SEEX - rng(0, 1), SEEY + 3, t_door_metal_c); + ter_set(SEEX - 4, SEEY + rng(0, 1), t_door_metal_c); + ter_set(SEEX + 3, SEEY + rng(0, 1), t_door_metal_c); + ter_set(SEEX - 4, int(SEEY / 2), t_door_metal_c); + ter_set(SEEX + 3, int(SEEY / 2), t_door_metal_c); + ter_set(int(SEEX / 2), SEEY - 4, t_door_metal_c); + ter_set(int(SEEX / 2), SEEY + 3, t_door_metal_c); + ter_set(SEEX + int(SEEX / 2), SEEY - 4, t_door_metal_c); + ter_set(SEEX + int(SEEX / 2), SEEY + 3, t_door_metal_c); + ter_set(SEEX - 4, SEEY + int(SEEY / 2), t_door_metal_c); + ter_set(SEEX + 3, SEEY + int(SEEY / 2), t_door_metal_c); + science_room(this, lw, tw, SEEX - 5, SEEY - 5, rng(1, 2)); + science_room(this, SEEX - 3, tw, SEEX + 2, SEEY - 5, 2); + science_room(this, SEEX + 4, tw, SEEX * 2 - 1 - rw, SEEY - 5, rng(2, 3)); + science_room(this, lw, SEEY - 3, SEEX - 5, SEEY + 2, 1); + science_room(this, SEEX + 4, SEEY - 3, SEEX * 2 - 1 - rw, SEEY + 2, 3); + science_room(this, lw, SEEY + 4, SEEX - 5, SEEY * 2 - 1 - bw, rng(0, 1)); + science_room(this, SEEX - 3, SEEY + 4, SEEX + 2, SEEY * 2 - 1 - bw, 0); + science_room(this, SEEX + 4, SEEX + 4, SEEX * 2 - 1 - rw, SEEY * 2 - 1 - bw, 3 * rng(0, 1)); + if (rw == 1) { + ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); + ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); + } + if (bw == 1) { + ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); + ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); + } + if (terrain_type == "lab_stairs" || terrain_type == "ice_lab_stairs") { + ter_set(SEEX - 3 + 5 * rng(0, 1), SEEY - 3 + 5 * rng(0, 1), t_stairs_down); + } + break; + + case 3: // Big room + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < lw || i >= SEEX * 2 - 1 - rw) { + ter_set(i, j, t_concrete_v); + } else if (j < tw || j >= SEEY * 2 - 1 - bw) { + ter_set(i, j, t_concrete_h); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + science_room(this, lw, tw, SEEX * 2 - 1 - rw, SEEY * 2 - 1 - bw, rng(0, 3)); + if (t_above == "lab_stairs" || t_above == "ice_lab_stairs") { + int sx, sy; + do { + sx = rng(lw, SEEX * 2 - 1 - rw); + sy = rng(tw, SEEY * 2 - 1 - bw); + } while (ter(sx, sy) != t_rock_floor); + ter_set(sx, sy, t_stairs_up); + } + if (rw == 1) { + ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); + ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); + } + if (bw == 1) { + ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); + ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); + } + if (terrain_type == "lab_stairs" || terrain_type == "ice_lab_stairs") { + int sx, sy; + do { + sx = rng(lw, SEEX * 2 - 1 - rw); + sy = rng(tw, SEEY * 2 - 1 - bw); + } while (ter(sx, sy) != t_rock_floor); + ter_set(sx, sy, t_stairs_down); + } + break; + + case 4: // alien containment + fill_background(this, t_rock_floor); + if (one_in(4)) { + mapf::formatted_set_simple(this, 0, 0, + "\ +.....|..|.....|........|\n\ +.....|6.|.....|..cxcC..|\n\ +.....g..g.....g.......l|\n\ +.....g..g.....g.......l|\n\ +.....D..g.....|.......S|\n\ +-----|..|.....|-GG+-GG-|\n\ +.....D..g..............|\n\ +.....g..g..............|\n\ +.....g..g..............|\n\ +.....|..|-GGGG-|.......|\n\ +----||+-|,,,,,,|.......|\n\ +....+...D,,,,,,g.......+\n\ +....|-G-|,,,,,,g.......+\n\ +........|,,,,,,|.......|\n\ +........|-GGGG-|.......|\n\ +.......................|\n\ +.........cxc6cc........|\n\ +.........ch.h.c........|\n\ +.......................|\n\ +.ccxcc............ccxcc|\n\ +.c.h.c............c.h.c|\n\ +.......................|\n\ +.......................|\n\ +-----------++----------|\n", + mapf::basic_bind("l A r d C h 6 x g G , . - | + D t c S", t_rock_floor, t_floor, t_rock_floor, + t_rock_floor, t_centrifuge, t_rock_floor, t_console, t_console_broken, t_reinforced_glass_v, + t_reinforced_glass_h, t_floor_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, + t_door_metal_locked, t_rock_floor, t_rock_floor, t_rock_floor), + mapf::basic_bind("l A r d C h 6 x g G , . - | + D t c S", f_locker, f_crate_c, f_rack, + f_desk, f_null, f_chair, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null , + f_table, f_counter, f_sink)); + add_trap(19, 3, tr_dissector); + if (one_in(3)) { + add_spawn("mon_mi_go", 1, 12, 12); + } else { + add_spawn("mon_zombie_brute", 1 , 12, 12); + } + if (one_in(3)) { + add_spawn("mon_kreck", 1, 2, 2); + } + if (one_in(3)) { + add_spawn("mon_crawler", 1, 2, 7); + } + if (one_in(2)) { + add_spawn("mon_zombie_scientist", rng(1, 3), 12, 18); + } + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_counter) { + place_items("office", 30, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("science", 60, i, j, i, j, false, 0); + } + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + if (one_in(500) && this->ter(i, j) == t_rock_floor) { + add_item(i, j, body); + } + } + } + computer *tmpcomp2 = NULL; + tmpcomp2 = add_computer(6, 1, _("Containment Terminal"), 4); + tmpcomp2->add_option(_("EMERGENCY CONTAINMENT UNLOCK"), COMPACT_UNLOCK, 4); + tmpcomp = add_computer(12, 16, _("Containment Control"), 4); + tmpcomp->add_option(_("EMERGENCY CONTAINMENT UNLOCK"), COMPACT_UNLOCK, 4); + tmpcomp->add_option(_("EMERGENCY CLEANSE"), COMPACT_DISCONNECT, 7); + } else if (one_in(3)) { //operations or utility + mapf::formatted_set_simple(this, 0, 0, + "\ +.....|...........f.....|\n\ +.lll.|...........f.rrrr|\n\ +.....+...........H.....|\n\ +.ll..|...........fAA..r|\n\ +-----|FFFF|---|..fAA..r|\n\ +.....f....|...|..f....r|\n\ +.pSp.f.PP.|.&.|..fAA..A|\n\ +.pSp.f.PP.|.x.|..fAA..A|\n\ +.....f.PP.|...|..f.....|\n\ +.....H....|-+-|..fFFHFF|\n\ +FFHFFf........f........|\n\ +.....f........f........+\n\ +.....fFFFHFFFFf........+\n\ +.......................|\n\ +.................|-G-G-|\n\ +-------|.........|^....|\n\ +AA..A..D.........+.....|\n\ +AA.....D.........|..ddd|\n\ +AAA....D.........g..dh.|\n\ +-------|M........g.....|\n\ +A.AA...D.........g.....|\n\ +A......D.........|dh...|\n\ +.A.AA..D.........|dxd.^|\n\ +-------|---++----|-----|\n", + mapf::basic_bind("M D & P S p l H O f F A r d C h 6 x g G , . - | + D t c ^", + t_gates_control_concrete, t_door_metal_locked, t_radio_tower, t_generator_broken, t_sewage_pump, + t_sewage_pipe, t_floor, t_chaingate_c, t_column, t_chainfence_v, t_chainfence_h, t_floor, + t_floor, t_floor, t_centrifuge, t_null, t_console, t_console_broken, t_wall_glass_v, + t_wall_glass_h, t_rock_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, + t_door_metal_locked, t_floor, t_floor, t_floor), + mapf::basic_bind("M D & P S p l H O f F A r d C h 6 x g G , . - | + D t c ^", f_null, + f_null, f_null, f_null, f_null, f_null, f_locker, + f_null, f_null, f_null, f_null, f_crate_c, f_rack, f_desk, f_null, + f_chair, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_table, f_counter, + f_indoor_plant)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_crate_c) { + if (one_in(2)) { + place_items("robots", 60, i, j, i, j, false, 0); + } else if (one_in(2)) { + place_items("science", 60, i, j, i, j, false, 0); + } else { + place_items("sewage_plant", 30, i, j, i, j, false, 0); + } + } else if (this->furn(i, j) == f_locker) { + place_items("cleaning", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_rack) { + place_items("mine_equipment", 30, i, j, i, j, false, 0); + } + if (one_in(500) && this->ter(i, j) == t_rock_floor) { + add_spawn("mon_zombie", 1, i, j); + } + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + if (one_in(500) && this->ter(i, j) == t_rock_floor) { + add_item(i, j, body); + } + } + } + } else if (one_in(2)) { //tribute + mapf::formatted_set_simple(this, 0, 0, + "\ +%%%%%%%%%|....|%%%%%%%%|\n\ +%|-|-|%%%|....|%%%|-|--|\n\ +%|T|T|---|....|---|T|.T|\n\ +%|.|.|EEE+....+EEE|.|..|\n\ +%|=|=|EEE+....+EEE|=|=-|\n\ +%|...|EEe|....|eEE|....|\n\ +%|...|---|....|---|....|\n\ +%|...+............+....|\n\ +%|ScS|............|cScS|\n\ +-|---|............|----|\n\ +.......................|\n\ +.......................+\n\ +.................w.....+\n\ +................www....|\n\ +--GGG+GG-|....|-GGGGGG-|\n\ +ff.......|....|WWWWWWWW|\n\ +...htth..g....gWWWWWWWl|\n\ +...htth..g....gWWWcWWWl|\n\ +.........+....DWWWcWWWW|\n\ +.........g....gWWWCWWWW|\n\ +...htth..g....gWWWcWWWW|\n\ +...htth..g....gWWWWWWhd|\n\ +........^|....|rrrWWdxd|\n\ +---------|-++-|--------|\n", + mapf::basic_bind("D l H O f A r d C h 6 x g G , . - | + D t c ^ w W e E % T S =", + t_door_metal_locked, t_floor, t_chaingate_c, t_column, t_floor, t_floor, t_floor, t_floor, + t_centrifuge, t_floor, t_console, t_console_broken, t_reinforced_glass_v, t_reinforced_glass_h, + t_rock_blue, t_rock_floor, t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_floor, + t_floor, t_floor, t_water_sh, t_water_dp, t_elevator_control_off, t_elevator, t_rock, + t_floor, t_floor, t_door_c), + mapf::basic_bind("D l H O f A r d C h 6 x g G , . - | + D t c ^ w W e E % T S =", f_null, + f_locker, f_null, f_null, f_fridge, f_crate_c, f_rack, f_desk, f_null, f_chair, + f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_table, f_counter, f_indoor_plant, + f_null, f_null, f_null, f_null, f_null, f_toilet, f_sink, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("science", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 50, i, j, i, j, false, 0); + } + if (one_in(500) && this->ter(i, j) == t_rock_floor) { + add_spawn("mon_zombie", 1, i, j); + } + } + } + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(17, 15, body); + add_item(8, 3, body); + add_item(10, 3, body); + spawn_item(18, 15, "ax"); + } + + else { //analyzer + mapf::formatted_set_simple(this, 0, 0, + "\ +.......................|\n\ +.......................|\n\ +.......................|\n\ +.......................|\n\ +....|-GGGGGGGGGGG-|....|\n\ +....|.............|....|\n\ +....g.....&.&.....g....|\n\ +....g......,......g....|\n\ +....g.....&6&.....g....|\n\ +....g.............g....|\n\ +....grrr.rrrrr.rrrg....|\n\ +....gcxc..cxc..cxcg....+\n\ +....gch....h....hcg....+\n\ +....|.............|....|\n\ +....|-+|..cxc..|+-|....|\n\ +....+..g...h...g..+....|\n\ +....g..g.......g..g....|\n\ +....|..|.......|..|....|\n\ +....|-G|GGGGGGG|G-|....|\n\ +.......................|\n\ +.......................|\n\ +.......................|\n\ +.......................|\n\ +-----------++----------|\n", + mapf::basic_bind("r d h 6 x g G , . - | + D t c ^ % = &", t_railing_h, t_rock_floor, t_rock_floor, + t_console, t_console_broken, t_wall_glass_v, t_wall_glass_h, t_floor_blue, t_rock_floor, + t_concrete_h, t_concrete_v, t_door_metal_c, t_door_metal_locked, t_rock_floor, t_rock_floor, + t_floor, t_rock, t_door_c, t_radio_tower), + mapf::basic_bind("r d h 6 x g G , . - | + D t c ^ % = &", f_null, f_desk, f_chair, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_table, f_counter, f_indoor_plant, + f_null, f_null, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_counter) { + place_items("cubical_office", 30, i, j, i, j, false, 0); + } + if (one_in(500) && this->ter(i, j) == t_rock_floor) { + add_spawn("mon_zombie", 1, i, j); + } + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + if (one_in(400) && this->ter(i, j) == t_rock_floor) { + add_item(i, j, body); + } + } + } + tmpcomp = add_computer(11, 8, _("Mk IV Algorithmic Data Analyzer"), 4); + tmpcomp->add_option(_("Run Decryption Algorithm"), COMPACT_DATA_ANAL, 4); + tmpcomp->add_option(_("Upload Data to Melchior"), COMPACT_DISCONNECT, 7); + tmpcomp->add_option(_("Access Melchior"), COMPACT_DISCONNECT, 12); + tmpcomp->add_failure(COMPFAIL_DESTROY_DATA); + } + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < lw || i >= SEEX * 2 - rw + 1) { + ter_set(i, j, t_concrete_v); + } else if (j < (tw - 1) || j >= SEEY * 2 - bw + 1) { + ter_set(i, j, t_concrete_h); + } + } + } + if (t_above == "lab_stairs" || t_above == "ice_lab_stairs") { + int sx, sy; + do { + sx = rng(lw, SEEX * 2 - 1 - rw); + sy = rng(tw, SEEY * 2 - 1 - bw); + } while (ter(sx, sy) != t_rock_floor); + ter_set(sx, sy, t_stairs_up); + } + if (terrain_type == "lab_stairs" || terrain_type == "ice_lab_stairs") { + int sx, sy; + do { + sx = rng(lw, SEEX * 2 - 1 - rw); + sy = rng(tw, SEEY * 2 - 1 - bw); + } while (ter(sx, sy) != t_rock_floor); + ter_set(sx, sy, t_stairs_down); + } + break; + + } + } + // Ants will totally wreck up the place + tw = 0; + rw = 0; + bw = 0; + lw = 0; + if (is_ot_type("ants", t_north) && connects_to(t_north, 2)) { + tw = SEEY; + } + if (is_ot_type("ants", t_east) && connects_to(t_east, 3)) { + rw = SEEX; + } + if (is_ot_type("ants", t_south) && connects_to(t_south, 0)) { + bw = SEEY + 1; + } + if (is_ot_type("ants", t_west) && connects_to(t_west, 1)) { + lw = SEEX + 1; + } + if (tw != 0 || rw != 0 || bw != 0 || lw != 0) { + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i < SEEX * 2 - lw && (!one_in(3) || (j > SEEY - 6 && j < SEEY + 5))) || + (i > rw && (!one_in(3) || (j > SEEY - 6 && j < SEEY + 5))) || + (j > tw && (!one_in(3) || (i > SEEX - 6 && i < SEEX + 5))) || + (j < SEEY * 2 - bw && (!one_in(3) || (i > SEEX - 6 && i < SEEX + 5)))) { + if (one_in(5)) { + ter_set(i, j, t_rubble); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + } + } + + // Slimes pretty much wreck up the place, too, but only underground + tw = (t_north == "slimepit" ? SEEY : 0); + rw = (t_east == "slimepit" ? SEEX + 1 : 0); + bw = (t_south == "slimepit" ? SEEY + 1 : 0); + lw = (t_west == "slimepit" ? SEEX : 0); + if (tw != 0 || rw != 0 || bw != 0 || lw != 0) { + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (((j <= tw || i >= rw) && i >= j && (SEEX * 2 - 1 - i) <= j) || + ((j >= bw || i <= lw) && i <= j && (SEEY * 2 - 1 - j) <= i) ) { + if (one_in(5)) { + ter_set(i, j, t_rubble); + } else if (!one_in(5)) { + ter_set(i, j, t_slime); + } + } + } + } + } + + + } else if (terrain_type == "lab_finale" || + terrain_type == "ice_lab_finale") { + + if (is_ot_type("ice_lab", terrain_type)) { + ice_lab = true; + } else { + ice_lab = false; + } + + if ( ice_lab ) { + int temperature = -20 + 30 * (g->levz); + set_temperature(x, y, temperature); + + tw = is_ot_type("ice_lab", t_north) ? 0 : 2; + rw = is_ot_type("ice_lab", t_east) ? 1 : 2; + bw = is_ot_type("ice_lab", t_south) ? 1 : 2; + lw = is_ot_type("ice_lab", t_west) ? 0 : 2; + } else { + tw = is_ot_type("lab", t_north) ? 0 : 2; + rw = is_ot_type("lab", t_east) ? 1 : 2; + bw = is_ot_type("lab", t_south) ? 1 : 2; + lw = is_ot_type("lab", t_west) ? 0 : 2; + } + + // Start by setting up a large, empty room. + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < lw || i > SEEX * 2 - 1 - rw) { + ter_set(i, j, t_concrete_v); + } else if (j < tw || j > SEEY * 2 - 1 - bw) { + ter_set(i, j, t_concrete_h); + } else { + ter_set(i, j, t_floor); + } + } + } + if (rw == 1) { + ter_set(SEEX * 2 - 1, SEEY - 1, t_door_metal_c); + ter_set(SEEX * 2 - 1, SEEY , t_door_metal_c); + } + if (bw == 1) { + ter_set(SEEX - 1, SEEY * 2 - 1, t_door_metal_c); + ter_set(SEEX , SEEY * 2 - 1, t_door_metal_c); + } + + switch (rng(1, 3)) { + case 1: // Weapons testing + add_spawn("mon_secubot", 1, 6, 6); + add_spawn("mon_secubot", 1, SEEX * 2 - 7, 6); + add_spawn("mon_secubot", 1, 6, SEEY * 2 - 7); + add_spawn("mon_secubot", 1, SEEX * 2 - 7, SEEY * 2 - 7); + add_trap(SEEX - 2, SEEY - 2, tr_dissector); + add_trap(SEEX + 1, SEEY - 2, tr_dissector); + add_trap(SEEX - 2, SEEY + 1, tr_dissector); + add_trap(SEEX + 1, SEEY + 1, tr_dissector); + if (!one_in(3)) { + rn = dice(4, 3); + spawn_item(SEEX - 1, SEEY - 1, "laser_pack", rn); + spawn_item(SEEX + 1, SEEY - 1, "UPS_off", rn); + spawn_item(SEEX - 1, SEEY , "v29"); + spawn_item(SEEX + 1, SEEY , "ftk93"); + } else if (!one_in(3)) { + rn = dice(3, 6); + spawn_item(SEEX - 1, SEEY - 1, "mininuke", rn); + spawn_item(SEEX , SEEY - 1, "mininuke", rn); + spawn_item(SEEX - 1, SEEY , "mininuke", rn); + spawn_item(SEEX , SEEY , "mininuke", rn); + } else { + furn_set(SEEX - 2, SEEY - 1, f_rack); + furn_set(SEEX - 1, SEEY - 1, f_rack); + furn_set(SEEX , SEEY - 1, f_rack); + furn_set(SEEX + 1, SEEY - 1, f_rack); + furn_set(SEEX - 2, SEEY , f_rack); + furn_set(SEEX - 1, SEEY , f_rack); + furn_set(SEEX , SEEY , f_rack); + furn_set(SEEX + 1, SEEY , f_rack); + place_items("ammo", 96, SEEX - 2, SEEY - 1, SEEX + 1, SEEY - 1, false, 0); + place_items("allguns", 96, SEEX - 2, SEEY, SEEX + 1, SEEY, false, 0); + } + break; + + case 2: { // Netherworld access + if (!one_in(4)) { // Trapped netherworld monsters + std::string nethercreatures[10] = {"mon_flying_polyp", "mon_hunting_horror", "mon_mi_go", "mon_yugg", "mon_gelatin", + "mon_flaming_eye", "mon_kreck", "mon_gracke", "mon_blank", "mon_gozu" + }; + tw = rng(SEEY + 3, SEEY + 5); + bw = tw + 4; + lw = rng(SEEX - 6, SEEX - 2); + rw = lw + 6; + for (int i = lw; i <= rw; i++) { + for (int j = tw; j <= bw; j++) { + if (j == tw || j == bw) { + if ((i - lw) % 2 == 0) { + ter_set(i, j, t_concrete_h); + } else { + ter_set(i, j, t_reinforced_glass_h); + } + } else if ((i - lw) % 2 == 0) { + ter_set(i, j, t_concrete_v); + } else if (j == tw + 2) { + ter_set(i, j, t_concrete_h); + } else { // Empty space holds monsters! + std::string type = nethercreatures[(rng(0, 9))]; + add_spawn(type, 1, i, j); + } + } + } + } + tmpcomp = add_computer(SEEX, 8, _("Sub-prime contact console"), 7); + tmpcomp->add_option(_("Terminate Specimens"), COMPACT_TERMINATE, 2); + tmpcomp->add_option(_("Release Specimens"), COMPACT_RELEASE, 3); + tmpcomp->add_option(_("Toggle Portal"), COMPACT_PORTAL, 8); + tmpcomp->add_option(_("Activate Resonance Cascade"), COMPACT_CASCADE, 10); + tmpcomp->add_failure(COMPFAIL_MANHACKS); + tmpcomp->add_failure(COMPFAIL_SECUBOTS); + ter_set(SEEX - 2, 4, t_radio_tower); + ter_set(SEEX + 1, 4, t_radio_tower); + ter_set(SEEX - 2, 7, t_radio_tower); + ter_set(SEEX + 1, 7, t_radio_tower); + } + break; + + case 3: // Bionics + add_spawn("mon_secubot", 1, 6, 6); + add_spawn("mon_secubot", 1, SEEX * 2 - 7, 6); + add_spawn("mon_secubot", 1, 6, SEEY * 2 - 7); + add_spawn("mon_secubot", 1, SEEX * 2 - 7, SEEY * 2 - 7); + add_trap(SEEX - 2, SEEY - 2, tr_dissector); + add_trap(SEEX + 1, SEEY - 2, tr_dissector); + add_trap(SEEX - 2, SEEY + 1, tr_dissector); + add_trap(SEEX + 1, SEEY + 1, tr_dissector); + square_furn(this, f_counter, SEEX - 1, SEEY - 1, SEEX, SEEY); + int item_count = 0; + while (item_count < 5) { + item_count += place_items("bionics", 75, SEEX - 1, SEEY - 1, SEEX, SEEY, false, 0); + } + line(this, t_reinforced_glass_h, SEEX - 2, SEEY - 2, SEEX + 1, SEEY - 2); + line(this, t_reinforced_glass_h, SEEX - 2, SEEY + 1, SEEX + 1, SEEY + 1); + line(this, t_reinforced_glass_v, SEEX - 2, SEEY - 1, SEEX - 2, SEEY); + line(this, t_reinforced_glass_v, SEEX + 1, SEEY - 1, SEEX + 1, SEEY); + ter_set(SEEX - 3, SEEY - 3, t_console); + tmpcomp = add_computer(SEEX - 3, SEEY - 3, _("Bionic access"), 3); + tmpcomp->add_option(_("Manifest"), COMPACT_LIST_BIONICS, 0); + tmpcomp->add_option(_("Open Chambers"), COMPACT_RELEASE, 5); + tmpcomp->add_failure(COMPFAIL_MANHACKS); + tmpcomp->add_failure(COMPFAIL_SECUBOTS); + break; + } + + + } else if (terrain_type == "bunker") { + + if (t_above == "") { // We're on ground level + fill_background(this, &grass_or_dirt); + //chainlink fence that surrounds bunker + line(this, t_chainfence_v, 1, 1, 1, SEEY * 2 - 1); + line(this, t_chainfence_v, SEEX * 2 - 1, 1, SEEX * 2 - 1, SEEY * 2 - 1); + line(this, t_chainfence_h, 1, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); + line(this, t_chainfence_h, 1, 1, SEEX * 2 - 1, 1); + line(this, t_chaingate_l, SEEX - 3, SEEY * 2 - 1, SEEX + 2, SEEY * 2 - 1); + line(this, t_chaingate_l, 1, SEEY * 2 - 2, 1, SEEY * 2 - 7); + line(this, t_chaingate_l, SEEX * 2 - 1, SEEY * 2 - 2, SEEX * 2 - 1, SEEY * 2 - 7); + //watch cabin + //line(this, t_concrete_h, SEEX-6, SEEY*2-4, SEEX-4, SEEY*2-4); + ter_set(2, 13, t_concrete_h); + ter_set(4, 13, t_concrete_h); + ter_set(3, 13, t_door_c); + ter_set(4, 14, t_concrete_v); + ter_set(4, 15, t_concrete_v); + ter_set(1, 13, t_concrete_h); + ter_set(3, 15, t_window); + ter_set(2, 15, t_window); + ter_set(1, 14, t_reinforced_glass_v); + ter_set(1, 15, t_reinforced_glass_v); + ter_set(2, 14, t_floor); + ter_set(3, 14, t_floor); + furn_set(2, 14, f_table); + //watch cabin 2 + ter_set(SEEX * 2 - 2, 13, t_concrete_h); + ter_set(SEEX * 2 - 4, 13, t_concrete_h); + ter_set(SEEX * 2 - 3, 13, t_door_c); + ter_set(SEEX * 2 - 4, 14, t_concrete_v); + ter_set(SEEX * 2 - 4, 15, t_concrete_v); + ter_set(SEEX * 2 - 1, 13, t_concrete_h); + ter_set(SEEX * 2 - 3, 15, t_window); + ter_set(SEEX * 2 - 2, 15, t_window); + ter_set(SEEX * 2 - 1, 14, t_reinforced_glass_v); + ter_set(SEEX * 2 - 1, 15, t_reinforced_glass_v); + ter_set(SEEX * 2 - 2, 14, t_floor); + ter_set(SEEX * 2 - 3, 14, t_floor); + furn_set(SEEX * 2 - 2, 14, f_table); + line(this, t_wall_metal_h, 7, 7, 16, 7); + line(this, t_wall_metal_h, 8, 8, 15, 8); + line(this, t_wall_metal_h, 8, 15, 15, 15); + line(this, t_wall_metal_h, 7, 16, 10, 16); + line(this, t_wall_metal_h, 14, 16, 16, 16); + line(this, t_wall_metal_v, 7, 8, 7, 15); + line(this, t_wall_metal_v, 16, 8, 16, 15); + line(this, t_wall_metal_v, 8, 9, 8, 14); + line(this, t_wall_metal_v, 15, 9, 15, 14); + square(this, t_floor, 9, 10, 14, 14); + line(this, t_stairs_down, 11, 9, 12, 9); + line(this, t_door_metal_locked, 11, 15, 12, 15); + for (int i = 9; i <= 13; i += 2) { + line(this, t_wall_metal_h, 9, i, 10, i); + line(this, t_wall_metal_h, 13, i, 14, i); + add_spawn("mon_turret", 1, 9, i + 1); + add_spawn("mon_turret", 1, 14, i + 1); + } + ter_set(13, 16, t_card_military); + } else { // Below ground! + + fill_background(this, t_rock); + square(this, t_floor, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2); + line(this, t_wall_metal_h, 2, 8, 8, 8); + line(this, t_wall_metal_h, 15, 8, 21, 8); + line(this, t_wall_metal_h, 2, 15, 8, 15); + line(this, t_wall_metal_h, 15, 15, 21, 15); + for (int j = 2; j <= 16; j += 7) { + ter_set( 9, j , t_card_military); + ter_set(14, j , t_card_military); + ter_set( 9, j + 1, t_door_metal_locked); + ter_set(14, j + 1, t_door_metal_locked); + line(this, t_reinforced_glass_v, 9, j + 2, 9, j + 4); + line(this, t_reinforced_glass_v, 14, j + 2, 14, j + 4); + line(this, t_wall_metal_v, 9, j + 5, 9, j + 6); + line(this, t_wall_metal_v, 14, j + 5, 14, j + 6); + + // Fill rooms with items! + for (int i = 2; i <= 15; i += 13) { + items_location goods; + int size = 0; + switch (rng(1, 14)) { + case 1: + case 2: + goods = "bots"; + size = 85; + break; + case 3: + case 4: + goods = "launchers"; + size = 83; + break; + case 5: + case 6: + goods = "mil_rifles"; + size = 87; + break; + case 7: + case 8: + goods = "grenades"; + size = 88; + break; + case 9: + case 10: + goods = "mil_armor"; + size = 85; + break; + case 11: + case 12: + case 13: + goods = "mil_food"; + size = 90; + break; + case 14: + goods = "bionics_mil"; + size = 78; + break; + } + place_items(goods, size, i, j, i + 6, j + 5, false, 0); + } + } + line(this, t_wall_metal_h, 1, 1, SEEX * 2 - 2, 1); + line(this, t_wall_metal_h, 1, SEEY * 2 - 2, SEEX * 2 - 2, SEEY * 2 - 2); + line(this, t_wall_metal_v, 1, 2, 1, SEEY * 2 - 3); + line(this, t_wall_metal_v, SEEX * 2 - 2, 2, SEEX * 2 - 2, SEEY * 2 - 3); + ter_set(SEEX - 1, 21, t_stairs_up); + ter_set(SEEX, 21, t_stairs_up); + } + + + } else if (terrain_type == "outpost") { + + fill_background(this, &grass_or_dirt); + + square(this, t_dirt, 3, 3, 20, 20); + line(this, t_chainfence_h, 2, 2, 10, 2); + line(this, t_chainfence_h, 13, 2, 21, 2); + line(this, t_chaingate_l, 11, 2, 12, 2); + line(this, t_chainfence_h, 2, 21, 10, 21); + line(this, t_chainfence_h, 13, 21, 21, 21); + line(this, t_chaingate_l, 11, 21, 12, 21); + line(this, t_chainfence_v, 2, 3, 2, 10); + line(this, t_chainfence_v, 21, 3, 21, 10); + line(this, t_chaingate_l, 2, 11, 2, 12); + line(this, t_chainfence_v, 2, 13, 2, 20); + line(this, t_chainfence_v, 21, 13, 21, 20); + line(this, t_chaingate_l, 21, 11, 21, 12); + // Place some random buildings + + bool okay = true; + while (okay) { + int buildx = rng(6, 17), buildy = rng(6, 17); + int buildwidthmax = (buildx <= 11 ? buildx - 3 : 20 - buildx), + buildheightmax = (buildy <= 11 ? buildy - 3 : 20 - buildy); + int buildwidth = rng(3, buildwidthmax), buildheight = rng(3, buildheightmax); + if (ter(buildx, buildy) != t_dirt) { + okay = false; + } else { + int bx1 = buildx - buildwidth, bx2 = buildx + buildwidth, + by1 = buildy - buildheight, by2 = buildy + buildheight; + square(this, t_floor, bx1, by1, bx2, by2); + line(this, t_concrete_h, bx1, by1, bx2, by1); + line(this, t_concrete_h, bx1, by2, bx2, by2); + line(this, t_concrete_v, bx1, by1, bx1, by2); + line(this, t_concrete_v, bx2, by1, bx2, by2); + switch (rng(1, 3)) { // What type of building? + case 1: // Barracks + for (int i = by1 + 1; i <= by2 - 1; i += 2) { + line_furn(this, f_bed, bx1 + 1, i, bx1 + 2, i); + line_furn(this, f_bed, bx2 - 2, i, bx2 - 1, i); + } + place_items("bedroom", 84, bx1 + 1, by1 + 1, bx2 - 1, by2 - 1, false, 0); + break; + case 2: // Armory + line_furn(this, f_counter, bx1 + 1, by1 + 1, bx2 - 1, by1 + 1); + line_furn(this, f_counter, bx1 + 1, by2 - 1, bx2 - 1, by2 - 1); + line_furn(this, f_counter, bx1 + 1, by1 + 2, bx1 + 1, by2 - 2); + line_furn(this, f_counter, bx2 - 1, by1 + 2, bx2 - 1, by2 - 2); + place_items("mil_rifles", 40, bx1 + 1, by1 + 1, bx2 - 1, by1 + 1, false, 0); + place_items("launchers", 40, bx1 + 1, by2 - 1, bx2 - 1, by2 - 1, false, 0); + place_items("grenades", 40, bx1 + 1, by1 + 2, bx1 + 1, by2 - 2, false, 0); + place_items("mil_armor", 40, bx2 - 1, by1 + 2, bx2 - 1, by2 - 2, false, 0); + break; + case 3: // Supplies + for (int i = by1 + 1; i <= by2 - 1; i += 3) { + line_furn(this, f_rack, bx1 + 2, i, bx2 - 2, i); + place_items("mil_food", 78, bx1 + 2, i, bx2 - 2, i, false, 0); + } + break; + } + std::vector doorsides; + if (bx1 > 3) { + doorsides.push_back(WEST); + } + if (bx2 < 20) { + doorsides.push_back(EAST); + } + if (by1 > 3) { + doorsides.push_back(NORTH); + } + if (by2 < 20) { + doorsides.push_back(SOUTH); + } + int doorx = 0, doory = 0; + switch (doorsides[rng(0, doorsides.size() - 1)]) { + case WEST: + doorx = bx1; + doory = rng(by1 + 1, by2 - 1); + break; + case EAST: + doorx = bx2; + doory = rng(by1 + 1, by2 - 1); + break; + case NORTH: + doorx = rng(bx1 + 1, bx2 - 1); + doory = by1; + break; + case SOUTH: + doorx = rng(bx1 + 1, bx2 - 1); + doory = by2; + break; + default: + break; + } + for (int i = doorx - 1; i <= doorx + 1; i++) { + for (int j = doory - 1; j <= doory + 1; j++) { + i_clear(i, j); + if (furn(i, j) == f_bed || furn(i, j) == f_rack || furn(i, j) == f_counter) { + set(i, j, t_floor, f_null); + } + } + } + ter_set(doorx, doory, t_door_c); + } + } + // Seal up the entrances if there's walls there + if (ter(11, 3) != t_dirt) { + ter_set(11, 2, t_concrete_h); + } + if (ter(12, 3) != t_dirt) { + ter_set(12, 2, t_concrete_h); + } + + if (ter(11, 20) != t_dirt) { + ter_set(11, 2, t_concrete_h); + } + if (ter(12, 20) != t_dirt) { + ter_set(12, 2, t_concrete_h); + } + + if (ter( 3, 11) != t_dirt) { + ter_set( 2, 11, t_concrete_v); + } + if (ter( 3, 12) != t_dirt) { + ter_set( 2, 12, t_concrete_v); + } + + if (ter( 3, 11) != t_dirt) { + ter_set( 2, 11, t_concrete_v); + } + if (ter( 3, 12) != t_dirt) { + ter_set( 2, 12, t_concrete_v); + } + + // Place turrets by (possible) entrances + add_spawn("mon_turret", 1, 3, 11); + add_spawn("mon_turret", 1, 3, 12); + add_spawn("mon_turret", 1, 20, 11); + add_spawn("mon_turret", 1, 20, 12); + add_spawn("mon_turret", 1, 11, 3); + add_spawn("mon_turret", 1, 12, 3); + add_spawn("mon_turret", 1, 11, 20); + add_spawn("mon_turret", 1, 12, 20); + + // Finally, scatter dead bodies / mil zombies + for (int i = 0; i < 20; i++) { + int rnx = rng(3, 20), rny = rng(3, 20); + if (move_cost(rnx, rny) != 0) { + if (one_in(5)) { // Military zombie + add_spawn("mon_zombie_soldier", 1, rnx, rny); + } else if (one_in(2)) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(rnx, rny, body); + place_items("launchers", 10, rnx, rny, rnx, rny, true, 0); + place_items("mil_rifles", 30, rnx, rny, rnx, rny, true, 0); + place_items("mil_armor", 70, rnx, rny, rnx, rny, true, 0); + place_items("mil_food", 40, rnx, rny, rnx, rny, true, 0); + spawn_item(rnx, rny, "id_military"); + } else if (one_in(20)) { + rough_circle(this, t_rubble, rnx, rny, rng(3, 6)); + } + } + } + // Oh wait--let's also put radiation in any rubble + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + radiation(i, j) += (one_in(5) ? rng(1, 2) : 0); + if (ter(i, j) == t_rubble) { + radiation(i, j) += rng(1, 3); + } + } + } + + + } else if (terrain_type == "silo") { + + if (t_above == "") { // We're on ground level + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (trig_dist(i, j, SEEX, SEEY) <= 6) { + ter_set(i, j, t_metal_floor); + } else { + ter_set(i, j, grass_or_dirt()); + } + } + } + switch (rng(1, 4)) { // Placement of stairs + case 1: + lw = 3; + mw = 5; + tw = 3; + break; + case 2: + lw = 3; + mw = 5; + tw = SEEY * 2 - 4; + break; + case 3: + lw = SEEX * 2 - 7; + mw = lw; + tw = 3; + break; + case 4: + lw = SEEX * 2 - 7; + mw = lw; + tw = SEEY * 2 - 4; + break; + } + for (int i = lw; i <= lw + 2; i++) { + ter_set(i, tw , t_wall_metal_h); + ter_set(i, tw + 2, t_wall_metal_h); + } + ter_set(lw , tw + 1, t_wall_metal_v); + ter_set(lw + 1, tw + 1, t_stairs_down); + ter_set(lw + 2, tw + 1, t_wall_metal_v); + ter_set(mw , tw + 1, t_door_metal_locked); + ter_set(mw , tw + 2, t_card_military); + + } else { // We are NOT above ground. + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (trig_dist(i, j, SEEX, SEEY) > 7) { + ter_set(i, j, t_rock); + } else if (trig_dist(i, j, SEEX, SEEY) > 5) { + ter_set(i, j, t_metal_floor); + if (one_in(30)) { + add_field(NULL, i, j, fd_nuke_gas, 2); // NULL game; no messages + } + } else if (trig_dist(i, j, SEEX, SEEY) == 5) { + ter_set(i, j, t_hole); + add_trap(i, j, tr_ledge); + } else { + ter_set(i, j, t_missile); + } + } + } + silo_rooms(this); + } + + + } else if (terrain_type == "silo_finale") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i == 5) { + if (j > 4 && j < SEEY) { + ter_set(i, j, t_reinforced_glass_v); + } else if (j == SEEY * 2 - 4) { + ter_set(i, j, t_door_metal_c); + } else { + ter_set(i, j, t_rock); + } + } else { + ter_set(i, j, t_rock_floor); + } + } + } + ter_set(0, 0, t_stairs_up); + tmpcomp = add_computer(4, 5, _("Missile Controls"), 8); + tmpcomp->add_option(_("Launch Missile"), COMPACT_MISS_LAUNCH, 10); + tmpcomp->add_option(_("Disarm Missile"), COMPACT_MISS_DISARM, 8); + tmpcomp->add_failure(COMPFAIL_SECUBOTS); + tmpcomp->add_failure(COMPFAIL_DAMAGE); + + + } else if (terrain_type == "temple" || + terrain_type == "temple_stairs") { + + if (t_above == "") { // Ground floor + // TODO: More varieties? + fill_background(this, t_dirt); + square(this, t_grate, SEEX - 1, SEEY - 1, SEEX, SEEX); + ter_set(SEEX + 1, SEEY + 1, t_pedestal_temple); + } else { // Underground! Shit's about to get interesting! + // Start with all rock floor + square(this, t_rock_floor, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); + // We always start at the south and go north. + // We use (g->levx / 2 + g->levz) % 5 to guarantee that rooms don't repeat. + switch (1 + int(g->levy / 2 + g->levz) % 4) {// TODO: More varieties! + + case 1: // Flame bursts + square(this, t_rock, 0, 0, SEEX - 1, SEEY * 2 - 1); + square(this, t_rock, SEEX + 2, 0, SEEX * 2 - 1, SEEY * 2 - 1); + for (int i = 2; i < SEEY * 2 - 4; i++) { + add_field(g, SEEX , i, fd_fire_vent, rng(1, 3)); + add_field(g, SEEX + 1, i, fd_fire_vent, rng(1, 3)); + } + break; + + case 2: // Spreading water + square(this, t_water_dp, 4, 4, 5, 5); + add_spawn("mon_sewer_snake", 1, 4, 4); + + square(this, t_water_dp, SEEX * 2 - 5, 4, SEEX * 2 - 4, 6); + add_spawn("mon_sewer_snake", 1, SEEX * 2 - 5, 4); + + square(this, t_water_dp, 4, SEEY * 2 - 5, 6, SEEY * 2 - 4); + + square(this, t_water_dp, SEEX * 2 - 5, SEEY * 2 - 5, SEEX * 2 - 4, + SEEY * 2 - 4); + + square(this, t_rock, 0, SEEY * 2 - 2, SEEX - 1, SEEY * 2 - 1); + square(this, t_rock, SEEX + 2, SEEY * 2 - 2, SEEX * 2 - 1, SEEY * 2 - 1); + line(this, t_grate, SEEX, 1, SEEX + 1, 1); // To drain the water + add_trap(SEEX, SEEY * 2 - 2, tr_temple_flood); + add_trap(SEEX + 1, SEEY * 2 - 2, tr_temple_flood); + for (int y = 2; y < SEEY * 2 - 2; y++) { + for (int x = 2; x < SEEX * 2 - 2; x++) { + if (ter(x, y) == t_rock_floor && one_in(4)) { + add_trap(x, y, tr_temple_flood); + } + } + } + break; + + case 3: { // Flipping walls puzzle + line(this, t_rock, 0, 0, SEEX - 1, 0); + line(this, t_rock, SEEX + 2, 0, SEEX * 2 - 1, 0); + line(this, t_rock, SEEX - 1, 1, SEEX - 1, 6); + line(this, t_bars, SEEX + 2, 1, SEEX + 2, 6); + ter_set(14, 1, t_switch_rg); + ter_set(15, 1, t_switch_gb); + ter_set(16, 1, t_switch_rb); + ter_set(17, 1, t_switch_even); + // Start with clear floors--then work backwards to the starting state + line(this, t_floor_red, SEEX, 1, SEEX + 1, 1); + line(this, t_floor_green, SEEX, 2, SEEX + 1, 2); + line(this, t_floor_blue, SEEX, 3, SEEX + 1, 3); + line(this, t_floor_red, SEEX, 4, SEEX + 1, 4); + line(this, t_floor_green, SEEX, 5, SEEX + 1, 5); + line(this, t_floor_blue, SEEX, 6, SEEX + 1, 6); + // Now, randomly choose actions + // Set up an actions vector so that there's not undue repetion + std::vector actions; + actions.push_back(1); + actions.push_back(2); + actions.push_back(3); + actions.push_back(4); + actions.push_back(rng(1, 3)); + while (!actions.empty()) { + int index = rng(0, actions.size() - 1); + int action = actions[index]; + actions.erase(actions.begin() + index); + for (int y = 1; y < 7; y++) { + for (int x = SEEX; x <= SEEX + 1; x++) { + switch (action) { + case 1: // Toggle RG + if (ter(x, y) == t_floor_red) { + ter_set(x, y, t_rock_red); + } else if (ter(x, y) == t_rock_red) { + ter_set(x, y, t_floor_red); + } else if (ter(x, y) == t_floor_green) { + ter_set(x, y, t_rock_green); + } else if (ter(x, y) == t_rock_green) { + ter_set(x, y, t_floor_green); + } + break; + case 2: // Toggle GB + if (ter(x, y) == t_floor_blue) { + ter_set(x, y, t_rock_blue); + } else if (ter(x, y) == t_rock_blue) { + ter_set(x, y, t_floor_blue); + } else if (ter(x, y) == t_floor_green) { + ter_set(x, y, t_rock_green); + } else if (ter(x, y) == t_rock_green) { + ter_set(x, y, t_floor_green); + } + break; + case 3: // Toggle RB + if (ter(x, y) == t_floor_blue) { + ter_set(x, y, t_rock_blue); + } else if (ter(x, y) == t_rock_blue) { + ter_set(x, y, t_floor_blue); + } else if (ter(x, y) == t_floor_red) { + ter_set(x, y, t_rock_red); + } else if (ter(x, y) == t_rock_red) { + ter_set(x, y, t_floor_red); + } + break; + case 4: // Toggle Even + if (y % 2 == 0) { + if (ter(x, y) == t_floor_blue) { + ter_set(x, y, t_rock_blue); + } else if (ter(x, y) == t_rock_blue) { + ter_set(x, y, t_floor_blue); + } else if (ter(x, y) == t_floor_red) { + ter_set(x, y, t_rock_red); + } else if (ter(x, y) == t_rock_red) { + ter_set(x, y, t_floor_red); + } else if (ter(x, y) == t_floor_green) { + ter_set(x, y, t_rock_green); + } else if (ter(x, y) == t_rock_green) { + ter_set(x, y, t_floor_green); + } + } + break; + } + } + } + } + } + break; + + case 4: { // Toggling walls maze + square(this, t_rock, 0, 0, SEEX - 1, 1); + square(this, t_rock, 0, SEEY * 2 - 2, SEEX - 1, SEEY * 2 - 1); + square(this, t_rock, 0, 2, SEEX - 4, SEEY * 2 - 3); + square(this, t_rock, SEEX + 2, 0, SEEX * 2 - 1, 1); + square(this, t_rock, SEEX + 2, SEEY * 2 - 2, SEEX * 2 - 1, SEEY * 2 - 1); + square(this, t_rock, SEEX + 5, 2, SEEX * 2 - 1, SEEY * 2 - 3); + int x = rng(SEEX - 1, SEEX + 2), y = 2; + std::vector path; // Path, from end to start + while (x < SEEX - 1 || x > SEEX + 2 || y < SEEY * 2 - 2) { + path.push_back( point(x, y) ); + ter_set(x, y, ter_id( rng(t_floor_red, t_floor_blue) )); + if (y == SEEY * 2 - 2) { + if (x < SEEX - 1) { + x++; + } else if (x > SEEX + 2) { + x--; + } + } else { + std::vector next; + for (int nx = x - 1; nx <= x + 1; nx++ ) { + for (int ny = y; ny <= y + 1; ny++) { + if (ter(nx, ny) == t_rock_floor) { + next.push_back( point(nx, ny) ); + } + } + } + int index = rng(0, next.size() - 1); + x = next[index].x; + y = next[index].y; + } + } + // Now go backwards through path (start to finish), toggling any tiles that need + bool toggle_red = false, toggle_green = false, toggle_blue = false; + for (int i = path.size() - 1; i >= 0; i--) { + if (ter(path[i].x, path[i].y) == t_floor_red) { + toggle_green = !toggle_green; + if (toggle_red) { + ter_set(path[i].x, path[i].y, t_rock_red); + } + } else if (ter(path[i].x, path[i].y) == t_floor_green) { + toggle_blue = !toggle_blue; + if (toggle_green) { + ter_set(path[i].x, path[i].y, t_rock_green); + } + } else if (ter(path[i].x, path[i].y) == t_floor_blue) { + toggle_red = !toggle_red; + if (toggle_blue) { + ter_set(path[i].x, path[i].y, t_rock_blue); + } + } + } + // Finally, fill in the rest with random tiles, and place toggle traps + for (int i = SEEX - 3; i <= SEEX + 4; i++) { + for (int j = 2; j <= SEEY * 2 - 2; j++) { + add_trap(i, j, tr_temple_toggle); + if (ter(i, j) == t_rock_floor) { + ter_set(i, j, ter_id( rng(t_rock_red, t_floor_blue) )); + } + } + } + } + break; + } // Done with room type switch + // Stairs down if we need them + if (terrain_type == "temple_stairs") { + line(this, t_stairs_down, SEEX, 0, SEEX + 1, 0); + } + // Stairs at the south if t_above has stairs down. + if (t_above == "temple_stairs") { + line(this, t_stairs_up, SEEX, SEEY * 2 - 1, SEEX + 1, SEEY * 2 - 1); + } + + } // Done with underground-only stuff + + + } else if (terrain_type == "temple_finale") { + + fill_background(this, t_rock); + square(this, t_rock_floor, SEEX - 1, 1, SEEX + 2, 4); + square(this, t_rock_floor, SEEX, 5, SEEX + 1, SEEY * 2 - 1); + line(this, t_stairs_up, SEEX, SEEY * 2 - 1, SEEX + 1, SEEY * 2 - 1); + spawn_artifact(rng(SEEX, SEEX + 1), rng(2, 3), new_artifact(itypes), 0); + spawn_artifact(rng(SEEX, SEEX + 1), rng(2, 3), new_artifact(itypes), 0); + return; + + } else if (terrain_type == "sewage_treatment") { + + fill_background(this, t_floor); // Set all to floor + line(this, t_wall_h, 0, 0, 23, 0); // Top wall + line(this, t_window, 1, 0, 6, 0); // Its windows + line(this, t_wall_h, 0, 23, 23, 23); // Bottom wall + line(this, t_wall_h, 1, 5, 6, 5); // Interior wall (front office) + line(this, t_wall_h, 1, 14, 6, 14); // Interior wall (equipment) + line(this, t_wall_h, 1, 20, 7, 20); // Interior wall (stairs) + line(this, t_wall_h, 14, 15, 22, 15); // Interior wall (tank) + line(this, t_wall_v, 0, 1, 0, 22); // Left wall + line(this, t_wall_v, 23, 1, 23, 22); // Right wall + line(this, t_wall_v, 7, 1, 7, 5); // Interior wall (front office) + line(this, t_wall_v, 7, 14, 7, 19); // Interior wall (stairs) + line(this, t_wall_v, 4, 15, 4, 19); // Interior wall (mid-stairs) + line(this, t_wall_v, 14, 15, 14, 20); // Interior wall (tank) + line(this, t_wall_glass_v, 7, 6, 7, 13); // Interior glass (equipment) + line(this, t_wall_glass_h, 8, 20, 13, 20); // Interior glass (flow) + line_furn(this, f_counter, 1, 3, 3, 3); // Desk (front office); + line_furn(this, f_counter, 1, 6, 1, 13); // Counter (equipment); + // Central tanks: + square(this, t_sewage, 10, 3, 13, 6); + square(this, t_sewage, 17, 3, 20, 6); + square(this, t_sewage, 10, 10, 13, 13); + square(this, t_sewage, 17, 10, 20, 13); + // Drainage tank + square(this, t_sewage, 16, 16, 21, 18); + square(this, t_grate, 18, 16, 19, 17); + line(this, t_sewage, 17, 19, 20, 19); + line(this, t_sewage, 18, 20, 19, 20); + line(this, t_sewage, 2, 21, 19, 21); + line(this, t_sewage, 2, 22, 19, 22); + // Pipes and pumps + line(this, t_sewage_pipe, 1, 15, 1, 19); + line(this, t_sewage_pump, 1, 21, 1, 22); + // Stairs down + ter_set(2, 15, t_stairs_down); + // Now place doors + ter_set(rng(2, 5), 0, t_door_c); + ter_set(rng(3, 5), 5, t_door_c); + ter_set(5, 14, t_door_c); + ter_set(7, rng(15, 17), t_door_c); + ter_set(14, rng(17, 19), t_door_c); + if (one_in(3)) { // back door + ter_set(23, rng(19, 22), t_door_locked); + } + ter_set(4, 19, t_door_metal_locked); + ter_set(2, 19, t_console); + ter_set(6, 19, t_console); + // Computers to unlock stair room, and items + tmpcomp = add_computer(2, 19, _("EnviroCom OS v2.03"), 1); + tmpcomp->add_option(_("Unlock stairs"), COMPACT_OPEN, 0); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + + tmpcomp = add_computer(6, 19, _("EnviroCom OS v2.03"), 1); + tmpcomp->add_option(_("Unlock stairs"), COMPACT_OPEN, 0); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + place_items("sewage_plant", 80, 1, 6, 1, 13, false, 0); + + + } else if (terrain_type == "sewage_treatment_hub") { + // Stairs up, center of 3x3 of treatment_below + + fill_background(this, t_rock_floor); + // Top & left walls; right & bottom are handled by adjacent terrain + line(this, t_wall_h, 0, 0, 23, 0); + line(this, t_wall_v, 0, 1, 0, 23); + // Top-left room + line(this, t_wall_v, 8, 1, 8, 8); + line(this, t_wall_h, 1, 9, 9, 9); + line(this, t_wall_glass_h, rng(1, 3), 9, rng(4, 7), 9); + ter_set(2, 15, t_stairs_up); + ter_set(8, 8, t_door_c); + ter_set(3, 0, t_door_c); + + // Bottom-left room - stairs and equipment + line(this, t_wall_h, 1, 14, 8, 14); + line(this, t_wall_glass_h, rng(1, 3), 14, rng(5, 8), 14); + line(this, t_wall_v, 9, 14, 9, 23); + line(this, t_wall_glass_v, 9, 16, 9, 19); + square_furn(this, f_counter, 5, 16, 6, 20); + place_items("sewage_plant", 80, 5, 16, 6, 20, false, 0); + ter_set(0, 20, t_door_c); + ter_set(9, 20, t_door_c); + + // Bottom-right room + line(this, t_wall_v, 14, 19, 14, 23); + line(this, t_wall_h, 14, 18, 19, 18); + line(this, t_wall_h, 21, 14, 23, 14); + ter_set(14, 18, t_wall_h); + ter_set(14, 20, t_door_c); + ter_set(15, 18, t_door_c); + line(this, t_wall_v, 20, 15, 20, 18); + + // Tanks and their content + for (int i = 9; i <= 16; i += 7) { + for (int j = 2; j <= 9; j += 7) { + square(this, t_rock, i, j, i + 5, j + 5); + square(this, t_sewage, i + 1, j + 1, i + 4, j + 4); + } + } + square(this, t_rock, 16, 15, 19, 17); // Wall around sewage from above + square(this, t_rock, 10, 15, 14, 17); // Extra walls for southward flow + // Flow in from north, east, and west always connects to the corresponding tank + square(this, t_sewage, 10, 0, 13, 2); // North -> NE tank + square(this, t_sewage, 21, 10, 23, 13); // East -> SE tank + square(this, t_sewage, 0, 10, 9, 13); // West -> SW tank + // Flow from south may go to SW tank or SE tank + square(this, t_sewage, 10, 16, 13, 23); + if (one_in(2)) { // To SW tank + square(this, t_sewage, 10, 14, 13, 17); + // Then, flow from above may be either to flow from south, to SE tank, or both + switch (rng(1, 5)) { + case 1: + case 2: // To flow from south + square(this, t_sewage, 14, 16, 19, 17); + line(this, t_bridge, 15, 16, 15, 17); + if (!one_in(4)) { + line(this, t_wall_glass_h, 16, 18, 19, 18); // Viewing window + } + break; + case 3: + case 4: // To SE tank + square(this, t_sewage, 18, 14, 19, 17); + if (!one_in(4)) { + line(this, t_wall_glass_v, 20, 15, 20, 17); // Viewing window + } + break; + case 5: // Both! + square(this, t_sewage, 14, 16, 19, 17); + square(this, t_sewage, 18, 14, 19, 17); + line(this, t_bridge, 15, 16, 15, 17); + if (!one_in(4)) { + line(this, t_wall_glass_h, 16, 18, 19, 18); // Viewing window + } + if (!one_in(4)) { + line(this, t_wall_glass_v, 20, 15, 20, 17); // Viewing window + } + break; + } + } else { // To SE tank, via flow from above + square(this, t_sewage, 14, 16, 19, 17); + square(this, t_sewage, 18, 14, 19, 17); + line(this, t_bridge, 15, 16, 15, 17); + if (!one_in(4)) { + line(this, t_wall_glass_h, 16, 18, 19, 18); // Viewing window + } + if (!one_in(4)) { + line(this, t_wall_glass_v, 20, 15, 20, 17); // Viewing window + } + } + + // Next, determine how the tanks interconnect. + rn = rng(1, 4); // Which of the 4 possible connections is missing? + if (rn != 1) { + line(this, t_sewage, 14, 4, 14, 5); + line(this, t_bridge, 15, 4, 15, 5); + line(this, t_sewage, 16, 4, 16, 5); + } + if (rn != 2) { + line(this, t_sewage, 18, 7, 19, 7); + line(this, t_bridge, 18, 8, 19, 8); + line(this, t_sewage, 18, 9, 19, 9); + } + if (rn != 3) { + line(this, t_sewage, 14, 11, 14, 12); + line(this, t_bridge, 15, 11, 15, 12); + line(this, t_sewage, 16, 11, 16, 12); + } + if (rn != 4) { + line(this, t_sewage, 11, 7, 12, 7); + line(this, t_bridge, 11, 8, 12, 8); + line(this, t_sewage, 11, 9, 12, 9); + } + // Bridge connecting bottom two rooms + line(this, t_bridge, 10, 20, 13, 20); + // Possibility of extra equipment shelves + if (!one_in(3)) { + line_furn(this, f_rack, 23, 1, 23, 4); + place_items("sewage_plant", 60, 23, 1, 23, 4, false, 0); + } + + + // Finally, choose what the top-left and bottom-right rooms do. + if (one_in(2)) { // Upper left is sampling, lower right valuable finds + // Upper left... + line(this, t_wall_h, 1, 3, 2, 3); + line(this, t_wall_h, 1, 5, 2, 5); + line(this, t_wall_h, 1, 7, 2, 7); + ter_set(1, 4, t_sewage_pump); + furn_set(2, 4, f_counter); + ter_set(1, 6, t_sewage_pump); + furn_set(2, 6, f_counter); + ter_set(1, 2, t_console); + tmpcomp = add_computer(1, 2, _("EnviroCom OS v2.03"), 0); + tmpcomp->add_option(_("Download Sewer Maps"), COMPACT_MAP_SEWER, 0); + tmpcomp->add_option(_("Divert sample"), COMPACT_SAMPLE, 3); + tmpcomp->add_failure(COMPFAIL_PUMP_EXPLODE); + tmpcomp->add_failure(COMPFAIL_PUMP_LEAK); + // Lower right... + line_furn(this, f_counter, 15, 23, 22, 23); + place_items("sewer", 65, 15, 23, 22, 23, false, 0); + line_furn(this, f_counter, 23, 15, 23, 19); + place_items("sewer", 65, 23, 15, 23, 19, false, 0); + } else { // Upper left is valuable finds, lower right is sampling + // Upper left... + line_furn(this, f_counter, 1, 1, 1, 7); + place_items("sewer", 65, 1, 1, 1, 7, false, 0); + line_furn(this, f_counter, 7, 1, 7, 7); + place_items("sewer", 65, 7, 1, 7, 7, false, 0); + // Lower right... + line(this, t_wall_v, 17, 22, 17, 23); + line(this, t_wall_v, 19, 22, 19, 23); + line(this, t_wall_v, 21, 22, 21, 23); + ter_set(18, 23, t_sewage_pump); + furn_set(18, 22, f_counter); + ter_set(20, 23, t_sewage_pump); + furn_set(20, 22, f_counter); + ter_set(16, 23, t_console); + tmpcomp = add_computer(16, 23, _("EnviroCom OS v2.03"), 0); + tmpcomp->add_option(_("Download Sewer Maps"), COMPACT_MAP_SEWER, 0); + tmpcomp->add_option(_("Divert sample"), COMPACT_SAMPLE, 3); + tmpcomp->add_failure(COMPFAIL_PUMP_EXPLODE); + tmpcomp->add_failure(COMPFAIL_PUMP_LEAK); + } + + + } else if (terrain_type == "sewage_treatment_under") { + + fill_background(this, t_floor); + + if (t_north == "sewage_treatment_under" || t_north == "sewage_treatment_hub" || + (is_ot_type("sewer", t_north) && connects_to(t_north, 2))) { + if (t_north == "sewage_treatment_under" || + t_north == "sewage_treatment_hub") { + line(this, t_wall_h, 0, 0, 23, 0); + ter_set(3, 0, t_door_c); + } + n_fac = 1; + square(this, t_sewage, 10, 0, 13, 13); + } + + if (t_east == "sewage_treatment_under" || + t_east == "sewage_treatment_hub" || + (is_ot_type("sewer", t_east) && connects_to(t_east, 3))) { + e_fac = 1; + square(this, t_sewage, 10, 10, 23, 13); + } + + if (t_south == "sewage_treatment_under" || + t_south == "sewage_treatment_hub" || + (is_ot_type("sewer", t_south) && connects_to(t_south, 0))) { + s_fac = 1; + square(this, t_sewage, 10, 10, 13, 23); + } + + if (t_west == "sewage_treatment_under" || + t_west == "sewage_treatment_hub" || + (is_ot_type("sewer", t_west) && connects_to(t_west, 1))) { + if (t_west == "sewage_treatment_under" || + t_west == "sewage_treatment_hub") { + line(this, t_wall_v, 0, 1, 0, 23); + ter_set(0, 20, t_door_c); + } + w_fac = 1; + square(this, t_sewage, 0, 10, 13, 13); + } + + + } else if (terrain_type == "mine_entrance") { + + fill_background(this, &grass_or_dirt); + int tries = 0; + bool build_shaft = true; + do { + int x1 = rng(1, SEEX * 2 - 10), y1 = rng(1, SEEY * 2 - 10); + int x2 = x1 + rng(4, 9), y2 = y1 + rng(4, 9); + if (build_shaft) { + build_mine_room(this, room_mine_shaft, x1, y1, x2, y2); + build_shaft = false; + } else { + bool okay = true; + for (int x = x1 - 1; x <= x2 + 1 && okay; x++) { + for (int y = y1 - 1; y <= y2 + 1 && okay; y++) { + if (ter(x, y) != t_grass && ter(x, y) != t_dirt) { + okay = false; + } + } + } + if (okay) { + room_type type = room_type( rng(room_mine_office, room_mine_housing) ); + build_mine_room(this, type, x1, y1, x2, y2); + tries = 0; + } else { + tries++; + } + } + } while (tries < 5); + int ladderx = rng(0, SEEX * 2 - 1), laddery = rng(0, SEEY * 2 - 1); + while (ter(ladderx, laddery) != t_dirt && ter(ladderx, laddery) != t_grass) { + ladderx = rng(0, SEEX * 2 - 1); + laddery = rng(0, SEEY * 2 - 1); + } + ter_set(ladderx, laddery, t_manhole_cover); + + + } else if (terrain_type == "mine_shaft") { + // Not intended to actually be inhabited! + + fill_background(this, t_rock); + square(this, t_hole, SEEX - 3, SEEY - 3, SEEX + 2, SEEY + 2); + line(this, t_grate, SEEX - 3, SEEY - 4, SEEX + 2, SEEY - 4); + ter_set(SEEX - 3, SEEY - 5, t_ladder_up); + ter_set(SEEX + 2, SEEY - 5, t_ladder_down); + rotate(rng(0, 3)); + + + } else if (terrain_type == "mine" || + terrain_type == "mine_down") { + + if (is_ot_type("mine", t_north)) { + n_fac = (one_in(10) ? 0 : -2); + } else { + n_fac = 4; + } + if (is_ot_type("mine", t_east)) { + e_fac = (one_in(10) ? 0 : -2); + } else { + e_fac = 4; + } + if (is_ot_type("mine", t_south)) { + s_fac = (one_in(10) ? 0 : -2); + } else { + s_fac = 4; + } + if (is_ot_type("mine", t_west)) { + w_fac = (one_in(10) ? 0 : -2); + } else { + w_fac = 4; + } + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i >= w_fac + rng(0, 2) && i <= SEEX * 2 - 1 - e_fac - rng(0, 2) && + j >= n_fac + rng(0, 2) && j <= SEEY * 2 - 1 - s_fac - rng(0, 2) && + i + j >= 4 && (SEEX * 2 - i) + (SEEY * 2 - j) >= 6 ) { + ter_set(i, j, t_rock_floor); + } else { + ter_set(i, j, t_rock); + } + } + } + + if (t_above == "mine_shaft") { // We need the entrance room + square(this, t_floor, 10, 10, 15, 15); + line(this, t_wall_h, 9, 9, 16, 9); + line(this, t_wall_h, 9, 16, 16, 16); + line(this, t_wall_v, 9, 10, 9, 15); + line(this, t_wall_v, 16, 10, 16, 15); + line(this, t_wall_h, 10, 11, 12, 11); + ter_set(10, 10, t_elevator_control); + ter_set(11, 10, t_elevator); + ter_set(10, 12, t_ladder_up); + line_furn(this, f_counter, 10, 15, 15, 15); + place_items("mine_equipment", 86, 10, 15, 15, 15, false, 0); + if (one_in(2)) { + ter_set(9, 12, t_door_c); + } else { + ter_set(16, 12, t_door_c); + } + + } else { // Not an entrance; maybe some hazards! + switch( rng(0, 6) ) { + case 0: + break; // Nothing! Lucky! + + case 1: { // Toxic gas + int cx = rng(9, 14), cy = rng(9, 14); + ter_set(cx, cy, t_rock); + add_field(g, cx, cy, fd_gas_vent, 1); + } + break; + + case 2: { // Lava + int x1 = rng(6, SEEX), y1 = rng(6, SEEY), + x2 = rng(SEEX + 1, SEEX * 2 - 7), y2 = rng(SEEY + 1, SEEY * 2 - 7); + int num = rng(2, 4); + for (int i = 0; i < num; i++) { + int lx1 = x1 + rng(-1, 1), lx2 = x2 + rng(-1, 1), + ly1 = y1 + rng(-1, 1), ly2 = y2 + rng(-1, 1); + line(this, t_lava, lx1, ly1, lx2, ly2); + } + } + break; + + case 3: { // Wrecked equipment + int x = rng(9, 14), y = rng(9, 14); + for (int i = x - 3; i < x + 3; i++) { + for (int j = y - 3; j < y + 3; j++) { + if (!one_in(4)) { + ter_set(i, j, t_wreckage); + } + } + } + place_items("wreckage", 70, x - 3, y - 3, x + 2, y + 2, false, 0); + } + break; + + case 4: { // Dead miners + int num_bodies = rng(4, 8); + for (int i = 0; i < num_bodies; i++) { + int tries = 0; + point body; + do { + body = point(-1, -1); + int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); + if (move_cost(x, y) == 2) { + body = point(x, y); + } else { + tries++; + } + } while (body.x == -1 && tries < 10); + if (tries < 10) { + item miner; + miner.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(body.x, body.y, miner); + place_items("mine_equipment", 60, body.x, body.y, body.x, body.y, + false, 0); + } + } + } + break; + + case 5: { // Dark worm! + int num_worms = rng(1, 5); + for (int i = 0; i < num_worms; i++) { + std::vector sides; + if (n_fac == 6) { + sides.push_back(NORTH); + } + if (e_fac == 6) { + sides.push_back(EAST); + } + if (s_fac == 6) { + sides.push_back(SOUTH); + } + if (w_fac == 6) { + sides.push_back(WEST); + } + if (sides.empty()) { + add_spawn("mon_dark_wyrm", 1, SEEX, SEEY); + i = num_worms; + } else { + direction side = sides[rng(0, sides.size() - 1)]; + point p; + switch (side) { + case NORTH: + p = point(rng(1, SEEX * 2 - 2), rng(1, 5) ); + break; + case EAST: + p = point(SEEX * 2 - rng(2, 6), rng(1, SEEY * 2 - 2)); + break; + case SOUTH: + p = point(rng(1, SEEX * 2 - 2), SEEY * 2 - rng(2, 6)); + break; + case WEST: + p = point(rng(1, 5) , rng(1, SEEY * 2 - 2)); + break; + default: + break; + } + ter_set(p.x, p.y, t_rock_floor); + add_spawn("mon_dark_wyrm", 1, p.x, p.y); + } + } + } + break; + + case 6: { // Spiral + int orx = rng(SEEX - 4, SEEX), ory = rng(SEEY - 4, SEEY); + line(this, t_rock, orx , ory , orx + 5, ory ); + line(this, t_rock, orx + 5, ory , orx + 5, ory + 5); + line(this, t_rock, orx + 1, ory + 5, orx + 5, ory + 5); + line(this, t_rock, orx + 1, ory + 2, orx + 1, ory + 4); + line(this, t_rock, orx + 1, ory + 2, orx + 3, ory + 2); + ter_set(orx + 3, ory + 3, t_rock); + item miner; + miner.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(orx + 2, ory + 3, miner); + place_items("mine_equipment", 60, orx + 2, ory + 3, orx + 2, ory + 3, + false, 0); + } + break; + } + } + + if (terrain_type == "mine_down") { // Don't forget to build a slope down! + std::vector open; + if (n_fac == 4) { + open.push_back(NORTH); + } + if (e_fac == 4) { + open.push_back(EAST); + } + if (s_fac == 4) { + open.push_back(SOUTH); + } + if (w_fac == 4) { + open.push_back(WEST); + } + + if (open.empty()) { // We'll have to build it in the center + int tries = 0; + point p; + bool okay = true; + do { + p.x = rng(SEEX - 6, SEEX + 1); + p.y = rng(SEEY - 6, SEEY + 1); + okay = true; + for (int i = p.x; i <= p.x + 5 && okay; i++) { + for (int j = p.y; j <= p.y + 5 && okay; j++) { + if (ter(i, j) != t_rock_floor) { + okay = false; + } + } + } + if (!okay) { + tries++; + } + } while (!okay && tries < 10); + if (tries == 10) { // Clear the area around the slope down + square(this, t_rock_floor, p.x, p.y, p.x + 5, p.y + 5); + } + square(this, t_slope_down, p.x + 1, p.y + 1, p.x + 2, p.y + 2); + + } else { // We can build against a wall + direction side = open[rng(0, open.size() - 1)]; + switch (side) { + case NORTH: + square(this, t_rock_floor, SEEX - 3, 6, SEEX + 2, SEEY); + line(this, t_slope_down, SEEX - 2, 6, SEEX + 1, 6); + break; + case EAST: + square(this, t_rock_floor, SEEX + 1, SEEY - 3, SEEX * 2 - 7, SEEY + 2); + line(this, t_slope_down, SEEX * 2 - 7, SEEY - 2, SEEX * 2 - 7, SEEY + 1); + break; + case SOUTH: + square(this, t_rock_floor, SEEX - 3, SEEY + 1, SEEX + 2, SEEY * 2 - 7); + line(this, t_slope_down, SEEX - 2, SEEY * 2 - 7, SEEX + 1, SEEY * 2 - 7); + break; + case WEST: + square(this, t_rock_floor, 6, SEEY - 3, SEEX, SEEY + 2); + line(this, t_slope_down, 6, SEEY - 2, 6, SEEY + 1); + break; + default: + break; + } + } + } // Done building a slope down + + if (t_above == "mine_down") { // Don't forget to build a slope up! + std::vector open; + if (n_fac == 6 && ter(SEEX, 6) != t_slope_down) { + open.push_back(NORTH); + } + if (e_fac == 6 && ter(SEEX * 2 - 7, SEEY) != t_slope_down) { + open.push_back(EAST); + } + if (s_fac == 6 && ter(SEEX, SEEY * 2 - 7) != t_slope_down) { + open.push_back(SOUTH); + } + if (w_fac == 6 && ter(6, SEEY) != t_slope_down) { + open.push_back(WEST); + } + + if (open.empty()) { // We'll have to build it in the center + int tries = 0; + point p; + bool okay = true; + do { + p.x = rng(SEEX - 6, SEEX + 1); + p.y = rng(SEEY - 6, SEEY + 1); + okay = true; + for (int i = p.x; i <= p.x + 5 && okay; i++) { + for (int j = p.y; j <= p.y + 5 && okay; j++) { + if (ter(i, j) != t_rock_floor) { + okay = false; + } + } + } + if (!okay) { + tries++; + } + } while (!okay && tries < 10); + if (tries == 10) { // Clear the area around the slope down + square(this, t_rock_floor, p.x, p.y, p.x + 5, p.y + 5); + } + square(this, t_slope_up, p.x + 1, p.y + 1, p.x + 2, p.y + 2); + + } else { // We can build against a wall + direction side = open[rng(0, open.size() - 1)]; + switch (side) { + case NORTH: + line(this, t_slope_up, SEEX - 2, 6, SEEX + 1, 6); + break; + case EAST: + line(this, t_slope_up, SEEX * 2 - 7, SEEY - 2, SEEX * 2 - 7, SEEY + 1); + break; + case SOUTH: + line(this, t_slope_up, SEEX - 2, SEEY * 2 - 7, SEEX + 1, SEEY * 2 - 7); + break; + case WEST: + line(this, t_slope_up, 6, SEEY - 2, 6, SEEY + 1); + break; + default: + break; + } + } + } // Done building a slope up + + + } else if (terrain_type == "mine_finale") { + + // Set up the basic chamber + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i > rng(1, 3) && i < SEEX * 2 - rng(2, 4) && + j > rng(1, 3) && j < SEEY * 2 - rng(2, 4) ) { + ter_set(i, j, t_rock_floor); + } else { + ter_set(i, j, t_rock); + } + } + } + std::vector face; // Which walls are solid, and can be a facing? + // Now draw the entrance(s) + if (t_north == "mine") { + square(this, t_rock_floor, SEEX, 0, SEEX + 1, 3); + } else { + face.push_back(NORTH); + } + + if (t_east == "mine") { + square(this, t_rock_floor, SEEX * 2 - 4, SEEY, SEEX * 2 - 1, SEEY + 1); + } else { + face.push_back(EAST); + } + + if (t_south == "mine") { + square(this, t_rock_floor, SEEX, SEEY * 2 - 4, SEEX + 1, SEEY * 2 - 1); + } else { + face.push_back(SOUTH); + } + + if (t_west == "mine") { + square(this, t_rock_floor, 0, SEEY, 3, SEEY + 1); + } else { + face.push_back(WEST); + } + + // Now, pick and generate a type of finale! + if (face.empty()) { + rn = rng(1, 3); // Amigara fault is not valid + } else { + rn = rng(1, 4); + } + + switch (rn) { + case 1: { // Wyrms + int x = rng(SEEX, SEEX + 1), y = rng(SEEY, SEEY + 1); + ter_set(x, y, t_pedestal_wyrm); + spawn_item(x, y, "petrified_eye"); + } + break; // That's it! game::examine handles the pedestal/wyrm spawns + + case 2: { // The Thing dog + item miner; + miner.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + int num_bodies = rng(4, 8); + for (int i = 0; i < num_bodies; i++) { + int x = rng(4, SEEX * 2 - 5), y = rng(4, SEEX * 2 - 5); + add_item(x, y, miner); + place_items("mine_equipment", 60, x, y, x, y, false, 0); + } + add_spawn("mon_dog_thing", 1, rng(SEEX, SEEX + 1), rng(SEEX, SEEX + 1), true); + spawn_artifact(rng(SEEX, SEEX + 1), rng(SEEY, SEEY + 1), new_artifact(itypes), 0); + } + break; + + case 3: { // Spiral down + line(this, t_rock, 5, 5, 5, 18); + line(this, t_rock, 5, 5, 18, 5); + line(this, t_rock, 18, 5, 18, 18); + line(this, t_rock, 8, 18, 18, 18); + line(this, t_rock, 8, 8, 8, 18); + line(this, t_rock, 8, 8, 15, 8); + line(this, t_rock, 15, 8, 15, 15); + line(this, t_rock, 10, 15, 15, 15); + line(this, t_rock, 10, 10, 10, 15); + line(this, t_rock, 10, 10, 13, 10); + line(this, t_rock, 13, 10, 13, 13); + ter_set(12, 13, t_rock); + ter_set(12, 12, t_slope_down); + ter_set(12, 11, t_slope_down); + } + break; + + case 4: { // Amigara fault + direction fault = face[rng(0, face.size() - 1)]; + // Construct the fault on the appropriate face + switch (fault) { + case NORTH: + square(this, t_rock, 0, 0, SEEX * 2 - 1, 4); + line(this, t_fault, 4, 4, SEEX * 2 - 5, 4); + break; + case EAST: + square(this, t_rock, SEEX * 2 - 5, 0, SEEY * 2 - 1, SEEX * 2 - 1); + line(this, t_fault, SEEX * 2 - 5, 4, SEEX * 2 - 5, SEEY * 2 - 5); + break; + case SOUTH: + square(this, t_rock, 0, SEEY * 2 - 5, SEEX * 2 - 1, SEEY * 2 - 1); + line(this, t_fault, 4, SEEY * 2 - 5, SEEX * 2 - 5, SEEY * 2 - 5); + break; + case WEST: + square(this, t_rock, 0, 0, 4, SEEY * 2 - 1); + line(this, t_fault, 4, 4, 4, SEEY * 2 - 5); + break; + default: + break; + } + + ter_set(SEEX, SEEY, t_console); + tmpcomp = add_computer(SEEX, SEEY, _("NEPowerOS"), 0); + tmpcomp->add_option(_("Read Logs"), COMPACT_AMIGARA_LOG, 0); + tmpcomp->add_option(_("Initiate Tremors"), COMPACT_AMIGARA_START, 4); + tmpcomp->add_failure(COMPFAIL_AMIGARA); + } + break; + } + + + } else if (terrain_type == "spiral_hub") { + + fill_background(this, t_rock_floor); + line(this, t_rock, 23, 0, 23, 23); + line(this, t_rock, 2, 23, 23, 23); + line(this, t_rock, 2, 4, 2, 23); + line(this, t_rock, 2, 4, 18, 4); + line(this, t_rock, 18, 4, 18, 18); // bad + line(this, t_rock, 6, 18, 18, 18); + line(this, t_rock, 6, 7, 6, 18); + line(this, t_rock, 6, 7, 15, 7); + line(this, t_rock, 15, 7, 15, 15); + line(this, t_rock, 8, 15, 15, 15); + line(this, t_rock, 8, 9, 8, 15); + line(this, t_rock, 8, 9, 13, 9); + line(this, t_rock, 13, 9, 13, 13); + line(this, t_rock, 10, 13, 13, 13); + line(this, t_rock, 10, 11, 10, 13); + square(this, t_slope_up, 11, 11, 12, 12); + rotate(rng(0, 3)); + + + } else if (terrain_type == "spiral") { + + fill_background(this, t_rock_floor); + const int num_spiral = rng(1, 4); + std::list offsets; + const int spiral_width = 8; + // Divide the room into quadrants, and place a spiral origin + // at a random offset within each quadrant. + for( int x = 0; x < 2; ++x ) { + for( int y = 0; y < 2; ++y ) { + const int x_jitter = rng(0, SEEX - spiral_width); + const int y_jitter = rng(0, SEEY - spiral_width); + offsets.push_back( point((x * SEEX) + x_jitter, + (y * SEEY) + y_jitter) ); + } + } + + // Randomly place from 1 - 4 of the spirals at the chosen offsets. + for (int i = 0; i < num_spiral; i++) { + std::list::iterator chosen_point = offsets.begin(); + std::advance( chosen_point, rng(0, offsets.size() - 1) ); + const int orx = chosen_point->x; + const int ory = chosen_point->y; + offsets.erase( chosen_point ); + + line(this, t_rock, orx , ory , orx + 5, ory ); + line(this, t_rock, orx + 5, ory , orx + 5, ory + 5); + line(this, t_rock, orx + 1, ory + 5, orx + 5, ory + 5); + line(this, t_rock, orx + 1, ory + 2, orx + 1, ory + 4); + line(this, t_rock, orx + 1, ory + 2, orx + 3, ory + 2); + ter_set(orx + 3, ory + 3, t_rock); + ter_set(orx + 2, ory + 3, t_rock_floor); + place_items("spiral", 60, orx + 2, ory + 3, orx + 2, ory + 3, false, 0); + } + + + } else if (terrain_type == "radio_tower") { + + fill_background(this, &grass_or_dirt); + lw = rng(1, SEEX * 2 - 2); + tw = rng(1, SEEY * 2 - 2); + for (int i = lw; i < lw + 4; i++) { + for (int j = tw; j < tw + 4; j++) { + ter_set(i, j, t_radio_tower); + } + } + rw = -1; + bw = -1; + if (lw <= 4) { + rw = rng(lw + 5, 10); + } else if (lw >= 16) { + rw = rng(3, lw - 13); + } + if (tw <= 3) { + bw = rng(tw + 5, 10); + } else if (tw >= 16) { + bw = rng(3, tw - 7); + } + if (rw != -1 && bw != -1) { + for (int i = rw; i < rw + 12; i++) { + for (int j = bw; j < bw + 6; j++) { + if (j == bw || j == bw + 5) { + ter_set(i, j, t_wall_h); + } else if (i == rw || i == rw + 11) { + ter_set(i, j, t_wall_v); + } else if (j == bw + 1) { + set(i, j, t_floor, f_counter); + } else { + ter_set(i, j, t_floor); + } + } + } + cw = rng(rw + 2, rw + 8); + ter_set(cw, bw + 5, t_window); + ter_set(cw + 1, bw + 5, t_window); + ter_set(rng(rw + 2, rw + 8), bw + 5, t_door_c); + ter_set(rng(rw + 2, rw + 8), bw + 1, t_radio_controls); + place_items("radio", 60, rw + 1, bw + 2, rw + 10, bw + 4, true, 0); + } else { // No control room... simple controls near the tower + ter_set(rng(lw, lw + 3), tw + 4, t_radio_controls); + } + + + } else if (is_ot_type("station_radio", terrain_type)) { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + //Eventually the northern shed will house the main breaker or generator that must be activated prior to transmitting. + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + FffffffffffffF \n\ + F____________F \n\ + |----|______&&&&__F \n\ + |....=______&&&&__F \n\ + |x.ll|______&&&&__F \n\ + |----|______&&&&__F \n\ + F____________F \n\ + |--------|__________G \n\ + |tS|eSc.r|__________F \n\ + w..+.....=__________F \n\ + |-----|..|----------| \n\ + |..doo|..|..dW..h...| \n\ + w..h..|..D.hxW.c6c..| \n\ + |a....|..|...+......| \n\ + |--+--|..|-----WWW--| \n\ + |.+.................| \n\ + |l|..............ch.| \n\ + |-|+--|--+--|....c..| \n\ + |o....|....o|--==-w-| \n\ + |o.d..|..d.o| ss \n\ + |o.h..|..h..| ss \n\ + |-www-|-www-| ss \n\ + ss \n", + mapf::basic_bind(". - | 6 a r + = D W w t S e o h c d x l F f _ & G s", t_floor, t_wall_h, t_wall_v, + t_console, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_window_alarm, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_console_broken, t_floor, t_chainfence_v, t_chainfence_h, t_pavement, t_radio_tower, + t_chaingate_l, t_sidewalk), + mapf::basic_bind(". - | 6 a r + = D W w t S e o h c d x l F f _ & G s", f_null, f_null, f_null, + f_null, f_armchair, f_trashcan, f_null, f_null, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_null, f_locker, + f_null, f_null, f_null, f_null, f_null, f_null)); + tmpcomp = add_computer(17, 13, _("Broadcasting Control"), 0); + tmpcomp->add_option(_("ERROR: SIGNAL DISCONNECT"), COMPACT_TOWER_UNRESPONSIVE, 0); + spawn_item(18, 13, "record_weather"); + place_items("novels", 70, 5, 12, 6, 12, false, 0); + place_items("novels", 70, 2, 21, 2, 19, false, 0); + place_items("novels", 70, 12, 19, 12, 20, false, 0); + place_items("fridge", 70, 5, 9, 7, 9, false, 0); + place_items("fridge", 20, 5, 9, 7, 9, false, 0); + place_items("fridge", 10, 5, 9, 7, 9, false, 0); + place_items("cleaning", 70, 2, 16, 2, 17, false, 0); + place_items("electronics", 80, 6, 5, 7, 5, false, 0); + if (terrain_type == "station_radio_east") { + rotate(3); + } + if (terrain_type == "station_radio_north") { + rotate(2); + } + if (terrain_type == "station_radio_west") { + rotate(1); + } + + + } else if (terrain_type == "public_works_entrance") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + f ____________________\n\ + f ____________________\n\ + f ___________ sssss\n\ + f ___________ sssss\n\ + f ___________ |--D---\n\ + f ___________ |....|.\n\ + f ___________ |....|.\n\ + f ___________ |lttl|.\n\ + fFFF_________FFF|----|.\n\ + ___________ss|..h.|.\n\ + ___________xs|....+.\n\ + ___________sswddd.|.\n\ + ___________ssw.hd.|.\n\ + ___________ss|l...|.\n\ + ___________ss|-ww-|-\n\ + ___________sssssssss\n\ + ____________,_____,_\n\ + ____________,_____,_\n\ + ____________,_____,_\n\ + ____________,_____,_\n\ + ____________________\n\ + ____________________\n\ + ____________________\n\ + ____________________\n", + mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_floor, t_floor, + t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_pool_table, + f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + place_items("bigtools", 80, 18, 7, 21, 7, false, 0); + place_items("office", 80, 18, 11, 20, 11, false, 0); + place_items("office", 60, 18, 13, 18, 13, false, 0); + place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.2); + if (t_north == "public_works" && t_west == "public_works") { + rotate(3); + } else if (t_north == "public_works" && t_east == "public_works") { + rotate(0); + } else if (t_south == "public_works" && t_east == "public_works") { + rotate(1); + } else if (t_west == "public_works" && t_south == "public_works") { + rotate(2); + } + + + } else if (terrain_type == "public_works") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + if ((t_south == "public_works_entrance" && t_east == "public_works") || + (t_north == "public_works" && t_east == "public_works_entrance") || (t_west == "public_works" && + t_north == "public_works_entrance") || + (t_south == "public_works" && t_west == "public_works_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |---------------|FFFFFF\n\ + |....rrrrrrrr...| \n\ + |r..............| _____\n\ + |r..............| _____\n\ + |r..............| _____\n\ + |r..............| _____\n\ + |r..............| _____\n\ + |r..............| _____\n\ + |...............| _____\n\ + |--___________--| _____\n\ + f ___________ _____\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n\ + f ____________________\n", + mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_floor, t_floor, + t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_pool_table, + f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + place_items("hardware", 85, 2, 3, 2, 8, false, 0); + place_items("hardware", 85, 6, 2, 13, 2, false, 0); + spawn_item(21, 2, "log", rng(1, 3)); + spawn_item(15, 2, "pipe", rng(1, 10)); + spawn_item(4, 2, "glass_sheet", rng(1, 7)); + spawn_item(16, 5, "2x4", rng(1, 20)); + spawn_item(16, 7, "2x4", rng(1, 20)); + spawn_item(12, 2, "nail"); + spawn_item(13, 2, "nail"); + place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1); + if (t_west == "public_works_entrance") { + rotate(1); + } + if (t_north == "public_works_entrance") { + rotate(2); + } + if (t_east == "public_works_entrance") { + rotate(3); + } + } + + else if ((t_west == "public_works_entrance" && t_north == "public_works") || + (t_north == "public_works_entrance" && t_east == "public_works") || (t_west == "public_works" && + t_south == "public_works_entrance") || + (t_south == "public_works" && t_east == "public_works_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +__________ f \n\ +__________ f \n\ +ss f \n\ +ss f \n\ ++----ww-ww-ww-ww--|GFf \n\ +.^|..htth.........| \n\ +..+..........PPP..w \n\ +..|..........PPP..w \n\ +..|ccecoS........^| \n\ +..|---------------| \n\ +...llllllll|cScScS| \n\ +...........|......| \n\ +...........+......| \n\ +.htth......|..|+|+| \n\ +--ww---|...|.T|T|T| \n\ +sssssss|...|--|-|-| \n\ +____sss|.........l| \n\ +____sss+...c......w \n\ +____sss+...ch...hdw \n\ +____sss|^..c...ddd| \n\ +____sss|-www--www-| \n\ +____sss \n\ +____sss \n\ +____sss \n", + mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_floor, t_floor, + t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_pool_table, + f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + place_items("fridge", 80, 5, 8, 5, 8, false, 0); + place_items("pool_table", 80, 13, 6, 15, 7, false, 0); + place_items("construction_worker", 90, 3, 10, 10, 10, false, 0); + place_items("office", 80, 15, 19, 17, 19, false, 0); + place_items("cleaning", 80, 17, 16, 17, 16, false, 0); + place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.3); + if (t_north == "public_works_entrance") { + rotate(1); + } + if (t_east == "public_works_entrance") { + rotate(2); + } + if (t_south == "public_works_entrance") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +FFFFFFFFF|------------| \n\ + |..ll..rrr...| \n\ +__________............| \n\ +__________...........c| \n\ +__________...........c| \n\ +__________...........l| \n\ +__________...........l| \n\ +________ |............| \n\ +________ |..O.clc.O...| \n\ +________ |............| \n\ +__________............| \n\ +__________...........c| \n\ +__________...........c| \n\ +__________...........l| \n\ +__________...........l| \n\ +________ |......rr....| \n\ +________ |---+--------| \n\ +________ |..rrrr| f \n\ +__________s+......w f \n\ +__________ |r....r| f \n\ +__________ |r....r| f \n\ +__________ |--ww--| f \n\ +__________ f \n", + mapf::basic_bind("O P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", t_column, t_floor, + t_floor, t_grate, t_pavement_y, t_pavement, t_floor, t_chainfence_v, t_chainfence_h, t_console, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, + t_door_locked, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("O P C G , _ r f F 6 x $ ^ . - | t + = D w T S e o h c d l s", f_null, + f_pool_table, f_crate_c, f_null, f_null, f_null, f_rack, f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_table, f_null, + f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, + f_counter, f_desk, f_locker, f_null)); + place_items("tools", 85, 14, 18, 17, 18, false, 0); + place_items("tools", 85, 17, 20, 17, 21, false, 0); + place_items("tools", 85, 12, 20, 12, 21, false, 0); + place_items("mechanics", 85, 21, 12, 21, 15, false, 0); + place_items("mechanics", 85, 21, 4, 21, 7, false, 0); + place_items("mechanics", 85, 14, 9, 16, 9, false, 0); + place_items("electronics", 80, 16, 2, 18, 2, false, 0); + place_items("cleaning", 85, 12, 2, 13, 2, false, 0); + spawn_item(3, 2, "log", rng(1, 3)); + place_spawns(g, "GROUP_PUBLICWORKERS", 1, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1); + if (t_west == "public_works" && t_north == "public_works") { + rotate(1); + if (x_in_y(2, 3)) { + add_vehicle (g, "flatbed_truck", 2, 0, 90); + } + } else if (t_east == "public_works" && t_north == "public_works") { + rotate(2); + if (x_in_y(2, 3)) { + add_vehicle (g, "flatbed_truck", 23, 10, 270); + } + } else if (t_east == "public_works" && t_south == "public_works") { + rotate(3); + if (x_in_y(2, 3)) { + add_vehicle (g, "flatbed_truck", 10, 23, 0); + } + } else { + if (x_in_y(2, 3)) { + add_vehicle (g, "flatbed_truck", 0, 10, 90); + } + } + } + + + } else if (terrain_type == "school_1") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + ||-------|--++----++--|\n\ + |....................|\n\ + |....................|\n\ + |..hhhhhhh..hhhhhhh..|\n\ + |....................|\n\ + |..hhhhhhh..hhhhhhh..|\n\ + |....................|\n\ + |..hhhhhhh..hhhhhhh..|\n\ + |....................|\n\ + |..hhhhhhh..hhhhhhh..|\n\ + |....................|\n\ +ss+..hhhhhhh..hhhhhhh..+\n\ +ss+....................+\n\ +ss|..hhhhhhh..hhhhhhh..|\n\ +ss|....................|\n\ +ss|---..............---|\n\ +ss|....................|\n\ +ss|..----------------..|\n\ +ss+....................|\n\ +ss|....................|\n\ +ss|--------------------|\n\ +ss \n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(20, 60), SEEX, SEEY); + if (t_north == "school_2") { + rotate(3); + } else if (t_east == "school_2") { + rotate(0); + } else if (t_south == "school_2") { + rotate(1); + } else if (t_west == "school_2") { + rotate(2); + } + + + } else if (terrain_type == "school_2") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +........l|...|.h..x..w \n\ +l.......l|-+-|.h..dh.w \n\ +l.......l|...+....c..w \n\ +l.......l|...|.......| \n\ +l.......l|h..|-------|$ \n\ +l.......l|h..|.......| \n\ +l.......l|h..+....d..w \n\ +l.......l|h..|.h..dh.w \n\ +l.......l|...|....d..| \n\ +l.......l|...|------|| \n\ +.........|....#####.|$ \n\ +.........+..........+sss\n\ +.........+..........+sss\n\ +.........|ccccccc...|$ \n\ +-w-+++-w-|..........w$ \n\ + sss |dd..tt.dddw$ \n\ + $sss$ |dh..tt..hdw$ \n\ + sss |d........^|$ \n\ + $sss$ |-www--www-|$ \n\ + sss $$$$$$$$$$$$ \n\ + $sss$ \n\ + sss \n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(5, 20), SEEX, SEEY); + add_spawn("mon_zombie", rng(0, 8), SEEX, SEEY); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("office", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("school", 60, i, j, i, j, false, 0); + } + } + } + if (t_north == "school_5") { + rotate(0); + } else if (t_east == "school_5") { + rotate(1); + } else if (t_south == "school_5") { + rotate(2); + } else if (t_west == "school_5") { + rotate(3); + } + + + } else if (terrain_type == "school_3") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +ssssssssssssssssssssssss\n\ +ssLLLLLLL_______LLLLLLLs\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ssLLLLLLL_______LLLLLLLs\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ssLLLLLLL_______LLLLLLLs\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ssLLLLLLL_______LLLLLLLs\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ssLLLLLLL_______LLLLLLLs\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ss_____________________s\n\ +ssLLLLLLL_______LLLLLLLs\n\ +ss$$ $$_______$$ $$s\n\ +sssssssss_______ssssssss\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 8), SEEX, SEEY); + if (t_north == "school_2") { + rotate(1); + if (x_in_y(1, 7)) { + add_vehicle (g, "schoolbus", 19, 10, 0); + } + } else if (t_east == "school_2") { + rotate(2); + if (x_in_y(1, 7)) { + add_vehicle (g, "schoolbus", 9, 7, 0); + } + } else if (t_south == "school_2") { + rotate(3); + if (x_in_y(1, 7)) { + add_vehicle (g, "schoolbus", 12, 18, 180); + } + } else if (t_west == "school_2") { + rotate(0); + if (x_in_y(1, 7)) { + add_vehicle (g, "schoolbus", 17, 7, 0); + } + } + + + } else if (terrain_type == "school_4") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + w..ddd...+....|.d.d.d.d\n\ + w........|....|........\n\ + w........|....|........\n\ + wd.d.d.d.|....+..ddd...\n\ + |h.h.h.h.|....|..dh...l\n\ + |d.d.d.d.|....|--------\n\ + wh.h.h.h.|....|..ttt..l\n\ + wd.d.d.d.|....+........\n\ + wh.h.h.h.|....|.h.h.h.h\n\ + w........+....|.d.d.d.d\n\ + |l..ttt..|....|.h.h.h.h\n\ + |--------|....|.d.d.d.d\n\ + |l..hd...|....|.h.h.h.h\n\ + w..ddd...+....|.d.d.d.d\n\ + w........|....|........\n\ + w........|....|........\n\ + wd.d.d.d.|....+..ddd...\n\ + |h.h.h.h.|....|..dh...l\n\ + |d.d.d.d.|....|--------\n\ + wh.h.h.h.|.............\n\ + wd.d.d.d.|.............\n\ + wh.h.h.h.|....^ccc^ccc^\n\ + w........+.............\n\ + |l..ttt..|.............\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); + add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("school", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("school", 60, i, j, i, j, false, 0); + } + } + } + if (t_north == "school_5") { + rotate(3); + } else if (t_east == "school_5") { + rotate(0); + } else if (t_south == "school_5") { + rotate(1); + } else if (t_west == "school_5") { + rotate(2); + } + + + } else if (terrain_type == "school_5") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +|.oooooooo...o.o.o.o.|--\n\ +|............o.o.o.o.|.T\n\ +|.oooooooo...o.o.o.o.|.S\n\ +|............o.o.o.o.|+-\n\ +|.oooooooo..............\n\ +|.......................\n\ +|--------|o....o.o.o.|+-\n\ +|ch......|o....o.o.o.|.S\n\ +|cxc.....|o....o.o.o.|.T\n\ +|xxx..xxx|o..........|--\n\ +|hhh..hhh|.........ooooo\n\ +|........|.htth.........\n\ +|xxx..xxx|.htth.........\n\ +|hhh..hhh|........ccc.cc\n\ +|........|.htth...c....t\n\ +|ww-++-ww|.htth...ch....\n\ +|........|........c...hd\n\ +|........|........c..ddd\n\ +|........|-----++-------\n\ +........................\n\ +........................\n\ +........................\n\ +.........|---|-------|--\n\ +........l|l.l|^...ccl|$ \n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 15), SEEX, SEEY); + add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("school", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("school", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_bookcase) { + place_items("novels", 50, i, j, i, j, false, 0); + place_items("manuals", 40, i, j, i, j, false, 0); + place_items("textbooks", 30, i, j, i, j, false, 0); + } + } + } + if (t_north == "school_2") { + rotate(2); + } else if (t_east == "school_2") { + rotate(3); + } else if (t_south == "school_2") { + rotate(0); + } else if (t_west == "school_2") { + rotate(1); + } + + + } else if (terrain_type == "school_6") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +|d.d.d.d.|....|.d.d.d.dw\n\ +|........|....|.h.h.h.hw\n\ +|........|....|.d.d.d.d|\n\ +|..ddd...+....|.h.h.h.h|\n\ +|l..hd...|....|.d.d.d.dw\n\ +|--------|....|........w\n\ +|l..hd...|....|........w\n\ +|..ddd...+....+..ddd...w\n\ +|........|....|..dh...l|\n\ +|........|....|--------|\n\ +|d.d.d.d.|....|..ttt..l|\n\ +|h.h.h.h.|....+........w\n\ +|d.d.d.d.|....|.h.h.h.hw\n\ +|h.h.h.h.|....|.d.d.d.dw\n\ +|d.d.d.d.|....|.h.h.h.hw\n\ +|h.h.h.h.|....|.d.d.d.d|\n\ +|........+....|.h.h.h.h|\n\ +|l..ttt..|....|.d.d.d.dw\n\ +|--------|....|........w\n\ +..............|........w\n\ +..............+..ddd...w\n\ +..............|..dh...l|\n\ +-----------++-|--------|\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); + add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("school", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("school", 60, i, j, i, j, false, 0); + } + } + } + if (t_north == "school_5") { + rotate(1); + } else if (t_east == "school_5") { + rotate(2); + } else if (t_south == "school_5") { + rotate(3); + } else if (t_west == "school_5") { + rotate(0); + } + + + } else if (terrain_type == "school_7") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + |--------| |--wwww--\n\ + |l..ll..l|-++-|ccccccll\n\ + |l..ll..l|....+........\n\ + |l..ll...+....|Scc..ccS\n\ + |l......l|....|........\n\ + |-+------|....|Scc..ccS\n\ + |...hd.oo|....|........\n\ + w..ddd...+....|Scc..ccS\n\ + w........|....|........\n\ + w........|....|........\n\ + wScc..ccS|....+..ddd...\n\ + |........|....|..dh..ll\n\ + |Scc..ccS|....|--------\n\ + w........|....+........\n\ + wScc..ccS|....|....|+|+\n\ + w........|....|SSS.|T|T\n\ + w........+....|----|-|-\n\ + |l.ttt.ll|....|..ttt..l\n\ + |--------|....+........\n\ + |........+....|.h.h.h.h\n\ + |+|+|....|....|.d.d.d.d\n\ + |T|T|.SSS|....|.h.h.h.h\n\ + |-|-|----|....|.d.d.d.d\n\ + |l..hd...|....|.h.h.h.h\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); + add_spawn("mon_zombie", rng(0, 4), SEEX, SEEY); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("school", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("chem_school", 60, i, j, i, j, false, 0); + } + } + } + if (t_north == "school_8") { + rotate(3); + } else if (t_east == "school_8") { + rotate(0); + } else if (t_south == "school_8") { + rotate(1); + } else if (t_west == "school_8") { + rotate(2); + } + + + } else if (terrain_type == "school_8") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +| |-\n\ +|ffffffffffGffffffffff|.\n\ +w sss w.\n\ +w $$ sss $$ w.\n\ +w $$ sss $$ w.\n\ +w sss |.\n\ +| ssssssssssss+.\n\ +w sss |.\n\ +w $$ sss $$ w.\n\ +w $$ sss $$ w.\n\ +w $$ sss $$ w.\n\ +| $$ sss $$ |.\n\ +| $$ sssss $$ |-\n\ +| $$ sssssss $$ \n\ +| $$ sssssss $$ \n\ +| $$ sssOsss $$ \n\ +| $$ sssssss $$ \n\ +| $$ sssss $$ \n\ +w $$ $$ \n\ +w \n\ +w \n\ +| \n\ +|-www-wwww--wwww-www----\n\ +|....................+.l\n", + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, f_null, + f_null, f_bench, f_table, f_null, f_null, f_null, f_null, f_toilet, + f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 4), SEEX, SEEY); + add_spawn("mon_zombie", rng(0, 1), SEEX, SEEY); + place_items("cleaning", 80, 22, 23, 23, 23, false, 0); + spawn_item(12, 15, "american_flag"); + if (t_north == "school_5") { + rotate(2); + } else if (t_east == "school_5") { + rotate(3); + } else if (t_south == "school_5") { + rotate(0); + } else if (t_west == "school_5") { + rotate(1); + } + + + } else if (terrain_type == "school_9") { + + mapf::formatted_set_simple(this, 0, 0, + "\ +wwww--wwww--wwww--wwww-|\n\ +........htth.htth.htth.|\n\ +.hhhhh..htth.htth.htth.w\n\ +.ttttt..htth.htth.htth.w\n\ +.ttttt..htth...........w\n\ +.hhhhh.................w\n\ +..............ccccccc..|\n\ +.hhhhh........c........|\n\ +.ttttt.....c..c.....eee|\n\ +.ttttt...xhc..|--..----|\n\ +.hhhhh..cccc..|c......ew\n\ +..............|O..tt..cw\n\ +|--------|-++-|O..tt..cw\n\ +|........+....|O......cw\n\ +|+|+|....|....|-|--...e|\n\ +|T|T|.SSS|....+l|r+....+\n\ +|-|-|----|....|-|------|\n\ +|ll.ttt..|....+........|\n\ +w........+....|....|+|+|\n\ +wh.h.h.h.|....|SSS.|T|T|\n\ +wd.d.d.d.|....|----|-|-|\n\ +|h.h.h.h.|....|..ttt..l|\n\ +|d.d.d.d.|....+........w\n\ +|h.h.h.h.|....|.h.h.h.hw\n", + mapf::basic_bind("e r _ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", t_floor, t_floor, + t_pavement, t_pavement_y, t_column, t_chainfence_h, t_chaingate_c, t_console_broken, t_shrub, + t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_locked_alarm, + t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("e r _ L O f G x $ ^ . - | # t + = D w T S e o h c d l s", f_fridge, f_rack, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, + f_locker, f_null)); + add_spawn("mon_zombie_child", rng(0, 20), SEEX, SEEY); + add_spawn("mon_zombie", rng(3, 10), SEEX, SEEY); + place_items("cleaning", 80, 15, 15, 15, 15, false, 0); + place_items("cannedfood", 95, 17, 15, 17, 15, false, 0); + place_items("fast_food", 95, 18, 11, 19, 12, false, 0); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_desk) { + place_items("school", 50, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_locker) { + place_items("school", 60, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_fridge) { + place_items("fridge", 90, i, j, i, j, false, 0); + } + } + } + if (t_north == "school_8") { + rotate(1); + } else if (t_east == "school_8") { + rotate(2); + } else if (t_south == "school_8") { + rotate(3); + } else if (t_west == "school_8") { + rotate(0); + } + + + } else if (terrain_type == "prison_1") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + % F |T,,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |----|------|--\n\ + % F \n\ + % F \n\ + % |--| \n\ + % |,,| \n\ + % |,,|fffffffffffffffff\n\ + % |--| \n\ + % \n\ + %%%%%%%%%%%%%%%%%%%%%%%\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, + t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, + f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, + f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + } + } + if (t_north == "prison_2") { + rotate(3); + } else if (t_east == "prison_2") { + rotate(0); + } else if (t_south == "prison_2") { + rotate(1); + } else if (t_west == "prison_2") { + rotate(2); + } + + + } else if (terrain_type == "prison_2") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +,T|s________________s|T,\n\ +--|s________________s|--\n\ +bb|s________________s|bb\n\ +,,|s________________s|,,\n\ +,T|s________________s|T,\n\ +--|s________________s|--\n\ +bb|s________________s|bb\n\ +,,|ss______________ss|,,\n\ +,T| ss____________ss |T,\n\ +--| ss__________ss |--\n\ + ss________ss \n\ + ss______ss \n\ + ss______ss \n\ + ss______ss \n\ +fffffffffHHHHHHfffffffff\n\ + ______ \n\ + ______ \n\ +%%%%%%%%%______%%%%%%%%%\n\ + ______ \n\ + |-+w|FFFFFF \n\ + w,h,w______ \n\ + wdxdw______ \n\ + |www|______ \n\ + ______ \n", + mapf::basic_bind("H # E g r + = h c l w s _ o d x T b G , B - | % f F S", t_chaingate_l, t_floor, + t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, + t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, + t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("H # E g r + = h c l w s _ o d x T b G , B - | % f F S", f_null, f_bench, + f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, + f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + } + } + add_spawn("mon_eyebot", 1, rng(5, 18), rng(12, 18)); + if (t_north == "prison_5") { + rotate(0); + } else if (t_east == "prison_5") { + rotate(1); + } else if (t_south == "prison_5") { + rotate(2); + } else if (t_west == "prison_5") { + rotate(3); + } + + + } else if (terrain_type == "prison_3") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +,,B,,,,,,B,,,T| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +--|------|----| F % \n\ + F % \n\ + F % \n\ + |--| % \n\ + |,,| % \n\ +fffffffffffffffff|,,| % \n\ + |--| % \n\ + % \n\ +%%%%%%%%%%%%%%%%%%%%%%% \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, + t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, + f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, + f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + } + } + if (t_north == "prison_2") { + rotate(1); + } else if (t_east == "prison_2") { + rotate(2); + } else if (t_south == "prison_2") { + rotate(3); + } else if (t_west == "prison_2") { + rotate(0); + } + + + } else if (terrain_type == "prison_4") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + % F |----|,,,,,,|--\n\ + % F |bb,,B,,,,,,|,,\n\ + % F |,,,,G,,,,,,|,,\n\ + % F |T,,,B,,,,,,|,,\n\ + % F |-|-|--|BBGGBB|-+\n\ + % F |,,dB,,,,,,,,,,,,\n\ + % F |,hdB,,,,,,,,,,,,\n\ + % F |,,dB,,,,,,,,,,,,\n\ + % F |,,,G,,,,,,,,,,,,\n\ + % F |-|-|--|BBGGBB|--\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, + t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, + f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, + f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + if (this->furn(i, j) == f_desk) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("office", 30, i, j, i, j, false, 0); + } + } + } + if (t_north == "prison_5") { + rotate(3); + } else if (t_east == "prison_5") { + rotate(0); + } else if (t_south == "prison_5") { + rotate(1); + } else if (t_west == "prison_5") { + rotate(2); + } + + + } else if (terrain_type == "prison_5") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +--|o,,,,|------|,,,,,|--\n\ +,<|o,,,,G,,rr,cB,,,,,|<,\n\ +,,|--+--|,,,,,cBBGGBB|,,\n\ +,,|,,,,,Bc,,h,cB,,,,,|,,\n\ ++-|,,,,,BcccxccB,,,,,|-+\n\ +,,B,,,,,BBBBBBBB,,,,,B,,\n\ +,,G,,,,,,,,,,,,,,,,,,G,,\n\ +,,G,,,,,,,,,,,,,,,,,,G,,\n\ +,,B,,,,,,,,,,,,,,,,,,B,,\n\ +--|--|-|BBBGGBBB|-+--|--\n\ +bb|TS|l|,,,,,,,,|,,,,|bb\n\ +,,|,,|=|---++--||,,,,|,,\n\ +,T|,,=,,,,,,,,#|,,,,,|T,\n\ +--|--|-+|,,,,,#|h|h|h|--\n\ +bb|,,,,,|#,,,,#|g|g|g|bb\n\ +,,|,,,,,|#,,,,#|h|h|h|,,\n\ +,T|,ddd,|#,,,,,|,,,,,|T,\n\ +--|,,h,,|#,,,,,=,,,,,|--\n\ +bb|,,,,,|,,,,,,|,,,,,|bb\n\ +,,|-ggg-|gg++gg|-ggg-|,,\n\ +,T| ssssssssssss |T,\n\ +--| ss__________ss |--\n\ +bb| ss____________ss |bb\n\ +,,|ss______________ss|,,\n", + mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", t_stairs_down, t_floor, + t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, + t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, + t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", f_null, f_bench, + f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, + f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_sink)); + add_spawn("mon_secubot", rng(1, 2), 11, 7); + add_spawn("mon_zombie_cop", rng(0, 3), rng(12, 18), rng(4, 19)); + place_items("pistols", 30, 11, 1, 12, 1, false, 0); + place_items("ammo", 50, 11, 1, 12, 1, false, 0); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + if (this->furn(i, j) == f_desk) { + place_items("magazines", 40, i, j, i, j, false, 0); + place_items("office", 40, i, j, i, j, false, 0); + } + } + } + if (t_north == "prison_2") { + rotate(2); + } else if (t_east == "prison_2") { + rotate(3); + } else if (t_south == "prison_2") { + rotate(0); + } else if (t_west == "prison_2") { + rotate(1); + } + + + } else if (terrain_type == "prison_6") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +--|,,,,,,|----| F % \n\ +,,|,,,,,,B,,bb| F % \n\ +,,|,,,,,,G,,,,| F % \n\ +,,|,,,,,,B,,,T| F % \n\ ++-|BBGGBB|--|-|-| F % \n\ +,,,,,,,,,,,,Bd,,| F % \n\ +,,,,,,,,,,,,Bdh,| F % \n\ +,,,,,,,,,,,,Bd,,| F % \n\ +,,,,,,,,,,,,G,,,| F % \n\ +--|BBGGBB|--|-|-| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +,,G,,,,,,G,,,,| F % \n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, + t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, + f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, + f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + if (this->furn(i, j) == f_desk) { + place_items("magazines", 30, i, j, i, j, false, 0); + place_items("office", 30, i, j, i, j, false, 0); + } + } + } + if (t_north == "prison_5") { + rotate(1); + } else if (t_east == "prison_5") { + rotate(2); + } else if (t_south == "prison_5") { + rotate(3); + } else if (t_west == "prison_5") { + rotate(0); + } + + + } else if (terrain_type == "prison_7") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + %%%%%%%%%%%%%%%%%%%%%%%\n\ + % \n\ + % |--| \n\ + % |,,|fffffffffffffffff\n\ + % |,,| \n\ + % |--| \n\ + % F \n\ + % F |----|------|--\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |T,,,B,,,,,,B,,\n\ + % F |----|,,,,,,|--\n\ + % F |bb,,B,,,,,,B,,\n\ + % F |,,,,G,,,,,,G,,\n\ + % F |T,,,B,,,,,,B,,\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, + t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, + f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, + f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + } + } + if (t_north == "prison_8") { + rotate(3); + } else if (t_east == "prison_8") { + rotate(0); + } else if (t_south == "prison_8") { + rotate(1); + } else if (t_west == "prison_8") { + rotate(2); + } + + + } else if (terrain_type == "prison_8") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +%%%%%%%%%%%%%%%%%%%%%%%%\n\ + \n\ + \n\ +ffffffffffffffffffffffff\n\ + \n\ + \n\ + \n\ +--| |--\n\ +,T| |T,\n\ +,,|------------------|,,\n\ +bb|ssssssssssssssssss|bb\n\ +--|ssssssssssssssssss|--\n\ +,T|ssssssssssssssssss|T,\n\ +,,|ssEsssssssssssssss|,,\n\ +bb|ssssssssssssssssss|bb\n\ +--|ssEsssssssssssssss|--\n\ +,T|ssssssssssssssssss|T,\n\ +,,|sssEssEssEssssssss|,,\n\ +bb|ssssssssssssssssss|bb\n\ +--|-----|------|-++--|--\n\ +,T|oooo<|,bb,,l|,,,,,|T,\n\ +,,|,,,,,=,,,,,l|,,,,,|,,\n\ +bb|o,,,,|,,,,,l|,,,,,|bb\n", + mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", t_stairs_down, t_floor, + t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, + t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, + t_floor, t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("< # E g r + = h c l w s _ o d x T b G , B - | % f F S", f_null, f_bench, + f_exercise, f_null, f_rack, f_null, f_null, f_chair, f_counter, + f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + if (this->ter(i, j) == t_sidewalk) { + if (one_in(200)) { + if (!one_in(3)) { + add_spawn("mon_zombie", 1, i, j); + } else { + add_spawn("mon_zombie_brute", 1, i, j); + } + } + } + if (this->furn(i, j) == f_locker) { + place_items("softdrugs", 40, i, j, i, j, false, 0); + place_items("harddrugs", 40, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_bookcase) { + place_items("novels", 70, i, j, i, j, false, 0); + } + } + } + if (t_north == "prison_5") { + rotate(2); + } else if (t_east == "prison_5") { + rotate(3); + } else if (t_south == "prison_5") { + rotate(0); + } else if (t_west == "prison_5") { + rotate(1); + } + + + } else if (terrain_type == "prison_9") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +%%%%%%%%%%%%%%%%%%%%%%% \n\ + % \n\ + |--| % \n\ +fffffffffffffffff|,,| % \n\ + |,,| % \n\ + |--| % \n\ + F % \n\ +--|------|----| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,,T| F % \n\ +--|,,,,,,|----| F % \n\ +,,B,,,,,,B,,bb| F % \n\ +,,G,,,,,,G,,,,| F % \n\ +,,B,,,,,,B,,,T| F % \n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", t_floor, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, + t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G , B - | % f F S", f_bench, f_exercise, f_null, + f_rack, f_null, f_null, f_chair, f_counter, f_locker, f_null, f_null, + f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + } + } + if (t_north == "prison_8") { + rotate(1); + } else if (t_east == "prison_8") { + rotate(2); + } else if (t_south == "prison_8") { + rotate(3); + } else if (t_west == "prison_8") { + rotate(0); + } + + + } else if (terrain_type == "prison_b_entrance") { + + fill_background(this, t_rock); + mapf::formatted_set_simple(this, 0, 0, + "\ +,T|------------------|##\n\ +--|#####################\n\ +,,|---------------------\n\ +,,G,,,,,,,,,,,,,,,,,,,,,\n\ +,,G,,,,,,,,,,,,,,,,,,,,,\n\ +--|---------------------\n\ +bb|#####################\n\ +,,|#####################\n\ +,T|#####################\n\ +--|#####################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, + f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, + f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_toilet) { + place_items("novels", 30, i, j, i, j, false, 0); + if (!one_in(3)) { + add_spawn("mon_zombie", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } + } + } + } + if (t_west != "prison_b") { + rotate(1); + } else if (t_north != "prison_b") { + rotate(2); + } else if (t_east != "prison_b") { + rotate(3); + } + + + } else if (terrain_type == "prison_b") { + + fill_background(this, &grass_or_dirt); + if (t_above == "prison_1") { + mapf::formatted_set_simple(this, 0, 0, + "\ +#########|bb,,|,,,,,,|,,\n\ +#########|----|,,,,,,|--\n\ +#########|T,,,|,,,,,,,,,\n\ +#########|,,,,G,,,,,,,,,\n\ +#########|bb,,|,,,,,,,,,\n\ +#########|----|,,,,,,|--\n\ +#########|T,,,|,,,,,,|,,\n\ +#########|,,,,G,,,,,,G,,\n\ +#########|bb,,|,,,,,,|,,\n\ +#########|----|------|--\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, + f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, + f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_sink)); + if (t_south == "prison_b_entrance") { + rotate(1); + } else if (t_west == "prison_b_entrance") { + rotate(2); + } else if (t_north == "prison_b_entrance") { + rotate(3); + } + } + + if (t_above == "prison_3") { + mapf::formatted_set_simple(this, 0, 0, + "\ +####|,,|################\n\ +####|,,|################\n\ +----|,,|################\n\ +,,,,,,,|################\n\ +,,,,,,,|################\n\ +-------|################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, + f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, + f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_sink)); + if (t_north == "prison_b_entrance") { + rotate(1); + } else if (t_east == "prison_b_entrance") { + rotate(2); + } else if (t_south == "prison_b_entrance") { + rotate(3); + } + } + + if (t_above == "prison_4") { + mapf::formatted_set_simple(this, 0, 0, + "\ +############|,,,+,,|#|--\n\ +############|---|,,|#|,,\n\ +################|,,|#|,,\n\ +################|,,|#|,,\n\ +################|,,|#|-G\n\ +################|GG|-|,,\n\ +################|,,,,,,,\n\ +################|,,,,,,,\n\ +################|GG|-|,,\n\ +################|,,|#|--\n\ +################|,,|####\n\ +################|,,|####\n\ +################|,,|####\n\ +################|,,|####\n\ +################|,,|####\n\ +################|,,|####\n\ +################|,,|####\n\ +#########|----|-|++|-|--\n\ +#########|T,,,|,,,,,,|,,\n\ +#########|,,,,G,,,,,,G,,\n\ +#########|bb,,|,,,,,,|,,\n\ +#########|----|,,,,,,|--\n\ +#########|T,,,|,,,,,,|,,\n\ +#########|,,,,G,,,,,,G,,\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, + f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, + f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_sink)); + if (t_north != "prison_b") { + rotate(1); + } else if (t_east != "prison_b") { + rotate(2); + } else if (t_south != "prison_b") { + rotate(3); + } + } + + if (t_above == "prison_5") { + mapf::formatted_set_simple(this, 0, 0, + "\ +--|t,,,,|------|c,,,,|--\n\ +,>|h,,,,G,,rr,cB,,,,,|>,\n\ +,,|--+--|,,,,,cBccccc|,,\n\ +,,|,,,,,Bc,,h,cB,,,,,|,,\n\ +G-|,,,,,BcccxccB,,,,,|-G\n\ +,,B,,,,,BBBBBBBB,,,,,B,,\n\ +,,G,,,,,,,,,,,,,,,,,,G,,\n\ +,,G,,,,,,,,,,,,,,,,,,G,,\n\ +,,B,,,,,,,,,,,,,,,,,,B,,\n\ +--|,,,,,,,,,,,,,,,,,,|-+\n\ +##|,htth,,,,,,,,htth,|,,\n\ +##|,htth,,,,,,,,htth,|,,\n\ +##|,htth,,,,,,,,htth,|h,\n\ +##|,htth,O,,,,O,htth,|h,\n\ +##|,htth,,,,,,,,htth,|h,\n\ +##|,,,,,,,,,,,,,,,,,,|,,\n\ +##|,,,,,,,,,,,,,,,,,,|--\n\ +--|,htth,,,,,,,,htth,|##\n\ +bb|,htth,O,,,,O,htth,|##\n\ +,,|,htth,,,,,,,,htth,|##\n\ +,T|,htth,,,,,,,,htth,|##\n\ +--|,htth,,,,,,,,htth,|##\n\ +bb|,,,,,,,,,,,,,,,,,,|##\n\ +,,|,,,,,,,,,,,,,,,,,,|##\n", + mapf::basic_bind("t > O # E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_floor, + t_stairs_up, t_column, t_rock, t_floor, t_reinforced_glass_h, t_floor, t_door_locked_interior, + t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, + t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, + t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("t > O # E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_table, f_null, + f_null, f_null, f_exercise, f_null, f_rack, f_null, f_null, + f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, + f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_sink)); + add_spawn("mon_zombie_cop", rng(0, 2), 2, 0); + add_spawn("mon_zombie_cop", rng(0, 2), 2, 23); + place_items("pistols", 30, 11, 1, 12, 1, false, 0); + place_items("ammo", 40, 11, 1, 12, 1, false, 0); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_chair) { + if (one_in(4)) { + if (!one_in(3)) { + add_spawn("mon_zombie", 1, i, j); + } else if (one_in(10)) { + add_spawn("mon_zombie_cop", 1, i, j); + } else { + add_spawn("mon_zombie_brute", 1, i, j); + } + } + } + } + } + if (t_west == "prison_b_entrance") { + rotate(1); + } else if (t_north == "prison_b_entrance") { + rotate(2); + } else if (t_east == "prison_b_entrance") { + rotate(3); + } + } + + if (t_above == "prison_6") { + mapf::formatted_set_simple(this, 0, 0, + "\ ++-|#####################\n\ +,,|#####################\n\ +,,|#####################\n\ +,,|-------------|#######\n\ +G-|rr,DDDD,,DDDD|#######\n\ +,,+,,,,,,,,,,,,,|#######\n\ +,,|,,,,tt,tt,tt,|#######\n\ +,,c,,,,,,,,,,,,,|#######\n\ +,,|rr,WWWW,,WWWW|#######\n\ ++-|-|---|-------|#######\n\ +,,,,+,,r|###############\n\ +,,,,|,,r|###############\n\ +h,h,g,,,|###############\n\ +h,h,g,t,|###############\n\ +h,h,g,,,|###############\n\ +,,,,|,,l|###############\n\ +----|++||###############\n\ +####|,,|################\n\ +####|,,|################\n\ +####|,,|################\n\ +####|,,|################\n\ +####|,,|################\n\ +####|,,|################\n\ +####|,,|################\n", + mapf::basic_bind("D W # t g r + = h c l w s _ o d x T b G . , B - | % f F S", t_floor, t_floor, + t_rock, t_floor, t_reinforced_glass_v, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, + t_floor, t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, + t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("D W # t g r + = h c l w s _ o d x T b G . , B - | % f F S", f_dryer, f_washer, + f_null, f_table, f_null, f_rack, f_null, f_null, f_chair, + f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, f_null, + f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_sink)); + spawn_item(7, 11, "visions_solitude"); + add_spawn("mon_zombie_brute", 1, 6, 13); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker || this->furn(i, j) == f_rack ) { + place_items("science", 30, i, j, i, j, false, 0); + place_items("cleaning", 30, i, j, i, j, false, 0); + } + } + } + if (t_south != "prison_b") { + rotate(1); + } else if (t_west != "prison_b") { + rotate(2); + } else if (t_north != "prison_b") { + rotate(3); + } + } + + else if (t_above == "prison_7") { + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +############|----------|\n\ +############|..........|\n\ +############|..........|\n\ +############|...|--|...|\n\ +############|...|##|...|\n\ +############|...|##|...|\n\ +############|...|##|...|\n\ +############|...|##|...|\n\ +############|...|--|...|\n\ +############|..........|\n\ +############|..........|\n\ +############|---|++|---|\n\ +############|rrr|,,|####\n", + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", t_rock, t_floor, + t_reinforced_glass_h, t_floor, t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, + t_window, t_sidewalk, t_pavement, t_floor, t_floor, t_console_broken, t_floor, t_floor, + t_door_bar_locked, t_grass, t_floor, t_bars, t_concrete_h, t_concrete_v, t_fence_barbed, + t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("# E g r + = h c l w s _ o d x T b G . , B - | % f F S", f_null, f_exercise, + f_null, f_rack, f_null, f_null, f_chair, f_counter, f_locker, + f_null, f_null, f_null, f_bookcase, f_desk, f_null, f_toilet, f_bed, f_null, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker || this->furn(i, j) == f_rack ) { + place_items("cleaning", 60, i, j, i, j, false, 0); + } + } + } + if (t_west == "prison_b" && t_south == "prison_b") { + rotate(1); + } else if (t_north == "prison_b" && t_west == "prison_b") { + rotate(2); + } else if (t_north == "prison_b" && t_east == "prison_b") { + rotate(3); + } + } else if (t_above == "prison_8") { + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +##|-|-|-|------|########\n\ +##|T|T|T|l,,,,l|########\n\ +##|=|=|=|l,,,,l|########\n\ +##|,,,,,,,,,,,l|########\n\ +##|-----|,,,,,l|--------\n\ +##|,,,,>|,,,,,l|c,cSScee\n\ +##|h,,,,+,,,,,,|o,,,,,,,\n\ +##|t,,,,|cScScc|o,,,,,,,\n", + mapf::basic_bind("t e o > O # E g r + = h c l w s _ d x T b G . , B - | % f F S", t_floor, t_floor, + t_floor, t_stairs_up, t_column, t_rock, t_floor, t_reinforced_glass_h, t_floor, + t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, + t_floor, t_console_broken, t_floor, t_floor, t_door_bar_locked, t_grass, t_floor, t_bars, + t_concrete_h, t_concrete_v, t_fence_barbed, t_chainfence_h, t_chainfence_v, t_floor), + mapf::basic_bind("t e o > O # E g r + = h c l w s _ d x T b G . , B - | % f F S", f_table, f_fridge, + f_oven, f_null, f_null, f_null, f_exercise, f_null, f_rack, f_null, + f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_desk, f_null, + f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_null, f_sink)); + add_spawn("mon_zombie_cop", rng(0, 2), 12, 19); + if (t_east != "prison_b") { + rotate(1); + } else if (t_south != "prison_b") { + rotate(2); + } else if (t_west != "prison_b") { + rotate(3); + } + } else if (t_above == "prison_9") { + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +##|-------|#############\n\ +##|r,,r,,r|#############\n\ +##|r,,r,,r|#############\n\ +##|r,,r,,r|#############\n\ +--|r,,r,,r|#############\n\ +ee|,,,,,,r|#############\n\ +,,+,,,,,,r|#############\n\ +,,|-------|#############\n", + mapf::basic_bind("e # r + = h c l w s _ o d x T b G . , B - | S", t_floor, t_rock, t_floor, + t_door_locked_interior, t_door_c, t_floor, t_floor, t_floor, t_window, t_sidewalk, t_pavement, + t_floor, t_floor, t_console_broken, t_floor, t_floor, t_door_metal_locked, t_grass, t_floor, + t_bars, t_concrete_h, t_concrete_v, t_floor), + mapf::basic_bind("e # r + = h c l w s _ o d x T b G . , B - | S", f_fridge, f_null, f_rack, f_null, + f_null, f_chair, f_counter, f_locker, f_null, f_null, f_null, f_bookcase, f_desk, + f_null, f_toilet, f_bed, f_null, f_null, f_null, f_null, f_null, + f_null, f_sink)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_rack) { + place_items("cannedfood", 40, i, j, i, j, false, 0); + place_items("pasta", 40, i, j, i, j, false, 0); + } + } + } + if (t_north == "prison_b" && t_west == "prison_b") { + rotate(1); + } else if (t_north == "prison_b" && t_east == "prison_b") { + rotate(2); + } else if (t_south == "prison_b" && t_east == "prison_b") { + rotate(3); + } + } + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_toilet) { + if (one_in(3)) { + add_spawn("mon_zombie_brute", rng(0, 1), i, j); + } else if (one_in(3)) { + add_spawn("mon_zombie_grabber", rng(0, 1), i, j); + } else if (one_in(3)) { + add_spawn("mon_zombie_electric", rng(0, 1), i, j); + } else { + add_spawn("mon_zombie", rng(0, 1), i, j); + } + } + if (this->furn(i, j) == f_bed) { + place_items("novels", 30, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_fridge) { + place_items("fridge", 60, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_locker) { + place_items("cop_weapons", 20, i, j, i, j, false, 0); + place_items("cop_torso", 20, i, j, i, j, false, 0); + place_items("cop_pants", 20, i, j, i, j, false, 0); + place_items("cop_shoes", 20, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_washer || this->furn(i, j) == f_dryer) { + if (one_in(4)) { + spawn_item(i, j, "blanket", 3); + } else if (one_in(3)) { + spawn_item(i, j, "jumpsuit", 3); + } + } + } + } + if (t_north == "prison_2") { + rotate(3); + } else if (t_east == "prison_2") { + rotate(0); + } else if (t_south == "prison_2") { + rotate(1); + } else if (t_west == "prison_2") { + rotate(2); + } + + + } else if (terrain_type == "hotel_tower_1_1") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +ssssssssssssssssssssssss\n", + mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, + f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, + f_chair, f_counter, f_dresser, f_locker, f_null)); + place_spawns(g, "GROUP_ZOMBIE", 2, 6, 6, 18, 18, density); + if (t_north == "hotel_tower_1_2") { + rotate(3); + } else if (t_east == "hotel_tower_1_2") { + rotate(0); + } else if (t_south == "hotel_tower_1_2") { + rotate(1); + } else if (t_west == "hotel_tower_1_2") { + rotate(2); + } + + + } else if (terrain_type == "hotel_tower_1_2") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +,_____________________,_\n\ +,________sssss________,_\n\ +,________s s________,_\n\ +,________s s________,_\n\ +s________s s________ss\n\ +s________s s________ss\n\ +,________s s________,_\n\ +,________s s________,_\n\ +,________s s________,_\n\ +,________s s________,_\n\ +,________sssss________,_\n\ +,_____________________,_\n\ +________________________\n\ +________________________\n\ +________________________\n\ +________________________\n\ +________________________\n\ +,_____________________,_\n\ +,________sssss________,_\n\ +,________s s________,_\n\ +,________s s________,_\n\ +,________s s________,_\n\ +,________s s________,_\n\ +s________sssss________ss\n", + mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, + f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, + f_chair, f_counter, f_dresser, f_locker, f_null)); + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + if (t_north == "hotel_tower_1_5") { + rotate(0); + } else if (t_east == "hotel_tower_1_5") { + rotate(1); + } else if (t_south == "hotel_tower_1_5") { + rotate(2); + } else if (t_west == "hotel_tower_1_5") { + rotate(3); + } + + + } else if (terrain_type == "hotel_tower_1_3") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +sssssssssssssssssssssss\n\ +sssssssssssssssssssssss\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +sssssssssssssssssssssss\n", + mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_pavement, t_pavement_y, + t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("_ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, + f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, + f_chair, f_counter, f_dresser, f_locker, f_null)); + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + if (t_north == "hotel_tower_1_2") { + rotate(1); + if (x_in_y(1, 12)) { + add_vehicle (g, "car", 12, 18, 180); + } + } else if (t_east == "hotel_tower_1_2") { + rotate(2); + if (x_in_y(1, 12)) { + add_vehicle (g, "car", 9, 7, 0); + } + } else if (t_south == "hotel_tower_1_2") { + rotate(3); + if (x_in_y(1, 12)) { + add_vehicle (g, "car", 12, 18, 180); + } + } else if (t_west == "hotel_tower_1_2") { + rotate(0); + if (x_in_y(1, 12)) { + add_vehicle (g, "car", 17, 7, 0); + } + } + + + } else if (terrain_type == "hotel_tower_1_4") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +s |c..BB|c..BB|c..BB|\n\ +s |c..BB|c..BB|c..BB|\n\ +s |....d|....d|....d|\n\ +s |-www-|-www-|-www-|\n\ +s \n\ +s T T \n\ +s \n\ +s \n\ +ssssssssssssssssssssssss\n\ +ssssssssssssssssssssssss\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_______________________\n\ +s_____,_____,_____,_____\n\ +s_____,_____,_____,_____\n", + mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_floor, t_pavement, + t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_tree_young, t_floor, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_bed, f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, + f_null, f_null, f_null, f_null, f_null, f_sink, f_fridge, + f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser && x_in_y(1, 2)) { + place_items("dresser", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_counter && x_in_y(1, 5)) { + place_items("magazines", 30, i, j, i, j, false, 0); + } + } + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + if (t_north == "hotel_tower_1_5") { + rotate(3); + } else if (t_east == "hotel_tower_1_5") { + rotate(0); + } else if (t_south == "hotel_tower_1_5") { + rotate(1); + } else if (t_west == "hotel_tower_1_5") { + rotate(2); + } + + + } else if (terrain_type == "hotel_tower_1_5") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +c..BB|t.........t|BB..c|\n\ +h..BB|h.........h|BB..c|\n\ +th..d|...........|d....|\n\ +-www||...........||www-|\n\ + |............^| \n\ + T V.hh......|-+-| T \n\ + V.tt......|r.D| \n\ + V.tt......c..h| \n\ +ssss|.hh......x...|sssss\n\ +ssssV.........c...|sssss\n\ +,sssV.........cccc|sss,_\n\ +,sssV............^Vsss,_\n\ +,sss|^............Vsss,_\n\ +,sss|HHHGGHHHGGHHH|sss,_\n\ +,sssssssssssssssssssss,_\n\ +,sssssCsssssssssCsssss,_\n\ +_sssssssssssssssssssss__\n\ +________________________\n\ +________________________\n\ +________________________\n\ +________________________\n\ +________________________\n\ +,_____________________,_\n\ +,_____________________,_\n", + mapf::basic_bind("T r V H G D B _ , C x $ ^ . - | # t + = w S e o h c d l s", t_tree_young, t_floor, + t_wall_glass_v, t_wall_glass_h, t_door_glass_c, t_floor, t_floor, t_pavement, t_pavement_y, + t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, + t_door_c, t_door_locked_alarm, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("T r V H G D B _ , C x $ ^ . - | # t + = w S e o h c d l s", f_null, f_rack, + f_null, f_null, f_null, f_desk, f_bed, f_null, f_null, f_null, + f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, + f_null, f_null, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, + f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser && x_in_y(1, 2)) { + place_items("dresser", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_counter && x_in_y(1, 5)) { + place_items("magazines", 30, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + if (x_in_y(1, 2)) { + add_spawn("mon_zombie", 2, 15, 7); + } + if (x_in_y(1, 2)) { + add_spawn("mon_zombie", rng(1, 8), 12, 11); + } + } + { + int num_carts = rng(1, 3); + for( int i = 0; i < num_carts; i++ ) { + add_vehicle (g, "luggage_cart", rng(5, 18), rng(2, 12), 90, -1, -1, false); + } + } + if (t_north == "hotel_tower_1_2") { + rotate(2); + } else if (t_east == "hotel_tower_1_2") { + rotate(3); + } else if (t_south == "hotel_tower_1_2") { + rotate(0); + } else if (t_west == "hotel_tower_1_2") { + rotate(1); + } + + + } else if (terrain_type == "hotel_tower_1_6") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +BB..c|BB..c|BB..c| s\n\ +BB..c|BB..c|BB..c| s\n\ +d....|d....|d....| s\n\ +-www-|-www-|-www-| s\n\ + s\n\ + T T s\n\ + s\n\ + s\n\ +sssssssssssssssssssssss\n\ +sssssssssssssssssssssss\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +______________________s\n\ +____,_____,_____,_____s\n\ +____,_____,_____,_____s\n", + mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_floor, t_pavement, + t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, t_tree_young, t_floor, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_bed, f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, + f_null, f_null, f_null, f_null, f_null, f_sink, f_fridge, + f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser && x_in_y(1, 2)) { + place_items("dresser", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_counter && x_in_y(1, 5)) { + place_items("magazines", 30, i, j, i, j, false, 0); + } + } + } + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + if (t_north == "hotel_tower_1_5") { + rotate(1); + } else if (t_east == "hotel_tower_1_5") { + rotate(2); + } else if (t_south == "hotel_tower_1_5") { + rotate(3); + } else if (t_west == "hotel_tower_1_5") { + rotate(0); + } + + + } else if (terrain_type == "hotel_tower_1_7") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |-www-|-www-|-www-|\n\ + |....d|th..d|....d|\n\ + |c..BB|h..BB|c..BB|\n\ + |c..BB|c..BB|c..BB|\n\ + |c....|c...d|c....|\n\ + |....h|c..BB|....h|\n\ + |...ht|...BB|...ht|\n\ + |..|--|..|--|..|--|\n\ + |..+.S|..+.S|..+.S|\n\ + |..|.T|..|.T|..|.T|\n\ + |--|..|bb|..|bb|..|bb|\n\ + |..|-D|--|-D|--|-D|--|\n\ +ss|..|..................\n\ +ss=..+..................\n\ +ss|..|..................\n\ +s |.<|-D|--|-D|--|-D|--|\n\ +s |--|..|bb|..|bb|..|bb|\n\ +s |..|.T|..|.T|..|.T|\n\ +s |..+.S|..+.S|..+.S|\n\ +s |..|--|..|--|..|--|\n\ +s |...ht|...ht|...ht|\n\ +s |....h|....h|....h|\n\ +s |c....|c....|c....|\n", + mapf::basic_bind("D b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", t_door_locked_interior, + t_floor, t_stairs_up, t_stairs_down, t_floor, t_pavement, t_pavement_y, t_column, + t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, + t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind("D b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", f_null, + f_bathtub, f_null, f_null, f_bed, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, + f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser && x_in_y(1, 2)) { + place_items("dresser", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_counter && x_in_y(1, 5)) { + place_items("magazines", 30, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(0, 12), 14, 11); + } + if (t_north == "hotel_tower_1_8") { + rotate(3); + } else if (t_east == "hotel_tower_1_8") { + rotate(0); + } else if (t_south == "hotel_tower_1_8") { + rotate(1); + } else if (t_west == "hotel_tower_1_8") { + rotate(2); + } + + + } else if (terrain_type == "hotel_tower_1_8") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +-www-|-www-|-www-|-www-|\n\ +....d|th..d|d....|d....|\n\ +c..BB|h..BB|BB..c|BB..c|\n\ +c..BB|c..BB|BB..c|BB..c|\n\ +c....|c...d|....c|....c|\n\ +....h|c..BB|h....|h....|\n\ +...ht|...BB|th...|th...|\n\ +..|--|..|--|--|..|--|..|\n\ +..+.S|..+.S|S.+..|S.+..|\n\ +..|.T|..|.T|T.|..|T.|..|\n\ +..|bb|..|bb|bb|..|bb|..|\n\ +-D|--|-D|--|--|D-|--|D-|\n\ +........................\n\ +........................\n\ +........................\n\ +-D|--|---|...|---|--|D-|\n\ +..|bb|EEE=...|xEE|bb|..|\n\ +..|.T|EEE=...=EEE|T.|..|\n\ +..+.S|EEx|...=EEE|S.+..|\n\ +..|--|---|...|---|--|..|\n\ +...BB|^.........^|th...|\n\ +c..BB|h.........h|h....|\n\ +c...d|t.........t|....c|\n", + mapf::basic_bind("E b > < B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", t_elevator, t_floor, + t_stairs_up, t_stairs_down, t_floor, t_pavement, t_pavement_y, t_column, t_elevator_control_off, + t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_floor, t_floor, t_door_c, t_door_metal_c, + t_door_locked_interior, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E b > < B _ , C x $ ^ . - | # t + = D w T S e o h c d l s", f_null, f_bathtub, + f_null, f_null, f_bed, f_null, f_null, f_null, f_null, + f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, + f_dresser, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser && x_in_y(1, 2)) { + place_items("dresser", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_counter && x_in_y(1, 5)) { + place_items("magazines", 30, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 23, 23, 3, density); + } else { + add_spawn("mon_zombie", rng(1, 18), 12, 12); + } + if (t_north == "hotel_tower_1_5") { + rotate(2); + } else if (t_east == "hotel_tower_1_5") { + rotate(3); + } else if (t_south == "hotel_tower_1_5") { + rotate(0); + } else if (t_west == "hotel_tower_1_5") { + rotate(1); + } + + + } else if (terrain_type == "hotel_tower_1_9") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +-www-|-www-|-www-| \n\ +d....|d..ht|d....| \n\ +BB..c|BB..h|BB..c| \n\ +BB..c|BB..c|BB..c| \n\ +....c|d...c|....c| \n\ +h....|BB..c|h....| \n\ +th...|BB...|th...| \n\ +--|..|--|..|--|..| \n\ +S.+..|S.+..|S.+..| \n\ +T.|..|T.|..|T.|..| \n\ +bb|..|bb|..|bb|..|--| \n\ +--|D-|--|D-|--|D-|..| \n\ +................^|..|ss \n\ +.................+..=ss \n\ +.................|..|ss \n\ +--|D-|--|D-|--|D-|<.| s \n\ +bb|..|bb|..|bb|..|--| s \n\ +T.|..|T.|..|T.|..| s \n\ +S.+..|S.+..|S.+..| s \n\ +--|..|--|..|--|..| s \n\ +th...|th...|th...| s \n\ +h....|h....|h....| s \n\ +....c|....c|....c| s \n", + mapf::basic_bind("D E b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", + t_door_locked_interior, t_elevator, t_floor, t_stairs_up, t_stairs_down, t_floor, t_pavement, + t_pavement_y, t_column, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, + t_floor, t_floor, t_door_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("D E b > < B _ , C x $ ^ . - | # t + = w T S e o h c d l s", f_null, + f_null, f_bathtub, f_null, f_null, f_bed, f_null, f_null, f_null, + f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_bench, f_table, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, + f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser && x_in_y(1, 2)) { + place_items("dresser", 70, i, j, i, j, false, 0); + } else if (this->furn(i, j) == f_counter && x_in_y(1, 5)) { + place_items("magazines", 30, i, j, i, j, false, 0); + } + } + } + if (density > 1) { + place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, 23, 23, density); + } else { + add_spawn("mon_zombie", rng(1, 8), 12, 12); + } + if (t_north == "hotel_tower_1_8") { + rotate(1); + } else if (t_east == "hotel_tower_1_8") { + rotate(2); + } else if (t_south == "hotel_tower_1_8") { + rotate(3); + } else if (t_west == "hotel_tower_1_8") { + rotate(0); + } + + + } else if (terrain_type == "hotel_tower_b_1") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +#####|--------------|---\n\ +#####|......E..ee...|^ht\n\ +#####|..............|...\n\ +#####|...........E..V...\n\ +#####|..............V...\n\ +#####|.E.........E..V...\n\ +#####|..............V...\n\ +#####|..............G...\n\ +#####|..............V...\n\ +#####|..E..E..E..E..V...\n\ +##|--|.............^|...\n\ +##|.<|-----HHHHHHHH-|...\n\ +##|..|..................\n\ +##|..+..................\n\ +##|..|^..............htt\n\ +##|..|-----------------|\n\ +##|--|#################|\n\ +#######################|\n\ +#######################|\n\ +#######################|\n\ +#######################|\n\ +#######################|\n\ +#######################|\n", + mapf::basic_bind("E < H V G C x ^ . - | # t + = D w T S e o h c d l s", t_floor, t_stairs_up, + t_wall_glass_h, t_wall_glass_v, t_door_glass_c, t_column, t_console_broken, t_floor, t_floor, + t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E < H V G C x ^ . - | # t + = D w T S e o h c d l s", f_exercise, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, + f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); + place_items("snacks", 60, 15, 2, 16, 2, false, 0); + add_spawn("mon_sewer_snake", rng(0, 3), SEEX, SEEY); + if (t_north == "hotel_tower_b_2") { + rotate(3); + } else if (t_east == "hotel_tower_b_2") { + rotate(0); + } else if (t_south == "hotel_tower_b_2") { + rotate(1); + } else if (t_west == "hotel_tower_b_2") { + rotate(2); + } + + + } else if (terrain_type == "hotel_tower_b_2") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +------------------------\n\ +th..........^rrr^.......\n\ +........................\n\ +.sssssssssssssssssssssss\n\ +.sWWWWWWWWWwwwwwwwwwwwws\n\ +.sWWWWWWWWWwwwwwwwwwwwws\n\ +.sWWWWWWWWWwwwwwwwwwwwws\n\ +.sWWWWWWWWWwwwwwwwwwwwws\n\ +.sWWWWWWWWWwwwwwwwwwwwws\n\ +.sWWWWWWWWWwwwwwwwwwwwws\n\ +.sssssssssssssssssssssss\n\ +........................\n\ +........................\n\ +........................\n\ +h......................h\n\ +---+-|---|HGH|---|-+---|\n\ +T|..c|EEE+...|xEE|c..|T|\n\ +.+..S|EEE+...+EEE|S..+.|\n\ +-|..c|EEx|^..+EEE|c..|-|\n\ +T+..S|---|-+-|---|S..+T|\n\ +-|..c|l..........|c..|-|\n\ +T+...|l..l...rrr.|...+T|\n\ +-----|-----------|-----|\n", + mapf::basic_bind("E r W w H V G C x ^ . - | # t + = D T S e o h c d l s", t_elevator, t_floor, + t_water_dp, t_water_sh, t_wall_glass_h, t_wall_glass_v, t_door_glass_c, t_column, + t_elevator_control_off, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, + t_door_locked_alarm, t_door_locked, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_sidewalk), + mapf::basic_bind("E r W w H V G C x ^ . - | # t + = D T S e o h c d l s", f_null, f_rack, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("cleaning", 60, i, j, i, j, false, 0); + } + } + } + add_spawn("mon_sewer_snake", rng(0, 10), SEEX, SEEY); + if (t_north == "hotel_tower_b_1") { + rotate(1); + } else if (t_east == "hotel_tower_b_1") { + rotate(2); + } else if (t_south == "hotel_tower_b_1") { + rotate(3); + } else if (t_west == "hotel_tower_b_1") { + rotate(0); + } + + + } else if (terrain_type == "hotel_tower_b_3") { + + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +----|------------|######\n\ +...^|............|######\n\ +....|.$$$$PP$$$$$|######\n\ +....|........$...|######\n\ +....|........$...|######\n\ +....|............|######\n\ +....|---+--------|######\n\ +....|r....rrDDDDc|######\n\ +....|r..........S|######\n\ +....|r..........c|######\n\ +....|r......WWWWc|--|###\n\ +....|---++-------|<.|###\n\ +.................|..|###\n\ +.................+..|###\n\ +tth.............^|..|###\n\ +-----------------|..|###\n\ +#################|--|###\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n\ +########################\n", + mapf::basic_bind("r P $ W D < H V G C x ^ . - | # t + = w T S e o h c d l s", t_floor, + t_sewage_pump, t_sewage_pipe, t_floor, t_floor, t_stairs_up, t_wall_glass_h, t_wall_glass_v, + t_door_glass_c, t_column, t_console_broken, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, + t_floor, t_door_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("r P $ W D < H V G C x ^ . - | # t + = w T S e o h c d l s", f_rack, f_null, + f_null, f_washer, f_dryer, f_null, f_null, f_null, f_null, + f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, f_null, + f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, + f_locker, f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_rack) { + place_items("home_hw", 80, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_washer || this->furn(i, j) == f_dryer) { + if (x_in_y(1, 2)) { + spawn_item(i, j, "blanket", 3); + } else if (x_in_y(1, 3)) { + place_items("dresser", 80, i, j, i, j, false, 0); + } + } + } + } + add_spawn("mon_sewer_snake", rng(0, 3), SEEX, SEEY); + if (t_north == "hotel_tower_b_2") { + rotate(1); + } else if (t_east == "hotel_tower_b_2") { + rotate(2); + } else if (t_south == "hotel_tower_b_2") { + rotate(3); + } else if (t_west == "hotel_tower_b_2") { + rotate(0); + } + + + } else if (is_ot_type("office_doctor", terrain_type)) { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + |---|----|--------| \n\ + |..l|.T.S|..eccScc| \n\ + |...+....+........D \n\ + |--------|.......6|r \n\ + |o.......|..|--X--|r \n\ + |d.hd.h..+..|l...6| \n\ + |o.......|..|l...l| \n\ + |--------|..|l...l| \n\ + |l....ccS|..|lllll| \n\ + |l..t....+..|-----| \n\ + |l.......|..|....l| \n\ + |--|-----|..|.t..l| \n\ + |T.|d.......+....l| \n\ + |S.|d.h..|..|Scc..| \n\ + |-+|-ccc-|++|-----| \n\ + |.................| \n\ + w....####....####.w \n\ + w.................w \n\ + |....####....####.| \n\ + |.................| \n\ + |-++--wwww-wwww---| \n\ + ss \n\ + ss \n", + mapf::basic_bind(". - | 6 X # r t + = D w T S e o h c d l s", t_floor, t_wall_h, t_wall_v, + t_console, t_door_metal_locked, t_floor, t_floor, t_floor, t_door_c, t_door_locked_alarm, + t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_sidewalk), + mapf::basic_bind(". - | 6 X # r t + = D w T S e o h c d l s", f_null, f_null, f_null, f_null, + f_null, f_bench, f_trashcan, f_table, f_null, f_null, f_null, + f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + tmpcomp = add_computer(20, 4, _("Medical Supply Access"), 2); + tmpcomp->add_option(_("Lock Door"), COMPACT_LOCK, 2); + tmpcomp->add_option(_("Unlock Door"), COMPACT_UNLOCK, 2); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + + tmpcomp = add_computer(20, 6, _("Medical Supply Access"), 2); + tmpcomp->add_option(_("Unlock Door"), COMPACT_UNLOCK, 2); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + + if (one_in(2)) { + spawn_item(7, 6, "record_patient"); + } + place_items("dissection", 60, 4, 9, 4, 11, false, 0); + place_items("dissection", 60, 9, 9, 10, 9, false, 0); + place_items("dissection", 60, 20, 11, 20, 13, false, 0); + place_items("dissection", 60, 17, 14, 18, 14, false, 0); + place_items("fridge", 50, 15, 2, 15, 2, false, 0); + place_items("surgery", 30, 4, 9, 11, 11, false, 0); + place_items("surgery", 30, 16, 11, 20, 4, false, 0); + place_items("harddrugs", 60, 16, 6, 16, 9, false, 0); + place_items("harddrugs", 60, 17, 9, 19, 9, false, 0); + place_items("softdrugs", 60, 20, 9, 20, 7, false, 0); + place_items("cleaning", 50, 4, 2, 6, 3, false, 0); + + if (terrain_type == "office_doctor_east") { + rotate(3); + } + if (terrain_type == "office_doctor_north") { + rotate(2); + } + if (terrain_type == "office_doctor_west") { + rotate(1); + } + + + } else if (terrain_type == "toxic_dump") { + + fill_background(this, t_dirt); + for (int n = 0; n < 6; n++) { + int poolx = rng(4, SEEX * 2 - 5), pooly = rng(4, SEEY * 2 - 5); + for (int i = poolx - 3; i <= poolx + 3; i++) { + for (int j = pooly - 3; j <= pooly + 3; j++) { + if (rng(2, 5) > rl_dist(poolx, pooly, i, j)) { + ter_set(i, j, t_sewage); + radiation(i, j) += rng(20, 60); + } + } + } + } + int buildx = rng(6, SEEX * 2 - 7), buildy = rng(6, SEEY * 2 - 7); + square(this, t_floor, buildx - 3, buildy - 3, buildx + 3, buildy + 3); + line(this, t_wall_h, buildx - 4, buildy - 4, buildx + 4, buildy - 4); + line(this, t_wall_h, buildx - 4, buildy + 4, buildx + 4, buildy + 4); + line(this, t_wall_v, buildx - 4, buildy - 4, buildx - 4, buildy + 4); + line(this, t_wall_v, buildx + 4, buildy - 4, buildx + 4, buildy + 4); + line_furn(this, f_counter, buildx - 3, buildy - 3, buildx + 3, buildy - 3); + place_items("toxic_dump_equipment", 80, + buildx - 3, buildy - 3, buildx + 3, buildy - 3, false, 0); + spawn_item(buildx, buildy, "id_military"); + ter_set(buildx, buildy + 4, t_door_locked); + + rotate(rng(0, 3)); + + + } else if (terrain_type == "haz_sar_entrance") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + f |_________%..S| |.\n\ + f |_________|..r| |.\n\ + f |_________|..r| |.\n\ + f |l________=..r| |c\n\ + f |l________|..S| |w\n\ + f |l________%..r|sss\n\ + f |_________%..r|sss\n\ + f |_________%..r|ss_\n\ + f |_________|x..|ss_\n\ + f |-XXXXXXX-|-D-|ss_\n\ + f s_______ssssssss_\n\ + f s_______ssssssss_\n\ + f s________________\n\ + f s________________\n\ + f s________________\n\ + f ssss________________\n\ + f ssss_______ssssssss_\n\ + fF|-D-|XXXXXXX- s_\n\ + wxh.D_______f s_\n\ + wcdcw_______f ss\n\ + |www|_______fFFFFFFFF\n\ + _______ \n\ + _______ \n\ + _______ \n", + mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", + t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, + t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, + t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, + t_door_c, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", + f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, + f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, + f_counter, f_desk, f_locker, f_null)); + spawn_item(19, 3, "cleansuit"); + place_items("office", 80, 4, 19, 6, 19, false, 0); + place_items("cleaning", 90, 7, 3, 7, 5, false, 0); + place_items("toxic_dump_equipment", 85, 19, 1, 19, 3, false, 0); + place_items("toxic_dump_equipment", 85, 19, 5, 19, 7, false, 0); + if (x_in_y(1, 2)) { + add_spawn("mon_hazmatbot", 1, 10, 5); + } + //lazy radiation mapping + for (int x = 0; x <= 23; x++) { + for (int y = 0; y <= 23; y++) { + radiation(x, y) += rng(10, 30); + } + } + if (t_north == "haz_sar" && t_west == "haz_sar") { + rotate(3); + } else if (t_north == "haz_sar" && t_east == "haz_sar") { + rotate(0); + } else if (t_south == "haz_sar" && t_east == "haz_sar") { + rotate(1); + } else if (t_west == "haz_sar" && t_south == "haz_sar") { + rotate(2); + } + + + } else if (terrain_type == "haz_sar") { + + fill_background(this, &grass_or_dirt); + if ((t_south == "haz_sar_entrance" && t_east == "haz_sar") || (t_north == "haz_sar" && + t_east == "haz_sar_entrance") || (t_west == "haz_sar" && t_north == "haz_sar_entrance") || + (t_south == "haz_sar" && t_west == "haz_sar_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + fFFFFFFFFFFFFFFFFFFFFFF\n\ + f \n\ + f \n\ + f #################\n\ + f ##################\n\ + f ##...llrr..........\n\ + f ##.._________.......\n\ + f ##.._________&&&1111\n\ + f ##..________x&&&....\n\ + f ##..____________....\n\ + f ##r.____________....\n\ + f ##r.____________....\n\ + f ##r.____________....\n\ + f ##r.____________..CC\n\ + f ##..___________...CC\n\ + f ##..__________....C.\n\ + f ##.._________.......\n\ + f ##..________........\n\ + f ###._______x##.#####\n\ + f ####XXXXXXX###+#####\n\ + f ##________x|x.r| \n\ + f |_________%..r| |-\n\ + f |_________%..r| |^\n", + mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", + t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, + t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, + t_console, t_console_broken, t_shrub, t_floor, t_floor, t_wall_h, t_wall_v, t_rock, t_floor, + t_door_c, t_door_metal_c, t_door_locked, t_window, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", + f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_indoor_plant, f_null, f_null, f_null, f_null, f_table, + f_null, f_null, f_null, f_null, f_toilet, f_sink, f_fridge, f_bookcase, f_chair, + f_counter, f_desk, f_locker, f_null)); + spawn_item(19, 22, "cleansuit"); + place_items("cleaning", 85, 6, 11, 6, 14, false, 0); + place_items("tools", 85, 10, 6, 13, 6, false, 0); + place_items("toxic_dump_equipment", 85, 22, 14, 23, 15, false, 0); + if (x_in_y(1, 2)) { + add_spawn("mon_hazmatbot", 1, 22, 12); + } + if (x_in_y(1, 2)) { + add_spawn("mon_hazmatbot", 1, 23, 18); + } + //lazy radiation mapping + for (int x = 0; x <= 23; x++) { + for (int y = 0; y <= 23; y++) { + radiation(x, y) += rng(10, 30); + } + } + if (t_west == "haz_sar_entrance") { + rotate(1); + if (x_in_y(1, 4)) { + add_vehicle (g, "military_cargo_truck", 10, 11, 0); + } + } else if (t_north == "haz_sar_entrance") { + rotate(2); + if (x_in_y(1, 4)) { + add_vehicle (g, "military_cargo_truck", 12, 10, 90); + } + } else if (t_east == "haz_sar_entrance") { + rotate(3); + if (x_in_y(1, 4)) { + add_vehicle (g, "military_cargo_truck", 13, 12, 180); + } + } else if (x_in_y(1, 4)) { + add_vehicle (g, "military_cargo_truck", 11, 13, 270); + } + + } + + else if ((t_west == "haz_sar_entrance" && t_north == "haz_sar") || (t_north == "haz_sar_entrance" && + t_east == "haz_sar") || (t_west == "haz_sar" && t_south == "haz_sar_entrance") || + (t_south == "haz_sar" && t_east == "haz_sar_entrance")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +......|-+-|-+|...h..w f \n\ +.c....|.............w f \n\ +hd....+....ch.....hdw f \n\ +cc....|....cdd...ddd| f \n\ +ww-www|w+w-www--www-| f \n\ +ssssssssssssssssssss f \n\ +ssssssssssssssssssss f \n\ +___,____,____,____ss f \n\ +___,____,____,____ss f \n\ +___,____,____,____ss f \n\ +___,____,____,____ss f \n\ +___,____,____,____ss f \n\ +__________________ss f \n\ +__________________ss f \n\ +__________________ss f \n\ +__________________ss f \n\ +________,_________ss f \n\ +________,_________ss f \n\ +________,_________ss f \n\ +ssssssssssssssssssss f \n\ +FFFFFFFFFFFFFFFFFFFFFFf \n\ + \n\ + \n\ + \n", + mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F V H 6 x $ ^ . - | # t + = D w T S e o h c d l s", + t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, t_wall_glass_v, t_sewage, + t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, t_chainfence_v, t_chainfence_h, + t_wall_glass_v, t_wall_glass_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("1 & V C G 5 % Q E , _ r X f F V H 6 x $ ^ . - | # t + = D w T S e o h c d l s", + f_null, f_null, f_null, f_crate_c, f_null, f_null, f_null, f_null, + f_null, f_null, f_null, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, + f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + spawn_item(1, 2, "id_military"); + place_items("office", 85, 1, 1, 1, 3, false, 0); + place_items("office", 85, 11, 3, 13, 3, false, 0); + place_items("office", 85, 17, 3, 19, 3, false, 0); + //lazy radiation mapping + for (int x = 0; x <= 23; x++) { + for (int y = 0; y <= 23; y++) { + radiation(x, y) += rng(10, 30); + } + } + if (t_north == "haz_sar_entrance") { + rotate(1); + } + if (t_east == "haz_sar_entrance") { + rotate(2); + } + if (t_south == "haz_sar_entrance") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +FFFFFFFFFFFFFFFFFFFFFFf \n\ + f \n\ + f \n\ +################ f \n\ +################# f \n\ +.V.V.V..........## f \n\ +.......|G|.......## f \n\ +11111111111111...## f \n\ +.......|G|.%515%.## f \n\ +...........%QQQ%.## f \n\ +..CC......x%QQQ%.## f \n\ +.CCC.......%QQQ%.## f \n\ +...........%QQQ%.## f \n\ +.....|.R|..%515%.## f \n\ +......EE|....1...## f \n\ +......EE|....&...## f \n\ +.....---|.......## f \n\ +...............## f \n\ +################ f \n\ +############### f \n\ + f \n\ +------|---|--|---www| f \n\ +.x6x..|S.T|l.|^.ddd.| f \n", + mapf::basic_bind("R 1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", + t_elevator_control_off, t_sewage_pipe, t_sewage_pump, t_vat, t_floor, t_grate, t_wall_glass_h, + t_wall_glass_v, t_sewage, t_elevator, t_pavement_y, t_pavement, t_floor, t_door_metal_locked, + t_chainfence_v, t_chainfence_h, t_console, t_console_broken, t_shrub, t_floor, t_floor, + t_wall_h, t_wall_v, t_rock, t_floor, t_door_c, t_door_locked_alarm, t_door_locked, t_window, + t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_sidewalk), + mapf::basic_bind("R 1 & V C G 5 % Q E , _ r X f F 6 x $ ^ . - | # t + = D w T S e o h c d l s", + f_null, f_null, f_null, f_null, f_crate_c, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_rack, f_null, + f_null, f_null, f_null, f_null, f_null, f_indoor_plant, f_null, + f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_desk, f_locker, f_null)); + place_items("office", 85, 16, 23, 18, 23, false, 0); + place_items("cleaning", 85, 11, 23, 12, 23, false, 0); + place_items("robots", 90, 2, 11, 3, 11, false, 0); + if (x_in_y(1, 2)) { + add_spawn("mon_hazmatbot", 1, 7, 10); + } + if (x_in_y(1, 2)) { + add_spawn("mon_hazmatbot", 1, 11, 16); + } + //lazy radiation mapping + for (int x = 0; x <= 23; x++) { + for (int y = 0; y <= 23; y++) { + radiation(x, y) += rng(10, 30); + } + } + tmpcomp = add_computer(2, 23, _("SRCF Security Terminal"), 0); + tmpcomp->add_option(_("Security Reminder [1055]"), COMPACT_SR1_MESS, 0); + tmpcomp->add_option(_("Security Reminder [1056]"), COMPACT_SR2_MESS, 0); + tmpcomp->add_option(_("Security Reminder [1057]"), COMPACT_SR3_MESS, 0); + //tmpcomp->add_option(_("Security Reminder [1058]"), COMPACT_SR4_MESS, 0); limited to 9 computer options + tmpcomp->add_option(_("EPA: Report All Potential Containment Breaches [3873643]"), + COMPACT_SRCF_1_MESS, 2); + tmpcomp->add_option(_("SRCF: Internal Memo, EPA [2918024]"), COMPACT_SRCF_2_MESS, 2); + tmpcomp->add_option(_("CDC: Internal Memo, Standby [2918115]"), COMPACT_SRCF_3_MESS, 2); + tmpcomp->add_option(_("USARMY: SEAL SRCF [987167]"), COMPACT_SRCF_SEAL_ORDER, 4); + tmpcomp->add_option(_("COMMAND: REACTIVATE ELEVATOR"), COMPACT_SRCF_ELEVATOR, 0); + tmpcomp->add_option(_("COMMAND: SEAL SRCF [4423]"), COMPACT_SRCF_SEAL, 5); + tmpcomp->add_failure(COMPFAIL_ALARM); + if (t_west == "haz_sar" && t_north == "haz_sar") { + rotate(1); + } + if (t_east == "haz_sar" && t_north == "haz_sar") { + rotate(2); + } + if (t_east == "haz_sar" && t_south == "haz_sar") { + rotate(3); + } + } + + + } else if (terrain_type == "haz_sar_entrance_b1") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +#############...........\n\ +#############...........\n\ +|---------|#............\n\ +|_________|M............\n\ +|_________$.............\n\ +|_________$.............\n\ +|_________$.............\n\ +|_________$.............\n\ +|_________$.............\n\ +|_________|.............\n\ +|---------|#............\n\ +############............\n\ +###########.............\n\ +###########M......####..\n\ +#########|--$$$$$--|####\n\ +####|----|_________|----\n\ +####|___________________\n\ +####|___________________\n\ +####|___________________\n\ +####|___________________\n\ +####|___________________\n\ +####|___________________\n\ +####|___________________\n\ +####|-------------------\n", + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, + t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, + t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, + t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, + f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->ter(i, j) == t_rock_floor) { + if (one_in(250)) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(i, j, body); + place_items("science", 70, i, j, i, j, true, 0); + } else if (one_in(80)) { + add_spawn("mon_zombie", 1, i, j); + } + } + if (this->ter(i, j) != t_metal_floor) { + radiation(x, y) += rng(10, 70); + } + if (this->ter(i, j) == t_sewage) { + if (one_in(2)) { + ter_set(i, j, t_dirtfloor); + } + if (one_in(4)) { + ter_set(i, j, t_dirtmound); + } + if (one_in(2)) { + ter_set(i, j, t_wreckage); + } + place_items("trash", 50, i, j, i, j, false, 0); + place_items("sewer", 50, i, j, i, j, false, 0); + if (one_in(5)) { + if (one_in(10)) { + add_spawn("mon_zombie_child", 1, i, j); + } else if (one_in(15)) { + add_spawn("mon_zombie_fast", 1, i, j); + } else { + add_spawn("mon_zombie", 1, i, j); + } + } + } + } + } + if (t_north == "haz_sar_b1" && t_west == "haz_sar_b1") { + rotate(3); + } else if (t_north == "haz_sar_b1" && t_east == "haz_sar_b1") { + rotate(0); + } else if (t_south == "haz_sar_b1" && t_east == "haz_sar_b1") { + rotate(1); + } else if (t_west == "haz_sar_b1" && t_south == "haz_sar_b1") { + rotate(2); + } + + + } else if (terrain_type == "haz_sar_b1") { + + fill_background(this, &grass_or_dirt); + if ((t_south == "haz_sar_entrance_b1" && t_east == "haz_sar_b1") || (t_north == "haz_sar_b1" && + t_east == "haz_sar_entrance_b1") || (t_west == "haz_sar_b1" && t_north == "haz_sar_entrance_b1") || + (t_south == "haz_sar_b1" && t_west == "haz_sar_entrance_b1")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +####################.M..\n\ +####################--$$\n\ +####|----------|###.....\n\ +####|__________|M.......\n\ +####|__________$........\n\ +####|__________$........\n\ +####|__________$........\n\ +####|__________$........\n\ +####|__________$........\n\ +####|__________|........\n\ +####|----------|........\n\ +###############.........\n\ +##############..........\n\ +#############...........\n\ +############...........#\n\ +|---------|#.........###\n\ +|_________|M.........###\n\ +|_________$..........|--\n\ +|_________$..........|r,\n\ +|_________$..........|r,\n\ +|_________$..........|r,\n\ +|_________$..........|,,\n\ +|_________|..........|,,\n\ +|---------|#.........|-$\n", + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, + t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, + t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, + t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, + f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_rack) { + place_items("mechanics", 60, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_rock_floor) { + if (one_in(250)) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(i, j, body); + place_items("science", 70, i, j, i, j, true, 0); + } else if (one_in(80)) { + add_spawn("mon_zombie", 1, i, j); + } + } + if (this->ter(i, j) != t_metal_floor) { + radiation(x, y) += rng(10, 70); + } + if (this->ter(i, j) == t_sewage) { + if (one_in(2)) { + ter_set(i, j, t_dirtfloor); + } + if (one_in(4)) { + ter_set(i, j, t_dirtmound); + } + if (one_in(2)) { + ter_set(i, j, t_wreckage); + } + place_items("trash", 50, i, j, i, j, false, 0); + place_items("sewer", 50, i, j, i, j, false, 0); + if (one_in(5)) { + if (one_in(10)) { + add_spawn("mon_zombie_child", 1, i, j); + } else if (one_in(15)) { + add_spawn("mon_zombie_fast", 1, i, j); + } else { + add_spawn("mon_zombie", 1, i, j); + } + } + } + } + } + if (t_west == "haz_sar_entrance_b1") { + rotate(1); + } else if (t_north == "haz_sar_entrance_b1") { + rotate(2); + } else if (t_east == "haz_sar_entrance_b1") { + rotate(3); + } + } + + else if ((t_west == "haz_sar_entrance_b1" && t_north == "haz_sar_b1") || + (t_north == "haz_sar_entrance_b1" && t_east == "haz_sar_b1") || (t_west == "haz_sar_b1" && + t_south == "haz_sar_entrance_b1") || + (t_south == "haz_sar_b1" && t_east == "haz_sar_entrance_b1")) { + mapf::formatted_set_simple(this, 0, 0, + "\ +....M..|,,,,|........###\n\ +.......|-HH=|.........##\n\ +.....................###\n\ +......................##\n\ +......................|#\n\ +......................$.\n\ +......................$.\n\ +......................$.\n\ +......................$.\n\ +......................$.\n\ +.....................M|#\n\ +....................####\n\ +..................######\n\ +###....M.........#######\n\ +#####|--$$$$$--|########\n\ +|----|_________|----|###\n\ +|___________________|###\n\ +|___________________|###\n\ +|___________________|###\n\ +|___________________|###\n\ +|___________________|###\n\ +|___________________|###\n\ +|___________________|###\n\ +|-------------------|###\n", + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, + t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, + t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, + t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, + f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->ter(i, j) == t_rock_floor) { + if (one_in(250)) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(i, j, body); + place_items("science", 70, i, j, i, j, true, 0); + } else if (one_in(80)) { + add_spawn("mon_zombie", 1, i, j); + } + } + if (this->ter(i, j) != t_metal_floor) { + radiation(x, y) += rng(10, 70); + } + if (this->ter(i, j) == t_sewage) { + if (one_in(2)) { + ter_set(i, j, t_dirtfloor); + } + if (one_in(4)) { + ter_set(i, j, t_dirtmound); + } + if (one_in(2)) { + ter_set(i, j, t_wreckage); + } + place_items("trash", 50, i, j, i, j, false, 0); + place_items("sewer", 50, i, j, i, j, false, 0); + if (one_in(5)) { + if (one_in(10)) { + add_spawn("mon_zombie_child", 1, i, j); + } else if (one_in(15)) { + add_spawn("mon_zombie_fast", 1, i, j); + } else { + add_spawn("mon_zombie", 1, i, j); + } + } + } + } + } + if (t_north == "haz_sar_entrance_b1") { + rotate(1); + } + if (t_east == "haz_sar_entrance_b1") { + rotate(2); + } + if (t_south == "haz_sar_entrance_b1") { + rotate(3); + } + } + + else { + mapf::formatted_set_simple(this, 0, 0, + "\ +...#####################\n\ +$$$--###################\n\ +...M..#|----------|#####\n\ +.......|__________|#####\n\ +.......$__________|#####\n\ +.......$__________|#####\n\ +.......$__________|#####\n\ +.......$__________|#####\n\ +.......$__________|#####\n\ +......M|__________|#####\n\ +......#|----------|#####\n\ +.....###################\n\ +....####|---|----|######\n\ +###.##|-|,,,|,S,T|######\n\ +#|-=-||&|,,,+,,,,|######\n\ +#|,,l|EE+,,,|----|-|####\n\ +#|,,l|EE+,,,|ddd,,l|####\n\ +-|-$-|--|,,,V,h,,,l|####\n\ +,,,,,|,,=,,,V,,,,,,|####\n\ +,,,,,|rr|,,,V,,,,c,|####\n\ +,,,,,|--|,,,|,,,hc,|####\n\ +,,,,,+,,,,,,+,,c6c,|####\n\ +,,,,M|,,,,,,|r,,,,,|####\n\ +$$$$-|-|=HH-|-HHHH-|####\n", + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", t_door_metal_c, t_door_metal_o, + t_elevator, t_elevator_control_off, t_console, t_reinforced_glass_h, t_reinforced_glass_v, t_floor, + t_floor, t_floor, t_floor, t_gates_control_concrete, t_sewage, t_door_metal_locked, t_concrete_v, + t_concrete_h, t_rock, t_rock_floor, t_metal_floor, t_floor, t_floor, t_floor), + mapf::basic_bind("= + E & 6 H V c h d r M _ $ | - # . , l S T", f_null, f_null, + f_null, f_null, f_null, f_null, f_null, + f_counter, f_chair, f_desk, f_rack, f_null, f_null, f_null, + f_null, f_null, f_null, f_null, f_null, f_locker, f_sink, f_toilet)); + spawn_item(3, 16, "sarcophagus_access_code"); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_locker) { + place_items("cleaning", 60, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_desk) { + place_items("cubical_office", 60, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_rack) { + place_items("sewage_plant", 60, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_rock_floor) { + if (one_in(250)) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + add_item(i, j, body); + place_items("science", 70, i, j, i, j, true, 0); + } else if (one_in(80)) { + add_spawn("mon_zombie", 1, i, j); + } + } + if (this->ter(i, j) != t_metal_floor) { + radiation(x, y) += rng(10, 70); + } + if (this->ter(i, j) == t_sewage) { + if (one_in(2)) { + ter_set(i, j, t_dirtfloor); + } + if (one_in(4)) { + ter_set(i, j, t_dirtmound); + } + if (one_in(2)) { + ter_set(i, j, t_wreckage); + } + place_items("trash", 50, i, j, i, j, false, 0); + place_items("sewer", 50, i, j, i, j, false, 0); + if (one_in(5)) { + if (one_in(10)) { + add_spawn("mon_zombie_child", 1, i, j); + } else if (one_in(15)) { + add_spawn("mon_zombie_fast", 1, i, j); + } else { + add_spawn("mon_zombie", 1, i, j); + } + } + } + } + } + tmpcomp = add_computer(16, 21, _("SRCF Security Terminal"), 0); + tmpcomp->add_option(_("Security Reminder [1055]"), COMPACT_SR1_MESS, 0); + tmpcomp->add_option(_("Security Reminder [1056]"), COMPACT_SR2_MESS, 0); + tmpcomp->add_option(_("Security Reminder [1057]"), COMPACT_SR3_MESS, 0); + //tmpcomp->add_option(_("Security Reminder [1058]"), COMPACT_SR4_MESS, 0); limited to 9 computer options + tmpcomp->add_option(_("EPA: Report All Potential Containment Breaches [3873643]"), + COMPACT_SRCF_1_MESS, 2); + tmpcomp->add_option(_("SRCF: Internal Memo, EPA [2918024]"), COMPACT_SRCF_2_MESS, 2); + tmpcomp->add_option(_("CDC: Internal Memo, Standby [2918115]"), COMPACT_SRCF_3_MESS, 2); + tmpcomp->add_option(_("USARMY: SEAL SRCF [987167]"), COMPACT_SRCF_SEAL_ORDER, 4); + tmpcomp->add_option(_("COMMAND: REACTIVATE ELEVATOR"), COMPACT_SRCF_ELEVATOR, 0); + tmpcomp->add_failure(COMPFAIL_ALARM); + if (t_west == "haz_sar_b1" && t_north == "haz_sar_b1") { + rotate(1); + } + if (t_east == "haz_sar_b1" && t_north == "haz_sar_b1") { + rotate(2); + } + if (t_east == "haz_sar_b1" && t_south == "haz_sar_b1") { + rotate(3); + } + } + + + } else if (terrain_type == "cave") { + + if (t_above == "cave") { + // We're underground! + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + bool floorHere = (rng(0, 6) < i || SEEX * 2 - rng(1, 7) > i || + rng(0, 6) < j || SEEY * 2 - rng(1, 7) > j ); + if (floorHere) { + ter_set(i, j, t_rock_floor); + } else { + ter_set(i, j, t_rock); + } + } + } + square(this, t_slope_up, SEEX - 1, SEEY - 1, SEEX, SEEY); + item body; + switch(rng(1, 10)) { + case 1: + // natural refuse + place_items("monparts", 80, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + break; + case 2: + // trash + place_items("trash", 70, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + break; + case 3: + // bat corpses + for (int i = rng(1, 12); i < 0; i--) { + body.make_corpse(itypes["corpse"], GetMType("mon_bat"), g->turn); + add_item(rng(1, SEEX * 2 - 1), rng(1, SEEY * 2 - 1), body); + } + break; + case 4: + // ant food, chance of 80 + place_items("ant_food", 85, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + break; + case 5: { + // hermitage + int origx = rng(SEEX - 1, SEEX), + origy = rng(SEEY - 1, SEEY), + hermx = rng(SEEX - 6, SEEX + 5), + hermy = rng(SEEX - 6, SEEY + 5); + std::vector bloodline = line_to(origx, origy, hermx, hermy, 0); + for (int ii = 0; ii < bloodline.size(); ii++) { + add_field(g, bloodline[ii].x, bloodline[ii].y, fd_blood, 2); + } + body.make_corpse(itypes["corpse"], GetMType("mon_null"), g->turn); + add_item(hermx, hermy, body); + // This seems verbose. Maybe a function to spawn from a list of item groups? + place_items("stash_food", 50, hermx - 1, hermy - 1, hermx + 1, hermy + 1, true, 0); + place_items("survival_tools", 50, hermx - 1, hermy - 1, hermx + 1, hermy + 1, true, 0); + place_items("survival_armor", 50, hermx - 1, hermy - 1, hermx + 1, hermy + 1, true, 0); + place_items("weapons", 40, hermx - 1, hermy - 1, hermx + 1, hermy + 1, true, 0); + place_items("magazines", 40, hermx - 1, hermy - 1, hermx + 1, hermy + 1, true, 0); + place_items("rare", 30, hermx - 1, hermy - 1, hermx + 1, hermy + 1, true, 0); + break; + } + default: + // nothing, half the time + break; + } + place_spawns(g, "GROUP_CAVE", 2, 6, 6, 18, 18, 1.0); + } else { // We're above ground! + // First, draw a forest + draw_map(oter_id("forest"), t_north, t_east, t_south, t_west, t_neast, t_seast, t_nwest, t_swest, + t_above, turn, g, density, zlevel); + // Clear the center with some rocks + square(this, t_rock, SEEX - 6, SEEY - 6, SEEX + 5, SEEY + 5); + int pathx, pathy; + if (one_in(2)) { + pathx = rng(SEEX - 6, SEEX + 5); + pathy = (one_in(2) ? SEEY - 8 : SEEY + 7); + } else { + pathx = (one_in(2) ? SEEX - 8 : SEEX + 7); + pathy = rng(SEEY - 6, SEEY + 5); + } + std::vector pathline = line_to(pathx, pathy, SEEX - 1, SEEY - 1, 0); + for (int ii = 0; ii < pathline.size(); ii++) { + square(this, t_dirt, pathline[ii].x, pathline[ii].y, + pathline[ii].x + 1, pathline[ii].y + 1); + } + while (!one_in(8)) { + ter_set(rng(SEEX - 6, SEEX + 5), rng(SEEY - 6, SEEY + 5), t_dirt); + } + square(this, t_slope_down, SEEX - 1, SEEY - 1, SEEX, SEEY); + } + + + } else if (terrain_type == "cave_rat") { + + fill_background(this, t_rock); + + if (t_above == "cave_rat") { // Finale + rough_circle(this, t_rock_floor, SEEX, SEEY, 8); + square(this, t_rock_floor, SEEX - 1, SEEY, SEEX, SEEY * 2 - 2); + line(this, t_slope_up, SEEX - 1, SEEY * 2 - 3, SEEX, SEEY * 2 - 2); + for (int i = SEEX - 4; i <= SEEX + 4; i++) { + for (int j = SEEY - 4; j <= SEEY + 4; j++) { + if ((i <= SEEX - 2 || i >= SEEX + 2) && (j <= SEEY - 2 || j >= SEEY + 2)) { + add_spawn("mon_sewer_rat", 1, i, j); + } + } + } + add_spawn("mon_rat_king", 1, SEEX, SEEY); + place_items("rare", 75, SEEX - 4, SEEY - 4, SEEX + 4, SEEY + 4, true, 0); + } else { // Level 1 + int cavex = SEEX, cavey = SEEY * 2 - 3; + int stairsx = SEEX - 1, stairsy = 1; // Default stairs location--may change + int centerx = 0; + do { + cavex += rng(-1, 1); + cavey -= rng(0, 1); + for (int cx = cavex - 1; cx <= cavex + 1; cx++) { + for (int cy = cavey - 1; cy <= cavey + 1; cy++) { + ter_set(cx, cy, t_rock_floor); + if (one_in(10)) { + add_field(g, cx, cy, fd_blood, rng(1, 3)); + } + if (one_in(20)) { + add_spawn("mon_sewer_rat", 1, cx, cy); + } + } + } + if (cavey == SEEY - 1) { + centerx = cavex; + } + } while (cavey > 2); + // Now draw some extra passages! + do { + int tox = (one_in(2) ? 2 : SEEX * 2 - 3), toy = rng(2, SEEY * 2 - 3); + std::vector path = line_to(centerx, SEEY - 1, tox, toy, 0); + for (int i = 0; i < path.size(); i++) { + for (int cx = path[i].x - 1; cx <= path[i].x + 1; cx++) { + for (int cy = path[i].y - 1; cy <= path[i].y + 1; cy++) { + ter_set(cx, cy, t_rock_floor); + if (one_in(10)) { + add_field(g, cx, cy, fd_blood, rng(1, 3)); + } + if (one_in(20)) { + add_spawn("mon_sewer_rat", 1, cx, cy); + } + } + } + } + if (one_in(2)) { + stairsx = tox; + stairsy = toy; + } + } while (one_in(2)); + // Finally, draw the stairs up and down. + ter_set(SEEX - 1, SEEX * 2 - 2, t_slope_up); + ter_set(SEEX , SEEX * 2 - 2, t_slope_up); + ter_set(stairsx, stairsy, t_slope_down); + } + + + } else if (is_ot_type("sub_station", terrain_type)) { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j < 9 || j > 12 || i < 4 || i > 19) { + ter_set(i, j, t_pavement); + } else if (j < 12 && j > 8 && (i == 4 || i == 19)) { + ter_set(i, j, t_wall_v); + } else if (i > 3 && i < 20 && j == 12) { + ter_set(i, j, t_wall_h); + } else { + ter_set(i, j, t_floor); + } + } + } + ter_set(16, 10, t_stairs_down); + if (terrain_type == "sub_station_east") { + rotate(1); + } + if (terrain_type == "sub_station_south") { + rotate(2); + } + if (terrain_type == "sub_station_west") { + rotate(3); + } + + + } else if (is_ot_type("s_garage", terrain_type)) { + + fill_background(this, &grass_or_dirt); + int yard_wdth = 5; + square(this, t_floor, 0, yard_wdth, SEEX * 2 - 4, SEEY * 2 - 4); + line(this, t_wall_v, 0, yard_wdth, 0, SEEY * 2 - 4); + line(this, t_wall_v, SEEX * 2 - 3, yard_wdth, SEEX * 2 - 3, SEEY * 2 - 4); + line(this, t_wall_h, 0, SEEY * 2 - 4, SEEX * 2 - 3, SEEY * 2 - 4); + line(this, t_window, 0, SEEY * 2 - 4, SEEX * 2 - 14, SEEY * 2 - 4); + line(this, t_wall_h, 0, SEEY * 2 - 4, SEEX * 2 - 20, SEEY * 2 - 4); + line(this, t_wall_h, 0, yard_wdth, 2, yard_wdth); + line(this, t_wall_h, 8, yard_wdth, 13, yard_wdth); + line(this, t_wall_h, 20, yard_wdth, 21, yard_wdth); + line_furn(this, f_counter, 1, yard_wdth + 1, 1, yard_wdth + 7); + line(this, t_wall_h, 1, SEEY * 2 - 9, 3, SEEY * 2 - 9); + line(this, t_wall_v, 3, SEEY * 2 - 8, 3, SEEY * 2 - 5); + ter_set(3, SEEY * 2 - 7, t_door_frame); + ter_set(21, SEEY * 2 - 7, t_door_c); + line_furn(this, f_counter, 4, SEEY * 2 - 5, 15, SEEY * 2 - 5); + //office + line(this, t_wall_glass_h, 16, SEEY * 2 - 9 , 20, SEEY * 2 - 9); + line(this, t_wall_glass_v, 16, SEEY * 2 - 8, 16, SEEY * 2 - 5); + ter_set(16, SEEY * 2 - 7, t_door_glass_c); + line_furn(this, f_bench, SEEX * 2 - 6, SEEY * 2 - 8, SEEX * 2 - 4, SEEY * 2 - 8); + ter_set(SEEX * 2 - 6, SEEY * 2 - 6, t_console_broken); + furn_set(SEEX * 2 - 5, SEEY * 2 - 6, f_bench); + line_furn(this, f_locker, SEEX * 2 - 6, SEEY * 2 - 5, SEEX * 2 - 4, SEEY * 2 - 5); + //gates + line(this, t_door_metal_locked, 3, yard_wdth, 8, yard_wdth); + ter_set(2, yard_wdth + 1, t_gates_mech_control); + ter_set(2, yard_wdth - 1, t_gates_mech_control); + line(this, t_door_metal_locked, 14, yard_wdth, 19, yard_wdth ); + ter_set(13, yard_wdth + 1, t_gates_mech_control); + ter_set(13, yard_wdth - 1, t_gates_mech_control); + + //place items + place_items("mechanics", 90, 1, yard_wdth + 1, 1, yard_wdth + 7, true, 0); + place_items("mechanics", 90, 4, SEEY * 2 - 5, 15, SEEY * 2 - 5, true, 0); + + // rotate garage + + int vy = 0, vx = 0, theta = 0; + + if (terrain_type == "s_garage_north") { + vx = 5, vy = yard_wdth + 6; + theta = 90; + } else if (terrain_type == "s_garage_east") { + rotate(1); + vx = yard_wdth + 8, vy = 4; + theta = 0; + } else if (terrain_type == "s_garage_south") { + rotate(2); + vx = SEEX * 2 - 6, vy = SEEY * 2 - (yard_wdth + 3); + theta = 270; + } else if (terrain_type == "s_garage_west") { + rotate(3); + vx = SEEX * 2 - yard_wdth - 9, vy = SEEY * 2 - 5; + theta = 180; + } + + // place vehicle, if any + if (one_in(3)) { + std::string vt; + int vehicle_type = rng(1, 8); + if(vehicle_type <= 3) { + vt = one_in(2) ? "car" : "car_chassis"; + } else if(vehicle_type <= 5) { + vt = one_in(2) ? "quad_bike" : "quad_bike_chassis"; + } else if(vehicle_type <= 7) { + vt = one_in(2) ? "motorcycle" : "motorcycle_chassis"; + } else { + vt = "welding_cart"; + } + add_vehicle (g, vt, vx, vy, theta, -1, -1); + } + + + } else if (terrain_type == "cabin") { + + fill_background(this, t_grass); + + //Cabin design 1 Quad + if (one_in(2)) { + square(this, t_wall_log, 2, 3, 21, 20); + square(this, t_floor, 2, 17, 21, 20);//Front porch + line(this, t_fence_v, 2, 17, 2, 20); + line(this, t_fence_v, 21, 17, 21, 20); + line(this, t_fence_h, 2, 20, 21, 20); + ter_set(2, 17, t_column); + ter_set(2, 20, t_column); + ter_set(21, 17, t_column); + ter_set(21, 20, t_column); + ter_set(10, 20, t_column); + ter_set(13, 20, t_column); + line(this, t_fencegate_c, 11, 20, 12, 20); + line_furn(this, f_bench, 4, 17, 7, 17); + square(this, t_rubble, 19, 18, 20, 19); + ter_set(20, 17, t_rubble); + ter_set(18, 19, t_rubble); //Porch done + line(this, t_door_c, 11, 16, 12, 16);//Interior + square(this, t_floor, 3, 4, 9, 9); + square(this, t_floor, 3, 11, 9, 15); + square(this, t_floor, 11, 4, 12, 15); + square(this, t_floor, 14, 4, 20, 9); + square(this, t_floor, 14, 11, 20, 15); + line(this, t_wall_log, 7, 4, 7, 8); + square(this, t_wall_log, 8, 8, 9, 9); + line_furn(this, f_rack, 3, 4, 3, 9); //Pantry Racks + line(this, t_curtains, 2, 6, 2, 7); //Windows start + line(this, t_curtains, 2, 12, 2, 13); + line(this, t_window_domestic, 5, 16, 6, 16); + line(this, t_window_domestic, 17, 16, 18, 16); + line(this, t_curtains, 21, 12, 21, 13); + line(this, t_window_empty, 21, 6, 21, 7); + ter_set(8, 3, t_curtains);//Windows End + line(this, t_door_c, 11, 3, 12, 3);//Rear Doors + square(this, t_rubble, 20, 3, 21, 4); + ter_set(19, 3, t_rubble); + ter_set(21, 5, t_rubble); + furn_set(6, 4, f_desk); + furn_set(6, 5, f_chair); + furn_set(7, 9, f_locker); + ter_set(6, 10, t_door_c); + ter_set(10, 6, t_door_c); + square_furn(this, f_table, 3, 11, 4, 12); + line_furn(this, f_bench, 5, 11, 5, 12); + line_furn(this, f_bench, 3, 13, 4, 13); + line_furn(this, f_cupboard, 3, 15, 7, 15); + furn_set(4, 15, f_fridge); + furn_set(5, 15, f_sink); + furn_set(6, 15, f_oven); + ter_set(10, 13, t_door_c); + ter_set(13, 13, t_door_c); + furn_set(14, 11, f_armchair); + line_furn(this, f_sofa, 16, 11, 18, 11); + square(this, t_rock_floor, 18, 13, 20, 15); + furn_set(19, 14, f_woodstove); + ter_set(19, 10, t_door_c); + line_furn(this, f_bookcase, 14, 9, 17, 9); + square_furn(this, f_bed, 17, 4, 18, 5); + furn_set(16, 4, f_dresser); + furn_set(19, 4, f_dresser); + ter_set(13, 6, t_door_c); + place_toilet(9, 4); + line_furn(this, f_bathtub, 8, 7, 9, 7); + furn_set(8, 5, f_sink); + place_items("fridge", 65, 4, 15, 4, 15, false, 0); + place_items("homeguns", 30, 7, 9, 7, 9, false, 0); + place_items("home_hw", 60, 7, 9, 7, 9, false, 0); + place_items("kitchen", 60, 3, 15, 3, 15, false, 0); + place_items("kitchen", 60, 7, 15, 7, 15, false, 0); + place_items("dining", 60, 3, 11, 4, 12, false, 0); + place_items("trash", 60, 0, 0, 23, 23, false, 0); + place_items("survival_tools", 30, 3, 4, 3, 9, false, 0); + place_items("cannedfood", 50, 3, 4, 3, 9, false, 0); + place_items("camping", 50, 4, 4, 6, 9, false, 0); + place_items("magazines", 60, 14, 9, 17, 9, false, 0); + place_items("manuals", 30, 14, 9, 17, 9, false, 0); + place_items("dresser", 50, 16, 4, 16, 4, false, 0); + place_items("dresser", 50, 19, 4, 19, 4, false, 0); + place_items("softdrugs", 60, 8, 4, 9, 7, false, 0); + place_items("livingroom", 50, 14, 12, 17, 15, false, 0); + add_spawn("mon_zombie", rng(1, 5), 11, 12); + + } else { + square(this, t_wall_log, 4, 2, 10, 6); + square(this, t_floor, 5, 3, 9, 5); + square(this, t_wall_log, 3, 9, 20, 20); + square(this, t_floor, 4, 10, 19, 19); + line(this, t_fence_h, 0, 0, 23, 0); + line(this, t_fence_v, 0, 0, 0, 22); + line(this, t_fence_v, 23, 0, 23, 22); + line(this, t_fence_h, 0, 23, 23, 23); + line(this, t_fencegate_c, 11, 23, 12, 23); + line_furn(this, f_locker, 5, 3, 9, 3); + line_furn(this, f_counter, 6, 3, 8, 3); + ter_set(4, 4, t_window_boarded); + ter_set(10, 4, t_window_boarded); + ter_set(7, 6, t_door_c); + ter_set(9, 9, t_door_c); + line(this, t_window_domestic, 13, 9, 14, 9); + square(this, t_rock, 5, 10, 7, 11); + line(this, t_rock_floor, 5, 12, 7, 12); + set(6, 11, t_rock_floor, f_woodstove); + line_furn(this, f_dresser, 16, 10, 19, 10); + square_furn(this, f_bed, 17, 10, 18, 11); + line(this, t_window_domestic, 3, 14, 3, 15); + line_furn(this, f_sofa, 5, 16, 7, 16); + square_furn(this, f_chair, 10, 14, 13, 15); + square_furn(this, f_table, 11, 14, 12, 15); + line(this, t_window_domestic, 20, 14, 20, 15); + line(this, t_window_domestic, 7, 20, 8, 20); + line(this, t_window_domestic, 16, 20, 17, 20); + ter_set(12, 20, t_door_c); + place_items("livingroom", 60, 4, 13, 8, 18, false, 0); + place_items("dining", 60, 11, 14, 12, 15, false, 0); + place_items("camping", 70, 19, 16, 19, 19, false, 0); + place_items("dresser", 70, 16, 10, 16, 10, false, 0); + place_items("dresser", 70, 19, 10, 19, 10, false, 0); + place_items("tools", 70, 5, 3, 9, 3, false, 0); + add_spawn("mon_zombie", rng(1, 5), 7, 4); + } + + + } else if (terrain_type == "cabin_strange") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ +^ FfffffffffffGfffffF \n\ + F F \n\ + F ^ F \n\ + ^F |-w---| F \n\ + F |cSecu|sssss F \n\ + |-w-|O....=sssss|---| \n\ + |H.T|c...u|-w-w-|>..w \n\ + |H..+....u|d....|-|-| \n\ + |..S|.....+.....+.|r| \n\ + |-+-|.....|...bb|r|.| \n\ + |.........|---|-|-|+| \n\ + w...hh....aaaa|.d...| \n\ + |..htth.......|.....w \n\ + w..htth.......D..bb.w \n\ + w...hh.......o|..bb.| \n\ + |o...........A|-----| \n\ + w.............|d.bb.| \n\ + |.............+..bb.w \n\ + |-+|-w-==-w-|-|.....| \n\ + |r.|ssssssss|r+.....| \n\ + |--|ssssssss|-|--w--| \n\ + ssCssssCss \n\ + ^ ^ \n", + mapf::basic_bind("% ^ f F G H u a A b C . - | t + = D w T S e o h c d r s O >", t_shrub, t_tree, + t_fence_h, t_fence_v, t_fencegate_c, t_floor, t_floor, t_floor, t_floor, t_floor, t_column, + t_floor, t_wall_h, t_wall_v, t_floor, t_door_c, t_door_boarded, t_door_locked_interior, + t_window_boarded, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_sidewalk, t_floor, t_stairs_down), + mapf::basic_bind("% ^ f F G H u a A b C . - | t + = D w T S e o h c d r s O >", f_null, f_null, + f_null, f_null, f_null, f_bathtub, f_cupboard, f_sofa, f_armchair, f_bed, f_null, + f_null, f_null, f_null, f_table, f_null, f_null, f_null, f_null, + f_toilet, f_sink, f_fridge, f_bookcase, f_chair, f_counter, f_dresser, f_rack, f_null, f_oven, + f_null)); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_fridge) { + place_items("fridgesnacks", 30, i, j, i, j, true, 0); + } + if (this->furn(i, j) == f_cupboard) { + place_items("cannedfood", 30, i, j, i, j, true, 0); + } + if (this->furn(i, j) == f_rack || this->furn(i, j) == f_dresser) { + place_items("dresser", 40, i, j, i, j, true, 0); + } + if (this->furn(i, j) == f_bookcase) { + place_items("novels", 40, i, j, i, j, true, 0); + } + if (this->ter(i, j) == t_floor) { + place_items("subway", 10, i, j, i, j, true, 0); + } + } + } + + + } else if (terrain_type == "cabin_strange_b") { + + // Init to grass & dirt; + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ +########################\n\ +################...h...#\n\ +########c.cc####.httth.#\n\ +###T..##c....+...ht.th.#\n\ +###...G....c####.......#\n\ +###bb.##....############\n\ +##########D###|---|---|#\n\ +##########.###|cdc|<..|#\n\ +##.hhh.##...##|.h.|-D-|#\n\ +#.......#.C.##|-+-|..h##\n\ +#.hh.hh.D...##c......c##\n\ +#.......#.C.##ccC..Ccc##\n\ +#.hh.hh.#...##cc.....r##\n\ +#.......#.C.##ccC..C.r##\n\ +#.hh.hh.#...##tt..ch.r##\n\ +#.......#.C.##ttCccC..##\n\ +#.......#............A##\n\ +#...t...#.C..C.cC..C..##\n\ +##.....##..h..ccccbbo.##\n\ +###+#+##################\n\ +##.....#################\n\ +##.....#################\n\ +##.....#################\n\ +########################\n", + mapf::basic_bind("G A b C . - | t + = D o h c d r < # T", t_door_bar_locked, t_dirtfloor, + t_dirtfloor, t_column, t_dirtfloor, t_wall_h, t_wall_v, t_dirtfloor, t_door_c, t_door_boarded, + t_door_locked_interior, t_dirtfloor, t_dirtfloor, t_floor, t_dirtfloor, t_dirtfloor, t_stairs_up, + t_rock, t_dirtfloor), + mapf::basic_bind("G A b C . - | t + = D o h c d r < # T", f_null, f_armchair, f_bed, + f_null, f_null, f_null, f_null, f_table, f_null, f_null, f_null, + f_bookcase, f_chair, f_crate_o, f_desk, f_rack, f_null, f_null, f_toilet)); + spawn_item(2, 17, "brazier"); + spawn_item(6, 17, "brazier"); + spawn_item(4, 17, "etched_skull"); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_crate_c) { + place_items("dresser", 20, i, j, i, j, true, 0); + } + if (this->furn(i, j) == f_cupboard || this->furn(i, j) == f_rack) { + place_items("cannedfood", 30, i, j, i, j, true, 0); + } + if (this->furn(i, j) == f_bookcase) { + place_items("novels", 40, i, j, i, j, true, 0); + } + if (this->ter(i, j) == t_dirtfloor) { + place_items("subway", 10, i, j, i, j, true, 0); + } + } + } + add_spawn("mon_dementia", rng(3, 6), 4, 12); + add_spawn("mon_dementia", rng(1, 4), 19, 2); + add_spawn("mon_blood_sacrifice", 1, 4, 21); + + + } else { + terrain_type_found = false; + } + + // MSVC can't handle a single "if/else if" with this many clauses. Hack to + // break the clause in two so MSVC compiles work, until this file is refactored. + if (!terrain_type_found) { + if (terrain_type == "farm") { + + if (!one_in(10)) { + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + %%% %%% \n\ +###++### |-w---+-----w-|\n\ +#DD____# |uSeuu........|\n\ +#D_____# |o............|\n\ +#_1__1_# |u..........H.|\n\ +#______# |u...|---+----|\n\ +#______# |-+-||kh......|\n\ +#_1__1_# |...|.........w\n\ +#______# |b..+......BB.|\n\ +#____ll# |.ST|.....dBBd|\n\ +###++### |-w-|----w----|\n\ + \n\ + \n\ +FFFFFFFFFFFFFFFFFFFFFFFF\n\ +,,,,,,,,,,,,,,,,,,,,,,,,\n", + mapf::basic_bind(", F . _ H u e S T o b l # % 1 D + - | w k h B d", t_dirt, t_fence_barbed, t_floor, + t_dirtfloor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_wall_wood, t_shrub, t_column, t_dirtmound, t_door_c, t_wall_h, t_wall_v, t_window_domestic, + t_floor, t_floor, t_floor, t_floor), + mapf::basic_bind(", F . _ H u e S T o b l # % 1 D + - | w k h B d", f_null, f_null, f_null, + f_null, f_armchair, f_cupboard, f_fridge, f_sink, f_toilet, f_oven, f_bathtub, f_locker, + f_null, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_desk, f_chair, f_bed, f_dresser)); + place_items("fridge", 65, 12, 11, 12, 11, false, 0); + place_items("kitchen", 70, 10, 11, 14, 3, false, 0); + place_items("livingroom", 65, 15, 11, 22, 13, false, 0); + place_items("dresser", 80, 19, 18, 19, 18, false, 0); + place_items("dresser", 80, 22, 18, 22, 18, false, 0); + place_items("bedroom", 65, 15, 15, 22, 18, false, 0); + place_items("softdrugs", 70, 11, 16, 12, 17, false, 0); + place_items("bigtools", 50, 1, 11, 6, 18, true, 0); + place_items("homeguns", 20, 1, 11, 6, 18, true, 0); + if (one_in(2)) { + add_spawn("mon_zombie", rng(1, 6), 4, 14); + } else { + place_spawns(g, "GROUP_DOMESTIC", 2, 10, 15, 12, 17, 1); + } + } else { + fill_background(this, &grass_or_dirt); + mapf::formatted_set_simple(this, 0, 0, + "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + %%% %%% \n\ +###++### |-w---+-----w-|\n\ +#DD____# |uSeuu..mm....|\n\ +#D_____# |o...........m|\n\ +#_1__1_# |u...........m|\n\ +#______# |u...|---+----|\n\ +#______# |-+-||mm....mm|\n\ +#_1__1_# |...|.........w\n\ +#______# |b..+......BB.|\n\ +#____ll# |.ST|mm...dBBd|\n\ +###++### |-w-|----w----|\n\ + \n\ + \n\ +FFFFFFFFFFFFFFFFFFFFFFFF\n\ +,,,,,,,,,,,,,,,,,,,,,,,,\n", + mapf::basic_bind("m , F . _ H u e S T o b l # % 1 D + - | w k h B d", t_floor, t_dirt, + t_fence_barbed, t_floor, t_dirtfloor, t_floor, t_floor, t_floor, t_floor, t_floor, t_floor, + t_floor, t_floor, t_wall_wood, t_shrub, t_column, t_dirtmound, t_door_c, t_wall_h, t_wall_v, + t_window_domestic, t_floor, t_floor, t_floor, t_floor), + mapf::basic_bind("m , F . _ H u e S T o b l # % 1 D + - | w k h B d", f_makeshift_bed, f_null, + f_null, f_null, f_null, f_armchair, f_cupboard, f_fridge, f_sink, f_toilet, f_oven, + f_bathtub, f_locker, f_null, f_null, f_null, f_null, f_null, f_null, f_null, + f_null, f_desk, f_chair, f_bed, f_dresser)); + place_items("cannedfood", 65, 12, 11, 12, 11, false, 0); + place_items("bigtools", 50, 1, 11, 6, 18, true, 0); + place_items("homeguns", 20, 1, 11, 6, 18, true, 0); + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->furn(i, j) == f_dresser) { + place_items("dresser", 50, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_floor) { + place_items("trash", 20, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_cupboard) { + place_items("kitchen", 70, i, j, i, j, false, 0); + place_items("softdrugs", 40, i, j, i, j, false, 0); + place_items("cannedfood", 40, i, j, i, j, false, 0); + } + if (this->furn(i, j) == f_makeshift_bed || this->furn(i, j) == f_bed) { + place_items("livingroom", 20, i, j, i, j, false, 0); + place_items("survival_armor", 20, i, j, i, j, false, 0); + place_items("camping", 20, i, j, i, j, false, 0); + place_items("survival_tools", 20, i, j, i, j, false, 0); + } + if (this->ter(i, j) == t_grass) { + if (one_in(20)) { + add_trap(i, j, tr_beartrap); + } + if (one_in(20)) { + add_trap(i, j, tr_tripwire); + } + if (one_in(15)) { + add_trap(i, j, tr_pit); + } + } + } + } + } + + + } else if (terrain_type == "farm_field") { + + //build barn + if (t_east == "farm") { + fill_background(this, &grass_or_dirt); + square(this, t_wall_wood, 3, 3, 20, 20); + square(this, t_dirtfloor, 4, 4, 19, 19); + line(this, t_door_metal_locked, 8, 20, 15, 20); + ter_set(16, 19, t_barndoor); + ter_set(16, 21, t_barndoor); + line(this, t_door_metal_locked, 8, 3, 15, 3); + ter_set(16, 2, t_barndoor); + ter_set(16, 4, t_barndoor); + square_furn(this, f_hay, 4, 4, 6, 6); + line(this, t_fence_h, 4, 8, 6, 8); + line(this, t_fence_v, 6, 9, 6, 14); + line(this, t_fence_h, 4, 15, 6, 15); + line(this, t_fencegate_c, 6, 11, 6, 12); + + line(this, t_fence_h, 17, 8, 19, 8); + line(this, t_fence_v, 17, 9, 17, 14); + line(this, t_fence_h, 17, 15, 19, 15); + line(this, t_fencegate_c, 17, 11, 17, 12); + line_furn(this, f_locker, 4, 19, 7, 19); + ter_set(7, 7, t_column); + ter_set(16, 7, t_column); + ter_set(7, 16, t_column); + ter_set(16, 16, t_column); + ter_set(5, 3, t_window_boarded); + ter_set(18, 3, t_window_boarded); + line(this, t_window_boarded, 3, 5, 3, 6); + line(this, t_window_boarded, 3, 11, 3, 12); + line(this, t_window_boarded, 3, 17, 3, 18); + line(this, t_window_boarded, 20, 5, 20, 6); + line(this, t_window_boarded, 20, 11, 20, 12); + line(this, t_window_boarded, 20, 17, 20, 18); + ter_set(5, 20, t_window_boarded); + ter_set(18, 20, t_window_boarded); + + if(t_south == "farm_field") { + square(this, t_fence_barbed, 1, 20, 1, 23); + ter_set(2, 20, t_fence_barbed); + ter_set(1, 20, t_fence_post); + square(this, t_fence_barbed, 22, 20, 22, 22); + ter_set(21, 20, t_fence_barbed); + ter_set(23, 22, t_fence_barbed); + ter_set(22, 22, t_fence_post); + ter_set(22, 20, t_fence_post); + square(this, t_dirt, 2, 21, 21, 23); + square(this, t_dirt, 22, 23, 23, 23); + ter_set(16, 21, t_barndoor); + } + place_items("bigtools", 60, 4, 4, 7, 19, true, 0); + place_items("bigtools", 60, 16, 5, 19, 19, true, 0); + place_items("mechanics", 40, 8, 4, 15, 19, true, 0); + place_items("home_hw", 50, 4, 19, 7, 19, true, 0); + place_items("tools", 50, 4, 19, 7, 19, true, 0); + if (one_in(3)) { + add_spawn("mon_zombie", rng(3, 6), 12, 12); + } else { + place_spawns(g, "GROUP_DOMESTIC", 2, 0, 0, 15, 15, 1); + } + + } else { + fill_background(this, t_grass); // basic lot + square(this, t_fence_barbed, 1, 1, 22, 22); + square(this, t_dirt, 2, 2, 21, 21); + ter_set(1, 1, t_fence_post); + ter_set(22, 1, t_fence_post); + ter_set(1, 22, t_fence_post); + ter_set(22, 22, t_fence_post); + + int xStart = 4; + int xEnd = 19; + //acidia, connecting fields + if(t_east == "farm_field") { + square(this, t_fence_barbed, 22, 1, 23, 22); + square(this, t_dirt, 21, 2, 23, 21); + xEnd = 22; + } + if(t_west == "farm_field") { + square(this, t_fence_barbed, 0, 1, 1, 22); + square(this, t_dirt, 0, 2, 2, 21); + xStart = 1; + } + if(t_south == "farm_field") { + square(this, t_fence_barbed, 1, 22, 22, 23); + square(this, t_dirt, 2, 21, 21, 23); + line(this, t_dirtmound, xStart, 21, xEnd, 21); + if(t_east == "farm_field") { + square(this, t_dirt, 20, 20, 23, 23); + } + if(t_west == "farm_field") { + square(this, t_dirt, 0, 20, 3, 23); + } + } + if(t_north == "farm_field" || t_north == "farm") { + square(this, t_fence_barbed, 1, 0, 22, 1); + square(this, t_dirt, 2, 0, 21, 2); + line(this, t_dirtmound, xStart, 1, xEnd, 1); + if(t_east == "farm_field") { + square(this, t_dirt, 20, 0, 23, 3); + } + if(t_west == "farm_field") { + square(this, t_dirt, 0, 0, 3, 3); + } + } + if(t_west == "farm") { + square(this, t_fence_barbed, 0, 22, 1, 22); + square(this, t_dirt, 0, 23, 2, 23); + ter_set(1, 22, t_fence_post); + } + //standard field + line(this, t_dirtmound, xStart, 3, xEnd, 3); //Crop rows + line(this, t_dirtmound, xStart, 5, xEnd, 5); + line(this, t_dirtmound, xStart, 7, xEnd, 7); + line(this, t_dirtmound, xStart, 9, xEnd, 9); + line(this, t_dirtmound, xStart, 11, xEnd, 11); + line(this, t_dirtmound, xStart, 13, xEnd, 13); + line(this, t_dirtmound, xStart, 15, xEnd, 15); + line(this, t_dirtmound, xStart, 17, xEnd, 17); + line(this, t_dirtmound, xStart, 19, xEnd, 19); + + place_items("hydro", 70, xStart, 3, xEnd, 3, true, turn); //Spawn crops + place_items("hydro", 70, xStart, 5, xEnd, 5, true, turn); + place_items("hydro", 70, xStart, 7, xEnd, 7, true, turn); + place_items("hydro", 70, xStart, 9, xEnd, 9, true, turn); + place_items("hydro", 70, xStart, 11, xEnd, 11, true, turn); + place_items("hydro", 70, xStart, 13, xEnd, 13, true, turn); + place_items("hydro", 70, xStart, 15, xEnd, 15, true, turn); + place_items("hydro", 70, xStart, 17, xEnd, 17, true, turn); + place_items("hydro", 70, xStart, 19, xEnd, 19, true, turn); + } + + + } else if (is_ot_type("police", terrain_type)) { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((j == 7 && i != 17 && i != 18) || + (j == 12 && i != 0 && i != 17 && i != 18 && i != SEEX * 2 - 1) || + (j == 14 && ((i > 0 && i < 6) || i == 9 || i == 13 || i == 17)) || + (j == 15 && i > 17 && i < SEEX * 2 - 1) || + (j == 17 && i > 0 && i < 17) || + (j == 20)) { + ter_set(i, j, t_wall_h); + } else if (((i == 0 || i == SEEX * 2 - 1) && j > 7 && j < 20) || + ((i == 5 || i == 10 || i == 16 || i == 19) && j > 7 && j < 12) || + ((i == 5 || i == 9 || i == 13) && j > 14 && j < 17) || + (i == 17 && j > 14 && j < 20)) { + ter_set(i, j, t_wall_v); + } else if (j == 14 && i > 5 && i < 17 && i % 2 == 0) { + ter_set(i, j, t_bars); + } else if ((i > 1 && i < 4 && j > 8 && j < 11) || + (j == 17 && i > 17 && i < 21)) { + set(i, j, t_floor, f_counter); + } else if ((i == 20 && j > 7 && j < 12) || (j == 8 && i > 19 && i < 23) || + (j == 15 && i > 0 && i < 5)) { + set(i, j, t_floor, f_locker); + } else if (j < 7) { + ter_set(i, j, t_pavement); + } else if (j > 20) { + ter_set(i, j, t_sidewalk); + } else { + ter_set(i, j, t_floor); + } + } + } + ter_set(17, 7, t_door_locked); + ter_set(18, 7, t_door_locked); + ter_set(rng( 1, 4), 12, t_door_c); + ter_set(rng( 6, 9), 12, t_door_c); + ter_set(rng(11, 15), 12, t_door_c); + ter_set(21, 12, t_door_metal_locked); + tmpcomp = add_computer(22, 13, _("PolCom OS v1.47"), 3); + tmpcomp->add_option(_("Open Supply Room"), COMPACT_OPEN, 3); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + tmpcomp->add_failure(COMPFAIL_MANHACKS); + ter_set( 7, 14, t_door_c); + ter_set(11, 14, t_door_c); + ter_set(15, 14, t_door_c); + ter_set(rng(20, 22), 15, t_door_c); + ter_set(2, 17, t_door_metal_locked); + tmpcomp = add_computer(22, 13, _("PolCom OS v1.47"), 3); + tmpcomp->add_option(_("Open Evidence Locker"), COMPACT_OPEN, 3); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + tmpcomp->add_failure(COMPFAIL_MANHACKS); + ter_set(17, 18, t_door_c); + for (int i = 18; i < SEEX * 2 - 1; i++) { + ter_set(i, 20, t_window); + } + if (one_in(3)) { + for (int j = 16; j < 20; j++) { + ter_set(SEEX * 2 - 1, j, t_window); + } + } + rn = rng(18, 21); + if (one_in(4)) { + ter_set(rn , 20, t_door_c); + ter_set(rn + 1, 20, t_door_c); + } else { + ter_set(rn , 20, t_door_locked); + ter_set(rn + 1, 20, t_door_locked); + } + rn = rng(1, 5); + ter_set(rn, 20, t_window); + ter_set(rn + 1, 20, t_window); + rn = rng(10, 14); + ter_set(rn, 20, t_window); + ter_set(rn + 1, 20, t_window); + if (one_in(2)) { + for (int i = 6; i < 10; i++) { + furn_set(i, 8, f_counter); + } + } + if (one_in(3)) { + for (int j = 8; j < 12; j++) { + furn_set(6, j, f_counter); + } + } + if (one_in(3)) { + for (int j = 8; j < 12; j++) { + furn_set(9, j, f_counter); + } + } + + place_items("kitchen", 40, 6, 8, 9, 11, false, 0); + place_items("cop_weapons", 70, 20, 8, 22, 8, false, 0); + place_items("cop_weapons", 70, 20, 8, 20, 11, false, 0); + place_items("cop_evidence", 60, 1, 15, 4, 15, false, 0); + + for (int i = 0; i <= 23; i++) { + for (int j = 0; j <= 23; j++) { + if (this->ter(i, j) == t_floor && one_in(80)) { + spawn_item(i, j, "badge_deputy"); + } + } + } + + if (terrain_type == "police_west") { + rotate(1); + } + if (terrain_type == "police_north") { + rotate(2); + } + if (terrain_type == "police_east") { + rotate(3); + } + + place_spawns(g, "GROUP_POLICE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); + + + } else if (is_ot_type("bank", terrain_type)) { + + fill_background(this, &grass_or_dirt); + + square(this, t_floor, 1, 1, 22, 22); + line(this, t_wall_h, 1, 1, 22, 1); + line(this, t_wall_h, 2, 6, 19, 6); + line(this, t_wall_h, 2, 13, 18, 13); + line(this, t_wall_h, 1, 22, 22, 22); + line(this, t_wall_h, 9, 9, 18, 9); + line(this, t_wall_v, 1, 2, 1, 21); + line(this, t_wall_v, 22, 2, 22, 21); + line(this, t_wall_v, 19, 9, 19, 21); + line(this, t_wall_v, 13, 14, 13, 16); + line(this, t_wall_v, 13, 19, 13, 21); + line(this, t_wall_v, 8, 7, 8, 12); + line(this, t_wall_metal_h, 3, 14, 11, 14); + line(this, t_wall_metal_h, 3, 21, 11, 21); + line(this, t_wall_metal_v, 2, 14, 2, 21); + line(this, t_wall_metal_v, 12, 14, 12, 16); + line(this, t_wall_metal_v, 12, 19, 12, 21); + line_furn(this, f_counter, 2, 4, 14, 4); + ter_set(13, 17, t_door_metal_locked); + ter_set(13, 18, t_door_metal_locked); + tmpcomp = add_computer(14, 16, _("First United Bank"), 3); + tmpcomp->add_option(_("Open Vault"), COMPACT_OPEN, 3); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + // Front wall--glass or windows? + if (!one_in(4)) { + line(this, t_wall_glass_h_alarm, 2, 1, 21, 1); + if (one_in(2)) { + line(this, t_wall_glass_v_alarm, 1, 2, 1, 5); // Side wall for teller room + } + } else { + if (one_in(4)) { + line(this, t_wall_glass_v_alarm, 1, 2, 1, 5); // Side wall for teller room + } + rn = rng(3, 7); + ter_set(rn , 1, t_window_alarm); + ter_set(rn + 1, 1, t_window_alarm); + rn = rng(13, 18); + ter_set(rn , 1, t_window_alarm); + ter_set(rn + 1, 1, t_window_alarm); + } + // Doors for offices + ter_set(8, rng(7, 8), t_door_c); + ter_set(rng(10, 17), 9, t_door_c); + ter_set(19, rng(15, 20), t_door_c); + // Side and back windows + ter_set(1, rng(7, 12), t_window_alarm); + ter_set(1, rng(7, 12), t_window_alarm); + ter_set(rng(14, 18), 22, t_window_alarm); + if (one_in(2)) { + ter_set(rng(14, 18), 22, t_window_alarm); + } + if (one_in(10)) { + line(this, t_wall_glass_v, 22, 2, 22, 21); // Right side is glass wall! + } else { + rn = rng(7, 12); + ter_set(22, rn , t_window_alarm); + ter_set(22, rn + 1, t_window_alarm); + rn = rng(13, 19); + ter_set(22, rn , t_window_alarm); + ter_set(22, rn + 1, t_window_alarm); + } + // Finally, place the front doors. + if (one_in(4)) { // 1 in 4 are unlocked + ter_set(10, 1, t_door_c); + ter_set(11, 1, t_door_c); + } else if (one_in(4)) { // 1 in 4 locked ones are un-alarmed + ter_set(10, 1, t_door_locked); + ter_set(11, 1, t_door_locked); + } else { + ter_set(10, 1, t_door_locked_alarm); + ter_set(11, 1, t_door_locked_alarm); + } + + place_items("office", 60, 2, 7, 7, 12, false, 0); + place_items("office", 60, 9, 10, 18, 12, false, 0); + place_items("office", 70, 14, 14, 18, 21, false, 0); + place_items("vault", 45, 3, 15, 11, 20, false, 0); + + if (terrain_type == "bank_east") { + rotate(1); + } + if (terrain_type == "bank_south") { + rotate(2); + } + if (terrain_type == "bank_west") { + rotate(3); + } + + + } else if (is_ot_type("bar", terrain_type)) { + + fill_background(this, t_pavement); + square(this, t_floor, 2, 2, 21, 15); + square(this, t_floor, 18, 17, 21, 18); + + mapf::formatted_set_simple(this, 1, 1, + "\ +|---------++---------|\n\ +| |\n\ +| ## ## ## ccc|\n\ +| ## ## ## c &|\n\ +| c B|\n\ +| c B|\n\ +| c B|\n\ +| ## ## ## c B|\n\ +| ## ## ## c |\n\ +| cc |\n\ +| |\n\ +| |\n\ +| xxxxx xxxxx |\n\ +| xxxxx xxxxx |\n\ +| |\n\ +|------------------D-|\n\ + D &|\n\ + |cccc|\n\ + |----|\n", + mapf::basic_bind("- | + D", t_wall_h, t_wall_v, t_door_c, t_door_locked), + mapf::basic_bind("# c x & B", f_table, f_counter, f_pool_table, f_fridge, f_rack)); + + // Pool table items + place_items("pool_table", 50, 4, 13, 8, 14, false, 0); + place_items("pool_table", 50, 13, 13, 17, 14, false, 0); + + // 1 in 4 chance to have glass walls in front + if (one_in(4)) { + mapf::formatted_set_terrain(this, 1, 1, " === === === === ", mapf::basic_bind("=", + t_wall_glass_h), mapf::end() ); + mapf::formatted_set_terrain(this, 1, 1, "\n\n=\n=\n=\n\n=\n=\n=\n\n=\n=\n=\n\n", + mapf::basic_bind("=", t_wall_glass_v), mapf::end()); + } else { + mapf::formatted_set_terrain(this, 1, 1, " : : : : : : ", mapf::basic_bind(":", t_window), + mapf::end() ); + mapf::formatted_set_terrain(this, 1, 1, "\n\n\n\n\n:\n\n\n\n\n:\n\n\n\n", mapf::basic_bind(":", + t_window), mapf::end()); + } + + // Item placement + place_items("snacks", 30, 19, 3, 19, 10, false, 0); //counter + place_items("snacks", 50, 18, 18, 21, 18, false, 0); + place_items("fridgesnacks", 60, 21, 4, 21, 4, false, 0); // fridge + place_items("fridgesnacks", 60, 21, 17, 21, 17, false, 0); + place_items("alcohol", 70, 21, 5, 21, 8, false, 0); // rack + place_items("trash", 15, 2, 17, 16, 19, true, 0); + + if (terrain_type == "bar_east") { + rotate(1); + } + if (terrain_type == "bar_south") { + rotate(2); + } + if (terrain_type == "bar_west") { + rotate(3); + } + + + } else if (is_ot_type("pawn", terrain_type)) { + + // Init to plain grass/dirt + fill_background(this, &grass_or_dirt); + + tw = rng(0, 10); + bw = SEEY * 2 - rng(1, 2) - rng(0, 1) * rng(0, 1); + lw = rng(0, 4); + rw = SEEX * 2 - rng(1, 5); + if (tw >= 6) { // Big enough for its own parking lot + square(this, t_pavement, 0, 0, SEEX * 2 - 1, tw - 1); + for (int i = rng(0, 1); i < SEEX * 2; i += 4) { + line(this, t_pavement_y, i, 1, i, tw - 1); + } + } + // Floor and walls + square(this, t_floor, lw, tw, rw, bw); + line(this, t_wall_h, lw, tw, rw, tw); + line(this, t_wall_h, lw, bw, rw, bw); + line(this, t_wall_v, lw, tw + 1, lw, bw - 1); + line(this, t_wall_v, rw, tw + 1, rw, bw - 1); + // Doors and windows--almost certainly alarmed + if (one_in(15)) { + line(this, t_window, lw + 2, tw, lw + 5, tw); + line(this, t_window, rw - 5, tw, rw - 2, tw); + line(this, t_door_locked, SEEX, tw, SEEX + 1, tw); + } else { + line(this, t_window_alarm, lw + 2, tw, lw + 5, tw); + line(this, t_window_alarm, rw - 5, tw, rw - 2, tw); + line(this, t_door_locked_alarm, SEEX, tw, SEEX + 1, tw); + } + // Some display racks by the left and right walls + line_furn(this, f_rack, lw + 1, tw + 1, lw + 1, bw - 1); + place_items("pawn", 86, lw + 1, tw + 1, lw + 1, bw - 1, false, 0); + line_furn(this, f_rack, rw - 1, tw + 1, rw - 1, bw - 1); + place_items("pawn", 86, rw - 1, tw + 1, rw - 1, bw - 1, false, 0); + // Some display counters + line_furn(this, f_counter, lw + 4, tw + 2, lw + 4, bw - 3); + place_items("pawn", 80, lw + 4, tw + 2, lw + 4, bw - 3, false, 0); + line_furn(this, f_counter, rw - 4, tw + 2, rw - 4, bw - 3); + place_items("pawn", 80, rw - 4, tw + 2, rw - 4, bw - 3, false, 0); + // More display counters, if there's room for them + if (rw - lw >= 18 && one_in(rw - lw - 17)) { + for (int j = tw + rng(3, 5); j <= bw - 3; j += 3) { + line_furn(this, f_counter, lw + 6, j, rw - 6, j); + place_items("pawn", 75, lw + 6, j, rw - 6, j, false, 0); + } + } + // Finally, place an office sometimes + if (!one_in(5)) { + if (one_in(2)) { // Office on the left side + int office_top = bw - rng(3, 5), office_right = lw + rng(4, 7); + // Clear out any items in that area! And reset to floor. + for (int i = lw + 1; i <= office_right; i++) { + for (int j = office_top; j <= bw - 1; j++) { + i_clear(i, j); + ter_set(i, j, t_floor); + } + } + line(this, t_wall_h, lw + 1, office_top, office_right, office_top); + line(this, t_wall_v, office_right, office_top + 1, office_right, bw - 1); + ter_set(office_right, rng(office_top + 1, bw - 1), t_door_locked); + if (one_in(4)) { // Back door + ter_set(rng(lw + 1, office_right - 1), bw, t_door_locked_alarm); + } + // Finally, add some stuff in there + place_items("office", 70, lw + 1, office_top + 1, office_right - 1, bw - 1, + false, 0); + place_items("homeguns", 50, lw + 1, office_top + 1, office_right - 1, + bw - 1, false, 0); + place_items("harddrugs", 20, lw + 1, office_top + 1, office_right - 1, + bw - 1, false, 0); + } else { // Office on the right side + int office_top = bw - rng(3, 5), office_left = rw - rng(4, 7); + for (int i = office_left; i <= rw - 1; i++) { + for (int j = office_top; j <= bw - 1; j++) { + i_clear(i, j); + ter_set(i, j, t_floor); + } + } + line(this, t_wall_h, office_left, office_top, rw - 1, office_top); + line(this, t_wall_v, office_left, office_top + 1, office_left, bw - 1); + ter_set(office_left, rng(office_top + 1, bw - 1), t_door_locked); + if (one_in(4)) { // Back door + ter_set(rng(office_left + 1, rw - 1), bw, t_door_locked_alarm); + } + place_items("office", 70, office_left + 1, office_top + 1, rw - 1, bw - 1, + false, 0); + place_items("homeguns", 50, office_left + 1, office_top + 1, rw - 1, + bw - 1, false, 0); + place_items("harddrugs", 20, office_left + 1, office_top + 1, rw - 1, + bw - 1, false, 0); + } + } + if (terrain_type == "pawn_east") { + rotate(1); + } + if (terrain_type == "pawn_south") { + rotate(2); + } + if (terrain_type == "pawn_west") { + rotate(3); + } + + + } else if (is_ot_type("mil_surplus", terrain_type)) { + + // Init to plain grass/dirt + fill_background(this, &grass_or_dirt); + lw = rng(0, 2); + rw = SEEX * 2 - rng(1, 3); + tw = rng(0, 4); + bw = SEEY * 2 - rng(3, 8); + square(this, t_floor, lw, tw, rw, bw); + line(this, t_wall_h, lw, tw, rw, tw); + line(this, t_wall_h, lw, bw, rw, bw); + line(this, t_wall_v, lw, tw + 1, lw, bw - 1); + line(this, t_wall_v, rw, tw + 1, rw, bw - 1); + rn = rng(4, 7); + line(this, t_window, lw + 2, tw, lw + rn, tw); + line(this, t_window, rw - rn, tw, rw - 2, tw); + line(this, t_door_c, SEEX, tw, SEEX + 1, tw); + if (one_in(2)) { // counter on left + line_furn(this, f_counter, lw + 2, tw + 1, lw + 2, tw + rng(3, 4)); + } else { // counter on right + line_furn(this, f_counter, rw - 2, tw + 1, rw - 2, tw + rng(3, 4)); + } + for (int i = lw + 1; i <= SEEX; i += 2) { + line_furn(this, f_rack, i, tw + 5, i, bw - 2); + items_location loc; + if (one_in(3)) { + loc = "mil_armor"; + } else if (one_in(3)) { + loc = "mil_surplus"; + } else { + loc = "mil_food_nodrugs"; + } + place_items(loc, 70, i, tw + 5, i, bw - 2, false, 0); + } + for (int i = rw - 1; i >= SEEX + 1; i -= 2) { + line_furn(this, f_rack, i, tw + 5, i, bw - 2); + items_location loc; + if (one_in(3)) { + loc = "mil_armor"; + } else if (one_in(3)) { + loc = "mil_surplus"; + } else { + loc = "mil_food_nodrugs"; + } + place_items(loc, 70, i, tw + 5, i, bw - 2, false, 0); + } + if (terrain_type == "mil_surplus_east") { + rotate(1); + } + if (terrain_type == "mil_surplus_south") { + rotate(2); + } + if (terrain_type == "mil_surplus_west") { + rotate(3); + } + + + } else if (is_ot_type("furniture", terrain_type)) { + + fill_background(this, t_pavement); + + square(this, t_floor, 2, 2, 21, 15); + + square(this, t_floor, 2, 17, 7, 18); + + mapf::formatted_set_simple(this, 1, 1, + "\ +|ggggggggg++ggggggggg|\n\ +| C h H O O & & |\n\ +|B c |\n\ +|B c |\n\ +|cccccccc # m e B|\n\ +|bb m e B|\n\ +|d mm e B|\n\ +|bb B|\n\ +|bb dd OO oo |\n\ +|# dd OO oo B|\n\ +|h B|\n\ +|h EE CC && B|\n\ +|H EE CC && B|\n\ +|H |\n\ +| BBBBBBBBBBBBBB|\n\ +|DD------------------|\n\ +| D \n\ +|BBBB D \n\ +|------| \n", + mapf::basic_bind("g - | + D", t_wall_glass_h, t_wall_h, t_wall_v, t_door_c, t_door_locked), + mapf::basic_bind("# c & B C O b H h o d e m E", f_table, f_counter, f_fridge, f_rack, f_cupboard, + f_oven, f_bed, f_armchair, f_chair, f_toilet, f_dresser, f_desk, f_sofa, f_bookcase), + true // empty toilets + ); + place_items("tools", 50, 21, 5, 21, 8, false, 0); + //Upper Right Shelf + place_items("hardware", 50, 21, 10, 21, 13, false, 0); + //Right Shelf + place_items("hardware", 75, 8, 15, 21, 15, false, 0); + //Bottom Right Shelf + place_items("tools", 75, 2, 18, 5, 18, false, 0); + //Bottom Left Shelf + place_items("magazines", 75, 2, 3, 2, 4, false, 0); + //Upper Left Shelf + + if (terrain_type == "furniture_east") { + rotate(1); + } + + if (terrain_type == "furniture_south") { + rotate(2); + } + + if (terrain_type == "furniture_west") { + rotate(3); + } + + + } else if (is_ot_type("abstorefront", terrain_type)) { + + fill_background(this, t_pavement); + + square(this, t_floor, 2, 2, 21, 15); + mapf::formatted_set_simple(this, 1, 1, + "\ +|-xxxxxxxxDDxxxxxxxx-|\n\ +| B|\n\ +|B c B B B|\n\ +|B c B B B|\n\ +|B c B B B B B|\n\ +|cccc B B B B B|\n\ +|B B B B B B|\n\ +|B B|\n\ +|B BBBB BBBBBB BB B|\n\ +| BB B|\n\ +|B BBBB BBBBBB B|\n\ +|B --+-|\n\ +|B |B |\n\ +|BBBBBBB BBBBBB |B D\n\ +|--------------------|\n", + mapf::basic_bind("x - | + D", t_window_boarded, t_wall_h, t_wall_v, t_door_c, t_door_locked), + mapf::basic_bind("B c", f_rack, f_counter)); + if (terrain_type == "abstorefront_east") { + rotate(1); + } + + if (terrain_type == "abstorefront_south") { + rotate(2); + } + + if (terrain_type == "abstorefront_west") { + rotate(3); + } + + + } else if (terrain_type == "megastore_entrance") { + + fill_background(this, t_floor); + // Construct facing north; below, we'll rotate to face road + line(this, t_wall_glass_h, 0, 0, SEEX * 2 - 1, 0); + ter_set(SEEX, 0, t_door_glass_c); + ter_set(SEEX + 1, 0, t_door_glass_c); + // Long checkout lanes + for (int x = 2; x <= 18; x += 4) { + line_furn(this, f_counter, x, 4, x, 14); + line_furn(this, f_rack, x + 3, 4, x + 3, 14); + place_items("snacks", 80, x + 3, 4, x + 3, 14, false, 0); + place_items("magazines", 70, x + 3, 4, x + 3, 14, false, 0); + } + for (int i = 0; i < 10; i++) { + int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); + if (ter(x, y) == t_floor) { + add_spawn("mon_zombie", 1, x, y); + } + } + // Finally, figure out where the road is; contruct our entrance facing that. + std::vector faces_road; + if (is_ot_type("road", t_east) || is_ot_type("bridge", t_east)) { + rotate(1); + } + if (is_ot_type("road", t_south) || is_ot_type("bridge", t_south)) { + rotate(2); + } + if (is_ot_type("road", t_west) || is_ot_type("bridge", t_west)) { + rotate(3); + } + + + } else if (terrain_type == "megastore") { + + square(this, t_floor, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); + + // Randomly pick contents + switch (rng(1, 5)) { + case 1: { // Groceries + bool fridge = false; + for (int x = rng(2, 3); x < SEEX * 2 - 1; x += 3) { + for (int y = 2; y <= SEEY; y += SEEY - 2) { + if (one_in(3)) { + fridge = !fridge; + } + if (fridge) { + line_furn(this, f_glass_fridge, x, y, x, y + SEEY - 4); + if (one_in(3)) { + place_items("fridgesnacks", 80, x, y, x, y + SEEY - 4, false, 0); + } else { + place_items("fridge", 70, x, y, x, y + SEEY - 4, false, 0); + } + } else { + line_furn(this, f_rack, x, y, x, y + SEEY - 4); + if (one_in(3)) { + place_items("cannedfood", 78, x, y, x, y + SEEY - 4, false, 0); + } else if (one_in(2)) { + place_items("pasta", 82, x, y, x, y + SEEY - 4, false, 0); + } else if (one_in(2)) { + place_items("produce", 65, x, y, x, y + SEEY - 4, false, 0); + } else { + place_items("snacks", 72, x, y, x, y + SEEY - 4, false, 0); + } + } + } + } + } + break; + case 2: // Hardware + for (int x = 2; x <= 22; x += 4) { + line_furn(this, f_rack, x, 4, x, SEEY * 2 - 5); + if (one_in(3)) { + place_items("tools", 70, x, 4, x, SEEY * 2 - 5, false, 0); + } else if (one_in(2)) { + place_items("bigtools", 70, x, 4, x, SEEY * 2 - 5, false, 0); + } else if (one_in(3)) { + place_items("hardware", 70, x, 4, x, SEEY * 2 - 5, false, 0); + } else { + place_items("mischw", 70, x, 4, x, SEEY * 2 - 5, false, 0); + } + } + break; + case 3: // Clothing + for (int x = 2; x < SEEX * 2; x += 6) { + for (int y = 3; y <= 9; y += 6) { + square_furn(this, f_rack, x, y, x + 1, y + 1); + if (one_in(2)) { + place_items("shirts", 75, x, y, x + 1, y + 1, false, 0); + } else if (one_in(2)) { + place_items("pants", 72, x, y, x + 1, y + 1, false, 0); + } else if (one_in(2)) { + place_items("jackets", 65, x, y, x + 1, y + 1, false, 0); + } else { + place_items("winter", 62, x, y, x + 1, y + 1, false, 0); + } + } + } + for (int y = 13; y <= SEEY * 2 - 2; y += 3) { + line_furn(this, f_rack, 2, y, SEEX * 2 - 3, y); + if (one_in(3)) { + place_items("shirts", 75, 2, y, SEEX * 2 - 3, y, false, 0); + } else if (one_in(2)) { + place_items("shoes", 75, 2, y, SEEX * 2 - 3, y, false, 0); + } else if (one_in(2)) { + place_items("bags", 75, 2, y, SEEX * 2 - 3, y, false, 0); + } else { + place_items("allclothes", 75, 2, y, SEEX * 2 - 3, y, false, 0); + } + } + break; + case 4: // Cleaning and soft drugs and novels and junk + for (int x = rng(2, 3); x < SEEX * 2 - 1; x += 3) { + for (int y = 2; y <= SEEY; y += SEEY - 2) { + line_furn(this, f_rack, x, y, x, y + SEEY - 4); + if (one_in(3)) { + place_items("cleaning", 78, x, y, x, y + SEEY - 4, false, 0); + } else if (one_in(2)) { + place_items("softdrugs", 72, x, y, x, y + SEEY - 4, false, 0); + } else { + place_items("novels", 84, x, y, x, y + SEEY - 4, false, 0); + } + } + } + break; + case 5: // Sporting goods + for (int x = rng(2, 3); x < SEEX * 2 - 1; x += 3) { + for (int y = 2; y <= SEEY; y += SEEY - 2) { + line_furn(this, f_rack, x, y, x, y + SEEY - 4); + if (one_in(2)) { + place_items("sports", 72, x, y, x, y + SEEY - 4, false, 0); + } else if (one_in(10)) { + place_items("rifles", 20, x, y, x, y + SEEY - 4, false, 0); + } else { + place_items("camping", 68, x, y, x, y + SEEY - 4, false, 0); + } + } + } + break; + } + + // Add some spawns + for (int i = 0; i < 15; i++) { + int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); + if (ter(x, y) == t_floor) { + add_spawn("mon_zombie", 1, x, y); + } + } + // Rotate randomly... + rotate(rng(0, 3)); + // ... then place walls as needed. + if (t_north != "megastore_entrance" && t_north != "megastore") { + line(this, t_wall_h, 0, 0, SEEX * 2 - 1, 0); + } + if (t_east != "megastore_entrance" && t_east != "megastore") { + line(this, t_wall_v, SEEX * 2 - 1, 0, SEEX * 2 - 1, SEEY * 2 - 1); + } + if (t_south != "megastore_entrance" && t_south != "megastore") { + line(this, t_wall_h, 0, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); + } + if (t_west != "megastore_entrance" && t_west != "megastore") { + line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 1); + } + + + } else if (terrain_type == "hospital_entrance") { + + square(this, t_pavement, 0, 0, SEEX * 2 - 1, 5); + square(this, t_floor, 0, 6, SEEX * 2 - 1, SEEY * 2 - 1); + // Ambulance parking place + line(this, t_pavement_y, 5, 1, 22, 1); + line(this, t_pavement_y, 5, 2, 5, 5); + line(this, t_pavement_y, 22, 2, 22, 5); + // Top wall + line(this, t_wall_h, 0, 6, 6, 6); + line(this, t_door_glass_c, 3, 6, 4, 6); + line(this, t_wall_glass_h, 7, 6, 19, 6); + line(this, t_wall_h, 20, 6, SEEX * 2 - 1, 6); + // Left wall + line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 1); + line(this, t_floor, 0, 11, 0, 12); + // Waiting area + line_furn(this, f_bench, 8, 7, 11, 7); + line_furn(this, f_bench, 13, 7, 17, 7); + line_furn(this, f_bench, 20, 7, 22, 7); + line_furn(this, f_bench, 22, 8, 22, 10); + place_items("magazines", 70, 8, 7, 22, 10, false, 0); + // Reception and examination rooms + line_furn(this, f_counter, 8, 13, 9, 13); + line(this, t_wall_h, 10, 13, SEEX * 2 - 1, 13); + line(this, t_door_c, 15, 13, 16, 13); + line(this, t_wall_h, 8, 17, 13, 17); + line(this, t_wall_h, 18, 17, 22, 17); + line(this, t_wall_h, 8, 20, 13, 20); + line(this, t_wall_h, 18, 20, 22, 20); + line(this, t_wall_v, 7, 13, 7, 22); + line(this, t_wall_v, 14, 15, 14, 20); + line(this, t_wall_v, 17, 14, 17, 22); + line_furn(this, f_bed, 8, 19, 9, 19); + line_furn(this, f_bed, 21, 19, 22, 19); + line_furn(this, f_bed, 21, 22, 22, 22); + line_furn(this, f_rack, 18, 14, 22, 14); + place_items("harddrugs", 80, 18, 14, 22, 14, false, 0); + line_furn(this, f_rack, 8, 21, 8, 22); + place_items("softdrugs", 70, 8, 21, 8, 22, false, 0); + ter_set(14, rng(18, 19), t_door_c); + ter_set(17, rng(15, 16), t_door_locked); // Hard drugs room is locked + ter_set(17, rng(18, 19), t_door_c); + ter_set(17, rng(21, 22), t_door_c); + // ER and bottom wall + line(this, t_wall_h, 0, 16, 6, 16); + line(this, t_door_c, 3, 16, 4, 16); + square_furn(this, f_bed, 3, 19, 4, 20); + line_furn(this, f_counter, 1, 22, 6, 22); + place_items("surgery", 78, 1, 22, 6, 22, false, 0); + line(this, t_wall_h, 1, 23, 22, 23); + line(this, t_floor, 11, 23, 12, 23); + // Right side wall (needed sometimes!) + line(this, t_wall_v, 23, 0, 23, 10); + line(this, t_wall_v, 23, 13, 23, 23); + + /* + // Generate bodies / zombies + rn = rng(10, 15); + for (int i = 0; i < rn; i++) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), g->turn); + int zx = rng(0, SEEX * 2 - 1), zy = rng(0, SEEY * 2 - 1); + if (ter(zx, zy) == t_bed || one_in(3)) + add_item(zx, zy, body); + else if (move_cost(zx, zy) > 0) { + mon_id zom = mon_zombie; + if (one_in(6)) + zom = mon_zombie_spitter; + else if (!one_in(3)) + zom = mon_boomer; + add_spawn(zom, 1, zx, zy); + } + } + */ + // Rotate to face the road + if (is_ot_type("road", t_east) || is_ot_type("bridge", t_east)) { + rotate(1); + } + if (is_ot_type("road", t_south) || is_ot_type("bridge", t_south)) { + rotate(2); + } + if (is_ot_type("road", t_west) || is_ot_type("bridge", t_west)) { + rotate(3); + } + + + } else if (terrain_type == "hospital") { + + fill_background(this, t_floor); + // We always have walls on the left and bottom + line(this, t_wall_v, 0, 0, 0, 22); + line(this, t_wall_h, 0, 23, 23, 23); + // These walls contain doors if they lead to more hospital + if (t_west == "hospital_entrance" || t_west == "hospital") { + line(this, t_door_c, 0, 11, 0, 12); + } + if (t_south == "hospital_entrance" || t_south == "hospital") { + line(this, t_door_c, 11, 23, 12, 23); + } + + if ((t_north == "hospital_entrance" || t_north == "hospital") && + (t_east == "hospital_entrance" || t_east == "hospital") && + (t_south == "hospital_entrance" || t_south == "hospital") && + (t_west == "hospital_entrance" || t_west == "hospital") ) { + // We're in the center; center is always blood lab + // Large lab + line(this, t_wall_h, 1, 2, 21, 2); + line(this, t_wall_h, 1, 10, 21, 10); + line(this, t_wall_v, 21, 3, 21, 9); + line_furn(this, f_counter, 2, 3, 2, 9); + place_items("hospital_lab", 70, 2, 3, 2, 9, false, 0); + square_furn(this, f_counter, 5, 4, 6, 8); + place_items("hospital_lab", 74, 5, 4, 6, 8, false, 0); + square_furn(this, f_counter, 10, 4, 11, 8); + spawn_item(5, 17, "record_patient"); + place_items("hospital_lab", 74, 10, 4, 11, 8, false, 0); + square_furn(this, f_counter, 15, 4, 16, 8); + place_items("hospital_lab", 74, 15, 4, 16, 8, false, 0); + ter_set(rng(3, 18), 2, t_door_c); + ter_set(rng(3, 18), 10, t_door_c); + if (one_in(4)) { // Door on the right side + ter_set(21, rng(4, 8), t_door_c); + } else { // Counter on the right side + line_furn(this, f_counter, 20, 3, 20, 9); + place_items("hospital_lab", 70, 20, 3, 20, 9, false, 0); + } + // Blood testing facility + line(this, t_wall_h, 1, 13, 10, 13); + line(this, t_wall_v, 10, 14, 10, 22); + rn = rng(1, 3); + if (rn == 1 || rn == 3) { + ter_set(rng(3, 8), 13, t_door_c); + } + if (rn == 2 || rn == 3) { + ter_set(10, rng(15, 21), t_door_c); + } + line_furn(this, f_counter, 2, 14, 2, 22); + place_items("hospital_lab", 60, 2, 14, 2, 22, false, 0); + square_furn(this, f_counter, 4, 17, 6, 19); + ter_set(4, 18, t_centrifuge); + line(this, t_floor, 5, 18, 6, rng(17, 19)); // Clear path to console + tmpcomp = add_computer(5, 18, _("Centrifuge"), 0); + tmpcomp->add_option(_("Analyze blood"), COMPACT_BLOOD_ANAL, 4); + tmpcomp->add_failure(COMPFAIL_DESTROY_BLOOD); + // Sample storage + line(this, t_wall_h, 13, 13, 23, 13); + line(this, t_wall_v, 13, 14, 13, 23); + rn = rng(1, 3); + if (rn == 1 || rn == 3) { + ter_set(rng(14, 22), 13, t_door_c); + } + if (rn == 2 || rn == 3) { + ter_set(13, rng(14, 21), t_door_c); + } + square_furn(this, f_rack, 16, 16, 21, 17); + place_items("hospital_samples", 68, 16, 16, 21, 17, false, 0); + square_furn(this, f_rack, 16, 19, 21, 20); + place_items("hospital_samples", 68, 16, 19, 21, 20, false, 0); + line_furn(this, f_rack, 14, 22, 23, 22); + place_items("hospital_samples", 62, 14, 22, 23, 22, false, 0); + + } else { // We're NOT in the center; a random hospital type! + + switch (rng(1, 4)) { // What type? + case 1: // Dorms + // Upper left rooms + line(this, t_wall_h, 1, 5, 9, 5); + for (int i = 1; i <= 7; i += 3) { + line_furn(this, f_bed, i, 1, i, 2); + line(this, t_wall_v, i + 2, 0, i + 2, 4); + ter_set(rng(i, i + 1), 5, t_door_c); + } + // Upper right rooms + line(this, t_wall_h, 14, 5, 23, 5); + line(this, t_wall_v, 14, 0, 14, 4); + line_furn(this, f_bed, 15, 1, 15, 2); + ter_set(rng(15, 16), 5, t_door_c); + line(this, t_wall_v, 17, 0, 17, 4); + line_furn(this, f_bed, 18, 1, 18, 2); + ter_set(rng(18, 19), 5, t_door_c); + line(this, t_wall_v, 20, 0, 20, 4); + line_furn(this, f_bed, 21, 1, 21, 2); + ter_set(rng(21, 22), 5, t_door_c); + // Waiting area + for (int i = 1; i <= 9; i += 4) { + line_furn(this, f_bench, i, 7, i, 10); + } + line_furn(this, f_table, 3, 8, 3, 9); + place_items("magazines", 50, 3, 8, 3, 9, false, 0); + line_furn(this, f_table, 7, 8, 7, 9); + place_items("magazines", 50, 7, 8, 7, 9, false, 0); + // Middle right rooms + line(this, t_wall_v, 14, 7, 14, 10); + line(this, t_wall_h, 15, 7, 23, 7); + line(this, t_wall_h, 15, 10, 23, 10); + line(this, t_wall_v, 19, 8, 19, 9); + line_furn(this, f_bed, 18, 8, 18, 9); + line_furn(this, f_bed, 20, 8, 20, 9); + if (one_in(3)) { // Doors to north + ter_set(rng(15, 16), 7, t_door_c); + ter_set(rng(21, 22), 7, t_door_c); + } else { // Doors to south + ter_set(rng(15, 16), 10, t_door_c); + ter_set(rng(21, 22), 10, t_door_c); + } + line(this, t_wall_v, 14, 13, 14, 16); + line(this, t_wall_h, 15, 13, 23, 13); + line(this, t_wall_h, 15, 16, 23, 16); + line(this, t_wall_v, 19, 14, 19, 15); + line_furn(this, f_bed, 18, 14, 18, 15); + line_furn(this, f_bed, 20, 14, 20, 15); + if (one_in(3)) { // Doors to south + ter_set(rng(15, 16), 16, t_door_c); + ter_set(rng(21, 22), 16, t_door_c); + } else { // Doors to north + ter_set(rng(15, 16), 13, t_door_c); + ter_set(rng(21, 22), 13, t_door_c); + } + // Lower left rooms + line(this, t_wall_v, 5, 13, 5, 22); + line(this, t_wall_h, 1, 13, 4, 13); + line_furn(this, f_bed, 1, 14, 1, 15); + line(this, t_wall_h, 1, 17, 4, 17); + line_furn(this, f_bed, 1, 18, 1, 19); + line(this, t_wall_h, 1, 20, 4, 20); + line_furn(this, f_bed, 1, 21, 1, 22); + ter_set(5, rng(14, 16), t_door_c); + ter_set(5, rng(18, 19), t_door_c); + ter_set(5, rng(21, 22), t_door_c); + line(this, t_wall_h, 7, 13, 10, 13); + line(this, t_wall_v, 7, 14, 7, 22); + line(this, t_wall_v, 10, 14, 10, 22); + line(this, t_wall_h, 8, 18, 9, 18); + line_furn(this, f_bed, 8, 17, 9, 17); + line_furn(this, f_bed, 8, 22, 9, 22); + if (one_in(3)) { // Doors to west + ter_set(7, rng(14, 16), t_door_c); + ter_set(7, rng(19, 21), t_door_c); + } else { // Doors to east + ter_set(10, rng(14, 16), t_door_c); + ter_set(10, rng(19, 21), t_door_c); + } + // Lower-right rooms + line(this, t_wall_h, 14, 18, 23, 18); + for (int i = 14; i <= 20; i += 3) { + line(this, t_wall_v, i, 19, i, 22); + line_furn(this, f_bed, i + 1, 21, i + 1, 22); + ter_set(rng(i + 1, i + 2), 18, t_door_c); + } + break; + + case 2: // Offices and cafeteria + // Offices to north + line(this, t_wall_v, 10, 0, 10, 8); + line(this, t_wall_v, 13, 0, 13, 8); + line(this, t_wall_h, 1, 5, 9, 5); + line(this, t_wall_h, 14, 5, 23, 5); + line(this, t_wall_h, 1, 9, 23, 9); + line(this, t_door_c, 11, 9, 12, 9); + line_furn(this, f_table, 3, 3, 7, 3); + line_furn(this, f_table, 16, 3, 20, 3); + line_furn(this, f_table, 3, 8, 7, 8); + line_furn(this, f_table, 16, 8, 20, 8); + ter_set(10, rng(2, 3), t_door_c); + ter_set(13, rng(2, 3), t_door_c); + ter_set(10, rng(6, 7), t_door_c); + ter_set(13, rng(6, 7), t_door_c); + place_items("office", 70, 1, 1, 9, 3, false, 0); + place_items("office", 70, 14, 1, 22, 3, false, 0); + place_items("office", 70, 1, 5, 9, 8, false, 0); + place_items("office", 70, 14, 5, 22, 8, false, 0); + // Cafeteria to south + line(this, t_wall_h, 1, 14, 8, 14); + line(this, t_wall_h, 15, 14, 23, 14); + for (int i = 16; i <= 19; i += 3) { + for (int j = 17; j <= 20; j += 3) { + square_furn(this, f_table, i, j, i + 1, j + 1); + place_items("snacks", 60, i, j, i + 1, j + 1, false, 0); + place_items("produce", 65, i, j, i + 1, j + 1, false, 0); + } + } + for (int i = 3; i <= 6; i += 3) { + for (int j = 17; j <= 20; j += 3) { + square_furn(this, f_table, i, j, i + 1, j + 1); + place_items("snacks", 60, i, j, i + 1, j + 1, false, 0); + place_items("produce", 65, i, j, i + 1, j + 1, false, 0); + } + } + break; + + case 3: // Operating rooms + // First, walls and doors; divide it into four big operating rooms + line(this, t_wall_v, 10, 0, 10, 9); + line(this, t_door_c, 10, 4, 10, 5); + line(this, t_wall_v, 13, 0, 13, 9); + line(this, t_door_c, 13, 4, 13, 5); + line(this, t_wall_v, 10, 14, 10, 22); + line(this, t_door_c, 10, 18, 10, 19); + line(this, t_wall_v, 13, 14, 13, 22); + line(this, t_door_c, 13, 18, 13, 19); + // Horizontal walls/doors + line(this, t_wall_h, 1, 10, 10, 10); + line(this, t_door_c, 5, 10, 6, 10); + line(this, t_wall_h, 13, 10, 23, 10); + line(this, t_door_c, 18, 10, 19, 10); + line(this, t_wall_h, 1, 13, 10, 13); + line(this, t_door_c, 5, 13, 6, 13); + line(this, t_wall_h, 13, 13, 23, 13); + line(this, t_door_c, 18, 13, 19, 13); + // Next, the contents of each operating room + line_furn(this, f_counter, 1, 0, 1, 9); + place_items("surgery", 70, 1, 1, 1, 9, false, 0); + square_furn(this, f_bed, 5, 4, 6, 5); + + line_furn(this, f_counter, 1, 14, 1, 22); + place_items("surgery", 70, 1, 14, 1, 22, false, 0); + square_furn(this, f_bed, 5, 18, 6, 19); + + line_furn(this, f_counter, 14, 6, 14, 9); + place_items("surgery", 60, 14, 6, 14, 9, false, 0); + line_furn(this, f_counter, 15, 9, 17, 9); + place_items("surgery", 60, 15, 9, 17, 9, false, 0); + square_furn(this, f_bed, 18, 4, 19, 5); + + line_furn(this, f_counter, 14, 14, 14, 17); + place_items("surgery", 60, 14, 14, 14, 17, false, 0); + line_furn(this, f_counter, 15, 14, 17, 14); + place_items("surgery", 60, 15, 14, 17, 14, false, 0); + square_furn(this, f_bed, 18, 18, 19, 19); + // computer to begin healing broken bones, + tmpcomp = add_computer(16, 16, _("Mr. Stem Cell"), 3); + tmpcomp->add_option(_("Stem Cell Treatment"), COMPACT_STEMCELL_TREATMENT, 3); + tmpcomp->add_failure(COMPFAIL_ALARM); + + break; + + case 4: // Storage + // Soft drug storage + line(this, t_wall_h, 3, 2, 12, 2); + line(this, t_wall_h, 3, 10, 12, 10); + line(this, t_wall_v, 3, 3, 3, 9); + ter_set(3, 6, t_door_c); + line_furn(this, f_rack, 4, 3, 11, 3); + place_items("softdrugs", 90, 4, 3, 11, 3, false, 0); + line_furn(this, f_rack, 4, 9, 11, 9); + place_items("softdrugs", 90, 4, 9, 11, 9, false, 0); + line_furn(this, f_rack, 6, 5, 10, 5); + place_items("softdrugs", 80, 6, 5, 10, 5, false, 0); + line_furn(this, f_rack, 6, 7, 10, 7); + place_items("softdrugs", 80, 6, 7, 10, 7, false, 0); + // Hard drug storage + line(this, t_wall_v, 13, 0, 13, 19); + ter_set(13, 6, t_door_locked); + line_furn(this, f_rack, 14, 0, 14, 4); + place_items("harddrugs", 78, 14, 1, 14, 4, false, 0); + line_furn(this, f_rack, 17, 0, 17, 7); + place_items("harddrugs", 85, 17, 0, 17, 7, false, 0); + line_furn(this, f_rack, 20, 0, 20, 7); + place_items("harddrugs", 85, 20, 0, 20, 7, false, 0); + line(this, t_wall_h, 20, 10, 23, 10); + line_furn(this, f_rack, 16, 10, 19, 10); + place_items("harddrugs", 78, 16, 10, 19, 10, false, 0); + line_furn(this, f_rack, 16, 12, 19, 12); + place_items("harddrugs", 78, 16, 12, 19, 12, false, 0); + line(this, t_wall_h, 14, 14, 19, 14); + ter_set(rng(14, 15), 14, t_door_locked); + ter_set(rng(16, 18), 14, t_bars); + line(this, t_wall_v, 20, 11, 20, 19); + line(this, t_wall_h, 13, 20, 20, 20); + line(this, t_door_c, 16, 20, 17, 20); + // Laundry room + line(this, t_wall_h, 1, 13, 10, 13); + ter_set(rng(3, 8), 13, t_door_c); + line(this, t_wall_v, 10, 14, 10, 22); + ter_set(10, rng(16, 20), t_door_c); + line_furn(this, f_counter, 1, 14, 1, 22); + place_items("allclothes", 70, 1, 14, 1, 22, false, 0); + for (int j = 15; j <= 21; j += 3) { + line_furn(this, f_rack, 4, j, 7, j); + if (one_in(2)) { + place_items("cleaning", 92, 4, j, 7, j, false, 0); + } else if (one_in(5)) { + place_items("cannedfood", 75, 4, j, 7, j, false, 0); + } else { + place_items("allclothes", 50, 4, j, 7, j, false, 0); + } + } + break; + } + + + // We have walls to the north and east if they're not hospitals + if (t_east != "hospital_entrance" && t_east != "hospital") { + line(this, t_wall_v, 23, 0, 23, 23); + } + if (t_north != "hospital_entrance" && t_north != "hospital") { + line(this, t_wall_h, 0, 0, 23, 0); + } + } + // Generate bodies / zombies + rn = rng(15, 20); + for (int i = 0; i < rn; i++) { + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), g->turn); + int zx = rng(0, SEEX * 2 - 1), zy = rng(0, SEEY * 2 - 1); + if (move_cost(zx, zy) > 0) { + if (furn(zx, zy) == f_bed || one_in(3)) { + add_item(zx, zy, body); + } else { + std::string zom = "mon_zombie"; + if (one_in(6)) { + zom = "mon_zombie_spitter"; + } else if (!one_in(3)) { + zom = "mon_boomer"; + } + add_spawn(zom, 1, zx, zy); + } + } else { + //This is a wall: try again + i--; + } + } + + + } else if (terrain_type == "mansion_entrance") { + + // Left wall + line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 2); + line(this, t_door_c, 0, SEEY - 1, 0, SEEY); + // Front wall + line(this, t_wall_h, 1, 10, SEEX * 2 - 1, 10); + line(this, t_door_locked, SEEX - 1, 10, SEEX, 10); + int winx1 = rng(2, 4); + int winx2 = rng(4, 6); + line(this, t_window, winx1, 10, winx2, 10); + line(this, t_window, SEEX * 2 - 1 - winx1, 10, SEEX * 2 - 1 - winx2, 10); + winx1 = rng(7, 10); + winx2 = rng(10, 11); + line(this, t_window, winx1, 10, winx2, 10); + line(this, t_window, SEEX * 2 - 1 - winx1, 10, SEEX * 2 - 1 - winx2, 10); + line(this, t_door_c, SEEX - 1, 10, SEEX, 10); + // Bottom wall + line(this, t_wall_h, 0, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); + line(this, t_door_c, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + + build_mansion_room(this, room_mansion_courtyard, 1, 0, SEEX * 2 - 1, 9); + square(this, t_floor, 1, 11, SEEX * 2 - 1, SEEY * 2 - 2); + build_mansion_room(this, room_mansion_entry, 1, 11, SEEX * 2 - 1, SEEY * 2 - 2); + // Rotate to face the road + if (is_ot_type("road", t_east) || is_ot_type("bridge", t_east)) { + rotate(1); + } + if (is_ot_type("road", t_south) || is_ot_type("bridge", t_south)) { + rotate(2); + } + if (is_ot_type("road", t_west) || is_ot_type("bridge", t_west)) { + rotate(3); + } + // add zombies + if (one_in(3)) { + add_spawn("mon_zombie", rng(1, 8), 12, 12); + } + + + } else if (terrain_type == "mansion") { + + // Start with floors all over + square(this, t_floor, 1, 0, SEEX * 2 - 1, SEEY * 2 - 2); + // We always have a left and bottom wall + line(this, t_wall_v, 0, 0, 0, SEEY * 2 - 2); + line(this, t_wall_h, 0, SEEY * 2 - 1, SEEX * 2 - 1, SEEY * 2 - 1); + // tw and rw are the boundaries of the rooms inside... + tw = 0; + rw = SEEX * 2 - 1; + // ...if we need outside walls, adjust tw & rw and build them + // We build windows below. + if (t_north != "mansion_entrance" && t_north != "mansion") { + tw = 1; + line(this, t_wall_h, 0, 0, SEEX * 2 - 1, 0); + } + if (t_east != "mansion_entrance" && t_east != "mansion") { + rw = SEEX * 2 - 2; + line(this, t_wall_v, SEEX * 2 - 1, 0, SEEX * 2 - 1, SEEX * 2 - 1); + } + // Now pick a random layout + switch (rng(1, 10)) { + + case 1: // Just one. big. room. + mansion_room(this, 1, tw, rw, SEEY * 2 - 2); + if (t_west == "mansion_entrance" || t_west == "mansion") { + line(this, t_door_c, 0, SEEY - 1, 0, SEEY); + } + if (t_south == "mansion_entrance" || t_south == "mansion") { + line(this, t_door_c, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + } + break; + + case 2: // Wide hallway, two rooms. + case 3: + if (one_in(2)) { // vertical hallway + line(this, t_wall_v, 9, tw, 9, SEEY * 2 - 2); + line(this, t_wall_v, 14, tw, 14, SEEY * 2 - 2); + line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + line(this, t_door_c, 0, SEEY - 1, 0, SEEY); + mansion_room(this, 1, tw, 8, SEEY * 2 - 2); + mansion_room(this, 15, tw, rw, SEEY * 2 - 2); + ter_set( 9, rng(tw + 2, SEEX * 2 - 4), t_door_c); + ter_set(14, rng(tw + 2, SEEX * 2 - 4), t_door_c); + } else { // horizontal hallway + line(this, t_wall_h, 1, 9, rw, 9); + line(this, t_wall_h, 1, 14, rw, 14); + line(this, t_door_c, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + line(this, t_floor, 0, SEEY - 1, 0, SEEY); + mansion_room(this, 1, tw, rw, 8); + mansion_room(this, 1, 15, rw, SEEY * 2 - 2); + ter_set(rng(3, rw - 2), 9, t_door_c); + ter_set(rng(3, rw - 2), 14, t_door_c); + } + if (t_west == "mansion_entrance" || t_west == "mansion") { + line(this, t_door_c, 0, SEEY - 1, 0, SEEY); + } + if (t_south == "mansion_entrance" || t_south == "mansion") { + line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + } + break; + + case 4: // Four corners rooms + case 5: + case 6: + case 7: + case 8: + line(this, t_wall_v, 10, tw, 10, 9); + line(this, t_wall_v, 13, tw, 13, 9); + line(this, t_wall_v, 10, 14, 10, SEEY * 2 - 2); + line(this, t_wall_v, 13, 14, 13, SEEY * 2 - 2); + line(this, t_wall_h, 1, 10, 10, 10); + line(this, t_wall_h, 1, 13, 10, 13); + line(this, t_wall_h, 13, 10, rw, 10); + line(this, t_wall_h, 13, 13, rw, 13); + // Doors + if (one_in(2)) { + ter_set(10, rng(tw + 1, 8), t_door_c); + } else { + ter_set(rng(2, 8), 10, t_door_c); + } + + if (one_in(2)) { + ter_set(13, rng(tw + 1, 8), t_door_c); + } else { + ter_set(rng(15, rw - 1), 10, t_door_c); + } + + if (one_in(2)) { + ter_set(10, rng(15, SEEY * 2 - 3), t_door_c); + } else { + ter_set(rng(2, 8), 13, t_door_c); + } + + if (one_in(2)) { + ter_set(13, rng(15, SEEY * 2 - 3), t_door_c); + } else { + ter_set(rng(15, rw - 1), 13, t_door_c); + } + + mansion_room(this, 1, tw, 9, 9); + mansion_room(this, 14, tw, rw, 9); + mansion_room(this, 1, 14, 9, SEEY * 2 - 2); + mansion_room(this, 14, 14, rw, SEEY * 2 - 2); + if (t_west == "mansion_entrance" || t_west == "mansion") { + line(this, t_floor, 0, SEEY - 1, 0, SEEY); + } + if (t_south == "mansion_entrance" || t_south == "mansion") { + line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + } + break; + + case 9: // One large room in lower-left + case 10: + mw = rng( 4, 10); + cw = rng(13, 19); + x = rng(5, 10); + y = rng(13, 18); + line(this, t_wall_h, 1, mw, cw, mw); + ter_set( rng(x + 1, cw - 1), mw, t_door_c); + line(this, t_wall_v, cw, mw + 1, cw, SEEY * 2 - 2); + ter_set(cw, rng(y + 2, SEEY * 2 - 3) , t_door_c); + mansion_room(this, 1, mw + 1, cw - 1, SEEY * 2 - 2); + // And a couple small rooms in the UL LR corners + line(this, t_wall_v, x, tw, x, mw - 1); + mansion_room(this, 1, tw, x - 1, mw - 1); + if (one_in(2)) { + ter_set(rng(2, x - 2), mw, t_door_c); + } else { + ter_set(x, rng(tw + 2, mw - 2), t_door_c); + } + line(this, t_wall_h, cw + 1, y, rw, y); + mansion_room(this, cw + 1, y + 1, rw, SEEY * 2 - 2); + if (one_in(2)) { + ter_set(rng(cw + 2, rw - 1), y, t_door_c); + } else { + ter_set(cw, rng(y + 2, SEEY * 2 - 3), t_door_c); + } + + if (t_west == "mansion_entrance" || t_west == "mansion") { + line(this, t_floor, 0, SEEY - 1, 0, SEEY); + } + if (t_south == "mansion_entrance" || t_south == "mansion") { + line(this, t_floor, SEEX - 1, SEEY * 2 - 1, SEEX, SEEY * 2 - 1); + } + break; + } // switch (rng(1, 4)) + + // Finally, place windows on outside-facing walls if necessary + if (t_west != "mansion_entrance" && t_west != "mansion") { + int consecutive = 0; + for (int i = 1; i < SEEY; i++) { + if (move_cost(1, i) != 0 && move_cost(1, SEEY * 2 - 1 - i) != 0) { + if (consecutive == 3) { + consecutive = 0; // No really long windows + } else { + consecutive++; + ter_set(0, i, t_window); + ter_set(0, SEEY * 2 - 1 - i, t_window); + } + } else { + consecutive = 0; + } + } + } + if (t_south != "mansion_entrance" && t_south != "mansion") { + int consecutive = 0; + for (int i = 1; i < SEEX; i++) { + if (move_cost(i, SEEY * 2 - 2) != 0 && + move_cost(SEEX * 2 - 1 - i, SEEY * 2 - 2) != 0) { + if (consecutive == 3) { + consecutive = 0; // No really long windows + } else { + consecutive++; + ter_set(i, SEEY * 2 - 1, t_window); + ter_set(SEEX * 2 - 1 - i, SEEY * 2 - 1, t_window); + } + } else { + consecutive = 0; + } + } + } + if (t_east != "mansion_entrance" && t_east != "mansion") { + int consecutive = 0; + for (int i = 1; i < SEEY; i++) { + if (move_cost(SEEX * 2 - 2, i) != 0 && + move_cost(SEEX * 2 - 2, SEEY * 2 - 1 - i) != 0) { + if (consecutive == 3) { + consecutive = 0; // No really long windows + } else { + consecutive++; + ter_set(SEEX * 2 - 1, i, t_window); + ter_set(SEEX * 2 - 1, SEEY * 2 - 1 - i, t_window); + } + } else { + consecutive = 0; + } + } + } + + if (t_north != "mansion_entrance" && t_north != "mansion") { + int consecutive = 0; + for (int i = 1; i < SEEX; i++) { + if (move_cost(i, 1) != 0 && move_cost(SEEX * 2 - 1 - i, 1) != 0) { + if (consecutive == 3) { + consecutive = 0; // No really long windows + } else { + consecutive++; + ter_set(i, 0, t_window); + ter_set(SEEX * 2 - 1 - i, 0, t_window); + } + } else { + consecutive = 0; + } + } + } + // add zombies + if (one_in(2)) { + add_spawn("mon_zombie", rng(4, 8), 12, 12); + } + + + } else if (terrain_type == "fema_entrance") { + + fill_background(this, t_dirt); + // Left wall + line(this, t_chainfence_v, 0, 0, 0, SEEY * 2 - 2); + line(this, t_fence_barbed, 1, 4, 9, 12); + line(this, t_fence_barbed, 1, 5, 8, 12); + line(this, t_fence_barbed, 23, 4, 15, 12); + line(this, t_fence_barbed, 23, 5, 16, 12); + square(this, t_wall_wood, 2, 13, 9, 21); + square(this, t_floor, 3, 14, 8, 20); + line(this, t_reinforced_glass_h, 5, 13, 6, 13); + line(this, t_reinforced_glass_h, 5, 21, 6, 21); + line(this, t_reinforced_glass_v, 9, 15, 9, 18); + line(this, t_door_c, 9, 16, 9, 17); + line_furn(this, f_locker, 3, 16, 3, 18); + line_furn(this, f_chair, 5, 16, 5, 18); + line_furn(this, f_desk, 6, 16, 6, 18); + line_furn(this, f_chair, 7, 16, 7, 18); + place_items("office", 80, 3, 16, 3, 18, false, 0); + place_items("office", 80, 6, 16, 6, 18, false, 0); + add_spawn("mon_zombie_soldier", rng(1, 6), 4, 17); + + // Rotate to face the road + if (is_ot_type("road", t_east) || is_ot_type("bridge", t_east)) { + rotate(1); + } + if (is_ot_type("road", t_south) || is_ot_type("bridge", t_south)) { + rotate(2); + } + if (is_ot_type("road", t_west) || is_ot_type("bridge", t_west)) { + rotate(3); + } + + + } else if (terrain_type == "fema") { + + fill_background(this, t_dirt); + line(this, t_chainfence_v, 0, 0, 0, 23); + line(this, t_chainfence_h, 0, 23, 23, 23); + if (t_north != "fema_entrance" && t_north != "fema") { + line(this, t_chainfence_h, 0, 0, 23, 0); + } + if (t_east != "fema_entrance" && t_east != "fema") { + line(this, t_chainfence_v, 23, 0, 23, 23); + } + if (t_south == "fema") { + line(this, t_dirt, 0, 23, 23, 23); + } + if (t_west == "fema") { + line(this, t_dirt, 0, 0, 0, 23); + } + if(t_west == "fema" && t_east == "fema" && t_south != "fema") { + //lab bottom side + square(this, t_dirt, 1, 1, 22, 22); + square(this, t_floor, 4, 4, 19, 19); + line(this, t_concrete_h, 4, 4, 19, 4); + line(this, t_concrete_h, 4, 19, 19, 19); + line(this, t_concrete_v, 4, 5, 4, 18); + line(this, t_concrete_v, 19, 5, 19, 18); + line(this, t_door_metal_c, 11, 4, 12, 4); + line_furn(this, f_glass_fridge, 6, 5, 9, 5); + line_furn(this, f_glass_fridge, 14, 5, 17, 5); + square(this, t_grate, 6, 8, 8, 9); + line_furn(this, f_table, 7, 8, 7, 9); + square(this, t_grate, 6, 12, 8, 13); + line_furn(this, f_table, 7, 12, 7, 13); + square(this, t_grate, 6, 16, 8, 17); + line_furn(this, f_table, 7, 16, 7, 17); + line_furn(this, f_counter, 10, 8, 10, 17); + square_furn(this, f_chair, 14, 8, 17, 10); + square(this, t_console_broken, 15, 8, 16, 10); + line_furn(this, f_desk, 15, 11, 16, 11); + line_furn(this, f_chair, 15, 12, 16, 12); + line(this, t_reinforced_glass_h, 13, 14, 18, 14); + line(this, t_reinforced_glass_v, 13, 14, 13, 18); + ter_set(15, 14, t_door_metal_locked); + place_items("dissection", 90, 10, 8, 10, 17, false, 0); + place_items("hospital_lab", 70, 5, 5, 18, 18, false, 0); + place_items("harddrugs", 50, 6, 5, 9, 5, false, 0); + place_items("harddrugs", 50, 14, 5, 17, 5, false, 0); + place_items("hospital_samples", 50, 6, 5, 9, 5, false, 0); + place_items("hospital_samples", 50, 14, 5, 17, 5, false, 0); + add_spawn("mon_zombie_scientist", rng(1, 6), 11, 12); + if (one_in(2)) { + add_spawn("mon_zombie_brute", 1, 16, 17); + } + } else if (t_west == "fema_entrance") { + square(this, t_dirt, 1, 1, 22, 22); //Supply tent + line_furn(this, f_canvas_wall, 4, 4, 19, 4); + line_furn(this, f_canvas_wall, 4, 4, 4, 19); + line_furn(this, f_canvas_wall, 19, 19, 19, 4); + line_furn(this, f_canvas_wall, 19, 19, 4, 19); + square_furn(this, f_fema_groundsheet, 5, 5, 8, 18); + square_furn(this, f_fema_groundsheet, 10, 5, 13, 5); + square_furn(this, f_fema_groundsheet, 10, 18, 13, 18); + square_furn(this, f_fema_groundsheet, 15, 5, 18, 7); + square_furn(this, f_fema_groundsheet, 15, 16, 18, 18); + square_furn(this, f_fema_groundsheet, 16, 10, 17, 14); + square_furn(this, f_fema_groundsheet, 9, 7, 14, 16); + line_furn(this, f_canvas_door, 11, 4, 12, 4); + line_furn(this, f_canvas_door, 11, 19, 12, 19); + square_furn(this, f_crate_c, 5, 6, 7, 7); + square_furn(this, f_crate_c, 5, 11, 7, 12); + square_furn(this, f_crate_c, 5, 16, 7, 17); + line(this, t_chainfence_h, 9, 6, 14, 6); + line(this, t_chainfence_h, 9, 17, 14, 17); + ter_set(9, 5, t_chaingate_c); + ter_set(14, 18, t_chaingate_c); + ter_set(14, 5, t_chainfence_h); + ter_set(9, 18, t_chainfence_h); + furn_set(12, 17, f_counter); + furn_set(11, 6, f_counter); + line_furn(this, f_chair, 10, 10, 13, 10); + square_furn(this, f_desk, 10, 11, 13, 12); + line_furn(this, f_chair, 10, 13, 13, 13); + line(this, t_chainfence_h, 15, 8, 18, 8); + line(this, t_chainfence_h, 15, 15, 18, 15); + line(this, t_chainfence_v, 15, 9, 15, 14); + line(this, t_chaingate_c, 15, 11, 15, 12); + line_furn(this, f_locker, 18, 9, 18, 14); + place_items("allclothes", 90, 5, 6, 7, 7, false, 0); + place_items("softdrugs", 90, 5, 11, 7, 12, false, 0); + place_items("hardware", 90, 5, 16, 7, 17, false, 0); + place_items("mil_rifles", 90, 18, 9, 18, 14, false, 0); + place_items("office", 80, 10, 11, 13, 12, false, 0); + add_spawn("mon_zombie_soldier", rng(1, 6), 12, 14); + } else { + switch (rng(1, 5)) { + case 1: + case 2: + case 3: + square(this, t_dirt, 1, 1, 22, 22); + square_furn(this, f_canvas_wall, 4, 4, 19, 19); //Lodging + square_furn(this, f_fema_groundsheet, 5, 5, 18, 18); + line_furn(this, f_canvas_door, 11, 4, 12, 4); + line_furn(this, f_canvas_door, 11, 19, 12, 19); + line_furn(this, f_makeshift_bed, 6, 6, 6, 17); + line_furn(this, f_makeshift_bed, 8, 6, 8, 17); + line_furn(this, f_makeshift_bed, 10, 6, 10, 17); + line_furn(this, f_makeshift_bed, 13, 6, 13, 17); + line_furn(this, f_makeshift_bed, 15, 6, 15, 17); + line_furn(this, f_makeshift_bed, 17, 6, 17, 17); + line_furn(this, f_fema_groundsheet, 6, 8, 17, 8); + line_furn(this, f_fema_groundsheet, 6, 8, 17, 8); + square_furn(this, f_fema_groundsheet, 6, 11, 17, 12); + line_furn(this, f_fema_groundsheet, 6, 15, 17, 15); + line_furn(this, f_crate_o, 6, 7, 17, 7); + line_furn(this, f_crate_o, 6, 10, 17, 10); + line_furn(this, f_crate_o, 6, 14, 17, 14); + line_furn(this, f_crate_o, 6, 17, 17, 17); + line_furn(this, f_fema_groundsheet, 7, 5, 7, 18); + line_furn(this, f_fema_groundsheet, 9, 5, 9, 18); + square_furn(this, f_fema_groundsheet, 11, 5, 12, 18); + line_furn(this, f_fema_groundsheet, 14, 5, 14, 18); + line_furn(this, f_fema_groundsheet, 16, 5, 16, 18); + place_items("livingroom", 80, 5, 5, 18, 18, false, 0); + add_spawn("mon_zombie", rng(1, 5), 11, 12); + break; + case 4: + square(this, t_dirt, 1, 1, 22, 22); + square_furn(this, f_canvas_wall, 4, 4, 19, 19); //Mess hall/tent + square_furn(this, f_fema_groundsheet, 5, 5, 18, 18); + line_furn(this, f_canvas_door, 11, 4, 12, 4); + line_furn(this, f_canvas_door, 11, 19, 12, 19); + line_furn(this, f_crate_c, 5, 5, 5, 6); + square_furn(this, f_counter, 6, 6, 10, 8); + square(this, t_rock_floor, 6, 5, 9, 7); + furn_set(7, 6, f_woodstove); + line_furn(this, f_bench, 13, 6, 17, 6); + line_furn(this, f_table, 13, 7, 17, 7); + line_furn(this, f_bench, 13, 8, 17, 8); + + line_furn(this, f_bench, 13, 11, 17, 11); + line_furn(this, f_table, 13, 12, 17, 12); + line_furn(this, f_bench, 13, 13, 17, 13); + + line_furn(this, f_bench, 13, 15, 17, 15); + line_furn(this, f_table, 13, 16, 17, 16); + line_furn(this, f_bench, 13, 17, 17, 17); + + line_furn(this, f_bench, 6, 11, 10, 11); + line_furn(this, f_table, 6, 12, 10, 12); + line_furn(this, f_bench, 6, 13, 10, 13); + + line_furn(this, f_bench, 6, 15, 10, 15); + line_furn(this, f_table, 6, 16, 10, 16); + line_furn(this, f_bench, 6, 17, 10, 17); + + place_items("mil_food_nodrugs", 80, 5, 5, 5, 6, false, 0); + place_items("snacks", 80, 5, 5, 18, 18, false, 0); + place_items("kitchen", 70, 6, 5, 10, 8, false, 0); + place_items("dining", 80, 13, 7, 17, 7, false, 0); + place_items("dining", 80, 13, 12, 17, 12, false, 0); + place_items("dining", 80, 13, 16, 17, 16, false, 0); + place_items("dining", 80, 6, 12, 10, 12, false, 0); + place_items("dining", 80, 6, 16, 10, 16, false, 0); + add_spawn("mon_zombie", rng(1, 5), 11, 12); + break; + case 5: + square(this, t_dirtfloor, 1, 1, 22, 22); + square(this, t_fence_barbed, 4, 4, 19, 19); + square(this, t_dirt, 5, 5, 18, 18); + square(this, t_pit_corpsed, 6, 6, 17, 17); + add_spawn("mon_zombie", rng(5, 20), 11, 12); + break; + } + } + + } else if (terrain_type == "spider_pit_under") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i >= 3 && i <= SEEX * 2 - 4 && j >= 3 && j <= SEEY * 2 - 4) || + one_in(4)) { + ter_set(i, j, t_rock_floor); + if (!one_in(3)) { + add_field(NULL, x, y, fd_web, rng(1, 3)); + } + } else { + ter_set(i, j, t_rock); + } + } + } + ter_set(rng(3, SEEX * 2 - 4), rng(3, SEEY * 2 - 4), t_slope_up); + place_items("spider", 85, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, 0); + add_spawn("mon_spider_trapdoor", 1, rng(3, SEEX * 2 - 5), rng(3, SEEY * 2 - 4)); + + + } else if (terrain_type == "anthill") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < 8 || j < 8 || i > SEEX * 2 - 9 || j > SEEY * 2 - 9) { + ter_set(i, j, grass_or_dirt()); + } else if ((i == 11 || i == 12) && (j == 11 || j == 12)) { + ter_set(i, j, t_slope_down); + } else { + ter_set(i, j, t_dirtmound); + } + } + } + + + } else if (terrain_type == "rock") { + + for (int i = 0; i < 4; i++) { + if (t_nesw[i] == "cavern" || t_nesw[i] == "slimepit" || + t_nesw[i] == "slimepit_down") { + nesw_fac[i] = 6; + } else { + nesw_fac[i] = 0; + } + } + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (rng(0, n_fac) > j || rng(0, e_fac) > SEEX * 2 - 1 - i || + rng(0, w_fac) > i || rng(0, s_fac) > SEEY * 2 - 1 - j ) { + ter_set(i, j, t_rock_floor); + } else { + ter_set(i, j, t_rock); + } + } + } + + + } else if (terrain_type == "rift") { + + if (t_north != "rift" && t_north != "hellmouth") { + if (connects_to(t_north, 2)) { + n_fac = rng(-6, -2); + } else { + n_fac = rng(2, 6); + } + } + if (t_east != "rift" && t_east != "hellmouth") { + if (connects_to(t_east, 3)) { + e_fac = rng(-6, -2); + } else { + e_fac = rng(2, 6); + } + } + if (t_south != "rift" && t_south != "hellmouth") { + if (connects_to(t_south, 0)) { + s_fac = rng(-6, -2); + } else { + s_fac = rng(2, 6); + } + } + if (t_west != "rift" && t_west != "hellmouth") { + if (connects_to(t_west, 1)) { + w_fac = rng(-6, -2); + } else { + w_fac = rng(2, 6); + } + } + // Negative *_fac values indicate rock floor connection, otherwise solid rock + // Of course, if we connect to a rift, *_fac = 0, and thus lava extends all the + // way. + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((n_fac < 0 && j < n_fac * -1) || (s_fac < 0 && j >= SEEY * 2 - s_fac) || + (w_fac < 0 && i < w_fac * -1) || (e_fac < 0 && i >= SEEX * 2 - e_fac) ) { + ter_set(i, j, t_rock_floor); + } else if (j < n_fac || j >= SEEY * 2 - s_fac || + i < w_fac || i >= SEEX * 2 - e_fac ) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_lava); + } + } + } + + + } else if (terrain_type == "hellmouth") { + + for (int i = 0; i < 4; i++) { + if (t_nesw[i] != "rift" && t_nesw[i] != "hellmouth") { + nesw_fac[i] = 6; + } + } + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j < n_fac || j >= SEEY * 2 - s_fac || i < w_fac || i >= SEEX * 2 - e_fac || + (i >= 6 && i < SEEX * 2 - 6 && j >= 6 && j < SEEY * 2 - 6)) { + ter_set(i, j, t_rock_floor); + } else { + ter_set(i, j, t_lava); + } + if (i >= SEEX - 1 && i <= SEEX && j >= SEEY - 1 && j <= SEEY) { + ter_set(i, j, t_slope_down); + } + } + } + switch (rng(0, 4)) { // Randomly chosen "altar" design + case 0: + for (int i = 7; i <= 16; i += 3) { + ter_set(i, 6, t_rock); + ter_set(i, 17, t_rock); + ter_set(6, i, t_rock); + ter_set(17, i, t_rock); + if (i > 7 && i < 16) { + ter_set(i, 10, t_rock); + ter_set(i, 13, t_rock); + } else { + ter_set(i - 1, 6 , t_rock); + ter_set(i - 1, 10, t_rock); + ter_set(i - 1, 13, t_rock); + ter_set(i - 1, 17, t_rock); + } + } + break; + case 1: + for (int i = 6; i < 11; i++) { + ter_set(i, i, t_lava); + ter_set(SEEX * 2 - 1 - i, i, t_lava); + ter_set(i, SEEY * 2 - 1 - i, t_lava); + ter_set(SEEX * 2 - 1 - i, SEEY * 2 - 1 - i, t_lava); + if (i < 10) { + ter_set(i + 1, i, t_lava); + ter_set(SEEX * 2 - i, i, t_lava); + ter_set(i + 1, SEEY * 2 - 1 - i, t_lava); + ter_set(SEEX * 2 - i, SEEY * 2 - 1 - i, t_lava); + + ter_set(i, i + 1, t_lava); + ter_set(SEEX * 2 - 1 - i, i + 1, t_lava); + ter_set(i, SEEY * 2 - i, t_lava); + ter_set(SEEX * 2 - 1 - i, SEEY * 2 - i, t_lava); + } + if (i < 9) { + ter_set(i + 2, i, t_rock); + ter_set(SEEX * 2 - i + 1, i, t_rock); + ter_set(i + 2, SEEY * 2 - 1 - i, t_rock); + ter_set(SEEX * 2 - i + 1, SEEY * 2 - 1 - i, t_rock); + + ter_set(i, i + 2, t_rock); + ter_set(SEEX * 2 - 1 - i, i + 2, t_rock); + ter_set(i, SEEY * 2 - i + 1, t_rock); + ter_set(SEEX * 2 - 1 - i, SEEY * 2 - i + 1, t_rock); + } + } + break; + case 2: + for (int i = 7; i < 17; i++) { + ter_set(i, 6, t_rock); + ter_set(6, i, t_rock); + ter_set(i, 17, t_rock); + ter_set(17, i, t_rock); + if (i != 7 && i != 16 && i != 11 && i != 12) { + ter_set(i, 8, t_rock); + ter_set(8, i, t_rock); + ter_set(i, 15, t_rock); + ter_set(15, i, t_rock); + } + if (i == 11 || i == 12) { + ter_set(i, 10, t_rock); + ter_set(10, i, t_rock); + ter_set(i, 13, t_rock); + ter_set(13, i, t_rock); + } + } + break; + case 3: + for (int i = 6; i < 11; i++) { + for (int j = 6; j < 11; j++) { + ter_set(i, j, t_lava); + ter_set(SEEX * 2 - 1 - i, j, t_lava); + ter_set(i, SEEY * 2 - 1 - j, t_lava); + ter_set(SEEX * 2 - 1 - i, SEEY * 2 - 1 - j, t_lava); + } + } + break; + } + + + } else if (is_ot_type("slimepit", terrain_type)) { + + for (int i = 0; i < 4; i++) { + nesw_fac[i] = (t_nesw[i] == "slimepit" || t_nesw[i] == "slimepit_down" ? 1 : 0); + } + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (!one_in(10) && (j < n_fac * SEEX || i < w_fac * SEEX || + j > SEEY * 2 - s_fac * SEEY || i > SEEX * 2 - e_fac * SEEX)) { + ter_set(i, j, (!one_in(10) ? t_slime : t_rock_floor)); + } else if (rng(0, SEEX) > abs(i - SEEX) && rng(0, SEEY) > abs(j - SEEY)) { + ter_set(i, j, t_slime); + } else if (t_above == "") { + ter_set(i, j, t_dirt); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + + if (terrain_type == "slimepit_down") { + ter_set(rng(3, SEEX * 2 - 4), rng(3, SEEY * 2 - 4), t_slope_down); + } + + if (t_above == "slimepit_down") { + switch (rng(1, 4)) { + case 1: + ter_set(rng(0, 2), rng(0, 2), t_slope_up); + case 2: + ter_set(rng(0, 2), SEEY * 2 - rng(1, 3), t_slope_up); + case 3: + ter_set(SEEX * 2 - rng(1, 3), rng(0, 2), t_slope_up); + case 4: + ter_set(SEEX * 2 - rng(1, 3), SEEY * 2 - rng(1, 3), t_slope_up); + } + } + + add_spawn("mon_blob", 8, SEEX, SEEY); + place_items("sewer", 40, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + + + } else if (terrain_type == "triffid_grove") { + + fill_background(this, t_dirt); + for (int rad = 5; rad < SEEX - 2; rad += rng(2, 3)) { + square(this, t_tree, rad, rad, 23 - rad, 23 - rad); + square(this, t_dirt, rad + 1, rad + 1, 22 - rad, 22 - rad); + if (one_in(2)) { // Vertical side opening + int x = (one_in(2) ? rad : 23 - rad), y = rng(rad + 1, 22 - rad); + ter_set(x, y, t_dirt); + } else { // Horizontal side opening + int x = rng(rad + 1, 22 - rad), y = (one_in(2) ? rad : 23 - rad); + ter_set(x, y, t_dirt); + } + add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, rad + 1, rad + 1); + add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, 22 - rad, rad + 1); + add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, rad + 1, 22 - rad); + add_spawn( (one_in(3) ? "mon_biollante" : "mon_triffid"), 1, 22 - rad, 22 - rad); + } + square(this, t_slope_down, SEEX - 1, SEEY - 1, SEEX, SEEY); + + + } else if (terrain_type == "triffid_roots") { + + fill_background(this, t_root_wall); + int node = 0; + int step = 0; + bool node_built[16]; + bool done = false; + for (int i = 0; i < 16; i++) { + node_built[i] = false; + } + do { + node_built[node] = true; + step++; + int nodex = 1 + 6 * (node % 4), nodey = 1 + 6 * int(node / 4); + // Clear a 4x4 dirt square + square(this, t_dirt, nodex, nodey, nodex + 3, nodey + 3); + // Spawn a monster in there + if (step > 2) { // First couple of chambers are safe + int monrng = rng(1, 25); + int spawnx = nodex + rng(0, 3), spawny = nodey + rng(0, 3); + if (monrng <= 5) { + add_spawn("mon_triffid", rng(1, 4), spawnx, spawny); + } else if (monrng <= 13) { + add_spawn("mon_creeper_hub", 1, spawnx, spawny); + } else if (monrng <= 19) { + add_spawn("mon_biollante", 1, spawnx, spawny); + } else if (monrng <= 24) { + add_spawn("mon_fungal_fighter", 1, spawnx, spawny); + } else { + for (int webx = nodex; webx <= nodex + 3; webx++) { + for (int weby = nodey; weby <= nodey + 3; weby++) { + add_field(g, webx, weby, fd_web, rng(1, 3)); + } + } + add_spawn("mon_spider_web", 1, spawnx, spawny); + } + } + // TODO: Non-monster hazards? + // Next, pick a cell to move to + std::vector move; + if (node % 4 > 0 && !node_built[node - 1]) { + move.push_back(WEST); + } + if (node % 4 < 3 && !node_built[node + 1]) { + move.push_back(EAST); + } + if (int(node / 4) > 0 && !node_built[node - 4]) { + move.push_back(NORTH); + } + if (int(node / 4) < 3 && !node_built[node + 4]) { + move.push_back(SOUTH); + } + + if (move.empty()) { // Nowhere to go! + square(this, t_slope_down, nodex + 1, nodey + 1, nodex + 2, nodey + 2); + done = true; + } else { + int index = rng(0, move.size() - 1); + switch (move[index]) { + case NORTH: + square(this, t_dirt, nodex + 1, nodey - 2, nodex + 2, nodey - 1); + node -= 4; + break; + case EAST: + square(this, t_dirt, nodex + 4, nodey + 1, nodex + 5, nodey + 2); + node++; + break; + case SOUTH: + square(this, t_dirt, nodex + 1, nodey + 4, nodex + 2, nodey + 5); + node += 4; + break; + case WEST: + square(this, t_dirt, nodex - 2, nodey + 1, nodex - 1, nodey + 2); + node--; + break; + default: + break; + } + } + } while (!done); + square(this, t_slope_up, 2, 2, 3, 3); + rotate(rng(0, 3)); + + + } else if (terrain_type == "triffid_finale") { + + fill_background(this, t_root_wall); + square(this, t_dirt, 1, 1, 4, 4); + square(this, t_dirt, 19, 19, 22, 22); + // Drunken walk until we reach the heart (lower right, [19, 19]) + // Chance increases by 1 each turn, and gives the % chance of forcing a move + // to the right or down. + int chance = 0; + int x = 4, y = 4; + do { + ter_set(x, y, t_dirt); + + if (chance >= 10 && one_in(10)) { // Add a spawn + if (one_in(2)) { + add_spawn("mon_biollante", 1, x, y); + } else if (!one_in(4)) { + add_spawn("mon_creeper_hub", 1, x, y); + } else { + add_spawn("mon_triffid", 1, x, y); + } + } + + if (rng(0, 99) < chance) { // Force movement down or to the right + if (x >= 19) { + y++; + } else if (y >= 19) { + x++; + } else { + if (one_in(2)) { + x++; + } else { + y++; + } + } + } else { + chance++; // Increase chance of forced movement down/right + // Weigh movement towards directions with lots of existing walls + int chance_west = 0, chance_east = 0, chance_north = 0, chance_south = 0; + for (int dist = 1; dist <= 5; dist++) { + if (ter(x - dist, y) == t_root_wall) { + chance_west++; + } + if (ter(x + dist, y) == t_root_wall) { + chance_east++; + } + if (ter(x, y - dist) == t_root_wall) { + chance_north++; + } + if (ter(x, y + dist) == t_root_wall) { + chance_south++; + } + } + int roll = rng(0, chance_west + chance_east + chance_north + chance_south); + if (roll < chance_west && x > 0) { + x--; + } else if (roll < chance_west + chance_east && x < 23) { + x++; + } else if (roll < chance_west + chance_east + chance_north && y > 0) { + y--; + } else if (y < 23) { + y++; + } + } // Done with drunken walk + } while (x < 19 || y < 19); + square(this, t_slope_up, 1, 1, 2, 2); + add_spawn("mon_triffid_heart", 1, 21, 21); + + + } else if (terrain_type == "basement") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i == 0 || j == 0 || i == SEEX * 2 - 1 || j == SEEY * 2 - 1) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + ter_set(SEEX - 1, SEEY * 2 - 2, t_stairs_up); + ter_set(SEEX , SEEY * 2 - 2, t_stairs_up); + line(this, t_rock, SEEX - 2, SEEY * 2 - 4, SEEX - 2, SEEY * 2 - 2); + line(this, t_rock, SEEX + 1, SEEY * 2 - 4, SEEX + 1, SEEY * 2 - 2); + line(this, t_door_locked, SEEX - 1, SEEY * 2 - 4, SEEX, SEEY * 2 - 4); + switch (rng(0, 4)) { // TODO: More types! + + case 0: // Junk! + place_items("bedroom", 60, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2, false, 0); + place_items("home_hw", 80, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2, false, 0); + place_items("homeguns", 10, 1, 1, SEEX * 2 - 2, SEEY * 2 - 2, false, 0); + break; + + case 1: // Weapons cache + for (int i = 2; i < SEEX * 2 - 2; i++) { + furn_set(i, 1, f_rack); + furn_set(i, 5, f_rack); + furn_set(i, 9, f_rack); + } + place_items("allguns", 80, 2, 1, SEEX * 2 - 3, 1, false, 0); + place_items("ammo", 94, 2, 5, SEEX * 2 - 3, 5, false, 0); + place_items("gunxtras", 88, 2, 9, SEEX * 2 - 7, 9, false, 0); + place_items("weapons", 88, SEEX * 2 - 6, 9, SEEX * 2 - 3, 9, false, 0); + break; + + case 2: // Survival Bunker + furn_set(1, 1, f_bed); + furn_set(1, 2, f_bed); + furn_set(SEEX * 2 - 2, 1, f_bed); + furn_set(SEEX * 2 - 2, 2, f_bed); + for (int i = 1; i < SEEY; i++) { + furn_set(SEEX - 1, i, f_rack); + furn_set(SEEX , i, f_rack); + } + place_items("softdrugs", 86, SEEX - 1, 1, SEEX, 2, false, 0); + place_items("cannedfood", 92, SEEX - 1, 3, SEEX, 6, false, 0); + place_items("homeguns", 72, SEEX - 1, 7, SEEX, 7, false, 0); + place_items("survival_tools", 83, SEEX - 1, 8, SEEX, 10, false, 0); + place_items("manuals", 60, SEEX - 1, 11, SEEX, 11, false, 0); + break; + + case 3: // Chem lab + for (int i = 1; i < SEEY + 4; i++) { + furn_set(1 , i, f_counter); + furn_set(SEEX * 2 - 2, i, f_counter); + } + place_items("chem_home", 90, 1, 1, 1, SEEY + 3, false, 0); + if (one_in(3)) { + place_items("chem_home", 90, SEEX * 2 - 2, 1, SEEX * 2 - 2, SEEY + 3, false, 0); + } else { + place_items("electronics", 90, SEEX * 2 - 2, 1, SEEX * 2 - 2, SEEY + 3, false, 0); + } + break; + + case 4: // Weed grow + line_furn(this, f_counter, 1, 1, 1, SEEY * 2 - 2); + line_furn(this, f_counter, SEEX * 2 - 2, 1, SEEX * 2 - 2, SEEY * 2 - 2); + for (int i = 3; i < SEEX * 2 - 3; i += 5) { + for (int j = 3; j < 16; j += 5) { + square(this, t_dirt, i, j, i + 2, j + 2); + int num_weed = rng(0, 4) * rng(0, 1); + for (int n = 0; n < num_weed; n++) { + int x = rng(i, i + 2), y = rng(j, j + 2); + spawn_item(x, y, one_in(5) ? "seed_weed" : "weed"); + } + } + } + break; + } + // Chance of zombies in the basement, only appear north of the anteroom the stairs are in. + place_spawns(g, "GROUP_ZOMBIE", 2, 1, 1, SEEX * 2 - 1, SEEX * 2 - 5, density); + + + // TODO: Maybe subway systems could have broken down trains in them? + } else if (terrain_type == "subway_station") { + + if (is_ot_type("subway", t_north) && connects_to(t_north, 2)) { + n_fac = 1; + } + if (is_ot_type("subway", t_east) && connects_to(t_east, 3)) { + e_fac = 1; + } + if (is_ot_type("subway", t_south) && connects_to(t_south, 0)) { + s_fac = 1; + } + if (is_ot_type("subway", t_west) && connects_to(t_west, 1)) { + w_fac = 1; + } + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i < 4 && (w_fac == 0 || j < 4 || j > SEEY * 2 - 5)) || + (j < 4 && (n_fac == 0 || i < 4 || i > SEEX * 2 - 5)) || + (i > SEEX * 2 - 5 && (e_fac == 0 || j < 4 || j > SEEY * 2 - 5)) || + (j > SEEY * 2 - 5 && (s_fac == 0 || i < 4 || i > SEEX * 2 - 5))) { + ter_set(i, j, t_rock_floor); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + ter_set(2, 2 , t_stairs_up); + ter_set(SEEX * 2 - 3, 2 , t_stairs_up); + ter_set(2, SEEY * 2 - 3, t_stairs_up); + ter_set(SEEX * 2 - 3, SEEY * 2 - 3, t_stairs_up); + if (ter(2, SEEY) == t_floor) { + ter_set(2, SEEY, t_stairs_up); + } + if (ter(SEEX * 2 - 3, SEEY) == t_floor) { + ter_set(SEEX * 2 - 3, SEEY, t_stairs_up); + } + if (ter(SEEX, 2) == t_floor) { + ter_set(SEEX, 2, t_stairs_up); + } + if (ter(SEEX, SEEY * 2 - 3) == t_floor) { + ter_set(SEEX, SEEY * 2 - 3, t_stairs_up); + } + + + } else if (terrain_type == "subway_ns" || + terrain_type == "subway_ew") { + + if (terrain_type == "subway_ns") { + w_fac = (t_west == "cavern" ? 0 : 4); + e_fac = (t_east == "cavern" ? SEEX * 2 : SEEX * 2 - 5); + } else { + w_fac = (t_north == "cavern" ? 0 : 4); + e_fac = (t_south == "cavern" ? SEEX * 2 : SEEX * 2 - 5); + } + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < w_fac || i > e_fac) { + ter_set(i, j, t_rock); + } else if (one_in(90)) { + ter_set(i, j, t_rubble); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + if (is_ot_type("sub_station", t_above)) { + ter_set(SEEX * 2 - 5, rng(SEEY - 5, SEEY + 4), t_stairs_up); + } + place_items("subway", 30, 4, 0, SEEX * 2 - 5, SEEY * 2 - 1, true, 0); + if (terrain_type == "subway_ew") { + rotate(1); + } + + + } else if (terrain_type == "subway_ne" || + terrain_type == "subway_es" || + terrain_type == "subway_sw" || + terrain_type == "subway_wn") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i >= SEEX * 2 - 4 && j < 4) || i < 4 || j >= SEEY * 2 - 4) { + ter_set(i, j, t_rock); + } else if (one_in(30)) { + ter_set(i, j, t_rubble); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + if (t_above >= "sub_station_north" && t_above <= "sub_station_west") { + ter_set(SEEX * 2 - 5, rng(SEEY - 5, SEEY + 4), t_stairs_up); + } + place_items("subway", 30, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + if (terrain_type == "subway_es") { + rotate(1); + } + if (terrain_type == "subway_sw") { + rotate(2); + } + if (terrain_type == "subway_wn") { + rotate(3); + } + + + } else if (terrain_type == "subway_nes" || + terrain_type == "subway_new" || + terrain_type == "subway_nsw" || + terrain_type == "subway_esw") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < 4 || (i >= SEEX * 2 - 4 && (j < 4 || j >= SEEY * 2 - 4))) { + ter_set(i, j, t_rock); + } else if (one_in(30)) { + ter_set(i, j, t_rubble); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + if (t_above >= "sub_station_north" && t_above <= "sub_station_west") { + ter_set(4, rng(SEEY - 5, SEEY + 4), t_stairs_up); + } + place_items("subway", 35, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + if (terrain_type == "subway_esw") { + rotate(1); + } + if (terrain_type == "subway_nsw") { + rotate(2); + } + if (terrain_type == "subway_new") { + rotate(3); + } + + + } else if (terrain_type == "subway_nesw") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i < 4 || i >= SEEX * 2 - 4) && + (j < 4 || j >= SEEY * 2 - 4)) { + ter_set(i, j, t_rock); + } else if (one_in(30)) { + ter_set(i, j, t_rubble); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + + if (is_ot_type("sub_station", t_above)) { + ter_set(4 + rng(0, 1) * (SEEX * 2 - 9), 4 + rng(0, 1) * (SEEY * 2 - 9), t_stairs_up); + } + place_items("subway", 40, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + + + } else if (terrain_type == "sewer_ns" || + terrain_type == "sewer_ew") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < SEEX - 2 || i > SEEX + 1) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_sewage); + } + } + } + place_items("sewer", 10, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + if (terrain_type == "sewer_ew") { + rotate(1); + } + + + } else if (terrain_type == "sewer_ne" || + terrain_type == "sewer_es" || + terrain_type == "sewer_sw" || + terrain_type == "sewer_wn") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i > SEEX + 1 && j < SEEY - 2) || i < SEEX - 2 || j > SEEY + 1) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_sewage); + } + } + } + place_items("sewer", 18, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + if (terrain_type == "sewer_es") { + rotate(1); + } + if (terrain_type == "sewer_sw") { + rotate(2); + } + if (terrain_type == "sewer_wn") { + rotate(3); + } + + + } else if (terrain_type == "sewer_nes" || + terrain_type == "sewer_new" || + terrain_type == "sewer_nsw" || + terrain_type == "sewer_esw") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < SEEX - 2 || (i > SEEX + 1 && (j < SEEY - 2 || j > SEEY + 1))) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_sewage); + } + } + } + place_items("sewer", 23, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + if (terrain_type == "sewer_esw") { + rotate(1); + } + if (terrain_type == "sewer_nsw") { + rotate(2); + } + if (terrain_type == "sewer_new") { + rotate(3); + } + + + } else if (terrain_type == "sewer_nesw") { + + rn = rng(0, 3); + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((i < SEEX - 2 || i > SEEX + 1) && (j < SEEY - 2 || j > SEEY + 1)) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_sewage); + } + if (rn == 0 && (trig_dist(i, j, SEEX - 1, SEEY - 1) <= 6 || + trig_dist(i, j, SEEX - 1, SEEY ) <= 6 || + trig_dist(i, j, SEEX, SEEY - 1) <= 6 || + trig_dist(i, j, SEEX, SEEY ) <= 6 )) { + ter_set(i, j, t_sewage); + } + if (rn == 0 && (i == SEEX - 1 || i == SEEX) && (j == SEEY - 1 || j == SEEY)) { + ter_set(i, j, t_grate); + } + } + } + place_items("sewer", 28, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + + + } else if (terrain_type == "ants_ns" || + terrain_type == "ants_ew") { + + x = SEEX; + fill_background(this, t_rock); + for (int j = 0; j < SEEY * 2; j++) { + for (int i = x - 2; i <= x + 3; i++) { + if (i >= 1 && i < SEEX * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + x += rng(-1, 1); + while (abs(SEEX - x) > SEEX * 2 - j - 1) { + if (x < SEEX) { + x++; + } + if (x > SEEX) { + x--; + } + } + } + if (terrain_type == "ants_ew") { + rotate(1); + } + + + } else if (terrain_type == "ants_ne" || + terrain_type == "ants_es" || + terrain_type == "ants_sw" || + terrain_type == "ants_wn") { + + x = SEEX; + y = 1; + rn = 0; + // First, set it all to rock + fill_background(this, t_rock); + + for (int i = SEEX - 2; i <= SEEX + 3; i++) { + ter_set(i, 0, t_rock_floor); + ter_set(i, 1, t_rock_floor); + ter_set(i, 2, t_rock_floor); + ter_set(SEEX * 2 - 1, i, t_rock_floor); + ter_set(SEEX * 2 - 2, i, t_rock_floor); + ter_set(SEEX * 2 - 3, i, t_rock_floor); + } + do { + for (int i = x - 2; i <= x + 3; i++) { + for (int j = y - 2; j <= y + 3; j++) { + if (i > 0 && i < SEEX * 2 - 1 && j > 0 && j < SEEY * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + } + if (rn < SEEX) { + x += rng(-1, 1); + y++; + } else { + x++; + if (!one_in(x - SEEX)) { + y += rng(-1, 1); + } else if (y < SEEY) { + y++; + } else if (y > SEEY) { + y--; + } + } + rn++; + } while (x < SEEX * 2 - 1 || y != SEEY); + for (int i = x - 2; i <= x + 3; i++) { + for (int j = y - 2; j <= y + 3; j++) { + if (i > 0 && i < SEEX * 2 - 1 && j > 0 && j < SEEY * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + } + if (terrain_type == "ants_es") { + rotate(1); + } + if (terrain_type == "ants_sw") { + rotate(2); + } + if (terrain_type == "ants_wn") { + rotate(3); + } + + + } else if (terrain_type == "ants_nes" || + terrain_type == "ants_new" || + terrain_type == "ants_nsw" || + terrain_type == "ants_esw") { + + fill_background(this, t_rock); + x = SEEX; + for (int j = 0; j < SEEY * 2; j++) { + for (int i = x - 2; i <= x + 3; i++) { + if (i >= 1 && i < SEEX * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + x += rng(-1, 1); + while (abs(SEEX - x) > SEEY * 2 - j - 1) { + if (x < SEEX) { + x++; + } + if (x > SEEX) { + x--; + } + } + } + y = SEEY; + for (int i = SEEX; i < SEEX * 2; i++) { + for (int j = y - 2; j <= y + 3; j++) { + if (j >= 1 && j < SEEY * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + y += rng(-1, 1); + while (abs(SEEY - y) > SEEX * 2 - 1 - i) { + if (y < SEEY) { + y++; + } + if (y > SEEY) { + y--; + } + } + } + if (terrain_type == "ants_new") { + rotate(3); + } + if (terrain_type == "ants_nsw") { + rotate(2); + } + if (terrain_type == "ants_esw") { + rotate(1); + } + + + } else if (terrain_type == "ants_nesw") { + + fill_background(this, t_rock); + x = SEEX; + for (int j = 0; j < SEEY * 2; j++) { + for (int i = x - 2; i <= x + 3; i++) { + if (i >= 1 && i < SEEX * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + x += rng(-1, 1); + while (abs(SEEX - x) > SEEY * 2 - j - 1) { + if (x < SEEX) { + x++; + } + if (x > SEEX) { + x--; + } + } + } + + y = SEEY; + for (int i = 0; i < SEEX * 2; i++) { + for (int j = y - 2; j <= y + 3; j++) { + if (j >= 1 && j < SEEY * 2 - 1) { + ter_set(i, j, t_rock_floor); + } + } + y += rng(-1, 1); + while (abs(SEEY - y) > SEEX * 2 - i - 1) { + if (y < SEEY) { + y++; + } + if (y > SEEY) { + y--; + } + } + } + + + } else if (terrain_type == "ants_food" || + terrain_type == "ants_larvae" || + terrain_type == "ants_queen") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (i < SEEX - 4 || i > SEEX + 5 || j < SEEY - 4 || j > SEEY + 5) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + rn = rng(10, 20); + for (int n = 0; n < rn; n++) { + cw = rng(1, 8); + do { + x = rng(1 + cw, SEEX * 2 - 2 - cw); + y = rng(1 + cw, SEEY * 2 - 2 - cw); + } while (ter(x, y) == t_rock); + for (int i = x - cw; i <= x + cw; i++) { + for (int j = y - cw; j <= y + cw; j++) { + if (trig_dist(x, y, i, j) <= cw) { + ter_set(i, j, t_rock_floor); + } + } + } + } + if (connects_to(t_north, 2)) { + for (int i = SEEX - 2; i <= SEEX + 3; i++) { + for (int j = 0; j <= SEEY; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (connects_to(t_east, 3)) { + for (int i = SEEX; i <= SEEX * 2 - 1; i++) { + for (int j = SEEY - 2; j <= SEEY + 3; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (connects_to(t_south, 0)) { + for (int i = SEEX - 2; i <= SEEX + 3; i++) { + for (int j = SEEY; j <= SEEY * 2 - 1; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (connects_to(t_west, 1)) { + for (int i = 0; i <= SEEX; i++) { + for (int j = SEEY - 2; j <= SEEY + 3; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (terrain_type == "ants_food") { + place_items("ant_food", 92, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + } else { + place_items("ant_egg", 98, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + } + if (terrain_type == "ants_queen") { + add_spawn("mon_ant_queen", 1, SEEX, SEEY); + } else if (terrain_type == "ants_larvae") { + add_spawn("mon_ant_larva", 10, SEEX, SEEY); + } + + + } else if (terrain_type == "tutorial") { + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if (j == 0 || j == SEEY * 2 - 1) { + ter_set(i, j, t_wall_h); + } else if (i == 0 || i == SEEX * 2 - 1) { + ter_set(i, j, t_wall_v); + } else if (j == SEEY) { + if (i % 4 == 2) { + ter_set(i, j, t_door_c); + } else if (i % 5 == 3) { + ter_set(i, j, t_window_domestic); + } else { + ter_set(i, j, t_wall_h); + } + } else { + ter_set(i, j, t_floor); + } + } + } + furn_set(7, SEEY * 2 - 4, f_rack); + place_gas_pump(SEEX * 2 - 2, SEEY * 2 - 4, rng(500, 1000)); + if (t_above != "") { + ter_set(SEEX - 2, SEEY + 2, t_stairs_up); + ter_set(2, 2, t_water_sh); + ter_set(2, 3, t_water_sh); + ter_set(3, 2, t_water_sh); + ter_set(3, 3, t_water_sh); + } else { + spawn_item( 5, SEEY + 1, "helmet_bike"); + spawn_item( 4, SEEY + 1, "backpack"); + spawn_item( 3, SEEY + 1, "pants_cargo"); + spawn_item( 7, SEEY * 2 - 4, "machete"); + spawn_item( 7, SEEY * 2 - 4, "9mm"); + spawn_item( 7, SEEY * 2 - 4, "9mmP"); + spawn_item( 7, SEEY * 2 - 4, "uzi"); + spawn_item(SEEX * 2 - 2, SEEY + 5, "bubblewrap"); + spawn_item(SEEX * 2 - 2, SEEY + 6, "grenade"); + spawn_item(SEEX * 2 - 3, SEEY + 6, "flashlight"); + spawn_item(SEEX * 2 - 2, SEEY + 7, "cig"); + spawn_item(SEEX * 2 - 2, SEEY + 7, "codeine"); + spawn_item(SEEX * 2 - 3, SEEY + 7, "water"); + ter_set(SEEX - 2, SEEY + 2, t_stairs_down); + } + + + } else if (terrain_type == "cavern") { + + for (int i = 0; i < 4; i++) { + nesw_fac[i] = (t_nesw[i] == "cavern" || t_nesw[i] == "subway_ns" || + t_nesw[i] == "subway_ew" ? 0 : 3); + } + e_fac = SEEX * 2 - 1 - e_fac; + s_fac = SEEY * 2 - 1 - s_fac; + + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + if ((j < n_fac || j > s_fac || i < w_fac || i > e_fac) && + (!one_in(3) || j == 0 || j == SEEY * 2 - 1 || i == 0 || i == SEEX * 2 - 1)) { + ter_set(i, j, t_rock); + } else { + ter_set(i, j, t_rock_floor); + } + } + } + + rn = rng(0, 2) * rng(0, 3) + rng(0, 1); // Number of pillars + for (int n = 0; n < rn; n++) { + int px = rng(5, SEEX * 2 - 6); + int py = rng(5, SEEY * 2 - 6); + for (int i = px - 1; i <= px + 1; i++) { + for (int j = py - 1; j <= py + 1; j++) { + ter_set(i, j, t_rock); + } + } + } + + if (connects_to(t_north, 2)) { + for (int i = SEEX - 2; i <= SEEX + 3; i++) { + for (int j = 0; j <= SEEY; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (connects_to(t_east, 3)) { + for (int i = SEEX; i <= SEEX * 2 - 1; i++) { + for (int j = SEEY - 2; j <= SEEY + 3; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (connects_to(t_south, 0)) { + for (int i = SEEX - 2; i <= SEEX + 3; i++) { + for (int j = SEEY; j <= SEEY * 2 - 1; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + if (connects_to(t_west, 1)) { + for (int i = 0; i <= SEEX; i++) { + for (int j = SEEY - 2; j <= SEEY + 3; j++) { + ter_set(i, j, t_rock_floor); + } + } + } + place_items("cavern", 60, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, 0); + if (one_in(6)) { // Miner remains + int x, y; + do { + x = rng(0, SEEX * 2 - 1); + y = rng(0, SEEY * 2 - 1); + } while (move_cost(x, y) == 0); + if (!one_in(3)) { + spawn_item(x, y, "jackhammer"); + } + if (one_in(3)) { + spawn_item(x, y, "mask_dust"); + } + if (one_in(2)) { + spawn_item(x, y, "hat_hard"); + } + while (!one_in(3)) { + put_items_from("cannedfood", 3, x, y, 0, 0, 0); + } + } + + + } else { + // not one of the hardcoded ones! + // load from JSON??? + debugmsg("Error: tried to generate map for omtype %s, \"%s\"", + terrain_type.c_str(), otermap[terrain_type].name.c_str()); + fill_background(this, t_floor); + + }} + // THE END OF THE HUGE IF ELIF ELIF ELIF ELI FLIE FLIE FLIE FEL OMFG + + // WTF it is still going?... + + + // Now, fix sewers and subways so that they interconnect. + + if (is_ot_type("subway", terrain_type)) { + if (is_ot_type("sewer", t_north) && + !connects_to(terrain_type, 0)) { + if (connects_to(t_north, 2)) { + for (int i = SEEX - 2; i < SEEX + 2; i++) { + for (int j = 0; j < SEEY; j++) { + ter_set(i, j, t_sewage); + } + } + } else { + for (int j = 0; j < 3; j++) { + ter_set(SEEX, j, t_rock_floor); + ter_set(SEEX - 1, j, t_rock_floor); + } + ter_set(SEEX, 3, t_door_metal_c); + ter_set(SEEX - 1, 3, t_door_metal_c); + } + } + if (is_ot_type("sewer", t_east) && + !connects_to(terrain_type, 1)) { + if (connects_to(t_east, 3)) { + for (int i = SEEX; i < SEEX * 2; i++) { + for (int j = SEEY - 2; j < SEEY + 2; j++) { + ter_set(i, j, t_sewage); + } + } + } else { + for (int i = SEEX * 2 - 3; i < SEEX * 2; i++) { + ter_set(i, SEEY, t_rock_floor); + ter_set(i, SEEY - 1, t_rock_floor); + } + ter_set(SEEX * 2 - 4, SEEY, t_door_metal_c); + ter_set(SEEX * 2 - 4, SEEY - 1, t_door_metal_c); + } + } + if (is_ot_type("sewer", t_south) && + !connects_to(terrain_type, 2)) { + if (connects_to(t_south, 0)) { + for (int i = SEEX - 2; i < SEEX + 2; i++) { + for (int j = SEEY; j < SEEY * 2; j++) { + ter_set(i, j, t_sewage); + } + } + } else { + for (int j = SEEY * 2 - 3; j < SEEY * 2; j++) { + ter_set(SEEX, j, t_rock_floor); + ter_set(SEEX - 1, j, t_rock_floor); + } + ter_set(SEEX, SEEY * 2 - 4, t_door_metal_c); + ter_set(SEEX - 1, SEEY * 2 - 4, t_door_metal_c); + } + } + if (is_ot_type("sewer", t_west) && + !connects_to(terrain_type, 3)) { + if (connects_to(t_west, 1)) { + for (int i = 0; i < SEEX; i++) { + for (int j = SEEY - 2; j < SEEY + 2; j++) { + ter_set(i, j, t_sewage); + } + } + } else { + for (int i = 0; i < 3; i++) { + ter_set(i, SEEY, t_rock_floor); + ter_set(i, SEEY - 1, t_rock_floor); + } + ter_set(3, SEEY, t_door_metal_c); + ter_set(3, SEEY - 1, t_door_metal_c); + } + } + } else if (is_ot_type("sewer", terrain_type)) { + if (t_above == "road_nesw_manhole") { + ter_set(rng(SEEX - 2, SEEX + 1), rng(SEEY - 2, SEEY + 1), t_ladder_up); + } + if (is_ot_type("subway", t_north) && + !connects_to(terrain_type, 0)) { + for (int j = 0; j < SEEY - 3; j++) { + ter_set(SEEX, j, t_rock_floor); + ter_set(SEEX - 1, j, t_rock_floor); + } + ter_set(SEEX, SEEY - 3, t_door_metal_c); + ter_set(SEEX - 1, SEEY - 3, t_door_metal_c); + } + if (is_ot_type("subway", t_east) && + !connects_to(terrain_type, 1)) { + for (int i = SEEX + 3; i < SEEX * 2; i++) { + ter_set(i, SEEY, t_rock_floor); + ter_set(i, SEEY - 1, t_rock_floor); + } + ter_set(SEEX + 2, SEEY, t_door_metal_c); + ter_set(SEEX + 2, SEEY - 1, t_door_metal_c); + } + if (is_ot_type("subway", t_south) && + !connects_to(terrain_type, 2)) { + for (int j = SEEY + 3; j < SEEY * 2; j++) { + ter_set(SEEX, j, t_rock_floor); + ter_set(SEEX - 1, j, t_rock_floor); + } + ter_set(SEEX, SEEY + 2, t_door_metal_c); + ter_set(SEEX - 1, SEEY + 2, t_door_metal_c); + } + if (is_ot_type("subway", t_west) && + !connects_to(terrain_type, 3)) { + for (int i = 0; i < SEEX - 3; i++) { + ter_set(i, SEEY, t_rock_floor); + ter_set(i, SEEY - 1, t_rock_floor); + } + ter_set(SEEX - 3, SEEY, t_door_metal_c); + ter_set(SEEX - 3, SEEY - 1, t_door_metal_c); + } + } else if (is_ot_type("ants", terrain_type)) { + if (t_above == "anthill") { + bool done = false; + do { + int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); + if (ter(x, y) == t_rock_floor) { + done = true; + ter_set(x, y, t_slope_up); + } + } while (!done); + } + } + +} + +void map::post_process(game *g, unsigned zones) +{ + std::string junk; + if (zones & mfb(OMZONE_CITY)) { + if (!one_in(10)) { // 90% chance of smashing stuff up + for (int x = 0; x < 24; x++) { + for (int y = 0; y < 24; y++) { + bash(x, y, 20, junk); + } + } + } + if (one_in(10)) { // 10% chance of corpses + int num_corpses = rng(1, 8); + for (int i = 0; i < num_corpses; i++) { + int x = rng(0, 23), y = rng(0, 23); + if (move_cost(x, y) > 0) { + add_corpse(g, this, x, y); + } + } + } + } // OMZONE_CITY + + if (zones & mfb(OMZONE_BOMBED)) { + while (one_in(4)) { + point center( rng(4, 19), rng(4, 19) ); + int radius = rng(1, 4); + for (int x = center.x - radius; x <= center.x + radius; x++) { + for (int y = center.y - radius; y <= center.y + radius; y++) { + if (rl_dist(x, y, center.x, center.y) <= rng(1, radius)) { + destroy(g, x, y, false); + } + } + } + } + } + +} + +void map::place_spawns(game *g, std::string group, const int chance, + const int x1, const int y1, const int x2, const int y2, const float density) +{ + if (!ACTIVE_WORLD_OPTIONS["STATIC_SPAWN"]) { + return; + } + + float multiplier = ACTIVE_WORLD_OPTIONS["SPAWN_DENSITY"]; + + if( multiplier == 0.0 ) { + return; + } + + if (one_in(chance / multiplier)) { + int num = density * (float)rng(10, 50) * multiplier; + + for (int i = 0; i < num; i++) { + int tries = 10; + int x = 0; + int y = 0; + + // Pick a spot for the spawn + do { + x = rng(x1, x2); + y = rng(y1, y2); + tries--; + } while( move_cost(x, y) == 0 && tries ); + + // Pick a monster type + MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup( group, &num ); + + add_spawn(spawn_details.name, spawn_details.pack_size, x, y); + } + } +} + +void map::place_gas_pump(int x, int y, int charges) +{ + item gas(itypes["gasoline"], 0); + gas.charges = charges; + add_item(x, y, gas); + ter_set(x, y, t_gas_pump); +} + +void map::place_toilet(int x, int y, int charges) +{ + item water(itypes["water"], 0); + water.charges = charges; + add_item(x, y, water); + furn_set(x, y, f_toilet); +} + +int map::place_items(items_location loc, int chance, int x1, int y1, + int x2, int y2, bool ongrass, int turn) +{ + if (chance >= 100 || chance <= 0) { + debugmsg("map::place_items() called with an invalid chance (%d)", chance); + return 0; + } + + Item_tag selected_item; + int px, py; + int item_num = 0; + while (rng(0, 99) < chance) { + selected_item = item_controller->id_from(loc); + int tries = 0; + do { + px = rng(x1, x2); + py = rng(y1, y2); + tries++; + // Only place on valid terrain + } while (((terlist[ter(px, py)].movecost == 0 && + !(terlist[ter(px, py)].has_flag("PLACE_ITEM"))) || + (!ongrass && !terlist[ter(px, py)].has_flag("FLAT") )) && + tries < 20); + if (tries < 20) { + spawn_item(px, py, selected_item, 1, 0, turn); + item_num++; + // Guns in the home and behind counters are generated with their ammo + // TODO: Make this less of a hack + if (item_controller->find_template(selected_item)->is_gun() && + (loc == "homeguns" || loc == "behindcounter")) { + it_gun *tmpgun = dynamic_cast (item_controller->find_template(selected_item)); + spawn_item(px, py, default_ammo(tmpgun->ammo), 1, 0, turn); + } + } + } + return item_num; +} + +void map::put_items_from(items_location loc, int num, int x, int y, int turn, int quantity, + int charges, int damlevel) +{ + for (int i = 0; i < num; i++) { + Item_tag selected_item = item_controller->id_from(loc); + spawn_item(x, y, selected_item, quantity, charges, turn, damlevel); + } +} + +void map::add_spawn(std::string type, int count, int x, int y, bool friendly, + int faction_id, int mission_id, std::string name) +{ + if (x < 0 || x >= SEEX * my_MAPSIZE || y < 0 || y >= SEEY * my_MAPSIZE) { + debugmsg("Bad add_spawn(%s, %d, %d, %d)", type.c_str(), count, x, y); + return; + } + int nonant = int(x / SEEX) + int(y / SEEY) * my_MAPSIZE; + if(!grid[nonant]) { + debugmsg("centadodecamonant doesn't exist in grid; within add_spawn(%s, %d, %d, %d)", + type.c_str(), count, x, y); + return; + } + if( ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] && !GetMType(type)->in_category("CLASSIC") && + !GetMType(type)->in_category("WILDLIFE") ) { + // Don't spawn non-classic monsters in classic zombie mode. + return; + } + x %= SEEX; + y %= SEEY; + spawn_point tmp(type, count, x, y, faction_id, mission_id, friendly, name); + grid[nonant]->spawns.push_back(tmp); +} + +void map::add_spawn(monster *mon) +{ + int spawnx, spawny; + std::string spawnname = (mon->unique_name == "" ? "NONE" : mon->unique_name); + if (mon->spawnmapx != -1) { + spawnx = mon->spawnposx; + spawny = mon->spawnposy; + } else { + spawnx = mon->posx(); + spawny = mon->posy(); + } + while (spawnx < 0) { + spawnx += SEEX; + } + while (spawny < 0) { + spawny += SEEY; + } + spawnx %= SEEX; + spawny %= SEEY; + add_spawn(mon->type->id, 1, spawnx, spawny, (mon->friendly < 0), + mon->faction_id, mon->mission_id, spawnname); +} + +vehicle *map::add_vehicle(game *g, std::string type, const int x, const int y, const int dir, + const int veh_fuel, const int veh_status, const bool merge_wrecks) +{ + if(g->vtypes.count(type) == 0) { + debugmsg("Nonexistant vehicle type: \"%s\"", type.c_str()); + return NULL; + } + if (x < 0 || x >= SEEX * my_MAPSIZE || y < 0 || y >= SEEY * my_MAPSIZE) { + debugmsg("Out of bounds add_vehicle t=%s d=%d x=%d y=%d", type.c_str(), dir, x, y); + return NULL; + } + // debugmsg("add_vehicle t=%d d=%d x=%d y=%d", type, dir, x, y); + + const int smx = x / SEEX; + const int smy = y / SEEY; + // debugmsg("n=%d x=%d y=%d MAPSIZE=%d ^2=%d", nonant, x, y, MAPSIZE, MAPSIZE*MAPSIZE); + vehicle *veh = new vehicle(g, type, veh_fuel, veh_status); + veh->posx = x % SEEX; + veh->posy = y % SEEY; + veh->smx = smx; + veh->smy = smy; + veh->place_spawn_items(); + veh->face.init(dir); + veh->turn_dir = dir; + veh->precalc_mounts (0, dir); + // veh->init_veh_fuel = 50; + // veh->init_veh_status = 0; + + vehicle *placed_vehicle = add_vehicle_to_map(veh, x, y, merge_wrecks); + + if(placed_vehicle != NULL) { + const int nonant = placed_vehicle->smx + placed_vehicle->smy * my_MAPSIZE; + grid[nonant]->vehicles.push_back(placed_vehicle); + + vehicle_list.insert(placed_vehicle); + update_vehicle_cache(placed_vehicle, true); + + //debugmsg ("grid[%d]->vehicles.size=%d veh.parts.size=%d", nonant, grid[nonant]->vehicles.size(),veh.parts.size()); + } + return placed_vehicle; +} + +/** + * Takes a vehicle already created with new and attempts to place it on the map, + * checking for collisions. If the vehicle can't be placed, returns NULL, + * otherwise returns a pointer to the placed vehicle, which may not necessarily + * be the one passed in (if wreckage is created by fusing cars). + * @param veh The vehicle to place on the map. + * @return The vehicle that was finally placed. + */ +vehicle *map::add_vehicle_to_map(vehicle *veh, const int x, const int y, const bool merge_wrecks) +{ + //We only want to check once per square, so loop over all structural parts + std::vector frame_indices = veh->all_parts_at_location("structure"); + for (std::vector::const_iterator part = frame_indices.begin(); + part != frame_indices.end(); part++) { + const int px = x + veh->parts[*part].precalc_dx[0]; + const int py = y + veh->parts[*part].precalc_dy[0]; + + //Don't spawn anything in water + if (ter(px, py) == t_water_dp || ter(px, py) == t_water_pool) { + delete veh; + return NULL; + } + + // Don't spawn shopping carts on top of another vehicle or other obstacle. + if (veh->type == "shopping_cart") { + if (veh_at(px, py) != NULL || move_cost(px, py) == 0) { + delete veh; + return NULL; + } + } + + //When hitting a wall, only smash the vehicle once (but walls many times) + bool veh_smashed = false; + //For other vehicles, simulate collisions with (non-shopping cart) stuff + vehicle *other_veh = veh_at(px, py); + if (other_veh != NULL && other_veh->type != "shopping cart") { + if( !merge_wrecks ) { + delete veh; + return NULL; + } + + /* There's a vehicle here, so let's fuse them together into wreckage and + * smash them up. It'll look like a nasty collision has occurred. + * Trying to do a local->global->local conversion would be a major + * headache, so instead, let's make another vehicle whose (0, 0) point + * is the (0, 0) of the existing vehicle, convert the coordinates of both + * vehicles into global coordinates, find the distance between them and + * (px, py) and then install them that way. + * Create a vehicle with type "null" so it starts out empty. */ + vehicle *wreckage = new vehicle(g); + wreckage->posx = other_veh->posx; + wreckage->posy = other_veh->posy; + wreckage->smx = other_veh->smx; + wreckage->smy = other_veh->smy; + + //Where are we on the global scale? + const int global_x = wreckage->smx * SEEX + wreckage->posx; + const int global_y = wreckage->smy * SEEY + wreckage->posy; + + for (int part_index = 0; part_index < veh->parts.size(); part_index++) { + + const int local_x = (veh->smx * SEEX + veh->posx) + + veh->parts[part_index].precalc_dx[0] + - global_x; + const int local_y = (veh->smy * SEEY + veh->posy) + + veh->parts[part_index].precalc_dy[0] + - global_y; + + wreckage->install_part(local_x, local_y, veh->parts[part_index].id, -1, true); + + } + for (int part_index = 0; part_index < other_veh->parts.size(); part_index++) { + + const int local_x = (other_veh->smx * SEEX + other_veh->posx) + + other_veh->parts[part_index].precalc_dx[0] + - global_x; + const int local_y = (other_veh->smy * SEEY + other_veh->posy) + + other_veh->parts[part_index].precalc_dy[0] + - global_y; + + wreckage->install_part(local_x, local_y, other_veh->parts[part_index].id, -1, true); + + } + + wreckage->name = _("Wreckage"); + wreckage->smash(); + + //Now get rid of the old vehicles + destroy_vehicle(other_veh); + delete veh; + + //Try again with the wreckage + return add_vehicle_to_map(wreckage, global_x, global_y); + + } else if (move_cost(px, py) == 0) { + if( !merge_wrecks ) { + delete veh; + return NULL; + } + + //There's a wall or other obstacle here; destroy it + destroy(g, px, py, false); + + //Then smash up the vehicle + if(!veh_smashed) { + veh->smash(); + veh_smashed = true; + } + + } + } + + return veh; +} + +computer *map::add_computer(int x, int y, std::string name, int security) +{ + ter_set(x, y, t_console); // TODO: Turn this off? + int nonant = int(x / SEEX) + int(y / SEEY) * my_MAPSIZE; + grid[nonant]->comp = computer(name, security); + return &(grid[nonant]->comp); +} + +/** + * Rotates this map, and all of its contents, by the specified multiple of 90 + * degrees. + * @param turns How many 90-degree turns to rotate the map. + */ +void map::rotate(int turns) +{ + + //Handle anything outside the 1-3 range gracefully; rotate(0) is a no-op. + turns = turns % 4; + if(turns == 0) { + return; + } + + ter_id rotated [SEEX * 2][SEEY * 2]; + furn_id furnrot [SEEX * 2][SEEY * 2]; + trap_id traprot [SEEX * 2][SEEY * 2]; + std::vector itrot[SEEX * 2][SEEY * 2]; + std::vector sprot[MAPSIZE * MAPSIZE]; + computer tmpcomp; + std::vector tmpveh; + + //Rotate terrain first + for (int old_x = 0; old_x < SEEX * 2; old_x++) { + for (int old_y = 0; old_y < SEEY * 2; old_y++) { + int new_x = old_x; + int new_y = old_y; + switch(turns) { + case 1: + new_x = old_y; + new_y = SEEX * 2 - 1 - old_x; + break; + case 2: + new_x = SEEX * 2 - 1 - old_x; + new_y = SEEY * 2 - 1 - old_y; + break; + case 3: + new_x = SEEY * 2 - 1 - old_y; + new_y = old_x; + break; + } + rotated[old_x][old_y] = ter(new_x, new_y); + furnrot[old_x][old_y] = furn(new_x, new_y); + itrot [old_x][old_y] = i_at(new_x, new_y); + traprot[old_x][old_y] = tr_at(new_x, new_y); + i_clear(new_x, new_y); + } + } + + //Next, spawn points + for (int sx = 0; sx < 2; sx++) { + for (int sy = 0; sy < 2; sy++) { + int gridfrom = sx + sy * my_MAPSIZE; + int gridto = gridfrom;; + switch(turns) { + case 1: + gridto = sx * my_MAPSIZE + 1 - sy; + break; + case 2: + gridto = (1 - sy) * my_MAPSIZE + 1 - sx; + break; + case 3: + gridto = (1 - sx) * my_MAPSIZE + sy; + break; + } + for (int spawn = 0; spawn < grid[gridfrom]->spawns.size(); spawn++) { + spawn_point tmp = grid[gridfrom]->spawns[spawn]; + int new_x = tmp.posx; + int new_y = tmp.posy; + switch(turns) { + case 1: + new_x = SEEY - 1 - tmp.posy; + new_y = tmp.posx; + break; + case 2: + new_x = SEEX - 1 - tmp.posx; + new_y = SEEY - 1 - tmp.posy; + break; + case 3: + new_x = tmp.posy; + new_y = SEEX - 1 - tmp.posx; + break; + } + tmp.posx = new_x; + tmp.posy = new_y; + sprot[gridto].push_back(tmp); + } + } + } + + //Then computers + switch (turns) { + case 1: + tmpcomp = grid[0]->comp; + grid[0]->comp = grid[my_MAPSIZE]->comp; + grid[my_MAPSIZE]->comp = grid[my_MAPSIZE + 1]->comp; + grid[my_MAPSIZE + 1]->comp = grid[1]->comp; + grid[1]->comp = tmpcomp; + break; + + case 2: + tmpcomp = grid[0]->comp; + grid[0]->comp = grid[my_MAPSIZE + 1]->comp; + grid[my_MAPSIZE + 1]->comp = tmpcomp; + tmpcomp = grid[1]->comp; + grid[1]->comp = grid[my_MAPSIZE]->comp; + grid[my_MAPSIZE]->comp = tmpcomp; + break; + + case 3: + tmpcomp = grid[0]->comp; + grid[0]->comp = grid[1]->comp; + grid[1]->comp = grid[my_MAPSIZE + 1]->comp; + grid[my_MAPSIZE + 1]->comp = grid[my_MAPSIZE]->comp; + grid[my_MAPSIZE]->comp = tmpcomp; + break; + } + + for(std::set::iterator next_vehicle = vehicle_list.begin(); + next_vehicle != vehicle_list.end(); next_vehicle++) { + + int new_x = (*next_vehicle)->smx; + int new_y = (*next_vehicle)->smy; + switch(turns) { + case 1: + new_x = SEEY - 1 - (*next_vehicle)->smy; + new_y = (*next_vehicle)->smx; + break; + case 2: + new_x = SEEX - 1 - (*next_vehicle)->smx; + new_y = SEEY - 1 - (*next_vehicle)->smy; + break; + case 3: + new_x = (*next_vehicle)->smy; + new_y = SEEX - 1 - (*next_vehicle)->smx; + break; + } + (*next_vehicle)->smx = new_x; + (*next_vehicle)->smy = new_y; + + } + + // change vehicles' directions + for (int i = 0; i < my_MAPSIZE * my_MAPSIZE; i++) { + for (int v = 0; v < grid[i]->vehicles.size(); v++) { + if (turns >= 1 && turns <= 3) { + grid[i]->vehicles[v]->turn(turns * 90); + } + } + } + + // Set the spawn points + grid[0]->spawns = sprot[0]; + grid[1]->spawns = sprot[1]; + grid[my_MAPSIZE]->spawns = sprot[my_MAPSIZE]; + grid[my_MAPSIZE + 1]->spawns = sprot[my_MAPSIZE + 1]; + for (int i = 0; i < SEEX * 2; i++) { + for (int j = 0; j < SEEY * 2; j++) { + ter_set(i, j, rotated[i][j]); + furn_set(i, j, furnrot[i][j]); + i_at(i, j) = itrot [i][j]; + add_trap(i, j, traprot[i][j]); + if (turns % 2 == 1) { // Rotate things like walls 90 degrees + if (ter(i, j) == t_wall_v) { + ter_set(i, j, t_wall_h); + } else if (ter(i, j) == t_wall_h) { + ter_set(i, j, t_wall_v); + } else if (ter(i, j) == t_wall_metal_v) { + ter_set(i, j, t_wall_metal_h); + } else if (ter(i, j) == t_wall_metal_h) { + ter_set(i, j, t_wall_metal_v); + } else if (ter(i, j) == t_railing_v) { + ter_set(i, j, t_railing_h); + } else if (ter(i, j) == t_railing_h) { + ter_set(i, j, t_railing_v); + } else if (ter(i, j) == t_wall_glass_h) { + ter_set(i, j, t_wall_glass_v); + } else if (ter(i, j) == t_wall_glass_v) { + ter_set(i, j, t_wall_glass_h); + } else if (ter(i, j) == t_wall_glass_h_alarm) { + ter_set(i, j, t_wall_glass_v_alarm); + } else if (ter(i, j) == t_wall_glass_v_alarm) { + ter_set(i, j, t_wall_glass_h_alarm); + } else if (ter(i, j) == t_reinforced_glass_h) { + ter_set(i, j, t_reinforced_glass_v); + } else if (ter(i, j) == t_reinforced_glass_v) { + ter_set(i, j, t_reinforced_glass_h); + } else if (ter(i, j) == t_fence_v) { + ter_set(i, j, t_fence_h); + } else if (ter(i, j) == t_fence_h) { + ter_set(i, j, t_fence_v); + } else if (ter(i, j) == t_chainfence_h) { + ter_set(i, j, t_chainfence_v); + } else if (ter(i, j) == t_chainfence_v) { + ter_set(i, j, t_chainfence_h); + } else if (ter(i, j) == t_concrete_h) { + ter_set(i, j, t_concrete_v); + } else if (ter(i, j) == t_concrete_v) { + ter_set(i, j, t_concrete_h); + } + } + } + } +} + +// Hideous function, I admit... +bool connects_to(oter_id there, int dir) +{ + switch (dir) { + case 2: + if (there == "subway_ns" || there == "subway_es" || there == "subway_sw" || + there == "subway_nes" || there == "subway_nsw" || + there == "subway_esw" || there == "subway_nesw" || + there == "sewer_ns" || there == "sewer_es" || there == "sewer_sw" || + there == "sewer_nes" || there == "sewer_nsw" || there == "sewer_esw" || + there == "sewer_nesw" || there == "ants_ns" || there == "ants_es" || + there == "ants_sw" || there == "ants_nes" || there == "ants_nsw" || + there == "ants_esw" || there == "ants_nesw") { + return true; + } + return false; + case 3: + if (there == "subway_ew" || there == "subway_sw" || there == "subway_wn" || + there == "subway_new" || there == "subway_nsw" || + there == "subway_esw" || there == "subway_nesw" || + there == "sewer_ew" || there == "sewer_sw" || there == "sewer_wn" || + there == "sewer_new" || there == "sewer_nsw" || there == "sewer_esw" || + there == "sewer_nesw" || there == "ants_ew" || there == "ants_sw" || + there == "ants_wn" || there == "ants_new" || there == "ants_nsw" || + there == "ants_esw" || there == "ants_nesw") { + return true; + } + return false; + case 0: + if (there == "subway_ns" || there == "subway_ne" || there == "subway_wn" || + there == "subway_nes" || there == "subway_new" || + there == "subway_nsw" || there == "subway_nesw" || + there == "sewer_ns" || there == "sewer_ne" || there == "sewer_wn" || + there == "sewer_nes" || there == "sewer_new" || there == "sewer_nsw" || + there == "sewer_nesw" || there == "ants_ns" || there == "ants_ne" || + there == "ants_wn" || there == "ants_nes" || there == "ants_new" || + there == "ants_nsw" || there == "ants_nesw") { + return true; + } + return false; + case 1: + if (there == "subway_ew" || there == "subway_ne" || there == "subway_es" || + there == "subway_nes" || there == "subway_new" || + there == "subway_esw" || there == "subway_nesw" || + there == "sewer_ew" || there == "sewer_ne" || there == "sewer_es" || + there == "sewer_nes" || there == "sewer_new" || there == "sewer_esw" || + there == "sewer_nesw" || there == "ants_ew" || there == "ants_ne" || + there == "ants_es" || there == "ants_nes" || there == "ants_new" || + there == "ants_esw" || there == "ants_nesw") { + return true; + } + return false; + default: + debugmsg("Connects_to with dir of %d", dir); + return false; + } +} + +void house_room(map *m, room_type type, int x1, int y1, int x2, int y2) +{ + int pos_x1 = 0; + int pos_y1 = 0; + + if (type == room_backyard) { //processing it separately + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + if ((i == x1) || (i == x2)) { + m->ter_set(i, j, t_fence_v); + } else if (j == y2) { + m->ter_set(i, j, t_fence_h); + } else { + m->ter_set( i, j, t_grass); + if (one_in(35)) { + m->ter_set(i, j, t_tree_young); + } else if (one_in(35)) { + m->ter_set(i, j, t_tree); + } else if (one_in(25)) { + m->ter_set(i, j, t_dirt); + } + } + } + } + m->ter_set((x1 + x2) / 2, y2, t_fencegate_c); + m->furn_set(x1 + 2, y1, f_chair); + m->furn_set(x1 + 2, y1 + 1, f_table); + return; + } + + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + if (m->ter(i, j) == t_grass || m->ter(i, j) == t_dirt || + m->ter(i, j) == t_floor) { + if (j == y1 || j == y2) { + m->ter_set(i, j, t_wall_h); + m->ter_set(i, j, t_wall_h); + } else if (i == x1 || i == x2) { + m->ter_set(i, j, t_wall_v); + m->ter_set(i, j, t_wall_v); + } else { + m->ter_set(i, j, t_floor); + } + } + } + } + for (int i = y1 + 1; i <= y2 - 1; i++) { + m->ter_set(x1, i, t_wall_v); + m->ter_set(x2, i, t_wall_v); + } + + items_location placed = "none"; + int chance = 0, rn; + switch (type) { + case room_study: + placed = "livingroom"; + chance = 40; + break; + case room_living: + placed = "livingroom"; + chance = 83; + //choose random wall + switch (rng(1, 4)) { //some bookshelves + case 1: + pos_x1 = x1 + 2; + pos_y1 = y1 + 1; + m->furn_set(x1 + 2, y2 - 1, f_desk); + while (pos_x1 < x2) { + pos_x1 += 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 += 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 += 2; + } + break; + case 2: + pos_x1 = x2 - 2; + pos_y1 = y1 + 1; + m->furn_set(x1 + 2, y2 - 1, f_desk); + while (pos_x1 > x1) { + pos_x1 -= 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 -= 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 -= 2; + } + break; + case 3: + pos_x1 = x1 + 2; + pos_y1 = y2 - 1; + m->furn_set(x1 + 2, y2 - 1, f_desk); + while (pos_x1 < x2) { + pos_x1 += 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 += 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 += 2; + } + break; + case 4: + pos_x1 = x2 - 2; + pos_y1 = y2 - 1; + m->furn_set(x1 + 2, y2 - 1, f_desk); + while (pos_x1 > x1) { + pos_x1 -= 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 -= 1; + if ((m->ter(pos_x1, pos_y1) == t_wall_h) || (m->ter(pos_x1, pos_y1) == t_wall_v)) { + break; + } + m->furn_set(pos_x1, pos_y1, f_bookcase); + pos_x1 -= 2; + } + break; + m->furn_set(rng(x1 + 2, x2 - 2), rng(y1 + 1, y2 - 1), f_armchair); + } + + + break; + case room_kitchen: { + placed = "kitchen"; + chance = 75; + m->place_items("cleaning", 58, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); + m->place_items("home_hw", 40, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); + int oven_x = -1, oven_y = -1, cupboard_x = -1, cupboard_y = -1; + + switch (rng(1, 4)) { //fridge, sink, oven and some cupboards near them + case 1: + m->furn_set(x1 + 2, y1 + 1, f_fridge); + m->place_items("fridge", 82, x1 + 2, y1 + 1, x1 + 2, y1 + 1, false, 0); + m->furn_set(x1 + 1, y1 + 1, f_sink); + if (x1 + 4 < x2) { + oven_x = x1 + 3; + cupboard_x = x1 + 4; + oven_y = cupboard_y = y1 + 1; + } + + break; + case 2: + m->furn_set(x2 - 2, y1 + 1, f_fridge); + m->place_items("fridge", 82, x2 - 2, y1 + 1, x2 - 2, y1 + 1, false, 0); + m->furn_set(x2 - 1, y1 + 1, f_sink); + if (x2 - 4 > x1) { + oven_x = x2 - 3; + cupboard_x = x2 - 4; + oven_y = cupboard_y = y1 + 1; + } + break; + case 3: + m->furn_set(x1 + 2, y2 - 1, f_fridge); + m->place_items("fridge", 82, x1 + 2, y2 - 1, x1 + 2, y2 - 1, false, 0); + m->furn_set(x1 + 1, y2 - 1, f_sink); + if (x1 + 4 < x2) { + oven_x = x1 + 3; + cupboard_x = x1 + 4; + oven_y = cupboard_y = y2 - 1; + } + break; + case 4: + m->furn_set(x2 - 2, y2 - 1, f_fridge); + m->place_items("fridge", 82, x2 - 2, y2 - 1, x2 - 2, y2 - 1, false, 0); + m->furn_set(x2 - 1, y2 - 1, f_sink); + if (x2 - 4 > x1) { + oven_x = x2 - 3; + cupboard_x = x2 - 4; + oven_y = cupboard_y = y2 - 1; + } + break; + } + + // oven and it's contents + if ( oven_x != -1 && oven_y != -1 ) { + m->furn_set(oven_x, oven_y, f_oven); + m->place_items("oven", 70, oven_x, oven_y, oven_x, oven_y, false, 0); + } + + // cupboard and it's contents + if ( cupboard_x != -1 && cupboard_y != -1 ) { + m->furn_set(cupboard_x, cupboard_y, f_cupboard); + m->place_items("cleaning", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); + m->place_items("home_hw", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); + m->place_items("cannedfood", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); + m->place_items("pasta", 30, cupboard_x, cupboard_y, cupboard_x, cupboard_y, false, 0); + } + + if (one_in(2)) { //dining table in the kitchen + square_furn(m, f_table, int((x1 + x2) / 2) - 1, int((y1 + y2) / 2) - 1, int((x1 + x2) / 2), + int((y1 + y2) / 2) ); + } + if (one_in(2)) { + for (int i = 0; i <= 2; i++) { + pos_x1 = rng(x1 + 2, x2 - 2); + pos_y1 = rng(y1 + 1, y2 - 1); + if (m->ter(pos_x1, pos_y1) == t_floor) { + m->furn_set(pos_x1, pos_y1, f_chair); + } + } + } + + } + break; + case room_bedroom: + placed = "bedroom"; + chance = 78; + if (one_in(14)) { + m->place_items("homeguns", 58, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + } + if (one_in(10)) { + m->place_items("home_hw", 40, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + } + switch (rng(1, 5)) { + case 1: + m->furn_set(x1 + 1, y1 + 2, f_bed); + m->furn_set(x1 + 1, y1 + 3, f_bed); + break; + case 2: + m->furn_set(x1 + 2, y2 - 1, f_bed); + m->furn_set(x1 + 3, y2 - 1, f_bed); + break; + case 3: + m->furn_set(x2 - 1, y2 - 3, f_bed); + m->furn_set(x2 - 1, y2 - 2, f_bed); + break; + case 4: + m->furn_set(x2 - 3, y1 + 1, f_bed); + m->furn_set(x2 - 2, y1 + 1, f_bed); + break; + case 5: + m->furn_set(int((x1 + x2) / 2) , y2 - 1, f_bed); + m->furn_set(int((x1 + x2) / 2) + 1, y2 - 1, f_bed); + m->furn_set(int((x1 + x2) / 2) , y2 - 2, f_bed); + m->furn_set(int((x1 + x2) / 2) + 1, y2 - 2, f_bed); + break; + } + switch (rng(1, 4)) { + case 1: + m->furn_set(x1 + 2, y1 + 1, f_dresser); + m->place_items("dresser", 80, x1 + 2, y1 + 1, x1 + 2, y1 + 1, false, 0); + break; + case 2: + m->furn_set(x2 - 2, y2 - 1, f_dresser); + m->place_items("dresser", 80, x2 - 2, y2 - 1, x2 - 2, y2 - 1, false, 0); + break; + case 3: + rn = int((x1 + x2) / 2); + m->furn_set(rn, y1 + 1, f_dresser); + m->place_items("dresser", 80, rn, y1 + 1, rn, y1 + 1, false, 0); + break; + case 4: + rn = int((y1 + y2) / 2); + m->furn_set(x1 + 1, rn, f_dresser); + m->place_items("dresser", 80, x1 + 1, rn, x1 + 1, rn, false, 0); + break; + } + break; + case room_bathroom: + m->place_toilet(x2 - 1, y2 - 1); + m->place_items("harddrugs", 18, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); + m->place_items("cleaning", 48, x1 + 1, y1 + 1, x2 - 1, y2 - 2, false, 0); + placed = "softdrugs"; + chance = 72; + m->furn_set(x2 - 1, y2 - 2, f_bathtub); + if (!((m->ter(x2 - 3, y2 - 2) == t_wall_v) || (m->ter(x2 - 3, y2 - 2) == t_wall_h))) { + m->furn_set(x2 - 3, y2 - 2, f_sink); + } + break; + default: + break; + } + m->place_items(placed, chance, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); +} + +void science_room(map *m, int x1, int y1, int x2, int y2, int rotate) +{ + int height = y2 - y1; + int width = x2 - x1; + if (rotate % 2 == 1) { // Swap width & height if we're a lateral room + int tmp = height; + height = width; + width = tmp; + } + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + m->ter_set(i, j, t_rock_floor); + } + } + int area = height * width; + std::vector valid_rooms; + if (height < 5 && width < 5) { + valid_rooms.push_back(room_closet); + } + if (height > 6 && width > 3) { + valid_rooms.push_back(room_lobby); + } + if (height > 4 || width > 4) { + valid_rooms.push_back(room_chemistry); + } + if ((height > 7 || width > 7) && height > 2 && width > 2) { + valid_rooms.push_back(room_teleport); + } + if (height > 4 && width > 4) { + valid_rooms.push_back(room_goo); + } + if (height > 7 && width > 7) { + valid_rooms.push_back(room_bionics); + } + if (height > 7 && width > 7) { + valid_rooms.push_back(room_cloning); + } + if (area >= 9) { + valid_rooms.push_back(room_vivisect); + } + if (height > 5 && width > 4) { + valid_rooms.push_back(room_dorm); + } + if (width > 8) { + for (int i = 8; i < width; i += rng(1, 2)) { + valid_rooms.push_back(room_split); + } + } + + room_type chosen = valid_rooms[rng(0, valid_rooms.size() - 1)]; + int trapx = rng(x1 + 1, x2 - 1); + int trapy = rng(y1 + 1, y2 - 1); + switch (chosen) { + case room_closet: + m->place_items("cleaning", 80, x1, y1, x2, y2, false, 0); + break; + case room_lobby: + if (rotate % 2 == 0) { // Vertical + int desk = y1 + rng(int(height / 2) - int(height / 4), int(height / 2) + 1); + for (int x = x1 + int(width / 4); x < x2 - int(width / 4); x++) { + m->furn_set(x, desk, f_counter); + } + computer *tmpcomp = m->add_computer(x2 - int(width / 4), desk, + _("Log Console"), 3); + tmpcomp->add_option(_("View Research Logs"), COMPACT_RESEARCH, 0); + tmpcomp->add_option(_("Download Map Data"), COMPACT_MAPS, 0); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + tmpcomp->add_failure(COMPFAIL_DAMAGE); + m->add_spawn("mon_turret", 1, int((x1 + x2) / 2), desk); + } else { + int desk = x1 + rng(int(height / 2) - int(height / 4), int(height / 2) + 1); + for (int y = y1 + int(width / 4); y < y2 - int(width / 4); y++) { + m->furn_set(desk, y, f_counter); + } + computer *tmpcomp = m->add_computer(desk, y2 - int(width / 4), + _("Log Console"), 3); + tmpcomp->add_option(_("View Research Logs"), COMPACT_RESEARCH, 0); + tmpcomp->add_option(_("Download Map Data"), COMPACT_MAPS, 0); + tmpcomp->add_failure(COMPFAIL_SHUTDOWN); + tmpcomp->add_failure(COMPFAIL_ALARM); + tmpcomp->add_failure(COMPFAIL_DAMAGE); + m->add_spawn("mon_turret", 1, desk, int((y1 + y2) / 2)); + } + break; + case room_chemistry: + if (rotate % 2 == 0) { // Vertical + for (int x = x1; x <= x2; x++) { + if (x % 3 == 0) { + for (int y = y1 + 1; y <= y2 - 1; y++) { + m->furn_set(x, y, f_counter); + } + m->place_items("chem_lab", 70, x, y1 + 1, x, y2 - 1, false, 0); + } + } + } else { + for (int y = y1; y <= y2; y++) { + if (y % 3 == 0) { + for (int x = x1 + 1; x <= x2 - 1; x++) { + m->furn_set(x, y, f_counter); + } + m->place_items("chem_lab", 70, x1 + 1, y, x2 - 1, y, false, 0); + } + } + } + break; + case room_teleport: + m->furn_set(int((x1 + x2) / 2) , int((y1 + y2) / 2) , f_counter); + m->furn_set(int((x1 + x2) / 2) + 1, int((y1 + y2) / 2) , f_counter); + m->furn_set(int((x1 + x2) / 2) , int((y1 + y2) / 2) + 1, f_counter); + m->furn_set(int((x1 + x2) / 2) + 1, int((y1 + y2) / 2) + 1, f_counter); + m->add_trap(trapx, trapy, tr_telepad); + m->place_items("teleport", 70, int((x1 + x2) / 2), + int((y1 + y2) / 2), int((x1 + x2) / 2) + 1, + int((y1 + y2) / 2) + 1, false, 0); + break; + case room_goo: + do { + m->add_trap(trapx, trapy, tr_goo); + trapx = rng(x1 + 1, x2 - 1); + trapy = rng(y1 + 1, y2 - 1); + } while(!one_in(5)); + if (rotate == 0) { + m->remove_trap(x1, y2); + m->furn_set(x1, y2, f_fridge); + m->place_items("goo", 60, x1, y2, x1, y2, false, 0); + } else if (rotate == 1) { + m->remove_trap(x1, y1); + m->furn_set(x1, y1, f_fridge); + m->place_items("goo", 60, x1, y1, x1, y1, false, 0); + } else if (rotate == 2) { + m->remove_trap(x2, y1); + m->furn_set(x2, y1, f_fridge); + m->place_items("goo", 60, x2, y1, x2, y1, false, 0); + } else { + m->remove_trap(x2, y2); + m->furn_set(x2, y2, f_fridge); + m->place_items("goo", 60, x2, y2, x2, y2, false, 0); + } + break; + case room_cloning: + for (int x = x1 + 1; x <= x2 - 1; x++) { + for (int y = y1 + 1; y <= y2 - 1; y++) { + if (x % 3 == 0 && y % 3 == 0) { + m->ter_set(x, y, t_vat); + m->place_items("cloning_vat", 20, x, y, x, y, false, 0); + } + } + } + break; + case room_vivisect: + if (rotate == 0) { + for (int x = x1; x <= x2; x++) { + m->furn_set(x, y2 - 1, f_counter); + } + m->place_items("dissection", 80, x1, y2 - 1, x2, y2 - 1, false, 0); + } else if (rotate == 1) { + for (int y = y1; y <= y2; y++) { + m->furn_set(x1 + 1, y, f_counter); + } + m->place_items("dissection", 80, x1 + 1, y1, x1 + 1, y2, false, 0); + } else if (rotate == 2) { + for (int x = x1; x <= x2; x++) { + m->furn_set(x, y1 + 1, f_counter); + } + m->place_items("dissection", 80, x1, y1 + 1, x2, y1 + 1, false, 0); + } else if (rotate == 3) { + for (int y = y1; y <= y2; y++) { + m->furn_set(x2 - 1, y, f_counter); + } + m->place_items("dissection", 80, x2 - 1, y1, x2 - 1, y2, false, 0); + } + m->add_trap(int((x1 + x2) / 2), int((y1 + y2) / 2), tr_dissector); + break; + + case room_bionics: + if (rotate % 2 == 0) { + int biox = x1 + 2, bioy = int((y1 + y2) / 2); + mapf::formatted_set_simple(m, biox - 1, bioy - 1, + "\ +---\n\ +|c=\n\ +---\n", + mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_v), + mapf::basic_bind("c", f_counter)); + m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); + + biox = x2 - 2; + mapf::formatted_set_simple(m, biox - 1, bioy - 1, + "\ +---\n\ +=c|\n\ +---\n", + mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_v), + mapf::basic_bind("c", f_counter)); + m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); + + int compx = int((x1 + x2) / 2), compy = int((y1 + y2) / 2); + m->ter_set(compx, compy, t_console); + computer *tmpcomp = m->add_computer(compx, compy, _("Bionic access"), 2); + tmpcomp->add_option(_("Manifest"), COMPACT_LIST_BIONICS, 0); + tmpcomp->add_option(_("Open Chambers"), COMPACT_RELEASE, 3); + tmpcomp->add_failure(COMPFAIL_MANHACKS); + tmpcomp->add_failure(COMPFAIL_SECUBOTS); + } else { + int bioy = y1 + 2, biox = int((x1 + x2) / 2); + mapf::formatted_set_simple(m, biox - 1, bioy - 1, + "\ +|-|\n\ +|c|\n\ +|=|\n", + mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_h), + mapf::basic_bind("c", f_counter)); + m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); + + bioy = y2 - 2; + mapf::formatted_set_simple(m, biox - 1, bioy - 1, + "\ +|=|\n\ +|c|\n\ +|-|\n", + mapf::basic_bind("- | =", t_wall_h, t_wall_v, t_reinforced_glass_h), + mapf::basic_bind("c", f_counter)); + m->place_items("bionics_common", 70, biox, bioy, biox, bioy, false, 0); + + int compx = int((x1 + x2) / 2), compy = int((y1 + y2) / 2); + m->ter_set(compx, compy, t_console); + computer *tmpcomp = m->add_computer(compx, compy, _("Bionic access"), 2); + tmpcomp->add_option(_("Manifest"), COMPACT_LIST_BIONICS, 0); + tmpcomp->add_option(_("Open Chambers"), COMPACT_RELEASE, 3); + tmpcomp->add_failure(COMPFAIL_MANHACKS); + tmpcomp->add_failure(COMPFAIL_SECUBOTS); + } + break; + case room_dorm: + if (rotate % 2 == 0) { + for (int y = y1 + 1; y <= y2 - 1; y += 3) { + m->furn_set(x1 , y, f_bed); + m->furn_set(x1 + 1, y, f_bed); + m->furn_set(x2 , y, f_bed); + m->furn_set(x2 - 1, y, f_bed); + m->furn_set(x1, y + 1, f_dresser); + m->furn_set(x2, y + 1, f_dresser); + m->place_items("dresser", 70, x1, y + 1, x1, y + 1, false, 0); + m->place_items("dresser", 70, x2, y + 1, x2, y + 1, false, 0); + } + } else if (rotate % 2 == 1) { + for (int x = x1 + 1; x <= x2 - 1; x += 3) { + m->furn_set(x, y1 , f_bed); + m->furn_set(x, y1 + 1, f_bed); + m->furn_set(x, y2 , f_bed); + m->furn_set(x, y2 - 1, f_bed); + m->furn_set(x + 1, y1, f_dresser); + m->furn_set(x + 1, y2, f_dresser); + m->place_items("dresser", 70, x + 1, y1, x + 1, y1, false, 0); + m->place_items("dresser", 70, x + 1, y2, x + 1, y2, false, 0); + } + } + m->place_items("lab_dorm", 84, x1, y1, x2, y2, false, 0); + break; + case room_split: + if (rotate % 2 == 0) { + int w1 = int((x1 + x2) / 2) - 2, w2 = int((x1 + x2) / 2) + 2; + for (int y = y1; y <= y2; y++) { + m->ter_set(w1, y, t_wall_v); + m->ter_set(w2, y, t_wall_v); + } + m->ter_set(w1, int((y1 + y2) / 2), t_door_metal_c); + m->ter_set(w2, int((y1 + y2) / 2), t_door_metal_c); + science_room(m, x1, y1, w1 - 1, y2, 1); + science_room(m, w2 + 1, y1, x2, y2, 3); + } else { + int w1 = int((y1 + y2) / 2) - 2, w2 = int((y1 + y2) / 2) + 2; + for (int x = x1; x <= x2; x++) { + m->ter_set(x, w1, t_wall_h); + m->ter_set(x, w2, t_wall_h); + } + m->ter_set(int((x1 + x2) / 2), w1, t_door_metal_c); + m->ter_set(int((x1 + x2) / 2), w2, t_door_metal_c); + science_room(m, x1, y1, x2, w1 - 1, 2); + science_room(m, x1, w2 + 1, x2, y2, 0); + } + break; + default: + break; + } +} + +void set_science_room(map *m, int x1, int y1, bool faces_right, int turn) +{ + // TODO: More types! + int type = rng(0, 4); + int x2 = x1 + 7; + int y2 = y1 + 4; + switch (type) { + case 0: // Empty! + return; + case 1: // Chemistry. + // #######. + // #....... + // #....... + // #....... + // #######. + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + if ((i == x1 || j == y1 || j == y2) && i != x1) { + m->set(i, j, t_floor, f_counter); + } + } + } + m->place_items("chem_lab", 85, x1 + 1, y1, x2 - 1, y1, false, 0); + m->place_items("chem_lab", 85, x1 + 1, y2, x2 - 1, y2, false, 0); + m->place_items("chem_lab", 85, x1, y1 + 1, x1, y2 - 1, false, 0); + break; + + case 2: // Hydroponics. + // #....... + // #.~~~~~. + // #....... + // #.~~~~~. + // #....... + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + if (i == x1) { + m->set(i, j, t_floor, f_counter); + } else if (i > x1 + 1 && i < x2 && (j == y1 + 1 || j == y2 - 1)) { + m->ter_set(i, j, t_water_sh); + } + } + } + m->place_items("chem_lab", 80, x1, y1, x1, y2, false, turn - 50); + m->place_items("hydro", 92, x1 + 1, y1 + 1, x2 - 1, y1 + 1, false, turn); + m->place_items("hydro", 92, x1 + 1, y2 - 1, x2 - 1, y2 - 1, false, turn); + break; + + case 3: // Electronics. + // #######. + // #....... + // #....... + // #....... + // #######. + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + if ((i == x1 || j == y1 || j == y2) && i != x1) { + m->set(i, j, t_floor, f_counter); + } + } + } + m->place_items("electronics", 85, x1 + 1, y1, x2 - 1, y1, false, turn - 50); + m->place_items("electronics", 85, x1 + 1, y2, x2 - 1, y2, false, turn - 50); + m->place_items("electronics", 85, x1, y1 + 1, x1, y2 - 1, false, turn - 50); + break; + + case 4: // Monster research. + // .|.####. + // -|...... + // .|...... + // -|...... + // .|.####. + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + if (i == x1 + 1) { + m->ter_set(i, j, t_wall_glass_v); + } else if (i == x1 && (j == y1 + 1 || j == y2 - 1)) { + m->ter_set(i, j, t_wall_glass_h); + } else if ((j == y1 || j == y2) && i >= x1 + 3 && i <= x2 - 1) { + m->set(i, j, t_floor, f_counter); + } + } + } + // TODO: Place a monster in the sealed areas. + m->place_items("monparts", 70, x1 + 3, y1, 2 - 1, y1, false, turn - 100); + m->place_items("monparts", 70, x1 + 3, y2, 2 - 1, y2, false, turn - 100); + break; + } + + if (!faces_right) { // Flip it. + ter_id rotated[SEEX * 2][SEEY * 2]; + std::vector itrot[SEEX * 2][SEEY * 2]; + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + rotated[i][j] = m->ter(i, j); + itrot[i][j] = m->i_at(i, j); + } + } + for (int i = x1; i <= x2; i++) { + for (int j = y1; j <= y2; j++) { + m->ter_set(i, j, rotated[x2 - (i - x1)][j]); + m->i_at(i, j) = itrot[x2 - (i - x1)][j]; + } + } + } +} + +void silo_rooms(map *m) +{ + std::vector rooms; + std::vector room_sizes; + bool okay = true; + do { + int x, y, height, width; + if (one_in(2)) { // True = top/bottom, False = left/right + x = rng(0, SEEX * 2 - 6); + y = rng(0, 4); + if (one_in(2)) { + y = SEEY * 2 - 2 - y; // Bottom of the screen, not the top + } + width = rng(2, 5); + height = 2; + if (x + width >= SEEX * 2 - 1) { + width = SEEX * 2 - 2 - x; // Make sure our room isn't too wide + } + } else { + x = rng(0, 4); + y = rng(0, SEEY * 2 - 6); + if (one_in(2)) { + x = SEEX * 2 - 3 - x; // Right side of the screen, not the left + } + width = 2; + height = rng(2, 5); + if (y + height >= SEEY * 2 - 1) { + height = SEEY * 2 - 2 - y; // Make sure our room isn't too tall + } + } + if (!rooms.empty() && // We need at least one room! + (m->ter(x, y) != t_rock || m->ter(x + width, y + height) != t_rock)) { + okay = false; + } else { + rooms.push_back(point(x, y)); + room_sizes.push_back(point(width, height)); + for (int i = x; i <= x + width; i++) { + for (int j = y; j <= y + height; j++) { + if (m->ter(i, j) == t_rock) { + m->ter_set(i, j, t_floor); + } + } + } + items_location used1 = "none", used2 = "none"; + switch (rng(1, 14)) { // What type of items go here? + case 1: + case 2: + used1 = "cannedfood"; + used2 = "fridge"; + break; + case 3: + case 4: + used1 = "tools"; + break; + case 5: + case 6: + used1 = "allguns"; + used2 = "ammo"; + break; + case 7: + used1 = "allclothes"; + break; + case 8: + used1 = "manuals"; + break; + case 9: + case 10: + case 11: + used1 = "electronics"; + break; + case 12: + used1 = "survival_tools"; + break; + case 13: + case 14: + used1 = "radio"; + break; + } + if (used1 != "none") { + m->place_items(used1, 78, x, y, x + width, y + height, false, 0); + } + if (used2 != "none") { + m->place_items(used2, 64, x, y, x + width, y + height, false, 0); + } + } + } while (okay); + + m->ter_set(rooms[0].x, rooms[0].y, t_stairs_up); + int down_room = rng(0, rooms.size() - 1); + point dp = rooms[down_room], ds = room_sizes[down_room]; + m->ter_set(dp.x + ds.x, dp.y + ds.y, t_stairs_down); + rooms.push_back(point(SEEX, SEEY)); // So the center circle gets connected + room_sizes.push_back(point(5, 5)); + + while (rooms.size() > 1) { + int best_dist = 999, closest = 0; + for (int i = 1; i < rooms.size(); i++) { + int dist = trig_dist(rooms[0].x, rooms[0].y, rooms[i].x, rooms[i].y); + if (dist < best_dist) { + best_dist = dist; + closest = i; + } + } + // We chose the closest room; now draw a corridor there + point origin = rooms[0], origsize = room_sizes[0], dest = rooms[closest]; + int x = origin.x + origsize.x, y = origin.y + origsize.y; + bool x_first = (abs(origin.x - dest.x) > abs(origin.y - dest.y)); + while (x != dest.x || y != dest.y) { + if (m->ter(x, y) == t_rock) { + m->ter_set(x, y, t_floor); + } + if ((x_first && x != dest.x) || (!x_first && y == dest.y)) { + if (dest.x < x) { + x--; + } else { + x++; + } + } else { + if (dest.y < y) { + y--; + } else { + y++; + } + } + } + rooms.erase(rooms.begin()); + room_sizes.erase(room_sizes.begin()); + } +} + +void build_mine_room(map *m, room_type type, int x1, int y1, int x2, int y2) +{ + direction door_side; + std::vector possibilities; + int midx = int( (x1 + x2) / 2), midy = int( (y1 + y2) / 2); + if (x2 < SEEX) { + possibilities.push_back(EAST); + } + if (x1 > SEEX + 1) { + possibilities.push_back(WEST); + } + if (y1 > SEEY + 1) { + possibilities.push_back(NORTH); + } + if (y2 < SEEY) { + possibilities.push_back(SOUTH); + } + + if (possibilities.empty()) { // We're in the middle of the map! + if (midx <= SEEX) { + possibilities.push_back(EAST); + } else { + possibilities.push_back(WEST); + } + if (midy <= SEEY) { + possibilities.push_back(SOUTH); + } else { + possibilities.push_back(NORTH); + } + } + + door_side = possibilities[rng(0, possibilities.size() - 1)]; + point door_point; + switch (door_side) { + case NORTH: + door_point.x = midx; + door_point.y = y1; + break; + case EAST: + door_point.x = x2; + door_point.y = midy; + break; + case SOUTH: + door_point.x = midx; + door_point.y = y2; + break; + case WEST: + door_point.x = x1; + door_point.y = midy; + break; + default: + break; + } + square(m, t_floor, x1, y1, x2, y2); + line(m, t_wall_h, x1, y1, x2, y1); + line(m, t_wall_h, x1, y2, x2, y2); + line(m, t_wall_v, x1, y1 + 1, x1, y2 - 1); + line(m, t_wall_v, x2, y1 + 1, x2, y2 - 1); + // Main build switch! + switch (type) { + case room_mine_shaft: { + m->ter_set(x1 + 1, y1 + 1, t_console); + line(m, t_wall_h, x2 - 2, y1 + 2, x2 - 1, y1 + 2); + m->ter_set(x2 - 2, y1 + 1, t_elevator); + m->ter_set(x2 - 1, y1 + 1, t_elevator_control_off); + computer *tmpcomp = m->add_computer(x1 + 1, y1 + 1, _("NEPowerOS"), 2); + tmpcomp->add_option(_("Divert power to elevator"), COMPACT_ELEVATOR_ON, 0); + tmpcomp->add_failure(COMPFAIL_ALARM); + } + break; + + case room_mine_office: + line_furn(m, f_counter, midx, y1 + 2, midx, y2 - 2); + line(m, t_window, midx - 1, y1, midx + 1, y1); + line(m, t_window, midx - 1, y2, midx + 1, y2); + line(m, t_window, x1, midy - 1, x1, midy + 1); + line(m, t_window, x2, midy - 1, x2, midy + 1); + m->place_items("office", 80, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + break; + + case room_mine_storage: + m->place_items("mine_storage", 85, x1 + 2, y1 + 2, x2 - 2, y2 - 2, false, 0); + break; + + case room_mine_fuel: { + int spacing = rng(2, 4); + if (door_side == NORTH || door_side == SOUTH) { + int y = (door_side == NORTH ? y1 + 2 : y2 - 2); + for (int x = x1 + 1; x <= x2 - 1; x += spacing) { + m->place_gas_pump(x, y, rng(10000, 50000)); + } + } else { + int x = (door_side == EAST ? x2 - 2 : x1 + 2); + for (int y = y1 + 1; y <= y2 - 1; y += spacing) { + m->place_gas_pump(x, y, rng(10000, 50000)); + } + } + } + break; + + case room_mine_housing: + if (door_side == NORTH || door_side == SOUTH) { + for (int y = y1 + 2; y <= y2 - 2; y += 2) { + m->ter_set(x1 , y, t_window); + m->furn_set(x1 + 1, y, f_bed); + m->furn_set(x1 + 2, y, f_bed); + m->ter_set(x2 , y, t_window); + m->furn_set(x2 - 1, y, f_bed); + m->furn_set(x2 - 2, y, f_bed); + m->furn_set(x1 + 1, y + 1, f_dresser); + m->place_items("dresser", 78, x1 + 1, y + 1, x1 + 1, y + 1, false, 0); + m->furn_set(x2 - 1, y + 1, f_dresser); + m->place_items("dresser", 78, x2 - 1, y + 1, x2 - 1, y + 1, false, 0); + } + } else { + for (int x = x1 + 2; x <= x2 - 2; x += 2) { + m->ter_set(x, y1 , t_window); + m->furn_set(x, y1 + 1, f_bed); + m->furn_set(x, y1 + 2, f_bed); + m->ter_set(x, y2 , t_window); + m->furn_set(x, y2 - 1, f_bed); + m->furn_set(x, y2 - 2, f_bed); + m->furn_set(x + 1, y1 + 1, f_dresser); + m->place_items("dresser", 78, x + 1, y1 + 1, x + 1, y1 + 1, false, 0); + m->furn_set(x + 1, y2 - 1, f_dresser); + m->place_items("dresser", 78, x + 1, y2 - 1, x + 1, y2 - 1, false, 0); + } + } + m->place_items("bedroom", 65, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + break; + } + + if (type == room_mine_fuel) { // Fuel stations are open on one side + switch (door_side) { + case NORTH: + line(m, t_floor, x1, y1 , x2, y1 ); + break; + case EAST: + line(m, t_floor, x2, y1 + 1, x2, y2 - 1); + break; + case SOUTH: + line(m, t_floor, x1, y2 , x2, y2 ); + break; + case WEST: + line(m, t_floor, x1, y1 + 1, x1, y2 - 1); + break; + default: + break; + } + } else { + if (type == room_mine_storage) { // Storage has a locked door + m->ter_set(door_point.x, door_point.y, t_door_locked); + } else { + m->ter_set(door_point.x, door_point.y, t_door_c); + } + } +} + +map_extra random_map_extra(map_extras embellishments) +{ + int pick = 0; + // Set pick to the total of all the chances for map extras + for (int i = 0; i < num_map_extras; i++) { + if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] || mfb(i) & classic_extras) { + pick += embellishments.chances[i]; + } + } + // Set pick to a number between 0 and the total + pick = rng(0, pick - 1); + int choice = -1; + while (pick >= 0) { + choice++; + if(!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] || mfb(choice) & classic_extras) { + pick -= embellishments.chances[choice]; + } + } + return map_extra(choice); +} + +room_type pick_mansion_room(int x1, int y1, int x2, int y2) +{ + int dx = abs(x1 - x2), dy = abs(y1 - y2), area = dx * dy; + int shortest = (dx < dy ? dx : dy), longest = (dx > dy ? dx : dy); + std::vector valid; + if (shortest >= 12) { + valid.push_back(room_mansion_courtyard); + } + if (shortest >= 7 && area >= 64 && area <= 100) { + valid.push_back(room_mansion_bedroom); + } + if (shortest >= 9) { + valid.push_back(room_mansion_library); + } + if (shortest >= 6 && longest <= 10) { + valid.push_back(room_mansion_kitchen); + } + if (longest >= 7 && shortest >= 5) { + valid.push_back(room_mansion_dining); + } + if (shortest >= 6 && longest <= 10) { + valid.push_back(room_mansion_game); + } + if (shortest >= 6 && longest <= 10) { + valid.push_back(room_mansion_study); + } + if (shortest >= 10) { + valid.push_back(room_mansion_pool); + } + if (longest <= 6 || shortest <= 4) { + valid.push_back(room_mansion_bathroom); + } + if (longest >= 8 && shortest <= 6) { + valid.push_back(room_mansion_gallery); + } + + if (valid.empty()) { + debugmsg("x: %d - %d, dx: %d\n\ + y: %d - %d, dy: %d", x1, x2, dx, + y1, y2, dy); + return room_null; + } + + return valid[ rng(0, valid.size() - 1) ]; +} + +void build_mansion_room(map *m, room_type type, int x1, int y1, int x2, int y2) +{ + int dx = abs(x1 - x2), dy = abs(y1 - y2); + int cx_low = (x1 + x2) / 2, cx_hi = (x1 + x2 + 1) / 2, + cy_low = (y1 + y2) / 2, cy_hi = (y1 + y2 + 1) / 2; + + /* + debugmsg("\ + x: %d - %d, dx: %d cx: %d/%d\n\ + x: %d - %d, dx: %d cx: %d/%d", x1, x2, dx, cx_low, cx_hi, + y1, y2, dy, cy_low, cy_hi); + */ + bool walled_south = (y2 >= SEEY * 2 - 2); + + switch (type) { + + case room_mansion_courtyard: + square(m, &grass_or_dirt, x1, y1, x2, y2); + if (one_in(4)) { // Tree grid + for (int x = 1; x <= dx / 2; x += 4) { + for (int y = 1; y <= dx / 2; y += 4) { + m->ter_set(x1 + x, y1 + y, t_tree); + m->ter_set(x2 - x, y2 - y, t_tree); + } + } + } + if (one_in(3)) { // shrub-lined + for (int i = x1; i <= x2; i++) { + if (m->ter(i, y2 + 1) != t_door_c) { + m->ter_set(i, y2, t_shrub); + } + } + if (walled_south && x1 <= SEEX && SEEX <= x2) { + m->ter_set(SEEX - 1, y2, grass_or_dirt()); + m->ter_set(SEEX, y2, grass_or_dirt()); + } + } + break; + + case room_mansion_entry: + if (!one_in(3)) { // Columns + for (int y = y1 + 2; y <= y2; y += 3) { + m->ter_set(cx_low - 3, y, t_column); + m->ter_set(cx_low + 3, y, t_column); + } + } + if (one_in(6)) { // Suits of armor + int start = y1 + rng(2, 4), end = y2 - rng(0, 4), step = rng(3, 6); + for (int y = start; y <= end; y += step) { + m->spawn_item(x1 + 1, y, "helmet_plate"); + m->spawn_item(x1 + 1, y, "armor_plate"); + if (one_in(2)) { + m->spawn_item(x1 + 1, y, "pike"); + } else if (one_in(3)) { + m->spawn_item(x1 + 1, y, "broadsword"); + } else if (one_in(6)) { + m->spawn_item(x1 + 1, y, "mace"); + } else if (one_in(6)) { + m->spawn_item(x1 + 1, y, "morningstar"); + } + + m->spawn_item(x2 - 1, y, "helmet_plate"); + m->spawn_item(x2 - 1, y, "armor_plate"); + if (one_in(2)) { + m->spawn_item(x2 - 1, y, "pike"); + } else if (one_in(3)) { + m->spawn_item(x2 - 1, y, "broadsword"); + } else if (one_in(6)) { + m->spawn_item(x2 - 1, y, "mace"); + } else if (one_in(6)) { + m->spawn_item(x2 - 1, y, "morningstar"); + } + } + } + break; + + case room_mansion_bedroom: + if (dx > dy || (dx == dy && one_in(2))) { // horizontal + if (one_in(2)) { // bed on left + square_furn(m, f_bed, x1 + 1, cy_low - 1, x1 + 3, cy_low + 1); + } else { // bed on right + square_furn(m, f_bed, x2 - 3, cy_low - 1, x2 - 1, cy_low + 1); + } + m->furn_set(cx_hi - 2, y1, f_bookcase); + m->furn_set(cx_hi - 1, y1, f_counter); + m->ter_set(cx_hi , y1, t_console_broken); + m->furn_set(cx_hi + 1, y1, f_counter); + m->furn_set(cx_hi + 2, y1, f_bookcase); + m->place_items("bedroom", 60, cx_hi - 2, y1, cx_hi + 2, y1, false, 0); + + m->furn_set(cx_hi - 2, y2, f_dresser); + m->furn_set(cx_hi - 1, y2, f_dresser); + m->place_items("dresser", 80, cx_hi - 2, y2, cx_hi - 1, y2, false, 0); + if (one_in(10)) { + m->place_items("homeguns", 58, cx_hi - 2, y2, cx_hi - 1, y2, false, 0); + } + + m->furn_set(cx_hi + 1, y2, f_desk); + m->place_items("office", 50, cx_hi + 1, y2, cx_hi + 1, y2, false, 0); + + m->furn_set(cx_hi + 2, y2, f_chair); + + m->furn_set(x1, y1, f_indoor_plant); + m->furn_set(x1, y2, f_indoor_plant); + + } else { // vertical + if (one_in(2)) { // bed at top + square_furn(m, f_bed, cx_low - 1, y1 + 1, cx_low + 1, y1 + 3); + } else { // bed at bottom + square_furn(m, f_bed, cx_low - 1, y2 - 3, cx_low + 1, y2 - 1); + } + m->furn_set(x1, cy_hi - 2, f_bookcase); + m->furn_set(x1, cy_hi - 1, f_counter); + m->ter_set(x1, cy_hi, t_console_broken); + m->furn_set(x1, cy_hi + 1, f_counter); + m->furn_set(x1, cy_hi + 2, f_bookcase); + m->place_items("bedroom", 80, x1, cy_hi - 2, x1, cy_hi + 2, false, 0); + + m->furn_set(x2, cy_hi - 2, f_dresser); + m->furn_set(x2, cy_hi - 1, f_dresser); + m->place_items("dresser", 80, x2, cy_hi - 2, x2, cy_hi - 1, false, 0); + if (one_in(10)) { + m->place_items("homeguns", 58, x2, cy_hi - 2, x2, cy_hi - 1, false, 0); + } + + m->furn_set(x2, cy_hi + 1, f_desk); + m->place_items("office", 50, x2, cy_hi + 1, x2, cy_hi + 1, false, 0); + + m->furn_set(x2, cy_hi + 2, f_chair); + + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + } + break; + + case room_mansion_library: + if (dx < dy || (dx == dy && one_in(2))) { // vertically-aligned bookshelves + for (int x = x1 + 1; x <= cx_low - 2; x += 3) { + for (int y = y1 + 1; y <= y2 - 3; y += 4) { + square_furn(m, f_bookcase, x, y, x + 1, y + 2); + m->place_items("novels", 85, x, y, x + 1, y + 2, false, 0); + m->place_items("manuals", 62, x, y, x + 1, y + 2, false, 0); + m->place_items("textbooks", 40, x, y, x + 1, y + 2, false, 0); + } + } + for (int x = x2 - 1; x >= cx_low + 2; x -= 3) { + for (int y = y1 + 1; y <= y2 - 3; y += 4) { + square_furn(m, f_bookcase, x - 1, y, x, y + 2); + m->place_items("novels", 85, x - 1, y, x, y + 2, false, 0); + m->place_items("manuals", 62, x - 1, y, x, y + 2, false, 0); + m->place_items("textbooks", 40, x - 1, y, x, y + 2, false, 0); + } + } + } else { // horizontally-aligned bookshelves + for (int y = y1 + 1; y <= cy_low - 2; y += 3) { + for (int x = x1 + 1; x <= x2 - 3; x += 4) { + square_furn(m, f_bookcase, x, y, x + 2, y + 1); + m->place_items("novels", 85, x, y, x + 2, y + 1, false, 0); + m->place_items("manuals", 62, x, y, x + 2, y + 1, false, 0); + m->place_items("textbooks", 40, x, y, x + 2, y + 1, false, 0); + } + } + for (int y = y2 - 1; y >= cy_low + 2; y -= 3) { + for (int x = x1 + 1; x <= x2 - 3; x += 4) { + square_furn(m, f_bookcase, x, y - 1, x + 2, y); + m->place_items("novels", 85, x, y - 1, x + 2, y, false, 0); + m->place_items("manuals", 62, x, y - 1, x + 2, y, false, 0); + m->place_items("textbooks", 40, x, y - 1, x + 2, y, false, 0); + } + } + } + break; + + case room_mansion_kitchen: + line_furn(m, f_counter, cx_hi - 2, y1 + 1, cx_hi - 2, y2 - 1); + line_furn(m, f_counter, cx_hi, y1 + 1, cx_hi, y2 - 1); + m->place_items("kitchen", 60, cx_hi - 2, y1 + 1, cx_hi, y2 - 1, false, 0); + + line_furn(m, f_fridge, cx_hi + 2, y1 + 1, cx_hi + 2, cy_hi - 1); + m->place_items("fridge", 80, cx_hi + 2, y1 + 1, cx_hi + 2, cy_hi - 1, false, 0); + + m->furn_set(cx_hi + 2, cy_hi, f_oven); + + line_furn(m, f_rack, cx_hi + 2, cy_hi + 1, cx_hi + 2, y2 - 1); + m->place_items("cannedfood", 70, cx_hi + 2, cy_hi + 1, cx_hi + 2, y2 - 1, false, 0); + m->place_items("pasta", 70, cx_hi + 2, cy_hi + 1, cx_hi + 2, y2 - 1, false, 0); + break; + + case room_mansion_dining: + if (dx < dy || (dx == dy && one_in(2))) { // vertically-aligned table + line_furn(m, f_table, cx_low, y1 + 2, cx_low, y2 - 2); + line_furn(m, f_bench, cx_low - 1, y1 + 2, cx_low - 1, y2 - 2); + line_furn(m, f_bench, cx_low + 1, y1 + 2, cx_low + 1, y2 - 2); + m->place_items("dining", 78, cx_low, y1 + 2, cx_low, y2 - 2, false, 0); + } else { // horizontally-aligned table + line_furn(m, f_table, x1 + 2, cy_low, x2 - 2, cy_low); + line_furn(m, f_bench, x1 + 2, cy_low - 1, x2 - 2, cy_low - 1); + line_furn(m, f_bench, x1 + 2, cy_low + 1, x2 - 2, cy_low + 1); + m->place_items("dining", 78, x1 + 2, cy_low, x2 - 2, cy_low, false, 0); + } + m->furn_set(x1, y1, f_indoor_plant); + m->furn_set(x2, y1, f_indoor_plant); + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + break; + + case room_mansion_game: + if (dx < dy || one_in(2)) { // vertically-aligned table + square_furn(m, f_pool_table, cx_low, cy_low - 1, cx_low + 1, cy_low + 1); + m->place_items("pool_table", 80, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, + false, 0); + } else { // horizontally-aligned table + square_furn(m, f_pool_table, cx_low - 1, cy_low, cx_low + 1, cy_low + 1); + m->place_items("pool_table", 80, cx_low - 1, cy_low, cx_low + 1, cy_low + 1, + false, 0); + } + + if (one_in(2)) { + line_furn(m, f_sofa, x1 + 1, cy_low - 1, x1 + 1, cy_low + 1); + m->furn_set(x1 + 1, cy_low - 2, f_table); + m->place_items("coffee_shop", 70, x1 + 1, cy_low + 2, x1 + 1, cy_low + 2, false, 0); + m->place_items("magazines", 50, x1 + 1, cy_low + 2, x1 + 1, cy_low + 2, false, 0); + m->furn_set(x1 + 1, cy_low + 2, f_table); + m->place_items("coffee_shop", 70, x1 + 1, cy_low - 2, x1 + 1, cy_low - 2, false, 0); + m->place_items("magazines", 70, x1 + 1, cy_low - 2, x1 + 1, cy_low - 2, false, 0); + } else { + line_furn(m, f_sofa, cx_low - 1, y1 + 1, cx_low + 1, y1 + 1); + m->furn_set(cx_low - 2, y1 + 1, f_table); + m->place_items("coffee_shop", 70, cx_low - 2, y1 + 1, cx_low - 2, y1 + 1, false, 0); + m->place_items("magazines", 50, cx_low - 2, y1 + 1, cx_low - 2, y1 + 1, false, 0); + m->furn_set(cx_low + 2, y1 + 1, f_table); + m->place_items("coffee_shop", 70, cx_low + 2, y1 + 1, cx_low + 2, y1 + 1, false, 0); + m->place_items("magazines", 70, cx_low + 2, y1 + 1, cx_low + 2, y1 + 1, false, 0); + } + m->furn_set(x1, y1, f_indoor_plant); + m->furn_set(x2, y1, f_indoor_plant); + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + break; + + case room_mansion_pool: + square(m, t_water_pool, x1 + 3, y1 + 3, x2 - 3, y2 - 3); + + m->furn_set(rng(x1 + 1, cx_hi - 2), y1 + 2, f_chair); + m->furn_set(cx_hi, y1 + 2, f_table); + m->furn_set(rng(x1 + 1, cx_hi + 2), y1 + 2, f_chair); + m->place_items("magazines", 60, cx_hi, y1 + 2, cx_hi, y1 + 2, false, 0); + + m->furn_set(x1, y1, f_indoor_plant); + m->furn_set(x2, y1, f_indoor_plant); + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + break; + + case room_mansion_study: + int study_y; + if (one_in(2)) { + study_y = y1; + } else { + study_y = y2; + } + for (int x = x1 + 1; x <= x2 - 1; x++) { + if (x % 2 == 0) { + m->furn_set(x, study_y, f_rack); + if (one_in(3)) { + m->place_items("alcohol", 60, x, study_y, x, study_y, false, 0); + } else if (one_in(3)) { + m->place_items("church", 60, x, study_y, x, study_y, false, 0); + } else { + m->place_items("art", 60, x, study_y, x, study_y, false, 0); + } + } + } + + square_furn(m, f_table, cx_low, cy_low - 1, cx_low + 1, cy_low + 1); + m->place_items("novels", 50, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, + false, 0); + m->place_items("magazines", 60, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, + false, 0); + m->place_items("office", 60, cx_low, cy_low - 1, cx_low + 1, cy_low + 1, + false, 0); + if (one_in(2)) { + m->furn_set(cx_low - 1, rng(cy_low - 1, cy_low + 1), f_chair); + } else { + m->furn_set(cx_low + 2, rng(cy_low - 1, cy_low + 1), f_chair); + } + m->furn_set(x1, y1, f_indoor_plant); + m->furn_set(x2, y1, f_indoor_plant); + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + break; + + case room_mansion_bathroom: + m->place_toilet(rng(x1 + 1, cx_hi - 1), rng(y1 + 1, cy_hi - 1)); + m->furn_set( rng(cx_hi + 1, x2 - 1), rng(y1 + 1, cy_hi - 1) , f_bathtub); + m->furn_set( rng(x1 + 1, cx_hi - 1), rng(cy_hi + 1, y2 - 1) , f_sink); + + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + + m->place_items("harddrugs", 20, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + m->place_items("softdrugs", 72, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + m->place_items("cleaning", 48, x1 + 1, y1 + 1, x2 - 1, y2 - 1, false, 0); + break; + + case room_mansion_gallery: + + m->furn_set(x2 + 2, y2 + 2, f_rack); + m->place_items("medieval", 40, x2 + 2, y2 + 2, x2 + 2, y2 + 2, false, 0); + m->furn_set(x2 - 2, y2 + 2, f_rack); + m->place_items("art", 70, x2 - 2, y2 + 2, x2 - 2, y2 + 2, false, 0); + m->furn_set(x2 + 2, y2 - 2, f_rack); + m->place_items("art", 70, x2 + 2, y2 - 2, x2 + 2, y2 - 2, false, 0); + m->furn_set(x2 - 2, y2 - 2, f_rack); + m->place_items("alcohol", 80, x2 - 2, y2 - 2, x2 - 2, y2 - 2, false, 0); + + square_furn(m, f_table, cx_low - 1, cy_low - 1, cx_low + 1, cy_low + 1); + m->furn_set(x1, y1, f_indoor_plant); + m->furn_set(x2, y1, f_indoor_plant); + m->furn_set(x1, y2, f_indoor_plant); + m->furn_set(x2, y2, f_indoor_plant); + + break; + default: + break; + } +} + +void mansion_room(map *m, int x1, int y1, int x2, int y2) +{ + room_type type = pick_mansion_room(x1, y1, x2, y2); + build_mansion_room(m, type, x1, y1, x2, y2); +} + +void map::add_extra(map_extra type, game *g) +{ + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), g->turn); + + switch (type) { + + case mx_null: + debugmsg("Tried to generate null map extra."); + break; + + case mx_helicopter: { + int cx = rng(4, SEEX * 2 - 5), cy = rng(4, SEEY * 2 - 5); + for (int x = 0; x < SEEX * 2; x++) { + for (int y = 0; y < SEEY * 2; y++) { + if (x >= cx - 4 && x <= cx + 4 && y >= cy - 4 && y <= cy + 4) { + if (!one_in(5)) { + ter_set(x, y, t_wreckage); + } else if (has_flag("BASHABLE", x, y)) { + std::string junk; + bash(x, y, 500, junk); // Smash the fuck out of it + bash(x, y, 500, junk); // Smash the fuck out of it some more + } + } else if (one_in(10)) { // 1 in 10 chance of being wreckage anyway + ter_set(x, y, t_wreckage); + } + } + } + + spawn_item(rng(5, 18), rng(5, 18), "black_box"); + place_items("helicopter", 90, cx - 4, cy - 4, cx + 4, cy + 4, true, 0); + place_items("helicopter", 20, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + items_location extra_items = "helicopter"; + switch (rng(1, 4)) { + case 1: + extra_items = "military"; + break; + case 2: + extra_items = "science"; + break; + case 3: + extra_items = "allguns"; + break; + case 4: + extra_items = "bionics"; + break; + } + place_spawns(g, "GROUP_MAYBE_MIL", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1f);//0.1 = 1-5 + place_items(extra_items, 70, cx - 4, cy - 4, cx + 4, cy + 4, true, 0); + } + break; + + case mx_military: { + int num_bodies = dice(2, 6); + for (int i = 0; i < num_bodies; i++) { + int x, y, tries = 0;; + do { // Loop until we find a valid spot to dump a body, or we give up + x = rng(0, SEEX * 2 - 1); + y = rng(0, SEEY * 2 - 1); + tries++; + } while (tries < 10 && move_cost(x, y) == 0); + + if (tries < 10) { // We found a valid spot! + add_item(x, y, body); + place_items("military", 86, x, y, x, y, true, 0); + if (one_in(8)) { + spawn_item(x, y, "id_military"); + } + } + } + place_spawns(g, "GROUP_MAYBE_MIL", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, 0.1f);//0.1 = 1-5 + place_items("rare", 25, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + } + break; + + case mx_science: { + int num_bodies = dice(2, 5); + for (int i = 0; i < num_bodies; i++) { + int x, y, tries = 0; + do { // Loop until we find a valid spot to dump a body, or we give up + x = rng(0, SEEX * 2 - 1); + y = rng(0, SEEY * 2 - 1); + tries++; + } while (tries < 10 && move_cost(x, y) == 0); + + if (tries < 10) { // We found a valid spot! + add_item(x, y, body); + spawn_item(x, y, "id_science"); + place_items("science", 84, x, y, x, y, true, 0); + } + } + place_items("rare", 45, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, 0); + } + break; + + case mx_stash: { + int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); + if (move_cost(x, y) != 0) { + ter_set(x, y, t_dirt); + } + + int size = 0; + items_location stash; + switch (rng(1, 6)) { // What kind of stash? + case 1: + stash = "stash_food"; + size = 90; + break; + case 2: + stash = "stash_ammo"; + size = 80; + break; + case 3: + stash = "rare"; + size = 70; + break; + case 4: + stash = "stash_wood"; + size = 90; + break; + case 5: + stash = "stash_drugs"; + size = 85; + break; + case 6: + stash = "trash"; + size = 92; + break; + } + + if (move_cost(x, y) == 0) { + ter_set(x, y, t_dirt); + } + place_items(stash, size, x, y, x, y, true, 0); + + // Now add traps around that stash + for (int i = x - 4; i <= x + 4; i++) { + for (int j = y - 4; j <= y + 4; j++) { + if (i >= 0 && j >= 0 && i < SEEX * 2 && j < SEEY * 2 && one_in(4)) { + trap_id placed = tr_null; + switch (rng(1, 7)) { + case 1: + case 2: + case 3: + placed = tr_beartrap; + break; + case 4: + placed = tr_caltrops; + break; + case 5: + placed = tr_nailboard; + break; + case 6: + placed = tr_crossbow; + break; + case 7: + placed = tr_shotgun_2; + break; + } + if (placed == tr_beartrap && has_flag("DIGGABLE", i, j)) { + if (one_in(8)) { + placed = tr_landmine_buried; + } else { + placed = tr_beartrap_buried; + } + } + add_trap(i, j, placed); + } + } + } + } + break; + + case mx_drugdeal: { + // Decide on a drug type + int num_drugs = 0; + itype_id drugtype; + switch (rng(1, 10)) { + case 1: // Weed + num_drugs = rng(20, 30); + drugtype = "weed"; + break; + case 2: + case 3: + case 4: + case 5: // Cocaine + num_drugs = rng(10, 20); + drugtype = "coke"; + break; + case 6: + case 7: + case 8: // Meth + num_drugs = rng(8, 14); + drugtype = "meth"; + break; + case 9: + case 10: // Heroin + num_drugs = rng(6, 12); + drugtype = "heroin"; + break; + } + int num_bodies_a = dice(3, 3); + int num_bodies_b = dice(3, 3); + bool north_south = one_in(2); + bool a_has_drugs = one_in(2); + + for (int i = 0; i < num_bodies_a; i++) { + int x, y, x_offset, y_offset, tries = 0; + do { // Loop until we find a valid spot to dump a body, or we give up + if (north_south) { + x = rng(0, SEEX * 2 - 1); + y = rng(0, SEEY - 4); + x_offset = 0; + y_offset = -1; + } else { + x = rng(0, SEEX - 4); + y = rng(0, SEEY * 2 - 1); + x_offset = -1; + y_offset = 0; + } + tries++; + } while (tries < 10 && move_cost(x, y) == 0); + + if (tries < 10) { // We found a valid spot! + add_item(x, y, body); + int splatter_range = rng(1, 3); + for (int j = 0; j <= splatter_range; j++) { + add_field(g, x + (j * x_offset), y + (j * y_offset), fd_blood, 1); + } + place_items("drugdealer", 75, x, y, x, y, true, 0); + if (a_has_drugs && num_drugs > 0) { + int drugs_placed = rng(2, 6); + if (drugs_placed > num_drugs) { + drugs_placed = num_drugs; + num_drugs = 0; + } + spawn_item(x, y, drugtype, 0, drugs_placed); + } + } + } + for (int i = 0; i < num_bodies_b; i++) { + int x, y, x_offset, y_offset, tries = 0; + do { // Loop until we find a valid spot to dump a body, or we give up + if (north_south) { + x = rng(0, SEEX * 2 - 1); + y = rng(SEEY + 3, SEEY * 2 - 1); + x_offset = 0; + y_offset = 1; + } else { + x = rng(SEEX + 3, SEEX * 2 - 1); + y = rng(0, SEEY * 2 - 1); + x_offset = 1; + y_offset = 0; + } + tries++; + } while (tries < 10 && move_cost(x, y) == 0); + + if (tries < 10) { // We found a valid spot! + add_item(x, y, body); + int splatter_range = rng(1, 3); + for (int j = 0; j <= splatter_range; j++) { + add_field(g, x + (j * x_offset), y + (j * y_offset), fd_blood, 1); + } + place_items("drugdealer", 75, x, y, x, y, true, 0); + if (!a_has_drugs && num_drugs > 0) { + int drugs_placed = rng(2, 6); + if (drugs_placed > num_drugs) { + drugs_placed = num_drugs; + num_drugs = 0; + } + spawn_item(x, y, drugtype, 0, drugs_placed); + } + } + } + } + break; + + case mx_supplydrop: { + int num_crates = rng(1, 5); + for (int i = 0; i < num_crates; i++) { + int x, y, tries = 0; + do { // Loop until we find a valid spot to dump a body, or we give up + x = rng(0, SEEX * 2 - 1); + y = rng(0, SEEY * 2 - 1); + tries++; + } while (tries < 10 && move_cost(x, y) == 0); + furn_set(x, y, f_crate_c); + switch (rng(1, 10)) { + case 1: + case 2: + case 3: + case 4: + place_items("mil_food", 88, x, y, x, y, true, 0); + break; + case 5: + case 6: + case 7: + place_items("grenades", 82, x, y, x, y, true, 0); + break; + case 8: + case 9: + place_items("mil_armor", 75, x, y, x, y, true, 0); + break; + case 10: + place_items("mil_rifles", 80, x, y, x, y, true, 0); + break; + } + } + } + break; + + case mx_portal: { + std::string spawncreatures[5] = {"mon_gelatin", "mon_flaming_eye", "mon_kreck", "mon_gracke", "mon_blank"}; + int x = rng(1, SEEX * 2 - 2), y = rng(1, SEEY * 2 - 2); + for (int i = x - 1; i <= x + 1; i++) { + for (int j = y - 1; j <= y + 1; j++) { + ter_set(i, j, t_rubble); + } + } + add_trap(x, y, tr_portal); + int num_monsters = rng(0, 4); + for (int i = 0; i < num_monsters; i++) { + std::string type = spawncreatures[( rng(0, 4) )]; + int mx = rng(1, SEEX * 2 - 2), my = rng(1, SEEY * 2 - 2); + ter_set(mx, my, t_rubble); + add_spawn(type, 1, mx, my); + } + } + break; + + case mx_minefield: { + int num_mines = rng(6, 20); + for (int x = 0; x < SEEX * 2; x++) { + for (int y = 0; y < SEEY * 2; y++) { + if (one_in(3)) { + ter_set(x, y, t_dirt); + } + } + } + for (int i = 0; i < num_mines; i++) { + int x = rng(0, SEEX * 2 - 1), y = rng(0, SEEY * 2 - 1); + if (!has_flag("DIGGABLE", x, y) || one_in(8)) { + ter_set(x, y, t_dirtmound); + } + add_trap(x, y, tr_landmine_buried); + } + } + break; + + case mx_crater: { + int size = rng(2, 6); + int size_squared = size * size; + int x = rng(size, SEEX * 2 - 1 - size), y = rng(size, SEEY * 2 - 1 - size); + for (int i = x - size; i <= x + size; i++) { + for (int j = y - size; j <= y + size; j++) { + //If we're using circular distances, make circular craters + //Pythagoras to the rescue, x^2 + y^2 = hypotenuse^2 + if(!trigdist || (((i - x) * (i - x) + (j - y) * (j - y)) <= size_squared)) { + destroy(g, i, j, false); + radiation(i, j) += rng(20, 40); + } + } + } + } + break; + + case mx_fumarole: { + int x1 = rng(0, SEEX - 1), y1 = rng(0, SEEY - 1), + x2 = rng(SEEX, SEEX * 2 - 1), y2 = rng(SEEY, SEEY * 2 - 1); + std::vector fumarole = line_to(x1, y1, x2, y2, 0); + for (int i = 0; i < fumarole.size(); i++) { + ter_set(fumarole[i].x, fumarole[i].y, t_lava); + } + } + break; + + case mx_portal_in: { + std::string monids[5] = {"mon_gelatin", "mon_flaming_eye", "mon_kreck", "mon_gracke", "mon_blank"}; + int x = rng(5, SEEX * 2 - 6), y = rng(5, SEEY * 2 - 6); + add_field(g, x, y, fd_fatigue, 3); + for (int i = x - 5; i <= x + 5; i++) { + for (int j = y - 5; j <= y + 5; j++) { + if (rng(1, 9) >= trig_dist(x, y, i, j)) { + marlossify(i, j); + if (one_in(15)) { + monster creature(GetMType(monids[rng(0, 5)])); + creature.spawn(i, j); + g->add_zombie(creature); + } + } + } + } + } + break; + + case mx_anomaly: { + point center( rng(6, SEEX * 2 - 7), rng(6, SEEY * 2 - 7) ); + artifact_natural_property prop = + artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1)); + create_anomaly(center.x, center.y, prop); + spawn_artifact(center.x, center.y, new_natural_artifact(itypes, prop), 0); + } + break; + + default: + break; + } +} + +void map::create_anomaly(int cx, int cy, artifact_natural_property prop) +{ + rough_circle(this, t_rubble, cx, cy, 5); + switch (prop) { + case ARTPROP_WRIGGLING: + case ARTPROP_MOVING: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble) { + add_field(NULL, i, j, fd_push_items, 1); + if (one_in(3)) { + spawn_item(i, j, "rock"); + } + } + } + } + break; + + case ARTPROP_GLOWING: + case ARTPROP_GLITTERING: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble && one_in(2)) { + add_trap(i, j, tr_glow); + } + } + } + break; + + case ARTPROP_HUMMING: + case ARTPROP_RATTLING: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble && one_in(2)) { + add_trap(i, j, tr_hum); + } + } + } + break; + + case ARTPROP_WHISPERING: + case ARTPROP_ENGRAVED: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble && one_in(3)) { + add_trap(i, j, tr_shadow); + } + } + } + break; + + case ARTPROP_BREATHING: + for (int i = cx - 1; i <= cx + 1; i++) { + for (int j = cy - 1; j <= cy + 1; j++) + if (i == cx && j == cy) { + add_spawn("mon_breather_hub", 1, i, j); + } else { + add_spawn("mon_breather", 1, i, j); + } + } + break; + + case ARTPROP_DEAD: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble) { + add_trap(i, j, tr_drain); + } + } + } + break; + + case ARTPROP_ITCHY: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble) { + radiation(i, j) = rng(0, 10); + } + } + } + break; + + case ARTPROP_ELECTRIC: + case ARTPROP_CRACKLING: + add_field(NULL, cx, cy, fd_shock_vent, 3); + break; + + case ARTPROP_SLIMY: + add_field(NULL, cx, cy, fd_acid_vent, 3); + break; + + case ARTPROP_WARM: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble) { + add_field(NULL, i, j, fd_fire_vent, 1 + (rl_dist(cx, cy, i, j) % 3)); + } + } + } + break; + + case ARTPROP_SCALED: + for (int i = cx - 5; i <= cx + 5; i++) { + for (int j = cy - 5; j <= cy + 5; j++) { + if (ter(i, j) == t_rubble) { + add_trap(i, j, tr_snake); + } + } + } + break; + + case ARTPROP_FRACTAL: + create_anomaly(cx - 4, cy - 4, + artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); + create_anomaly(cx + 4, cy - 4, + artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); + create_anomaly(cx - 4, cy + 4, + artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); + create_anomaly(cx + 4, cy - 4, + artifact_natural_property(rng(ARTPROP_NULL + 1, ARTPROP_MAX - 1))); + break; + default: + break; + } +} + +void line(map *m, ter_id type, int x1, int y1, int x2, int y2) +{ + std::vector line = line_to(x1, y1, x2, y2, 0); + for (int i = 0; i < line.size(); i++) { + m->ter_set(line[i].x, line[i].y, type); + } + m->ter_set(x1, y1, type); +} + +void line_furn(map *m, furn_id type, int x1, int y1, int x2, int y2) +{ + std::vector line = line_to(x1, y1, x2, y2, 0); + for (int i = 0; i < line.size(); i++) { + m->furn_set(line[i].x, line[i].y, type); + } + m->furn_set(x1, y1, type); +} + +void fill_background(map *m, ter_id type) +{ + square(m, type, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); +} + +void fill_background(map *m, ter_id (*f)()) +{ + square(m, f, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1); +} + +void square(map *m, ter_id type, int x1, int y1, int x2, int y2) +{ + for (int x = x1; x <= x2; x++) + for (int y = y1; y <= y2; y++) { + m->ter_set(x, y, type); + } +} + +void square_furn(map *m, furn_id type, int x1, int y1, int x2, int y2) +{ + for (int x = x1; x <= x2; x++) + for (int y = y1; y <= y2; y++) { + m->furn_set(x, y, type); + } +} + +void square(map *m, ter_id (*f)(), int x1, int y1, int x2, int y2) +{ + for (int x = x1; x <= x2; x++) + for (int y = y1; y <= y2; y++) { + m->ter_set(x, y, f()); + } +} + +void rough_circle(map *m, ter_id type, int x, int y, int rad) +{ + for (int i = x - rad; i <= x + rad; i++) { + for (int j = y - rad; j <= y + rad; j++) { + if (rl_dist(x, y, i, j) + rng(0, 3) <= rad) { + m->ter_set(i, j, type); + } + } + } +} + +void add_corpse(game *g, map *m, int x, int y) +{ + item body; + body.make_corpse(itypes["corpse"], GetMType("mon_null"), 0); + m->add_item_or_charges(x, y, body); + m->put_items_from("shoes", 1, x, y, 0, 0, 0); + m->put_items_from("pants", 1, x, y, 0, 0, 0); + m->put_items_from("shirts", 1, x, y, 0, 0, 0); + if (one_in(6)) { + m->put_items_from("jackets", 1, x, y, 0, 0, 0); + } + if (one_in(15)) { + m->put_items_from("bags", 1, x, y, 0, 0, 0); + } +} + +/** + * Adds vehicles to the current submap, selected from a random weighted + * distribution of possible vehicles. If the road has a pavement, then set the + * 'city' flag to true to spawn wrecks. If it doesn't (ie, highway or country + * road,) then set 'city' to false to spawn far fewer vehicles that are out + * of gas instead of wrecked. + * @param city Whether or not to spawn city wrecks. + * @param facing The direction the spawned car should face (multiple of 90). + */ +void map::add_road_vehicles(bool city, int facing) +{ + if (city) { + int spawn_type = rng(0, 100); + if(spawn_type <= 33) { + //Randomly-distributed wrecks + int maxwrecks = rng(1, 3); + for (int nv = 0; nv < maxwrecks; nv++) { + int vx = rng(0, 19); + int vy = rng(0, 19); + int car_type = rng(1, 100); + if (car_type <= 25) { + add_vehicle(g, "car", vx, vy, facing, -1, 1); + } else if (car_type <= 30) { + add_vehicle(g, "policecar", vx, vy, facing, -1, 1); + } else if (car_type <= 40) { + add_vehicle(g, "ambulance", vx, vy, facing, -1, 1); + } else if (car_type <= 45) { + add_vehicle(g, "beetle", vx, vy, facing, -1, 1); + } else if (car_type <= 50) { + add_vehicle(g, "scooter", vx, vy, facing, -1, 1); + } else if (car_type <= 55) { + add_vehicle(g, "motorcycle", vx, vy, facing, -1, 1); + } else if (car_type <= 65) { + add_vehicle(g, "hippie_van", vx, vy, facing, -1, 1); + } else if (car_type <= 70) { + add_vehicle(g, "cube_van", vx, vy, facing, -1, 1); + } else if (car_type <= 80) { + add_vehicle(g, "electric_car", vx, vy, facing, -1, 1); + } else if (car_type <= 90) { + add_vehicle(g, "flatbed_truck", vx, vy, facing, -1, 1); + } else if (car_type <= 95) { + add_vehicle(g, "rv", vx, vy, facing, -1, 1); + } else { + add_vehicle(g, "motorcycle_sidecart", vx, vy, facing, -1, 1); + } + } + } else if(spawn_type <= 66) { + //Parked vehicles + int veh_x = 0; + int veh_y = 0; + if(facing == 0) { + veh_x = rng(4, 16); + veh_y = 17; + } else if(facing == 90) { + veh_x = 6; + veh_y = rng(4, 16); + } else if(facing == 180) { + veh_x = rng(4, 16); + veh_y = 6; + } else if(facing == 270) { + veh_x = 17; + veh_y = rng(4, 16); + } + int veh_type = rng(0, 100); + if(veh_type <= 70) { + add_vehicle(g, "car", veh_x, veh_y, facing, -1, 1); + } else if(veh_type <= 95) { + add_vehicle(g, "electric_car", veh_x, veh_y, facing, -1, 1); + } else { + add_vehicle(g, "policecar", veh_x, veh_y, facing, -1, 1); + } + } else if(spawn_type <= 99) { + //Totally clear section of road + return; + } else { + //Road-blocking obstacle of some kind. + int block_type = rng(0, 100); + if(block_type <= 75) { + //Jack-knifed semi + int semi_x = 0; + int semi_y = 0; + int trailer_x = 0; + int trailer_y = 0; + if(facing == 0) { + semi_x = rng(0, 16); + semi_y = rng(14, 16); + trailer_x = semi_x + 4; + trailer_y = semi_y - 10; + } else if(facing == 90) { + semi_x = rng(0, 8); + semi_y = rng(4, 15); + trailer_x = semi_x + 12; + trailer_y = semi_y + 1; + } else if(facing == 180) { + semi_x = rng(4, 16); + semi_y = rng(4, 6); + trailer_x = semi_x - 4; + trailer_y = semi_y + 10; + } else { + semi_x = rng(12, 20); + semi_y = rng(5, 16); + trailer_x = semi_x - 12; + trailer_y = semi_y - 1; + } + add_vehicle(g, "semi_truck", semi_x, semi_y, (facing + 135) % 360, -1, 1); + add_vehicle(g, "truck_trailer", trailer_x, trailer_y, (facing + 90) % 360, -1, 1); + } else { + //Huge pileup of random vehicles + std::string next_vehicle; + int num_cars = rng(18, 22); + bool policecars = block_type >= 95; //Policecar pileup, Blues Brothers style + vehicle *last_added_car = NULL; + for(int i = 0; i < num_cars; i++) { + if(policecars) { + next_vehicle = "policecar"; + } else { + //Random car + int car_type = rng(0, 100); + if(car_type <= 70) { + next_vehicle = "car"; + } else if(car_type <= 90) { + next_vehicle = "flatbed_truck"; + } else if(car_type <= 95) { + next_vehicle = "cube_van"; + } else { + next_vehicle = "hippie_van"; + } + } + last_added_car = add_vehicle(g, next_vehicle, rng(4, 16), rng(4, 16), rng(0, 3) * 90, -1, 1); + } + + //Hopefully by the last one we've got a giant pileup, so name it + if (last_added_car != NULL) { + if(policecars) { + last_added_car->name = _("policecar pile-up"); + } else { + last_added_car->name = _("pile-up"); + } + } + } + } + } else { + // spawn regular road out of fuel vehicles + if (one_in(40)) { + int vx = rng(8, 16); + int vy = rng(8, 16); + int car_type = rng(1, 10); + if (car_type <= 5) { + add_vehicle(g, "car", vx, vy, facing, 0, -1); + } else if (car_type <= 8) { + add_vehicle(g, "flatbed_truck", vx, vy, facing, 0, -1); + } else if (car_type <= 9) { + add_vehicle(g, "semi_truck", vx, vy, facing, 0, -1); + } else { + add_vehicle(g, "armored_car", vx, vy, facing, 0, -1); + } + } + } +} diff --git a/building_generation.cpp b/src/mapgen_functions.cpp similarity index 93% rename from building_generation.cpp rename to src/mapgen_functions.cpp index d68451f1873c2..509f711082938 100644 --- a/building_generation.cpp +++ b/src/mapgen_functions.cpp @@ -1,8 +1,9 @@ -#include "building_generation.h" +#include "mapgen_functions.h" #include "output.h" #include "item_factory.h" #include "line.h" #include "mapgenformat.h" +#include "overmap.h" void line(map *m, ter_id type, int x1, int y1, int x2, int y2); void line_furn(map *m, furn_id type, int x1, int y1, int x2, int y2); @@ -133,7 +134,7 @@ ter_id dirt_or_pile() void mapgen_null(map *m) { - debugmsg("Generating terrain for ot_null, please report this as a bug"); + debugmsg("Generating null terrain, please report this as a bug"); for (int i = 0; i < SEEX * 2; i++) { for (int j = 0; j < SEEY * 2; j++) { m->ter_set(i, j, t_null); @@ -145,7 +146,7 @@ void mapgen_null(map *m) void mapgen_crater(map *m, mapgendata dat) { for(int i = 0; i < 4; i++) { - if(dat.t_nesw[i] != ot_crater) { + if(dat.t_nesw[i] != "crater") { dat.set_dir(i, 6); } } @@ -221,21 +222,17 @@ void mapgen_dirtlot(map *m) void mapgen_forest_general(map *m, oter_id terrain_type, mapgendata dat, int turn) { - switch (terrain_type) { - case ot_forest_thick: + if (terrain_type == "forest_thick") { dat.fill(8); - break; - case ot_forest_water: + } else if (terrain_type == "forest_water") { dat.fill(4); - break; - case ot_forest: + } else if (terrain_type == "forest") { dat.fill(0); - break; } for (int i = 0; i < 4; i++) { - if (dat.t_nesw[i] == ot_forest || dat.t_nesw[i] == ot_forest_water) { + if (dat.t_nesw[i] == "forest" || dat.t_nesw[i] == "forest_water") { dat.dir(i) += 14; - } else if (dat.t_nesw[i] == ot_forest_thick) { + } else if (dat.t_nesw[i] == "forest_thick") { dat.dir(i) += 18; } } @@ -265,7 +262,7 @@ void mapgen_forest_general(map *m, oter_id terrain_type, mapgendata dat, int tur if ((forest_chance > 0 && rn > 13) || one_in(100 - forest_chance)) { if (one_in(250)) { m->ter_set(i, j, t_tree_apple); - m->spawn_item(i, j, "apple", turn); + m->spawn_item(i, j, "apple", 1, 0, turn); } else { m->ter_set(i, j, t_tree); } @@ -284,14 +281,14 @@ void mapgen_forest_general(map *m, oter_id terrain_type, mapgendata dat, int tur } m->place_items("forest", 60, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, true, turn); - if (terrain_type == ot_forest_water) { + if (terrain_type == "forest_water") { // Reset *_fac to handle where to place water for (int i = 0; i < 8; i++) { - if (dat.t_nesw[i] == ot_forest_water) { + if (dat.t_nesw[i] == "forest_water") { dat.set_dir(i, 2); - } else if (dat.t_nesw[i] >= ot_river_center && dat.t_nesw[i] <= ot_river_nw) { + } else if (is_ot_type("river", dat.t_nesw[i])) { dat.set_dir(i, 3); - } else if (dat.t_nesw[i] == ot_forest || dat.t_nesw[i] == ot_forest_thick) { + } else if (dat.t_nesw[i] == "forest" || dat.t_nesw[i] == "forest_thick") { dat.set_dir(i, 1); } else { dat.set_dir(i, 0); @@ -505,8 +502,8 @@ void mapgen_hive(map *m, mapgendata dat, int turn) if (skip1 == 23 || skip2 == 23) m->ter_set(i + 1, j + 4, t_floor_wax); - if (dat.t_nesw[0] == ot_hive && dat.t_nesw[1] == ot_hive && - dat.t_nesw[2] == ot_hive && dat.t_nesw[3] == ot_hive) { + if (dat.t_nesw[0] == "hive" && dat.t_nesw[1] == "hive" && + dat.t_nesw[2] == "hive" && dat.t_nesw[3] == "hive") { m->place_items("hive_center", 90, i - 2, j - 2, i + 2, j + 2, false, turn); } else { m->place_items("hive", 80, i - 2, j - 2, i + 2, j + 2, false, turn); @@ -521,9 +518,9 @@ void mapgen_spider_pit(map *m, mapgendata dat, int turn) // First generate a forest dat.fill(4); for (int i = 0; i < 4; i++) { - if (dat.t_nesw[i] == ot_forest || dat.t_nesw[i] == ot_forest_water) { + if (dat.t_nesw[i] == "forest" || dat.t_nesw[i] == "forest_water") { dat.dir(i) += 14; - } else if (dat.t_nesw[i] == ot_forest_thick) { + } else if (dat.t_nesw[i] == "forest_thick") { dat.dir(i) += 18; } } @@ -611,13 +608,13 @@ void mapgen_road_straight(map *m, oter_id terrain_type, mapgendata dat, int turn { bool sidewalks = false; for (int i = 0; i < 8; i++) { - if (dat.t_nesw[i] >= ot_house_north && dat.t_nesw[i] <= ot_abstorefront_west) { + if (otermap[dat.t_nesw[i]].sidewalk) { sidewalks = true; } } int veh_spawn_heading; - if (terrain_type == ot_road_ew) { + if (terrain_type == "road_ew") { veh_spawn_heading = (one_in(2)? 0 : 180); } else { veh_spawn_heading = (one_in(2)? 270 : 90); @@ -642,7 +639,7 @@ void mapgen_road_straight(map *m, oter_id terrain_type, mapgendata dat, int turn } } } - if (terrain_type == ot_road_ew) { + if (terrain_type == "road_ew") { m->rotate(1); } if(sidewalks) { @@ -655,7 +652,7 @@ void mapgen_road_curved(map *m, oter_id terrain_type, mapgendata dat, int turn, { bool sidewalks = false; for (int i = 0; i < 8; i++) { - if (dat.t_nesw[i] >= ot_house_north && dat.t_nesw[i] <= ot_abstorefront_west) { + if (otermap[dat.t_nesw[i]].sidewalk) { sidewalks = true; } } @@ -736,13 +733,13 @@ ssss...................\n\ mapf::basic_bind(". , y", t_pavement, t_dirt, t_pavement_y), mapf::basic_bind(". , y", f_null, f_null, f_null, f_null)); } - if (terrain_type == ot_road_es) { + if (terrain_type == "road_es") { m->rotate(1); } - if (terrain_type == ot_road_sw) { + if (terrain_type == "road_sw") { m->rotate(2); } - if (terrain_type == ot_road_wn) { + if (terrain_type == "road_wn") { m->rotate(3); //looks like that the code above paints road_ne } if(sidewalks) { @@ -755,7 +752,7 @@ void mapgen_road_tee(map *m, oter_id terrain_type, mapgendata dat, int turn, flo { bool sidewalks = false; for (int i = 0; i < 8; i++) { - if (dat.t_nesw[i] >= ot_house_north && dat.t_nesw[i] <= ot_abstorefront_west) { + if (otermap[dat.t_nesw[i]].sidewalk) { sidewalks = true; } } @@ -780,13 +777,13 @@ void mapgen_road_tee(map *m, oter_id terrain_type, mapgendata dat, int turn, flo } } } - if (terrain_type == ot_road_esw) { + if (terrain_type == "road_esw") { m->rotate(1); } - if (terrain_type == ot_road_nsw) { + if (terrain_type == "road_nsw") { m->rotate(2); } - if (terrain_type == ot_road_new) { + if (terrain_type == "road_new") { m->rotate(3); } if(sidewalks) { @@ -799,13 +796,13 @@ void mapgen_road_four_way(map *m, oter_id terrain_type, mapgendata dat, int turn { bool plaza = false; for (int i = 0; i < 4; i++) { - if (dat.t_nesw[i] == ot_road_nesw || dat.t_nesw[i] == ot_road_nesw_manhole) { + if (dat.t_nesw[i] == "road_nesw" || dat.t_nesw[i] == "road_nesw_manhole") { plaza = true; } } bool sidewalks = false; for (int i = 0; i < 8; i++) { - if (dat.t_nesw[i] >= ot_house_north && dat.t_nesw[i] <= ot_abstorefront_west) { + if (otermap[dat.t_nesw[i]].sidewalk) { sidewalks = true; } } @@ -870,7 +867,7 @@ t t\n\ if(sidewalks) { m->place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); } - if (terrain_type == ot_road_nesw_manhole) { + if (terrain_type == "road_nesw_manhole") { m->ter_set(rng(6, SEEX * 2 - 6), rng(6, SEEX * 2 - 6), t_manhole_cover); } } @@ -908,7 +905,7 @@ void mapgen_bridge(map *m, oter_id terrain_type, int turn) } } - if (terrain_type == ot_bridge_ew) { + if (terrain_type == "bridge_ew") { m->rotate(1); } m->place_items("road", 5, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, false, turn); @@ -931,7 +928,7 @@ void mapgen_highway(map *m, oter_id terrain_type, int turn) } } } - if (terrain_type == ot_hiway_ew) { + if (terrain_type == "hiway_ew") { m->rotate(1); } m->place_items("road", 8, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, false, turn); @@ -964,13 +961,13 @@ void mapgen_river_curved_not(map *m, oter_id terrain_type) } } } - if (terrain_type == ot_river_c_not_se) { + if (terrain_type == "river_c_not_se") { m->rotate(1); } - if (terrain_type == ot_river_c_not_sw) { + if (terrain_type == "river_c_not_sw") { m->rotate(2); } - if (terrain_type == ot_river_c_not_nw) { + if (terrain_type == "river_c_not_nw") { m->rotate(3); } } @@ -986,13 +983,13 @@ void mapgen_river_straight(map *m, oter_id terrain_type) } } } - if (terrain_type == ot_river_east) { + if (terrain_type == "river_east") { m->rotate(1); } - if (terrain_type == ot_river_south) { + if (terrain_type == "river_south") { m->rotate(2); } - if (terrain_type == ot_river_west) { + if (terrain_type == "river_west") { m->rotate(3); } } @@ -1008,18 +1005,18 @@ void mapgen_river_curved(map *m, oter_id terrain_type) } } } - if (terrain_type == ot_river_se) { + if (terrain_type == "river_se") { m->rotate(1); } - if (terrain_type == ot_river_sw) { + if (terrain_type == "river_sw") { m->rotate(2); } - if (terrain_type == ot_river_nw) { + if (terrain_type == "river_nw") { m->rotate(3); } } -void mapgen_parking_lot(map *m, oter_id terrain_type, mapgendata dat, int turn) +void mapgen_parking_lot(map *m, mapgendata dat, int turn) { for (int i = 0; i < SEEX * 2; i++) { for (int j = 0; j < SEEY * 2; j++) { @@ -1091,7 +1088,7 @@ void mapgen_parking_lot(map *m, oter_id terrain_type, mapgendata dat, int turn) m->place_items("road", 8, 0, 0, SEEX * 2 - 1, SEEY * 2 - 1, false, turn); for (int i = 1; i < 4; i++) { - if (dat.t_nesw[1] >= ot_road_null && dat.t_nesw[1] <= ot_road_nesw_manhole) { + if (dat.t_nesw[i].size() > 5 && dat.t_nesw[i].find("road_",0,5) == 0) { m->rotate(i); } } @@ -1208,7 +1205,7 @@ void mapgen_park(map *m) m->add_spawn("mon_zombie_child", rng(2, 8), SEEX, SEEY); } -void mapgen_gas_station(map *m, oter_id terrain_type, int turn, float density) +void mapgen_gas_station(map *m, oter_id terrain_type, float density) { int top_w = rng(5, 14); int bottom_w = SEEY * 2 - rng(1, 2); @@ -1270,13 +1267,13 @@ void mapgen_gas_station(map *m, oter_id terrain_type, int turn, float density) m->place_items("road", 12, 0, 0, SEEX*2 - 1, top_w - 1, false, 0); m->place_items("behindcounter", 70, right_w - 4, top_w + 1, right_w - 1, top_w + 2, false, 0); m->place_items("softdrugs", 12, right_w - 1, bottom_w - 2, right_w - 1, bottom_w - 2, false, 0); - if (terrain_type == ot_s_gas_east) { + if (terrain_type == "s_gas_east") { m->rotate(1); } - if (terrain_type == ot_s_gas_south) { + if (terrain_type == "s_gas_south") { m->rotate(2); } - if (terrain_type == ot_s_gas_west) { + if (terrain_type == "s_gas_west") { m->rotate(3); } m->place_spawns(g, "GROUP_ZOMBIE", 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density); diff --git a/building_generation.h b/src/mapgen_functions.h similarity index 92% rename from building_generation.h rename to src/mapgen_functions.h index 9dae761700eba..12a933e915caf 100644 --- a/building_generation.h +++ b/src/mapgen_functions.h @@ -46,9 +46,9 @@ void mapgen_highway(map *m, oter_id terrain_type, int turn); void mapgen_river_curved_not(map *m, oter_id terrain_type); void mapgen_river_straight(map *m, oter_id terrain_type); void mapgen_river_curved(map *m, oter_id terrain_type); -void mapgen_parking_lot(map *m, oter_id terrain_type, mapgendata dat, int turn); +void mapgen_parking_lot(map *m, mapgendata dat, int turn); void mapgen_pool(map *m); void mapgen_park(map *m); -void mapgen_gas_station(map *m, oter_id terrain_type, int turn, float density); +void mapgen_gas_station(map *m, oter_id terrain_type, float density); #endif diff --git a/mapgenformat.cpp b/src/mapgenformat.cpp similarity index 100% rename from mapgenformat.cpp rename to src/mapgenformat.cpp diff --git a/mapgenformat.h b/src/mapgenformat.h similarity index 71% rename from mapgenformat.h rename to src/mapgenformat.h index 5a64b1bad2e8b..4d118ff5eb38c 100644 --- a/mapgenformat.h +++ b/src/mapgenformat.h @@ -57,29 +57,33 @@ namespace internal virtual int operator ()(map* m, const int x, const int y) = 0; }; - class statically_determine_terrain : public determine_terrain - { - private: - int id; - public: - statically_determine_terrain():id(0) {} - statically_determine_terrain(int pid):id(pid) {} - virtual ~statically_determine_terrain() {} - virtual int operator ()(map* m, const int x, const int y){return id;} - }; - - class determine_terrain_with_simple_method : public determine_terrain - { - public: - typedef ter_id (*ter_id_func)(); - private: - ter_id_func f; - public: - determine_terrain_with_simple_method():f(NULL) {} - determine_terrain_with_simple_method(ter_id_func pf):f(pf) {} - virtual ~determine_terrain_with_simple_method() {} - virtual int operator ()(map* m, const int x, const int y){return f();} - }; + class statically_determine_terrain : public determine_terrain + { + private: + int id; + public: + statically_determine_terrain() : id(0) {} + statically_determine_terrain(int pid) : id(pid) {} + virtual ~statically_determine_terrain() {} + virtual int operator ()(map *, const int /*x*/, const int /*y*/) { + return id; + } + }; + + class determine_terrain_with_simple_method : public determine_terrain + { + public: + typedef ter_id (*ter_id_func)(); + private: + ter_id_func f; + public: + determine_terrain_with_simple_method() : f(NULL) {} + determine_terrain_with_simple_method(ter_id_func pf) : f(pf) {} + virtual ~determine_terrain_with_simple_method() {} + virtual int operator ()(map *, const int /*x*/, const int /*y*/) { + return f(); + } + }; //TODO: make use of this class determine_terrain_with_complex_method : public determine_terrain diff --git a/mapitems.h b/src/mapitems.h similarity index 100% rename from mapitems.h rename to src/mapitems.h diff --git a/martialarts.cpp b/src/martialarts.cpp similarity index 96% rename from martialarts.cpp rename to src/martialarts.cpp index f7aca8ee10c92..e7cd3a4530e8c 100644 --- a/martialarts.cpp +++ b/src/martialarts.cpp @@ -321,8 +321,10 @@ int ma_buff::block_bonus(player& u) { u.int_cur*block_int + u.per_cur*block_per; } -int ma_buff::speed_bonus(player& u) { - return speed; +int ma_buff::speed_bonus(player& u) +{ + (void)u; //unused + return speed; } float ma_buff::bash_mult() { return bash_stat_mult; @@ -349,6 +351,10 @@ bool ma_buff::is_quiet() { return quiet; } +bool ma_buff::can_melee() { + return melee_allowed; +} + martialart::martialart() { @@ -450,13 +456,13 @@ bool player::has_grab_break_tec() { bool player::can_leg_block() { return (skillLevel("unarmed") >= martialarts[style_selected].leg_block && - martialarts[style_selected].leg_block > -1 && + martialarts[style_selected].leg_block > -1 && (hp_cur[hp_leg_l] > 0 || hp_cur[hp_leg_l] > 0)); } bool player::can_arm_block() { return (skillLevel("unarmed") >= martialarts[style_selected].arm_block && - martialarts[style_selected].arm_block > -1 && + martialarts[style_selected].arm_block > -1 && (hp_cur[hp_arm_l] > 0 || hp_cur[hp_arm_l] > 0)); } @@ -585,6 +591,17 @@ bool player::is_quiet() { return false; } +bool player::can_melee() { + for (std::vector::iterator it = illness.begin(); + it != illness.end(); ++it) { + if (it->is_mabuff() && + ma_buffs.find(it->buff_id) != ma_buffs.end()) { + if (ma_buffs[it->buff_id].can_melee()) return true; + } + } + return false; +} + bool player::has_mabuff(mabuff_id id) { for (std::vector::iterator it = illness.begin(); it != illness.end(); ++it) { diff --git a/martialarts.h b/src/martialarts.h similarity index 99% rename from martialarts.h rename to src/martialarts.h index bb8326423489e..f4f205da44c11 100644 --- a/martialarts.h +++ b/src/martialarts.h @@ -136,6 +136,7 @@ class ma_buff { // returns various boolean flags bool is_throw_immune(); bool is_quiet(); + bool can_melee(); std::string id; std::string name; @@ -187,6 +188,7 @@ class ma_buff { float block_per; // "" per point bool quiet; + bool melee_allowed; bool throw_immune; // are we immune to throws/grabs? }; diff --git a/material.cpp b/src/material.cpp similarity index 99% rename from material.cpp rename to src/material.cpp index a7bcdc540793f..e99e0b227f7c3 100644 --- a/material.cpp +++ b/src/material.cpp @@ -36,7 +36,7 @@ material_type::material_type(std::string ident, std::string name, _bash_resist = bash_resist; _cut_resist = cut_resist; _bash_dmg_verb = bash_dmg_verb; - _cut_dmg_verb = bash_dmg_verb; + _cut_dmg_verb = cut_dmg_verb; _dmg_adj[0] = dmg_adj[0]; _dmg_adj[1] = dmg_adj[1]; _dmg_adj[2] = dmg_adj[2]; diff --git a/material.h b/src/material.h similarity index 100% rename from material.h rename to src/material.h diff --git a/melee.cpp b/src/melee.cpp similarity index 95% rename from melee.cpp rename to src/melee.cpp index 617e4391c2006..0d696365e958d 100644 --- a/melee.cpp +++ b/src/melee.cpp @@ -14,7 +14,7 @@ void player_hit_message(game* g, player* attacker, std::string message, std::string target_name, int dam, bool crit); void melee_practice(const calendar& turn, player &u, bool hit, bool unarmed, bool bashing, bool cutting, bool stabbing); -int attack_speed(player &u, bool missed); +int attack_speed(player &u); int stumble(player &u); std::string melee_message(matec_id tech, player &p, int bash_dam, int cut_dam, int stab_dam); @@ -142,7 +142,7 @@ int player::hit_mon(game *g, monster *z, bool allow_grab) // defaults to true bool missed = (hit_roll() < mondodge || one_in(4 + dex_cur + weapon.type->m_to_hit)); - int move_cost = attack_speed(*this, missed); + int move_cost = attack_speed(*this); if (missed) { int stumble_pen = stumble(*this); @@ -242,7 +242,7 @@ void player::hit_player(game *g, player &p, bool allow_grab) int hit_value = hit_roll() - target_dodge; bool missed = (hit_roll() <= 0); - int move_cost = attack_speed(*this, missed); + int move_cost = attack_speed(*this); if (missed) { int stumble_pen = stumble(*this); @@ -476,6 +476,8 @@ int player::dodge(game *g) //Mutations if (has_trait("TAIL_LONG")) {ret += 2;} + if (has_trait("TAIL_LIZARD")) {ret+= 2;} + if (has_trait("TAIL_RAPTOR")) {ret+= 3;} if (has_trait("TAIL_FLUFFY")) {ret += 4;} if (has_trait("WHISKERS")) {ret += 1;} if (has_trait("WINGS_BAT")) {ret -= 3;} @@ -609,6 +611,8 @@ int player::roll_cut_damage(monster *z, bool crit) if (unarmed_attack() && !wearing_something_on(bp_hands)) { if (has_trait("CLAWS")) ret += 6; + if (has_bionic("bio_razors")) + ret += 4; if (has_trait("TALONS")) ret += 6 + ((int)skillLevel("unarmed") > 8 ? 8 : (int)skillLevel("unarmed")); if (has_trait("SLIME_HANDS") && (z == NULL || !z->has_flag(MF_ACIDPROOF))) @@ -646,6 +650,8 @@ int player::roll_stab_damage(monster *z, bool crit) ret += 6; if (has_trait("NAILS") && z_armor == 0) ret++; + if (has_bionic("bio_razors")) + ret += 4; if (has_trait("THORNS")) ret += 4; } else if (weapon.has_flag("SPEAR") || weapon.has_flag("STAB")) @@ -682,10 +688,10 @@ int player::roll_stab_damage(monster *z, bool crit) // Weapons can have a "low_stick" flag indicating they // Have a feature to prevent sticking, such as a spear with a crossbar, // Or a stabbing blade designed to resist sticking. -int player::roll_stuck_penalty(monster *z, bool stabbing) +int player::roll_stuck_penalty(bool stabbing) { // The cost of the weapon getting stuck, in units of move points. - const int weapon_speed = attack_speed( *this, false ); + const int weapon_speed = attack_speed(*this); int stuck_cost = weapon_speed; const int attack_skill = stabbing ? skillLevel("stabbing") : skillLevel("cutting"); const float cut_damage = weapon.damage_cut(); @@ -741,6 +747,8 @@ int player::roll_stuck_penalty(monster *z, bool stabbing) matec_id player::pick_technique(game *g, monster *z, player *p, bool crit, bool allowgrab) { + (void)allowgrab; //FIXME: is this supposed to be being used for something? + if (z == NULL && p == NULL) return "tec_none"; @@ -816,7 +824,7 @@ matec_id player::pick_technique(game *g, monster *z, player *p, } bool player::has_technique(matec_id id) { - return weapon.has_technique(id, this) || + return weapon.has_technique(id) || martialarts[style_selected].has_technique(*this, id); } @@ -824,6 +832,9 @@ void player::perform_technique(ma_technique technique, game *g, monster *z, player *p, int &bash_dam, int &cut_dam, int &stab_dam, int &pain) { + (void)cut_dam; //FIXME: this should probably be being used for something + (void)stab_dam; //FIXME: this should probably be being used for something + const bool mon = (z != NULL); const bool npc = (p != NULL && p->is_npc()); const bool you = (p == &(g->u)); @@ -841,7 +852,7 @@ void player::perform_technique(ma_technique technique, game *g, monster *z, int tarx = (mon ? z->posx() : p->posx), tary = (mon ? z->posy() : p->posy); if (technique.quick) { - moves += int( attack_speed(*this, false) / 2); + moves += int(attack_speed(*this) / 2); return; } // The rest affect our target, and thus depend on z vs. p @@ -936,25 +947,27 @@ void player::perform_technique(ma_technique technique, game *g, monster *z, // this would be i2amroy's fix, but it's kinda handy bool player::can_weapon_block() { - return (weapon.has_technique("WBLOCK_1", this) || - weapon.has_technique("WBLOCK_2", this) || - weapon.has_technique("WBLOCK_3", this)); + return (weapon.has_technique("WBLOCK_1") || + weapon.has_technique("WBLOCK_2") || + weapon.has_technique("WBLOCK_3")); } bool player::block_hit(game *g, monster *z, player *p, body_part &bp_hit, int &side, int &bash_dam, int &cut_dam, int &stab_dam) { + (void)z; //FIXME: this should probably be being used for something + (void)p; //FIXME: this should probably be being used for something if (blocks_left <= 0) return false; // if weapon, then extra reduction if (!unarmed_attack() && (can_arm_block() || can_weapon_block())) { float mult = 1.0f; - if (weapon.has_technique("WBLOCK_1",this)) { + if (weapon.has_technique("WBLOCK_1")) { mult = 0.4; - } else if (weapon.has_technique("WBLOCK_2",this)) { + } else if (weapon.has_technique("WBLOCK_2")) { mult = 0.15; - } else if (weapon.has_technique("WBLOCK_3",this)) { + } else if (weapon.has_technique("WBLOCK_3")) { mult = 0.05; } else { mult = 0.5; // always at least as good as unarmed @@ -1199,7 +1212,7 @@ void player::melee_special_effects(game *g, monster *z, player *p, bool crit, } // Getting your weapon stuck - int cutting_penalty = roll_stuck_penalty(z, stab_dam > cut_dam); + int cutting_penalty = roll_stuck_penalty(stab_dam > cut_dam); if (weapon.has_flag("MESSY")) { // e.g. chainsaws cutting_penalty /= 6; // Harder to get stuck for (int x = tarposx - 1; x <= tarposx + 1; x++) { @@ -1334,6 +1347,25 @@ std::vector player::mutation_attacks(monster *z, player *p) } ret.push_back(tmp); } + + if (has_trait("RAP_TALONS") && one_in(30 - dex_cur - 2 * skillLevel("unarmed"))) { + special_attack tmp; + tmp.cut = str_cur * 4; + if (tmp.cut > 60) { + tmp.cut = 60; + } + if (is_u) { + tmp.text = string_format(_("You slash %s with a talon!"), + target.c_str()); + } else if (male) { + tmp.text = string_format(_("%s slashes %s with a talon!"), + name.c_str(), target.c_str()); + } else { + tmp.text = string_format(_("%s slashes %s with a talon!"), + name.c_str(), target.c_str()); + } + ret.push_back(tmp); + } if (has_trait("HORNS") && one_in(20 - dex_cur - skillLevel("unarmed"))) { special_attack tmp; @@ -1432,6 +1464,22 @@ std::vector player::mutation_attacks(monster *z, player *p) ret.push_back(tmp); } + if (has_trait("TAIL_LIZARD") && one_in(3) && one_in(10 - dex_cur)) { + special_attack tmp; + tmp.bash = 8; + if (is_u) { + tmp.text = string_format(_("You whap %s with your tail!"), + target.c_str()); + } else if (male) { + tmp.text = string_format(_("%s whaps %s with his tail!"), + name.c_str(), target.c_str()); + } else { + tmp.text = string_format(_("%s whaps %s with her tail!"), + name.c_str(), target.c_str()); + } + ret.push_back(tmp); + } + if (has_trait("ARM_TENTACLES") || has_trait("ARM_TENTACLES_4") || has_trait("ARM_TENTACLES_8")) { int num_attacks = 1; @@ -1605,7 +1653,7 @@ void melee_practice(const calendar& turn, player &u, bool hit, bool unarmed, if (!third.empty()) u.practice(turn, third, rng(min, max)); } -int attack_speed(player &u, bool missed) +int attack_speed(player &u) { int move_cost = u.weapon.attack_time() + 20 * u.encumb(bp_torso); if (u.has_trait("LIGHT_BONES")) diff --git a/mission.cpp b/src/mission.cpp similarity index 100% rename from mission.cpp rename to src/mission.cpp diff --git a/mission.h b/src/mission.h similarity index 92% rename from mission.h rename to src/mission.h index 857b21c6687b4..8c00f5809399f 100644 --- a/mission.h +++ b/src/mission.h @@ -7,8 +7,9 @@ #include "omdata.h" #include "itype.h" #include "npc.h" +#include "json.h" -struct mission; +class mission; class game; enum talk_topic; @@ -57,7 +58,7 @@ enum mission_origin { enum mission_goal { MGOAL_NULL = 0, MGOAL_GO_TO, // Reach a certain overmap tile - MGOAL_GO_TO_TYPE, // Instead of a point, go to an oter_id map tile like ot_hospital_entrance + MGOAL_GO_TO_TYPE, // Instead of a point, go to an oter_id map tile like "hospital_entrance" MGOAL_FIND_ITEM, // Find an item of a given type MGOAL_FIND_ANY_ITEM, // Find an item tagged with this mission MGOAL_FIND_MONSTER, // Find and retrieve a friendly monster @@ -72,8 +73,8 @@ enum mission_goal { }; struct mission_place { // Return true if [posx,posy] is valid in overmap - bool never (game *g, int posx, int posy) { return false; } - bool always (game *g, int posx, int posy) { return true; } + bool never (game *, int, int) { return false; } + bool always (game *, int, int) { return true; } bool near_town (game *g, int posx, int posy); }; @@ -131,7 +132,7 @@ struct mission_type { itype_id item_id; npc_class recruit_class; // The type of NPC you are to recruit int recruit_npc_id; - mon_id monster_type; + std::string monster_type; int monster_kill_goal; oter_id target_id; mission_id follow_up; @@ -153,10 +154,10 @@ struct mission_type { deadline_low = 0; deadline_high = 0; item_id = "null"; - target_id = ot_null; + target_id = 0;///(0);// = ""; recruit_class = NC_NONE; recruit_npc_id = -1; - monster_type = mon_null; + monster_type = "mon_null"; monster_kill_goal = -1; follow_up = MISSION_NULL; }; @@ -164,7 +165,9 @@ struct mission_type { mission create(game *g, int npc_id = -1); // Create a mission }; -struct mission { +class mission : public JsonSerializer, public JsonDeserializer +{ +public: mission_type *type; std::string description;// Basic descriptive text bool failed; // True if we've failed it! @@ -185,12 +188,13 @@ struct mission { int step; // How much have we completed? mission_id follow_up; // What mission do we get after this succeeds? - std::string name(); - std::string save_info(); - void load_info(game *g, std::ifstream &info); - - void json_load(picojson::value parsed, game * g); - picojson::value json_save(bool save_contents = false); + std::string name(); + std::string save_info(); + void load_info(game *g, std::ifstream &info); + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); mission() { @@ -201,10 +205,10 @@ struct mission { uid = -1; target = point(-1, -1); item_id = "null"; - target_id = ot_null; + target_id = 0; recruit_class = NC_NONE; recruit_npc_id = -1; - monster_type = mon_null; + monster_type = "mon_null"; monster_kill_goal = -1; count = 0; deadline = 0; diff --git a/mission_end.cpp b/src/mission_end.cpp similarity index 94% rename from mission_end.cpp rename to src/mission_end.cpp index b43be8c1c7fd5..dea64da8b2037 100644 --- a/mission_end.cpp +++ b/src/mission_end.cpp @@ -26,6 +26,6 @@ void mission_end::deposit_box(game *g, mission *miss) std::string itemName = "deagle_44"; if (one_in(4)) itemName = "katana"; else if (one_in(3)) itemName = "m4a1"; - g->u.i_add( item(g->itypes[itemName], 0) ); + g->u.i_add( item(itypes[itemName], 0) ); g->add_msg(_("%s gave you an item from the deposit box."), p->name.c_str()); } diff --git a/mission_fail.cpp b/src/mission_fail.cpp similarity index 100% rename from mission_fail.cpp rename to src/mission_fail.cpp diff --git a/mission_place.cpp b/src/mission_place.cpp similarity index 100% rename from mission_place.cpp rename to src/mission_place.cpp diff --git a/mission_start.cpp b/src/mission_start.cpp similarity index 71% rename from mission_start.cpp rename to src/mission_start.cpp index dacf12a0981fa..ec353db026b9b 100644 --- a/mission_start.cpp +++ b/src/mission_start.cpp @@ -2,13 +2,13 @@ #include "game.h" #include "name.h" #include - +#include "omdata.h" /* These functions are responsible for making changes to the game at the moment * the mission is accepted by the player. They are also responsible for * updating *miss with the target and any other important information. */ -void mission_start::standard(game *g, mission *miss) +void mission_start::standard(game *, mission *) { } @@ -39,7 +39,7 @@ void mission_start::place_dog(game *g, mission *miss) debugmsg("Couldn't find NPC! %d", miss->npc_id); return; } - g->u.i_add( item(g->itypes["dog_whistle"], 0) ); + g->u.i_add( item(itypes["dog_whistle"], 0) ); g->add_msg(_("%s gave you a dog whistle."), dev->name.c_str()); miss->target = house; @@ -76,7 +76,7 @@ void mission_start::place_zombie_mom(game *g, mission *miss) void mission_start::place_jabberwock(game *g, mission *miss) { int dist = 0; - point site = g->cur_om->find_closest(g->om_location(), ot_forest_thick, 1, dist, false); + point site = g->cur_om->find_closest(g->om_location(), "forest_thick", dist, false); miss->target = site; // Make it seen on our map for (int x = site.x - 6; x <= site.x + 6; x++) { @@ -104,13 +104,13 @@ void mission_start::kill_horde_master(game *g, mission *miss) npc *p = g->find_npc(miss->npc_id); p->attitude = NPCATT_FOLLOW;//npc joins you int dist = 0;//pick one of the below locations for the horde to haunt - point site = g->cur_om->find_closest(g->om_location(), ot_office_tower_1, 1, dist, false); + point site = g->cur_om->find_closest(g->om_location(), "office_tower_1", dist, false); if (site.x == -1 && site.y == -1 ) - site = g->cur_om->find_closest(g->om_location(), ot_hotel_tower_1_8, 1, dist, false); + site = g->cur_om->find_closest(g->om_location(), "hotel_tower_1_8", dist, false); if (site.x == -1 && site.y == -1) - site = g->cur_om->find_closest(g->om_location(), ot_school_5, 1, dist, false); + site = g->cur_om->find_closest(g->om_location(), "school_5", dist, false); if (site.x == -1 && site.y == -1) - site = g->cur_om->find_closest(g->om_location(), ot_forest_thick, 1, dist, false); + site = g->cur_om->find_closest(g->om_location(), "forest_thick", dist, false); miss->target = site; // Make it seen on our map for (int x = site.x - 6; x <= site.x + 6; x++) { @@ -141,10 +141,10 @@ void mission_start::place_npc_software(game *g, mission *miss) debugmsg("Couldn't find NPC! %d", miss->npc_id); return; } - g->u.i_add( item(g->itypes["usb_drive"], 0) ); + g->u.i_add( item(itypes["usb_drive"], 0) ); g->add_msg(_("%s gave you a USB drive."), dev->name.c_str()); - oter_id ter = ot_house_north; + std::string type = "house"; switch (dev->myclass) { case NC_HACKER: @@ -152,7 +152,7 @@ void mission_start::place_npc_software(game *g, mission *miss) break; case NC_DOCTOR: miss->item_id = "software_medical"; - ter = ot_s_pharm_north; + type = "s_pharm"; miss->follow_up = MISSION_GET_ZOMBIE_BLOOD_ANAL; break; case NC_SCIENTIST: @@ -162,14 +162,16 @@ void mission_start::place_npc_software(game *g, mission *miss) miss->item_id = "software_useless"; } - int dist = 0; - point place; - if (ter == ot_house_north) { - int city_id = g->cur_om->closest_city( g->om_location() ); - place = g->cur_om->random_house_in_city(city_id); - } else - place = g->cur_om->find_closest(g->om_location(), ter, 4, dist, false); - miss->target = place; + int dist = 0; + point place; + if (type == "house") { + int city_id = g->cur_om->closest_city( g->om_location() ); + place = g->cur_om->random_house_in_city(city_id); + } else { + place = g->cur_om->find_closest(g->om_location(), type, dist, false); + } + miss->target = place; + // Make it seen on our map for (int x = place.x - 6; x <= place.x + 6; x++) { for (int y = place.y - 6; y <= place.y + 6; y++) @@ -179,77 +181,71 @@ void mission_start::place_npc_software(game *g, mission *miss) compmap.load(g, place.x * 2, place.y * 2, 0, false); point comppoint; - switch (g->cur_om->ter(place.x, place.y, 0)) { - case ot_house_north: - case ot_house_east: - case ot_house_west: - case ot_house_south: { - std::vector valid; - for (int x = 0; x < SEEX * 2; x++) { - for (int y = 0; y < SEEY * 2; y++) { - if (compmap.ter(x, y) == t_floor && compmap.furn(x, y) == f_null) { - bool okay = false; - for (int x2 = x - 1; x2 <= x + 1 && !okay; x2++) { - for (int y2 = y - 1; y2 <= y + 1 && !okay; y2++) { - if (compmap.furn(x2, y2) == f_bed || compmap.furn(x2, y2) == f_dresser) { - okay = true; - valid.push_back( point(x, y) ); - } - } - } - } - } - } - if (valid.empty()) - comppoint = point( rng(6, SEEX * 2 - 7), rng(6, SEEY * 2 - 7) ); - else - comppoint = valid[rng(0, valid.size() - 1)]; - } break; - case ot_s_pharm_north: { - bool found = false; - for (int x = SEEX * 2 - 1; x > 0 && !found; x--) { - for (int y = SEEY * 2 - 1; y > 0 && !found; y--) { - if (compmap.ter(x, y) == t_floor) { - found = true; - comppoint = point(x, y); + oter_id oter = g->cur_om->ter(place.x, place.y, 0); + if (oter == "house_north" || oter == "house_east" + || oter == "house_south" || oter == "house_west") { + std::vector valid; + for (int x = 0; x < SEEX * 2; x++) { + for (int y = 0; y < SEEY * 2; y++) { + if (compmap.ter(x, y) == t_floor && compmap.furn(x, y) == f_null) { + bool okay = false; + for (int x2 = x - 1; x2 <= x + 1 && !okay; x2++) { + for (int y2 = y - 1; y2 <= y + 1 && !okay; y2++) { + if (compmap.furn(x2, y2) == f_bed || compmap.furn(x2, y2) == f_dresser) { + okay = true; + valid.push_back( point(x, y) ); + } + } + } + } + } + } + if (valid.empty()) { + comppoint = point( rng(6, SEEX * 2 - 7), rng(6, SEEY * 2 - 7) ); + } else { + comppoint = valid[rng(0, valid.size() - 1)]; + } + } else if (oter == "s_pharm_north") { + bool found = false; + for (int x = SEEX * 2 - 1; x > 0 && !found; x--) { + for (int y = SEEY * 2 - 1; y > 0 && !found; y--) { + if (compmap.ter(x, y) == t_floor) { + found = true; + comppoint = point(x, y); + } + } + } + } else if (oter == "s_pharm_east") { + bool found = false; + for (int x = 0; x < SEEX * 2 && !found; x++) { + for (int y = SEEY * 2 - 1; y > 0 && !found; y--) { + if (compmap.ter(x, y) == t_floor) { + found = true; + comppoint = point(x, y); + } + } + } + } else if (oter == "s_pharm_south") { + bool found = false; + for (int x = 0; x < SEEX * 2 && !found; x++) { + for (int y = 0; y < SEEY * 2 && !found; y++) { + if (compmap.ter(x, y) == t_floor) { + found = true; + comppoint = point(x, y); + } + } + } + } else if (oter == "s_pharm_west") { + bool found = false; + for (int x = SEEX * 2 - 1; x > 0 && !found; x--) { + for (int y = 0; y < SEEY * 2 && !found; y++) { + if (compmap.ter(x, y) == t_floor) { + found = true; + comppoint = point(x, y); + } + } + } } - } - } - } break; - case ot_s_pharm_east: { - bool found = false; - for (int x = 0; x < SEEX * 2 && !found; x++) { - for (int y = SEEY * 2 - 1; y > 0 && !found; y--) { - if (compmap.ter(x, y) == t_floor) { - found = true; - comppoint = point(x, y); - } - } - } - } break; - case ot_s_pharm_south: { - bool found = false; - for (int x = 0; x < SEEX * 2 && !found; x++) { - for (int y = 0; y < SEEY * 2 && !found; y++) { - if (compmap.ter(x, y) == t_floor) { - found = true; - comppoint = point(x, y); - } - } - } - } break; - case ot_s_pharm_west: { - bool found = false; - for (int x = SEEX * 2 - 1; x > 0 && !found; x--) { - for (int y = 0; y < SEEY * 2 && !found; y++) { - if (compmap.ter(x, y) == t_floor) { - found = true; - comppoint = point(x, y); - } - } - } - } break; - } compmap.ter_set(comppoint.x, comppoint.y, t_console); computer *tmpcomp = compmap.add_computer(comppoint.x, comppoint.y, string_format(_("%s's Terminal"), dev->name.c_str()), 0); @@ -285,25 +281,21 @@ void mission_start::place_priest_diary(game *g, mission *miss) comppoint = point( rng(6, SEEX * 2 - 7), rng(6, SEEY * 2 - 7) ); else comppoint = valid[rng(0, valid.size() - 1)]; - compmap.spawn_item(comppoint.x, comppoint.y, "priest_diary", 0); + compmap.spawn_item(comppoint.x, comppoint.y, "priest_diary"); compmap.save(g->cur_om, int(g->turn), place.x * 2, place.y * 2, 0); } void mission_start::place_deposit_box(game *g, mission *miss) { - npc *p = g->find_npc(miss->npc_id); - p->attitude = NPCATT_FOLLOW;//npc joins you - int dist = 0; - point site = g->cur_om->find_closest(g->om_location(), ot_bank_north, 1, dist, false); - if (site.x == -1 && site.y == -1 ) - site = g->cur_om->find_closest(g->om_location(), ot_bank_south, 1, dist, false); - if (site.x == -1 && site.y == -1) - site = g->cur_om->find_closest(g->om_location(), ot_bank_east, 1, dist, false); - if (site.x == -1 && site.y == -1) - site = g->cur_om->find_closest(g->om_location(), ot_bank_west, 1, dist, false); - if (site.x == -1 && site.y == -1) - site = g->cur_om->find_closest(g->om_location(), ot_office_tower_1, 1, dist, false); - miss->target = site; + npc *p = g->find_npc(miss->npc_id); + p->attitude = NPCATT_FOLLOW;//npc joins you + int dist = 0; + point site = g->cur_om->find_closest(g->om_location(), "bank", dist, false); + if (site.x == -1 && site.y == -1) { + site = g->cur_om->find_closest(g->om_location(), "office_tower_1", dist, false); + } + miss->target = site; + for (int x = site.x - 2; x <= site.x + 2; x++) { for (int y = site.y - 2; y <= site.y + 2; y++) g->cur_om->seen(x, y, 0) = true; @@ -331,7 +323,7 @@ void mission_start::place_deposit_box(game *g, mission *miss) comppoint = point( rng(6, SEEX * 2 - 7), rng(6, SEEY * 2 - 7) ); else comppoint = valid[rng(0, valid.size() - 1)]; -compmap.spawn_item(comppoint.x, comppoint.y, "safe_box", 0); +compmap.spawn_item(comppoint.x, comppoint.y, "safe_box"); compmap.save(g->cur_om, int(g->turn), site.x * 2, site.y * 2, 0); } @@ -339,11 +331,11 @@ void mission_start::reveal_lab_black_box(game *g, mission *miss) { npc* dev = g->find_npc(miss->npc_id); if (dev != NULL) { - g->u.i_add( item(g->itypes["black_box"], 0) ); + g->u.i_add( item(itypes["black_box"], 0) ); g->add_msg(_("%s gave you back the black box."), dev->name.c_str()); } int dist = 0; - point place = g->cur_om->find_closest(g->om_location(), ot_lab, 1, dist, + point place = g->cur_om->find_closest(g->om_location(), "lab", dist, false); for (int x = place.x - 3; x <= place.x + 3; x++) { for (int y = place.y - 3; y <= place.y + 3; y++) @@ -357,11 +349,11 @@ void mission_start::open_sarcophagus(game *g, mission *miss) npc *p = g->find_npc(miss->npc_id); p->attitude = NPCATT_FOLLOW; if (p != NULL) { - g->u.i_add( item(g->itypes["sarcophagus_access_code"], 0) ); + g->u.i_add( item(itypes["sarcophagus_access_code"], 0) ); g->add_msg(_("%s gave you sarcophagus access code."), p->name.c_str()); } int dist = 0; - point place = g->cur_om->find_closest(g->om_location(), ot_haz_sar_entrance, 1, dist, + point place = g->cur_om->find_closest(g->om_location(), "haz_sar", dist, false); for (int x = place.x - 3; x <= place.x + 3; x++) { for (int y = place.y - 3; y <= place.y + 3; y++) @@ -374,11 +366,11 @@ void mission_start::reveal_hospital(game *g, mission *miss) { npc* dev = g->find_npc(miss->npc_id); if (dev != NULL) { - g->u.i_add( item(g->itypes["vacutainer"], 0) ); + g->u.i_add( item(itypes["vacutainer"], 0) ); g->add_msg(_("%s gave you a vacutainer."), dev->name.c_str()); } int dist = 0; - point place = g->cur_om->find_closest(g->om_location(), ot_hospital, 1, dist, + point place = g->cur_om->find_closest(g->om_location(), "hospital", dist, false); for (int x = place.x - 3; x <= place.x + 3; x++) { for (int y = place.y - 3; y <= place.y + 3; y++) @@ -422,7 +414,7 @@ void mission_start::find_safety(game *g, mission *miss) void mission_start::point_prison(game *g, mission *miss) { int dist = 0; - point place = g->cur_om->find_closest(g->om_location(), ot_prison_5, 1, dist, + point place = g->cur_om->find_closest(g->om_location(), "prison_5", dist, false); for (int x = place.x - 3; x <= place.x + 3; x++) { for (int y = place.y - 3; y <= place.y + 3; y++) @@ -434,7 +426,7 @@ void mission_start::point_prison(game *g, mission *miss) void mission_start::point_cabin_strange(game *g, mission *miss) { int dist = 0; - point place = g->cur_om->find_closest(g->om_location(), ot_cabin_strange, 1, dist, + point place = g->cur_om->find_closest(g->om_location(), "cabin_strange", dist, false); for (int x = place.x - 3; x <= place.x + 3; x++) { for (int y = place.y - 3; y <= place.y + 3; y++) @@ -449,7 +441,7 @@ void mission_start::recruit_tracker(game *g, mission *miss) p->attitude = NPCATT_FOLLOW;//npc joins you int dist = 0; - point site = g->cur_om->find_closest(g->om_location(), ot_cabin, 1, dist, false); + point site = g->cur_om->find_closest(g->om_location(), "cabin", dist, false); miss->target = site; miss->recruit_class = NC_COWBOY; @@ -476,6 +468,6 @@ for (int x = site.x - 2; x <= site.x + 2; x++) { g->cur_om->npcs.push_back(temp); } -void mission_start::place_book(game *g, mission *miss) +void mission_start::place_book(game *, mission *) { } diff --git a/missiondef.cpp b/src/missiondef.cpp similarity index 99% rename from missiondef.cpp rename to src/missiondef.cpp index 608de1c98629d..d8151ee25535b 100644 --- a/missiondef.cpp +++ b/src/missiondef.cpp @@ -89,7 +89,7 @@ MISSION(_("Find Flag"), MGOAL_FIND_ITEM, 2, 1000, false, &mission_place::always, &mission_start::open_sarcophagus, &mission_end::standard, &mission_fail::standard); ORIGINS(ORIGIN_SECONDARY); - DESTINATION(ot_haz_sar_b1); + DESTINATION("haz_sar_b1"); //martyr mission 1 MISSION(_("Find Relic"), MGOAL_FIND_ITEM, 2, 1000, false, @@ -141,7 +141,7 @@ MISSION(_("Find Flag"), MGOAL_FIND_ITEM, 2, 1000, false, &mission_place::always, &mission_start::join, &mission_end::standard, &mission_fail::standard); ORIGINS(ORIGIN_SECONDARY); - DESTINATION(ot_fema); + DESTINATION("fema"); FOLLOWUP(MISSION_REACH_FARM_HOUSE); //humanitarian mission 3 @@ -149,7 +149,7 @@ MISSION(_("Find Flag"), MGOAL_FIND_ITEM, 2, 1000, false, &mission_place::always, &mission_start::join, &mission_end::leave, &mission_fail::standard); ORIGINS(ORIGIN_SECONDARY); - DESTINATION(ot_farm); + DESTINATION("farm"); //vigilante mission 1 MISSION(_("Find Corporate Accounts"), MGOAL_FIND_ITEM, 2, 1400, false, diff --git a/monattack.cpp b/src/monattack.cpp similarity index 93% rename from monattack.cpp rename to src/monattack.cpp index ef95449314b12..709ab459ee216 100644 --- a/monattack.cpp +++ b/src/monattack.cpp @@ -7,6 +7,7 @@ #include "material.h" #include "json.h" #include "monstergenerator.h" +#include "speech.h" #include //Used for e^(x) functions @@ -20,9 +21,7 @@ #include // std::numeric_limits #define SKIPLINE(stream) stream.ignore(std::numeric_limits::max(), '\n') -std::vector parrotVector; - -void mattack::antqueen(game *g, monster *z) +void mattack::antqueen(monster *z) { std::vector egg_points; std::vector ants; @@ -58,7 +57,7 @@ void mattack::antqueen(game *g, monster *z) } else if (egg_points.size() == 0) { // There's no eggs nearby--lay one. if (g->u_see(z->posx(), z->posy())) g->add_msg(_("The %s lays an egg!"), z->name().c_str()); - g->m.spawn_item(z->posx(), z->posy(), "ant_egg", g->turn); + g->m.spawn_item(z->posx(), z->posy(), "ant_egg", 1, 0, g->turn); } else { // There are eggs nearby. Let's hatch some. z->moves -= 20 * egg_points.size(); // It takes a while if (g->u_see(z->posx(), z->posy())) @@ -77,29 +76,29 @@ void mattack::antqueen(game *g, monster *z) } } -void mattack::shriek(game *g, monster *z) +void mattack::shriek(monster *z) { int j; if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 4 || !g->sees_u(z->posx(), z->posy(), j)) return; // Out of range - z->moves = -240; // It takes a while + z->moves -= 240; // It takes a while z->sp_timeout = z->type->sp_freq; // Reset timer g->sound(z->posx(), z->posy(), 50, _("a terrible shriek!")); } -void mattack::rattle(game *g, monster *z) +void mattack::rattle(monster *z) { int j; if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 4 || !g->sees_u(z->posx(), z->posy(), j)) return; // Out of range - z->moves = -20; // It takes a very short while + z->moves -= 20; // It takes a very short while z->sp_timeout = z->type->sp_freq; // Reset timer g->sound(z->posx(), z->posy(), 10, _("a sibilant rattling sound!")); } -void mattack::acid(game *g, monster *z) +void mattack::acid(monster *z) { int t; int junk = 0; @@ -107,7 +106,7 @@ void mattack::acid(game *g, monster *z) !g->m.clear_path(z->posx(), z->posy(), g->u.posx, g->u.posy, 10, 1, 100, junk)) { return; // Can't see/reach you, no attack } - z->moves = -300; // It takes a while + z->moves -= 300; // It takes a while z->sp_timeout = z->type->sp_freq; // Reset timer g->sound(z->posx(), z->posy(), 4, _("a spitting noise.")); int hitx = g->u.posx + rng(-2, 2), hity = g->u.posy + rng(-2, 2); @@ -132,7 +131,7 @@ void mattack::acid(game *g, monster *z) } } -void mattack::shockstorm(game *g, monster *z) +void mattack::shockstorm(monster *z) { int t; int junk = 0; @@ -140,7 +139,7 @@ void mattack::shockstorm(game *g, monster *z) !g->m.clear_path(z->posx(), z->posy(), g->u.posx, g->u.posy, 12, 1, 100, junk)) { return; // Can't see/reach you, no attack } - z->moves = -50; // It takes a while + z->moves -= 50; // It takes a while z->sp_timeout = z->type->sp_freq; // Reset timer g->add_msg(_("A bolt of electricity arcs towards you!")); int tarx = g->u.posx + rng(-1, 1) + rng(-1, 1);// 3 in 9 chance of direct hit, @@ -165,7 +164,7 @@ void mattack::shockstorm(game *g, monster *z) } -void mattack::smokecloud(game *g, monster *z) +void mattack::smokecloud(monster *z) { z->sp_timeout = z->type->sp_freq; // Reset timer const int monx = z->posx(); @@ -200,7 +199,7 @@ void mattack::smokecloud(game *g, monster *z) } } -void mattack::boomer(game *g, monster *z) +void mattack::boomer(monster *z) { int j; if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 3 || @@ -208,7 +207,7 @@ void mattack::boomer(game *g, monster *z) return; // Out of range std::vector line = line_to(z->posx(), z->posy(), g->u.posx, g->u.posy, j); z->sp_timeout = z->type->sp_freq; // Reset timer - z->moves = -250; // It takes a while + z->moves -= 250; // It takes a while bool u_see = g->u_see(z->posx(), z->posy()); if (u_see) g->add_msg(_("The %s spews bile!"), z->name().c_str()); @@ -232,7 +231,7 @@ void mattack::boomer(game *g, monster *z) } } -void mattack::resurrect(game *g, monster *z) +void mattack::resurrect(monster *z) { if (z->speed < z->type->speed / 2) return; // We can only resurrect so many times! @@ -260,7 +259,7 @@ void mattack::resurrect(game *g, monster *z) if (sees_necromancer) g->add_msg(_("The %s throws its arms wide..."), z->name().c_str()); z->sp_timeout = z->type->sp_freq; // Reset timer - z->moves = -500; // It takes a while + z->moves -= 500; // It takes a while int raised = 0; for (int i = 0; i < corpses.size(); i++) { int x = corpses[i].x, y = corpses[i].y; @@ -284,7 +283,7 @@ void mattack::resurrect(game *g, monster *z) g->add_msg(_("...but nothing seems to happen.")); } -void mattack::science(game *g, monster *z) // I said SCIENCE again! +void mattack::science(monster *z) // I said SCIENCE again! { int t, dist = rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy); if (dist > 5 || !g->sees_u(z->posx(), z->posy(), t)) @@ -370,7 +369,7 @@ void mattack::science(game *g, monster *z) // I said SCIENCE again! } } -void mattack::growplants(game *g, monster *z) +void mattack::growplants(monster *z) { for (int i = -3; i <= 3; i++) { for (int j = -3; j <= 3; j++) { @@ -483,7 +482,7 @@ void mattack::growplants(game *g, monster *z) } } -void mattack::grow_vine(game *g, monster *z) +void mattack::grow_vine(monster *z) { z->sp_timeout = z->type->sp_freq; z->moves -= 100; @@ -503,7 +502,7 @@ void mattack::grow_vine(game *g, monster *z) } } -void mattack::vine(game *g, monster *z) +void mattack::vine(monster *z) { std::vector grow; int vine_neighbors = 0; @@ -554,7 +553,7 @@ void mattack::vine(game *g, monster *z) g->add_zombie(vine); } -void mattack::spit_sap(game *g, monster *z) +void mattack::spit_sap(monster *z) { // TODO: Friendly biollantes? int t = 0; @@ -611,7 +610,7 @@ void mattack::spit_sap(game *g, monster *z) g->u.add_disease("sap", dam); } -void mattack::triffid_heartbeat(game *g, monster *z) +void mattack::triffid_heartbeat(monster *z) { g->sound(z->posx(), z->posy(), 14, _("thu-THUMP.")); z->moves -= 300; @@ -665,10 +664,10 @@ void mattack::triffid_heartbeat(game *g, monster *z) } } -void mattack::fungus(game *g, monster *z) +void mattack::fungus(monster *z) { // TODO: Infect NPCs? - z->moves = -200; // It takes a while + z->moves -= 200; // It takes a while z->sp_timeout = z->type->sp_freq; // Reset timer monster spore(GetMType("mon_spore")); int sporex, sporey; @@ -693,7 +692,7 @@ void mattack::fungus(game *g, monster *z) g->add_msg(_("The %s is covered in tiny spores!"), g->zombie(mondex).name().c_str()); } - if (!g->zombie(mondex).make_fungus(g)) { + if (!g->zombie(mondex).make_fungus()) { g->kill_mon(mondex, (z->friendly != 0)); } } else if (g->u.posx == sporex && g->u.posy == sporey) { @@ -729,7 +728,7 @@ void mattack::fungus(game *g, monster *z) } } -void mattack::fungus_growth(game *g, monster *z) +void mattack::fungus_growth(monster *z) { // Young fungaloid growing into an adult if (g->u_see(z->posx(), z->posy())) { @@ -739,7 +738,7 @@ void mattack::fungus_growth(game *g, monster *z) z->poly(GetMType("mon_fungaloid")); } -void mattack::fungus_sprout(game *g, monster *z) +void mattack::fungus_sprout(monster *z) { z->sp_timeout = z->type->sp_freq; // Reset timer for (int x = z->posx() - 1; x <= z->posx() + 1; x++) { @@ -757,7 +756,7 @@ void mattack::fungus_sprout(game *g, monster *z) } } -void mattack::leap(game *g, monster *z) +void mattack::leap(monster *z) { int linet = 0; std::vector options; @@ -818,7 +817,7 @@ void mattack::leap(game *g, monster *z) } } -void mattack::dermatik(game *g, monster *z) +void mattack::dermatik(monster *z) { if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 1) { return; // Too far to implant @@ -870,7 +869,7 @@ void mattack::dermatik(game *g, monster *z) g->u.add_memorial_log(_("Injected with dermatik eggs.")); } -void mattack::dermatik_growth(game *g, monster *z) +void mattack::dermatik_growth(monster *z) { // Dermatik larva growing into an adult if (g->u_see(z->posx(), z->posy())) { @@ -880,7 +879,7 @@ void mattack::dermatik_growth(game *g, monster *z) z->poly(GetMType("mon_dermatik")); } -void mattack::plant(game *g, monster *z) +void mattack::plant(monster *z) { // Spores taking seed and growing into a fungaloid if (!g->spread_fungus(z->posx(), z->posy()) && one_in(20)) { @@ -889,7 +888,7 @@ void mattack::plant(game *g, monster *z) z->name().c_str()); } z->poly(GetMType("mon_fungaloid_young")); - z->moves = -1000; // It takes a while + z->moves -= 1000; // It takes a while } else { if (g->u_see(z->posx(), z->posy())) { g->add_msg(_("The %s falls to the ground and bursts!"), @@ -899,12 +898,13 @@ void mattack::plant(game *g, monster *z) } } -void mattack::disappear(game *g, monster *z) +void mattack::disappear(monster *z) { - z->hp = 0; + (void)g; //unused + z->hp = 0; } -void mattack::formblob(game *g, monster *z) +void mattack::formblob(monster *z) { bool didit = false; int thatmon = -1; @@ -949,14 +949,14 @@ void mattack::formblob(game *g, monster *z) if (didit) { // We did SOMEthing. if (z->type->id == "mon_blob" && z->speed <= 50) // We shrank! z->poly(GetMType("mon_blob")); - z->moves = -500; + z->moves -= 500; z->sp_timeout = z->type->sp_freq; // Reset timer return; } } } -void mattack::dogthing(game *g, monster *z) +void mattack::dogthing(monster *z) { if (!one_in(3) || !g->u_see(z)) return; @@ -975,7 +975,7 @@ void mattack::dogthing(game *g, monster *z) z->poly(GetMType("mon_headless_dog_thing")); } -void mattack::tentacle(game *g, monster *z) +void mattack::tentacle(monster *z) { int t; if (!g->sees_u(z->posx(), z->posy(), t)) @@ -1011,7 +1011,7 @@ void mattack::tentacle(game *g, monster *z) g->u.practice(g->turn, "dodge", z->type->melee_skill); } -void mattack::vortex(game *g, monster *z) +void mattack::vortex(monster *z) { // Make sure that the player's butchering is interrupted! if (g->u.activity.type == ACT_BUTCHER && @@ -1175,7 +1175,7 @@ void mattack::vortex(game *g, monster *z) } // Done with loop! } -void mattack::gene_sting(game *g, monster *z) +void mattack::gene_sting(monster *z) { int j; if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 7 || @@ -1188,7 +1188,7 @@ void mattack::gene_sting(game *g, monster *z) g->u.mutate(g); } -void mattack::para_sting(game *g, monster *z) +void mattack::para_sting(monster *z) { int j; if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 4 || @@ -1204,7 +1204,7 @@ void mattack::para_sting(game *g, monster *z) g->u.add_disease("paralyzepoison", 50, false, 1, 20, 100); } -void mattack::triffid_growth(game *g, monster *z) +void mattack::triffid_growth(monster *z) { // Young triffid growing into an adult if (g->u_see(z->posx(), z->posy())) { @@ -1214,7 +1214,7 @@ void mattack::triffid_growth(game *g, monster *z) z->poly(GetMType("mon_triffid")); } -void mattack::stare(game *g, monster *z) +void mattack::stare(monster *z) { z->moves -= 200; z->sp_timeout = z->type->sp_freq; @@ -1235,7 +1235,7 @@ void mattack::stare(game *g, monster *z) } } -void mattack::fear_paralyze(game *g, monster *z) +void mattack::fear_paralyze(monster *z) { if (g->u_see(z->posx(), z->posy())) { z->sp_timeout = z->type->sp_freq; // Reset timer @@ -1251,7 +1251,7 @@ void mattack::fear_paralyze(game *g, monster *z) } } -void mattack::photograph(game *g, monster *z) +void mattack::photograph(monster *z) { int t; if (z->faction_id == -1 || @@ -1266,7 +1266,7 @@ void mattack::photograph(game *g, monster *z) g->levx, g->levy); } -void mattack::tazer(game *g, monster *z) +void mattack::tazer(monster *z) { int j; if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 2 || @@ -1274,14 +1274,14 @@ void mattack::tazer(game *g, monster *z) return; // Out of range if (g->u.uncanny_dodge()) { return; } z->sp_timeout = z->type->sp_freq; // Reset timer - z->moves = -200; // It takes a while + z->moves -= 200; // It takes a while g->add_msg(_("The %s shocks you!"), z->name().c_str()); int shock = rng(1, 5); g->u.hurt(g, bp_torso, -1, shock * rng(1, 3)); g->u.moves -= shock * 20; } -void mattack::smg(game *g, monster *z) +void mattack::smg(monster *z) { int t, fire_t = 0; if (z->friendly != 0) { // Attacking monsters, not the player! @@ -1336,7 +1336,7 @@ void mattack::smg(game *g, monster *z) } return; } - z->moves = -150; // It takes a while + z->moves -= 150; // It takes a while if (g->u_see(z->posx(), z->posy())) g->add_msg(_("The %s fires its smg!"), z->name().c_str()); npc tmp; @@ -1351,8 +1351,8 @@ void mattack::smg(game *g, monster *z) tmp.str_cur = 16; tmp.dex_cur = 8; tmp.per_cur = 12; - tmp.weapon = item(g->itypes["smg_9mm"], 0); - tmp.weapon.curammo = dynamic_cast(g->itypes["9mm"]); + tmp.weapon = item(itypes["smg_9mm"], 0); + tmp.weapon.curammo = dynamic_cast(itypes["9mm"]); tmp.weapon.charges = 10; std::vector traj = line_to(z->posx(), z->posy(), target->posx(), target->posy(), fire_t); @@ -1373,7 +1373,7 @@ void mattack::smg(game *g, monster *z) z->moves -= 100; return; } - z->moves = -150; // It takes a while + z->moves -= 150; // It takes a while if (g->u_see(z->posx(), z->posy())) g->add_msg(_("The %s fires its smg!"), z->name().c_str()); @@ -1390,22 +1390,22 @@ void mattack::smg(game *g, monster *z) tmp.str_cur = 16; tmp.dex_cur = 8; tmp.per_cur = 12; - tmp.weapon = item(g->itypes["smg_9mm"], 0); - tmp.weapon.curammo = dynamic_cast(g->itypes["9mm"]); + tmp.weapon = item(itypes["smg_9mm"], 0); + tmp.weapon.curammo = dynamic_cast(itypes["9mm"]); tmp.weapon.charges = 10; std::vector traj = line_to(z->posx(), z->posy(), g->u.posx, g->u.posy, t); g->fire(tmp, g->u.posx, g->u.posy, traj, true); z->add_effect(ME_TARGETED, 3); } -void mattack::flamethrower(game *g, monster *z) +void mattack::flamethrower(monster *z) { int t; if (abs(g->u.posx - z->posx()) > 5 || abs(g->u.posy - z->posy()) > 5 || !g->sees_u(z->posx(), z->posy(), t)) return; // Out of range z->sp_timeout = z->type->sp_freq; // Reset timer - z->moves = -500; // It takes a while + z->moves -= 500; // It takes a while std::vector traj = line_to(z->posx(), z->posy(), g->u.posx, g->u.posy, t); for (int i = 0; i < traj.size(); i++) @@ -1423,7 +1423,7 @@ void mattack::flamethrower(game *g, monster *z) if (!g->u.uncanny_dodge()) { g->u.add_disease("onfire", 8); } } -void mattack::copbot(game *g, monster *z) +void mattack::copbot(monster *z) { int t; bool sees_u = g->sees_u(z->posx(), z->posy(), t); @@ -1444,10 +1444,10 @@ Please put down your weapon.\"")); return; } mattack tmp; - tmp.tazer(g, z); + tmp.tazer(z); } -void mattack::multi_robot(game *g, monster *z) +void mattack::multi_robot(monster *z) { int t, mode = 0; if (!g->sees_u(z->posx(), z->posy(), t)) @@ -1463,13 +1463,13 @@ void mattack::multi_robot(game *g, monster *z) return; // No attacks were valid! switch (mode) { - case 1: this->tazer(g, z); break; - case 2: this->flamethrower(g, z); break; - case 3: this->smg(g, z); break; + case 1: this->tazer(z); break; + case 2: this->flamethrower(z); break; + case 3: this->smg(z); break; } } -void mattack::ratking(game *g, monster *z) +void mattack::ratking(monster *z) { if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 50) { return; @@ -1488,14 +1488,14 @@ void mattack::ratking(game *g, monster *z) } } -void mattack::generator(game *g, monster *z) +void mattack::generator(monster *z) { g->sound(z->posx(), z->posy(), 100, ""); if (int(g->turn) % 10 == 0 && z->hp < z->type->hp) z->hp++; } -void mattack::upgrade(game *g, monster *z) +void mattack::upgrade(monster *z) { std::vector targets; for (int i = 0; i < g->num_zombies(); i++) { @@ -1538,7 +1538,7 @@ void mattack::upgrade(game *g, monster *z) g->add_msg(_("...a zombie becomes a %s!"), target->name().c_str()); } -void mattack::breathe(game *g, monster *z) +void mattack::breathe(monster *z) { z->sp_timeout = z->type->sp_freq; // Reset timer z->moves -= 100; // It takes a while @@ -1573,7 +1573,7 @@ void mattack::breathe(game *g, monster *z) } } -void mattack::bite(game *g, monster *z) { +void mattack::bite(monster *z) { if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 1) { return; } @@ -1615,7 +1615,7 @@ void mattack::bite(game *g, monster *z) { g->u.practice(g->turn, "dodge", z->type->melee_skill); } -void mattack::brandish(game *g, monster *z){ +void mattack::brandish(monster *z){ int linet; if (!g->sees_u(z->posx(), z->posy(), linet)){ return; // Only brandish if we can see you! @@ -1625,7 +1625,7 @@ void mattack::brandish(game *g, monster *z){ g->add_msg("Quiet, quiet"); } -void mattack::flesh_golem(game *g, monster *z) +void mattack::flesh_golem(monster *z) { if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 1) { if (one_in(12)) { @@ -1634,7 +1634,7 @@ void mattack::flesh_golem(game *g, monster *z) !g->sees_u(z->posx(), z->posy(), j)) { return; // Out of range } - z->moves = -200; + z->moves -= 200; z->sp_timeout = z->type->sp_freq; // Reset timer g->sound(z->posx(), z->posy(), 80, _("a terrifying roar that nearly deafens you!")); } @@ -1663,29 +1663,12 @@ void mattack::flesh_golem(game *g, monster *z) g->u.practice(g->turn, "dodge", z->type->melee_skill); } -void mattack::parrot(game *g, monster *z) { - /* let it talk when we're out of range, and it'll wake stuff up. - if (rl_dist(z->posx(), z->posy(), g->u.posx, g->u.posy) > 50) { - return; // Out of range - } - */ +void mattack::parrot(monster *z) +{ if (one_in(20)) { - z->moves = -100; // It takes a while + z->moves -= 100; // It takes a while z->sp_timeout = z->type->sp_freq; // Reset timer - // parrotVector should never have size < 1, but just in case: - if (parrotVector.size() == 0) { return; } - int index = rng(0, parrotVector.size() - 1); - SpeechBubble speech = parrotVector[index]; + const SpeechBubble speech = get_speech( "migo" ); g->sound(z->posx(), z->posy(), speech.volume, speech.text); } } - -void game::load_migo_speech(JsonObject &jo) -{ - std::string sound = _(jo.get_string("sound").c_str()); - int volume = jo.get_int("volume"); - - SpeechBubble speech = {sound, volume}; - - parrotVector.push_back(speech); -} diff --git a/src/monattack.h b/src/monattack.h new file mode 100644 index 0000000000000..efd62bd6423eb --- /dev/null +++ b/src/monattack.h @@ -0,0 +1,54 @@ +#ifndef _MONATTACK_H_ +#define _MONATTACK_H_ + +class mattack { +public: + void none (monster *) {}; + void antqueen (monster *z); + void shriek (monster *z); + void rattle (monster *z); + void acid (monster *z); + void shockstorm (monster *z); + void smokecloud (monster *z); + void boomer (monster *z); + void resurrect (monster *z); + void science (monster *z); + void growplants (monster *z); + void grow_vine (monster *z); + void vine (monster *z); + void spit_sap (monster *z); + void triffid_heartbeat (monster *z); + void fungus (monster *z); + void fungus_growth (monster *z); + void fungus_sprout (monster *z); + void leap (monster *z); + void dermatik (monster *z); + void dermatik_growth (monster *z); + void plant (monster *z); + void disappear (monster *z); + void formblob (monster *z); + void dogthing (monster *z); + void tentacle (monster *z); + void vortex (monster *z); + void gene_sting (monster *z); + void para_sting (monster *z); + void triffid_growth (monster *z); + void stare (monster *z); + void fear_paralyze (monster *z); + void photograph (monster *z); + void tazer (monster *z); + void smg (monster *z); + void flamethrower (monster *z); + void copbot (monster *z); + void multi_robot (monster *z); // Pick from tazer, smg, flame + void ratking (monster *z); + void generator (monster *z); + void upgrade (monster *z); + void breathe (monster *z); + void bite (monster *z); + void brandish (monster *z); + void flesh_golem (monster *z); + void parrot (monster *z); +}; + +#endif diff --git a/mondeath.cpp b/src/mondeath.cpp similarity index 86% rename from mondeath.cpp rename to src/mondeath.cpp index c7450e1c56242..23c7f7feb1645 100644 --- a/mondeath.cpp +++ b/src/mondeath.cpp @@ -8,7 +8,7 @@ #include // rounding #include -void mdeath::normal(game *g, monster *z) { +void mdeath::normal(monster *z) { if (g->u_see(z)) { g->add_msg(_("The %s dies!"), z->name().c_str()); } @@ -42,26 +42,26 @@ void mdeath::normal(game *g, monster *z) { } bool pulverized = (corpseDamage > 5 && overflowDamage > 150); if (!pulverized) { - make_mon_corpse(g, z, int(floor(corpseDamage))); + make_mon_corpse(z, int(floor(corpseDamage))); } else if (monSize >= MS_MEDIUM) { gibAmount += rng(1,6); } // Limit chunking to flesh and veggy creatures until other kinds are supported. bool leaveGibs = (isFleshy || z->made_of("veggy")); if (leaveGibs) { - make_gibs(g, z, gibAmount); + make_gibs( z, gibAmount); } } } -void mdeath::acid(game *g, monster *z) { +void mdeath::acid(monster *z) { if (g->u_see(z)) { g->add_msg(_("The %s's body dissolves into acid."), z->name().c_str()); } g->m.add_field(g, z->posx(), z->posy(), fd_acid, 3); } -void mdeath::boomer(game *g, monster *z) { +void mdeath::boomer(monster *z) { std::string tmp; g->sound(z->posx(), z->posy(), 24, _("a boomer explode!")); for (int i = -1; i <= 1; i++) { @@ -80,7 +80,7 @@ void mdeath::boomer(game *g, monster *z) { } } -void mdeath::kill_vines(game *g, monster *z) { +void mdeath::kill_vines(monster *z) { std::vector vines; std::vector hubs; for (int i = 0; i < g->num_zombies(); i++) { @@ -111,7 +111,7 @@ void mdeath::kill_vines(game *g, monster *z) { } } -void mdeath::vine_cut(game *g, monster *z) { +void mdeath::vine_cut(monster *z) { std::vector vines; for (int x = z->posx() - 1; x <= z->posx() + 1; x++) { for (int y = z->posy() - 1; y <= z->posy() + 1; y++) { @@ -146,15 +146,15 @@ void mdeath::vine_cut(game *g, monster *z) { } } -void mdeath::triffid_heart(game *g, monster *z) { +void mdeath::triffid_heart(monster *z) { if (g->u_see(z)) { g->add_msg(_("The surrounding roots begin to crack and crumble.")); } g->add_event(EVENT_ROOTS_DIE, int(g->turn) + 100); } -void mdeath::fungus(game *g, monster *z) { - mdeath::normal(g, z); +void mdeath::fungus(monster *z) { + mdeath::normal( z); monster spore(GetMType("mon_spore")); bool fungal = false; int mondex = -1; @@ -174,7 +174,7 @@ void mdeath::fungus(game *g, monster *z) { g->add_msg(_("The %s is covered in tiny spores!"), g->zombie(mondex).name().c_str()); } - if (!g->zombie(mondex).make_fungus(g)) { + if (!g->zombie(mondex).make_fungus()) { g->kill_mon(mondex, (z->friendly != 0)); } } else if (g->u.posx == sporex && g->u.posy == sporey) { @@ -211,13 +211,13 @@ void mdeath::fungus(game *g, monster *z) { } } -void mdeath::disintegrate(game *g, monster *z) { +void mdeath::disintegrate(monster *z) { if (g->u_see(z)) { g->add_msg(_("The %s disintegrates!"), z->name().c_str()); } } -void mdeath::worm(game *g, monster *z) { +void mdeath::worm(monster *z) { if (g->u_see(z)) g->add_msg(_("The %s splits in two!"), z->name().c_str()); @@ -246,12 +246,22 @@ void mdeath::worm(game *g, monster *z) { } } -void mdeath::disappear(game *g, monster *z) { +void mdeath::disappear(monster *z) { g->add_msg(_("The %s disappears."), z->name().c_str()); } -void mdeath::guilt(game *g, monster *z) { +void mdeath::guilt(monster *z) { const int MAX_GUILT_DISTANCE = 5; + int kill_count = g->kill_count(z->type->id); + int maxKills = 100; // this is when the player stop caring altogether. + + // different message as we kill more of the same monster + std::string msg = "You feel guilty for killing %s."; // default guilt message + std::map guilt_tresholds; + guilt_tresholds[75] = "You feel ashamed for killing %s."; + guilt_tresholds[50] = "You regret killing %s."; + guilt_tresholds[25] = "You feel remorse for killing %s."; + /* TODO: Replace default cannibal checks with more elaborate conditions, and add a "PSYCHOPATH" trait for terminally guilt-free folk. Guilty cannibals could make for good drama! @@ -267,22 +277,38 @@ void mdeath::guilt(game *g, monster *z) { // We probably didn't kill it return; } + if (kill_count >= maxKills) { + // player no longer cares + if (kill_count == maxKills) { + g->add_msg(_("After killing so many bloody %ss you no longer care " + "about their deaths anymore."), z->name().c_str()); + } + return; + } else { + for (std::map::iterator it = guilt_tresholds.begin(); + it != guilt_tresholds.end(); it++) { + if (kill_count >= it->first) { + msg = it->second; + break; + } + } + } - g->add_msg(_("Killing %s fills you with guilt."), z->name().c_str()); + g->add_msg(_(msg.c_str()), z->name().c_str()); - int moraleMalus = -50; - int maxMalus = -250; - int duration = 300; - int decayDelay = 30; + int moraleMalus = -50 * (1.0 - ((float) kill_count / maxKills)); + int maxMalus = -250 * (1.0 - ((float) kill_count / maxKills)); + int duration = 300 * (1.0 - ((float) kill_count / maxKills)); + int decayDelay = 30 * (1.0 - ((float) kill_count / maxKills)); if (z->type->in_species("ZOMBIE")) { moraleMalus /= 10; } g->u.add_morale(MORALE_KILLED_MONSTER, moraleMalus, maxMalus, duration, decayDelay); } -void mdeath::blobsplit(game *g, monster *z) { +void mdeath::blobsplit(monster *z) { int speed = z->speed - rng(30, 50); - g->m.spawn_item(z->posx(), z->posy(), "slime_scrap", g->turn, 0, 0, rng(5,10)); + g->m.spawn_item(z->posx(), z->posy(), "slime_scrap", 1, 0, g->turn, rng(5,10)); if (speed <= 0) { if (g->u_see(z)) { // TODO: Add vermin-tagged tiny versions of the splattered blob :) @@ -320,13 +346,13 @@ void mdeath::blobsplit(game *g, monster *z) { } } -void mdeath::melt(game *g, monster *z) { +void mdeath::melt(monster *z) { if (g->u_see(z)) { g->add_msg(_("The %s melts away."), z->name().c_str()); } } -void mdeath::amigara(game *g, monster *z) { +void mdeath::amigara(monster *z) { if (!g->u.has_disease("amigara")) { return; } @@ -339,19 +365,19 @@ void mdeath::amigara(game *g, monster *z) { if (count <= 1) { // We're the last! g->u.rem_disease("amigara"); g->add_msg(_("Your obsession with the fault fades away...")); - item art(g->new_artifact(), g->turn); + item art(new_artifact(itypes), g->turn); g->m.add_item_or_charges(z->posx(), z->posy(), art); } - normal(g, z); + normal( z); } -void mdeath::thing(game *g, monster *z) { +void mdeath::thing(monster *z) { monster thing(GetMType("mon_thing")); thing.spawn(z->posx(), z->posy()); g->add_zombie(thing); } -void mdeath::explode(game *g, monster *z) { +void mdeath::explode(monster *z) { int size = 0; switch (z->type->size) { case MS_TINY: @@ -368,7 +394,7 @@ void mdeath::explode(game *g, monster *z) { g->explosion(z->posx(), z->posy(), size, 0, false); } -void mdeath::ratking(game *g, monster *z) { +void mdeath::ratking(monster *z) { g->u.rem_disease("rat"); if (g->u_see(z)) { g->add_msg(_("Rats suddenly swarm into view.")); @@ -396,7 +422,7 @@ void mdeath::ratking(game *g, monster *z) { } } -void mdeath::smokeburst(game *g, monster *z) { +void mdeath::smokeburst(monster *z) { std::string tmp; g->sound(z->posx(), z->posy(), 24, _("a smoker explode!")); for (int i = -1; i <= 1; i++) { @@ -412,9 +438,9 @@ void mdeath::smokeburst(game *g, monster *z) { } // this function generates clothing for zombies -void mdeath::zombie(game *g, monster *z) { +void mdeath::zombie(monster *z) { // normal death function first - mdeath::normal(g, z); + mdeath::normal( z); // skip clothing generation if the zombie was rezzed rather than spawned if (z->no_extra_death_drops) { @@ -471,7 +497,7 @@ void mdeath::zombie(game *g, monster *z) { break; case 4: // mon_zombie_hulk - g->m.spawn_item(z->posx(), z->posy(), "rag", g->turn, 0, 0, rng(5,10)); + g->m.spawn_item(z->posx(), z->posy(), "rag", 1, 0, g->turn, rng(5,10)); g->m.put_items_from("pants", 1, z->posx(), z->posy(), g->turn, 0, 0, rng(1,4)); break; @@ -488,12 +514,14 @@ void mdeath::zombie(game *g, monster *z) { } } -void mdeath::gameover(game *g, monster *z) { +void mdeath::gameover(monster *z) { g->add_msg(_("The %s was destroyed! GAME OVER!"), z->name().c_str()); g->u.hp_cur[hp_torso] = 0; } -void mdeath::kill_breathers(game *g, monster *z) { +void mdeath::kill_breathers(monster *z) +{ + (void)z; //unused for (int i = 0; i < g->num_zombies(); i++) { const std::string monID = g->zombie(i).type->id; if (monID == "mon_breather_hub " || monID == "mon_breather") { @@ -502,7 +530,7 @@ void mdeath::kill_breathers(game *g, monster *z) { } } -void make_gibs(game* g, monster* z, int amount) { +void make_gibs(monster* z, int amount) { if (amount <= 0) { return; } @@ -531,10 +559,10 @@ void make_gibs(game* g, monster* z, int amount) { } } -void make_mon_corpse(game* g, monster* z, int damageLvl) { +void make_mon_corpse(monster* z, int damageLvl) { const int MAX_DAM = 4; item corpse; - corpse.make_corpse(g->itypes["corpse"], z->type, g->turn); + corpse.make_corpse(itypes["corpse"], z->type, g->turn); corpse.damage = damageLvl > MAX_DAM ? MAX_DAM : damageLvl; g->m.add_item_or_charges(z->posx(), z->posy(), corpse); } diff --git a/src/mondeath.h b/src/mondeath.h new file mode 100644 index 0000000000000..19def52a370a7 --- /dev/null +++ b/src/mondeath.h @@ -0,0 +1,38 @@ +#ifndef _MONDEATH_H_ +#define _MONDEATH_H_ + +class monster; + +class mdeath +{ +public: + void normal (monster *z); // Drop a body + void acid (monster *z); // Acid instead of a body + void boomer (monster *z); // Explodes in vomit :3 + void kill_vines (monster *z); // Kill all nearby vines + void vine_cut (monster *z); // Kill adjacent vine if it's cut + void triffid_heart (monster *z); // Destroy all roots + void fungus (monster *z); // Explodes in spores D: + void disintegrate (monster *z); // Falls apart + void shriek (monster *z); // Screams loudly + void rattle (monster *z); // Rattles like a rattlesnake + void worm (monster *z); // Spawns 2 half-worms + void disappear (monster *z); // Hallucination disappears + void guilt (monster *z); // Morale penalty + void blobsplit (monster *z); // Creates more blobs + void melt (monster *z); // Normal death, but melts + void amigara (monster *z); // Removes hypnosis if last one + void thing (monster *z); // Turn into a full thing + void explode (monster *z); // Damaging explosion + void ratking (monster *z); // Cure verminitis + void kill_breathers (monster *z); // All breathers die + void smokeburst (monster *z); // Explode like a huge smoke bomb. + void zombie (monster *z); // generate proper clothing for zombies + + void gameover (monster *z); // Game over! Defense mode +}; + +void make_mon_corpse(monster* z, int damageLvl); +void make_gibs(monster* z, int amount); + +#endif diff --git a/mongroup.h b/src/mongroup.h similarity index 95% rename from mongroup.h rename to src/mongroup.h index 010621021a56d..35eebff19b6ff 100644 --- a/mongroup.h +++ b/src/mongroup.h @@ -88,8 +88,8 @@ struct mongroup { class MonsterGroupManager { public: static void LoadMonsterGroup(JsonObject &jo); - static MonsterGroupResult GetResultFromGroup(std::string, std::vector *, - int *quantity = 0, int turn = -1); + static MonsterGroupResult GetResultFromGroup(std::string, + int *quantity = 0, int turn = -1); static bool IsMonsterInGroup(std::string, std::string); static std::string Monster2Group(std::string); static std::vector GetMonstersFromGroup(std::string); diff --git a/mongroupdef.cpp b/src/mongroupdef.cpp similarity index 83% rename from mongroupdef.cpp rename to src/mongroupdef.cpp index f5f062a78fe5e..bf07469865667 100644 --- a/mongroupdef.cpp +++ b/src/mongroupdef.cpp @@ -30,8 +30,8 @@ std::map MonsterGroupManager::monsterGroupMap; //Quantity is adjusted directly as a side effect of this function -MonsterGroupResult MonsterGroupManager::GetResultFromGroup( std::string group_name, std::vector *mtypes, - int *quantity, int turn ) +MonsterGroupResult MonsterGroupManager::GetResultFromGroup( + std::string group_name, int *quantity, int turn ) { int spawn_chance = rng(1, 1000); MonsterGroup group = monsterGroupMap[group_name]; @@ -58,57 +58,61 @@ MonsterGroupResult MonsterGroupManager::GetResultFromGroup( std::string group_na valid_entry = valid_entry && (HOURS(it->starts) < g->turn.get_turn()); valid_entry = valid_entry && (it->lasts_forever() || HOURS(it->ends) > g->turn.get_turn()); - //Check to insure the various conditions for this spawn definition are met + std::vector > valid_times_of_day; + bool season_limited = false; + bool season_matched = false; + //Collect the various spawn conditions, and then insure they are met appropriately for(std::vector::iterator condition = it->conditions.begin(); condition != it->conditions.end(); ++condition){ - if((*condition) == "DAY"){ - //Unless day, invalid - if(!(g->turn.get_turn() > g->turn.sunrise().get_turn() && g->turn.get_turn() < g->turn.sunset().get_turn())){ - valid_entry = false; - } - } else if((*condition) == "NIGHT"){ - //Unless night, invalid - if( !(g->turn.get_turn() < g->turn.sunrise().get_turn() || g->turn.get_turn() > g->turn.sunset().get_turn()) ){ - valid_entry = false; - } - } else if((*condition) == "DUSK"){ - //Unless we're a certain distance from sundown - if( !(g->turn.get_turn() > (g->turn.sunset().get_turn()-HOURS(1) ) && - g->turn.get_turn() < (g->turn.sunset().get_turn()+HOURS(1) )) ){ - valid_entry = false; - } - } else if((*condition) == "DAWN"){ - //Unless we're a certain distance from sunup - if( !(g->turn.get_turn() > (g->turn.sunrise().get_turn()-HOURS(1) ) && - g->turn.get_turn() < (g->turn.sunrise().get_turn()+HOURS(1) )) ){ - valid_entry = false; - } - } else if((*condition) == "TWILIGHT"){ - //Unless we're a certain distance from sunup OR sundown - if(!((g->turn.get_turn() > (g->turn.sunset().get_turn()-HOURS(1) ) && - g->turn.get_turn() < (g->turn.sunset().get_turn()+HOURS(1) ))|| //dusk OR - (g->turn.get_turn() > (g->turn.sunrise().get_turn()-HOURS(1) ) && //dawn - g->turn.get_turn() < (g->turn.sunrise().get_turn()+HOURS(1) )))){ - valid_entry = false; + //Collect valid time of day ranges + if( (*condition) == "DAY" || (*condition) == "NIGHT" || (*condition) == "DUSK" || (*condition) == "DAWN" ){ + int sunset = g->turn.sunset().get_turn(); + int sunrise = g->turn.sunrise().get_turn(); + if((*condition) == "DAY"){ + valid_times_of_day.push_back( std::make_pair(sunrise,sunset) ); + } else if((*condition) == "NIGHT"){ + valid_times_of_day.push_back( std::make_pair(sunset,sunrise) ); + } else if((*condition) == "DUSK"){ + valid_times_of_day.push_back( std::make_pair(sunset-HOURS(1),sunset+HOURS(1)) ); + } else if((*condition) == "DAWN"){ + valid_times_of_day.push_back( std::make_pair(sunrise-HOURS(1),sunrise+HOURS(1)) ); } } - if((*condition) == "SUMMER"){ - if(g->turn.get_season() != SUMMER){ - valid_entry = false; + + //If we have any seasons listed, we know to limit by season, and if any season matches this season, we are good to spawn + if( (*condition) == "SUMMER" || (*condition) == "WINTER" || (*condition) == "SPRING" || (*condition) == "AUTUMN" ){ + season_limited = true; + if( (g->turn.get_season() == SUMMER && (*condition) == "SUMMER") || + (g->turn.get_season() == WINTER && (*condition) == "WINTER") || + (g->turn.get_season() == SPRING && (*condition) == "SPRING") || + (g->turn.get_season() == AUTUMN && (*condition) == "AUTUMN") ){ + season_matched = true; } - } else if((*condition) == "WINTER"){ - if(g->turn.get_season() != WINTER){ - valid_entry = false; - } - } else if((*condition) == "AUTUMN"){ - if(g->turn.get_season() != AUTUMN){ - valid_entry = false; - } - } else if((*condition) == "SPRING"){ - if(g->turn.get_season() != SPRING){ - valid_entry = false; + } + } + + //Make sure the current time of day is within one of the valid time ranges for this spawn + bool is_valid_time_of_day = false; + if(valid_times_of_day.size() < 1){ + //Then it can spawn whenever, since no times were defined + is_valid_time_of_day = true; + } else { + //Otherwise, it's valid if it matches any of the times of day + for(std::vector >::iterator time_pair = valid_times_of_day.begin(); time_pair != valid_times_of_day.end(); ++time_pair){ + int time_now = g->turn.get_turn(); + if(time_now > time_pair->first && time_now < time_pair->second){ + is_valid_time_of_day = true; } } } + if(!is_valid_time_of_day){ + valid_entry = false; + } + + //If we are limited by season, make sure we matched a season + if(season_limited && !season_matched){ + valid_entry = false; + } + //If the entry was valid, check to see if we actually spawn it if(valid_entry){ //If the monsters frequency is greater than the spawn_chance, select this spawn rule diff --git a/monitemsdef.cpp b/src/monitemsdef.cpp similarity index 98% rename from monitemsdef.cpp rename to src/monitemsdef.cpp index e63b55eb0a3fb..624b552ba20be 100644 --- a/monitemsdef.cpp +++ b/src/monitemsdef.cpp @@ -34,7 +34,7 @@ void game::init_monitems() { setvector(&monitems["mon_zombie_cop"], "cop_weapons", 20, NULL); setvector(&monitems["mon_zombie_scientist"], - "harddrugs", 6, "chemistry", 10, + "harddrugs", 6, "chem_lab", 10, "teleport", 6, "goo", 8, "cloning_vat", 1, "dissection", 10, "electronics", 9, "bionics", 1, "radio", 2, "textbooks", 3, NULL); diff --git a/monmove.cpp b/src/monmove.cpp similarity index 98% rename from monmove.cpp rename to src/monmove.cpp index 8a6f379f56fe7..27edceacaf5a5 100644 --- a/monmove.cpp +++ b/src/monmove.cpp @@ -235,7 +235,7 @@ void monster::move(game *g) if (sp_timeout == 0 && (friendly == 0 || has_flag(MF_FRIENDLY_SPECIAL))) { mattack ma; if(!is_hallucination()) { - (ma.*type->sp_attack)(g, this); + (ma.*type->sp_attack)(this); } } if (moves < 0) { @@ -592,8 +592,13 @@ void monster::hit_player(game *g, player &p, bool can_grab) p.name.c_str(), body_part_name(bphit, side).c_str()); } } else { - g->add_msg(_("The %1$s hits your %2$s."), name().c_str(), + if ( g->u_see(this) ) { + g->add_msg(_("The %1$s hits your %2$s."), name().c_str(), body_part_name(bphit, side).c_str()); + } else { + g->add_msg(_("Something hits your %s."), + body_part_name(bphit, side).c_str()); + } } } @@ -966,7 +971,7 @@ int monster::move_to(game *g, int x, int y, bool force) trap* tr = g->traps[g->m.tr_at(posx(), posy())]; if (dice(3, type->sk_dodge + 1) < dice(3, tr->avoidance)) { trapfuncm f; - (f.*(tr->actm))(g, this, posx(), posy()); + (f.*(tr->actm))(this, posx(), posy()); } } // Diggers turn the dirt into dirtmound diff --git a/monster.cpp b/src/monster.cpp similarity index 92% rename from monster.cpp rename to src/monster.cpp index afb4ec7aa734a..fb890ac7c6c85 100644 --- a/monster.cpp +++ b/src/monster.cpp @@ -13,8 +13,7 @@ #include #include "cursesdef.h" #include "monstergenerator.h" - -#include "picofunc.h" +#include "json.h" #define SGN(a) (((a)<0) ? -1 : 1) #define SQR(a) ((a)*(a)) @@ -44,6 +43,7 @@ monster::monster() unique_name = ""; hallucination = false; ignoring = 0; + keep = 0; } monster::monster(mtype *t) @@ -174,7 +174,7 @@ std::string monster::name_with_armor() return ret; } -void monster::print_info(game *g, WINDOW* w, int vStart, int vLines) +int monster::print_info(game *g, WINDOW* w, int vStart, int vLines, int column) { // First line of w is the border; the next two are terrain info, and after that // is a blank line. w is 13 characters tall, and we can't use the last one @@ -185,7 +185,7 @@ void monster::print_info(game *g, WINDOW* w, int vStart, int vLines) const int vEnd = vStart + vLines; - mvwprintz(w, vStart, 1, c_white, "%s ", type->name.c_str()); + mvwprintz(w, vStart++, column, c_white, "%s ", type->name.c_str()); switch (attitude(&(g->u))) { case MATT_FRIEND: wprintz(w, h_white, _("Friendly! ")); @@ -233,13 +233,14 @@ void monster::print_info(game *g, WINDOW* w, int vStart, int vLines) damage_info = _("it is nearly dead"); col = c_red; } - mvwprintz(w, vStart+1, 1, col, damage_info.c_str()); + mvwprintz(w, vStart++, column, col, damage_info.c_str()); - int line = vStart + 2; - std::vector lines = foldstring(type->description, getmaxx(w) - 2); + std::vector lines = foldstring(type->description, getmaxx(w) - 1 - column); int numlines = lines.size(); - for (int i = 0; i < numlines && line <= vEnd; i++, line++) - mvwprintz(w, line, 1, c_white, lines[i].c_str()); + for (int i = 0; i < numlines && vStart <= vEnd; i++) + mvwprintz(w, vStart++, column, c_white, lines[i].c_str()); + + return vStart; } char monster::symbol() @@ -341,22 +342,20 @@ bool monster::made_of(phase_id p) return false; } -void monster::load_info(std::string data, std::vector *mtypes) +void monster::load_info(std::string data) { std::stringstream dump; dump << data; if ( dump.peek() == '{' ) { - picojson::value pdata; - dump >> pdata; - std::string jsonerr = picojson::get_last_error(); - if ( ! jsonerr.empty() ) { + JsonIn jsin(&dump); + try { + deserialize(jsin); + } catch (std::string jsonerr) { debugmsg("Bad monster json\n%s", jsonerr.c_str() ); - } else { - json_load(pdata, mtypes); } return; } else { - load_legacy(mtypes, dump); + load_legacy(dump); } } @@ -366,7 +365,8 @@ void monster::load_info(std::string data, std::vector *mtypes) */ std::string monster::save_info() { - return json_save(true).serialize(); + // saves contents + return serialize(); } void monster::debug(player &u) @@ -552,60 +552,60 @@ int monster::trigger_sum(game *g, std::set *triggers) } int monster::hit(game *g, player &p, body_part &bp_hit) { - int ret = 0; - int highest_hit = 0; + int ret = 0; + int highest_hit = 0; //If the player is knocked down or the monster can fly, any body part is a valid target if(p.is_on_ground() || has_flag(MF_FLIES)){ highest_hit = 20; - } + } else { - switch (type->size) { - case MS_TINY: - highest_hit = 3; - break; - case MS_SMALL: - highest_hit = 12; - break; - case MS_MEDIUM: - highest_hit = 20; - break; - case MS_LARGE: - highest_hit = 28; - break; - case MS_HUGE: - highest_hit = 35; - break; - } + switch (type->size) { + case MS_TINY: + highest_hit = 3; + break; + case MS_SMALL: + highest_hit = 12; + break; + case MS_MEDIUM: + highest_hit = 20; + break; + case MS_LARGE: + highest_hit = 28; + break; + case MS_HUGE: + highest_hit = 35; + break; + } if (digging()){ - highest_hit -= 8; + highest_hit -= 8; } if (highest_hit <= 1){ - highest_hit = 2; + highest_hit = 2; } } if (highest_hit > 20){ - highest_hit = 20; + highest_hit = 20; } - - int bp_rand = rng(0, highest_hit - 1); + + int bp_rand = rng(0, highest_hit - 1); if (bp_rand <= 2){ - bp_hit = bp_legs; + bp_hit = bp_legs; } else if (bp_rand <= 10){ - bp_hit = bp_torso; + bp_hit = bp_torso; } else if (bp_rand <= 14){ - bp_hit = bp_arms; + bp_hit = bp_arms; } else if (bp_rand <= 16){ - bp_hit = bp_mouth; + bp_hit = bp_mouth; } else if (bp_rand == 17){ - bp_hit = bp_eyes; + bp_hit = bp_eyes; } else{ - bp_hit = bp_head; + bp_hit = bp_head; } - ret += dice(type->melee_dice, type->melee_sides); - return ret; + ret += dice(type->melee_dice, type->melee_sides); + return ret; } void monster::hit_monster(game *g, int i) @@ -746,10 +746,10 @@ void monster::die(game *g) mdeath md; if(is_hallucination()) { //Hallucinations always just disappear - md.disappear(g, this); + md.disappear(this); return; } else { - (md.*type->dies)(g, this); + (md.*type->dies)(this); } // If our species fears seeing one of our own die, process that int anger_adjust = 0, morale_adjust = 0; @@ -808,7 +808,7 @@ void monster::drop_items_on_death(game *g) // We have selected a string representing an item group, now // get a random item tag from it and spawn it. Item_tag selected_item = item_controller->id_from(it[selected_location].loc); - g->m.spawn_item(_posx, _posy, selected_item, 0); + g->m.spawn_item(_posx, _posy, selected_item); if (type->item_chance < 0) { @@ -882,7 +882,7 @@ void monster::process_effects(game *g) } } -bool monster::make_fungus(game *g) +bool monster::make_fungus() { char polypick = 0; std::string tid = type->id; @@ -930,3 +930,13 @@ bool monster::is_hallucination() { return hallucination; } + +bool monster::getkeep() +{ + return keep; +} + +void monster::setkeep(bool r) +{ + keep = r; +} diff --git a/monster.h b/src/monster.h similarity index 91% rename from monster.h rename to src/monster.h index 21d43ce77a12d..c19e713cce82f 100644 --- a/monster.h +++ b/src/monster.h @@ -46,7 +46,8 @@ struct monster_effect monster_effect(monster_effect_type T, int D) : type (T), duration (D) {} }; -class monster { +class monster : public JsonSerializer, public JsonDeserializer +{ friend class editmap; public: monster(); @@ -56,10 +57,14 @@ class monster { void poly(mtype *t); void spawn(int x, int y); // All this does is moves the monster to x,y + bool keep; // Variable to track newly loaded monsters so they don't go kaput. + bool getkeep(); + void setkeep(bool r); + // Access std::string name(); // Returns the monster's formal name std::string name_with_armor(); // Name, with whatever our armor is called - void print_info(game *g, WINDOW* w, int vStart = 6, int vLines = 5); // Prints information to w. + int print_info(game *g, WINDOW* w, int vStart = 6, int vLines = 5, int column = 1); // Prints information to w. char symbol(); // Just our type's symbol; no context void draw(WINDOW* w, int plx, int ply, bool inv); nc_color color_with_effects(); // Color with fire, beartrapped, etc. @@ -73,12 +78,16 @@ class monster { int vision_range(int x, int y); // Returns monster vision range, x and y are the target spot bool made_of(std::string m); // Returns true if it's made of m bool made_of(phase_id p); // Returns true if its phase is p - bool json_load(picojson::value parsed, std::vector *mtypes); - void json_load(picojson::value parsed, game * g); - void load_legacy(std::vector *mtypes, std::stringstream & dump); - void load_info(std::string data, std::vector *mtypes); - virtual picojson::value json_save(bool save_contents = false); + void load_legacy(std::stringstream & dump); + void load_info(std::string data); + + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const { serialize(jsout, true); } + virtual void serialize(JsonOut &jsout, bool save_contents) const; + using JsonDeserializer::deserialize; + virtual void deserialize(JsonIn &jsin); + std::string save_info(); // String of all data, for save files void debug(player &u); // Gives debug info @@ -184,7 +193,7 @@ class monster { bool has_effect(monster_effect_type effect); // True if we have the effect void rem_effect(monster_effect_type effect); // Remove a given effect void process_effects(game *g); // Process long-term effects - bool make_fungus(game *g); // Makes this monster into a fungus version + bool make_fungus(); // Makes this monster into a fungus version // Returns false if no such monster exists void make_friendly(); void add_item(item it); // Add an item to inventory @@ -222,6 +231,11 @@ class monster { inline int posy() const { return _posy; } short ignoring; + + // Stair data. + bool onstairs; + int staircount; + private: std::vector plans; int _posx, _posy; diff --git a/monstergenerator.cpp b/src/monstergenerator.cpp similarity index 100% rename from monstergenerator.cpp rename to src/monstergenerator.cpp diff --git a/monstergenerator.h b/src/monstergenerator.h similarity index 96% rename from monstergenerator.h rename to src/monstergenerator.h index 9f39a14628c0a..02f8f5faebf21 100644 --- a/monstergenerator.h +++ b/src/monstergenerator.h @@ -7,8 +7,8 @@ #include #include -typedef void (mdeath::*MonDeathFunction)(game*, monster*); -typedef void (mattack::*MonAttackFunction)(game*, monster*); +typedef void (mdeath::*MonDeathFunction)(monster*); +typedef void (mattack::*MonAttackFunction)(monster*); #define GetMType(x) MonsterGenerator::generator().get_mtype(x) diff --git a/morale.h b/src/morale.h similarity index 61% rename from morale.h rename to src/morale.h index e0da84d92b72d..67bf13cf5be01 100644 --- a/morale.h +++ b/src/morale.h @@ -1,6 +1,8 @@ #ifndef _MORALE_H_ #define _MORALE_H_ +#include "itype.h" +#include "json.h" #include #define MIN_MORALE_READ (-40) @@ -50,8 +52,9 @@ enum morale_type NUM_MORALE_TYPES }; -struct morale_point +class morale_point : public JsonSerializer, public JsonDeserializer { +public: morale_type type; itype *item_type; int bonus; @@ -63,6 +66,34 @@ struct morale_point int D = 60, int DS = 30, int A = 0) : type (T), item_type (I), bonus (B), duration(D), decay_start(DS), age(A) {}; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + type = (morale_type)jo.get_int("type_enum"); + std::string tmpitype; + if ( jo.read_into("item_type", tmpitype) && + itypes.find(tmpitype) != itypes.end() ) { + item_type = itypes[tmpitype]; + } + jo.read_into("bonus", bonus); + jo.read_into("duration", duration); + jo.read_into("decay_start", decay_start); + jo.read_into("age", age); + } + using JsonSerializer::serialize; + void serialize(JsonOut &json) const { + json.start_object(); + json.member("type_enum", (int)type); + if (item_type != NULL) { + json.member("item_type", item_type->id); + } + json.member("bonus", bonus); + json.member("duration", duration); + json.member("decay_start", decay_start); + json.member("age", age); + json.end_object(); + } + std::string name(std::string morale_data[]) { // Start with the morale type's description. diff --git a/moraledata.h b/src/moraledata.h similarity index 100% rename from moraledata.h rename to src/moraledata.h diff --git a/mtype.h b/src/mtype.h similarity index 98% rename from mtype.h rename to src/mtype.h index 32829b2e915f3..f89a33a91d421 100644 --- a/mtype.h +++ b/src/mtype.h @@ -14,8 +14,6 @@ #include "enums.h" #include "color.h" -class mdeath; - /* On altering any entries in this enum please add or remove the appropriate entry to the monster_names array in tile_id_data.h */ @@ -228,8 +226,8 @@ struct mtype { float luminance; // 0 is default, >0 gives luminance to lightmap int hp; unsigned int sp_freq; // How long sp_attack takes to charge - void (mdeath::*dies)(game *, monster *); // What happens when this monster dies - void (mattack::*sp_attack)(game *, monster *); // This monster's special attack + void (mdeath::*dies)(monster *); // What happens when this monster dies + void (mattack::*sp_attack)(monster *); // This monster's special attack // Default constructor mtype (); diff --git a/mtypedef.cpp b/src/mtypedef.cpp similarity index 91% rename from mtypedef.cpp rename to src/mtypedef.cpp index 88ee41aca54e9..8709fd56e0fdb 100644 --- a/mtypedef.cpp +++ b/src/mtypedef.cpp @@ -1,8 +1,5 @@ -#include "game.h" -#include "mondeath.h" -#include "monattack.h" -#include "itype.h" -#include "setvector.h" +#include "mtype.h" +#include "translations.h" mtype::mtype () { id = "mon_null"; diff --git a/mutation.cpp b/src/mutation.cpp similarity index 99% rename from mutation.cpp rename to src/mutation.cpp index ffa1ea09e2aea..422f10685d776 100644 --- a/mutation.cpp +++ b/src/mutation.cpp @@ -391,7 +391,7 @@ void mutation_effect(game *g, player &p, std::string mut) destroy = true; bps.push_back(bp_mouth); - } else if (mut == "HOOVES") { + } else if (mut == "HOOVES" || mut == "RAP_TALONS") { // Destroy footwear destroy = true; bps.push_back(bp_feet); diff --git a/mutation.h b/src/mutation.h similarity index 100% rename from mutation.h rename to src/mutation.h diff --git a/mutation_data.cpp b/src/mutation_data.cpp similarity index 100% rename from mutation_data.cpp rename to src/mutation_data.cpp diff --git a/name.cpp b/src/name.cpp similarity index 100% rename from name.cpp rename to src/name.cpp diff --git a/name.h b/src/name.h similarity index 100% rename from name.h rename to src/name.h diff --git a/newcharacter.cpp b/src/newcharacter.cpp similarity index 93% rename from newcharacter.cpp rename to src/newcharacter.cpp index b4bac296f13cc..7f5c05f35ca57 100644 --- a/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -16,6 +16,7 @@ #include #include #include +#include // Colors used in this file: (Most else defaults to c_ltgray) #define COL_STAT_ACT c_white // Selected stat @@ -57,7 +58,7 @@ void save_template(player *u); bool player::create(game *g, character_type type, std::string tempname) { - weapon = item(g->itypes["null"], 0); + weapon = item(itypes["null"], 0); g->u.prof = profession::generic(); @@ -273,19 +274,18 @@ bool player::create(game *g, character_type type, std::string tempname) _("Tai Chi"), _("Taekwondo"), NULL); if (choice == 1) { ma_type = "style_karate"; - } - if (choice == 2) { + } else if (choice == 2) { ma_type = "style_judo"; - } - if (choice == 3) { + } else if (choice == 3) { ma_type = "style_aikido"; - } - if (choice == 4) { + } else if (choice == 4) { ma_type = "style_tai_chi"; - } - if (choice == 5) { + } else { // choice == 5 ma_type = "style_taekwondo"; } + if (PLTYPE_NOW != type) { + popup(martialarts[ma_type].description.c_str()); + } } while (PLTYPE_NOW != type && !query_yn(_("Use this style?"))); ma_styles.push_back(ma_type); style_selected = ma_type; @@ -293,20 +293,22 @@ bool player::create(game *g, character_type type, std::string tempname) if (has_trait("MARTIAL_ARTS2")) { matype_id ma_type; do { - int choice = (PLTYPE_NOW == type) ? rng(1, 4) : + int choice = (PLTYPE_NOW == type) ? rng(1, 5) : menu(false, _("Pick your style:"), _("Krav Maga"), _("Muay Thai"), _("Ninjutsu"), - _("Capoeira"), NULL); + _("Capoeira"), _("Zui Quan"), NULL); if (choice == 1) { ma_type = "style_krav_maga"; - } - if (choice == 2) { + } else if (choice == 2) { ma_type = "style_muay_thai"; - } - if (choice == 3) { + } else if (choice == 3) { ma_type = "style_ninjutsu"; - } - if (choice == 4) { + } else if (choice == 4) { ma_type = "style_capoeira"; + } else { // choice == 5 + ma_type = "style_zui_quan"; + } + if (PLTYPE_NOW != type) { + popup(martialarts[ma_type].description.c_str()); } } while (PLTYPE_NOW != type && !query_yn(_("Use this style?"))); ma_styles.push_back(ma_type); @@ -314,7 +316,7 @@ bool player::create(game *g, character_type type, std::string tempname) } - ret_null = item(g->itypes["null"], 0); + ret_null = item(itypes["null"], 0); weapon = ret_null; @@ -324,7 +326,7 @@ bool player::create(game *g, character_type type, std::string tempname) for (std::vector::const_iterator iter = prof_items.begin(); iter != prof_items.end(); ++iter) { tmp = item(item_controller->find_template(*iter), 0); - tmp = tmp.in_its_container(&(g->itypes)); + tmp = tmp.in_its_container(&(itypes)); inv.push_back(tmp); } @@ -361,30 +363,26 @@ bool player::create(game *g, character_type type, std::string tempname) // Those who are both near-sighted and far-sighted start with bifocal glasses. if (has_trait("HYPEROPIC") && has_trait("MYOPIC")) { - tmp = item(g->itypes["glasses_bifocal"], 0); + tmp = item(itypes["glasses_bifocal"], 0); inv.push_back(tmp); } // The near-sighted start with eyeglasses. else if (has_trait("MYOPIC")) { - tmp = item(g->itypes["glasses_eye"], 0); + tmp = item(itypes["glasses_eye"], 0); inv.push_back(tmp); } // The far-sighted start with reading glasses. else if (has_trait("HYPEROPIC")) { - tmp = item(g->itypes["glasses_reading"], 0); + tmp = item(itypes["glasses_reading"], 0); inv.push_back(tmp); } // Likewise, the asthmatic start with their medication. if (has_trait("ASTHMA")) { - tmp = item(g->itypes["inhaler"], 0); + tmp = item(itypes["inhaler"], 0); inv.push_back(tmp); } - // Basic starter gear, added independently of profession. - tmp = item(g->itypes["pockknife"], 0); - inv.push_back(tmp); - tmp = item(g->itypes["matches"], 0); - inv.push_back(tmp); + // make sure we have no mutations for (std::map::iterator iter = traits.begin(); iter != traits.end(); ++iter) if (!has_base_trait(iter->first)) { @@ -424,20 +422,21 @@ void draw_tabs(WINDOW *w, std::string sTab) mvwputch(w, i, FULL_SCREEN_WIDTH - 1, c_ltgray, LINE_XOXO); } } - - int tab_pos[6]; + std::vector tab_captions; + tab_captions.push_back(_("STATS")); + tab_captions.push_back(_("TRAITS")); + tab_captions.push_back(_("PROFESSION")); + tab_captions.push_back(_("SKILLS")); + tab_captions.push_back(_("DESCRIPTION")); + int tab_pos[6]; //this is actually tab_captions.size() + 1 tab_pos[0] = 2; - tab_pos[1] = tab_pos[0] + utf8_width(_("STATS")); - tab_pos[2] = tab_pos[1] + utf8_width(_("TRAITS")); - tab_pos[3] = tab_pos[2] + utf8_width(_("PROFESSION")); - tab_pos[4] = tab_pos[3] + utf8_width(_("SKILLS")); - tab_pos[5] = tab_pos[4] + utf8_width(_("DESCRIPTION")); + for (int pos = 1; pos < 6; pos++) { + tab_pos[pos] = tab_pos[pos-1] + utf8_width(tab_captions[pos-1].c_str()); + } int space = (FULL_SCREEN_WIDTH - tab_pos[5]) / 4 - 3; - draw_tab(w, tab_pos[0], _("STATS"), (sTab == "STATS")); - draw_tab(w, tab_pos[1] + space, _("TRAITS"), (sTab == "TRAITS")); - draw_tab(w, tab_pos[2] + space * 2, _("PROFESSION"), (sTab == "PROFESSION")); - draw_tab(w, tab_pos[3] + space * 3, _("SKILLS"), (sTab == "SKILLS")); - draw_tab(w, tab_pos[4] + space * 4, _("DESCRIPTION"), (sTab == "DESCRIPTION")); + for (size_t i = 0; i < tab_captions.size(); i++) { + draw_tab(w, tab_pos[i] + space * i, tab_captions[i].c_str(), (sTab == tab_captions[i])); + } mvwputch(w, 2, 0, c_ltgray, LINE_OXXO); // |^ mvwputch(w, 2, FULL_SCREEN_WIDTH - 1, c_ltgray, LINE_OOXX); // ^| @@ -881,7 +880,9 @@ int set_profession(WINDOW *w, game *g, player *u, character_type type, int &poin const int iContentHeight = FULL_SCREEN_HEIGHT - 9; int iStartPos = 0; - WINDOW *w_items = newwin(iContentHeight, 50, 5 + getbegy(w), 27 + getbegx(w)); + WINDOW *w_items = newwin(iContentHeight, 22, 5 + getbegy(w), 21 + getbegx(w)); + WINDOW *w_skills = newwin(iContentHeight, 32, 5 + getbegy(w), 43+ getbegx(w)); + WINDOW *w_addictions = newwin(iContentHeight - 10, 32, 15 + getbegy(w), 43+ getbegx(w)); std::vector sorted_profs; for (profmap::const_iterator iter = profession::begin(); iter != profession::end(); ++iter) { @@ -892,6 +893,14 @@ int set_profession(WINDOW *w, game *g, player *u, character_type type, int &poin // profession_display_sort() keeps "unemployed" at the top. std::sort(sorted_profs.begin(), sorted_profs.end(), profession_display_sort); + // Select the current profession, if possible. + for (int i = 0; i < sorted_profs.size(); ++i) { + if (sorted_profs[i]->ident() == u->prof->ident()) { + cur_id = i; + break; + } + } + do { int netPointCost = sorted_profs[cur_id]->point_cost() - u->prof->point_cost(); std::string can_pick = sorted_profs[cur_id]->can_pick(u, points); @@ -933,16 +942,41 @@ int set_profession(WINDOW *w, game *g, player *u, character_type type, int &poin } std::vector pipo = sorted_profs[cur_id]->items(); - mvwprintz(w_items, 0, 2, c_ltgray, _("Profession items:")); + mvwprintz(w_items, 0, 0, c_ltgray, _("Profession items:")); for (int i = 0; i < iContentHeight; i++) { // clean - mvwprintz(w_items, 1 + i, 2, c_ltgray, " "); + mvwprintz(w_items, 1 + i, 0, c_ltgray, " "); if (i < pipo.size()) { // dirty - mvwprintz(w_items, 1 + i , 2, c_ltgray, g->itypes[pipo[i]]->name.c_str()); + mvwprintz(w_items, 1 + i , 0, c_ltgray, itypes[pipo[i]]->name.c_str()); + } + } + profession::StartingSkillList prof_skills = sorted_profs[cur_id]->skills(); + mvwprintz(w_skills, 0, 0, c_ltgray, _("Profession skills:")); + for (int i = 0; i < iContentHeight; i++) { + // clean + mvwprintz(w_skills, 1 + i, 0, c_ltgray, " "); + if (i < prof_skills.size()) { + // dirty + std::stringstream skill_listing; + skill_listing << prof_skills[i].first << " (" << prof_skills[i].second << ")"; + mvwprintz(w_skills, 1 + i , 0, c_ltgray, skill_listing.str().c_str()); + } + } + std::vector prof_addictions = sorted_profs[cur_id]->addictions(); + if(prof_addictions.size() > 0){ + mvwprintz(w_addictions, 0, 0, c_ltgray, _("Addictions:")); + for (int i = 0; i < iContentHeight; i++) { + // clean + mvwprintz(w_addictions, 1 + i, 0, c_ltgray, " "); + if (i < prof_addictions.size()) { + // dirty + std::stringstream addiction_listing; + addiction_listing << addiction_name(prof_addictions[i]) << " (" << prof_addictions[i].intensity << ")"; + mvwprintz(w_addictions, 1 + i , 0, c_ltgray, addiction_listing.str().c_str()); + } } } - //TODO: starting_skills, addictions, w/e //Draw Scrollbar draw_scrollbar(w, cur_id, iContentHeight, profession::count(), 5); @@ -950,6 +984,8 @@ int set_profession(WINDOW *w, game *g, player *u, character_type type, int &poin wrefresh(w); wrefresh(w_description); wrefresh(w_items); + wrefresh(w_skills); + wrefresh(w_addictions); switch (input()) { case 'j': case '2': diff --git a/npc.cpp b/src/npc.cpp similarity index 96% rename from npc.cpp rename to src/npc.cpp index f78c2b02ebab4..944d4943fe81a 100644 --- a/npc.cpp +++ b/src/npc.cpp @@ -146,7 +146,7 @@ npc& npc::operator= (const npc & rhs) std::string npc::save_info() { - return json_save(true).serialize(); + return serialize(); // also saves contents } void npc::load_info(game *g, std::string data) @@ -160,13 +160,11 @@ void npc::load_info(game *g, std::string data) check = data[1]; } if ( check == '{' ) { - picojson::value pdata; - dump >> pdata; - std::string jsonerr = picojson::get_last_error(); - if ( ! jsonerr.empty() ) { + JsonIn jsin(&dump); + try { + deserialize(jsin); + } catch (std::string jsonerr) { debugmsg("Bad npc json\n%s", jsonerr.c_str() ); - } else { - json_load(pdata, g); } return; } else { @@ -182,8 +180,8 @@ void npc::randomize(game *g, npc_class type) dex_max = dice(4, 3); int_max = dice(4, 3); per_max = dice(4, 3); - ret_null = item(g->itypes["null"], 0); - weapon = item(g->itypes["null"], 0); + ret_null = item(itypes["null"], 0); + weapon = item(itypes["null"], 0); inv.clear(); personality.aggression = rng(-10, 10); personality.bravery = rng( -3, 10); @@ -737,22 +735,22 @@ std::vector starting_clothes(npc_class type, bool male, game *g) } // Fill in the standard things we wear if (shoes != "null") - ret.push_back(item(g->itypes[shoes], 0)); + ret.push_back(item(itypes[shoes], 0)); if (pants != "null") - ret.push_back(item(g->itypes[pants], 0)); + ret.push_back(item(itypes[pants], 0)); if (shirt != "null") - ret.push_back(item(g->itypes[shirt], 0)); + ret.push_back(item(itypes[shirt], 0)); if (coat != "null") - ret.push_back(item(g->itypes[coat], 0)); + ret.push_back(item(itypes[coat], 0)); if (gloves != "null") - ret.push_back(item(g->itypes[gloves], 0)); + ret.push_back(item(itypes[gloves], 0)); // Bad to wear a mask under a motorcycle helmet if (mask != "null" && hat != "helmet_motor") - ret.push_back(item(g->itypes[mask], 0)); + ret.push_back(item(itypes[mask], 0)); if (glasses != "null") - ret.push_back(item(g->itypes[glasses], 0)); + ret.push_back(item(itypes[glasses], 0)); if (hat != "null") - ret.push_back(item(g->itypes[hat], 0)); + ret.push_back(item(itypes[hat], 0)); // Second pass--for extra stuff like backpacks, etc switch (type) { @@ -760,16 +758,16 @@ std::vector starting_clothes(npc_class type, bool male, game *g) case NC_DOCTOR: case NC_SCIENTIST: if (one_in(10)) - ret.push_back(item(g->itypes["backpack"], 0)); + ret.push_back(item(itypes["backpack"], 0)); break; case NC_COWBOY: case NC_BOUNTY_HUNTER: if (one_in(2)) - ret.push_back(item(g->itypes["backpack"], 0)); + ret.push_back(item(itypes["backpack"], 0)); break; case NC_TRADER: if (!one_in(15)) - ret.push_back(item(g->itypes["backpack"], 0)); + ret.push_back(item(itypes["backpack"], 0)); break; } @@ -780,29 +778,29 @@ std::list starting_inv(npc *me, npc_class type, game *g) { int total_space = me->volume_capacity() - 2; std::list ret; - ret.push_back( item(g->itypes["lighter"], 0) ); + ret.push_back( item(itypes["lighter"], 0) ); itype_id tmp; // First, if we're wielding a gun, get some ammo for it if (me->weapon.is_gun()) { it_gun *gun = dynamic_cast(me->weapon.type); tmp = default_ammo(gun->ammo); - if (total_space >= g->itypes[tmp]->volume) { - ret.push_back(item(g->itypes[tmp], 0)); + if (total_space >= itypes[tmp]->volume) { + ret.push_back(item(itypes[tmp], 0)); total_space -= ret.back().volume(); } while ((type == NC_COWBOY || type == NC_BOUNTY_HUNTER || !one_in(3)) && - !one_in(4) && total_space >= g->itypes[tmp]->volume) { - ret.push_back(item(g->itypes[tmp], 0)); + !one_in(4) && total_space >= itypes[tmp]->volume) { + ret.push_back(item(itypes[tmp], 0)); total_space -= ret.back().volume(); } } if (type == NC_TRADER) { // Traders just have tons of random junk while (total_space > 0 && !one_in(50)) { tmp = standard_itype_ids[rng(0,standard_itype_ids.size()-1)]; - if (total_space >= g->itypes[tmp]->volume) { - ret.push_back(item(g->itypes[tmp], 0)); - ret.back() = ret.back().in_its_container(&g->itypes); + if (total_space >= itypes[tmp]->volume) { + ret.push_back(item(itypes[tmp], 0)); + ret.back() = ret.back().in_its_container(&itypes); total_space -= ret.back().volume(); } } @@ -813,7 +811,7 @@ std::list starting_inv(npc *me, npc_class type, game *g) while(total_space > 0 && !one_in(10)) { Item_tag selected_item = item_controller->id_from(from); item tmpit = item_controller->create(selected_item, 0); - tmpit = tmpit.in_its_container(&g->itypes); + tmpit = tmpit.in_its_container(&itypes); if (total_space >= tmpit.volume()) { ret.push_back(tmpit); total_space -= tmpit.volume(); @@ -828,7 +826,7 @@ std::list starting_inv(npc *me, npc_class type, game *g) from = "harddrugs"; Item_tag selected_item = item_controller->id_from(from); item tmpit = item_controller->create(selected_item, 0); - tmpit = tmpit.in_its_container(&g->itypes); + tmpit = tmpit.in_its_container(&itypes); if (total_space >= tmpit.volume()) { ret.push_back(tmpit); total_space -= tmpit.volume(); @@ -839,9 +837,9 @@ std::list starting_inv(npc *me, npc_class type, game *g) while (total_space > 0 && !one_in(8)) { tmp = standard_itype_ids[rng(0, standard_itype_ids.size()-1)]; - if (total_space >= g->itypes[tmp]->volume) { - ret.push_back(item(g->itypes[tmp], 0)); - ret.back() = ret.back().in_its_container(&g->itypes); + if (total_space >= itypes[tmp]->volume) { + ret.push_back(item(itypes[tmp], 0)); + ret.back() = ret.back().in_its_container(&itypes); total_space -= ret.back().volume(); } } @@ -973,7 +971,7 @@ void npc::starting_weapon(game *g) { it_gun* gun = dynamic_cast(weapon.type); weapon.charges = gun->clip; - weapon.curammo = dynamic_cast(g->itypes[default_ammo(gun->ammo)]); + weapon.curammo = dynamic_cast(itypes[default_ammo(gun->ammo)]); } } @@ -1778,17 +1776,17 @@ void npc::draw(WINDOW* w, int ux, int uy, bool inv) mvwputch (w, y, x, col, '@'); } -void npc::print_info(WINDOW* w) +int npc::print_info(WINDOW* w, int column /*= 1*/, int line /*= 6*/) { // First line of w is the border; the next 4 are terrain info, and after that // is a blank line. w is 13 characters tall, and we can't use the last one // because it's a border as well; so we have lines 6 through 11. // w is also 48 characters wide - 2 characters for border = 46 characters for us - mvwprintz(w, 6, 1, c_white, _("NPC: %s"), name.c_str()); + mvwprintz(w, line++, column, c_white, _("NPC: %s"), name.c_str()); if (weapon.type->id == "null") { - mvwprintz(w, 7, 1, c_red, _("Wielding %s"), weapon.tname().c_str()); + mvwprintz(w, line++, column, c_red, _("Wielding %s"), weapon.tname().c_str()); } else { - mvwprintz(w, 7, 1, c_red, _("Wielding a %s"), weapon.tname().c_str()); + mvwprintz(w, line++, column, c_red, _("Wielding a %s"), weapon.tname().c_str()); } std::string wearing; std::stringstream wstr; @@ -1799,18 +1797,20 @@ void npc::print_info(WINDOW* w) wstr << worn[i].tname(); } wearing = wstr.str(); - int line = 8; size_t split; + int last_line = line + 3; do { split = (wearing.length() <= 46) ? std::string::npos : wearing.find_last_of(' ', 46); if (split == std::string::npos) - mvwprintz(w, line, 1, c_blue, wearing.c_str()); + mvwprintz(w, line, column, c_blue, wearing.c_str()); else - mvwprintz(w, line, 1, c_blue, wearing.substr(0, split).c_str()); + mvwprintz(w, line, column, c_blue, wearing.substr(0, split).c_str()); wearing = wearing.substr(split + 1); line++; - } while (split != std::string::npos && line <= 11); + } while (split != std::string::npos && line <= last_line); + + return line; } std::string npc::short_description() @@ -1921,7 +1921,7 @@ void npc::die(game *g, bool your_fault) dead = true; if (in_vehicle) { - g->m.unboard_vehicle(g, posx, posy); + g->m.unboard_vehicle(posx, posy); } if (g->u_see(posx, posy)) { @@ -1948,7 +1948,7 @@ void npc::die(game *g, bool your_fault) } item my_body; - my_body.make_corpse(g->itypes["corpse"], GetMType("mon_null"), g->turn); + my_body.make_corpse(itypes["corpse"], GetMType("mon_null"), g->turn); my_body.name = name; g->m.add_item_or_charges(posx, posy, my_body); std::vector dump; diff --git a/npc.h b/src/npc.h similarity index 90% rename from npc.h rename to src/npc.h index 613a8ec439766..5a8be8ee49b4b 100644 --- a/npc.h +++ b/src/npc.h @@ -5,6 +5,8 @@ #include "monster.h" #include "overmap.h" #include "faction.h" +#include "json.h" + #include #include #include @@ -126,25 +128,28 @@ enum npc_favor_type { NUM_FAVOR_TYPES }; -struct npc_favor +struct npc_favor : public JsonSerializer, public JsonDeserializer { - npc_favor_type type; - int value; - itype_id item_id; - Skill *skill; - - npc_favor() { - type = FAVOR_NULL; - value = 0; - item_id = "null"; - skill = NULL; - }; - picojson::value json_save(); - bool json_load(std::map & data); - + npc_favor_type type; + int value; + itype_id item_id; + Skill *skill; + + npc_favor() { + type = FAVOR_NULL; + value = 0; + item_id = "null"; + skill = NULL; + }; + + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); }; -struct npc_personality { +struct npc_personality : public JsonSerializer, public JsonDeserializer +{ // All values should be in the -10 to 10 range. signed char aggression; signed char bravery; @@ -156,11 +161,14 @@ struct npc_personality { collector = 0; altruism = 0; }; - picojson::value json_save(); - void json_load(std::map & data); + + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); }; -struct npc_opinion +struct npc_opinion : public JsonSerializer, public JsonDeserializer { int trust; int fear; @@ -222,8 +230,11 @@ struct npc_opinion { return (npc_opinion(*this) += rhs); }; - picojson::value json_save(); - bool json_load(std::map & data ); + + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); void load_legacy(std::stringstream &info); }; @@ -236,7 +247,7 @@ enum combat_engagement { ENGAGE_ALL }; -struct npc_combat_rules +struct npc_combat_rules : public JsonSerializer, public JsonDeserializer { combat_engagement engagement; bool use_guns; @@ -253,9 +264,10 @@ struct npc_combat_rules void load_legacy(std::istream &data); - picojson::value json_save(); - bool json_load(std::map & data); - + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); }; enum talk_topic { @@ -323,7 +335,7 @@ enum talk_topic { NUM_TALK_TOPICS }; -struct npc_chatbin +struct npc_chatbin : public JsonSerializer, public JsonDeserializer { std::vector missions; std::vector missions_assigned; @@ -339,14 +351,17 @@ struct npc_chatbin skill = NULL; first_topic = TALK_NONE; } - picojson::value json_save(); - bool json_load(std::map & data); + + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); void load_legacy(std::stringstream &info); }; -class npc : public player { - +class npc : public player +{ public: npc(); @@ -370,16 +385,14 @@ class npc : public player { virtual void load_info(game *g, std::string data);// Overloaded from player virtual std::string save_info(); -// void json_load_common_variables( std::map & data ); - virtual void json_load(picojson::value & parsed, game * g); // populate variables, inventory items, and misc from json object - -// void json_save_common_variables( std::map & data ); - virtual picojson::value json_save(bool save_contents=false); - + using player::deserialize; + virtual void deserialize(JsonIn &jsin); + using player::serialize; + virtual void serialize(JsonOut &jsout, bool save_contents) const; // Display void draw(WINDOW* w, int plx, int ply, bool inv); - void print_info(WINDOW* w); + int print_info(WINDOW* w, int column = 1, int line = 6); std::string short_description(); std::string opinion_text(); diff --git a/npcmove.cpp b/src/npcmove.cpp similarity index 97% rename from npcmove.cpp rename to src/npcmove.cpp index f45a4d2ef7c43..9d463f004a98c 100644 --- a/npcmove.cpp +++ b/src/npcmove.cpp @@ -688,7 +688,7 @@ bool npc::alt_attack_available(game *g) { for (int i = 0; i < NUM_ALT_ATTACK_ITEMS; i++) { if ((!is_following() || combat_rules.use_grenades || - !(g->itypes[ALT_ATTACK_ITEMS[i]]->item_tags.count("GRENADE"))) && + !(itypes[ALT_ATTACK_ITEMS[i]]->item_tags.count("GRENADE"))) && has_amount(ALT_ATTACK_ITEMS[i], 1)) return true; } @@ -747,7 +747,7 @@ void npc::use_escape_item(game *g, signed char invlet, int target) if (used->is_tool()) { it_tool* tool = dynamic_cast(used->type); - int charges_used = tool->use.call(g, this, used, false); + int charges_used = tool->use.call(this, used, false); if( charges_used ) { used->charges -= charges_used; if (used->invlet == 0) { @@ -990,7 +990,7 @@ void npc::move_to(game *g, int x, int y) } else { if (in_vehicle) { // TODO: handle this nicely - npcs should not jump from moving vehicles - g->m.unboard_vehicle(g, posx, posy); + g->m.unboard_vehicle(posx, posy); } else { @@ -1501,7 +1501,7 @@ void npc::alt_attack(game *g, int target) */ for (int i = 0; i < NUM_ALT_ATTACK_ITEMS; i++) { if ((!is_following() || combat_rules.use_grenades || - !(g->itypes[ALT_ATTACK_ITEMS[i]]->item_tags.count("GRENADE"))) && + !(itypes[ALT_ATTACK_ITEMS[i]]->item_tags.count("GRENADE"))) && has_amount(ALT_ATTACK_ITEMS[i], 1)) which = ALT_ATTACK_ITEMS[i]; } @@ -1642,10 +1642,10 @@ void npc::activate_item(game *g, char invlet) item *it = &(inv.item_by_letter(invlet)); if (it->is_tool()) { it_tool* tool = dynamic_cast(it->type); - tool->use.call(g, this, it, false); + tool->use.call(this, it, false); } else if (it->is_food()) { it_comest* comest = dynamic_cast(it->type); - comest->use.call(g, this, it, false); + comest->use.call(this, it, false); } } @@ -1992,34 +1992,34 @@ void npc::set_destination(game *g) decide_needs(); if (needs.empty()) // We don't need anything in particular. needs.push_back(need_none); - std::vector options; + std::vector options; switch(needs[0]) { - case need_ammo: options.push_back(ot_house_north); - case need_gun: options.push_back(ot_s_gun_north); break; + case need_ammo: options.push_back("house"); + case need_gun: options.push_back("s_gun"); break; - case need_weapon: options.push_back(ot_s_gun_north); - options.push_back(ot_s_sports_north); - options.push_back(ot_s_hardware_north); break; + case need_weapon: options.push_back("s_gun"); + options.push_back("s_sports"); + options.push_back("s_hardware"); break; - case need_drink: options.push_back(ot_s_gas_north); - options.push_back(ot_s_pharm_north); - options.push_back(ot_s_liquor_north); - case need_food: options.push_back(ot_s_grocery_north); break; + case need_drink: options.push_back("s_gas"); + options.push_back("s_pharm"); + options.push_back("s_liquor"); + case need_food: options.push_back("s_grocery"); break; - default: options.push_back(ot_house_north); - options.push_back(ot_s_gas_north); - options.push_back(ot_s_pharm_north); - options.push_back(ot_s_hardware_north); - options.push_back(ot_s_sports_north); - options.push_back(ot_s_liquor_north); - options.push_back(ot_s_gun_north); - options.push_back(ot_s_library_north); + default: options.push_back("house"); + options.push_back("s_gas"); + options.push_back("s_pharm"); + options.push_back("s_hardware"); + options.push_back("s_sports"); + options.push_back("s_liquor"); + options.push_back("s_gun"); + options.push_back("s_library"); } oter_id dest_type = options[rng(0, options.size() - 1)]; int dist = 0; - point p = g->cur_om->find_closest(point(mapx, mapy),dest_type,4, dist, false); + point p = g->cur_om->find_closest(point(mapx, mapy), dest_type, dist, false); goalx = p.x; goaly = p.y; goalz = g->levz; diff --git a/npctalk.cpp b/src/npctalk.cpp similarity index 99% rename from npctalk.cpp rename to src/npctalk.cpp index c2e955c639cff..8a03c97d3f252 100644 --- a/npctalk.cpp +++ b/src/npctalk.cpp @@ -1098,7 +1098,7 @@ std::vector gen_responses(talk_topic topic, game *g, npc *p) resume << _("Yes, let's resume training ") << (g->u.backlog.name != "" ? Skill::skill(g->u.backlog.name)->name() : - g->itypes[ martial_arts_itype_ids[0-g->u.backlog.index] ]->name); + itypes[ martial_arts_itype_ids[0-g->u.backlog.index] ]->name); SELECT_TEMP( resume.str(), g->u.backlog.index); SUCCESS(TALK_TRAIN_START); } @@ -1125,7 +1125,7 @@ std::vector gen_responses(talk_topic topic, game *g, npc *p) shift = 0; for (int i = 0; i < styles.size() && printed < 9; i++) { printed++; - SELECT_TEMP( string_format(_("%s (cost 800)"), g->itypes[styles[i]]->name.c_str()) , + SELECT_TEMP( string_format(_("%s (cost 800)"), itypes[styles[i]]->name.c_str()) , 0 - i ); SUCCESS(TALK_TRAIN_START); } @@ -1518,13 +1518,19 @@ int trial_chance(talk_response response, player *u, npc *p) chance -= 40; else if (u->has_trait("LIAR")) chance += 40; + if (u->has_trait("ELFAEYES")) + chance += 10; break; case TALK_TRIAL_PERSUADE: chance += u->talk_skill() - int(p->talk_skill() / 2) + p->op_of_u.trust * 2 + p->op_of_u.value; + if (u->has_trait("ELFAEYES")) + chance += 20; if (u->has_trait("GROWL")) chance -= 25; + if (u->has_trait("HISS")) + chance -= 25; if (u->has_trait("SNARL")) chance -= 60; break; @@ -1534,10 +1540,14 @@ int trial_chance(talk_response response, player *u, npc *p) p->personality.bravery * 2; if (u->has_trait("TERRIFYING")) chance += 15; + if (u->has_trait("ELFAEYES")) + chance += 10; if (p->has_trait("TERRIFYING")) chance -= 15; if (u->has_trait("GROWL")) chance += 15; + if (u->has_trait("HISS")) + chance += 15; if (u->has_trait("SNARL")) chance += 30; break; diff --git a/src/omdata.h b/src/omdata.h new file mode 100644 index 0000000000000..1af6bfdcd2017 --- /dev/null +++ b/src/omdata.h @@ -0,0 +1,257 @@ +#ifndef _OMDATA_H_ +#define _OMDATA_H_ + +#include +#include +#include +#include "mtype.h" +#include "itype.h" +#include "output.h" +#include "mongroup.h" +#include "mapdata.h" + +#define OMAPX 180 +#define OMAPY 180 + +class overmap; + +struct oter_t { + std::string id; // definitive identifier + int loadid; // position in termap / terlist + std::string name; + long sym; // This is a long, so we can support curses linedrawing + nc_color color; + unsigned char see_cost; // Affects how far the player can see in the overmap + std::string extras; + bool known_down; + bool known_up; + int mondensity; + bool sidewalk; + bool allow_road; + bool is_river; + bool is_road; + // std::vector mapgen; + // bool disable_default_mapgen; + // automatically set. We can be wasteful of memory here for num_oters * sizeof(extrastuff), if it'll save us from thousands of string ops + std::string id_base; // base identifier; either the same as id, or id without directional variations. (ie, 'house' / 'house_west' ) + int loadid_base; // self || directional_peers[0]? or seperate base_oter_map ? + std::vector directional_peers; // fast reliable (?) method of determining whatever_west, etc. + bool rotates; // lazy for; directional_peers.size() == 4 + bool line_drawing; // lazy for; directional_peers.size() == 8 + oter_t& operator=(const oter_t right){ + id = right.id; + loadid = right.loadid; + name = right.name; + id_base = right.id_base; + sym = right.sym; + color = right.color; + see_cost = right.see_cost; + extras = right.extras; + known_down = right.known_down; + known_up = right.known_up; + mondensity = right.mondensity; + sidewalk = right.sidewalk; + allow_road = right.allow_road; + is_river = right.is_river; + is_road = right.is_road; + //mapgen = right.mapgen; + //disable_default_mapgen = right.disable_default_mapgen; + loadid_base = right.loadid_base; + directional_peers = right.directional_peers; + rotates = right.rotates; + line_drawing = right.line_drawing; + return *this; + } +}; + +struct oter_id { + int _val; // just numeric index of oter_t, but typically invoked as string + + // Hi, I'm an + operator int() const; + // pretending to be a + operator std::string() const; + // in order to map + operator oter_t() const; + +const oter_t & t() const; + + // set and compare by string + const int& operator=(const int& i); + bool operator!=(const char * v) const; + bool operator==(const char * v) const; + bool operator>=(const char * v) const; + bool operator<=(const char * v) const; + + // or faster, with another oter_id + bool operator!=(const oter_id& v) const; + bool operator==(const oter_id& v) const; + + + // initialize as raw value + oter_id() : _val(0) { }; + oter_id(int i) : _val(i) { }; + // or as "something" by consulting otermap + oter_id(const std::string& v); + oter_id(const char * v); + + // these std::string functions are provided for convenience, for others, + // best invoke as actual string; std::string( ter(1, 2, 3) ).substr(... + const char * c_str() const; + int size() const; + int find(const std::string &v, const int start, const int end) const; + int compare(size_t pos, size_t len, const char* s, size_t n=0) const; +}; + + + +//typedef std::string oter_id; +typedef oter_id oter_iid; + +// LINE_**** corresponds to the ACS_**** macros in ncurses, and are patterned +// the same way; LINE_NESW, where X indicates a line and O indicates no line +// (thus, LINE_OXXX looks like 'T'). LINE_ is defined in output.h. The ACS_ +// macros can't be used here, since ncurses hasn't been initialized yet. + +// Overmap specials--these are "special encounters," dungeons, nests, etc. +// This specifies how often and where they may be placed. + +// OMSPEC_FREQ determines the length of the side of the square in which each +// overmap special will be placed. At OMSPEC_FREQ 6, the overmap is divided +// into 900 squares; lots of space for interesting stuff! +#define OMSPEC_FREQ 15 + +// Flags that determine special behavior for placement +enum omspec_flag { +OMS_FLAG_NULL = 0, +OMS_FLAG_ROTATE_ROAD, // Rotate to face road--assumes 3 following rotations +OMS_FLAG_ROTATE_RANDOM, // Rotate randomly--assumes 3 following rotations +OMS_FLAG_3X3, // 3x3 square, e.g. bee hive +OMS_FLAG_BLOB, // Randomly shaped blob +OMS_FLAG_3X3_SECOND, // 3x3 square, made of the tile AFTER the main one +OMS_FLAG_3X3_FIXED, //3x3 square, made of tiles one ahead and seven after +OMS_FLAG_2X2, +OMS_FLAG_2X2_SECOND, +OMS_FLAG_BIG, // As big as possible +OMS_FLAG_ROAD, // Add a road_point here; connect to towns etc. +OMS_FLAG_PARKING_LOT, // Add a road_point to the north of here +OMS_FLAG_DIRT_LOT, // Dirt lot flag for specials +OMS_FLAG_CLASSIC, // Allow this location to spawn in classic mode +NUM_OMS_FLAGS +}; + +struct omspec_place +{ +// Able functions - true if p is valid + bool never (overmap *, unsigned long, tripoint) { return false; } + bool always (overmap *, unsigned long, tripoint) { return true; } + bool water (overmap *om, unsigned long f, tripoint p); // Only on rivers + bool land (overmap *om, unsigned long f, tripoint p); // Only on land (no rivers) + bool forest (overmap *om, unsigned long f, tripoint p); // Forest + bool wilderness (overmap *om, unsigned long f, tripoint p); // Forest or fields + bool by_highway (overmap *om, unsigned long f, tripoint p); // Next to existing highways +}; + +struct overmap_special +{ +// oter_id ter; // Terrain placed +std::string ter; + int min_appearances; // Min number in an overmap + int max_appearances; // Max number in an overmap + int min_dist_from_city;// Min distance from city limits + int max_dist_from_city;// Max distance from city limits + + std::string monsters; // Type of monsters that appear here + int monster_pop_min; // Minimum monster population + int monster_pop_max; // Maximum monster population + int monster_rad_min; // Minimum monster radius + int monster_rad_max; // Maximum monster radius + + bool (omspec_place::*able) (overmap *om, unsigned long f, tripoint p); // See above + unsigned long flags : NUM_OMS_FLAGS; // See above +}; + +enum omspec_id +{ + OMSPEC_CRATER, + OMSPEC_HIVE, + OMSPEC_HOUSE, + OMSPEC_GAS, + OMSPEC_CABIN, + OMSPEC_CABIN_STRANGE, + OMSPEC_LMOE, + OMSPEC_FARM, + OMSPEC_TEMPLE, + OMSPEC_LAB, + OMSPEC_ICE_LAB, + OMSPEC_FEMA, + OMSPEC_BUNKER, + OMSPEC_OUTPOST, + OMSPEC_SILO, + OMSPEC_RADIO, + OMSPEC_MANSION, + OMSPEC_MANSION_WILD, + OMSPEC_MEGASTORE, + OMSPEC_HOSPITAL, + OMSPEC_PUBLIC_WORKS, + OMSPEC_APARTMENT_CON_TOWER, + OMSPEC_APARTMENT_MOD_TOWER, + OMSPEC_OFFICE_TOWER, + OMSPEC_CATHEDRAL, + OMSPEC_SCHOOL, + OMSPEC_PRISON, + OMSPEC_HOTEL_TOWER, + OMSPEC_SEWAGE, + OMSPEC_MINE, + OMSPEC_ANTHILL, + OMSPEC_SPIDER, + OMSPEC_SLIME, + OMSPEC_FUNGUS, + OMSPEC_TRIFFID, + OMSPEC_LAKE, + OMSPEC_SHELTER, + OMSPEC_CAVE, + OMSPEC_TOXIC_DUMP, + OMSPEC_LONE_GASSTATION, + OMSPEC_HAZARDOUS_SAR, + NUM_OMSPECS +}; + +// Set min or max to -1 to ignore them + +extern overmap_special overmap_specials[NUM_OMSPECS]; + +// Overmap "Zones" +// Areas which have special post-generation processing attached to them + +enum overmap_zone +{ + OMZONE_NULL = 0, + OMZONE_CITY, // Basic city; place corpses + OMZONE_BOMBED, // Terrain is heavily destroyed + OMZONE_IRRADIATED, // Lots of radioactivity TODO + OMZONE_CORRUPTED, // Fabric of space is weak TODO + OMZONE_OVERGROWN, // Lots of plants, etc. TODO + OMZONE_FUNGAL, // Overgrown with fungus TODO + OMZONE_MILITARIZED, // _Was_ occupied by the military TODO + OMZONE_FLOODED, // Flooded out TODO + OMZONE_TRAPPED, // Heavily booby-trapped TODO + OMZONE_MUTATED, // Home of mutation experiments - mutagen & monsters TODO + OMZONE_FORTIFIED, // Boarded up windows &c TODO + OMZONE_BOTS, // Home of the bots TODO + OMZONE_MAX +}; + +////////////////////////////////// +///// convenience definitions for hard-coded functions. +extern oter_iid ot_null, + ot_crater, + ot_field, + ot_forest, + ot_forest_thick, + ot_forest_water, + ot_river_center; + +void set_oter_ids(); + +#endif diff --git a/options.cpp b/src/options.cpp similarity index 99% rename from options.cpp rename to src/options.cpp index 2f9434ea40386..d2a5937a46e34 100644 --- a/options.cpp +++ b/src/options.cpp @@ -604,7 +604,7 @@ void initOptions() { tileset_names, "hoder"); // populate the options dynamically for (std::map::iterator iter = OPTIONS.begin(); iter != OPTIONS.end(); ++iter) { - for (int i=0; i < vPages.size(); ++i) { + for (unsigned i=0; i < vPages.size(); ++i) { if (vPages[i].first == (iter->second).getPage()) { mPageItems[i].push_back(iter->first); break; @@ -711,7 +711,7 @@ void show_options() //Draw Tabs mvwprintz(w_options_header, 0, 7, c_white, ""); - for (int i = 0; i < vPages.size(); i++) { + for (unsigned i = 0; i < vPages.size(); i++) { if (mPageItems[i].size() > 0) { //skip empty pages wprintz(w_options_header, c_white, "["); wprintz(w_options_header, (iCurrentPage == i) ? hilite(c_ltgreen) : c_ltgreen, (vPages[i].second).c_str()); diff --git a/options.h b/src/options.h similarity index 100% rename from options.h rename to src/options.h diff --git a/output.cpp b/src/output.cpp similarity index 97% rename from output.cpp rename to src/output.cpp index d396d0c382778..465c016da7984 100644 --- a/output.cpp +++ b/src/output.cpp @@ -299,32 +299,41 @@ void realDebugmsg(const char *filename, const char *line, const char *mes, ...) fout.open("debug.log", std::ios_base::app | std::ios_base::out); fout << filename << "[" << line << "]: " << buff << "\n"; fout.close(); - while(getch() != ' ') ; - ; + while (getch() != ' ') { + // wait for spacebar + } + werase(stdscr); } bool query_yn(const char *mes, ...) { - bool force_uc = OPTIONS["FORCE_CAPITAL_YN"]; va_list ap; va_start(ap, mes); char buff[1024]; vsprintf(buff, mes, ap); va_end(ap); - int win_width = utf8_width(buff) + 26; - WINDOW *w = newwin(3, win_width, (TERMY - 3) / 2, + bool force_uc = OPTIONS["FORCE_CAPITAL_YN"]; + std::string query; + if (force_uc) { + query = string_format(_("%s (Y/N - Case Sensitive)"), buff); + } else { + query = string_format(_("%s (y/n)"), buff); + } + + int win_width = utf8_width(query.c_str()) + 2; + win_width = (win_width < FULL_SCREEN_WIDTH - 2 ? win_width : FULL_SCREEN_WIDTH - 2); + + std::vector textformatted; + textformatted = foldstring(query, win_width); + WINDOW *w = newwin(textformatted.size() + 2, win_width, (TERMY - 3) / 2, (TERMX > win_width) ? (TERMX - win_width) / 2 : 0); + fold_and_print(w, 1, 1, win_width, c_ltred, query.c_str()); + wborder(w, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); - if (force_uc) { - mvwprintz(w, 1, 1, c_ltred, _("%s (Y/N - Case Sensitive)"), buff); - } else { - mvwprintz(w, 1, 1, c_ltred, _("%s (y/n)"), buff); - } - wrefresh(w); char ch; do { @@ -348,26 +357,11 @@ int query_int(const char *mes, ...) char buff[1024]; vsprintf(buff, mes, ap); va_end(ap); - int win_width = utf8_width(buff) + 10; - - WINDOW *w = newwin(3, win_width, (TERMY - 3) / 2, - 11 + ((TERMX > win_width) ? (TERMX - win_width) / 2 : 0)); - - wborder(w, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, - LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); - mvwprintz(w, 1, 1, c_ltred, _("%s (0-9)"), buff); - wrefresh(w); - int temp; - do { - temp = getch(); - } while ((temp - 48) < 0 || (temp - 48) > 9); - werase(w); - wrefresh(w); - delwin(w); - refresh(); + std::string raw_input = string_input_popup(std::string(buff)); - return temp - 48; + //Note that atoi returns 0 for anything it doesn't like. + return atoi(raw_input.c_str()); } std::string string_input_popup(std::string title, int width, std::string input, std::string desc, diff --git a/output.h b/src/output.h similarity index 99% rename from output.h rename to src/output.h index 13c35684dad3a..2ae170b86d135 100644 --- a/output.h +++ b/src/output.h @@ -90,6 +90,7 @@ int compare_split_screen_popup(int iLeft, int iWidth, int iHeight, std::string s char rand_char(); long special_symbol (long sym); +// TODO: move these elsewhere // string manipulations. std::string from_sentence_case (const std::string &kingston); std::string string_format(std::string pattern, ...); diff --git a/src/overmap.cpp b/src/overmap.cpp new file mode 100644 index 0000000000000..9974f6c458240 --- /dev/null +++ b/src/overmap.cpp @@ -0,0 +1,3895 @@ +#include +#include +#include +#include +#include +#include +#include "overmap.h" +#include "rng.h" +#include "line.h" +#include "game.h" +#include "npc.h" +#include "keypress.h" +#include +#include +#include "debug.h" +#include "cursesdef.h" +#include "options.h" +#include "catacharset.h" +#include "overmapbuffer.h" +#include "action.h" +#include "input.h" +#include "json.h" +#include +#define dbg(x) dout((DebugLevel)(x),D_MAP_GEN) << __FILE__ << ":" << __LINE__ << ": " + +#ifdef _MSC_VER +// MSVC doesn't have c99-compatible "snprintf", so do what picojson does and use _snprintf_s instead +#define snprintf _snprintf_s +#endif + +#define STREETCHANCE 2 +#define NUM_FOREST 250 +#define TOP_HIWAY_DIST 999 +#define MIN_ANT_SIZE 8 +#define MAX_ANT_SIZE 20 +#define MIN_GOO_SIZE 1 +#define MAX_GOO_SIZE 2 +#define MIN_RIFT_SIZE 6 +#define MAX_RIFT_SIZE 16 +#define SETTLE_DICE 2 +#define SETTLE_SIDES 2 +#define HIVECHANCE 180 //Chance that any given forest will be a hive +#define SWAMPINESS 4 //Affects the size of a swamp +#define SWAMPCHANCE 8500 // Chance that a swamp will spawn instead of forest +enum oter_dir { + oter_dir_north, oter_dir_east, oter_dir_west, oter_dir_south +}; + +map_extras no_extras(0); +map_extras road_extras( +// %%% HEL MIL SCI STA DRG SUP PRT MIN CRT FUM 1WY ART + 50, 40, 50,120,200, 30, 10, 5, 80, 10, 8, 2, 3); +map_extras field_extras( + 60, 40, 15, 40, 80, 10, 10, 3, 50, 10, 8, 1, 3); +map_extras subway_extras( +// %%% HEL MIL SCI STA DRG SUP PRT MIN CRT FUM 1WY ART + 75, 0, 5, 12, 5, 5, 0, 7, 0, 0, 20, 1, 3); +map_extras build_extras( + 90, 0, 5, 12, 0, 10, 0, 5, 5, 60, 8, 1, 3); + +std::map otermap; +std::vector oterlist; + +overmap_special overmap_specials[NUM_OMSPECS] = { + +// Terrain MIN MAX DISTANCE +{"crater", 0, 10, 0, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::land, mfb(OMS_FLAG_BLOB) | mfb(OMS_FLAG_CLASSIC)}, + +{"hive", 0, 50, 10, -1, "GROUP_BEE", 20, 60, 2, 4, + &omspec_place::forest, mfb(OMS_FLAG_3X3)}, + +{"house_north", 0,100, 0, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_ROTATE_ROAD) | mfb(OMS_FLAG_CLASSIC)}, + +{"s_gas_north", 0,100, 0, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_ROTATE_ROAD) | mfb(OMS_FLAG_CLASSIC)}, + +{"cabin", 0, 30, 20, -1, "GROUP_NULL", 0, 0, 0, 0, // Woods cabin + &omspec_place::forest, mfb(OMS_FLAG_CLASSIC)}, + +{"cabin_strange", 1, 1, 20, -1, "GROUP_NULL", 0, 0, 0, 0, // Hidden cabin + &omspec_place::forest, mfb(OMS_FLAG_CLASSIC)}, + +{"lmoe", 0, 3, 20, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_CLASSIC)}, + +{"farm", 0, 20, 20, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_3X3_SECOND) |mfb(OMS_FLAG_DIRT_LOT) | mfb(OMS_FLAG_CLASSIC)}, + +{"temple_stairs", 0, 3, 20, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::forest, 0}, + +{"lab_stairs", 0, 30, 8, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, + +{"ice_lab_stairs", 0, 30, 8, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, + +{"fema_entrance", 2, 5, 8, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, + +// Terrain MIN MAX DISTANCE +{"bunker", 2, 10, 4, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, + +{"outpost", 0, 10, 4, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, 0}, + +{"silo", 0, 1, 30, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD)}, + +{"radio_tower", 1, 5, 0, 20, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_CLASSIC)}, + +{"mansion_entrance", 0, 8, 0, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, + +{"mansion_entrance", 0, 4, 10, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, + +{"megastore_entrance", 0, 5, 0, 10, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, + +{"hospital_entrance", 1, 5, 3, 15, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_3X3_SECOND) | mfb(OMS_FLAG_CLASSIC)}, + +{"public_works_entrance", 1, 3, 2, 10, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, + +{"apartments_con_tower_1_entrance", 1, 5, -1, 2, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, + +{"apartments_mod_tower_1_entrance", 1, 4, -1, 2, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, + +{"office_tower_1_entrance", 1, 5, -1, 4, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, + +{"cathedral_1_entrance", 1, 2, -1, 2, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)}, + +{"school_2", 1, 3, 1, 5, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_3X3_FIXED)}, + +{"prison_2", 1, 1, 3, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::land, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_3X3_FIXED)}, + +{"hotel_tower_1_2", 1, 4, -1, 4, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_3X3_FIXED)}, + +{"sewage_treatment", 1, 5, 10, 20, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_PARKING_LOT) | mfb(OMS_FLAG_CLASSIC)}, + +{"mine_entrance", 0, 5, 15, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_PARKING_LOT)}, + +// Terrain MIN MAX DISTANCE +{"anthill", 0, 30, 10, -1, "GROUP_ANT", 1000, 2000, 10, 30, + &omspec_place::wilderness, 0}, + +{"spider_pit", 0,500, 0, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::forest, 0}, + +{"slimepit_down", 0, 4, 0, -1, "GROUP_GOO", 100, 200, 2, 10, + &omspec_place::land, 0}, + +{"fungal_bloom", 0, 3, 5, -1, "GROUP_FUNGI", 600, 1200, 30, 50, + &omspec_place::wilderness, 0}, + +{"triffid_grove", 0, 4, 0, -1, "GROUP_TRIFFID", 800, 1300, 12, 20, + &omspec_place::forest, 0}, + +{"river_center", 0, 10, 10, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::always, mfb(OMS_FLAG_BLOB) | mfb(OMS_FLAG_CLASSIC)}, + +// Terrain MIN MAX DISTANCE +{"shelter", 5, 10, 5, 10, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC)}, + +{"cave", 0, 30, 0, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, 0}, + +{"toxic_dump", 0, 5, 15, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_CLASSIC)}, + +{"s_gas_north", 10, 500, 10, 200, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::by_highway, mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_ROTATE_ROAD)}, + +{"haz_sar_entrance", 1, 2, 15, -1, "GROUP_NULL", 0, 0, 0, 0, + &omspec_place::wilderness, mfb(OMS_FLAG_ROAD) | mfb(OMS_FLAG_CLASSIC) | mfb(OMS_FLAG_2X2_SECOND)} +}; + + +double dist(int x1, int y1, int x2, int y2) +{ + return sqrt(double((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); +} + +bool is_river(const oter_id &ter) +{ + // if the id starts with "river" or "bridge", count as a river, but this + // is done in data init. + // return (ter.compare(0,5,"river",5) == 0 || ter.compare(0,6,"bridge",6) == 0); + return ter.t().is_river; +//oter_t(ter).is_river; +} + +bool is_ot_type(const std::string &otype, const oter_id &oter) +{ + const size_t compare_size = otype.size(); + if (compare_size > oter.size()) { + return false; + } else { + return std::string(oter).compare(0, compare_size, otype ) == 0; + } + +} + +bool road_allowed(const oter_id &ter) +{ +return ter.t().allow_road; +// return oter_t(ter).allow_road; +//otermap[ter].allow_road; +} + +// Likelihood to pick a specific overmap terrain. +struct oter_weight { + std::string ot; + int weight; +}; + +// Local class for picking overmap terrain from a weighted list. +struct oter_weight_list { + oter_weight_list() : total_weight(0) { }; + + void add_item(std::string id, int weight) { + oter_weight new_weight = { id, weight }; + items.push_back(new_weight); + total_weight += weight; + } + + // oter_id will effectively be "" if initialized as something that doesn't exist in otermap + std::string pick() { + int picked = rng(0, total_weight); + int accumulated_weight = 0; + + int i; + for(i=0; i= picked) { + break; + } + } + + return items[i].ot; + } + +private: + int total_weight; + std::vector items; +}; + +oter_id shop(int dir) +{ +// TODO: adjust weights based on area, maybe using JSON +// (implies we have area types first) + oter_weight_list weightlist; + weightlist.add_item("s_gas", 5); + weightlist.add_item("s_pharm", 3); + weightlist.add_item("s_grocery", 15); + weightlist.add_item("s_hardware", 5); + weightlist.add_item("s_sports", 5); + weightlist.add_item("s_liquor", 5); + weightlist.add_item("s_gun", 5); + weightlist.add_item("s_clothes", 5); + weightlist.add_item("s_library", 4); + weightlist.add_item("s_restaurant", 5); + weightlist.add_item("sub_station", 5); + weightlist.add_item("bank", 3); + weightlist.add_item("bar", 5); + weightlist.add_item("s_electronics", 5); + weightlist.add_item("pawn", 3); + weightlist.add_item("mil_surplus", 2); + weightlist.add_item("s_garage", 5); + weightlist.add_item("station_radio", 5); + weightlist.add_item("office_doctor", 2); + weightlist.add_item("s_restaurant_fast", 3); + weightlist.add_item("s_restaurant_coffee", 3); + weightlist.add_item("church", 2); + weightlist.add_item("office_cubical", 2); + weightlist.add_item("furniture", 2); + weightlist.add_item("abstorefront", 2); + weightlist.add_item("police", 1); + weightlist.add_item("s_lot", 4); + + std::string ret = weightlist.pick(); + + if (ret == "s_lot") { // don't need to rotate + return ret; + } + + dir = dir % 4; + if (dir < 0) { dir += 4; } + switch (dir) { + case 0: return ret + "_north"; + case 1: return ret + "_east"; + case 2: return ret + "_south"; + case 3: return ret + "_west"; + default: + debugmsg("Bad rotation of shop %s: %d.", ret.c_str(), dir); + return ret; + } +} + +oter_id house(int dir) +{ + bool base = one_in(2); + if (dir < 0) { dir += 4; } + switch (dir) { + case 0: return base ? "house_base_north" : "house_north"; + case 1: return base ? "house_base_east" : "house_east"; + case 2: return base ? "house_base_south" : "house_south"; + case 3: return base ? "house_base_west" : "house_west"; + default: debugmsg("Bad rotation of house: %d.", dir); return ""; + } +} + +map_extras& get_extras(const std::string &name) +{ + if (name == "field") { + return field_extras; + } else if (name == "road") { + return road_extras; + } else if (name == "subway") { + return subway_extras; + } else if (name == "build") { + return build_extras; + } else { + return no_extras; + } +} + +// oter_t specific affirmatives to is_road, set at startup (todo; jsonize) +bool isroad(std::string bstr) { + if (bstr=="road" || bstr=="bridge" || + bstr=="subway" || bstr=="sewer" || + bstr=="sewage_treatment_hub" || + bstr=="sewage_treatment_under" || + bstr == "rift" || bstr == "hellmouth") { + return true; + } + return false; +} + +void load_oter(oter_t & oter) { + oter.loadid = oterlist.size(); + otermap[oter.id] = oter; + oterlist.push_back(oter); +} + +void load_overmap_terrain(JsonObject &jo) +{ + oter_t oter; + long syms[4]; + bool rotate; + bool line_drawing; + + oter.id = jo.get_string("id"); + oter.name = _(jo.get_string("name").c_str()); + rotate = jo.get_bool("rotate", false); + line_drawing = jo.get_bool("line_drawing", false); + if (line_drawing) { + oter.sym = jo.get_int("sym", (int)'%'); + } else if (jo.has_array("sym")) { + JsonArray ja = jo.get_array("sym"); + for (int i = 0; i < 4; ++i) { + syms[i] = ja.next_int(); + } + oter.sym = syms[0]; + } else if (rotate) { + oter.sym = jo.get_int("sym"); + for (int i = 0; i < 4; ++i) { + syms[i] = oter.sym; + } + } else { + oter.sym = jo.get_int("sym"); + } + + oter.color = color_from_string(jo.get_string("color")); + oter.see_cost = jo.get_int("see_cost"); + + oter.extras = jo.get_string("extras", "none"); + oter.known_down = jo.get_bool("known_down", false); + oter.known_up = jo.get_bool("known_up", false); + oter.mondensity = jo.get_int("mondensity", 0); + oter.sidewalk = jo.get_bool("sidewalk", false); + oter.allow_road = jo.get_bool("allow_road", false); + + std::string id_base = oter.id; + int start_iid = oterlist.size(); + oter.id_base = id_base; + oter.loadid_base = start_iid; + oter.directional_peers.clear(); + + oter.is_road = isroad(id_base); + oter.is_river = (id_base.compare(0,5,"river",5) == 0 || id_base.compare(0,6,"bridge",6) == 0); + + + if (line_drawing) { + // add variants for line drawing + oter.line_drawing = true; + for( int i = start_iid; i < start_iid+12; i++ ) { + oter.directional_peers.push_back(i); + } + + oter.id = id_base + "_ns"; + oter.sym = LINE_XOXO; + load_oter(oter); + + oter.id = id_base + "_ew"; + oter.sym = LINE_OXOX; + load_oter(oter); + + oter.id = id_base + "_ne"; + oter.sym = LINE_XXOO; + load_oter(oter); + + oter.id = id_base + "_es"; + oter.sym = LINE_OXXO; + load_oter(oter); + + oter.id = id_base + "_sw"; + oter.sym = LINE_OOXX; + load_oter(oter); + + + + oter.id = id_base + "_wn"; + oter.sym = LINE_XOOX; + load_oter(oter); + + oter.id = id_base + "_nes"; + oter.sym = LINE_XXXO; + load_oter(oter); + + oter.id = id_base + "_new"; + oter.sym = LINE_XXOX; + load_oter(oter); + + oter.id = id_base + "_nsw"; + oter.sym = LINE_XOXX; + load_oter(oter); + + oter.id = id_base + "_esw"; + oter.sym = LINE_OXXX; + load_oter(oter); + + + + oter.id = id_base + "_nesw"; + oter.sym = LINE_XXXX; + load_oter(oter); + + } else if (rotate) { + // add north/east/south/west variants + oter.rotates = true; + + for( int i = start_iid; i < start_iid+5; i++ ) { + oter.directional_peers.push_back(i); + } + + oter.id = id_base + "_north"; + oter.sym = syms[0]; + load_oter(oter); + + oter.id = id_base + "_east"; + oter.sym = syms[1]; + load_oter(oter); + + oter.id = id_base + "_south"; + oter.sym = syms[2]; + load_oter(oter); + + oter.id = id_base + "_west"; + oter.sym = syms[3]; + load_oter(oter); + + } else { + oter.directional_peers.push_back(start_iid); + load_oter(oter); + } +} + +// *** BEGIN overmap FUNCTIONS *** + +overmap::overmap() + : loc(999, 999) + , prefix() + , name() + , layer(NULL) + , nullret("") + , nullbool(false) + , nullstr("") +{ +// debugmsg("Warning - null overmap!"); +} + +overmap::overmap(game *g, int x, int y) + : loc(x, y) + , prefix() + , name(g->u.name) + , layer(NULL) + , nullret("") + , nullbool(false) + , nullstr("") +{ + if (name.empty()) { + debugmsg("Attempting to load overmap for unknown player! Saving won't work!"); + } + + if (g->has_gametype()) { + prefix = special_game_name(g->gametype()); + } + + init_layers(); + open(g); +} + +overmap::overmap(overmap const& o) + : zg(o.zg) + , radios(o.radios) + , npcs(o.npcs) + , vehicles(o.vehicles) + , cities(o.cities) + , roads_out(o.roads_out) + , loc(o.loc) + , prefix(o.prefix) + , name(o.name) + , layer(NULL) +{ + layer = new map_layer[OVERMAP_LAYERS]; + for(int z = 0; z < OVERMAP_LAYERS; ++z) { + for(int i = 0; i < OMAPX; ++i) { + for(int j = 0; j < OMAPY; ++j) { + layer[z].terrain[i][j] = o.layer[z].terrain[i][j]; + layer[z].visible[i][j] = o.layer[z].visible[i][j]; + } + } + layer[z].notes = o.layer[z].notes; + } +} + +overmap::~overmap() +{ + if (layer) { + delete [] layer; + layer = NULL; + } +} + +overmap& overmap::operator=(overmap const& o) +{ + zg = o.zg; + radios = o.radios; + npcs = o.npcs; + vehicles = o.vehicles; + cities = o.cities; + roads_out = o.roads_out; + loc = o.loc; + prefix = o.prefix; + name = o.name; + + if (layer) { + delete [] layer; + layer = NULL; + } + + layer = new map_layer[OVERMAP_LAYERS]; + for(int z = 0; z < OVERMAP_LAYERS; ++z) { + for(int i = 0; i < OMAPX; ++i) { + for(int j = 0; j < OMAPY; ++j) { + layer[z].terrain[i][j] = o.layer[z].terrain[i][j]; + layer[z].visible[i][j] = o.layer[z].visible[i][j]; + } + } + layer[z].notes = o.layer[z].notes; + } + + return *this; +} + +void overmap::init_layers() +{ + layer = new map_layer[OVERMAP_LAYERS]; + for(int z = 0; z < OVERMAP_LAYERS; ++z) { + oter_id default_type = (z < OVERMAP_DEPTH) ? "rock" : (z == OVERMAP_DEPTH) ? "field" : ""; + // oter_iid default_type = (z < OVERMAP_DEPTH) ? ot_rock : (z == OVERMAP_DEPTH) ? ot_field : ot_null; // todo: regional default_type + for(int i = 0; i < OMAPX; ++i) { + for(int j = 0; j < OMAPY; ++j) { + layer[z].terrain[i][j] = default_type; + layer[z].visible[i][j] = false; + } + } + } +} + +oter_id& overmap::ter(const int x, const int y, const int z) +{ + if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY || z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { + return nullret; + } + + return layer[z + OVERMAP_DEPTH].terrain[x][y]; +} + +bool& overmap::seen(int x, int y, int z) +{ + if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY || z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { + nullbool = false; + return nullbool; + } + return layer[z + OVERMAP_DEPTH].visible[x][y]; +} + +// this uses om_sub (submap coordinates localized to overmap, +// aka levxy or om_pos * 2) +std::vector overmap::monsters_at(int x, int y, int z) +{ + std::vector ret; + if (x < 0 || x >= OMAPX*2 || y < 0 || y >= OMAPY*2 || z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) + return ret; + for (int i = 0; i < zg.size(); i++) { + if (zg[i].posz != z) { continue; } + if ( + ( zg[i].diffuse == true ? square_dist(x, y, zg[i].posx, zg[i].posy) : trig_dist(x, y, zg[i].posx, zg[i].posy) ) + <= zg[i].radius) { + ret.push_back(&(zg[i])); + } + } + return ret; +} + +// this uses om_pos (overmap tiles, aka levxy / 2) +bool overmap::is_safe(int x, int y, int z) +{ + std::vector mons = monsters_at(x*2, y*2, z); + if (mons.empty()) + return true; + + bool safe = true; + for (int n = 0; n < mons.size() && safe; n++) + safe = mons[n]->is_safe(); + + return safe; +} + +bool overmap::has_note(int const x, int const y, int const z) const +{ + if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { return false; } + + for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { + if (layer[z + OVERMAP_DEPTH].notes[i].x == x && layer[z + OVERMAP_DEPTH].notes[i].y == y) + return true; + } + return false; +} + +std::string const& overmap::note(int const x, int const y, int const z) const +{ + if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { return nullstr; } + + for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { + if (layer[z + OVERMAP_DEPTH].notes[i].x == x && layer[z + OVERMAP_DEPTH].notes[i].y == y) + return layer[z + OVERMAP_DEPTH].notes[i].text; + } + + return nullstr; +} + +void overmap::add_note(int const x, int const y, int const z, std::string const & message) +{ + if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { + debugmsg("Attempting to add not to overmap for blank layer %d", z); + return; + } + + for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { + if (layer[z + OVERMAP_DEPTH].notes[i].x == x && layer[z + OVERMAP_DEPTH].notes[i].y == y) { + if (message.empty()) + layer[z + OVERMAP_DEPTH].notes.erase(layer[z + OVERMAP_DEPTH].notes.begin() + i); + else + layer[z + OVERMAP_DEPTH].notes[i].text = message; + return; + } + } + if (message.length() > 0) + layer[z + OVERMAP_DEPTH].notes.push_back(om_note(x, y, layer[z + OVERMAP_DEPTH].notes.size(), message)); +} + +point overmap::find_note(int const x, int const y, int const z, std::string const& text) const +{ + point ret(-1, -1); + if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { + debugmsg("Attempting to find note on overmap for blank layer %d", z); + return ret; + } + + int closest = 9999; + for (int i = 0; i < layer[z + OVERMAP_DEPTH].notes.size(); i++) { + if (layer[z + OVERMAP_DEPTH].notes[i].text.find(text) != std::string::npos && + rl_dist(x, y, layer[z + OVERMAP_DEPTH].notes[i].x, layer[z + OVERMAP_DEPTH].notes[i].y) < closest) { + closest = rl_dist(x, y, layer[z + OVERMAP_DEPTH].notes[i].x, layer[z + OVERMAP_DEPTH].notes[i].y); + ret = point(layer[z + OVERMAP_DEPTH].notes[i].x, layer[z + OVERMAP_DEPTH].notes[i].y); + } + } + + return ret; +} + +//This removes a npc from the overmap. The NPC is supposed to be already dead. +//This function also assumes the npc is not in the list of active npcs anymore. +void overmap::remove_npc(int npc_id) +{ + for(int i = 0; i < npcs.size(); i++) + { + if(npcs[i]->getID() == npc_id) + { + //Remove this npc from the list of overmap npcs. + if(!npcs[i]->dead) debugmsg("overmap::remove_npc: NPC (%d) is not dead.",npc_id); + npc * tmp = npcs[i]; + npcs.erase(npcs.begin() + i); + delete tmp; + return; + } + } +} + +void overmap::remove_vehicle(int id) +{ + std::map::iterator om_veh = vehicles.find(id); + if (om_veh != vehicles.end()) + vehicles.erase(om_veh); + +} + +int overmap::add_vehicle(vehicle *veh) +{ + int id = vehicles.size() + 1; + // this *should* be unique but just in case + while ( vehicles.count(id) > 0 ) + id++; + + om_vehicle tracked_veh; + tracked_veh.x = veh->omap_x()/2; + tracked_veh.y = veh->omap_y()/2; + tracked_veh.name = veh->name; + vehicles[id]=tracked_veh; + + return id; +} + +point overmap::display_notes(game* g, int const z) const +{ + if (z < -OVERMAP_DEPTH || z > OVERMAP_HEIGHT) { + debugmsg("overmap::display_notes: Attempting to display notes on overmap for blank layer %d", z); + return point(-1, -1); + } + + std::string title = _("Notes:"); + WINDOW* w_notes = newwin(FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, + (TERMY > FULL_SCREEN_HEIGHT) ? (TERMY-FULL_SCREEN_HEIGHT)/2 : 0, + (TERMX > FULL_SCREEN_WIDTH) ? (TERMX-FULL_SCREEN_WIDTH)/2 : 0); + + wborder(w_notes, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, + LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); + + const int maxitems = 20; // Number of items to show at one time. + char ch = '.'; + int start = 0, cur_it(0); + mvwprintz(w_notes, 1, 1, c_ltgray, title.c_str()); + do{ + if (ch == '<' && start > 0) { + for (int i = 1; i < FULL_SCREEN_HEIGHT; i++) + mvwprintz(w_notes, i+1, 1, c_black, " "); + start -= maxitems; + if (start < 0) + start = 0; + mvwprintw(w_notes, maxitems + 2, 1, " "); + } + if (ch == '>' && cur_it < layer[z + OVERMAP_DEPTH].notes.size()) { + start = cur_it; + mvwprintw(w_notes, maxitems + 2, 13, " "); + for (int i = 1; i < FULL_SCREEN_HEIGHT; i++) + mvwprintz(w_notes, i, 0, c_black, " "); + } + int cur_line = 3; + int last_line = -1; + char cur_let = 'a'; + for (cur_it = start; cur_it < start + maxitems && cur_line < 23; cur_it++) { + if (cur_it < layer[z + OVERMAP_DEPTH].notes.size()) { + mvwputch (w_notes, cur_line, 1, c_white, cur_let++); + mvwprintz(w_notes, cur_line, 3, c_ltgray, "- %s", layer[z + OVERMAP_DEPTH].notes[cur_it].text.c_str()); + } else{ + last_line = cur_line - 2; + break; + } + cur_line++; + } + + if(last_line == -1) + last_line = 23; + if (start > 0) + mvwprintw(w_notes, maxitems + 4, 1, _("< Go Back")); + if (cur_it < layer[z + OVERMAP_DEPTH].notes.size()) + mvwprintw(w_notes, maxitems + 4, 12, _("> More notes")); + if(ch >= 'a' && ch <= 't'){ + int chosen_line = (int)(ch % (int)'a'); + if(chosen_line < last_line) + return point(layer[z + OVERMAP_DEPTH].notes[start + chosen_line].x, layer[z + OVERMAP_DEPTH].notes[start + chosen_line].y); + } + mvwprintz(w_notes, 1, 40, c_white, _("Press letter to center on note")); + mvwprintz(w_notes, FULL_SCREEN_HEIGHT-2, 40, c_white, _("Spacebar - Return to map ")); + wrefresh(w_notes); + ch = getch(); + } while(ch != ' ' && ch != '\n' && ch != KEY_ESCAPE); + delwin(w_notes); + return point(-1,-1); +} + +bool overmap::has_npc(game *g, int const x, int const y, int const z) const +{ + //Check if the target overmap square has an npc in it. + for (int n = 0; n < npcs.size(); n++) { + if(npcs[n]->omz == z && !npcs[n]->marked_for_death) + { + if (npcs[n]->is_active(g)) + { //Active npcs have different coords. Because Cata hates you! + if ((g->levx + (npcs[n]->posx / SEEX))/2 == x && + (g->levy + (npcs[n]->posy / SEEY))/2 == y) + return true; + } else if ((npcs[n]->mapx)/2 == x && (npcs[n]->mapy)/2== y) + return true; + } + } + return false; +} + +bool overmap::has_vehicle(game *g, int const x, int const y, int const z, bool require_pda) const +{ + // vehicles only spawn at z level 0 (for now) + if (!z == 0) + return false; + + // if the player is not carrying a PDA then he cannot see the vehicle. + if (require_pda && !g->u.has_amount("pda", 1)) + return false; + + for (std::map::const_iterator it = vehicles.begin(); + it != vehicles.end(); it++) + { + om_vehicle om_veh = it->second; + if ( om_veh.x == x && om_veh.y == y ) + return true; + } + return false; +} + +// int cursx = (g->levx + int(MAPSIZE / 2)) / 2, +// cursy = (g->levy + int(MAPSIZE / 2)) / 2; + +//Helper function for the overmap::draw function. +void overmap::print_npcs(game *g, WINDOW *w, int const x, int const y, int const z) +{ + int i = 0, maxnamelength = 0; + //Check the max namelength of the npcs in the target + for (int n = 0; n < npcs.size(); n++) + { + if(npcs[n]->omz == z && !npcs[n]->marked_for_death) + { + if (npcs[n]->is_active(g)) + { //Active npcs have different coords. Because Cata hates you! + if ((g->levx + (npcs[n]->posx / SEEX))/2 == x && + (g->levy + (npcs[n]->posy / SEEY))/2 == y) + { + if (npcs[n]->name.length() > maxnamelength) + maxnamelength = npcs[n]->name.length(); + } + } else if ((npcs[n]->mapx)/2 == x && (npcs[n]->mapy)/2 == y) { + if (npcs[n]->name.length() > maxnamelength) + maxnamelength = npcs[n]->name.length(); + } + } + } + //Check if the target has an npc in it. + for (int n = 0; n < npcs.size(); n++) + { + if (npcs[n]->omz == z && !npcs[n]->marked_for_death) + { + if (npcs[n]->is_active(g)) + { + if ((g->levx + (npcs[n]->posx / SEEX))/2 == x && + (g->levy + (npcs[n]->posy / SEEY))/2 == y) + { + mvwprintz(w, i, 0, c_yellow, npcs[n]->name.c_str()); + for (int j = npcs[n]->name.length(); j < maxnamelength; j++) + mvwputch(w, i, j, c_black, LINE_XXXX); + i++; + } + } else if ((npcs[n]->mapx)/2 == x && (npcs[n]->mapy)/2 == y) + { + mvwprintz(w, i, 0, c_yellow, npcs[n]->name.c_str()); + for (int j = npcs[n]->name.length(); j < maxnamelength; j++) + mvwputch(w, i, j, c_black, LINE_XXXX); + i++; + } + } + } + for (int j = 0; j < i; j++) + mvwputch(w, j, maxnamelength, c_white, LINE_XOXO); + for (int j = 0; j < maxnamelength; j++) + mvwputch(w, i, j, c_white, LINE_OXOX); + mvwputch(w, i, maxnamelength, c_white, LINE_XOOX); +} + +void overmap::print_vehicles(game *g, WINDOW *w, int const x, int const y, int const z) +{ + if (!z==0) // vehicles only exist on zlevel 0 + return; + int i = 0, maxnamelength = 0; + //Check the max namelength of the vehicles in the target + for (std::map::const_iterator it = vehicles.begin(); + it != vehicles.end(); it++) + { + om_vehicle om_veh = it->second; + if ( om_veh.x == x && om_veh.y == y ) + { + if (om_veh.name.length() > maxnamelength) + maxnamelength = om_veh.name.length(); + } + } + //Check if the target has a vehicle in it. + for (std::map::const_iterator it = vehicles.begin(); + it != vehicles.end(); it++) + { + om_vehicle om_veh = it->second; + if (om_veh.x == x && om_veh.y == y) + { + mvwprintz(w, i, 0, c_cyan, om_veh.name.c_str()); + for (int j = om_veh.name.length(); j < maxnamelength; j++) + mvwputch(w, i, j, c_black, LINE_XXXX); + i++; + } + } + for (int j = 0; j < i; j++) + mvwputch(w, j, maxnamelength, c_white, LINE_XOXO); + for (int j = 0; j < maxnamelength; j++) + mvwputch(w, i, j, c_white, LINE_OXOX); + mvwputch(w, i, maxnamelength, c_white, LINE_XOOX); +} + +void overmap::generate(game *g, overmap* north, overmap* east, overmap* south, + overmap* west) +{ + dbg(D_INFO) << "overmap::generate start..."; + erase(); + clear(); + move(0, 0); + std::vector road_points; // cities and roads_out together + std::vector river_start;// West/North endpoints of rivers + std::vector river_end; // East/South endpoints of rivers + +// Determine points where rivers & roads should connect w/ adjacent maps + const oter_id river_center("river_center"); // optimized comparison. + + if (north != NULL) { + for (int i = 2; i < OMAPX - 2; i++) { + if (is_river(north->ter(i,OMAPY-1, 0))) + ter(i, 0, 0) = river_center; + if (north->ter(i, OMAPY - 1, 0) == river_center && + north->ter(i - 1, OMAPY - 1, 0) == river_center && + north->ter(i + 1, OMAPY - 1, 0) == river_center) { + if (river_start.size() == 0 || + river_start[river_start.size() - 1].x < i - 6) + river_start.push_back(point(i, 0)); + } + } + for (int i = 0; i < north->roads_out.size(); i++) { + if (north->roads_out[i].y == OMAPY - 1) + roads_out.push_back(city(north->roads_out[i].x, 0, 0)); + } + } + int rivers_from_north = river_start.size(); + if (west != NULL) { + for (int i = 2; i < OMAPY - 2; i++) { + if (is_river(west->ter(OMAPX - 1, i, 0))) + ter(0, i, 0) = river_center; + if (west->ter(OMAPX - 1, i, 0) == river_center && + west->ter(OMAPX - 1, i - 1, 0) == river_center && + west->ter(OMAPX - 1, i + 1, 0) == river_center) { + if (river_start.size() == rivers_from_north || + river_start[river_start.size() - 1].y < i - 6) + river_start.push_back(point(0, i)); + } + } + for (int i = 0; i < west->roads_out.size(); i++) { + if (west->roads_out[i].x == OMAPX - 1) + roads_out.push_back(city(0, west->roads_out[i].y, 0)); + } + } + if (south != NULL) { + for (int i = 2; i < OMAPX - 2; i++) { + if (is_river(south->ter(i, 0, 0))) + ter(i, OMAPY - 1, 0) = river_center; + if (south->ter(i, 0, 0) == river_center && + south->ter(i - 1, 0, 0) == river_center && + south->ter(i + 1, 0, 0) == river_center) { + if (river_end.size() == 0 || + river_end[river_end.size() - 1].x < i - 6) + river_end.push_back(point(i, OMAPY - 1)); + } + if (south->ter(i, 0, 0) == "road_nesw") + roads_out.push_back(city(i, OMAPY - 1, 0)); + } + for (int i = 0; i < south->roads_out.size(); i++) { + if (south->roads_out[i].y == 0) + roads_out.push_back(city(south->roads_out[i].x, OMAPY - 1, 0)); + } + } + int rivers_to_south = river_end.size(); + if (east != NULL) { + for (int i = 2; i < OMAPY - 2; i++) { + if (is_river(east->ter(0, i, 0))) + ter(OMAPX - 1, i, 0) = river_center; + if (east->ter(0, i, 0) == river_center && + east->ter(0, i - 1, 0) == river_center && + east->ter(0, i + 1, 0) == river_center) { + if (river_end.size() == rivers_to_south || + river_end[river_end.size() - 1].y < i - 6) + river_end.push_back(point(OMAPX - 1, i)); + } + if (east->ter(0, i, 0) == "road_nesw") + roads_out.push_back(city(OMAPX - 1, i, 0)); + } + for (int i = 0; i < east->roads_out.size(); i++) { + if (east->roads_out[i].x == 0) + roads_out.push_back(city(OMAPX - 1, east->roads_out[i].y, 0)); + } + } + +// Even up the start and end points of rivers. (difference of 1 is acceptable) +// Also ensure there's at least one of each. + std::vector new_rivers; + if (north == NULL || west == NULL) { + while (river_start.empty() || river_start.size() + 1 < river_end.size()) { + new_rivers.clear(); + if (north == NULL) + new_rivers.push_back( point(rng(10, OMAPX - 11), 0) ); + if (west == NULL) + new_rivers.push_back( point(0, rng(10, OMAPY - 11)) ); + river_start.push_back( new_rivers[rng(0, new_rivers.size() - 1)] ); + } + } + if (south == NULL || east == NULL) { + while (river_end.empty() || river_end.size() + 1 < river_start.size()) { + new_rivers.clear(); + if (south == NULL) + new_rivers.push_back( point(rng(10, OMAPX - 11), OMAPY - 1) ); + if (east == NULL) + new_rivers.push_back( point(OMAPX - 1, rng(10, OMAPY - 11)) ); + river_end.push_back( new_rivers[rng(0, new_rivers.size() - 1)] ); + } + } + +// Now actually place those rivers. + if (river_start.size() > river_end.size() && river_end.size() > 0) { + std::vector river_end_copy = river_end; + while (!river_start.empty()) { + int index = rng(0, river_start.size() - 1); + if (!river_end.empty()) { + place_river(river_start[index], river_end[0]); + river_end.erase(river_end.begin()); + } else + place_river(river_start[index], + river_end_copy[rng(0, river_end_copy.size() - 1)]); + river_start.erase(river_start.begin() + index); + } + } else if (river_end.size() > river_start.size() && river_start.size() > 0) { + std::vector river_start_copy = river_start; + while (!river_end.empty()) { + int index = rng(0, river_end.size() - 1); + if (!river_start.empty()) { + place_river(river_start[0], river_end[index]); + river_start.erase(river_start.begin()); + } else + place_river(river_start_copy[rng(0, river_start_copy.size() - 1)], + river_end[index]); + river_end.erase(river_end.begin() + index); + } + } else if (river_end.size() > 0) { + if (river_start.size() != river_end.size()) + river_start.push_back( point(rng(OMAPX * .25, OMAPX * .75), + rng(OMAPY * .25, OMAPY * .75))); + for (int i = 0; i < river_start.size(); i++) + place_river(river_start[i], river_end[i]); + } + +// Cities and forests come next. +// These're agnostic of adjacent maps, so it's very simple. + place_cities(); + place_forest(); + +// Ideally we should have at least two exit points for roads, on different sides + if (roads_out.size() < 2) { + std::vector viable_roads; + int tmp; +// Populate viable_roads with one point for each neighborless side. +// Make sure these points don't conflict with rivers. +// TODO: In theory this is a potential infinte loop... + if (north == NULL) { + do + tmp = rng(10, OMAPX - 11); + while (is_river(ter(tmp, 0, 0)) || is_river(ter(tmp - 1, 0, 0)) || + is_river(ter(tmp + 1, 0, 0)) ); + viable_roads.push_back(city(tmp, 0, 0)); + } + if (east == NULL) { + do + tmp = rng(10, OMAPY - 11); + while (is_river(ter(OMAPX - 1, tmp, 0)) || is_river(ter(OMAPX - 1, tmp - 1, 0))|| + is_river(ter(OMAPX - 1, tmp + 1, 0))); + viable_roads.push_back(city(OMAPX - 1, tmp, 0)); + } + if (south == NULL) { + do + tmp = rng(10, OMAPX - 11); + while (is_river(ter(tmp, OMAPY - 1, 0)) || is_river(ter(tmp - 1, OMAPY - 1, 0))|| + is_river(ter(tmp + 1, OMAPY - 1, 0))); + viable_roads.push_back(city(tmp, OMAPY - 1, 0)); + } + if (west == NULL) { + do + tmp = rng(10, OMAPY - 11); + while (is_river(ter(0, tmp, 0)) || is_river(ter(0, tmp - 1, 0)) || + is_river(ter(0, tmp + 1, 0))); + viable_roads.push_back(city(0, tmp, 0)); + } + while (roads_out.size() < 2 && !viable_roads.empty()) { + tmp = rng(0, viable_roads.size() - 1); + roads_out.push_back(viable_roads[tmp]); + viable_roads.erase(viable_roads.begin() + tmp); + } + } + +// Compile our master list of roads; it's less messy if roads_out is first + for (int i = 0; i < roads_out.size(); i++) + road_points.push_back(roads_out[i]); + for (int i = 0; i < cities.size(); i++) + road_points.push_back(cities[i]); +// And finally connect them via "highways" + place_hiways(road_points, 0, "road"); +// Place specials + place_specials(); +// Clean up our roads and rivers + polish(0); + + // TODO: there is no reason we can't generate the sublevels in one pass + // for that matter there is no reason we can't as we add the entrance ways either + + // Always need at least one sublevel, but how many more + int z = -1; + bool requires_sub = false; + do { + requires_sub = generate_sub(z); + } while(requires_sub && (--z >= -OVERMAP_DEPTH)); + +// Place the monsters, now that the terrain is laid out + place_mongroups(); + place_radios(); + dbg(D_INFO) << "overmap::generate done"; +} + + +bool overmap::generate_sub(int const z) +{ + bool requires_sub = false; + std::vector subway_points; + std::vector sewer_points; + std::vector ant_points; + std::vector goo_points; + std::vector lab_points; + std::vector ice_lab_points; + std::vector shaft_points; + std::vector mine_points; + std::vector bunker_points; + std::vector shelter_points; + std::vector lmoe_points; + std::vector cabin_strange_points; + std::vector triffid_points; + std::vector temple_points; + std::vector office_entrance_points; + std::vector office_points; + std::vector prison_points; + std::vector prison_entrance_points; + std::vector haz_sar_entrance_points; + std::vector haz_sar_points; + std::vector cathedral_entrance_points; + std::vector cathedral_points; + std::vector hotel_tower_1_points; + std::vector hotel_tower_2_points; + std::vector hotel_tower_3_points; + + // These are so common that it's worth checking first as int. + const oter_id skip_above[5] = { + oter_id("rock"), oter_id("forest"), oter_id("field"), + oter_id("forest_thick"), oter_id("forest_water") + }; + + for (int i = 0; i < OMAPX; i++) { + for (int j = 0; j < OMAPY; j++) { + oter_id oter_above = ter(i, j, z + 1); + + // implicitly skip skip_above oter_ids + bool skipme = false; + for (int si=0; si < 5; si++) { + if (oter_above == skip_above[si]) { + skipme = true; + } + } + if (skipme) { + continue; + } + + if (is_ot_type("house_base", oter_above)) { + ter(i, j, z) = "basement"; + } else if (is_ot_type("sub_station", oter_above)) { + ter(i, j, z) = "subway_nesw"; + subway_points.push_back(city(i, j, 0)); + } else if (is_ot_type("prison", oter_above) && + oter_above != "prison_2") { + prison_points.push_back( point(i, j) ); + + } else if (oter_above == "prison_2") { + prison_entrance_points.push_back( point(i, j) ); + } else if (oter_above == "road_nesw_manhole") { + ter(i, j, z) = "sewer_nesw"; + sewer_points.push_back(city(i, j, 0)); + } else if (oter_above == "sewage_treatment") { + for (int x = i-1; x <= i+1; x++) { + for (int y = j-1; y <= j+1; y++) { + ter(x, y, z) = "sewage_treatment_under"; + } + } + ter(i, j, z) = "sewage_treatment_hub"; + sewer_points.push_back(city(i, j, 0)); + } else if (oter_above == "spider_pit") { + ter(i, j, z) = "spider_pit_under"; + } else if (oter_above == "cave" && z == -1) { + if (one_in(3)) { + ter(i, j, z) = "cave_rat"; + requires_sub = true; // rat caves are two level + } else { + ter(i, j, z) = "cave"; + } + } else if (oter_above == "cave_rat" && z == -2) { + ter(i, j, z) = "cave_rat"; + } else if (oter_above == "anthill") { + int size = rng(MIN_ANT_SIZE, MAX_ANT_SIZE); + ant_points.push_back(city(i, j, size)); + zg.push_back(mongroup("GROUP_ANT", i * 2, j * 2, z, size * 1.5, rng(6000, 8000))); + } else if (oter_above == "slimepit_down") { + int size = rng(MIN_GOO_SIZE, MAX_GOO_SIZE); + goo_points.push_back(city(i, j, size)); + } else if (oter_above == "forest_water") { + ter(i, j, z) = "cavern"; + } else if (oter_above == "triffid_grove" || + oter_above == "triffid_roots") { + triffid_points.push_back( point(i, j) ); + } else if (oter_above == "temple_stairs") { + temple_points.push_back( point(i, j) ); + } else if (oter_above == "lab_core" || + (z == -1 && oter_above == "lab_stairs")) { + lab_points.push_back(city(i, j, rng(1, 5 + z))); + } else if (oter_above == "lab_stairs") { + ter(i, j, z) = "lab"; + } else if (oter_above == "ice_lab_core" || + (z == -1 && oter_above == "ice_lab_stairs")) { + ice_lab_points.push_back(city(i, j, rng(1, 5 + z))); + } else if (oter_above == "ice_lab_stairs") { + ter(i, j, z) = "ice_lab"; + } else if (oter_above == "bunker" && z == -1) { + bunker_points.push_back( point(i, j) ); + } else if (oter_above == "shelter") { + shelter_points.push_back( point(i, j) ); + } else if (oter_above == "lmoe") { + lmoe_points.push_back( point(i, j) ); + } else if (oter_above == "cabin_strange") { + cabin_strange_points.push_back( point(i, j) ); + } else if (oter_above == "mine_entrance") { + shaft_points.push_back( point(i, j) ); + } else if (oter_above == "mine_shaft" || + oter_above == "mine_down" ) { + ter(i, j, z) = "mine"; + mine_points.push_back(city(i, j, rng(6 + z, 10 + z))); + // technically not all finales need a sub level, + // but at this point we don't know + requires_sub = true; + } else if (oter_above == "mine_finale") { + for (int x = i - 1; x <= i + 1; x++) { + for (int y = j - 1; y <= j + 1; y++) { + ter(x, y, z) = "spiral"; + } + } + ter(i, j, z) = "spiral_hub"; + zg.push_back(mongroup("GROUP_SPIRAL", i * 2, j * 2, z, 2, 200)); + } else if (oter_above == "silo") { + if (rng(2, 7) < abs(z) || rng(2, 7) < abs(z)) { + ter(i, j, z) = "silo_finale"; + } else { + ter(i, j, z) = "silo"; + requires_sub = true; + } + } else if (oter_above == "office_tower_1_entrance") { + office_entrance_points.push_back( point(i, j) ); + } else if (oter_above == "office_tower_1") { + office_points.push_back( point(i, j) ); + } else if (oter_above == "haz_sar_entrance") { + haz_sar_entrance_points.push_back( point(i, j) ); + } else if (oter_above == "haz_sar") { + haz_sar_points.push_back( point(i, j) ); + } else if (oter_above == "cathedral_1_entrance") { + cathedral_entrance_points.push_back( point(i, j) ); + } else if (oter_above == "cathedral_1") { + cathedral_points.push_back( point(i, j) ); + } else if (oter_above == "hotel_tower_1_7") { + hotel_tower_1_points.push_back( point(i, j) ); + } else if (oter_above == "hotel_tower_1_8") { + hotel_tower_2_points.push_back( point(i, j) ); + } else if (oter_above == "hotel_tower_1_9") { + hotel_tower_3_points.push_back( point(i, j) ); + } + } + } + + for (int i = 0; i < goo_points.size(); i++) { + requires_sub |= build_slimepit(goo_points[i].x, goo_points[i].y, z, goo_points[i].s); + } + place_hiways(sewer_points, z, "sewer"); + polish(z, "sewer"); + place_hiways(subway_points, z, "subway"); + for (int i = 0; i < subway_points.size(); i++) { + ter(subway_points[i].x, subway_points[i].y, z) = "subway_station"; + } + for (int i = 0; i < lab_points.size(); i++) { + bool lab = build_lab(lab_points[i].x, lab_points[i].y, z, lab_points[i].s); + requires_sub |= lab; + if (!lab && ter(lab_points[i].x, lab_points[i].y, z) == "lab_core") { + ter(lab_points[i].x, lab_points[i].y, z) = "lab"; + } + } + for (int i = 0; i < ice_lab_points.size(); i++) { + bool ice_lab = build_ice_lab(ice_lab_points[i].x, ice_lab_points[i].y, z, ice_lab_points[i].s); + requires_sub |= ice_lab; + if (!ice_lab && ter(ice_lab_points[i].x, ice_lab_points[i].y, z) == "ice_lab_core") { + ter(ice_lab_points[i].x, ice_lab_points[i].y, z) = "ice_lab"; + } + } + for (int i = 0; i < ant_points.size(); i++) { + build_anthill(ant_points[i].x, ant_points[i].y, z, ant_points[i].s); + } + polish(z, "subway"); + polish(z, "ants"); + + for (int i = 0; i < cities.size(); i++) { + if (one_in(3)) { + zg.push_back(mongroup("GROUP_CHUD", cities[i].x * 2, + cities[i].y * 2, z, cities[i].s, + cities[i].s * 20)); + } + if (!one_in(8)) { + zg.push_back(mongroup("GROUP_SEWER", + cities[i].x * 2, cities[i].y * 2, z, + cities[i].s * 3.5, cities[i].s * 70)); + } + } + + place_rifts(z); + for (int i = 0; i < mine_points.size(); i++) { + build_mine(mine_points[i].x, mine_points[i].y, z, mine_points[i].s); + } + + for (int i = 0; i < shaft_points.size(); i++) { + ter(shaft_points[i].x, shaft_points[i].y, z) = "mine_shaft"; + requires_sub = true; + } + + for (int i = 0; i < bunker_points.size(); i++) { + ter(bunker_points[i].x, bunker_points[i].y, z) = "bunker"; + } + + for (int i = 0; i < shelter_points.size(); i++) { + ter(shelter_points[i].x, shelter_points[i].y, z) = "shelter_under"; + } + + for (int i = 0; i < lmoe_points.size(); i++) { + ter(lmoe_points[i].x, lmoe_points[i].y, z) = "lmoe_under"; + } + + for (int i = 0; i < cabin_strange_points.size(); i++) { + ter(cabin_strange_points[i].x, cabin_strange_points[i].y, z) = "cabin_strange_b"; + } + + for (int i = 0; i < triffid_points.size(); i++) { + if (z == -1) { + ter(triffid_points[i].x, triffid_points[i].y, z) = "triffid_roots"; + requires_sub = true; + } else { + ter(triffid_points[i].x, triffid_points[i].y, z) = "triffid_finale"; + } + } + + for (int i = 0; i < temple_points.size(); i++) { + if (z == -5) { + ter(temple_points[i].x, temple_points[i].y, z) = "temple_finale"; + } else { + ter(temple_points[i].x, temple_points[i].y, z) = "temple_stairs"; + requires_sub = true; + } + } + for (int i = 0; i < office_entrance_points.size(); i++) { + ter(office_entrance_points[i].x, office_entrance_points[i].y, z) = "office_tower_b_entrance"; + } + for (int i = 0; i < office_points.size(); i++) { + ter(office_points[i].x, office_points[i].y, z) = "office_tower_b"; + } + for (int i = 0; i < prison_points.size(); i++) { + ter(prison_points[i].x, prison_points[i].y, z) = "prison_b"; + } + for (int i = 0; i < prison_entrance_points.size(); i++) { + ter(prison_entrance_points[i].x, prison_entrance_points[i].y, z) = "prison_b_entrance"; + } + for (int i = 0; i < haz_sar_entrance_points.size(); i++) { + ter(haz_sar_entrance_points[i].x, haz_sar_entrance_points[i].y, z-1) = "haz_sar_entrance_b1"; + } + for (int i = 0; i < haz_sar_points.size(); i++) { + ter(haz_sar_points[i].x, haz_sar_points[i].y, z-1) = "haz_sar_b1"; + } + for (int i = 0; i < cathedral_entrance_points.size(); i++) { + ter(cathedral_entrance_points[i].x, cathedral_entrance_points[i].y, z) = "cathedral_b_entrance"; + } + for (int i = 0; i < cathedral_points.size(); i++) { + ter(cathedral_points[i].x, cathedral_points[i].y, z) = "cathedral_b"; + } + for (int i = 0; i < hotel_tower_1_points.size(); i++) { + ter(hotel_tower_1_points[i].x, hotel_tower_1_points[i].y, z) = "hotel_tower_b_1"; + } + for (int i = 0; i < hotel_tower_2_points.size(); i++) { + ter(hotel_tower_2_points[i].x, hotel_tower_2_points[i].y, z) = "hotel_tower_b_2"; + } + for (int i = 0; i < hotel_tower_3_points.size(); i++) { + ter(hotel_tower_3_points[i].x, hotel_tower_3_points[i].y, z) = "hotel_tower_b_3"; + } + return requires_sub; +} + +void overmap::make_tutorial() +{ + for (int i = 0; i < OMAPX; i++) { + for (int j = 0; j < OMAPY; j++) { + ter(i, j, -1) = "rock"; + } + } + ter(50, 50, 0) = "tutorial"; + ter(50, 50, -1) = "tutorial"; + zg.clear(); +} + +point overmap::find_closest(point origin, const oter_id &type, + int &dist, bool must_be_seen) +{ + //does origin qualify? + if (check_ot_type(type, origin.x, origin.y, 0)) { + if (!must_be_seen || seen(origin.x, origin.y, 0)) { + return point(origin.x, origin.y); + } + } + + int max = (dist == 0 ? OMAPX : dist); + // expanding box + for (dist = 0; dist <= max; dist++) { + // each edge length is 2*dist-2, because corners belong to one edge + // south is +y, north is -y + for (int i = 0; i < dist*2-1; i++) { + //start at northwest, scan north edge + int x = origin.x - dist + i; + int y = origin.y - dist; + if (check_ot_type(type, x, y, 0)) { + if (!must_be_seen || seen(x, y, 0)) { + return point(x, y); + } + } + + //start at southeast, scan south + x = origin.x + dist - i; + y = origin.y + dist; + if (check_ot_type(type, x, y, 0)) { + if (!must_be_seen || seen(x, y, 0)) { + return point(x, y); + } + } + + //start at southwest, scan west + x = origin.x - dist; + y = origin.y + dist - i; + if (check_ot_type(type, x, y, 0)) { + if (!must_be_seen || seen(x, y, 0)) { + return point(x, y); + } + } + + //start at northeast, scan east + x = origin.x + dist; + y = origin.y - dist + i; + if (check_ot_type(type, x, y, 0)) { + if (!must_be_seen || seen(x, y, 0)) { + return point(x, y); + } + } + } + } + + dist = -1; + return point(-1, -1); +} + +std::vector overmap::find_all(tripoint origin, const std::string &type, + int &dist, bool must_be_seen) +{ + std::vector res; + int max = (dist == 0 ? OMAPX / 2 : dist); + for (dist = 0; dist <= max; dist++) { + for (int x = origin.x - dist; x <= origin.x + dist; x++) { + for (int y = origin.y - dist; y <= origin.y + dist; y++) { + if (check_ot_type(type, x, y, origin.z) + && (!must_be_seen || seen(x, y, origin.z))) { + res.push_back(point(x, y)); + } + } + } + } + return res; +} + +std::vector overmap::find_terrain(std::string term, int cursx, int cursy, int zlevel) +{ + std::vector found; + for (int x = 0; x < OMAPX; x++) { + for (int y = 0; y < OMAPY; y++) { + if (seen(x, y, zlevel) && otermap[ter(x, y, zlevel)].name.find(term) != std::string::npos) { + found.push_back( point(x, y) ); + } + } + } + return found; +} + +int overmap::closest_city(point p) +{ + int distance = 999, ret = -1; + for (int i = 0; i < cities.size(); i++) { + int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); + if (dist < distance || (dist == distance && cities[i].s < cities[ret].s)) { + ret = i; + distance = dist; + } + } + + return ret; +} + +point overmap::random_house_in_city(int city_id) +{ + if (city_id < 0 || city_id >= cities.size()) { + debugmsg("overmap::random_house_in_city(%d) (max %d)", city_id, + cities.size() - 1); + return point(-1, -1); + } + + std::vector valid; + int startx = cities[city_id].x - cities[city_id].s; + int endx = cities[city_id].x + cities[city_id].s; + int starty = cities[city_id].y - cities[city_id].s; + int endy = cities[city_id].y + cities[city_id].s; + for (int x = startx; x <= endx; x++) { + for (int y = starty; y <= endy; y++) { + if (check_ot_type("house", x, y, 0)) { + valid.push_back( point(x, y) ); + } + } + } + if (valid.empty()) { + return point(-1, -1); + } + + return valid[ rng(0, valid.size() - 1) ]; +} + +int overmap::dist_from_city(point p) +{ + int distance = 999; + for (int i = 0; i < cities.size(); i++) { + int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); + dist -= cities[i].s; + if (dist < distance) + distance = dist; + } + return distance; +} + +void overmap::draw(WINDOW *w, game *g, int z, int &cursx, int &cursy, + int &origx, int &origy, signed char &ch, bool blink, + overmap &hori, overmap &vert, overmap &diag, input_context* inp_ctxt) +{ + bool note_here = false, npc_here = false, veh_here = false; + std::string note_text; + int om_map_width = TERMX-28; + int om_map_height = TERMY; + + int omx, omy; + point target(-1, -1); + if (g->u.active_mission >= 0 && + g->u.active_mission < g->u.active_missions.size()) + target = g->find_mission(g->u.active_missions[g->u.active_mission])->target; + bool see; + oter_id cur_ter = ot_null; + nc_color ter_color; + long ter_sym; + /* First, determine if we're close enough to the edge to need an + * adjacent overmap, and record the offsets. */ + int offx = 0; + int offy = 0; + if (cursx < om_map_width / 2) + { + offx = -1; + } + else if (cursx > OMAPX - 2 - (om_map_width / 2)) + { + offx = 1; + } + if (cursy < (om_map_height / 2)) + { + offy = -1; + } + else if (cursy > OMAPY - 2 - (om_map_height / 2)) + { + offy = 1; + } + + // If the offsets don't match the previously loaded ones, load the new adjacent overmaps. + if( offx && loc.x + offx != hori.loc.x ) + { + hori = overmap_buffer.get( g, loc.x + offx, loc.y ); + } + if( offy && loc.y + offy != vert.loc.y ) + { + vert = overmap_buffer.get( g, loc.x, loc.y + offy ); + } + if( offx && offy && (loc.x + offx != diag.loc.x || loc.y + offy != diag.loc.y ) ) + { + diag = overmap_buffer.get( g, loc.x + offx, loc.y + offy ); + } + +// Now actually draw the map + bool csee = false; + oter_id ccur_ter = ""; + for (int i = -(om_map_width / 2); i < (om_map_width / 2); i++) { + for (int j = -(om_map_height / 2); + j <= (om_map_height / 2) + (ch == 'j' ? 1 : 0); j++) { + omx = cursx + i; + omy = cursy + j; + see = false; + npc_here = false; + veh_here = false; + if (omx >= 0 && omx < OMAPX && omy >= 0 && omy < OMAPY) { // It's in-bounds + cur_ter = ter(omx, omy, z); + see = seen(omx, omy, z); + note_here = has_note(omx, omy, z); + if (note_here) { + note_text = note(omx, omy, z); + } + //Check if there is an npc. + npc_here = has_npc(g,omx,omy,z); + // and a vehicle + veh_here = has_vehicle(g,omx,omy,z); +// + } else if (omx < 0) { + omx += OMAPX; + if (omy < 0 || omy >= OMAPY) { + omy += (omy < 0 ? OMAPY : 0 - OMAPY); + cur_ter = diag.ter(omx, omy, z); + see = diag.seen(omx, omy, z); + veh_here = diag.has_vehicle(g, omx, omy, z); + note_here = diag.has_note(omx, omy, z); + if (note_here) { + note_text = diag.note(omx, omy, z); + } + } else { + cur_ter = hori.ter(omx, omy, z); + see = hori.seen(omx, omy, z); + veh_here = hori.has_vehicle(g, omx, omy, z); + note_here = hori.has_note(omx, omy, z); + if (note_here) { + note_text = hori.note(omx, omy, z); + } + } + } else if (omx >= OMAPX) { + omx -= OMAPX; + if (omy < 0 || omy >= OMAPY) { + omy += (omy < 0 ? OMAPY : 0 - OMAPY); + cur_ter = diag.ter(omx, omy, z); + see = diag.seen(omx, omy, z); + veh_here = diag.has_vehicle(g, omx, omy, z); + note_here = diag.has_note(omx, omy, z); + if (note_here) { + note_text = diag.note(omx, omy, z); + } + } else { + cur_ter = hori.ter(omx, omy, z); + see = hori.seen(omx, omy, z); + veh_here = hori.has_vehicle(g, omx, omy, z); + note_here = hori.has_note(omx, omy, z); + if (note_here) { + note_text = hori.note(omx, omy, z); + } + } + } else if (omy < 0) { + omy += OMAPY; + cur_ter = vert.ter(omx, omy, z); + see = vert.seen(omx, omy, z); + veh_here = vert.has_vehicle(g, omx, omy, z); + note_here = vert.has_note(omx, omy, z); + if (note_here) { + note_text = vert.note(omx, omy, z); + } + } else if (omy >= OMAPY) { + omy -= OMAPY; + cur_ter = vert.ter(omx, omy, z); + see = vert.seen(omx, omy, z); + veh_here = vert.has_vehicle(g, omx, omy, z); + note_here = vert.has_note(omx, omy, z); + if (note_here) { + note_text = vert.note(omx, omy, z); + } + } else { + debugmsg("No data loaded! omx: %d omy: %d", omx, omy); + } +// + if (see) { + if (note_here && blink) { + ter_color = c_yellow; + if (note_text[1] == ':') { + ter_sym = note_text[0]; + } else { + ter_sym = 'N'; + } + } else if (omx == origx && omy == origy && blink) { + ter_color = g->u.color(); + ter_sym = '@'; + } else if (npc_here && blink) { + ter_color = c_pink; + ter_sym = '@'; + } else if (veh_here && blink) { + ter_color = c_cyan; + ter_sym = 'c'; + } else if (omx == target.x && omy == target.y && blink) { + ter_color = c_red; + ter_sym = '*'; + } else { + if (otermap.find(cur_ter) == otermap.end()) { + debugmsg("Bad ter %s (%d, %d)", cur_ter.c_str(), omx, omy); + } + ter_color = otermap[cur_ter].color; + ter_sym = otermap[cur_ter].sym; + } + } else { // We haven't explored this tile yet + ter_color = c_dkgray; + ter_sym = '#'; + } + if (j == 0 && i == 0) { + mvwputch_hi (w, om_map_height / 2, om_map_width / 2, + ter_color, ter_sym); + csee = see; + ccur_ter = cur_ter; + } else { + mvwputch(w, (om_map_height / 2) + j, (om_map_width / 2) + i, + ter_color, ter_sym); + } + } + } + if (target.x != -1 && target.y != -1 && blink && + (target.x < cursx - om_map_height / 2 || + target.x > cursx + om_map_height / 2 || + target.y < cursy - om_map_width / 2 || + target.y > cursy + om_map_width / 2 )) { + switch (direction_from(cursx, cursy, target.x, target.y)) { + case NORTH: mvwputch(w, 0, (om_map_width / 2), c_red, '^'); break; + case NORTHEAST: mvwputch(w, 0, om_map_width - 1, c_red, LINE_OOXX); break; + case EAST: mvwputch(w, (om_map_height / 2), + om_map_width - 1, c_red, '>'); break; + case SOUTHEAST: mvwputch(w, om_map_height, + om_map_width - 1, c_red, LINE_XOOX); break; + case SOUTH: mvwputch(w, om_map_height, + om_map_height / 2, c_red, 'v'); break; + case SOUTHWEST: mvwputch(w, om_map_height, 0, c_red, LINE_XXOO); break; + case WEST: mvwputch(w, om_map_height / 2, 0, c_red, '<'); break; + case NORTHWEST: mvwputch(w, 0, 0, c_red, LINE_OXXO); break; + } + } + + if (has_note(cursx, cursy, z)) { + note_text = note(cursx, cursy, z); + if (note_text[1] == ':') + note_text = note_text.substr(2, note_text.size()); + for (int i = 0; i < note_text.length(); i++) + mvwputch(w, 1, i, c_white, LINE_OXOX); + mvwputch(w, 1, note_text.length(), c_white, LINE_XOOX); + mvwputch(w, 0, note_text.length(), c_white, LINE_XOXO); + mvwprintz(w, 0, 0, c_yellow, note_text.c_str()); + } else if (has_npc(g, cursx, cursy, z)) + { + print_npcs(g, w, cursx, cursy, z); + } else if (has_vehicle(g, cursx, cursy, z)) + { + print_vehicles(g, w, cursx, cursy, z); + } + + + cur_ter = ter(cursx, cursy, z); +// Draw the vertical line + for (int j = 0; j < om_map_height; j++) + mvwputch(w, j, om_map_width, c_white, LINE_XOXO); +// Clear the legend + for (int i = om_map_width + 1; i < om_map_width + 55; i++) { + for (int j = 0; j < om_map_height; j++) + mvwputch(w, j, i, c_black, ' '); + } + + real_coords rc; + rc.fromomap( g->cur_om->pos().x, g->cur_om->pos().y, cursx, cursy ); + + if (csee) { + mvwputch(w, 1, om_map_width + 1, otermap[ccur_ter].color, otermap[ccur_ter].sym); + std::vector name = foldstring(otermap[ccur_ter].name,25); + for (int i = 1; (i - 1) < name.size(); i++) + { + mvwprintz(w, i, om_map_width + 3, otermap[ccur_ter].color, "%s", + name[i-1].c_str()); + } + } else + mvwprintz(w, 1, om_map_width + 1, c_dkgray, _("# Unexplored")); + + if (target.x != -1 && target.y != -1) { + int distance = rl_dist(origx, origy, target.x, target.y); + mvwprintz(w, 3, om_map_width + 1, c_white, _("Distance to target: %d"), distance); + } + mvwprintz(w, 15, om_map_width + 1, c_magenta, _("Use movement keys to pan. ")); + mvwprintz(w, 16, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("CENTER") + + _(" - Center map on character")).c_str()); + mvwprintz(w, 17, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("SEARCH") + + _(" - Search ")).c_str()); + mvwprintz(w, 18, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("CREATE_NOTE") + + _(" - Add/Edit a note ")).c_str()); + mvwprintz(w, 19, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("DELETE_NOTE") + + _(" - Delete a note ")).c_str()); + mvwprintz(w, 20, om_map_width + 1, c_magenta, (inp_ctxt->get_desc("LIST_NOTES") + + _(" - List notes ")).c_str()); + fold_and_print(w, 21, om_map_width + 1, 27, c_magenta, (inp_ctxt->get_desc("QUIT") + + _(" - Return to game ")).c_str()); + mvwprintz(w, getmaxy(w)-1, om_map_width + 1, c_red, string_format(_("LEVEL %i"),z).c_str()); + mvwprintz( w, getmaxy(w) - 1, om_map_width + 1, c_red, "%s, %d'%d, %d'%d", + string_format(_("LEVEL %i"),z).c_str(), rc.abs_om.x, rc.om_pos.x, + rc.abs_om.y, rc.om_pos.y ); +// Done with all drawing! + wrefresh(w); +} + +//Start drawing the overmap on the screen using the (m)ap command. +point overmap::draw_overmap(game *g, int zlevel) +{ + WINDOW* w_map = newwin(TERMY, TERMX, 0, 0); + WINDOW* w_search = newwin(13, 27, 3, TERMX-27); + timeout(BLINK_SPEED); // Enable blinking! + bool blink = true; + int cursx = (g->levx + int(MAPSIZE / 2)) / 2, + cursy = (g->levy + int(MAPSIZE / 2)) / 2; + int origx = cursx, origy = cursy, origz = zlevel; + signed char ch = 0; + point ret(-1, -1); + overmap hori, vert, diag; // Adjacent maps + + // Configure input context for navigating the map. + input_context ictxt("OVERMAP"); + ictxt.register_action("ANY_INPUT"); + ictxt.register_directions(); + ictxt.register_action("CONFIRM"); + ictxt.register_action("LEVEL_UP"); + ictxt.register_action("LEVEL_DOWN"); + ictxt.register_action("HELP_KEYBINDINGS"); + + // Actions whose keys we want to display. + ictxt.register_action("CENTER"); + ictxt.register_action("CREATE_NOTE"); + ictxt.register_action("DELETE_NOTE"); + ictxt.register_action("SEARCH"); + ictxt.register_action("LIST_NOTES"); + ictxt.register_action("QUIT"); + std::string action; + do { + draw(w_map, g, zlevel, cursx, cursy, origx, origy, ch, blink, hori, vert, diag, &ictxt); + action = ictxt.handle_input(); + timeout(BLINK_SPEED); // Enable blinking! + + int dirx, diry; + if (action != "ANY_INPUT") { + blink = true; // If any input is detected, make the blinkies on + } + ictxt.get_direction(dirx, diry, action); + if (dirx != -2 && diry != -2) { + cursx += dirx; + cursy += diry; + } else if (action == "CENTER") { + cursx = origx; + cursy = origy; + zlevel = origz; + } else if (action == "LEVEL_DOWN" && zlevel > -OVERMAP_DEPTH) { + zlevel -= 1; + } else if (action == "LEVEL_UP" && zlevel < OVERMAP_HEIGHT) { + zlevel += 1; + } + else if (action == "CONFIRM") + ret = point(cursx, cursy); + else if (action == "QUIT") + ret = point(-1, -1); + else if (action == "CREATE_NOTE") { + timeout(-1); + add_note(cursx, cursy, zlevel, string_input_popup(_("Note (X:TEXT for custom symbol):"), + 45, note(cursx, cursy, zlevel))); // 45 char max + timeout(BLINK_SPEED); + } else if(action == "DELETE_NOTE"){ + timeout(-1); + if (has_note(cursx, cursy, zlevel)){ + bool res = query_yn(_("Really delete note?")); + if (res == true) + delete_note(cursx, cursy, zlevel); + } + timeout(BLINK_SPEED); + } else if (action == "LIST_NOTES"){ + timeout(-1); + point p = display_notes(g, zlevel); + if (p.x != -1){ + cursx = p.x; + cursy = p.y; + } + timeout(BLINK_SPEED); + wrefresh(w_map); + } else if (action == "SEARCH") { + int tmpx = cursx, tmpy = cursy; + timeout(-1); + std::string term = string_input_popup(_("Search term:")); + timeout(BLINK_SPEED); + draw(w_map, g, zlevel, cursx, cursy, origx, origy, ch, blink, hori, vert, diag, &ictxt); + point found = find_note(cursx, cursy, zlevel, term); + if (found.x == -1) { // Didn't find a note + std::vector terlist; + terlist = find_terrain(term, origx, origy, zlevel); + if (terlist.size() != 0){ + int i = 0; + //Navigate through results + do { + //Draw search box + wborder(w_search, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, + LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); + mvwprintz(w_search, 1, 1, c_red, _("Find place:")); + mvwprintz(w_search, 2, 1, c_ltblue, " "); + mvwprintz(w_search, 2, 1, c_ltblue, "%s", term.c_str()); + mvwprintz(w_search, 4, 1, c_white, + _("'<' '>' Cycle targets.")); + mvwprintz(w_search, 10, 1, c_white, _("Enter/Spacebar to select.")); + mvwprintz(w_search, 11, 1, c_white, _("q to return.")); + ch = input(); + if (ch == ERR) + blink = !blink; + else if (ch == '<') { + i++; + if(i > terlist.size() - 1) + i = 0; + } else if(ch == '>'){ + i--; + if(i < 0) + i = terlist.size() - 1; + } + cursx = terlist[i].x; + cursy = terlist[i].y; + draw(w_map, g, zlevel, cursx, cursy, origx, origy, ch, blink, hori, vert, diag, &ictxt); + wrefresh(w_search); + timeout(BLINK_SPEED); + } while(ch != '\n' && ch != ' ' && ch != 'q'); + //If q is hit, return to the last position + if(ch == 'q'){ + cursx = tmpx; + cursy = tmpy; + } + ch = '.'; + } + } + if (found.x != -1) { + cursx = found.x; + cursy = found.y; + } + } + else if (action == "ANY_INPUT") { // Hit timeout on input, so make characters blink + blink = !blink; + } + } while (action != "QUIT" && action != "CONFIRM"); + timeout(-1); + werase(w_map); + wrefresh(w_map); + delwin(w_map); + werase(w_search); + wrefresh(w_search); + delwin(w_search); + erase(); + g->refresh_all(); + return ret; +} + +void overmap::first_house(int &x, int &y) +{ + std::vector valid; + for (int i = 0; i < OMAPX; i++) { + for (int j = 0; j < OMAPY; j++) { + if (ter(i, j, 0) == "shelter") { + valid.push_back( point(i, j) ); + } + } + } + if (valid.size() == 0) { + debugmsg("Couldn't find a shelter!"); + x = 1; + y = 1; + return; + } + int index = rng(0, valid.size() - 1); + x = valid[index].x; + y = valid[index].y; +} + +void overmap::process_mongroups() +{ + for (int i = 0; i < zg.size(); i++) { + if (zg[i].dying) { + zg[i].population *= .8; + zg[i].radius *= .9; + } + } +} + +void grow_forest_oter_id(oter_id & oid, bool swampy) { + if (swampy && ( oid == ot_field || oid == ot_forest ) ) { + oid = ot_forest_water; + } else if ( oid == ot_forest ) { + oid = ot_forest_thick; + } else if ( oid == ot_field ) { + oid = ot_forest; + } +} + +void overmap::place_forest() +{ + + for (int i = 0; i < NUM_FOREST; i++) { + // forx and fory determine the epicenter of the forest + int forx = rng(0, OMAPX - 1); + int fory = rng(0, OMAPY - 1); + // fors determinds its basic size + int fors = rng(15, 40); + int outer_tries = 1000; + int inner_tries = 1000; + for (int j = 0; j < cities.size(); j++) { + inner_tries = 1000; + while (dist(forx,fory,cities[j].x,cities[j].y) - fors / 2 < cities[j].s ) { + // Set forx and fory far enough from cities + forx = rng(0, OMAPX - 1); + fory = rng(0, OMAPY - 1); + // Set fors to determine the size of the forest; usually won't overlap w/ cities + fors = rng(15, 40); + j = 0; + if( 0 == --inner_tries ) { break; } + } + if( 0 == --outer_tries || 0 == inner_tries ) { + break; + } + } + + if( 0 == outer_tries || 0 == inner_tries ) { + break; + } + + int swamps = SWAMPINESS; // How big the swamp may be... + int x = forx; + int y = fory; + + // Depending on the size on the forest... + for (int j = 0; j < fors; j++) { + int swamp_chance = 0; + for (int k = -2; k <= 2; k++) { + for (int l = -2; l <= 2; l++) { + if (ter(x + k, y + l, 0) == "forest_water" || + check_ot_type("river", x+k, y+l, 0)) { + swamp_chance += 5; + } + } + } + bool swampy = false; + if (swamps > 0 && swamp_chance > 0 && !one_in(swamp_chance) && + (ter(x, y, 0) == "forest" || ter(x, y, 0) == "forest_thick" || + ter(x, y, 0) == "field" || one_in(SWAMPCHANCE))) { + // ...and make a swamp. + ter(x, y, 0) = "forest_water"; + swampy = true; + swamps--; + } else if (swamp_chance == 0) { + swamps = SWAMPINESS; + } + + // Place or embiggen forest + for ( int mx = -1; mx < 2; mx++ ) { + for ( int my = -1; my < 2; my++ ) { + grow_forest_oter_id( ter(x+mx, y+my, 0), ( mx == 0 && my == 0 ? false : swampy ) ); + } + } + // Random walk our forest + x += rng(-2, 2); + if (x < 0 ) { x = 0; } + if (x > OMAPX) { x = OMAPX; } + y += rng(-2, 2); + if (y < 0 ) { y = 0; } + if (y > OMAPY) { y = OMAPY; } + } + } +} + +void overmap::place_river(point pa, point pb) +{ + int x = pa.x, y = pa.y; + do { + x += rng(-1, 1); + y += rng(-1, 1); + if (x < 0) x = 0; + if (x > OMAPX - 1) x = OMAPX - 2; + if (y < 0) y = 0; + if (y > OMAPY - 1) y = OMAPY - 1; + for (int i = -1; i <= 1; i++) { + for (int j = -1; j <= 1; j++) { + if (y+i >= 0 && y+i < OMAPY && x+j >= 0 && x+j < OMAPX) + ter(x+j, y+i, 0) = "river_center"; + } + } + 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)))) + 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)))) + 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)))) + 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)))) + y--; + x += rng(-1, 1); + y += rng(-1, 1); + if (x < 0) x = 0; + if (x > OMAPX - 1) x = OMAPX - 2; + if (y < 0) y = 0; + if (y > OMAPY - 1) y = OMAPY - 1; + for (int i = -1; i <= 1; i++) { + for (int j = -1; j <= 1; j++) { +// We don't want our riverbanks touching the edge of the map for many reasons + if ((y+i >= 1 && y+i < OMAPY - 1 && x+j >= 1 && x+j < OMAPX - 1) || +// UNLESS, of course, that's where the river is headed! + (abs(pb.y - (y+i)) < 4 && abs(pb.x - (x+j)) < 4)) + ter(x+j, y+i, 0) = "river_center"; + } + } + } while (pb.x != x || pb.y != y); +} + +/*: the root is overmap::place_cities() +20:50 : which is at overmap.cpp:1355 or so +20:51 : the key is cs = rng(4, 17), setting the "size" of the city +20:51 : which is roughly it's radius in overmap tiles +20:52 : then later overmap::place_mongroups() is called +20:52 : which creates a mongroup with radius city_size * 2.5 and population city_size * 80 +20:53 : tadaa + +spawns happen at... +20:56 : game:pawn_mon() in game.cpp:7380*/ +void overmap::place_cities() +{ + int NUM_CITIES = dice(4, 4); + int start_dir; + int op_city_size = int(ACTIVE_WORLD_OPTIONS["CITY_SIZE"]); + int city_min = op_city_size - 1; + int city_max = op_city_size + 1; + // Limit number of cities based on how big they are. + NUM_CITIES = std::min(NUM_CITIES, int(256 / op_city_size * op_city_size)); + + while (cities.size() < NUM_CITIES) { + int cx = rng(12, OMAPX - 12); + int cy = rng(12, OMAPY - 12); + int size = dice(city_min, city_max) ; + if (ter(cx, cy, 0) == "field") { + ter(cx, cy, 0) = "road_nesw"; + city tmp; tmp.x = cx; tmp.y = cy; tmp.s = size; + cities.push_back(tmp); + start_dir = rng(0, 3); + for (int j = 0; j < 4; j++) + make_road(cx, cy, size, (start_dir + j) % 4, tmp); + } + } +} + +void overmap::put_buildings(int x, int y, int dir, city town) +{ + int ychange = dir % 2, xchange = (dir + 1) % 2; + for (int i = -1; i <= 1; i += 2) { + if ((ter(x+i*xchange, y+i*ychange, 0) == "field") && !one_in(STREETCHANCE)) { + if (rng(0, 99) > 80 * dist(x,y,town.x,town.y) / town.s) + ter(x+i*xchange, y+i*ychange, 0) = shop(((dir%2)-i)%4); + else { + if (rng(0, 99) > 130 * dist(x, y, town.x, town.y) / town.s) + ter(x+i*xchange, y+i*ychange, 0) = (one_in(5)?"pool":"park"); + else + ter(x+i*xchange, y+i*ychange, 0) = house(((dir%2)-i)%4); + } + } + } +} + +void overmap::make_road(int cx, int cy, int cs, int dir, city town) +{ + int x = cx, y = cy; + int c = cs, croad = cs; + switch (dir) { + case 0: + while (c > 0 && y > 0 && (ter(x, y-1, 0) == "field" || c == cs)) { + y--; + c--; + ter(x, y, 0) = "road_ns"; + for (int i = -1; i <= 0; i++) { + for (int j = -1; j <= 1; j++) { + if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == "road_ew" || + ter(x+j, y+i, 0) == "road_ns")) { + ter(x, y, 0) = "road_null"; + c = -1; + } + } + } + put_buildings(x, y, dir, town); + if (c < croad - 1 && c >= 2 && ter(x - 1, y, 0) == "field" && + ter(x + 1, y, 0) == "field") { + croad = c; + make_road(x, y, cs - rng(1, 3), 1, town); + make_road(x, y, cs - rng(1, 3), 3, town); + } + } + if (is_road(x, y-2, 0)) { + ter(x, y-1, 0) = "road_ns"; + } + break; + case 1: + while (c > 0 && x < OMAPX-1 && (ter(x+1, y, 0) == "field" || c == cs)) { + x++; + c--; + ter(x, y, 0) = "road_ew"; + for (int i = -1; i <= 1; i++) { + for (int j = 0; j <= 1; j++) { + if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == "road_ew" || + ter(x+j, y+i, 0) == "road_ns")) { + ter(x, y, 0) = "road_null"; + c = -1; + } + } + } + put_buildings(x, y, dir, town); + if (c < croad-2 && c >= 3 && ter(x, y-1, 0) == "field" && + ter(x, y+1, 0) == "field") { + croad = c; + make_road(x, y, cs - rng(1, 3), 0, town); + make_road(x, y, cs - rng(1, 3), 2, town); + } + } + if (is_road(x-2, y, 0)) { + ter(x-1, y, 0) = "road_ew"; + } + break; + case 2: + while (c > 0 && y < OMAPY-1 && (ter(x, y+1, 0) == "field" || c == cs)) { + y++; + c--; + ter(x, y, 0) = "road_ns"; + for (int i = 0; i <= 1; i++) { + for (int j = -1; j <= 1; j++) { + if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == "road_ew" || + ter(x+j, y+i, 0) == "road_ns")) { + ter(x, y, 0) = "road_null"; + c = -1; + } + } + } + put_buildings(x, y, dir, town); + if (c < croad-2 && ter(x-1, y, 0) == "field" && ter(x+1, y, 0) == "field") { + croad = c; + make_road(x, y, cs - rng(1, 3), 1, town); + make_road(x, y, cs - rng(1, 3), 3, town); + } + } + if (is_road(x, y+2, 0)) { + ter(x, y+1, 0) = "road_ns"; + } + break; + case 3: + while (c > 0 && x > 0 && (ter(x-1, y, 0) == "field" || c == cs)) { + x--; + c--; + ter(x, y, 0) = "road_ew"; + for (int i = -1; i <= 1; i++) { + for (int j = -1; j <= 0; j++) { + if (abs(j) != abs(i) && (ter(x+j, y+i, 0) == "road_ew" || + ter(x+j, y+i, 0) == "road_ns")) { + ter(x, y, 0) = "road_null"; + c = -1; + } + } + } + put_buildings(x, y, dir, town); + if (c < croad - 2 && c >= 3 && ter(x, y-1, 0) == "field" && + ter(x, y+1, 0) == "field") { + croad = c; + make_road(x, y, cs - rng(1, 3), 0, town); + make_road(x, y, cs - rng(1, 3), 2, town); + } + } + if (is_road(x+2, y, 0)) { + ter(x+1, y, 0) = "road_ew"; + } + break; + } + + cs -= rng(1, 3); + if (cs >= 2 && c == 0) { + int dir2; + if (dir % 2 == 0) { + dir2 = rng(0, 1) * 2 + 1; + } else { + dir2 = rng(0, 1) * 2; + } + make_road(x, y, cs, dir2, town); + if (one_in(5)) { + make_road(x, y, cs, (dir2 + 2) % 4, town); + } + } +} + +bool overmap::build_lab(int x, int y, int z, int s) +{ + std::vector generated_lab; + ter(x, y, z) = "lab"; + for (int n = 0; n <= 1; n++) { // Do it in two passes to allow diagonals + for (int i = 1; i <= s; i++) { + for (int lx = x - i; lx <= x + i; lx++) { + for (int ly = y - i; ly <= y + i; ly++) { + if ((ter(lx - 1, ly, z) == "lab" || + ter(lx + 1, ly, z) == "lab" || + ter(lx, ly - 1, z) == "lab" || + ter(lx, ly + 1, z) == "lab") && one_in(i)) { + ter(lx, ly, z) = "lab"; + generated_lab.push_back(point(lx,ly)); + } + } + } + } + } + + bool generate_stairs = true; + for (std::vector::iterator it=generated_lab.begin(); + it != generated_lab.end(); it++) { + if (ter(it->x, it->y, z+1) == "lab_stairs") { + generate_stairs = false; + } + } + if (generate_stairs && generated_lab.size() > 0) { + int v = rng(0,generated_lab.size()-1); + point p = generated_lab[v]; + ter(p.x, p.y, z+1) = "lab_stairs"; + } + + ter(x, y, z) = "lab_core"; + int numstairs = 0; + if (s > 0) { // Build stairs going down + while (!one_in(6)) { + int stairx, stairy; + int tries = 0; + do { + stairx = rng(x - s, x + s); + stairy = rng(y - s, y + s); + tries++; + } while (ter(stairx, stairy, z) != "lab" && tries < 15); + if (tries < 15) { + ter(stairx, stairy, z) = "lab_stairs"; + numstairs++; + } + } + } + if (numstairs == 0) { // This is the bottom of the lab; We need a finale + int finalex, finaley; + int tries = 0; + do { + finalex = rng(x - s, x + s); + finaley = rng(y - s, y + s); + tries++; + } while (tries < 15 && ter(finalex, finaley, z) != "lab" + && ter(finalex, finaley, z) != "lab_core"); + ter(finalex, finaley, z) = "lab_finale"; + } + zg.push_back(mongroup("GROUP_LAB", (x * 2), (y * 2), z, s, 400)); + + return numstairs > 0; +} + +bool overmap::build_ice_lab(int x, int y, int z, int s) +{ + std::vector generated_ice_lab; + ter(x, y, z) = "ice_lab"; + for (int n = 0; n <= 1; n++) { // Do it in two passes to allow diagonals + for (int i = 1; i <= s; i++) { + for (int lx = x - i; lx <= x + i; lx++) { + for (int ly = y - i; ly <= y + i; ly++) { + if ((ter(lx - 1, ly, z) == "ice_lab" || + ter(lx + 1, ly, z) == "ice_lab" || + ter(lx, ly - 1, z) == "ice_lab" || + ter(lx, ly + 1, z) == "ice_lab") && one_in(i)) { + ter(lx, ly, z) = "ice_lab"; + generated_ice_lab.push_back(point(lx,ly)); + } + } + } + } + } + + bool generate_stairs = true; + for (std::vector::iterator it = generated_ice_lab.begin(); + it != generated_ice_lab.end(); ++it) { + if (ter(it->x, it->y, z + 1) == "ice_lab_stairs") { + generate_stairs = false; + } + } + if (generate_stairs && generated_ice_lab.size() > 0) { + int v = rng(0,generated_ice_lab.size() - 1); + point p = generated_ice_lab[v]; + ter(p.x, p.y, z + 1) = "ice_lab_stairs"; + } + + ter(x, y, z) = "ice_lab_core"; + int numstairs = 0; + if (s > 0) { // Build stairs going down + while (!one_in(6)) { + int stairx, stairy; + int tries = 0; + do { + stairx = rng(x - s, x + s); + stairy = rng(y - s, y + s); + tries++; + } while (ter(stairx, stairy, z) != "ice_lab" && tries < 15); + if (tries < 15) { + ter(stairx, stairy, z) = "ice_lab_stairs"; + numstairs++; + } + } + } + if (numstairs == 0) { // This is the bottom of the ice_lab; We need a finale + int finalex, finaley; + int tries = 0; + do { + finalex = rng(x - s, x + s); + finaley = rng(y - s, y + s); + tries++; + } while (tries < 15 && ter(finalex, finaley, z) != "ice_lab" + && ter(finalex, finaley, z) != "ice_lab_core"); + ter(finalex, finaley, z) = "ice_lab_finale"; + } + zg.push_back(mongroup("GROUP_ICE_LAP", (x * 2), (y * 2), z, s, 400)); + + return numstairs > 0; +} + +void overmap::build_anthill(int x, int y, int z, int s) +{ + build_tunnel(x, y, z, s - rng(0, 3), 0); + build_tunnel(x, y, z, s - rng(0, 3), 1); + build_tunnel(x, y, z, s - rng(0, 3), 2); + build_tunnel(x, y, z, s - rng(0, 3), 3); + std::vector queenpoints; + for (int i = x - s; i <= x + s; i++) { + for (int j = y - s; j <= y + s; j++) { + if (check_ot_type("ants", i, j, z)) { + queenpoints.push_back(point(i, j)); + } + } + } + int index = rng(0, queenpoints.size() - 1); + ter(queenpoints[index].x, queenpoints[index].y, z) = "ants_queen"; +} + +void overmap::build_tunnel(int x, int y, int z, int s, int dir) +{ + if (s <= 0) { + return; + } + if (!check_ot_type("ants", x, y, z)) { + ter(x, y, z) = "ants_ns"; + } + point next; + switch (dir) { + case 0: next = point(x , y - 1); + case 1: next = point(x + 1, y ); + case 2: next = point(x , y + 1); + case 3: next = point(x - 1, y ); + } + if (s == 1) { + next = point(-1, -1); + } + std::vector valid; + for (int i = x - 1; i <= x + 1; i++) { + for (int j = y - 1; j <= y + 1; j++) { + if (!check_ot_type("ants", i, j, z) && abs(i - x) + abs(j - y) == 1) { + valid.push_back(point(i, j)); + } + } + } + for (int i = 0; i < valid.size(); i++) { + if (valid[i].x != next.x || valid[i].y != next.y) { + if (one_in(s * 2)) { + if (one_in(2)) { + ter(valid[i].x, valid[i].y, z) = "ants_food"; + } else { + ter(valid[i].x, valid[i].y, z) = "ants_larvae"; + } + } else if (one_in(5)) { + int dir2; + if (valid[i].y == y - 1) { dir2 = 0; } + if (valid[i].x == x + 1) { dir2 = 1; } + if (valid[i].y == y + 1) { dir2 = 2; } + if (valid[i].x == x - 1) { dir2 = 3; } + build_tunnel(valid[i].x, valid[i].y, z, s - rng(0, 3), dir2); + } + } + } + build_tunnel(next.x, next.y, z, s - 1, dir); +} + +bool overmap::build_slimepit(int x, int y, int z, int s) +{ + bool requires_sub = false; + for (int n = 1; n <= s; n++) + { + for (int i = x - n; i <= x + n; i++) + { + for (int j = y - n; j <= y + n; j++) + { + if (rng(1, s * 2) >= n) + { + if (one_in(8) && z > -OVERMAP_DEPTH) + { + ter(i, j, z) = "slimepit_down"; + requires_sub = true; + } else { + ter(i, j, z) = "slimepit"; + } + } + } + } + } + + return requires_sub; +} + +void overmap::build_mine(int x, int y, int z, int s) +{ + bool finale = (s <= rng(1, 3)); + int built = 0; + if (s < 2) { + s = 2; + } + while (built < s) { + ter(x, y, z) = "mine"; + std::vector next; + for (int i = -1; i <= 1; i += 2) { + if (ter(x, y + i, z) == "rock") { + next.push_back( point(x, y + i) ); + } + if (ter(x + i, y, z) == "rock") { + next.push_back( point(x + i, y) ); + } + } + if (next.empty()) { // Dead end! Go down! + ter(x, y, z) = (finale ? "mine_finale" : "mine_down"); + return; + } + point p = next[ rng(0, next.size() - 1) ]; + x = p.x; + y = p.y; + built++; + } + ter(x, y, z) = (finale ? "mine_finale" : "mine_down"); +} + +void overmap::place_rifts(int const z) +{ + int num_rifts = rng(0, 2) * rng(0, 2); + std::vector riftline; + if (!one_in(4)) + num_rifts++; + for (int n = 0; n < num_rifts; n++) { + int x = rng(MAX_RIFT_SIZE, OMAPX - MAX_RIFT_SIZE); + int y = rng(MAX_RIFT_SIZE, OMAPY - MAX_RIFT_SIZE); + int xdist = rng(MIN_RIFT_SIZE, MAX_RIFT_SIZE), + ydist = rng(MIN_RIFT_SIZE, MAX_RIFT_SIZE); +// We use rng(0, 10) as the t-value for this Bresenham Line, because by +// repeating this twice, we can get a thick line, and a more interesting rift. + for (int o = 0; o < 3; o++) { + if (xdist > ydist) + riftline = line_to(x - xdist, y - ydist+o, x + xdist, y + ydist, rng(0,10)); + else + riftline = line_to(x - xdist+o, y - ydist, x + xdist, y + ydist, rng(0,10)); + for (int i = 0; i < riftline.size(); i++) { + if (i == riftline.size() / 2 && !one_in(3)) + ter(riftline[i].x, riftline[i].y, z) = "hellmouth"; + else + ter(riftline[i].x, riftline[i].y, z) = "rift"; + } + } + } +} + +void overmap::make_hiway(int x1, int y1, int x2, int y2, int z, const std::string &base) +{ + if (x1 == x2 && y1 == y2) { + return; + } + + std::priority_queue nodes[2]; + bool closed[OMAPX][OMAPY] = {{false}}; + int open[OMAPX][OMAPY] = {{0}}; + int dirs[OMAPX][OMAPY] = {{0}}; + int dx[4]={1, 0, -1, 0}; + int dy[4]={0, 1, 0, -1}; + int i = 0; + int disp = (base == "road") ? 5 : 2; + + nodes[i].push(node(x1, y1, 5, 1000)); + open[x1][y1] = 1000; + + // use A* to find the shortest path from (x1,y1) to (x2,y2) + while (!nodes[i].empty()) { + // get the best-looking node + node mn = nodes[i].top(); + nodes[i].pop(); + // make sure it's in bounds + if (mn.x >= OMAPX || mn.x < 0 || mn.y >= OMAPY || mn.y < 0) { + continue; + } + // mark it visited + closed[mn.x][mn.y] = true; + + // if we've reached the end, draw the path and return + if (mn.x == x2 && mn.y == y2) { + int x = mn.x; + int y = mn.y; + while (x != x1 || y != y1) { + int d = dirs[x][y]; + x += dx[d]; + y += dy[d]; + if (road_allowed(ter(x, y, z))) { + if (is_river(ter(x, y, z))) { + if (d == 1 || d == 3) { + ter(x, y, z) = "bridge_ns"; + } else { + ter(x, y, z) = "bridge_ew"; + } + } else { + ter(x, y, z) = base + "_nesw"; + } + } + } + return; + } + + // otherwise, expand to + for(int d = 0; d < 4; d++) { + int x = mn.x + dx[d]; + int y = mn.y + dy[d]; + // don't allow: + // * out of bounds + // * already traversed tiles + // * tiles that don't allow roads to cross them (e.g. buildings) + // * corners on rivers + if (x < 1 || x > OMAPX - 2 || y < 1 || y > OMAPY - 2 || + closed[x][y] || !road_allowed(ter(x, y, z)) || + (is_river(ter(mn.x, mn.y, z)) && mn.d != d) || + (is_river(ter(x, y, z)) && mn.d != d) ) { + continue; + } + + node cn = node(x, y, d, 0); + // distance to target + cn.p += ((abs(x2 - x) + abs(y2 - y)) / disp); + // prefer existing roads. + cn.p += check_ot_type(base, x, y, z) ? 0 : 3; + // and flat land over bridges + cn.p += !is_river(ter(x, y, z)) ? 0 : 2; + // try not to turn too much + //cn.p += (mn.d == d) ? 0 : 1; + + // record direction to shortest path + if (open[x][y] == 0) { + dirs[x][y] = (d + 2) % 4; + open[x][y] = cn.p; + nodes[i].push(cn); + } else if (open[x][y] > cn.p) { + dirs[x][y] = (d + 2) % 4; + open[x][y] = cn.p; + + // wizardry + while (nodes[i].top().x != x || nodes[i].top().y != y) { + nodes[1 - i].push(nodes[i].top()); + nodes[i].pop(); + } + nodes[i].pop(); + + if (nodes[i].size() > nodes[1-i].size()) { + i = 1 - i; + } + while (!nodes[i].empty()) { + nodes[1 - i].push(nodes[i].top()); + nodes[i].pop(); + } + i = 1 - i; + nodes[i].push(cn); + } else { + // a shorter path has already been found + } + } + } +} + +void overmap::building_on_hiway(int x, int y, int dir) +{ + int xdif = dir * (1 - 2 * rng(0,1)); + int ydif = (1 - dir) * (1 - 2 * rng(0,1)); + int rot = 0; + if (ydif == 1) { + rot = 0; + } else if (xdif == -1) { + rot = 1; + } else if (ydif == -1) { + rot = 2; + } else if (xdif == 1) { + rot = 3; + } + + switch (rng(1, 4)) { + case 1: + if (!is_river(ter(x + xdif, y + ydif, 0))) { + ter(x + xdif, y + ydif, 0) = "lab_stairs"; + } + break; + case 2: + if (!is_river(ter(x + xdif, y + ydif, 0))) { + ter(x + xdif, y + ydif, 0) = "ice_lab_stairs"; + } + break; + case 3: + if (!is_river(ter(x + xdif, y + ydif, 0))) { + ter(x + xdif, y + ydif, 0) = house(rot); + } + break; + case 4: + if (!is_river(ter(x + xdif, y + ydif, 0))) { + ter(x + xdif, y + ydif, 0) = "radio_tower"; + } + break; + } +} + +void overmap::place_hiways(std::vector cities, int z, const std::string &base) +{ + if (cities.size() == 1) { + return; + } + city best; + for (int i = 0; i < cities.size(); i++) { + int closest = -1; + for (int j = i + 1; j < cities.size(); j++) { + int distance = (int)dist(cities[i].x, cities[i].y, cities[j].x, cities[j].y); + if (distance < closest || closest < 0) { + closest = distance; + best = cities[j]; + } + } + if( closest > 0 ) { + make_hiway(cities[i].x, cities[i].y, best.x, best.y, z, base); + } + } +} + +// Polish does both good_roads and good_rivers (and any future polishing) in +// a single loop; much more efficient +void overmap::polish(const int z, const std::string &terrain_type) +{ + const bool check_all = (terrain_type == "all"); + // Main loop--checks roads and rivers that aren't on the borders of the map + for (int x = 0; x < OMAPX; x++) { + for (int y = 0; y < OMAPY; y++) { + if (check_all || check_ot_type(terrain_type, x, y, z)) { + if (check_ot_type("road", x, y, z)) { + good_road("road", x, y, z); + } else if (check_ot_type("bridge", x, y, z) && + check_ot_type("bridge", x - 1, y, z) && + check_ot_type("bridge", x + 1, y, z) && + check_ot_type("bridge", x, y - 1, z) && + check_ot_type("bridge", x, y + 1, z)) { + ter(x, y, z) = "road_nesw"; + } else if (check_ot_type("subway", x, y, z)) { + good_road("subway", x, y, z); + } else if (check_ot_type("sewer", x, y, z)) { + good_road("sewer", x, y, z); + } else if (check_ot_type("ants", x, y, z)) { + good_road("ants", x, y, z); + } else if (check_ot_type("river", x, y, z)) { + good_river(x, y, z); + // Sometimes a bridge will start at the edge of a river, + // and this looks ugly. + // So, fix it by making that square normal road; + // bit of a kludge but it works. + } else if (ter(x, y, z) == "bridge_ns" && + (!is_river(ter(x - 1, y, z)) || + !is_river(ter(x + 1, y, z)))) { + ter(x, y, z) = "road_ns"; + } else if (ter(x, y, z) == "bridge_ew" && + (!is_river(ter(x, y - 1, z)) || + !is_river(ter(x, y + 1, z)))) { + ter(x, y, z) = "road_ew"; + } + } + } + } + + // Fixes stretches of parallel roads--turns them into two-lane highways + // Note that this fixes 2x2 areas... + // a "tail" of 1x2 parallel roads may be left. + // This can actually be a good thing; it ensures nice connections + // Also, this leaves, say, 3x3 areas of road. + // TODO: fix this? courtyards etc? + for (int y = 0; y < OMAPY - 1; y++) { + for (int x = 0; x < OMAPX - 1; x++) { + if (check_ot_type(terrain_type, x, y, z)) { + if (ter(x, y, z) == "road_nes" + && ter(x+1, y, z) == "road_nsw" + && ter(x, y+1, z) == "road_nes" + && ter(x+1, y+1, z) == "road_nsw") { + ter(x, y, z) = "hiway_ns"; + ter(x+1, y, z) = "hiway_ns"; + ter(x, y+1, z) = "hiway_ns"; + ter(x+1, y+1, z) = "hiway_ns"; + } else if (ter(x, y, z) == "road_esw" + && ter(x+1, y, z) == "road_esw" + && ter(x, y+1, z) == "road_new" + && ter(x+1, y+1, z) == "road_new") { + ter(x, y, z) = "hiway_ew"; + ter(x+1, y, z) = "hiway_ew"; + ter(x, y+1, z) = "hiway_ew"; + ter(x+1, y+1, z) = "hiway_ew"; + } + } + } + } +} + +bool overmap::check_ot_type(const std::string &otype, int x, int y, int z) +{ + const oter_id oter = ter(x, y, z); + return is_ot_type(otype, oter); +} + +bool overmap::is_road(int x, int y, int z) +{ + if (x < 0 || x >= OMAPX || y < 0 || y >= OMAPY) { + for (int i = 0; i < roads_out.size(); i++) { + if (abs(roads_out[i].x - x) + abs(roads_out[i].y - y) <= 1) { + return true; + } + } + } + return ter(x, y, z).t().is_road; +//oter_t(ter(x, y, z)).is_road; +} + +bool overmap::is_road_or_highway(int x, int y, int z) +{ + if (is_road(x,y,z) || check_ot_type("hiway",x,y,z)) { + return true; + } + return false; +} + +void overmap::good_road(const std::string &base, int x, int y, int z) +{ + if (check_ot_type(base, x, y-1, z)) { + if (check_ot_type(base, x+1, y, z)) { + if (check_ot_type(base, x, y+1, z)) { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_nesw"; + } else { + ter(x, y, z) = base + "_nes"; + } + } else { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_new"; + } else { + ter(x, y, z) = base + "_ne"; + } + } + } else { + if (check_ot_type(base, x, y+1, z)) { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_nsw"; + } else { + ter(x, y, z) = base + "_ns"; + } + } else { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_wn"; + } else { + ter(x, y, z) = base + "_ns"; + } + } + } + } else { + if (check_ot_type(base, x+1, y, z)) { + if (check_ot_type(base, x, y+1, z)) { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_esw"; + } else { + ter(x, y, z) = base + "_es"; + } + } else { + ter(x, y, z) = base + "_ew"; + } + } else { + if (check_ot_type(base, x, y+1, z)) { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_sw"; + } else { + ter(x, y, z) = base + "_ns"; + } + } else { + if (check_ot_type(base, x-1, y, z)) { + ter(x, y, z) = base + "_ew"; + } else { + // No adjoining roads/etc. + // Happens occasionally, esp. with sewers. + ter(x, y, z) = base + "_nesw"; + } + } + } + } + if (ter(x, y, z) == "road_nesw" && one_in(4)) { + ter(x, y, z) = "road_nesw_manhole"; + } +} + +void overmap::good_river(int x, int y, int z) +{ + if (is_river(ter(x - 1, y, z))) { + if (is_river(ter(x, y - 1, z))) { + if (is_river(ter(x, y + 1, z))) { + if (is_river(ter(x + 1, y, z))) { + // River on N, S, E, W; + // but we might need to take a "bite" out of the corner + if (!is_river(ter(x - 1, y - 1, z))) { + ter(x, y, z) = "river_c_not_nw"; + } else if (!is_river(ter(x + 1, y - 1, z))) { + ter(x, y, z) = "river_c_not_ne"; + } else if (!is_river(ter(x - 1, y + 1, z))) { + ter(x, y, z) = "river_c_not_sw"; + } else if (!is_river(ter(x + 1, y + 1, z))) { + ter(x, y, z) = "river_c_not_se"; + } else { + ter(x, y, z) = "river_center"; + } + } else { + ter(x, y, z) = "river_east"; + } + } else { + if (is_river(ter(x + 1, y, z))) { + ter(x, y, z) = "river_south"; + } else { + ter(x, y, z) = "river_se"; + } + } + } else { + if (is_river(ter(x, y + 1, z))) { + if (is_river(ter(x + 1, y, z))) { + ter(x, y, z) = "river_north"; + } else { + ter(x, y, z) = "river_ne"; + } + } else { + if (is_river(ter(x + 1, y, z))) { // Means it's swampy + ter(x, y, z) = "forest_water"; + } + } + } + } else { + if (is_river(ter(x, y - 1, z))) { + if (is_river(ter(x, y + 1, z))) { + if (is_river(ter(x + 1, y, z))) { + ter(x, y, z) = "river_west"; + } else { // Should never happen + ter(x, y, z) = "forest_water"; + } + } else { + if (is_river(ter(x + 1, y, z))) { + ter(x, y, z) = "river_sw"; + } else { // Should never happen + ter(x, y, z) = "forest_water"; + } + } + } else { + if (is_river(ter(x, y + 1, z))) { + if (is_river(ter(x + 1, y, z))) { + ter(x, y, z) = "river_nw"; + } else { // Should never happen + ter(x, y, z) = "forest_water"; + } + } else { // Should never happen + ter(x, y, z) = "forest_water"; + } + } + } +} + +void overmap::place_specials() +{ + int placed[NUM_OMSPECS]; + for (int i = 0; i < NUM_OMSPECS; i++) + placed[i] = 0; + + std::vector sectors; + for (int x = 0; x < OMAPX; x += OMSPEC_FREQ) { + for (int y = 0; y < OMAPY; y += OMSPEC_FREQ) + sectors.push_back(point(x, y)); + } + + while (!sectors.empty()) { + int sector_pick = rng(0, sectors.size() - 1); + int x = sectors[sector_pick].x, y = sectors[sector_pick].y; + sectors.erase(sectors.begin() + sector_pick); + std::vector valid; + int tries = 0; + tripoint p; + do { + p = tripoint(rng(x, x + OMSPEC_FREQ - 1), rng(y, y + OMSPEC_FREQ - 1), 0); + if (p.x >= OMAPX - 1) + p.x = OMAPX - 2; + if (p.y >= OMAPY - 1) + p.y = OMAPY - 2; + if (p.x == 0) + p.x = 1; + if (p.y == 0) + p.y = 1; + for (int i = 0; i < NUM_OMSPECS; i++) { + omspec_place place; + overmap_special special = overmap_specials[i]; + int min = special.min_dist_from_city, max = special.max_dist_from_city; + point pt(p.x, p.y); + // Skip non-classic specials if we're in classic mode + if (ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"] && !(special.flags & mfb(OMS_FLAG_CLASSIC))) continue; + if ((placed[ omspec_id(i) ] < special.max_appearances || special.max_appearances <= 0) && + (min == -1 || dist_from_city(pt) >= min) && + (max == -1 || dist_from_city(pt) <= max) && + (place.*special.able)(this, special.flags, p)) + valid.push_back( omspec_id(i) ); + } + tries++; + } while (valid.empty() && tries < 20); // Done looking for valid spot + + if (!valid.empty()) { // We found a valid spot! +// Place the MUST HAVE ones first, to try and guarantee that they appear + std::vector must_place; + for (int i = 0; i < valid.size(); i++) { + if (placed[ valid[i] ] < overmap_specials[ valid[i] ].min_appearances) + must_place.push_back(valid[i]); + } + if (must_place.empty()) { + int selection = rng(0, valid.size() - 1); + overmap_special special = overmap_specials[ valid[selection] ]; + placed[ valid[selection] ]++; + place_special(special, p); + } else { + int selection = rng(0, must_place.size() - 1); + overmap_special special = overmap_specials[ must_place[selection] ]; + placed[ must_place[selection] ]++; + place_special(special, p); + } + } // Done with + + } // Done picking sectors... +} + + +// find the id for a specified rotation of a rotatable oter_t +oter_id overmap::rotate(const oter_id &oter, int dir) +{ + const oter_t & otert = oter; + if (! otert.rotates ) { + debugmsg("%s does not rotate.", oter.c_str()); + return oter; + } + if (dir < 0) { + dir += 4; + } else if (dir > 3) { + debugmsg("Bad rotation for %s: %d.", oter.c_str(), dir); + return oter; + } + return otert.directional_peers[dir]; +} + +void overmap::place_special(overmap_special special, tripoint p) +{ + bool rotated = false; + int city = -1; + // First, place terrain... + ter(p.x, p.y, p.z) = special.ter; + // Next, obey any special effects the flags might have + if (special.flags & mfb(OMS_FLAG_ROTATE_ROAD)) { + if (is_road_or_highway(p.x, p.y - 1, p.z)) { + ter(p.x, p.y, p.z) = rotate(special.ter, 0); + rotated = true; + } else if (is_road_or_highway(p.x + 1, p.y, p.z)) { + ter(p.x, p.y, p.z) = rotate(special.ter, 1); + rotated = true; + } else if (is_road_or_highway(p.x, p.y + 1, p.z)) { + ter(p.x, p.y, p.z) = rotate(special.ter, 2); + rotated = true; + } else if (is_road_or_highway(p.x - 1, p.y, p.z)) { + ter(p.x, p.y, p.z) = rotate(special.ter, 3); + rotated = true; + } + } + + if (!rotated && special.flags & mfb(OMS_FLAG_ROTATE_RANDOM)) { + ter(p.x, p.y, p.z) = rotate(special.ter, rng(0, 3)); + } + + if (special.flags & mfb(OMS_FLAG_ROAD)) { + int closest = -1, distance = 999; + for (int i = 0; i < cities.size(); i++) { + int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); + if (dist < distance) { + closest = i; + distance = dist; + } + } + if (special.flags & (mfb(OMS_FLAG_2X2_SECOND) | mfb(OMS_FLAG_3X3_FIXED))) { + city = closest; + } else { + make_hiway(p.x, p.y, cities[closest].x, cities[closest].y, p.z, "road"); + } + } + + if (special.flags & mfb(OMS_FLAG_3X3)) { + for (int x = p.x; x < p.x + 3; x++) { + for (int y = p.y; y < p.y + 3; y++) { + if (x == p.x && y == p.y) { + y++; // Already handled + } + ter(x, y, p.z) = special.ter; + } + } + } + + if (special.flags & mfb(OMS_FLAG_3X3_SECOND)) { + size_t e_pos = std::string(special.ter).find("_entrance",0,9); + std::string ter_base; + if (e_pos != std::string::npos) { + // strip "_entrance" to get the base oter_id + ter_base = std::string(special.ter).substr(0, e_pos); + } else if (special.ter == "farm") { + ter_base = std::string(special.ter) + "_field"; + } else { + ter_base = std::string(special.ter); + } + for (int x = p.x; x < p.x + 3; x++) { + for (int y = p.y; y < p.y + 3; y++) { + ter(x, y, p.z) = ter_base; + } + } + + if (is_road(p.x + 3, p.y + 1, p.z)) { // Road to east + ter(p.x + 2, p.y + 1, p.z) = special.ter; + } else if (is_road(p.x + 1, p.y + 3, p.z)) { // Road to south + ter(p.x + 1, p.y + 2, p.z) = special.ter; + } else if (is_road(p.x - 1, p.y + 1, p.z)) { // Road to west + ter(p.x, p.y + 1, p.z) = special.ter; + } else { // Road to north, or no roads + ter(p.x + 1, p.y, p.z) = special.ter; + } + } + + if (special.flags & mfb(OMS_FLAG_BLOB)) { + for (int x = -2; x <= 2; x++) { + for (int y = -2; y <= 2; y++) { + if (x == 0 && y == 0) + y++; // Already handled + omspec_place place; + tripoint np(p.x + x, p.y + y, p.z); + if (one_in(1 + abs(x) + abs(y)) && (place.*special.able)(this, special.flags, np)) + ter(p.x + x, p.y + y, p.z) = special.ter; + } + } + } + + if (special.flags & mfb(OMS_FLAG_BIG)) { + for (int x = -3; x <= 3; x++) { + for (int y = -3; y <= 3; y++) { + if (x == 0 && y == 0) + y++; // Already handled + omspec_place place; + tripoint np(p.x + x, p.y + y, p.z); + if ((place.*special.able)(this, special.flags, np)) + ter(p.x + x, p.y + y, p.z) = special.ter; + ter(p.x + x, p.y + y, p.z) = special.ter; + } + } + } + + if (special.flags & mfb(OMS_FLAG_3X3_FIXED)) { + // road comes out of "_2" variant, rotations: + // | + // 321 963 789 147 + // 654 852- 456 -258 + // 987 741 123 369 + // | + // reference point is top-left + int dir = 0; + if (is_road(p.x + 1, p.y - 1, p.z)) { // Road to north + dir = 0; + } else if (is_road(p.x + 3, p.y + 1, p.z)) { // Road to east + dir = 1; + } else if (is_road(p.x + 1, p.y + 3, p.z)) { // Road to south + dir = 2; + } else if (is_road(p.x - 1, p.y + 1, p.z)) { // Road to west + dir = 3; + } else { + dir = rng(0, 3); // Random direction; + } +//fixme + + // usually will be called with the _2 entrance variant, + // for example "school_2" + size_t suffix_pos = std::string(special.ter).rfind("_2", std::string::npos, 2); + std::string ter_base = std::string(special.ter).substr(0, suffix_pos); + const char* suffix[] = { + "_1", "_2", "_3", "_4", "_5", "_6","_7", "_8", "_9" + }; + if (dir == 0) { + for (int i = 0, y = p.y; y <= p.y + 2; y++) { + for (int x = p.x + 2; x >= p.x; x--, i++) { + ter(x, y, p.z) = ter_base + suffix[i]; + } + } + if (ter_base == "school") { // wat. fixme. + make_hiway(p.x, p.y - 1, p.x + 1, p.y - 1, p.z, "road"); + } + } else if (dir == 1) { + for (int i = 0, x = p.x + 2; x >= p.x; x--) { + for (int y = p.y + 2; y >= p.y; y--, i++) { + ter(x, y, p.z) = ter_base + suffix[i]; + } + } + if (ter_base == "school") { + make_hiway(p.x + 3, p.y, p.x + 3, p.y + 1, p.z, "road"); + } + } else if (dir == 2) { + for (int i = 0, y = p.y + 2; y >= p.y; y--) { + for (int x = p.x; x <= p.x + 2; x++, i++) { + ter(x, y, p.z) = ter_base + suffix[i]; + } + } + if (ter_base == "school") { + make_hiway(p.x + 2, p.y + 3, p.x + 1, p.y + 3, p.z, "road"); + } + } else if (dir == 3) { + for (int i = 0, x = p.x; x <= p.x + 2; x++) { + for (int y = p.y; y <= p.y + 2; y++, i++) { + ter(x, y, p.z) = ter_base + suffix[i]; + } + } + if (ter_base == "school") { + make_hiway(p.x - 1, p.y + 2, p.x - 1, p.y + 1, p.z, "road"); + } + } + + if (special.flags & mfb(OMS_FLAG_ROAD)) { + if (dir == 0) { + make_hiway(p.x + 1, p.y - 1, cities[city].x, + cities[city].y, p.z, "road"); + } else if (dir == 1) { + make_hiway(p.x + 3, p.y + 1, cities[city].x, + cities[city].y, p.z, "road"); + } else if (dir == 2) { + make_hiway(p.x + 1, p.y + 3, cities[city].x, + cities[city].y, p.z, "road"); + } else if (dir == 3) { + make_hiway(p.x - 1, p.y + 1, cities[city].x, + cities[city].y, p.z, "road"); + } + } + } + + // Buildings should be designed with the entrance at the southwest corner + // and open to the street on the south. + + if (special.flags & mfb(OMS_FLAG_2X2_SECOND)) { + size_t e_pos = std::string(special.ter).find("_entrance",0,9); + std::string ter_base; + if (e_pos != std::string::npos) { + // strip "_entrance" to get the base oter_id + ter_base = std::string(special.ter).substr(0, e_pos); + } else { + ter_base = std::string(special.ter); + } + for (int x = p.x; x < p.x + 2; x++) { + for (int y = p.y; y < p.y + 2; y++) { + ter(x, y, p.z) = ter_base; + } + } + + int dir = 0; + if (is_road(p.x + 1, p.y - 1, p.z)) { // Road to north + dir = 0; + } else if (is_road(p.x + 2, p.y + 1, p.z)) { // Road to east + dir = 1; + } else if (is_road(p.x, p.y + 2, p.z)) { // Road to south + dir = 2; + } else if (is_road(p.x - 1, p.y, p.z)) { // Road to west + dir = 3; + } else { + dir = rng(0, 3); // Random direction; + } + + if (dir == 0) { + ter(p.x + 1, p.y, p.z) = special.ter; + } else if (dir == 1) { + ter(p.x + 1, p.y + 1, p.z) = special.ter; + } else if (dir == 2) { + ter(p.x, p.y + 1, p.z) = special.ter; + } else if (dir == 3) { + ter(p.x, p.y, p.z) = special.ter; + } + + if (special.flags & mfb(OMS_FLAG_ROAD)) { + if (dir == 0) { + make_hiway(p.x + 1, p.y - 1, cities[city].x, + cities[city].y, p.z, "road"); + } else if (dir == 1) { + make_hiway(p.x + 2, p.y + 1, cities[city].x, + cities[city].y, p.z, "road"); + } else if (dir == 2) { + make_hiway(p.x, p.y + 2, cities[city].x, + cities[city].y, p.z, "road"); + } else if (dir == 3) { + make_hiway(p.x - 1, p.y, cities[city].x, + cities[city].y, p.z, "road"); + } + } + } + + if (special.flags & mfb(OMS_FLAG_PARKING_LOT)) { + int closest = -1, distance = 999; + for (int i = 0; i < cities.size(); i++) { + int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); + if (dist < distance) { + closest = i; + distance = dist; + } + } + if (special.flags & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) { + ter(p.x + 1, p.y - 1, p.z) = "s_lot"; + make_hiway(p.x + 1, p.y - 1, cities[closest].x, cities[closest].y, p.z, "road"); + } else { + ter(p.x, p.y - 1, p.z) = "s_lot"; + make_hiway(p.x, p.y - 1, cities[closest].x, cities[closest].y, p.z, "road"); + } + } + + if (special.flags & mfb(OMS_FLAG_DIRT_LOT)) { + int closest = -1, distance = 999; + for (int i = 0; i < cities.size(); i++) { + int dist = rl_dist(p.x, p.y, cities[i].x, cities[i].y); + if (dist < distance) { + closest = i; + distance = dist; + } + } + if (special.flags & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) { + ter(p.x + 1, p.y - 1, p.z) = "dirtlot"; + make_hiway(p.x + 1, p.y - 1, cities[closest].x, cities[closest].y, p.z, "road"); + } else { + ter(p.x, p.y - 1, p.z) = "dirtlot"; + make_hiway(p.x, p.y - 1, cities[closest].x, cities[closest].y, p.z, "road"); + } + } + +// Finally, place monsters if applicable + if (special.monsters != "GROUP_NULL") { + if (special.monster_pop_min == 0 || special.monster_pop_max == 0 || + special.monster_rad_min == 0 || special.monster_rad_max == 0 ) { + debugmsg("Overmap special %s has bad spawn: pop(%d, %d) rad(%d, %d)", + otermap[special.ter].name.c_str(), special.monster_pop_min, + special.monster_pop_max, special.monster_rad_min, + special.monster_rad_max); + return; + } + + int population = rng(special.monster_pop_min, special.monster_pop_max); + int radius = rng(special.monster_rad_min, special.monster_rad_max); + zg.push_back( + mongroup(special.monsters, p.x * 2, p.y * 2, p.z, radius, population)); + } +} + +void overmap::place_mongroups() +{ + if (!ACTIVE_WORLD_OPTIONS["STATIC_SPAWN"]) { + // Cities are full of zombies + for (unsigned int i = 0; i < cities.size(); i++) { + if (!one_in(16) || cities[i].s > 5) + zg.push_back (mongroup("GROUP_ZOMBIE", (cities[i].x * 2), (cities[i].y * 2), 0, + int(cities[i].s * 2.5), cities[i].s * 80)); + } + } + + if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"]) { + // Figure out where swamps are, and place swamp monsters + for (int x = 3; x < OMAPX - 3; x += 7) { + for (int y = 3; y < OMAPY - 3; y += 7) { + int swamp_count = 0; + for (int sx = x - 3; sx <= x + 3; sx++) { + for (int sy = y - 3; sy <= y + 3; sy++) { + if (ter(sx, sy, 0) == "forest_water") + swamp_count += 2; + } + } + if (swamp_count >= 25) + zg.push_back(mongroup("GROUP_SWAMP", x * 2, y * 2, 0, 3, + rng(swamp_count * 8, swamp_count * 25))); + } + } + } + + if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"]) { + // Figure out where rivers are, and place swamp monsters + for (int x = 3; x < OMAPX - 3; x += 7) { + for (int y = 3; y < OMAPY - 3; y += 7) { + int river_count = 0; + for (int sx = x - 3; sx <= x + 3; sx++) { + for (int sy = y - 3; sy <= y + 3; sy++) { + if (is_river(ter(sx, sy, 0))) + river_count++; + } + } + if (river_count >= 25) + zg.push_back(mongroup("GROUP_RIVER", x * 2, y * 2, 0, 3, + rng(river_count * 8, river_count * 25))); + } + } + } + + if (!ACTIVE_WORLD_OPTIONS["CLASSIC_ZOMBIES"]) { + // Place the "put me anywhere" groups + int numgroups = rng(0, 3); + for (int i = 0; i < numgroups; i++) { + zg.push_back( + mongroup("GROUP_WORM", rng(0, OMAPX * 2 - 1), rng(0, OMAPY * 2 - 1), 0, + rng(20, 40), rng(30, 50))); + } + } + + // Forest groups cover the entire map + zg.push_back( mongroup("GROUP_FOREST", OMAPX / 2, OMAPY / 2, 0, + OMAPY, rng(2000, 12000))); + zg.back().diffuse = true; + zg.push_back( mongroup("GROUP_FOREST", OMAPX / 2, (OMAPY * 3) / 2, 0, + OMAPY, rng(2000, 12000))); + zg.back().diffuse = true; + zg.push_back( mongroup("GROUP_FOREST", (OMAPX * 3) / 2, OMAPY / 2, 0, + OMAPX, rng(2000, 12000))); + zg.back().diffuse = true; + zg.push_back( mongroup("GROUP_FOREST", (OMAPX * 3) / 2, (OMAPY * 3) / 2, 0, + OMAPX, rng(2000, 12000))); + zg.back().diffuse = true; +} + +void overmap::place_radios() +{ + char message[200]; + for (int i = 0; i < OMAPX; i++) { + for (int j = 0; j < OMAPY; j++) { + if (ter(i, j, 0) == "radio_tower") { + int choice = rng(0, 2); + switch(choice) + { + case 0: + snprintf( message, sizeof(message), _("This is emergency broadcast station %d%d.\ + Please proceed quickly and calmly to your designated evacuation point."), i, j); + radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), message)); + break; + case 1: + radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), + _("Head West. All survivors, head West. Help is waiting."))); + break; + case 2: + radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), "", WEATHER_RADIO)); + break; + } + } else if (ter(i, j, 0) == "lmoe") { + snprintf( message, sizeof(message), _("This is automated emergency shelter beacon %d%d.\ + Supplies, amenities and shelter are stocked."), i, j); + radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH) / 2, message)); + } else if (ter(i, j, 0) == "fema_entrance") { + snprintf( message, sizeof(message), _("This is FEMA camp %d%d.\ + Supplies are limited, please bring supplemental food, water, and bedding.\ + This is FEMA camp %d%d. A designated long-term emergency shelter."), i, j, i, j); + radios.push_back(radio_tower(i*2, j*2, rng(RADIO_MIN_STRENGTH, RADIO_MAX_STRENGTH), message)); + } + } + } +} + + +void overmap::open(game *g) +{ + std::string const plrfilename = player_filename(loc.x, loc.y); + std::string const terfilename = terrain_filename(loc.x, loc.y); + std::ifstream fin; +// Set position IDs + fin.open(terfilename.c_str()); + if (fin.is_open()) { + unserialize(g, fin, plrfilename, terfilename); + fin.close(); + } else { // No map exists! Prepare neighbors, and generate one. + std::vector pointers; +// Fetch north and south + for (int i = -1; i <= 1; i+=2) { + std::string const tmpfilename = terrain_filename(loc.x, loc.y + i); + fin.open(tmpfilename.c_str()); + if (fin.is_open()) { + fin.close(); + pointers.push_back(new overmap(g, loc.x, loc.y + i)); + } else + pointers.push_back(NULL); + } +// Fetch east and west + for (int i = -1; i <= 1; i+=2) { + std::string const tmpfilename = terrain_filename(loc.x + i, loc.y); + fin.open(tmpfilename.c_str()); + if (fin.is_open()) { + fin.close(); + pointers.push_back(new overmap(g, loc.x + i, loc.y)); + } else + pointers.push_back(NULL); + } +// pointers looks like (north, south, west, east) + generate(g, pointers[0], pointers[3], pointers[1], pointers[2]); + for (int i = 0; i < 4; i++) + delete pointers[i]; + save(); + } +} + +std::string overmap::terrain_filename(int const x, int const y) const +{ + std::stringstream filename; + + filename << world_generator->active_world->world_path << "/"; + + if (!prefix.empty()) { + filename << prefix << "."; + } + + filename << "o." << x << "." << y; + + return filename.str(); +} + +std::string overmap::player_filename(int const x, int const y) const +{ + std::stringstream filename; + + filename << world_generator->active_world->world_path <<"/" << base64_encode(name) << ".seen." << x << "." << y; + + return filename.str(); +} + +// Overmap special placement functions + +bool omspec_place::water(overmap *om, unsigned long f, tripoint p) +{ + int size = 1; + if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) + size = 2; + else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) + size = 3; + + for (int x = p.x; x < p.x + size; x++) { + for (int y = p.y; y < p.y + size; y++) { + oter_id oter = om->ter(x, y, p.z); + if (!is_ot_type("river", oter)) { + return false; + } + } + } + return true; +} + +bool omspec_place::land(overmap *om, unsigned long f, tripoint p) +{ + int size = 1; + if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) + size = 2; + else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) + size = 3; + + for (int x = p.x; x < p.x + size; x++) { + for (int y = p.y; y < p.y + size; y++) { + oter_id oter = om->ter(x, y, p.z); + if (is_ot_type("river", oter)) { + return false; + } + } + } + return true; +} + +bool omspec_place::forest(overmap *om, unsigned long f, tripoint p) +{ + int size = 1; + if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) + size = 2; + else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) + size = 3; + + for (int x = p.x; x < p.x + size; x++) { + for (int y = p.y; y < p.y + size; y++) { + oter_id oter = om->ter(x, y, p.z); + if (!is_ot_type("forest", oter)) { + return false; + } + } + } + return true; +} + +bool omspec_place::wilderness(overmap *om, unsigned long f, tripoint p) +{ + int size = 1; + if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) + size = 2; + else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) + size = 3; + + for (int x = p.x; x < p.x + size; x++) { + for (int y = p.y; y < p.y + size; y++) { + oter_id oter = om->ter(x, y, p.z); + if (!is_ot_type("forest", oter) && !is_ot_type("field", oter)) { + return false; + } + } + } + return true; +} + +bool omspec_place::by_highway(overmap *om, unsigned long f, tripoint p) +{ + int size = 1; + if (f & (mfb(OMS_FLAG_2X2) | mfb(OMS_FLAG_2X2_SECOND))) + size = 2; + else if (f & (mfb(OMS_FLAG_3X3) | mfb(OMS_FLAG_3X3_FIXED) | mfb(OMS_FLAG_3X3_SECOND))) + size = 3; + + for (int x = p.x; x < p.x + size; x++) { + for (int y = p.y; y < p.y + size; y++) { + oter_id oter = om->ter(x, y, p.z); + if (!is_ot_type("forest", oter) && !is_ot_type("field", oter)) { + return false; + } + } + } + + if (size == 3 && + !om->is_road_or_highway(p.x + 1, p.y - 1, p.z) && + !om->is_road_or_highway(p.x + 3, p.y + 1, p.z) && + !om->is_road_or_highway(p.x + 1, p.y + 3, p.z) && + !om->is_road_or_highway(p.x - 1, p.y + 1, p.z)) + return false; + else if (size == 2 && + !om->is_road_or_highway(p.x + 1, p.y - 1, p.z) && + !om->is_road_or_highway(p.x + 2, p.y + 1, p.z) && + !om->is_road_or_highway(p.x, p.y + 2, p.z) && + !om->is_road_or_highway(p.x - 1, p.y, p.z)) + return false; + else if (size == 1 && + !om->is_road_or_highway(p.x, p.y - 1, p.z) && + !om->is_road_or_highway(p.x, p.y + 1, p.z) && + !om->is_road_or_highway(p.x - 1, p.y, p.z) && + !om->is_road_or_highway(p.x + 1, p.y, p.z)) + return false; + return true; +} + + + + + + + + + + + + + + +#include "omdata.h" + +//////////////// +oter_iid ot_null, + ot_crater, + ot_field, + ot_forest, + ot_forest_thick, + ot_forest_water, + ot_river_center; + + +oter_iid oterfind(const std::string id) { + if( otermap.find(id) == otermap.end() ) { + debugmsg("Can't find %s",id.c_str()); + return 0; + } + return otermap[id].loadid; +}; + +void set_oter_ids() { + ot_null = oterfind(""); +// NOT required. + ot_crater = oterfind("crater"); + ot_field = oterfind("field"); + ot_forest = oterfind("forest"); + ot_forest_thick = oterfind("forest_thick"); + ot_forest_water = oterfind("forest_water"); + ot_river_center = oterfind("river_center"); +}; + + +////////////////////////// +//// sneaky + + // ter(...) = 0; + const int& oter_id::operator=(const int& i) { + _val = i; + return _val; + } + // ter(...) = "rock" + oter_id::operator std::string() const { + if ( _val < 0 || _val > oterlist.size() ) { + debugmsg("oterlist[%d] > %d",_val,oterlist.size()); // remove me after testing (?) + return 0; + } + return std::string(oterlist[_val].id); + } + + // int index = ter(...); + oter_id::operator int() const { + return _val; + } + + // ter(...) != "foobar" + bool oter_id::operator!=(const char * v) const { + return oterlist[_val].id.compare(v) != 0; +/* hellaciously slow string allocation frenzy -v + std::map::const_iterator it=otermap.find(v); + return ( it == otermap.end() || it->second.loadid != _val); +*/ + } + + // ter(...) == "foobar" + bool oter_id::operator==(const char * v) const { + return oterlist[_val].id.compare(v) == 0; + } + bool oter_id::operator<=(const char * v) const { + std::map::const_iterator it=otermap.find(v); + return ( it == otermap.end() || it->second.loadid <= _val); + } + bool oter_id::operator>=(const char * v) const { + std::map::const_iterator it=otermap.find(v); + return ( it != otermap.end() && it->second.loadid >= _val); + } + + // o_id1 != o_id2 + bool oter_id::operator!=(const oter_id & v) const { + return ( _val != v._val ); + } + bool oter_id::operator==(const oter_id & v) const { + return ( _val == v._val ); + } + + // oter_t( ter(...) ).name // WARNING + oter_id::operator oter_t() const { + return oterlist[_val]; + } + +const oter_t & oter_id::t() const { + return oterlist[_val]; + } + // ter(...).size() + int oter_id::size() const { + return oterlist[_val].id.size(); + } + + // ter(...).find("foo"); + int oter_id::find(const std::string &v, const int start, const int end) const { + return oterlist[_val].id.find(v);//, start, end); + } + // ter(...).compare(0, 3, "foo"); + int oter_id::compare(size_t pos, size_t len, const char* s, size_t n) const { + if ( n != 0 ) { + return oterlist[_val].id.compare(pos, len, s, n); + } else { + return oterlist[_val].id.compare(pos, len, s); + } + } + + // std::string("river_ne"); oter_id van_location(down_by); + oter_id::oter_id(const std::string& v) { + std::map::const_iterator it=otermap.find(v); + if ( it == otermap.end() ) { + debugmsg("not found: %s",v.c_str()); + } else { + _val = it->second.loadid; + } + } + + // oter_id b("house_north"); + oter_id::oter_id(const char * v) { + std::map::const_iterator it=otermap.find(v); + if ( it == otermap.end() ) { + debugmsg("not found: %s",v); + } else { + _val = it->second.loadid; + } + } + + // wprint("%s",ter(...).c_str() ); + const char * oter_id::c_str() const { + return std::string(oterlist[_val].id).c_str(); + } diff --git a/overmap.h b/src/overmap.h similarity index 82% rename from overmap.h rename to src/overmap.h index d12999cb6d67a..940a8e2f6362b 100644 --- a/overmap.h +++ b/src/overmap.h @@ -4,7 +4,6 @@ #include "string.h" #include "omdata.h" #include "mongroup.h" -#include "settlement.h" #include "output.h" #include #include @@ -13,9 +12,9 @@ #include "cursesdef.h" #include "name.h" #include "input.h" +#include "json.h" class npc; -struct settlement; #define OVERMAP_DEPTH 10 #define OVERMAP_HEIGHT 0 @@ -41,6 +40,12 @@ struct om_note { x (X), y (Y), num (N), text (T) {} }; +struct om_vehicle { + int x; // overmap x coordinate of tracked vehicle + int y; // overmap y coordinate + std::string name; +}; + enum radio_type { MESSAGE_BROADCAST, WEATHER_RADIO @@ -107,9 +112,9 @@ class overmap * If no such tile can be found, (-1, -1) is returned. */ // TODO: make this 3d - point find_closest(point origin, oter_id type, int type_range, + point find_closest(point origin, const oter_id &type, int &dist, bool must_be_seen); - std::vector find_all(tripoint origin, oter_id type, int type_range, + std::vector find_all(tripoint origin, const std::string &type, int &dist, bool must_be_seen); std::vector find_terrain(std::string term, int cursx, int cursy, int zlevel); int closest_city(point p); @@ -118,8 +123,7 @@ class overmap // Interactive point choosing; used as the map screen point draw_overmap(game *g, int z); - bool ter_in_type_range(int x, int y, int z, oter_id type, int type_range); - oter_id& ter(int x, int y, int z); + oter_id& ter(const int x, const int y, const int z); bool& seen(int x, int y, int z); std::vector monsters_at(int x, int y, int z); bool is_safe(int x, int y, int z); // true if monsters_at is empty, or only woodland @@ -133,14 +137,16 @@ class overmap point find_note(int const x, int const y, int const z, std::string const& text) const; void remove_npc(int npc_id); + void remove_vehicle(int id); + int add_vehicle(vehicle *veh); // TODO: make private std::vector zg; std::vector radios; std::vector npcs; + std::map vehicles; std::vector cities; std::vector roads_out; - std::vector towns; private: point loc; @@ -186,16 +192,17 @@ class overmap void build_mine(int x, int y, int z, int s); void place_rifts(int const z); // Connection highways - void place_hiways(std::vector cities, int z, oter_id base); + void place_hiways(std::vector cities, int z, const std::string &base); void place_subways(std::vector stations); - void make_hiway(int x1, int y1, int x2, int y2, int z, oter_id base); + void make_hiway(int x1, int y1, int x2, int y2, int z, const std::string &base); void building_on_hiway(int x, int y, int dir); // Polishing - bool is_road(oter_id base, int x, int y, int z); // Dependant on road type + bool check_ot_type(const std::string &otype, int x, int y, int z); bool is_road(int x, int y, int z); - void polish(int z, oter_id min = ot_null, oter_id max = ot_tutorial); - void good_road(oter_id base, int x, int y, int z); + void polish(const int z, const std::string &terrain_type="all"); + void good_road(const std::string &base, int x, int y, int z); void good_river(int x, int y, int z); + oter_id rotate(const oter_id &oter, int dir); // Monsters, radios, etc. void place_specials(); void place_special(overmap_special special, tripoint p); @@ -209,6 +216,8 @@ class overmap // Map helper function. bool has_npc(game *g, int const x, int const y, int const z) const; void print_npcs(game *g, WINDOW *w, int const x, int const y, int const z); + bool has_vehicle(game *g, int const x, int const y, int const z, bool require_pda = true) const; + void print_vehicles(game *g, WINDOW *w, int const x, int const y, int const z); }; // TODO: readd the stream operators @@ -216,4 +225,12 @@ class overmap //std::ostream & operator<<(std::ostream &, const overmap &); //std::ostream & operator<<(std::ostream &, const city &); +extern std::map otermap; +extern std::vector oterlist; +void load_overmap_terrain(JsonObject &jo); + +bool is_river(const oter_id &ter); +bool is_ot_type(const std::string &otype, const oter_id &oter); +map_extras& get_extras(const std::string &name); + #endif diff --git a/overmapbuffer.cpp b/src/overmapbuffer.cpp similarity index 100% rename from overmapbuffer.cpp rename to src/overmapbuffer.cpp diff --git a/overmapbuffer.h b/src/overmapbuffer.h similarity index 100% rename from overmapbuffer.h rename to src/overmapbuffer.h diff --git a/picofunc.cpp b/src/picofunc.cpp similarity index 100% rename from picofunc.cpp rename to src/picofunc.cpp diff --git a/picofunc.h b/src/picofunc.h similarity index 100% rename from picofunc.h rename to src/picofunc.h diff --git a/picojson.h b/src/picojson.h similarity index 100% rename from picojson.h rename to src/picojson.h diff --git a/player.cpp b/src/player.cpp similarity index 97% rename from player.cpp rename to src/player.cpp index 21cc241e77c3b..efe608710e4aa 100644 --- a/player.cpp +++ b/src/player.cpp @@ -140,6 +140,8 @@ player::player() : name("") sight_boost = 0; sight_boost_cap = 0; lastrecipe = NULL; + next_expected_position.x = -1; + next_expected_position.y = -1; for (std::map::iterator iter = traits.begin(); iter != traits.end(); ++iter) { my_traits.erase(iter->first); @@ -301,8 +303,8 @@ player& player::operator= (const player & rhs) void player::normalize(game *g) { - ret_null = item(g->itypes["null"], 0); - weapon = item(g->itypes["null"], 0); + ret_null = item(itypes["null"], 0); + weapon = item(itypes["null"], 0); style_selected = "style_none"; for (int i = 0; i < num_hp_parts; i++) { hp_max[i] = 60 + str_max * 3; @@ -1175,11 +1177,11 @@ int player::run_cost(int base_cost, bool diag) { float movecost = float(base_cost); if (diag) - movecost *= 0.7071; // because everything here assumes 100 is base + movecost *= 0.7071f; // because everything here assumes 100 is base bool flatground = movecost < 105; if (has_trait("PARKOUR") && movecost > 100 ) { - movecost *= .5; + movecost *= .5f; if (movecost < 100) movecost = 100; } @@ -1194,25 +1196,25 @@ int player::run_cost(int base_cost, bool diag) movecost += 25; if (has_trait("FLEET") && flatground) - movecost *= .85; + movecost *= .85f; if (has_trait("FLEET2") && flatground) - movecost *= .7; + movecost *= .7f; if (has_trait("PADDED_FEET") && !wearing_something_on(bp_feet)) - movecost *= .9; + movecost *= .9f; if (has_trait("LIGHT_BONES")) - movecost *= .9; + movecost *= .9f; if (has_trait("HOLLOW_BONES")) - movecost *= .8; + movecost *= .8f; if (has_trait("WINGS_INSECT")) movecost -= 15; if (has_trait("LEG_TENTACLES")) movecost += 20; if (has_trait("PONDEROUS1")) - movecost *= 1.1; + movecost *= 1.1f; if (has_trait("PONDEROUS2")) - movecost *= 1.2; + movecost *= 1.2f; if (has_trait("PONDEROUS3")) - movecost *= 1.3; + movecost *= 1.3f; movecost += encumb(bp_mouth) * 5 + encumb(bp_feet) * 5 + encumb(bp_legs) * 3; @@ -1305,13 +1307,11 @@ void player::load_info(game *g, std::string data) check = data[1]; } if ( check == '{' ) { - picojson::value pdata; - dump >> pdata; - std::string jsonerr = picojson::get_last_error(); - if ( ! jsonerr.empty() ) { + JsonIn jsin(&dump); + try { + deserialize(jsin); + } catch (std::string jsonerr) { debugmsg("Bad player json\n%s", jsonerr.c_str() ); - } else { - json_load(pdata, g); } return; } else { // old save @@ -1322,7 +1322,7 @@ void player::load_info(game *g, std::string data) std::string player::save_info() { std::stringstream dump; - dump << json_save(true).serialize(); + dump << serialize(); // saves contents dump << std::endl; dump << dump_memorial(); return dump.str(); @@ -1350,8 +1350,7 @@ void player::memorial( std::ofstream &memorial_file ) //Figure out the location point cur_loc = g->om_location(); oter_id cur_ter = g->cur_om->ter(cur_loc.x, cur_loc.y, g->levz); - if (cur_ter == ot_null) - { + if (cur_ter == "") { if (cur_loc.x >= OMAPX && cur_loc.y >= OMAPY) { cur_ter = g->om_diag->ter(cur_loc.x - OMAPX, cur_loc.y - OMAPY, g->levz); } else if (cur_loc.x >= OMAPX) { @@ -1360,7 +1359,25 @@ void player::memorial( std::ofstream &memorial_file ) cur_ter = g->om_vert->ter(cur_loc.x, cur_loc.y - OMAPY, g->levz); } } - std::string tername = oterlist[cur_ter].name; + std::string tername = otermap[cur_ter].name; + + //Were they in a town, or out in the wilderness? + int city_index = g->cur_om->closest_city(cur_loc); + std::stringstream city_name; + if(city_index < 0) { + city_name << _("in the middle of nowhere"); + } else { + city nearest_city = g->cur_om->cities[city_index]; + //Give slightly different messages based on how far we are from the middle + int distance_from_city = abs(g->cur_om->dist_from_city(cur_loc)); + if(distance_from_city > nearest_city.s + 4) { + city_name << _("in the wilderness"); + } else if(distance_from_city >= nearest_city.s) { + city_name << _("on the outskirts of ") << nearest_city.name; + } else { + city_name << _("in ") << nearest_city.name; + } + } //Header std::string version = string_format("%s", getVersionString()); @@ -1376,7 +1393,7 @@ void player::memorial( std::ofstream &memorial_file ) << _(" of year ") << (g->turn.years() + 1) << _(", day ") << (g->turn.days() + 1) << _(", at ") << g->turn.print_time() << ".\n"; - memorial_file << pronoun << _(" was killed in a ") << tername << ".\n"; + memorial_file << pronoun << _(" was killed in a ") << tername << " " << city_name.str() << ".\n"; memorial_file << "\n"; //Misc @@ -1595,7 +1612,7 @@ void player::add_memorial_log(const char* message, ...) << (g->turn.days() + 1) << ", " << g->turn.print_time(); oter_id cur_ter = g->cur_om->ter((g->levx + int(MAPSIZE / 2)) / 2, (g->levy + int(MAPSIZE / 2)) / 2, g->levz); - std::string location = oterlist[cur_ter].name; + std::string location = otermap[cur_ter].name; std::stringstream log_message; log_message << "| " << timestamp.str() << " | " << location.c_str() << " | " << buff; @@ -1647,7 +1664,13 @@ std::string player::dump_memorial() */ stats* player::lifetime_stats() { - return &player_stats; + return &player_stats; +} + +// copy of stats, for saving +stats player::get_stats() const +{ + return player_stats; } inline bool skill_display_sort(const std::pair &a, const std::pair &b) @@ -2714,9 +2737,29 @@ void player::disp_morale(game *g) void player::disp_status(WINDOW *w, WINDOW *w2, game *g) { bool sideStyle = use_narrow_sidebar(); - WINDOW *weapwin = sideStyle ? w2 : w; - mvwprintz(weapwin, sideStyle ? 1 : 0, 0, c_ltgray, _("Weapon: %s"), weapname().c_str()); + + // Print current weapon, or attachment if active. + item* gunmod = weapon.active_gunmod(); + std::string mode = ""; + std::stringstream attachment; + if (gunmod != NULL) + { + attachment << gunmod->type->name.c_str(); + for (int i = 0; i < weapon.contents.size(); i++) + if (weapon.contents[i].is_gunmod() && + weapon.contents[i].has_flag("MODE_AUX")) + attachment << " (" << weapon.contents[i].charges << ")"; + mvwprintz(weapwin, sideStyle ? 1 : 0, 0, c_ltgray, _("%s (Mod)"), attachment.str().c_str()); + } + else + { + if (weapon.mode == "MODE_BURST") + mvwprintz(weapwin, sideStyle ? 1 : 0, 0, c_ltgray, _("%s (Burst)"), weapname().c_str()); + else + mvwprintz(weapwin, sideStyle ? 1 : 0, 0, c_ltgray, _("%s"), weapname().c_str()); + } + if (weapon.is_gun()) { int adj_recoil = recoil + driving_recoil; if (adj_recoil > 0) { @@ -2733,31 +2776,33 @@ void player::disp_status(WINDOW *w, WINDOW *w2, game *g) } } - // Print currently used style - const char *style = NULL; - if (style_selected == "style_none") - style = _("No Style"); - else - style = martialarts[style_selected].name.c_str(); - if (style) { - int x = sideStyle ? (getmaxx(weapwin) - 13) : 0; - mvwprintz(weapwin, 1, x, c_blue, style); - } + // Print currently used style or weapon mode. + std::string style = ""; + if (is_armed()) + { + if (style_selected == "style_none") + style = _("Normal"); + else if (can_melee()) + style = martialarts[style_selected].name; - // Print the current weapon mode - const char *mode = NULL; - if (weapon.mode == "NULL") - mode = _("Normal"); - else if (weapon.mode == "MODE_BURST") - mode = _("Burst"); - else { - item* gunmod = weapon.active_gunmod(); - if (gunmod != NULL) - mode = gunmod->type->name.c_str(); - } - if (mode) { int x = sideStyle ? (getmaxx(weapwin) - 13) : 0; - mvwprintz(weapwin, 3, x, c_red, mode); + mvwprintz(weapwin, 1, x, c_red, style.c_str()); + } + else + { + if (style_selected == "style_none") + { + style = _("No Style"); + } + else + { + style = martialarts[style_selected].name; + } + if (style != "") + { + int x = sideStyle ? (getmaxx(weapwin) - 13) : 0; + mvwprintz(weapwin, 1, x, c_blue, style.c_str()); + } } wmove(w, sideStyle ? 1 : 2, 0); @@ -3296,8 +3341,10 @@ void player::recalc_sight_limits() // Set sight_boost and sight_boost_cap, based on night vision. // (A player will never have more than one night vision trait.) sight_boost_cap = 12; - if (has_nv() || has_trait("NIGHTVISION3")) { + if (has_nv() || has_trait("NIGHTVISION3") || has_trait("ELFA_FNV")) { sight_boost = sight_boost_cap; + }else if (has_trait("ELFA_NV")) { + sight_boost = 6; } else if (has_trait("NIGHTVISION2")) { sight_boost = 4; } else if (has_trait("NIGHTVISION")) { @@ -3360,7 +3407,7 @@ bool player::has_two_arms() const bool player::avoid_trap(trap* tr) { - int myroll = dice(3, dex_cur + skillLevel("dodge") * 1.5); + int myroll = dice(3, int(dex_cur + skillLevel("dodge") * 1.5)); int traproll; if (per_cur - encumb(bp_eyes) >= tr->visibility) traproll = dice(3, tr->avoidance); @@ -3446,7 +3493,7 @@ int player::throw_range(signed char ch) return -1; else tmp = inv.item_by_letter(ch); - + if (tmp.count_by_charges() && tmp.charges > 1) tmp.charges = 1; @@ -4387,7 +4434,7 @@ int player::addiction_level(add_type type) bool player::siphon(game *g, vehicle *veh, ammotype desired_liquid) { int liquid_amount = veh->drain( desired_liquid, veh->fuel_capacity(desired_liquid) ); - item used_item( g->itypes[default_ammo(desired_liquid)], g->turn ); + item used_item( itypes[default_ammo(desired_liquid)], g->turn ); used_item.charges = liquid_amount; int extra = g->move_liquid( used_item ); if( extra == -1 ) { @@ -5469,21 +5516,21 @@ bool player::process_single_active_item(game *g, item *it) else if (it->is_tool()) { it_tool* tmp = dynamic_cast(it->type); - tmp->use.call(g, this, it, true); + tmp->use.call(this, it, true); if (tmp->turns_per_charge > 0 && int(g->turn) % tmp->turns_per_charge == 0) { it->charges--; } if (it->charges <= 0) { - tmp->use.call(g, this, it, false); + tmp->use.call(this, it, false); if (tmp->revert_to == "null") { return false; } else { - it->type = g->itypes[tmp->revert_to]; + it->type = itypes[tmp->revert_to]; } } } @@ -6233,19 +6280,19 @@ bool player::consume(game *g, signed char ch) // Check tools bool has = has_amount(comest->tool, 1); // Tools with charges need to have charges, not just be present. - if (g->itypes[comest->tool]->count_by_charges()) { + if (itypes[comest->tool]->count_by_charges()) { has = has_charges(comest->tool, 1); } if (!has) { g->add_msg_if_player(this,_("You need a %s to consume that!"), - g->itypes[comest->tool]->name.c_str()); + itypes[comest->tool]->name.c_str()); return false; } use_charges(comest->tool, 1); // Tools like lighters get used } if (comest->use != &iuse::none) { //Check special use - int was_used = comest->use.call(g, this, to_eat, false); + int was_used = comest->use.call(this, to_eat, false); if( was_used == 0 ) { return false; } @@ -6344,12 +6391,12 @@ bool player::eat(game *g, item *eaten, it_comest *comest) } if (comest->tool != "null") { bool has = has_amount(comest->tool, 1); - if (g->itypes[comest->tool]->count_by_charges()) { + if (itypes[comest->tool]->count_by_charges()) { has = has_charges(comest->tool, 1); } if (!has) { g->add_msg_if_player(this,_("You need a %s to consume that!"), - g->itypes[comest->tool]->name.c_str()); + itypes[comest->tool]->name.c_str()); return false; } } @@ -6388,7 +6435,7 @@ bool player::eat(game *g, item *eaten, it_comest *comest) } if (comest->use != &iuse::none) { - to_eat = comest->use.call(g, this, eaten, false); + to_eat = comest->use.call(this, eaten, false); if( to_eat == 0 ) { return false; } @@ -6430,7 +6477,7 @@ bool player::eat(game *g, item *eaten, it_comest *comest) eaten->tname(g).c_str()); } - if (g->itypes[comest->tool]->is_tool()) { + if (itypes[comest->tool]->is_tool()) { use_charges(comest->tool, 1); // Tools like lighters get used } @@ -6446,12 +6493,12 @@ bool player::eat(game *g, item *eaten, it_comest *comest) g->add_msg_if_player(this, _("You feast upon the human flesh.")); add_morale(MORALE_CANNIBAL, 15, 100); } else { - g->add_msg_if_player(this, _("You feel horrible for eating a person..")); + g->add_msg_if_player(this, _("You feel horrible for eating a person.")); add_morale(MORALE_CANNIBAL, -60, -400, 600, 300); } } if (has_trait("VEGETARIAN") && (eaten->made_of("flesh") || eaten->made_of("hflesh"))) { - g->add_msg_if_player(this,_("Almost instantly you feel a familiar pain in your stomach")); + g->add_msg_if_player(this,_("Almost instantly you feel a familiar pain in your stomach.")); add_morale(MORALE_VEGETARIAN, -75, -400, 300, 240); } if ((has_trait("HERBIVORE") || has_trait("RUMINANT")) && @@ -6544,6 +6591,9 @@ bool player::wield(game *g, signed char ch, bool autodrop) return false; } if (ch == -3) { + if(weapon.is_null()) { + return false; + } if (autodrop || volume_carried() + weapon.volume() < volume_capacity()) { inv.add_item_keep_invlet(remove_weapon()); inv.unsort(); @@ -7489,12 +7539,14 @@ hint_rating player::rate_action_unload(item *it) { int has_40mml = -1; int has_shotgun = -1; int has_shotgun2 = -1; + int has_shotgun3 = -1; if (it->is_gun()) { spare_mag = it->has_gunmod ("spare_mag"); has_m203 = it->has_gunmod ("m203"); has_40mml = it->has_gunmod ("pipe_launcher40mm"); has_shotgun = it->has_gunmod ("u_shotgun"); has_shotgun2 = it->has_gunmod ("masterkey"); + has_shotgun3 = it->has_gunmod ("rm121aux"); } if (it->is_container() || (it->charges == 0 && @@ -7502,7 +7554,8 @@ hint_rating player::rate_action_unload(item *it) { (has_m203 == -1 || it->contents[has_m203].charges <= 0) && (has_40mml == -1 || it->contents[has_40mml].charges <= 0) && (has_shotgun == -1 || it->contents[has_shotgun].charges <= 0) && - (has_shotgun2 == -1 || it->contents[has_shotgun2].charges <= 0))) { + (has_shotgun2 == -1 || it->contents[has_shotgun2].charges <= 0) && + (has_shotgun3 == -1 || it->contents[has_shotgun3].charges <= 0))) { if (it->contents.size() == 0) { return HINT_IFFY; } @@ -7520,7 +7573,7 @@ hint_rating player::rate_action_disassemble(item *it, game *g) { ++list_iter) { recipe* cur_recipe = *list_iter; - if (it->type == g->itypes[cur_recipe->result] && cur_recipe->reversible) + if (it->type == itypes[cur_recipe->result] && cur_recipe->reversible) // ok, a valid recipe exists for the item, and it is reversible // assign the activity { @@ -7606,6 +7659,7 @@ hint_rating player::rate_action_use(item *it) void player::use(game *g, char let) { item* used = &i_at(let); + item copy; if (used->is_null()) { g->add_msg(_("You do not have that item.")); @@ -7617,7 +7671,7 @@ void player::use(game *g, char let) if (used->is_tool()) { it_tool *tool = dynamic_cast(used->type); if (tool->charges_per_use == 0 || used->charges >= tool->charges_per_use) { - int charges_used = tool->use.call(g, this, used, false); + int charges_used = tool->use.call(this, used, false); if ( charges_used >= 1 ) { if( tool->charges_per_use > 0 ) { used->charges -= std::min(used->charges, charges_used); @@ -7634,7 +7688,7 @@ void player::use(game *g, char let) used->charges, tool->charges_per_use); } } else if (used->type->use == &iuse::boots) { - used->type->use.call(g, this, used, false); + used->type->use.call(this, used, false); return; } else if (used->is_gunmod()) { if (skillLevel("gun") == 0) { @@ -7735,12 +7789,12 @@ press 'U' while wielding the unloaded gun."), gun->tname(g).c_str()); gun->tname(g).c_str()); return; } else if ((mod->id == "pipe_launcher40mm" || mod->id == "m203" || - mod->id == "masterkey" || mod->id == "u_shotgun" || - mod->id == "bayonet" || mod->id == "gun_crossbow" || - mod->id == "sword_bayonet") && + mod->id == "masterkey" || mod->id == "rm121aux" || mod->id == "u_shotgun" || + mod->id == "bayonet" || mod->id == "gun_crossbow" || mod->id == "sword_bayonet") && (gun->contents[i].type->id == "pipe_launcher40mm" || gun->contents[i].type->id == "m203" || gun->contents[i].type->id == "masterkey" || + gun->contents[i].type->id == "rm121aux" || gun->contents[i].type->id == "u_shotgun" || gun->contents[i].type->id == "bayonet" || gun->contents[i].type->id == "sword_bayonet" || @@ -7852,7 +7906,7 @@ void player::read(game *g, char ch) } if (mac != NULL) { - mac->use.call(g, this, it, false); + mac->use.call(this, it, false); return; } @@ -7993,7 +8047,7 @@ bool player::try_study_recipe(game *g, it_book *book) { learn_recipe(iter->first); g->add_msg(_("Learned a recipe for %s from the %s."), - g->itypes[iter->first->result]->name.c_str(), book->name.c_str()); + itypes[iter->first->result]->name.c_str(), book->name.c_str()); return true; } else @@ -8133,8 +8187,9 @@ float player::fine_detail_vision_mod(game *g) } if (has_trait("NIGHTVISION")) { vision_ii -= .5; } + else if (has_trait("ELFA_NV")) { vision_ii -= 1; } else if (has_trait("NIGHTVISION2")) { vision_ii -= 1.5; } - else if (has_trait("NIGHTVISION3")) { vision_ii -= 2.5; } + else if (has_trait("NIGHTVISION3") || has_trait("ELFA_FNV")) { vision_ii -= 2.5; } if (vision_ii < 1) { vision_ii = 1; } return vision_ii; @@ -8271,6 +8326,8 @@ int player::armor_bash(body_part bp) ret += 3; else if (bp == bp_legs && has_bionic("bio_armor_legs")) ret += 3; + else if (bp == bp_eyes && has_bionic("bio_armor_eyes")) + ret += 3; if (has_trait("FUR")) ret++; if (has_trait("CHITIN")) @@ -8300,6 +8357,8 @@ int player::armor_cut(body_part bp) ret += 3; else if (bp == bp_legs && has_bionic("bio_armor_legs")) ret += 3; + else if (bp == bp_eyes && has_bionic("bio_armor_eyes")) + ret += 3; if (has_trait("THICKSKIN")) ret++; if (has_trait("SCALES")) @@ -8459,6 +8518,11 @@ void player::absorb(game *g, body_part bp, int &dam, int &cut) dam -= 3; cut -= 3; } + else if (bp == bp_eyes && has_bionic("bio_armor_eyes")) + { + dam -= 3; + cut -= 3; + } if (has_trait("THICKSKIN")) cut--; if (has_trait("SCALES")) @@ -8517,6 +8581,14 @@ int player::resist(body_part bp) } } return ret; + + if (bp == bp_eyes && has_bionic("bio_armor_eyes") && ret < 5) { + ret += 2; + if (ret > 5) { + ret = 5; + } + } + return ret; } bool player::wearing_something_on(body_part bp) @@ -8708,7 +8780,9 @@ std::string player::weapname(bool charges) } else if (weapon.is_container()) { std::stringstream dump; dump << weapon.tname().c_str(); - dump << " (" << weapon.contents.size() << ")"; + if(weapon.contents.size() == 1) { + dump << " (" << weapon.contents[0].charges << ")"; + } return dump.str(); } else if (weapon.is_null()) { return _("fists"); @@ -8744,6 +8818,23 @@ SkillLevel& player::skillLevel(Skill *_skill) { return _skills[_skill]; } +SkillLevel player::get_skill_level(Skill *_skill) const +{ + for (std::map::const_iterator it = _skills.begin(); + it != _skills.end(); ++it) { + if (it->first == _skill) { + return it->second; + } + } + return SkillLevel(); +} + +SkillLevel player::get_skill_level(const std::string &ident) const +{ + Skill *sk = Skill::skill(ident); + return get_skill_level(sk); +} + void player::copy_skill_levels(const player *rhs) { _skills = rhs->_skills; @@ -8772,7 +8863,7 @@ void player::setID (int i) this->id = i; } -int player::getID () +int player::getID () const { return this->id; } @@ -8903,4 +8994,69 @@ void player::environmental_revert_effect() recalc_sight_limits(); } + +void player::set_destination(const std::vector &route) +{ + auto_move_route = route; +} + +void player::clear_destination() +{ + auto_move_route.clear(); + next_expected_position.x = -1; + next_expected_position.y = -1; +} + +bool player::has_destination() const +{ + return auto_move_route.size() > 0; +} + +std::vector &player::get_auto_move_route() +{ + return auto_move_route; +} + +action_id player::get_next_auto_move_direction() +{ + if (!has_destination()) { + return ACTION_NULL; + } + + if (next_expected_position.x != -1) { + if (posx != next_expected_position.x || posy != next_expected_position.y) { + // We're off course, possibly stumbling or stuck, cancel auto move + return ACTION_NULL; + } + } + + next_expected_position = auto_move_route.front(); + auto_move_route.erase(auto_move_route.begin()); + + int dx = next_expected_position.x - posx; + int dy = next_expected_position.y - posy; + + if (abs(dx) > 1 || abs(dy) > 1) { + // Should never happen, but check just in case + return ACTION_NULL; + } + + return get_movement_direction_from_delta(dx, dy); +} + +void player::shift_destination(int shiftx, int shifty) +{ + if (next_expected_position.x != -1) { + next_expected_position.x += shiftx; + next_expected_position.y += shifty; + } + + for (std::vector::iterator it = auto_move_route.begin(); it != auto_move_route.end(); it++) { + it->x += shiftx; + it->y += shifty; + } +} + + + // --- End --- diff --git a/player.h b/src/player.h similarity index 90% rename from player.h rename to src/player.h index 15f201bb9d3b0..4cc96996a4b4b 100644 --- a/player.h +++ b/src/player.h @@ -14,6 +14,9 @@ #include "crafting.h" #include "vehicle.h" #include "martialarts.h" +#include "json.h" + +#include "action.h" #include #include #include @@ -21,7 +24,7 @@ class monster; class game; struct trap; -struct mission; +class mission; class profession; struct special_attack @@ -36,7 +39,7 @@ struct special_attack //Don't forget to add new memorial counters //to the save and load functions in savegame_json.cpp -struct stats +struct stats : public JsonSerializer, public JsonDeserializer { int squares_walked; int damage_taken; @@ -53,9 +56,28 @@ struct stats stats() { reset(); } + + using JsonSerializer::serialize; + void serialize(JsonOut &json) const { + json.start_object(); + json.member("squares_walked", squares_walked); + json.member("damage_taken", damage_taken); + json.member("damage_healed", damage_healed); + json.member("headshots", headshots); + json.end_object(); + } + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + jo.read_into("squares_walked", squares_walked); + jo.read_into("damage_taken", damage_taken); + jo.read_into("damage_healed", damage_healed); + jo.read_into("headshots", headshots); + } }; -class player { +class player : public JsonSerializer, public JsonDeserializer +{ std::map _skills; public: @@ -81,11 +103,16 @@ class player { virtual void load_info(game *g, std::string data); // deserialize string when loading virtual std::string save_info(); // output serialized json string for saving - void json_load_common_variables( std::map & data ); - virtual void json_load(picojson::value & parsed, game *g); // populate variables, inventory items, and misc from json object + // populate variables, inventory items, and misc from json object + void json_load_common_variables(JsonObject &jsout); + using JsonDeserializer::deserialize; + virtual void deserialize(JsonIn &jsin); - void json_save_common_variables( std::map & data ); - virtual picojson::value json_save(bool save_contents=false); + void json_save_common_variables(JsonOut &json) const; + using JsonSerializer::serialize; + // by default save all contained info + void serialize(JsonOut &jsout) const { serialize(jsout, true); } + virtual void serialize(JsonOut &jsout, bool save_contents) const; void memorial( std::ofstream &memorial_file ); // Write out description of player. void disp_info(game *g); // '@' key; extended character info @@ -169,6 +196,7 @@ class player { int mabuff_cut_bonus(); // martial arts bash damage bonus, applied after mult bool is_throw_immune(); // martial arts throw immunity bool is_quiet(); // martial arts quiet melee + bool can_melee(); bool is_on_ground(); // all body parts are available to ground level damage sources bool has_miss_recovery_tec(); // technique-based miss recovery, like tec_feint @@ -193,7 +221,7 @@ class player { int roll_bash_damage(monster *z, bool crit); int roll_cut_damage(monster *z, bool crit); int roll_stab_damage(monster *z, bool crit); - int roll_stuck_penalty(monster *z, bool stabbing); + int roll_stuck_penalty(bool stabbing); std::vector get_all_techniques(); @@ -404,6 +432,14 @@ class player { bool studied_all_recipes(it_book *book); bool try_study_recipe(game *g, it_book *book); + // Auto move methods + void set_destination(const std::vector &route); + void clear_destination(); + bool has_destination() const; + std::vector &get_auto_move_route(); + action_id get_next_auto_move_direction(); + void shift_destination(int shiftx, int shifty); + // Library functions double logistic(double t); double logistic_range(int min, int max, int pos); @@ -465,6 +501,10 @@ class player { SkillLevel& skillLevel(Skill* _skill); SkillLevel& skillLevel(std::string ident); + // for serialization + SkillLevel get_skill_level(Skill* _skill) const; + SkillLevel get_skill_level(const std::string &ident) const; + void set_skill_level(Skill* _skill, int level); void set_skill_level(std::string ident, int level); @@ -497,10 +537,11 @@ class player { //Notable events, to be printed in memorial std::vector memorial_log; - //Record of player stats, for posterity only - stats* lifetime_stats(); + //Record of player stats, for posterity only + stats* lifetime_stats(); + stats get_stats() const; // for serialization - int getID (); + int getID () const; bool is_underwater() const; void set_underwater(bool); @@ -524,6 +565,10 @@ class player { bool has_fire(const int quantity); void use_fire(const int quantity); + std::vector auto_move_route; + // Used to make sure auto move is canceled if we stumble off course + point next_expected_position; + int id; // A unique ID number, assigned by the game class private so it cannot be overwritten and cause save game corruptions. //NPCs also use this ID value. Values should never be reused. }; diff --git a/pldata.h b/src/pldata.h similarity index 66% rename from pldata.h rename to src/pldata.h index ae2600da8e740..15bfd250fab14 100644 --- a/pldata.h +++ b/src/pldata.h @@ -2,7 +2,7 @@ #define _PLDATA_H_ #include "enums.h" -#include "picofunc.h" +#include "json.h" #include "translations.h" #include "bodypart.h" #include @@ -34,8 +34,9 @@ enum add_type { void realDebugmsg(const char* name, const char* line, const char *mes, ...); -struct disease +class disease : public JsonSerializer, public JsonDeserializer { +public: dis_type type; int intensity; int duration; @@ -58,16 +59,59 @@ struct disease disease() : type("null") { duration = 0; intensity = 0; bp = num_bp; side = -1; permanent = false; decay = 0; } disease(dis_type t, int d, int i = 0, body_part part = num_bp, int s = -1, bool perm = false, int dec = 0) : type(t) { duration = d; intensity = i; bp = part; side = s; permanent = perm; decay = dec; } + + using JsonSerializer::serialize; + void serialize(JsonOut &json) const { + json.start_object(); + json.member("type", type); + json.member("intensity", intensity); + json.member("duration", duration); + json.member("bp", (int)bp); + json.member("side", side); + json.member("permanent", permanent); + json.member("decay", decay); + json.member("ma_buff_id", buff_id); + json.end_object(); + } + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + type = jo.get_string("type"); + intensity = jo.get_int("intensity"); + duration = jo.get_int("duration"); + bp = (body_part)jo.get_int("bp"); + side = jo.get_int("side"); + permanent = jo.get_bool("permanent"); + decay = jo.get_int("decay"); + buff_id = jo.get_string("ma_buff_id"); + } }; -struct addiction +class addiction : public JsonSerializer, public JsonDeserializer { +public: add_type type; int intensity; int sated; addiction() { type = ADD_NULL; intensity = 0; sated = 600; } addiction(add_type t) { type = t; intensity = 1; sated = 600; } addiction(add_type t, int i) { type = t; intensity = i; sated = 600; } + + using JsonSerializer::serialize; + void serialize(JsonOut &json) const { + json.start_object(); + json.member("type_enum", type); + json.member("intensity", intensity); + json.member("sated", sated); + json.end_object(); + } + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin) { + JsonObject jo = jsin.get_object(); + type = (add_type)jo.get_int("type_enum"); + intensity = jo.get_int("intensity"); + sated = jo.get_int("sated"); + } }; enum activity_type { @@ -78,8 +122,9 @@ enum activity_type { NUM_ACTIVITIES }; -struct player_activity +class player_activity : public JsonSerializer, public JsonDeserializer { +public: activity_type type; int moves_left; int index; @@ -124,8 +169,10 @@ struct player_activity } } - picojson::value json_save(); // found in gamesave_json.cpp - bool json_load(picojson::value & parsed); + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); void load_legacy(std::stringstream &dump); }; diff --git a/posix_time.cpp b/src/posix_time.cpp similarity index 100% rename from posix_time.cpp rename to src/posix_time.cpp diff --git a/posix_time.h b/src/posix_time.h similarity index 100% rename from posix_time.h rename to src/posix_time.h diff --git a/profession.cpp b/src/profession.cpp similarity index 100% rename from profession.cpp rename to src/profession.cpp diff --git a/profession.h b/src/profession.h similarity index 100% rename from profession.h rename to src/profession.h diff --git a/ranged.cpp b/src/ranged.cpp similarity index 93% rename from ranged.cpp rename to src/ranged.cpp index 8d4ca21c160c2..68dc5f1930875 100644 --- a/ranged.cpp +++ b/src/ranged.cpp @@ -45,7 +45,7 @@ void game::fire(player &p, int tarx, int tary, std::vector &trajectory, else // 5, 12, 21, 32 tmpammo->dispersion = charges * (charges - 4); tmpammo->recoil = tmpammo->dispersion * .8; - tmpammo->ammo_effects.clear(); // Reset effects. + tmpammo->ammo_effects.clear(); // Reset effects. if (charges == 8) { tmpammo->ammo_effects.insert("EXPLOSIVE_BIG"); } else if (charges >= 6) { tmpammo->ammo_effects.insert("EXPLOSIVE"); } @@ -711,11 +711,10 @@ std::vector game::target(int &x, int &y, int lowx, int lowy, int hix, if (is_mouse_enabled()) { mvwprintz(w_target, text_y++, 1, c_white, - _("Mouse - LMB: Target, Wheel: Cycle, RMB: Fire")); + _("Mouse: LMB: Target, Wheel: Cycle, RMB: Fire")); } wrefresh(w_target); - char ch; bool snap_to_target = OPTIONS["SNAP_TO_TARGET"]; do { if (m.sees(u.posx, u.posy, x, y, -1, tart)) @@ -786,13 +785,37 @@ std::vector game::target(int &x, int &y, int lowx, int lowy, int hix, } } //*/ - /* Print to target window, could maybe be moved up and out of the w_terrain drawing section? */ - if (!relevent) { // currently targetting vehicle to refill with fuel - vehicle *veh = m.veh_at(x, y); - if (veh) - mvwprintw(w_target, 1, 1, _("There is a %s"), veh->name.c_str()); - } else - mvwprintw(w_target, 1, 1, _("Range: %d"), rl_dist(u.posx, u.posy, x, y)); + // Print to target window + if (!relevent) { + // currently targetting vehicle to refill with fuel + vehicle *veh = m.veh_at(x, y); + if (veh) { + mvwprintw(w_target, 1, 1, _("There is a %s"), + veh->name.c_str()); + } + } else if (relevent == &u.weapon && relevent->is_gun()) { + // firing a gun + mvwprintw(w_target, 1, 1, _("Range: %d"), + rl_dist(u.posx, u.posy, x, y)); + // get the current weapon mode or mods + std::string mode = ""; + if (u.weapon.mode == "MODE_BURST") { + mode = _("Burst"); + } else { + item* gunmod = u.weapon.active_gunmod(); + if (gunmod != NULL) { + mode = gunmod->type->name; + } + } + if (mode != "") { + mvwprintw(w_target, 1, 14, _("Firing mode: %s"), + mode.c_str()); + } + } else { + // throwing something + mvwprintw(w_target, 1, 1, _("Range: %d"), + rl_dist(u.posx, u.posy, x, y)); + } const int zid = mon_at(x, y); if (zid == -1) { @@ -811,29 +834,45 @@ std::vector game::target(int &x, int &y, int lowx, int lowy, int hix, wrefresh(w_status); refresh(); - mapped_input minput = get_input_from_kyb_mouse(); - bool target_with_mouse = false; - if (minput.evt.type == CATA_INPUT_MOUSE) { - if (minput.evt.get_first_input() == MOUSE_BUTTON_LEFT) { - // Move target to tile clicked - target_with_mouse = true; - tarx = minput.evt.mouse_x - x; - tary = minput.evt.mouse_y - y; - } else if (minput.evt.get_first_input() == MOUSE_BUTTON_RIGHT) { - ch = '.'; // Fire - } else { - ch = 0; // Unsupported + input_context ctxt("TARGET"); + ctxt.register_directions(); + ctxt.register_action("COORDINATE"); + ctxt.register_action("SELECT"); + ctxt.register_action("FIRE"); + ctxt.register_action("NEXT_TARGET"); + ctxt.register_action("PREV_TARGET"); + ctxt.register_action("WAIT"); + ctxt.register_action("CENTER"); + ctxt.register_action("TOGGLE_SNAP_TO_TARGET"); + ctxt.register_action("HELP_KEYBINDINGS"); + ctxt.register_action("QUIT"); + + const std::string& action = ctxt.handle_input(); + + + tarx = 0; tary = 0; + // Our coordinates will either be determined by coordinate input(mouse), + // by a direction key, or by the previous value. + if (action == "SELECT" && ctxt.get_coordinates(g->w_terrain, tarx, tary)) { + if (!OPTIONS["USE_TILES"] && snap_to_target) { + // Snap to target doesn't currently work with tiles. + tarx += x - u.posx; + tary += y - u.posy; } - } else { - ch = convert_to_dialog_key(minput.evt.get_first_input()); - } + tarx -= x; + tary -= y; + - if (!target_with_mouse) { - get_direction(tarx, tary, ch); + } else { + ctxt.get_direction(tarx, tary, action); + if(tarx == -2) { + tarx = 0; + tary = 0; + } } /* More drawing to terrain */ - if (target_with_mouse || (tarx != -2 && tary != -2 && ch != '.')) { // Direction character pressed + if (tarx != 0 || tary != 0) { int mondex = mon_at(x, y), npcdex = npc_at(x, y); if (mondex != -1 && u_see(&(zombie(mondex)))) zombie(mondex).draw(w_terrain, center.x, center.y, false); @@ -853,17 +892,17 @@ std::vector game::target(int &x, int &y, int lowx, int lowy, int hix, y = lowy; else if (y > hiy) y = hiy; - } else if ((ch == '<') && (target != -1)) { + } else if ((action == "PREV_TARGET") && (target != -1)) { target--; if (target == -1) target = t.size() - 1; x = t[target].posx(); y = t[target].posy(); - } else if ((ch == '>') && (target != -1)) { + } else if ((action == "NEXT_TARGET") && (target != -1)) { target++; if (target == t.size()) target = 0; x = t[target].posx(); y = t[target].posy(); - } else if (ch == '.' || ch == 'f' || ch == 'F' || ch == '\n') { + } else if (action == "WAIT" || action == "FIRE") { for (int i = 0; i < t.size(); i++) { if (t[i].posx() == x && t[i].posy() == y) target = i; @@ -871,13 +910,13 @@ std::vector game::target(int &x, int &y, int lowx, int lowy, int hix, if (u.posx == x && u.posy == y) ret.clear(); break; - } else if (ch == '0') { + } else if (action == "CENTER") { x = u.posx; y = u.posy; ret.clear(); - } else if (ch == '*') + } else if (action == "TOGGLE_SNAP_TO_TARGET") snap_to_target = !snap_to_target; - else if (ch == KEY_ESCAPE || ch == 'q') { // return empty vector (cancel) + else if (action == "QUIT") { // return empty vector (cancel) ret.clear(); break; } @@ -1337,6 +1376,18 @@ void ammo_effects(game *g, int x, int y, const std::set &effects) if (effects.count("NAPALM_BIG")) g->explosion(x, y, 72, 0, true); + if (effects.count("MININUKE_MOD")){ + g->explosion(x, y, 200, 0, false); + int junk; + for (int i = -4; i <= 4; i++) { + for (int j = -4; j <= 4; j++) { + if (g->m.sees(x, y, x + i, y + j, 3, junk) && + g->m.move_cost(x + i, y + j) > 0) + g->m.add_field(g, x + i, y + j, fd_nuke_gas, 3); + } + } + } + if (effects.count("ACIDBOMB")) { for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { @@ -1376,7 +1427,7 @@ void ammo_effects(game *g, int x, int y, const std::set &effects) if (effects.count("FLAME")) g->explosion(x, y, 4, 0, true); - + if (effects.count("FLARE")) g->m.add_field(g, x, y, fd_fire, 1); diff --git a/resource.rc b/src/resource.rc similarity index 74% rename from resource.rc rename to src/resource.rc index d708f7d8dde59..f3b8c4cb38414 100644 --- a/resource.rc +++ b/src/resource.rc @@ -1,7 +1,7 @@ #ifndef RESOURCE_RC_INCLUDED #define RESOURCE_RC_INCLUDED -0 ICON "data/cataicon.ico" +0 ICON "../data/cataicon.ico" #endif // RESOURCE_RC_INCLUDED diff --git a/rng.cpp b/src/rng.cpp similarity index 100% rename from rng.cpp rename to src/rng.cpp diff --git a/rng.h b/src/rng.h similarity index 100% rename from rng.h rename to src/rng.h diff --git a/gamesave.cpp b/src/savegame.cpp similarity index 66% rename from gamesave.cpp rename to src/savegame.cpp index 08be45cac6e8e..4d914cfee43a8 100644 --- a/gamesave.cpp +++ b/src/savegame.cpp @@ -27,7 +27,6 @@ #include #include #include "debug.h" -#include "artifactdata.h" #include "weather.h" #include "savegame.h" @@ -37,7 +36,10 @@ * Changes that break backwards compatibility should bump this number, so the game can * load a legacy format loader. */ -const int savegame_version = 11; +const int savegame_version = 12; +const int savegame_minver_game = 11; +//const int savegame_minver_map = 11; +const int savegame_minver_overmap = 12; /* * This is a global set by detected version header in .sav, maps.txt, or overmap. @@ -75,23 +77,25 @@ void game::serialize(std::ofstream & fout) { // Header fout << "# version " << savegame_version << std::endl; - std::map data; + JsonOut json(&fout); + + json.start_object(); // basic game state information. - data["turn"] = pv( (int)turn ); - data["last_target"] = pv( (int)last_target ); - data["run_mode"] = pv( (int)run_mode ); - data["mostseen"] = pv( mostseen ); - data["nextinv"] = pv( (int)nextinv ); - data["next_npc_id"] = pv( next_npc_id ); - data["next_faction_id"] = pv( next_faction_id ); - data["next_mission_id"] = pv( next_mission_id ); - data["nextspawn"] = pv( (int)nextspawn ); + json.member( "turn", (int)turn ); + json.member( "last_target", (int)last_target ); + json.member( "run_mode", (int)run_mode ); + json.member( "mostseen", mostseen ); + json.member( "nextinv", (int)nextinv ); + json.member( "next_npc_id", next_npc_id ); + json.member( "next_faction_id", next_faction_id ); + json.member( "next_mission_id", next_mission_id ); + json.member( "nextspawn", (int)nextspawn ); // current map coordinates - data["levx"] = pv( levx ); - data["levy"] = pv( levy ); - data["levz"] = pv( levz ); - data["om_x"] = pv( cur_om->pos().x ); - data["om_y"] = pv( cur_om->pos().y ); + json.member( "levx", levx ); + json.member( "levy", levy ); + json.member( "levz", levz ); + json.member( "om_x", cur_om->pos().x ); + json.member( "om_y", cur_om->pos().y ); // Next, the scent map. std::stringstream rle_out; @@ -113,26 +117,23 @@ void game::serialize(std::ofstream & fout) { } } rle_out << rle_count; - data["grscent"] = pv ( rle_out.str() ); + json.member( "grscent", rle_out.str() ); // Then each monster - std::vector amdata; - for (int i = 0; i < num_zombies(); i++) { - amdata.push_back( _active_monsters[i].json_save(true) ); - } - data["active_monsters"] = pv( amdata ); + json.member( "active_monsters", _active_monsters ); + json.member( "stair_monsters", coming_to_stairs ); // save killcounts. - std::map killmap; + json.member( "kills" ); + json.start_object(); for (std::map::iterator kill = kills.begin(); kill != kills.end(); ++kill){ - killmap[kill->first] = pv(kill->second); + json.member( kill->first, kill->second ); } - data["kills"] = pv( killmap ); + json.end_object(); - data["player"] = pv( u.json_save(true) ); + json.member( "player", u ); - fout << pv(data).serialize() << std::endl; - //////// + json.end_object(); } /* @@ -168,101 +169,114 @@ void chkversion(std::istream & fin) { /* * Parse an open .sav file. */ -void game::unserialize(std::ifstream & fin) { - if ( fin.peek() == '#' ) { - std::string vline; - getline(fin, vline); - std::string tmphash, tmpver; - int savedver=-1; - std::stringstream vliness(vline); - vliness >> tmphash >> tmpver >> savedver; - if ( tmpver == "version" && savedver != -1 ) { - savegame_loading_version = savedver; - } - } - if (savegame_loading_version != savegame_version) { - if ( unserialize_legacy(fin) == true ) { +void game::unserialize(std::ifstream & fin) +{ + if ( fin.peek() == '#' ) { + std::string vline; + getline(fin, vline); + std::string tmphash, tmpver; + int savedver=-1; + std::stringstream vliness(vline); + vliness >> tmphash >> tmpver >> savedver; + if ( tmpver == "version" && savedver != -1 ) { + savegame_loading_version = savedver; + } + } + if (savegame_loading_version != savegame_version && + savegame_loading_version < savegame_minver_game ) { + if ( unserialize_legacy(fin) == true ) { return; - } else { - popup_nowait(_("Cannot find loader for save data in old version %d, attempting to load as current version %d."),savegame_loading_version, savegame_version); - } - } - // Format version 12. After radical compatibility breaking changes, raise savegame_version, cut below and add to - // unserialize_legacy in savegame_legacy.cpp - std::string linebuf; - std::stringstream linein; - - - int tmpturn, tmpspawn, tmprun, tmptar, comx, comy, tmpinv; - picojson::value pval; - fin >> pval; - std::string jsonerr = picojson::get_last_error(); - if ( ! jsonerr.empty() ) { - debugmsg("Bad save json\n%s", jsonerr.c_str() ); - } - picojson::object &pdata = pval.get(); - - picoint(pdata,"turn",tmpturn); - picoint(pdata,"last_target",tmptar); - picoint(pdata,"run_mode", tmprun); - picoint(pdata,"mostseen", mostseen); - picoint(pdata,"nextinv", tmpinv); - nextinv = (char)tmpinv; - picoint(pdata,"next_npc_id", next_npc_id); - picoint(pdata,"next_faction_id", next_faction_id); - picoint(pdata,"next_mission_id", next_mission_id); - picoint(pdata,"nextspawn",tmpspawn); - picoint(pdata,"levx",levx); - picoint(pdata,"levy",levy); - picoint(pdata,"levz",levz); - picoint(pdata,"om_x",comx); - picoint(pdata,"om_y",comy); - - turn = tmpturn; - nextspawn = tmpspawn; - - cur_om = &overmap_buffer.get(this, comx, comy); - m.load(this, levx, levy, levz); - - run_mode = tmprun; - if (OPTIONS["SAFEMODE"] && run_mode == 0) { - run_mode = 1; - } - autosafemode = OPTIONS["AUTOSAFEMODE"]; - last_target = tmptar; - - linebuf=""; - if ( picostring(pdata,"grscent",linebuf) ) { - linein.clear(); - linein.str(linebuf); - - int stmp; - int count = 0; - for (int i = 0; i < SEEX *MAPSIZE; i++) { - for (int j = 0; j < SEEY * MAPSIZE; j++) { - if (count == 0) { - linein >> stmp >> count; - } - count--; - grscent[i][j] = stmp; + } else { + popup_nowait(_("Cannot find loader for save data in old version %d, attempting to load as current version %d."),savegame_loading_version, savegame_version); + } + } + // Format version 12. After radical compatibility breaking changes, raise savegame_version, cut below and add to + // unserialize_legacy in savegame_legacy.cpp + std::string linebuf; + std::stringstream linein; + + int tmpturn, tmpspawn, tmprun, tmptar, comx, comy, tmpinv; + JsonIn jsin(&fin); + try { + JsonObject data = jsin.get_object(); + + data.read_into("turn",tmpturn); + data.read_into("last_target",tmptar); + data.read_into("run_mode", tmprun); + data.read_into("mostseen", mostseen); + data.read_into("nextinv", tmpinv); + nextinv = (char)tmpinv; + data.read_into("next_npc_id", next_npc_id); + data.read_into("next_faction_id", next_faction_id); + data.read_into("next_mission_id", next_mission_id); + data.read_into("nextspawn",tmpspawn); + data.read_into("levx",levx); + data.read_into("levy",levy); + data.read_into("levz",levz); + data.read_into("om_x",comx); + data.read_into("om_y",comy); + + turn = tmpturn; + nextspawn = tmpspawn; + + cur_om = &overmap_buffer.get(this, comx, comy); + m.load(this, levx, levy, levz); + + run_mode = tmprun; + if (OPTIONS["SAFEMODE"] && run_mode == 0) { + run_mode = 1; + } + autosafemode = OPTIONS["AUTOSAFEMODE"]; + last_target = tmptar; + + linebuf=""; + if ( data.read_into("grscent",linebuf) ) { + linein.clear(); + linein.str(linebuf); + + int stmp; + int count = 0; + for (int i = 0; i < SEEX *MAPSIZE; i++) { + for (int j = 0; j < SEEY * MAPSIZE; j++) { + if (count == 0) { + linein >> stmp >> count; } + count--; + grscent[i][j] = stmp; } } + } - picojson::array * vdata = pgetarray(pdata,"active_monsters"); - clear_zombies(); + JsonArray vdata = data.get_array("active_monsters"); + clear_zombies(); + while (vdata.has_more()) { monster montmp; - for( picojson::array::iterator pit = vdata->begin(); pit != vdata->end(); ++pit) { - montmp.json_load( *pit, &mtypes ); - add_zombie(montmp); - } + vdata.read_into(montmp); + montmp.setkeep(true); + add_zombie(montmp); + } - picojson::object * odata = pgetmap(pdata,"kills"); - for( picojson::object::const_iterator it = odata->begin(); it != odata->end(); ++it) { - kills[it->first] = (int)it->second.get(); - } + vdata = data.get_array("stair_monsters"); + coming_to_stairs.clear(); + while (vdata.has_more()) { + monster stairtmp; + vdata.read_into(stairtmp); + coming_to_stairs.push_back(stairtmp); + } + + JsonObject odata = data.get_object("kills"); + std::set members = odata.get_member_names(); + for (std::set::const_iterator it = members.begin(); + it != members.end(); ++it) { + kills[*it] = odata.get_int(*it); + } - u.json_load( pdata["player"], this); + data.read_into("player", u); + + } catch (std::string jsonerr) { + debugmsg("Bad save json\n%s", jsonerr.c_str() ); + return; + } } ///// weather @@ -278,7 +292,7 @@ void game::load_weather(std::ifstream & fin) { savegame_loading_version = savedver; } } - + while(!fin.eof()) { std::string data; getline(fin, data); @@ -355,19 +369,23 @@ void overmap::unserialize(game * g, std::ifstream & fin, std::string const & plr if (datatype == 'L') { // Load layer data, and switch to layer fin >> z; - int tmp_ter; + std::string tmp_ter; + oter_id tmp_otid(0); if (z >= 0 && z < OVERMAP_LAYERS) { int count = 0; for (int j = 0; j < OMAPY; j++) { for (int i = 0; i < OMAPX; i++) { if (count == 0) { fin >> tmp_ter >> count; - if (tmp_ter < 0 || tmp_ter > num_ter_types) { - debugmsg("Loaded bad ter! %s; ter %d", terfilename.c_str(), tmp_ter); + if (otermap.find(tmp_ter) == otermap.end()) { + debugmsg("Loaded bad ter! %s; ter %s", terfilename.c_str(), tmp_ter.c_str()); + tmp_otid = 0; + } else { + tmp_otid = tmp_ter; } } count--; - layer[z].terrain[i][j] = oter_id(tmp_ter); + layer[z].terrain[i][j] = tmp_otid; //otermap[tmp_ter].loadid; layer[z].visible[i][j] = false; } } @@ -396,6 +414,11 @@ void overmap::unserialize(game * g, std::ifstream & fin, std::string const & plr getline(fin, tmp.message); // Chomp endl getline(fin, tmp.message); radios.push_back(tmp); + } else if ( datatype == 'v' ) { + om_vehicle v; + int id; + fin >> id >> v.name >> v.x >> v.y; + vehicles[id]=v; } else if (datatype == 'n') { // NPC // When we start loading a new NPC, check to see if we've accumulated items for // assignment to an NPC. @@ -535,16 +558,16 @@ void overmap::save() for (int z = 0; z < OVERMAP_LAYERS; ++z) { fout << "L " << z << std::endl; int count = 0; - int last_tertype = -1; + oter_id last_tertype(-1); for (int j = 0; j < OMAPY; j++) { for (int i = 0; i < OMAPX; i++) { - int t = int(layer[z].terrain[i][j]); + oter_id t = layer[z].terrain[i][j]; if (t != last_tertype) { if (count) { fout << count << " "; } last_tertype = t; - fout << t << " "; + fout << std::string(t) << " "; count = 1; } else { count++; @@ -567,6 +590,15 @@ void overmap::save() fout << "T " << radios[i].x << " " << radios[i].y << " " << radios[i].strength << " " << radios[i].type << " " << std::endl << radios[i].message << std::endl; + // store tracked vehicle locations and names + for (std::map::const_iterator it = vehicles.begin(); + it != vehicles.end(); it++) + { + int id = it->first; + om_vehicle v = it->second; + fout << "v " << id << " " << v.name << " " << v.x << " " << v.y << std::endl; + } + //saving the npcs for (int i = 0; i < npcs.size(); i++) fout << "n " << npcs[i]->save_info() << std::endl; @@ -583,62 +615,76 @@ void overmap::save() void game::unserialize_master(std::ifstream &fin) { savegame_loading_version = 0; chkversion(fin); - if (savegame_loading_version != savegame_version) { + if (savegame_loading_version != savegame_version && savegame_loading_version < 11) { if ( unserialize_master_legacy(fin) == true ) { return; } else { popup_nowait(_("Cannot find loader for save data in old version %d, attempting to load as current version %d."),savegame_loading_version, savegame_version); } } - picojson::value pval; - fin >> pval; - std::string jsonerr = picojson::get_last_error(); - if ( ! jsonerr.empty() ) { - debugmsg("Bad save json\n%s", jsonerr.c_str() ); - } - picojson::object &data = pval.get(); - picoint(data, "next_mission_id", next_mission_id); - picoint(data, "next_faction_id", next_faction_id); - picoint(data, "next_npc_id", next_npc_id); - - picojson::array * vdata = pgetarray(data,"active_missions"); - if(vdata != NULL) { - for( picojson::array::iterator pit = vdata->begin(); pit != vdata->end(); ++pit) { - mission tmp; - tmp.json_load( *pit, this ); - active_missions.push_back(tmp); - } - } - - vdata = pgetarray(data,"factions"); - if(vdata != NULL) { - for( picojson::array::iterator pit = vdata->begin(); pit != vdata->end(); ++pit) { - faction tmp; - tmp.json_load( *pit, this ); - factions.push_back(tmp); + try { + // single-pass parsing example + JsonIn jsin(&fin); + jsin.start_object(); + while (!jsin.end_object()) { + std::string name = jsin.get_member_name(); + if (name == "next_mission_id") { + next_mission_id = jsin.get_int(); + } else if (name == "next_faction_id") { + next_faction_id = jsin.get_int(); + } else if (name == "next_npc_id") { + next_npc_id = jsin.get_int(); + } else if (name == "active_missions") { + jsin.start_array(); + while (!jsin.end_array()) { + mission mis; + mis.deserialize(jsin); + active_missions.push_back(mis); + } + } else if (name == "factions") { + jsin.start_array(); + while (!jsin.end_array()) { + faction fac; + fac.deserialize(jsin); + factions.push_back(fac); + } + } else { + // silently ignore anything else + jsin.skip_value(); + } } + } catch (std::string e) { + debugmsg("error loading master.gsav: %s", e.c_str()); } - } void game::serialize_master(std::ofstream &fout) { fout << "# version " << savegame_version << std::endl; - std::map data; - data["next_mission_id"] = pv ( next_mission_id ); - data["next_faction_id"] = pv ( next_faction_id ); - data["next_npc_id"] = pv ( next_npc_id ); - - std::vector vdata; - for (int i = 0; i < active_missions.size(); i++) { - vdata.push_back( pv( active_missions[i].json_save() ) ); - } - data["active_missions"] = pv( vdata ); - vdata.clear(); + try { + JsonOut json(&fout); + json.start_object(); + + json.member("next_mission_id", next_mission_id); + json.member("next_faction_id", next_faction_id); + json.member("next_npc_id", next_npc_id); + + json.member("active_missions"); + json.start_array(); + for (int i = 0; i < active_missions.size(); ++i) { + active_missions[i].serialize(json); + } + json.end_array(); + + json.member("factions"); + json.start_array(); + for (int i = 0; i < factions.size(); ++i) { + factions[i].serialize(json); + } + json.end_array(); - for (int i = 0; i < factions.size(); i++) { - vdata.push_back( pv( factions[i].json_save() ) ); + json.end_object(); + } catch (std::string e) { + debugmsg("error saving to master.gsav: %s", e.c_str()); } - data["factions"] = pv( vdata ); - vdata.clear(); - fout << pv( data ).serialize() << std::endl; } + diff --git a/savegame.h b/src/savegame.h similarity index 100% rename from savegame.h rename to src/savegame.h diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp new file mode 100644 index 0000000000000..8e88af5e04584 --- /dev/null +++ b/src/savegame_json.cpp @@ -0,0 +1,1294 @@ +#include "player.h" +#include "npc.h" +#include "profession.h" +#include "bionics.h" +#include "mission.h" +#include "game.h" +#include "disease.h" +#include "addiction.h" +#include "keypress.h" +#include "moraledata.h" +#include "inventory.h" +#include "artifact.h" +#include "options.h" +#include +#include +#include +#include "weather.h" +#include "item.h" +#include "material.h" +#include "translations.h" +#include "name.h" +#include "cursesdef.h" +#include "catacharset.h" +#include "disease.h" +#include "crafting.h" +#include "get_version.h" +#include "monstergenerator.h" + +#include "savegame.h" +#include "tile_id_data.h" // for monster::json_save +#include + +#include "json.h" + +#include "debug.h" +#define dbg(x) dout((DebugLevel)(x),D_GAME) << __FILE__ << ":" << __LINE__ << ": " + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// player.h + +void player_activity::serialize(JsonOut &json) const +{ + json.start_object(); + json.member( "type", int(type) ); + json.member( "moves_left", moves_left ); + json.member( "index", int(index) ); + json.member( "invlet", int(invlet) ); + json.member( "name", name ); + json.member( "placement", placement ); + json.member( "values", values ); + json.member( "str_values", str_values ); + json.end_object(); +} + +void player_activity::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + int tmptype; + int tmpinv; + if ( !data.read_into( "type", tmptype ) || type >= NUM_ACTIVITIES ) { + debugmsg( "Bad activity data:\n%s", data.str().c_str() ); + } + type = activity_type(tmptype); + data.read_into( "moves_left", moves_left ); + data.read_into( "index", index ); + data.read_into( "invlet", tmpinv ); + invlet = (char)tmpinv; + data.read_into( "name", name ); + data.read_into( "placement", placement ); + values = data.get_int_array("values"); + str_values = data.get_string_array("str_values"); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// skill.h +void SkillLevel::serialize(JsonOut &json) const +{ + json.start_object(); + json.member("level", level() ); + json.member("exercise", exercise(true) ); + json.member("istraining", isTraining() ); + json.member("lastpracticed", int ( lastPracticed() ) ); + json.end_object(); +} + +void SkillLevel::deserialize(JsonIn & jsin) +{ + JsonObject data = jsin.get_object(); + int lastpractice=0; + data.read_into( "level", _level ); + data.read_into( "exercise", _exercise ); + data.read_into( "istraining", _isTraining ); + data.read_into( "lastpracticed", lastpractice ); + if(lastpractice == 0) { + _lastPracticed = HOURS(OPTIONS["INITIAL_TIME"]); + } else { + _lastPracticed = lastpractice; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// player.h, player + npc +/* + * Gather variables for saving. These variables are common to both the player and NPCs (which is a kind of player). + * Do not overload; NPC or player specific stuff should go to player::json_save or npc::json_save. + */ + +void player::json_load_common_variables(JsonObject & data) +{ + JsonArray parray; + +// todo/maybe: +// std::map strmap_common_variables; +// void player::init_strmap_common_variables() { +// strmap_common_variables["posx"]=&posx; // + all this below and in save_common_variables +// } +// load: +// for(std::map::iterator it... +// data.read_into(it->first,it->second); +// save: +// for(... +// json.member( it->first, it->second ); + if(!data.read_into("posx",posx) ) { // uh-oh. + debugmsg("BAD PLAYER/NPC JSON: no 'posx'?"); + } + data.read_into("posy",posy); + data.read_into("str_cur",str_cur); data.read_into("str_max",str_max); + data.read_into("dex_cur",dex_cur); data.read_into("dex_max",dex_max); + data.read_into("int_cur",int_cur); data.read_into("int_max",int_max); + data.read_into("per_cur",per_cur); data.read_into("per_max",per_max); + data.read_into("hunger",hunger); data.read_into("thirst",thirst); + data.read_into("fatigue",fatigue); data.read_into("stim",stim); + data.read_into("pain",pain); data.read_into("pkill",pkill); + data.read_into("radiation",radiation); + data.read_into("scent",scent); + data.read_into("moves",moves); + data.read_into("dodges_left",dodges_left); + data.read_into("underwater",underwater); + data.read_into("oxygen",oxygen); + data.read_into("male",male); + data.read_into("cash",cash); + data.read_into("recoil",recoil); + + parray = data.get_array("hp_cur"); + if ( parray.size() == num_hp_parts ) { + for(int i=0; i < num_hp_parts; i++) { + hp_cur[i] = parray.get_int(i); + } + } else { + debugmsg("Error, incompatible hp_cur in save file '%s'",parray.str().c_str()); + } + + parray = data.get_array("hp_max"); + if ( parray.size() == num_hp_parts ) { + for(int i=0; i < num_hp_parts; i++) { + hp_max[i] = parray.get_int(i); + } + } else { + debugmsg("Error, incompatible hp_max in save file '%s'",parray.str().c_str()); + } + + data.read_into("power_level",power_level); + data.read_into("max_power_level",max_power_level); + data.read_into("traits",my_traits); + + if (data.has_object("skills")) { + JsonObject pmap = data.get_object("skills"); + for (std::vector::iterator aSkill = Skill::skills.begin(); aSkill != Skill::skills.end(); ++aSkill) { + if ( pmap.has_object( (*aSkill)->ident() ) ) { + pmap.read_into( (*aSkill)->ident(), skillLevel(*aSkill) ); + } else { + debugmsg("Load (%s) Missing skill %s","",(*aSkill)->ident().c_str() ); + } + } + } else { + debugmsg("Skills[] no bueno"); + } + + data.read_into("ma_styles",ma_styles); + data.read_into("illness",illness); + data.read_into("addictions",addictions); + data.read_into("my_bionics",my_bionics); +} + +/* + * Variables common to player and npc + */ +void player::json_save_common_variables(JsonOut &json) const +{ + // assumes already in player object + // positional data + json.member( "posx", posx ); json.member( "posy", posy ); + + // attributes, current / max levels + json.member( "str_cur", str_cur ); json.member( "str_max", str_max ); + json.member( "dex_cur", dex_cur ); json.member( "dex_max", dex_max ); + json.member( "int_cur", int_cur ); json.member( "int_max", int_max ); + json.member( "per_cur", per_cur ); json.member( "per_max", per_max ); + + // om-noms or lack thereof + json.member( "hunger", hunger ); json.member( "thirst", thirst ); + // energy + json.member( "fatigue", fatigue ); json.member( "stim", stim ); + // pain + json.member( "pain", pain ); json.member( "pkill", pkill ); + // misc levels + json.member( "radiation", radiation ); + json.member( "scent", int(scent) ); + + // initiative type stuff + json.member( "moves", moves ); + json.member( "dodges_left", dodges_left ); + + // breathing + json.member( "underwater", underwater ); + json.member( "oxygen", oxygen ); + + // gender + json.member( "male", male ); + + json.member( "cash", cash ); + json.member( "recoil", int(recoil) ); + + // potential incompatibility with future expansion + // todo: consider ["parts"]["head"]["hp_cur"] instead of ["hp_cur"][head_enum_value] + json.member( "hp_cur", std::vector( hp_cur, hp_cur + num_hp_parts ) ); + json.member( "hp_max", std::vector( hp_max, hp_max + num_hp_parts ) ); + + // npc; unimplemented + json.member( "power_level", power_level ); + json.member( "max_power_level", max_power_level ); + + // traits: permanent 'mutations' more or less + json.member( "traits", my_traits ); + + // skills + json.member( "skills" ); + json.start_object(); + for (std::vector::iterator aSkill = Skill::skills.begin(); aSkill != Skill::skills.end(); ++aSkill) { + SkillLevel sk = get_skill_level(*aSkill); + json.member((*aSkill)->ident(), sk); + } + json.end_object(); + + // martial arts + /*for (int i = 0; i < ma_styles.size(); i++) { + ptmpvect.push_back( pv( ma_styles[i] ) ); + }*/ + json.member( "ma_styles", ma_styles ); + + // disease + json.member( "illness", illness ); + + // "Looks like I picked the wrong week to quit smoking." - Steve McCroskey + json.member( "addictions", addictions ); + + // "Fracking Toasters" - Saul Tigh, toaster + json.member( "my_bionics", my_bionics ); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// player.h, player +/* + * Prepare a json object for player, including player specific data, and data common to + players and npcs ( which json_save_actor_data() handles ). + */ +void player::serialize(JsonOut &json, bool save_contents) const +{ + json.start_object(); + + json_save_common_variables( json ); + + // player-specific specifics + if ( prof != NULL ) { + json.member( "profession", prof->ident() ); + } + + // someday, npcs may drive + json.member( "driving_recoil", int(driving_recoil) ); + json.member( "in_vehicle", in_vehicle ); + json.member( "controlling_vehicle", controlling_vehicle ); + + // shopping carts, furniture etc + json.member( "grab_point", grab_point ); + json.member( "grab_type", obj_type_name[ (int)grab_type ] ); + + // misc player specific stuff + json.member( "blocks_left", blocks_left ); + json.member( "focus_pool", focus_pool ); + json.member( "style_selected", style_selected ); + + // possibly related to illness[] ? + json.member( "health", health ); + + // crafting etc + json.member( "activity", activity ); + json.member( "backlog", activity ); + + // mutations; just like traits but can be removed. + json.member( "mutations", my_mutations ); + + // "The cold wakes you up." + json.member( "temp_cur", std::vector( temp_cur, temp_cur + num_bp ) ); + json.member( "temp_conv", std::vector( temp_conv, temp_conv + num_bp ) ); + json.member( "frostbite_timer", std::vector( frostbite_timer, frostbite_timer + num_bp ) ); + + // npc: unimplemented, potentially useful + json.member( "learned_recipes" ); + json.start_array(); + for (std::map::const_iterator iter = learned_recipes.begin(); iter != learned_recipes.end(); ++iter) { + json.write( iter->first ); + } + json.end_array(); + + // :( + json.member( "morale", morale ); + + // mission stuff + json.member("active_mission", active_mission ); + + json.member( "active_missions", active_missions ); + json.member( "completed_missions", completed_missions ); + json.member( "failed_missions", failed_missions ); + + json.member( "player_stats", get_stats() ); + + if ( save_contents ) { + json.member( "worn", worn ); // also saves contents + + json.member("inv"); + inv.json_save_items(json); + + json.member("invcache"); + inv.json_save_invcache(json); + + if (!weapon.is_null()) { + json.member( "weapon", weapon ); // also saves contents + } +//FIXME: seperate function, better still another file + /* for(int i = 0; i < memorial_log.size(); i++) { + ptmpvect.push_back(pv(memorial_log[i])); + } + json.member("memorial",ptmpvect); +*/ + } + + json.end_object(); +} + +/* + * load player from ginormous json blob + */ +void player::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + JsonArray parray; + + json_load_common_variables( data ); + + std::string prof_ident="(null)"; + if ( data.read_into("profession",prof_ident) && profession::exists(prof_ident) ) { + prof = profession::prof(prof_ident); + } else { + debugmsg("Tried to use non-existent profession '%s'", prof_ident.c_str()); + } + + data.read_into("activity",activity); + data.read_into("backlog",backlog); + + data.read_into("driving_recoil",driving_recoil); + data.read_into("in_vehicle",in_vehicle); + data.read_into("controlling_vehicle",controlling_vehicle); + + data.read_into("grab_point", grab_point); + std::string grab_typestr="OBJECT_NONE"; + if( grab_point.x != 0 || grab_point.y != 0 ) { + grab_typestr = "OBJECT_VEHICLE"; + data.read_into( "grab_type", grab_typestr); + } + + if ( obj_type_id.find(grab_typestr) != obj_type_id.end() ) { + grab_type = (object_type)obj_type_id[grab_typestr]; + } + + data.read_into( "blocks_left", blocks_left); + data.read_into( "focus_pool", focus_pool); + data.read_into( "style_selected", style_selected ); + + data.read_into( "health", health ); + + data.read_into( "mutations", my_mutations ); + + set_highest_cat_level(); + // testme drench_mut_calc(); + + parray = data.get_array("temp_cur"); + if ( parray.size() == num_bp ) { + for(int i=0; i < num_bp; i++) { + temp_cur[i]=parray.get_int(i); + } + } else { + debugmsg("Error, incompatible temp_cur in save file %s",parray.str().c_str()); + } + + parray = data.get_array("temp_conv"); + if ( parray.size() == num_bp ) { + for(int i=0; i < num_bp; i++) { + temp_conv[i]=parray.get_int(i); + } + } else { + debugmsg("Error, incompatible temp_conv in save file %s",parray.str().c_str()); + } + + parray = data.get_array("frostbite_timer"); + if ( parray.size() == num_bp ) { + for(int i=0; i < num_bp; i++) { + frostbite_timer[i]=parray.get_int(i); + } + } else { + debugmsg("Error, incompatible frostbite_timer in save file %s",parray.str().c_str()); + } + + parray = data.get_array("learned_recipes"); + if ( !parray.empty() ) { + learned_recipes.clear(); + std::string pstr=""; + while ( parray.has_more() ) { + if ( parray.read_into(pstr) ) { + learned_recipes[ pstr ] = recipe_by_name( pstr ); + } + } + } + + data.read_into("morale", morale); + + data.read_into( "active_mission", active_mission ); + + data.read_into( "active_missions", active_missions ); + data.read_into( "failed_missions", failed_missions ); + data.read_into( "completed_missions", completed_missions ); + + stats & pstats = *lifetime_stats(); + data.read_into("player_stats",pstats); + + inv.clear(); + if ( data.has_member("inv") ) { + JsonIn* jip = data.get_raw("inv"); + inv.json_load_items( *jip ); + } + + worn.clear(); + data.read_into("worn", worn); + + weapon.contents.clear(); + data.read_into("weapon", weapon); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// npc.h + +void npc_combat_rules::serialize(JsonOut &json) const +{ + json.start_object(); + json.member("engagement", (int)engagement ); + json.member("use_guns", use_guns ); + json.member("use_grenades", use_grenades ); + json.member("use_silent", use_silent ); + //todo json.member("guard_pos", guard_pos ); + json.end_object(); +} + +void npc_combat_rules::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + int tmpeng; + data.read_into("engagement", tmpeng); + engagement = (combat_engagement)tmpeng; + data.read_into( "use_guns", use_guns); + data.read_into( "use_grenades", use_grenades); + data.read_into( "use_silent", use_silent); +} + +void npc_chatbin::serialize(JsonOut &json) const +{ + json.start_object(); + json.member( "first_topic", (int)first_topic ); + json.member( "mission_selected", mission_selected ); + json.member( "tempvalue", tempvalue ); //No clue what this value does, but it is used all over the place. So it is NOT temp. + if ( skill ) { + json.member("skill", skill->ident() ); + } + json.member( "missions", missions ); + json.member( "missions_assigned", missions_assigned ); + json.end_object(); +} + +void npc_chatbin::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + int tmptopic; + std::string skill_ident; + + data.read_into("first_topic", tmptopic); + first_topic = talk_topic(tmptopic); + + if ( data.read_into("skill",skill_ident) ) { + skill = Skill::skill(skill_ident); + } + + data.read_into("tempvalue", tempvalue); + data.read_into("mission_selected", mission_selected); + data.read_into( "missions", missions ); + data.read_into( "missions_assigned", missions_assigned ); +} + +void npc_personality::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + int tmpagg, tmpbrav, tmpcol, tmpalt; + if ( data.read_into("aggression", tmpagg) && + data.read_into("bravery", tmpbrav) && + data.read_into("collector", tmpcol) && + data.read_into("altruism", tmpalt) ) { + aggression=(signed char)tmpagg; + bravery=(signed char)tmpbrav; + collector=(signed char)tmpcol; + altruism=(signed char)tmpalt; + } else { + debugmsg("npc_personality: bad data"); + } +} + +void npc_personality::serialize(JsonOut &json) const +{ + json.start_object(); + json.member( "aggression", (int)aggression ); + json.member( "bravery", (int)bravery ); + json.member( "collector", (int)collector ); + json.member( "altruism", (int)altruism ); + json.end_object(); +}; + +void npc_opinion::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + data.read_into("trust",trust); + data.read_into("fear",fear); + data.read_into("value",value); + data.read_into("anger",anger); + data.read_into("owed",owed); + data.read_into("favors",favors); +} + +void npc_opinion::serialize(JsonOut &json) const +{ + json.start_object(); + json.member( "trust", trust ); + json.member( "fear", fear ); + json.member( "value", value ); + json.member( "anger", anger ); + json.member( "owed", owed ); + json.member( "favors", favors ); + json.end_object(); +} + +void npc_favor::deserialize(JsonIn &jsin) +{ + JsonObject jo = jsin.get_object(); + type = npc_favor_type(jo.get_int("type")); + jo.read_into("value", value); + jo.read_into("itype_id", item_id); + skill = NULL; + if (jo.has_int("skill_id")) { + skill = Skill::skill(jo.get_int("skill_id")); + } else if (jo.has_string("skill_id")) { + skill = Skill::skill(jo.get_string("skill_id")); + } +} + +void npc_favor::serialize(JsonOut &json) const +{ + json.start_object(); + json.member("type", (int)type); + json.member("value", value); + json.member("itype_id", (std::string)item_id); + if (skill != NULL) { + json.member("skill_id", skill->ident()); + } + json.end_object(); +} + +/* + * load npc + */ +void npc::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + + json_load_common_variables(data); + + int misstmp, classtmp, flagstmp, atttmp, tmpid; + + data.read_into("id",tmpid); setID(tmpid); + data.read_into("name",name); + data.read_into("marked_for_death", marked_for_death); + data.read_into("dead", dead); + if ( data.read_into( "myclass", classtmp) ) { + myclass = npc_class( classtmp ); + } + + data.read_into("personality", personality); + + data.read_into("wandx",wandx); + data.read_into("wandy",wandy); + data.read_into("wandf",wandf); + data.read_into("omx",omx); + data.read_into("omy",omy); + data.read_into("omz",omz); + + data.read_into("mapx",mapx); + data.read_into("mapy",mapy); + + data.read_into("plx",plx); + data.read_into("ply",ply); + + data.read_into("goalx",goalx); + data.read_into("goaly",goaly); + data.read_into("goalz",goalz); + + if ( data.read_into("mission",misstmp) ) { + mission = npc_mission( misstmp ); + } + + if ( data.read_into( "flags", flagstmp) ) { + flags = flagstmp; + } + if ( data.read_into( "attitude", atttmp) ) { + attitude = npc_attitude(atttmp); + } + + inv.clear(); + if ( data.has_member("inv") ) { + JsonIn *invin = data.get_raw("inv"); + inv.json_load_items( *invin ); + } + + worn.clear(); + data.read_into("worn",worn); + + weapon.contents.clear(); + data.read_into("weapon",weapon); + + data.read_into("op_of_u",op_of_u); + data.read_into("chatbin",chatbin); + data.read_into("combat_rules",combat_rules); +} + +/* + * save npc + */ +void npc::serialize(JsonOut &json, bool save_contents) const +{ + json.start_object(); + + json_save_common_variables( json ); + + json.member( "name", name ); + json.member( "id", getID() ); + json.member( "marked_for_death", marked_for_death ); + json.member( "dead", dead ); + json.member( "patience", patience ); + json.member( "myclass", (int)myclass ); + + json.member( "personality", personality ); + json.member( "wandx", wandx ); + json.member( "wandy", wandy ); + json.member( "wandf", wandf ); + json.member( "omx", omx ); + json.member( "omy", omy ); + json.member( "omz", omz ); + + json.member( "mapx", mapx ); + json.member( "mapy", mapy ); + json.member( "plx", plx ); + json.member( "ply", ply ); + json.member( "goalx", goalx ); + json.member( "goaly", goaly ); + json.member( "goalz", goalz ); + + json.member( "mission", mission ); // todo: stringid + json.member( "flags", flags ); + if ( my_fac != NULL ) { // set in constructor + json.member( "my_fac", my_fac->id ); + } + json.member( "attitude", (int)attitude ); + json.member("op_of_u", op_of_u); + json.member("chatbin", chatbin); + json.member("combat_rules", combat_rules); + + if ( save_contents ) { + json.member( "worn", worn ); // also saves contents + + json.member("inv"); + inv.json_save_items(json); + + if (!weapon.is_null()) { + json.member( "weapon", weapon ); // also saves contents + } + } + + json.end_object(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// inventory.h +/* + * Save invlet cache + */ +void inventory::json_save_invcache(JsonOut &json) const +{ + json.start_array(); + for( std::map >::const_iterator invlet_id = invlet_cache.begin(); invlet_id != invlet_cache.end(); ++invlet_id ) { + json.start_object(); + json.member( invlet_id->first ); + json.start_array(); + for( std::vector::const_iterator sym = invlet_id->second.begin(); + sym != invlet_id->second.end(); ++sym ) { + json.write( int(*sym) ); + } + json.end_array(); + json.end_object(); + } + json.end_array(); +} + +/* + * Invlet cache: player specific, thus not wrapped in inventory::json_load/save + */ +void inventory::json_load_invcache(JsonIn &jsin) +{ + try { + JsonArray ja = jsin.get_array(); + while ( ja.has_more() ) { + JsonObject jo = ja.next_object(); + std::set members = jo.get_member_names(); + for (std::set::iterator it = members.begin(); + it != members.end(); ++it) { + std::vector vect; + JsonArray pvect = jo.get_array(*it); + while ( pvect.has_more() ) { + vect.push_back( pvect.next_int() ); + } + invlet_cache[*it] = vect; + } + } + } catch (std::string jsonerr) { + debugmsg("bad invcache json:\n%s", jsonerr.c_str() ); + } +} + +/* + * save all items. Just this->items, invlet cache saved seperately + */ +void inventory::json_save_items(JsonOut &json) const +{ + json.start_array(); + for (invstack::const_iterator iter = items.begin(); iter != items.end(); ++iter) { + for (std::list::const_iterator stack_iter = iter->begin(); + stack_iter != iter->end(); + ++stack_iter) + { + stack_iter->serialize(json, true); + } + } + json.end_array(); +} + + +void inventory::json_load_items(JsonIn &jsin) +{ + try { + JsonArray ja = jsin.get_array(); + while ( ja.has_more() ) { + JsonObject jo = ja.next_object(); + push_back( item( jo ) ); + } + } catch (std::string jsonerr) { + debugmsg("bad inventory json:\n%s", jsonerr.c_str() ); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// monster.h + +void monster::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + + int iidtmp; + std::string sidtmp; + // load->str->int + if ( ! data.read_into("typeid", sidtmp) ) { + // or load->int->str->possibly_shifted_int + data.read_into("typeid", iidtmp); + sidtmp = legacy_mon_id[ iidtmp ]; + } + type = GetMType(sidtmp); + + data.read_into("posx", _posx); + data.read_into("posy", _posy); + data.read_into("wandx", wandx); + data.read_into("wandy", wandy); + data.read_into("wandf", wandf); + data.read_into("moves", moves); + data.read_into("speed", speed); + data.read_into("hp", hp); + data.read_into("sp_timeout", sp_timeout); + data.read_into("friendly", friendly); + data.read_into("faction_id", faction_id); + data.read_into("mission_id", mission_id); + data.read_into("no_extra_death_drops", no_extra_death_drops); + data.read_into("dead", dead); + data.read_into("anger", anger); + data.read_into("morale", morale); + data.read_into("hallucination", hallucination); + data.read_into("onstairs", onstairs); + data.read_into("stairscount", staircount); // really? + + data.read_into("plans", plans); + + data.read_into("inv", inv); +} + +/* + * Save, json ed; serialization that won't break as easily. In theory. + */ +void monster::serialize(JsonOut &json, bool save_contents) const +{ + json.start_object(); + + json.member( "typeid", type->id ); + json.member("posx",_posx); + json.member("posy",_posy); + json.member("wandx",wandx); + json.member("wandy",wandy); + json.member("wandf",wandf); + json.member("moves",moves); + json.member("speed",speed); + json.member("hp",hp); + json.member("sp_timeout",sp_timeout); + json.member("friendly",friendly); + json.member("faction_id",faction_id); + json.member("mission_id",mission_id); + json.member("no_extra_death_drops", no_extra_death_drops ); + json.member("dead",dead); + json.member("anger",anger); + json.member("morale",morale); + json.member("hallucination",hallucination); + json.member("onstairs",onstairs); + json.member("stairscount",staircount); // really... + json.member("plans", plans); + + if ( save_contents ) { + json.member("inv"); + json.start_array(); + for(int i=0;iname; + } + + data.read_into( "invlet", lettmp ); + invlet = char(lettmp); + + data.read_into( "damage", damtmp ); + damage = damtmp; // todo: check why this is done after make(), using a tmp variable + data.read_into( "active", active ); + + + data.read_into( "curammo", ammotmp ); + if ( ammotmp != "null" ) { + curammo = dynamic_cast(itypes[ammotmp]); + } else { + curammo = NULL; + } + + data.read_into("item_tags", item_tags); + + JsonObject pvars = data.get_object("item_vars"); + std::set members = pvars.get_member_names(); + for ( std::set::iterator pvarsit = members.begin(); + pvarsit != members.end(); ++pvarsit ) { + if ( pvars.has_string( *pvarsit ) ) { + item_vars[ *pvarsit ] = pvars.get_string( *pvarsit ); + } + } + + int tmplum=0; + if ( data.read_into("light",tmplum) ) { + + light=nolight; + int tmpwidth=0; + int tmpdir=0; + + data.read_into("light_width",tmpwidth); + data.read_into("light_dir",tmpdir); + light.luminance = tmplum; + light.width = (short)tmpwidth; + light.direction = (short)tmpdir; + } + + data.read_into("contents", contents); +} + +void item::serialize(JsonOut &json, bool save_contents) const +{ + json.start_object(); + + ///// + if (type == NULL) { + debugmsg("Tried to save an item with NULL type!"); + } + itype_id ammotmp = "null"; + + /* TODO: This causes a segfault sometimes, even though we check to make sure + * curammo isn't NULL. The crashes seem to occur most frequently when saving an + * NPC, or when saving map data containing an item an NPC has dropped. + */ + if (curammo != NULL) { + ammotmp = curammo->id; + } + if( std::find(unreal_itype_ids.begin(), unreal_itype_ids.end(), + ammotmp) != unreal_itype_ids.end() && + std::find(artifact_itype_ids.begin(), artifact_itype_ids.end(), + ammotmp) != artifact_itype_ids.end() + ) { + ammotmp = "null"; //Saves us from some bugs, apparently? + } + + ///// + json.member( "invlet", int(invlet) ); + json.member( "typeid", typeId() ); + json.member( "bday", bday ); + + if ( charges != -1 ) json.member( "charges", int(charges) ); + if ( damage != 0 ) json.member( "damage", int(damage) ); + if ( burnt != 0 ) json.member( "burnt", burnt ); + if ( poison != 0 ) json.member( "poison", poison ); + if ( ammotmp != "null" ) json.member( "curammo", ammotmp ); + if ( mode != "NULL" ) json.member( "mode", mode ); + if ( active == true ) json.member( "active", true ); + if ( corpse != NULL ) json.member( "corpse", corpse->id ); + + if ( owned != -1 ) json.member( "owned", owned ); + if ( player_id != -1 ) json.member( "player_id", player_id ); + if ( mission_id != -1 ) json.member( "mission_id", mission_id ); + + if ( ! item_tags.empty() ) { + json.member( "item_tags", item_tags ); + } + + if ( ! item_vars.empty() ) { + json.member("item_vars"); + json.start_object(); + for (std::map::const_iterator it = item_vars.begin(); + it != item_vars.end(); ++it) { + json.member( it->first, it->second ); + } + json.end_object(); + } + + if ( name != type->name ) { + json.member( "name", name ); + } + + if ( light.luminance != 0 ) { + json.member( "light", int(light.luminance) ); + if ( light.width != 0 ) { + json.member( "light_width", int(light.width) ); + json.member( "light_dir", int(light.direction) ); + } + } + + if ( save_contents && contents.size() > 0 ) { + json.member("contents"); + json.start_array(); + for (int k = 0; k < contents.size(); k++) { + contents[k].serialize(json, false); // no matryoshka dolls + } + json.end_array(); + } + + json.end_object(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///// vehicle.h + +/* + * vehicle_part + */ +void vehicle_part::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + int intpid; + std::string pid; + if ( data.read_into("id_enum", intpid) && intpid < 74 ) { + pid = legacy_vpart_id[intpid]; + } else { + data.read_into("id",pid); + } + // if we don't know what type of part it is, it'll cause problems later. + if (vehicle_part_types.find(pid) == vehicle_part_types.end()) { + if (pid == "wheel_underbody") { + pid = "wheel_wide"; + } else { + throw (std::string)"bad vehicle part, id: %s" + pid; + } + } + id = pid; + data.read_into("mount_dx", mount_dx); + data.read_into("mount_dy", mount_dy); + data.read_into("hp", hp ); + data.read_into("amount", amount ); + data.read_into("blood", blood ); + data.read_into("bigness", bigness ); + data.read_into( "flags", flags ); + data.read_into( "passenger_id", passenger_id ); + data.read_into("items", items); +} + +void vehicle_part::serialize(JsonOut &json) const +{ + json.start_object(); + json.member("id", id); + json.member("mount_dx", mount_dx); + json.member("mount_dy", mount_dy); + json.member("hp", hp); + json.member("amount", amount); + json.member("blood", blood); + json.member("bigness", bigness); + json.member("flags", flags); + json.member("passenger_id", passenger_id); + json.member("items", items); + json.end_object(); +} + +/* + * Load vehicle from a json blob that might just exceed player in size. + */ +void vehicle::deserialize(JsonIn &jsin) +{ + JsonObject data = jsin.get_object(); + + int fdir, mdir; + + data.read_into("type", type); + data.read_into("posx", posx); + data.read_into("posy", posy); + data.read_into("levx", levx); + data.read_into("levy", levy); + data.read_into("om_id", om_id); + data.read_into("faceDir", fdir); + data.read_into("moveDir", mdir); + data.read_into("turn_dir", turn_dir); + data.read_into("velocity", velocity); + data.read_into("cruise_velocity", cruise_velocity); + data.read_into("cruise_on", cruise_on); + data.read_into("tracking_on", tracking_on); + data.read_into("lights_on", lights_on); + data.read_into("overhead_lights_on", overhead_lights_on); + data.read_into("skidding", skidding); + data.read_into("turret_mode", turret_mode); + data.read_into("of_turn_carry", of_turn_carry); + + face.init (fdir); + move.init (mdir); + data.read_into("name",name); + + data.read_into("parts", parts); + + /* After loading, check if the vehicle is from the old rules and is missing + * frames. */ + if ( savegame_loading_version < 11 ) { + add_missing_frames(); + } + find_horns (); + find_lights (); + find_fuel_tanks (); + find_exhaust (); + insides_dirty = true; + precalc_mounts (0, face.dir()); + + data.read_into("tags",tags); +} + +void vehicle::serialize(JsonOut &json) const +{ + json.start_object(); + json.member( "type", type ); + json.member( "posx", posx ); + json.member( "posy", posy ); + json.member( "levx", levx ); + json.member( "levy", levy ); + json.member( "om_id", om_id ); + json.member( "faceDir", face.dir() ); + json.member( "moveDir", move.dir() ); + json.member( "turn_dir", turn_dir ); + json.member( "velocity", velocity ); + json.member( "cruise_velocity", cruise_velocity ); + json.member( "cruise_on", cruise_on ); + json.member( "tracking_on", tracking_on ); + json.member( "lights_on", lights_on ); + json.member( "overhead_lights_on", overhead_lights_on ); + json.member( "skidding", skidding ); + json.member( "turret_mode", turret_mode ); + json.member( "of_turn_carry", of_turn_carry ); + json.member( "name", name ); + json.member( "parts", parts ); + json.member( "tags", tags ); + json.end_object(); +} + +////////////////// mission.h +//// +void mission::deserialize(JsonIn &jsin) +{ + JsonObject jo = jsin.get_object(); + + if (jo.has_member("type_id")) { + type = &(g->mission_types[jo.get_int("type_id")]); + } + jo.read_into("description", description); + jo.read_into("failed", failed); + jo.read_into("value", value); + jo.read_into("reward", reward); + jo.read_into("uid", uid ); + JsonArray ja = jo.get_array("target"); + if (ja.size() == 2) { + target.x = ja.get_int(0); + target.y = ja.get_int(1); + } + follow_up = mission_id(jo.get_int("follow_up", follow_up)); + item_id = itype_id(jo.get_string("item_id", item_id)); + jo.read_into("deadline", deadline ); + jo.read_into("step", step ); + jo.read_into("count", count ); + jo.read_into("npc_id", npc_id ); + jo.read_into("good_fac_id", good_fac_id ); + jo.read_into("bad_fac_id", bad_fac_id ); +} + +void mission::serialize(JsonOut &json) const +{ + json.start_object(); + + json.member("type_id", type == NULL ? -1 : (int)type->id); + json.member("description", description); + json.member("failed", failed); + json.member("value", value); + json.member("reward", reward); + json.member("uid", uid); + + json.member("target"); + json.start_array(); + json.write(target.x); + json.write(target.y); + json.end_array(); + + json.member("count", count); + json.member("deadline", deadline); + json.member("npc_id", npc_id); + json.member("good_fac_id", good_fac_id); + json.member("bad_fac_id", bad_fac_id); + json.member("step", step); + json.member("follow_up", (int)follow_up); + + json.end_object(); +} + +////////////////// faction.h +//// +void faction::deserialize(JsonIn &jsin) +{ + JsonObject jo = jsin.get_object(); + + jo.read_into("id", id); + jo.read_into("name", name); + goal = faction_goal(jo.get_int("goal", goal)); + values = jo.get_int("values", values); + job1 = faction_job(jo.get_int("job1", job1)); + job2 = faction_job(jo.get_int("job2", job2)); + jo.read_into("likes_u", likes_u); + jo.read_into("respects_u", respects_u); + jo.read_into("known_by_u", known_by_u); + jo.read_into("strength", strength); + jo.read_into("sneak", sneak); + jo.read_into("crime", crime); + jo.read_into("cult", cult); + jo.read_into("good", good); + jo.read_into("omx", omx); + jo.read_into("omy", omy); + jo.read_into("mapx", mapx); + jo.read_into("mapy", mapy); + jo.read_into("size", size); + jo.read_into("power", power); + if (jo.has_array("opinion_of")) { + opinion_of = jo.get_int_array("opinion_of"); + } +} + +void faction::serialize(JsonOut &json) const +{ + json.start_object(); + + json.member("id", id); + json.member("name", name); + json.member("values", values); + json.member("goal", goal); + json.member("job1", job1); + json.member("job2", job2); + json.member("likes_u", likes_u); + json.member("respects_u", respects_u); + json.member("known_by_u", known_by_u); + json.member("strength", strength); + json.member("sneak", sneak); + json.member("crime", crime); + json.member("cult", cult); + json.member("good", good); + json.member("omx", omx); + json.member("omy", omy); + json.member("mapx", mapx); + json.member("mapy", mapy); + json.member("size", size); + json.member("power", power); + json.member("opinion_of", opinion_of); + + json.end_object(); +} + diff --git a/savegame_legacy.cpp b/src/savegame_legacy.cpp similarity index 74% rename from savegame_legacy.cpp rename to src/savegame_legacy.cpp index f0aa8b23dc374..ec6a3d7963670 100644 --- a/savegame_legacy.cpp +++ b/src/savegame_legacy.cpp @@ -25,7 +25,6 @@ #include #include #include "debug.h" -#include "artifactdata.h" #include "weather.h" #include "monstergenerator.h" // for legacy classdata loaders @@ -39,6 +38,8 @@ #include "profession.h" #include "skill.h" #include "vehicle.h" +#include "picofunc.h" + // #include "mission.h" #include "faction.h" @@ -135,7 +136,7 @@ bool game::unserialize_legacy(std::ifstream & fin) { for (int i = 0; i < nummon; i++) { getline(fin, data); - montmp.load_info(data, &mtypes); + montmp.load_info(data); add_zombie(montmp); } @@ -225,7 +226,7 @@ bool game::unserialize_legacy(std::ifstream & fin) { for (int i = 0; i < nummon; i++) { getline(fin, data); - montmp.load_info(data, &mtypes); + montmp.load_info(data); fin >> num_items; // Chomp the endline after number of items. @@ -341,7 +342,7 @@ bool game::unserialize_legacy(std::ifstream & fin) { for (int i = 0; i < nummon; i++) { getline(fin, data); - montmp.load_info(data, &mtypes); + montmp.load_info(data); fin >> num_items; // Chomp the endline after number of items. @@ -453,7 +454,7 @@ original 'structure', which globs game/weather/location & killcount/player data fin.get(junk); // Chomp that pesky endline for (int i = 0; i < nummon; i++) { getline(fin, data); - montmp.load_info(data, &mtypes); + montmp.load_info(data); fin >> num_items; // Chomp the endline after number of items. @@ -549,8 +550,479 @@ void game::load_legacy_future_weather(std::istream &fin) * Parse an open, obsolete overmap. These can linger unless the player moves around to all explored areas. */ +const size_t num_ter_types = 304; +const char* oter_legacy[num_ter_types] = { + "", + "crater", + "field", + "forest", + "forest_thick", + "forest_water", + "hiway_ns", + "hiway_ew", + "road_null", + "road_ns", + "road_ew", + "road_ne", + "road_es", + "road_sw", + "road_wn", + "road_nes", + "road_new", + "road_nsw", + "road_esw", + "road_nesw", + "road_nesw_manhole", + "bridge_ns", + "bridge_ew", + "river_center", + "river_c_not_ne", + "river_c_not_nw", + "river_c_not_se", + "river_c_not_sw", + "river_north", + "river_east", + "river_south", + "river_west", + "river_ne", + "river_se", + "river_sw", + "river_nw", + "house_north", + "house_east", + "house_south", + "house_west", + "house_base_north", + "house_base_east", + "house_base_south", + "house_base_west", + "s_lot", + "park", + "pool", + "s_gas_north", + "s_gas_east", + "s_gas_south", + "s_gas_west", + "s_pharm_north", + "s_pharm_east", + "s_pharm_south", + "s_pharm_west", + "office_doctor_north", + "office_doctor_east", + "office_doctor_south", + "office_doctor_west", + "office_cubical_north", + "office_cubical_east", + "office_cubical_south", + "office_cubical_west", + "apartments_con_tower_1_entrance","apartments_con_tower_1", + "apartments_mod_tower_1_entrance","apartments_mod_tower_1", + "office_tower_1_entrance", + "office_tower_1", + "office_tower_b_entrance", + "office_tower_b", + "church_north", + "church_east", + "church_south", + "church_west", + "cathedral_1_entrance", + "cathedral_1", + "cathedral_b_entrance", + "cathedral_b", + "s_grocery_north", + "s_grocery_east", + "s_grocery_south", + "s_grocery_west", + "s_hardware_north", + "s_hardware_east", + "s_hardware_south", + "s_hardware_west", + "s_electronics_north", + "s_electronics_east", + "s_electronics_south", + "s_electronics_west", + "s_sports_north", + "s_sports_east", + "s_sports_south", + "s_sports_west", + "s_liquor_north", + "s_liquor_east", + "s_liquor_south", + "s_liquor_west", + "s_gun_north", + "s_gun_east", + "s_gun_south", + "s_gun_west", + "s_clothes_north", + "s_clothes_east", + "s_clothes_south", + "s_clothes_west", + "s_library_north", + "s_library_east", + "s_library_south", + "s_library_west", + "s_restaurant_north", + "s_restaurant_east", + "s_restaurant_south", + "s_restaurant_west", + "s_restaurant_fast_north", + "s_restaurant_fast_east", + "s_restaurant_fast_south", + "s_restaurant_fast_west", + "s_restaurant_coffee_north", + "s_restaurant_coffee_east", + "s_restaurant_coffee_south", + "s_restaurant_coffee_west", + "sub_station_north", + "sub_station_east", + "sub_station_south", + "sub_station_west", + "s_garage_north", + "s_garage_east", + "s_garage_south", + "s_garage_west", + "cabin_strange", + "cabin_strange_b", + "cabin", + "dirtlot", + "farm", + "farm_field", + "police_north", + "police_east", + "police_south", + "police_west", + "bank_north", + "bank_east", + "bank_south", + "bank_west", + "bar_north", + "bar_east", + "bar_south", + "bar_west", + "pawn_north", + "pawn_east", + "pawn_south", + "pawn_west", + "mil_surplus_north", + "mil_surplus_east", + "mil_surplus_south", + "mil_surplus_west", + "furniture_north", + "furniture_east", + "furniture_south", + "furniture_west", + "abstorefront_north", + "abstorefront_east", + "abstorefront_south", + "abstorefront_west", + "megastore_entrance", + "megastore", + "hospital_entrance", + "hospital", + "public_works_entrance", + "public_works", + "school_1", + "school_2", + "school_3", + "school_4", + "school_5", + "school_6", + "school_7", + "school_8", + "school_9", + "prison_1", + "prison_2", + "prison_3", + "prison_4", + "prison_5", + "prison_6", + "prison_7", + "prison_8", + "prison_9", + "prison_b", + "prison_b_entrance", + "hotel_tower_1_1", + "hotel_tower_1_2", + "hotel_tower_1_3", + "hotel_tower_1_4", + "hotel_tower_1_5", + "hotel_tower_1_6", + "hotel_tower_1_7", + "hotel_tower_1_8", + "hotel_tower_1_9","hotel_tower_b_1", + "hotel_tower_b_2", + "hotel_tower_b_3", + "mansion_entrance", + "mansion", + "fema_entrance", + "fema", + "station_radio_north", + "station_radio_east", + "station_radio_south", + "station_radio_west", + "shelter", + "shelter_under", + "lmoe", + "lmoe_under", + "lab", + "lab_stairs", + "lab_core", + "lab_finale", + "ice_lab", + "ice_lab_stairs", + "ice_lab_core", + "ice_lab_finale", + "nuke_plant_entrance", + "nuke_plant", + "bunker", + "outpost", + "silo", + "silo_finale", + "temple", + "temple_stairs", + "temple_core", + "temple_finale", + "sewage_treatment", + "sewage_treatment_hub", + "sewage_treatment_under", + "mine_entrance", + "mine_shaft", + "mine", + "mine_down", + "mine_finale", + "spiral_hub", + "spiral", + "radio_tower", + "toxic_dump", + "haz_sar_entrance", + "haz_sar", + "haz_sar_entrance_b1", + "haz_sar_b1", + "cave", + "cave_rat", + "hive", + "fungal_bloom", + "spider_pit", + "spider_pit_under", + "anthill", + "slimepit", + "slimepit_down", + "triffid_grove", + "triffid_roots", + "triffid_finale", + "basement", + "cavern", + "rock", + "rift", + "hellmouth", + "subway_station", + "subway_ns", + "subway_ew", + "subway_ne", + "subway_es", + "subway_sw", + "subway_wn", + "subway_nes", + "subway_new", + "subway_nsw", + "subway_esw", + "subway_nesw", + "sewer_ns", + "sewer_ew", + "sewer_ne", + "sewer_es", + "sewer_sw", + "sewer_wn", + "sewer_nes", + "sewer_new", + "sewer_nsw", + "sewer_esw", + "sewer_nesw", + "ants_ns", + "ants_ew", + "ants_ne", + "ants_es", + "ants_sw", + "ants_wn", + "ants_nes", + "ants_new", + "ants_nsw", + "ants_esw", + "ants_nesw", + "ants_food", + "ants_larvae", + "ants_queen", + "tutorial" +}; + bool overmap::unserialize_legacy(game *g, std::ifstream & fin, std::string const & plrfilename, std::string const & terfilename) { - return false; // stub + switch (savegame_loading_version) { + case 11: + case 10: + case 9: + case 8: + case 7: + case 6: + case 5: + case 4: + case 3: + case 2: + case 1: + case 0: { + + // DEBUG VARS + int nummg = 0; + char datatype; + int cx, cy, cz, cs, cp, cd, cdying; + std::string cstr; + city tmp; + std::list npc_inventory; + + int z = 0; // assumption + while (fin >> datatype) { + if (datatype == 'L') { // Load layer data, and switch to layer + fin >> z; + + int tmp_ter; + if (z >= 0 && z < OVERMAP_LAYERS) { + int count = 0; + for (int j = 0; j < OMAPY; j++) { + for (int i = 0; i < OMAPX; i++) { + if (count == 0) { + fin >> tmp_ter >> count; + if (tmp_ter < 0 || tmp_ter >= num_ter_types) { + debugmsg("Loaded bad ter! %s; ter %d", terfilename.c_str(), tmp_ter); + } + } + count--; + layer[z].terrain[i][j] = oter_id(oter_legacy[tmp_ter]); + layer[z].visible[i][j] = false; + } + } + } else { + debugmsg("Loaded z level out of range (z: %d)", z); + } + } else if (datatype == 'Z') { // Monster group + fin >> cstr >> cx >> cy >> cz >> cs >> cp >> cd >> cdying; + zg.push_back(mongroup(cstr, cx, cy, cz, cs, cp)); + zg.back().diffuse = cd; + zg.back().dying = cdying; + nummg++; + } else if (datatype == 't') { // City + fin >> cx >> cy >> cs; + tmp.x = cx; tmp.y = cy; tmp.s = cs; + cities.push_back(tmp); + } else if (datatype == 'R') { // Road leading out + fin >> cx >> cy; + tmp.x = cx; tmp.y = cy; tmp.s = 0; + roads_out.push_back(tmp); + } else if (datatype == 'T') { // Radio tower + radio_tower tmp; + int tmp_type; + fin >> tmp.x >> tmp.y >> tmp.strength >> tmp_type; + tmp.type = (radio_type)tmp_type; + getline(fin, tmp.message); // Chomp endl + getline(fin, tmp.message); + radios.push_back(tmp); + } else if (datatype == 'n') { // NPC + // When we start loading a new NPC, check to see if we've + // accumulated items for assignment to an NPC. + if (!npc_inventory.empty() && !npcs.empty()) { + npcs.back()->inv.add_stack(npc_inventory); + npc_inventory.clear(); + } + std::string npcdata; + getline(fin, npcdata); + npc * tmp = new npc(); + tmp->load_info(g, npcdata); + npcs.push_back(tmp); + } else if (datatype == 'P') { + // Chomp the invlet_cache, since the npc doesn't use it. + std::string itemdata; + getline(fin, itemdata); + } else if (datatype == 'I' || datatype == 'C' || datatype == 'W' || + datatype == 'w' || datatype == 'c') { + std::string itemdata; + getline(fin, itemdata); + if (npcs.empty()) { + debugmsg("Overmap %d:%d:%d tried to load object data, without an NPC!", + loc.x, loc.y); + debugmsg(itemdata.c_str()); + } else { + item tmp(itemdata, g); + npc* last = npcs.back(); + switch (datatype) { + case 'I': + npc_inventory.push_back(tmp); + break; + case 'C': + npc_inventory.back().contents.push_back(tmp); + break; + case 'W': + last->worn.push_back(tmp); + break; + case 'w': + last->weapon = tmp; + break; + case 'c': + last->weapon.contents.push_back(tmp); + break; + } + } + } + } + + // If we accrued an npc_inventory, assign it now + if (!npc_inventory.empty() && !npcs.empty()) { + npcs.back()->inv.add_stack(npc_inventory); + } + + std::ifstream sfin; + // Private/per-character data + sfin.open(plrfilename.c_str()); + if ( fin.peek() == '#' ) { // not handling muilti-version seen cache + std::string vline; + getline(fin, vline); + } + if (sfin.is_open()) { // Load private seen data + int z = 0; // assumption + while (sfin >> datatype) { + if (datatype == 'L') { // Load layer data, and switch to layer + sfin >> z; + + std::string dataline; + getline(sfin, dataline); // Chomp endl + + int count = 0; + int vis; + if (z >= 0 && z < OVERMAP_LAYERS) { + for (int j = 0; j < OMAPY; j++) { + for (int i = 0; i < OMAPX; i++) { + if (count == 0) { + sfin >> vis >> count; + } + count--; + layer[z].visible[i][j] = (vis == 1); + } + } + } + } else if (datatype == 'N') { // Load notes + om_note tmp; + sfin >> tmp.x >> tmp.y >> tmp.num; + getline(sfin, tmp.text); // Chomp endl + getline(sfin, tmp.text); + if (z >= 0 && z < OVERMAP_LAYERS) { + layer[z].notes.push_back(tmp); + } + } + } + sfin.close(); + } + return true; + } break; + + } + return false; } @@ -841,10 +1313,10 @@ void player::load_legacy(game *g, std::stringstream & dump) { std::string item_id; dump >> mortype >> item_id; mortmp.type = morale_type(mortype); - if (g->itypes.find(item_id) == g->itypes.end()) + if (itypes.find(item_id) == itypes.end()) mortmp.item_type = NULL; else - mortmp.item_type = g->itypes[item_id]; + mortmp.item_type = itypes[item_id]; dump >> mortmp.bonus >> mortmp.duration >> mortmp.decay_start >> mortmp.age; @@ -1068,14 +1540,14 @@ std::istream& operator>>(std::istream& is, SkillLevel& obj) { ///// monster.h -void monster::load_legacy(std::vector *mtypes, std::stringstream & dump) { +void monster::load_legacy(std::stringstream & dump) { int idtmp, plansize; dump >> idtmp >> _posx >> _posy >> wandx >> wandy >> wandf >> moves >> speed >> hp >> sp_timeout >> plansize >> friendly >> faction_id >> mission_id >> no_extra_death_drops >> dead >> anger >> morale; // load->int->str->int (possibly shifted) - type = (*mtypes)[ monster_ints[ legacy_mon_id[ idtmp ] ] ]; + type = GetMType( legacy_mon_id[idtmp] ); point ptmp; plans.clear(); @@ -1118,14 +1590,14 @@ void item::load_legacy(game * g, std::stringstream & dump) { } name = name.substr(2, name.size() - 3); // s/^ '(.*)'$/\1/ } - make(g->itypes[idtmp]); + make(itypes[idtmp]); invlet = char(lettmp); damage = damtmp; active = false; if (acttmp == 1) active = true; if (ammotmp != "null") - curammo = dynamic_cast(g->itypes[ammotmp]); + curammo = dynamic_cast(itypes[ammotmp]); else curammo = NULL; } diff --git a/sdltiles.cpp b/src/sdltiles.cpp similarity index 92% rename from sdltiles.cpp rename to src/sdltiles.cpp index bd5ab551d5f69..920886d25fc95 100644 --- a/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -117,7 +117,7 @@ void ClearScreen() bool fexists(const char *filename) { std::ifstream ifile(filename); - return ifile; + return (bool)ifile; } //Registers, creates, and shows the Window!! @@ -709,27 +709,27 @@ void CheckMessages() // TODO: somehow get the "digipad" values from the axes break; case SDL_MOUSEMOTION: - if( (OPTIONS["HIDE_CURSOR"] == "show" || OPTIONS["HIDE_CURSOR"] == "hidekb") && - !SDL_ShowCursor(-1)) { - SDL_ShowCursor(SDL_ENABLE); + if (OPTIONS["HIDE_CURSOR"] == "show" || OPTIONS["HIDE_CURSOR"] == "hidekb") { + if (!SDL_ShowCursor(-1)) { + SDL_ShowCursor(SDL_ENABLE); + } + + // Only monitor motion when cursor is visible + lastchar_is_mouse = true; + lastchar = MOUSE_MOVE; } break; case SDL_MOUSEBUTTONUP: + lastchar_is_mouse = true; if (ev.button.button == SDL_BUTTON_LEFT) { - lastchar_is_mouse = true; lastchar = MOUSE_BUTTON_LEFT; } else if (ev.button.button == SDL_BUTTON_RIGHT) { - lastchar_is_mouse = true; lastchar = MOUSE_BUTTON_RIGHT; } else if (ev.button.button == SDL_BUTTON_WHEELUP) { - // Mouse wheel emulates '<' and '>' - // FIXME This should really find current key from 'keymap', in case it's remapped, but - // that's in action.h. When that's available at a different abstraction level, - // this can be improved. - lastchar = '<'; + lastchar = SCROLLWHEEL_UP; } else if (ev.button.button == SDL_BUTTON_WHEELDOWN) { - lastchar = '>'; + lastchar = SCROLLWHEEL_DOWN; } break; @@ -997,70 +997,15 @@ WINDOW *curses_init(void) int curses_getch(WINDOW* win) { input_event evt = inp_mngr.get_input_event(win); - if(evt.type != CATA_INPUT_KEYBOARD) { - return ERR; - } else { - return evt.sequence[0]; - } -} - -// Gets input from both keyboard and mouse -input_event getch_kyb_mouse(WINDOW* capture_win /* = NULL */) -{ - input_event evt = inp_mngr.get_input_event(mainwin); - - if (evt.sequence.size() == 0 || - (evt.type != CATA_INPUT_MOUSE && evt.type != CATA_INPUT_KEYBOARD)) - { - evt.type = CATA_INPUT_ERROR; - return evt; - } - - if (evt.type == CATA_INPUT_MOUSE) { - if (!capture_win) { - capture_win = g->w_terrain; - } - - // Check if click is within bounds of the window we care about - int win_left = capture_win->x * fontwidth; - int win_right = (capture_win->x + capture_win->width) * fontwidth; - int win_top = capture_win->y * fontheight; - int win_bottom = (capture_win->y + capture_win->height) * fontheight; - if (evt.mouse_x < win_left || evt.mouse_x > win_right || evt.mouse_y < win_top || evt.mouse_y > win_bottom) { - evt.type = CATA_INPUT_ERROR; - return evt; - } - - int view_columns, view_rows, selected_column, selected_row; - - // Translate mouse coords to map coords based on tile size -#ifdef SDLTILES - if (use_tiles) - { - tilecontext->get_window_tile_counts( - capture_win->width * fontwidth, capture_win->height * fontheight, view_columns, view_rows); - - selected_column = (evt.mouse_x - win_left) / tilecontext->get_tile_width(); - selected_row = (evt.mouse_y - win_top) / tilecontext->get_tile_width(); + while(evt.type != CATA_INPUT_KEYBOARD) { + evt = inp_mngr.get_input_event(win); + if (evt.type == CATA_INPUT_TIMEOUT) { + return ERR; // Calling functions expect an ERR on timeout } - else -#endif - { - view_columns = capture_win->width; - view_rows = capture_win->height; - selected_column = (evt.mouse_x - win_left) / fontwidth; - selected_row = (evt.mouse_y - win_top) / fontheight; - } - - evt.mouse_x = g->ter_view_x - ((view_columns/2) - selected_column); - evt.mouse_y = g->ter_view_y - ((view_rows/2) - selected_row); } - - return evt; + return evt.sequence[0]; } - - //Ends the terminal, destroy everything int curses_destroy(void) { @@ -1182,6 +1127,8 @@ input_event input_manager::get_input_event(WINDOW *win) { wrefresh(win); lastchar=ERR;//ERR=-1 + input_event rval; + if (inputdelay < 0) { do @@ -1196,34 +1143,39 @@ input_event input_manager::get_input_event(WINDOW *win) { { unsigned long starttime=SDL_GetTicks(); unsigned long endtime; + bool timedout = false; do { CheckMessages(); endtime=SDL_GetTicks(); if (lastchar!=ERR) break; SDL_Delay(1); + timedout = endtime >= starttime + inputdelay; + if (timedout) { + rval.type = CATA_INPUT_TIMEOUT; + } } - while (endtime<(starttime+inputdelay)); + while (!timedout); } else { CheckMessages(); } - input_event rval; - - if(lastchar == ERR) { - rval.type = CATA_INPUT_ERROR; - } else if(lastchar_isbutton) { - rval.type = CATA_INPUT_GAMEPAD; - rval.add_input(lastchar); - } else if(lastchar_is_mouse) { - rval.type = CATA_INPUT_MOUSE; - rval.add_input(lastchar); - SDL_GetMouseState(&rval.mouse_x, &rval.mouse_y); - } else { - rval.type = CATA_INPUT_KEYBOARD; - rval.add_input(lastchar); + if (rval.type != CATA_INPUT_TIMEOUT) { + if (lastchar == ERR) { + rval.type = CATA_INPUT_ERROR; + } else if (lastchar_isbutton) { + rval.type = CATA_INPUT_GAMEPAD; + rval.add_input(lastchar); + } else if (lastchar_is_mouse) { + rval.type = CATA_INPUT_MOUSE; + rval.add_input(lastchar); + SDL_GetMouseState(&rval.mouse_x, &rval.mouse_y); + } else { + rval.type = CATA_INPUT_KEYBOARD; + rval.add_input(lastchar); + } } return rval; @@ -1233,4 +1185,49 @@ bool gamepad_available() { return joystick != NULL; } +bool input_context::get_coordinates(WINDOW* capture_win, int& x, int& y) { + if(!coordinate_input_received) { + return false; + } + + if (!capture_win) { + capture_win = g->w_terrain; + } + + // Check if click is within bounds of the window we care about + int win_left = capture_win->x * fontwidth; + int win_right = (capture_win->x + capture_win->width) * fontwidth; + int win_top = capture_win->y * fontheight; + int win_bottom = (capture_win->y + capture_win->height) * fontheight; + if (coordinate_x < win_left || coordinate_x > win_right || coordinate_y < win_top || coordinate_y > win_bottom) { + return false; + } + + int view_columns, view_rows, selected_column, selected_row; + + // Translate mouse coords to map coords based on tile size +#ifdef SDLTILES + if (use_tiles) + { + tilecontext->get_window_tile_counts( + capture_win->width * fontwidth, capture_win->height * fontheight, view_columns, view_rows); + + selected_column = (coordinate_x - win_left) / tilecontext->get_tile_width(); + selected_row = (coordinate_y - win_top) / tilecontext->get_tile_width(); + } + else +#endif + { + view_columns = capture_win->width; + view_rows = capture_win->height; + selected_column = (coordinate_x - win_left) / fontwidth; + selected_row = (coordinate_y - win_top) / fontheight; + } + + x = g->ter_view_x - ((view_columns/2) - selected_column); + y = g->ter_view_y - ((view_rows/2) - selected_row); + + return true; +} + #endif // TILES diff --git a/setvector.cpp b/src/setvector.cpp similarity index 100% rename from setvector.cpp rename to src/setvector.cpp diff --git a/setvector.h b/src/setvector.h similarity index 100% rename from setvector.h rename to src/setvector.h diff --git a/skill.cpp b/src/skill.cpp similarity index 100% rename from skill.cpp rename to src/skill.cpp diff --git a/skill.h b/src/skill.h similarity index 93% rename from skill.h rename to src/skill.h index f1c99e7bf9eaf..b1c1864e2ecf7 100644 --- a/skill.h +++ b/src/skill.h @@ -7,7 +7,6 @@ #include #include #include "calendar.h" -#include "picofunc.h" #include "json.h" class Skill { @@ -44,7 +43,8 @@ class Skill { bool operator!=(const Skill& b) const { return !(*this == b); } }; -class SkillLevel { +class SkillLevel : public JsonSerializer, public JsonDeserializer +{ int _level; int _exercise; bool _isTraining; @@ -90,9 +90,10 @@ class SkillLevel { SkillLevel& operator= (const SkillLevel &rhs); - picojson::value json_save(); - bool json_load(picojson::value & parsed); - bool json_load(std::map & data ); + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); // Make skillLevel act like a raw level by default. operator int() const { return _level; } diff --git a/src/speech.cpp b/src/speech.cpp new file mode 100644 index 0000000000000..40560f4b1cece --- /dev/null +++ b/src/speech.cpp @@ -0,0 +1,38 @@ +#include "speech.h" +#include "translations.h" +#include "rng.h" +#include + + +std::map > speech; + +SpeechBubble nullSpeech = { "", 0 }; + +void load_speech(JsonObject &jo) +{ + std::string label = jo.get_string("speaker").c_str(); + std::string sound = _(jo.get_string("sound").c_str()); + int volume = jo.get_int("volume"); + std::map >::iterator speech_type = speech.find( label ); + + // Construct a vector matching the label if needed. + if( speech_type == speech.end() ) { + speech[ label ] = std::vector(); + speech_type = speech.find( label ); + } + + SpeechBubble speech = {sound, volume}; + + speech_type->second.push_back(speech); +} + +const SpeechBubble& get_speech( const std::string label ) { + const std::map >::iterator speech_type = speech.find( label ); + + if( speech_type == speech.end() || speech_type->second.size() == 0 ) { + // Bad lookup, return a fake sound, also warn? + return nullSpeech; + } + + return speech_type->second[ rng( 0, speech_type->second.size() - 1 ) ]; +} diff --git a/src/speech.h b/src/speech.h new file mode 100644 index 0000000000000..5a9dddfdfd115 --- /dev/null +++ b/src/speech.h @@ -0,0 +1,15 @@ +#ifndef _SPEECH_H_ +#define _SPEECH_H_ + +#include "json.h" + + +struct SpeechBubble { + std::string text; + int volume; +}; + +void load_speech(JsonObject &jo); +const SpeechBubble& get_speech( const std::string label ); + +#endif /* _SPEECH_H_ */ diff --git a/text_snippets.cpp b/src/text_snippets.cpp similarity index 100% rename from text_snippets.cpp rename to src/text_snippets.cpp diff --git a/text_snippets.h b/src/text_snippets.h similarity index 100% rename from text_snippets.h rename to src/text_snippets.h diff --git a/tile_id_data.h b/src/tile_id_data.h similarity index 99% rename from tile_id_data.h rename to src/tile_id_data.h index d5b645ea5d3aa..52b2961b9f824 100644 --- a/tile_id_data.h +++ b/src/tile_id_data.h @@ -22,7 +22,6 @@ const std::string trap_names[num_trap_types] = toString(tr_fur_rollmat), toString(tr_beartrap), toString(tr_beartrap_buried), - toString(tr_snare), toString(tr_nailboard), toString(tr_caltrops), toString(tr_tripwire), diff --git a/tileray.cpp b/src/tileray.cpp similarity index 98% rename from tileray.cpp rename to src/tileray.cpp index c5ca68ed48226..4198cabc8c72e 100644 --- a/tileray.cpp +++ b/src/tileray.cpp @@ -56,22 +56,22 @@ void tileray::init (int adir) infinite = true; } -int tileray::dx () +int tileray::dx () const { return last_dx; } -int tileray::dy () +int tileray::dy () const { return last_dy; } -int tileray::dir () +int tileray::dir () const { return direction; } -int tileray::dir4 () +int tileray::dir4 () const { if (direction >= 45 && direction <= 135) return 1; diff --git a/tileray.h b/src/tileray.h similarity index 84% rename from tileray.h rename to src/tileray.h index 2632b2a8ee092..a6e1648878f13 100644 --- a/tileray.h +++ b/src/tileray.h @@ -33,10 +33,10 @@ class tileray void init (int adx, int ady); // init ray with dx,dy void init (int adir); // init ray with direction - int dx (); // return dx of last advance (-1 to 1) - int dy (); // return dy of last advance (-1 to 1) - int dir (); // return direction of ray (degrees) - int dir4 (); // return 4-sided direction (0 = east, 1 = south, 2 = west, 3 = north) + int dx () const; // return dx of last advance (-1 to 1) + int dy () const; // return dy of last advance (-1 to 1) + int dir () const; // return direction of ray (degrees) + int dir4 () const; // return 4-sided direction (0 = east, 1 = south, 2 = west, 3 = north) long dir_symbol (long sym); // convert certain symbols from north-facing variant into current dir facing int ortho_dx (int od); // return dx for point at "od" distance in orthogonal direction int ortho_dy (int od); // return dy for point at "od" distance in orthogonal direction diff --git a/translations.cpp b/src/translations.cpp similarity index 100% rename from translations.cpp rename to src/translations.cpp diff --git a/translations.h b/src/translations.h similarity index 100% rename from translations.h rename to src/translations.h diff --git a/src/trap.h b/src/trap.h new file mode 100644 index 0000000000000..0e6ac3a70de1c --- /dev/null +++ b/src/trap.h @@ -0,0 +1,173 @@ +#ifndef _TRAP_H_ +#define _TRAP_H_ + +#include "color.h" +#include "monster.h" +#include "itype.h" +#include + +/* + On altering any entries in this enum please add or remove the appropriate entry to the trap_names array in tile_id_data.h +*/ +enum trap_id { + tr_null, + tr_bubblewrap, + tr_cot, + tr_brazier, + tr_funnel, + tr_makeshift_funnel, + tr_rollmat, + tr_fur_rollmat, + tr_beartrap, + tr_beartrap_buried, + tr_nailboard, + tr_caltrops, + tr_tripwire, + tr_crossbow, + tr_shotgun_2, + tr_shotgun_1, + tr_engine, + tr_blade, + tr_light_snare, + tr_heavy_snare, + tr_landmine, + tr_landmine_buried, + tr_telepad, + tr_goo, + tr_dissector, + tr_sinkhole, + tr_pit, + tr_spike_pit, + tr_lava, + tr_portal, + tr_ledge, + tr_boobytrap, + tr_temple_flood, + tr_temple_toggle, + tr_glow, + tr_hum, + tr_shadow, + tr_drain, + tr_snake, + num_trap_types +}; + +struct trap; + +struct trapfunc { + void none (int , int) {}; + void bubble (int x, int y); + void beartrap (int x, int y); + void snare_light (int x, int y); + void snare_heavy (int x, int y); + void board (int x, int y); + void caltrops (int x, int y); + void tripwire (int x, int y); + void crossbow (int x, int y); + void shotgun (int x, int y); + void blade (int x, int y); + void landmine (int x, int y); + void telepad (int x, int y); + void goo (int x, int y); + void dissector (int x, int y); + void sinkhole (int x, int y); + void pit (int x, int y); + void pit_spikes (int x, int y); + void lava (int x, int y); + void portal (int x, int y); + void ledge (int x, int y); + void boobytrap (int x, int y); + void temple_flood (int x, int y); + void temple_toggle (int x, int y); + void glow (int x, int y); + void hum (int x, int y); + void shadow (int x, int y); + void drain (int x, int y); + void snake (int x, int y); +}; + +struct trapfuncm { + void none (monster *, int , int ) {}; + void bubble (monster *z, int x, int y); + void cot (monster *z, int x, int y); + void beartrap (monster *z, int x, int y); + void board (monster *z, int x, int y); + void caltrops (monster *z, int x, int y); + void tripwire (monster *z, int x, int y); + void crossbow (monster *z, int x, int y); + void shotgun (monster *z, int x, int y); + void blade (monster *z, int x, int y); + void snare_light (monster *z, int x, int y); + void snare_heavy (monster *z, int x, int y); + void landmine (monster *z, int x, int y); + void telepad (monster *z, int x, int y); + void goo (monster *z, int x, int y); + void dissector (monster *z, int x, int y); + void sinkhole (monster *z, int x, int y); + void pit (monster *z, int x, int y); + void pit_spikes (monster *z, int x, int y); + void lava (monster *z, int x, int y); + void portal (monster *z, int x, int y); + void ledge (monster *z, int x, int y); + void boobytrap (monster *z, int x, int y); + void glow (monster *z, int x, int y); + void hum (monster *z, int x, int y); + void drain (monster *z, int x, int y); + void snake (monster *z, int x, int y); +}; + +struct trap { + int id; + long sym; + nc_color color; + std::string name; + + int visibility; // 1 to ??, affects detection + int avoidance; // 0 to ??, affects avoidance + int difficulty; // 0 to ??, difficulty of assembly & disassembly + std::vector components; // For disassembly? + +// You stepped on it + void (trapfunc::*act)(int x, int y); +// Monster stepped on it + void (trapfuncm::*actm)(monster *, int x, int y); +// Type of trap + bool is_benign(); + bool benign; + + // non-generic numbers for special cases + int funnel_radius_mm; + double funnel_turns_per_charge( double rain_depth_mm_per_hour ) const; + /* pending jsonize + std::set flags + std::string id; + */ + + trap(int pid, std::string /*string_id*/, std::string pname, nc_color pcolor, + char psym, int pvisibility, int pavoidance, int pdifficulty, + void (trapfunc::*pact)(int x, int y), + void (trapfuncm::*pactm)(monster *, int x, int y), + std::vector keys) { + //string_id is ignored at the moment, will later replace the id + id = pid; + sym = psym; + color = pcolor; + name = pname; + visibility = pvisibility; + avoidance = pavoidance; + difficulty = pdifficulty; + act = pact; + actm = pactm; + + components.insert(components.end(), keys.begin(), keys.end()); + + // It's a traaaap! So default; + benign = false; + // Traps are not typically funnels + funnel_radius_mm = 0; + }; +}; + +trap_id trap_id_from_string(std::string trap_name); + +#endif diff --git a/trapdef.cpp b/src/trapdef.cpp similarity index 97% rename from trapdef.cpp rename to src/trapdef.cpp index 8e96fa396ef5d..b79d2aae94363 100644 --- a/trapdef.cpp +++ b/src/trapdef.cpp @@ -76,13 +76,6 @@ traps.push_back(new trap(id, "BEARTRAP_BURIED", _("buried bear trap"), c_blue, ' // Name Symbol Color Vis Avd Diff -keys.clear(); -id++; -keys.push_back("stick"); -keys.push_back("string_36"); -traps.push_back(new trap(id, "SNARE", _("rabbit snare"), c_brown, '\\', 5, 10, - 2, &trapfunc::snare, &trapfuncm::snare, keys));; - keys.clear(); id++; keys.push_back("board_trap"); diff --git a/trapfunc.cpp b/src/trapfunc.cpp similarity index 85% rename from trapfunc.cpp rename to src/trapfunc.cpp index 5259709833afc..e95a1931c995d 100644 --- a/trapfunc.cpp +++ b/src/trapfunc.cpp @@ -4,7 +4,7 @@ #include "monstergenerator.h" // A pit becomes less effective as it fills with corpses. -float pit_effectiveness(game *g, int x, int y) +float pit_effectiveness(int x, int y) { int corpse_volume = 0; for (int i = 0; i < g->m.i_at(x, y).size(); i++) { @@ -21,7 +21,7 @@ float pit_effectiveness(game *g, int x, int y) return eff; } -void trapfunc::bubble(game *g, int x, int y) +void trapfunc::bubble(int x, int y) { g->add_msg(_("You step on some bubble wrap!")); g->u.add_memorial_log(_("Stepped on bubble wrap.")); @@ -29,7 +29,7 @@ void trapfunc::bubble(game *g, int x, int y) g->m.remove_trap(x, y); } -void trapfuncm::bubble(game *g, monster *z, int x, int y) +void trapfuncm::bubble(monster *z, int x, int y) { // tiny animals don't trigger bubble wrap if (z->type->size == MS_TINY) @@ -39,13 +39,13 @@ void trapfuncm::bubble(game *g, monster *z, int x, int y) g->m.remove_trap(x, y); } -void trapfuncm::cot(game *g, monster *z, int x, int y) +void trapfuncm::cot(monster *z, int x, int y) { g->add_msg(_("The %s stumbles over the cot"), z->name().c_str()); z->moves -= 100; } -void trapfunc::beartrap(game *g, int x, int y) +void trapfunc::beartrap(int x, int y) { g->add_msg(_("A bear trap closes on your foot!")); g->u.add_memorial_log(_("Caught by a beartrap.")); @@ -53,10 +53,10 @@ void trapfunc::beartrap(game *g, int x, int y) g->u.hit(g, bp_legs, random_side(bp_legs), 10, 16); g->u.add_disease("beartrap", 1, true); g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "beartrap", g->turn); + g->m.spawn_item(x, y, "beartrap"); } -void trapfuncm::beartrap(game *g, monster *z, int x, int y) +void trapfuncm::beartrap(monster *z, int x, int y) { // tiny animals don't trigger bear traps if (z->type->size == MS_TINY) @@ -65,17 +65,17 @@ void trapfuncm::beartrap(game *g, monster *z, int x, int y) g->sound(x, y, 8, _("SNAP!")); if (z->hurt(35)) { g->kill_mon(g->mon_at(x, y)); - g->m.spawn_item(x, y, "beartrap", 0); + g->m.spawn_item(x, y, "beartrap"); } else { z->moves = 0; z->add_effect(ME_BEARTRAP, rng(8, 15)); } g->m.remove_trap(x, y); - item beartrap(g->itypes["beartrap"], 0); + item beartrap(itypes["beartrap"], 0); z->add_item(beartrap); } -void trapfunc::board(game *g, int x, int y) +void trapfunc::board(int x, int y) { g->add_msg(_("You step on a spiked board!")); g->u.add_memorial_log(_("Stepped on a spiked board.")); @@ -83,7 +83,7 @@ void trapfunc::board(game *g, int x, int y) g->u.hit(g, bp_feet, 1, 0, rng(6, 10)); } -void trapfuncm::board(game *g, monster *z, int x, int y) +void trapfuncm::board(monster *z, int x, int y) { // tiny animals don't trigger spiked boards, they can squeeze between the nails if (z->type->size == MS_TINY) @@ -97,7 +97,7 @@ void trapfuncm::board(game *g, monster *z, int x, int y) z->moves -= 80; } -void trapfunc::caltrops(game *g, int x, int y) +void trapfunc::caltrops(int x, int y) { g->add_msg(_("You step on a sharp metal caltrop!")); g->u.add_memorial_log(_("Stepped on a caltrop.")); @@ -105,7 +105,7 @@ void trapfunc::caltrops(game *g, int x, int y) g->u.hit(g, bp_feet, 1, 0, rng(9, 30)); } -void trapfuncm::caltrops(game *g, monster *z, int x, int y) +void trapfuncm::caltrops(monster *z, int x, int y) { // tiny animals don't trigger caltrops, they can squeeze between them if (z->type->size == MS_TINY) @@ -118,7 +118,7 @@ void trapfuncm::caltrops(game *g, monster *z, int x, int y) else z->moves -= 80; } -void trapfunc::tripwire(game *g, int x, int y) +void trapfunc::tripwire(int x, int y) { g->add_msg(_("You trip over a tripwire!")); g->u.add_memorial_log(_("Tripped on a tripwire.")); @@ -139,7 +139,7 @@ void trapfunc::tripwire(game *g, int x, int y) g->u.hurtall(rng(1, 4)); } -void trapfuncm::tripwire(game *g, monster *z, int x, int y) +void trapfuncm::tripwire(monster *z, int x, int y) { // tiny animals don't trigger tripwires, they just squeeze under it if (z->type->size == MS_TINY) @@ -152,7 +152,7 @@ void trapfuncm::tripwire(game *g, monster *z, int x, int y) g->kill_mon(g->mon_at(z->posx(), z->posy())); } -void trapfunc::crossbow(game *g, int x, int y) +void trapfunc::crossbow(int x, int y) { bool add_bolt = true; g->add_msg(_("You trigger a crossbow trap!")); @@ -178,13 +178,13 @@ void trapfunc::crossbow(game *g, int x, int y) } else g->add_msg(_("You dodge the shot!")); g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "crossbow", 0); - g->m.spawn_item(x, y, "string_6", 0); + g->m.spawn_item(x, y, "crossbow"); + g->m.spawn_item(x, y, "string_6"); if (add_bolt) - g->m.spawn_item(x, y, "bolt_steel", 0, 0, 1); + g->m.spawn_item(x, y, "bolt_steel", 1, 1); } -void trapfuncm::crossbow(game *g, monster *z, int x, int y) +void trapfuncm::crossbow(monster *z, int x, int y) { bool add_bolt = true; bool seen = g->u_see(z); @@ -210,13 +210,13 @@ void trapfuncm::crossbow(game *g, monster *z, int x, int y) else if (seen) g->add_msg(_("A bolt shoots out, but misses the %s."), z->name().c_str()); g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "crossbow", 0); - g->m.spawn_item(x, y, "string_6", 0); + g->m.spawn_item(x, y, "crossbow"); + g->m.spawn_item(x, y, "string_6"); if (add_bolt) - g->m.spawn_item(x, y, "bolt_steel", 0, 0, 1); + g->m.spawn_item(x, y, "bolt_steel", 1, 1); } -void trapfunc::shotgun(game *g, int x, int y) +void trapfunc::shotgun(int x, int y) { g->add_msg(_("You trigger a shotgun trap!")); g->u.add_memorial_log(_("Triggered a shotgun trap.")); @@ -243,14 +243,14 @@ void trapfunc::shotgun(game *g, int x, int y) } else g->add_msg(_("You dodge the shot!")); if (shots == 2 || g->m.tr_at(x, y) == tr_shotgun_1) { - g->m.spawn_item(x, y, "shotgun_sawn", 0); - g->m.spawn_item(x, y, "string_6", 0); + g->m.spawn_item(x, y, "shotgun_sawn"); + g->m.spawn_item(x, y, "string_6"); g->m.remove_trap(x, y); } else g->m.add_trap(x, y, tr_shotgun_1); } -void trapfuncm::shotgun(game *g, monster *z, int x, int y) +void trapfuncm::shotgun(monster *z, int x, int y) { bool seen = g->u_see(z); int chance = 0; @@ -270,23 +270,23 @@ void trapfuncm::shotgun(game *g, monster *z, int x, int y) g->kill_mon(g->mon_at(x, y)); if (shots == 2 || g->m.tr_at(x, y) == tr_shotgun_1) { g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "shotgun_sawn", 0); - g->m.spawn_item(x, y, "string_6", 0); - g->m.spawn_item(x, y, "shotgun_sawn", 0); - g->m.spawn_item(x, y, "string_6", 0); + g->m.spawn_item(x, y, "shotgun_sawn"); + g->m.spawn_item(x, y, "string_6"); + g->m.spawn_item(x, y, "shotgun_sawn"); + g->m.spawn_item(x, y, "string_6"); } else g->m.add_trap(x, y, tr_shotgun_1); } -void trapfunc::blade(game *g, int x, int y) +void trapfunc::blade(int x, int y) { g->add_msg(_("A blade swings out and hacks your torso!")); g->u.add_memorial_log(_("Triggered a blade trap.")); g->u.hit(g, bp_torso, -1, 12, 30); } -void trapfuncm::blade(game *g, monster *z, int x, int y) +void trapfuncm::blade(monster *z, int x, int y) { if (g->u_see(z)) g->add_msg(_("A blade swings out and hacks the %s!"), z->name().c_str()); @@ -300,18 +300,18 @@ void trapfuncm::blade(game *g, monster *z, int x, int y) g->kill_mon(g->mon_at(x, y)); } -void trapfunc::snare_light(game *g, int x, int y) +void trapfunc::snare_light(int x, int y) { g->sound(x, y, 2, _("Snap!")); g->add_msg(_("A snare closes on your leg.")); g->u.add_memorial_log(_("Triggered a light snare.")); g->u.add_disease("lightsnare", rng(10, 20)); g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "string_36", 0); - g->m.spawn_item(x, y, "snare_trigger", 0); + g->m.spawn_item(x, y, "string_36"); + g->m.spawn_item(x, y, "snare_trigger"); } -void trapfuncm::snare_light(game *g, monster *z, int x, int y) +void trapfuncm::snare_light(monster *z, int x, int y) { bool seen = g->u_see(z); g->sound(x, y, 2, _("Snap!")); @@ -352,11 +352,11 @@ void trapfuncm::snare_light(game *g, monster *z, int x, int y) break; } g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "string_36", 0); - g->m.spawn_item(x, y, "snare_trigger", 0); + g->m.spawn_item(x, y, "string_36"); + g->m.spawn_item(x, y, "snare_trigger"); } -void trapfunc::snare_heavy(game *g, int x, int y) +void trapfunc::snare_heavy(int x, int y) { int side = one_in(2) ? 0 : 1; body_part hit = bp_legs; @@ -366,11 +366,11 @@ void trapfunc::snare_heavy(game *g, int x, int y) g->u.hit(g, bp_legs, side, 15, 20); g->u.add_disease("heavysnare", rng(20, 30)); g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "rope_6", 0); - g->m.spawn_item(x, y, "snare_trigger", 0); + g->m.spawn_item(x, y, "rope_6"); + g->m.spawn_item(x, y, "snare_trigger"); } -void trapfuncm::snare_heavy(game *g, monster *z, int x, int y) +void trapfuncm::snare_heavy(monster *z, int x, int y) { bool seen = g->u_see(z); g->sound(x, y, 4, _("Snap!")); @@ -422,11 +422,11 @@ void trapfuncm::snare_heavy(game *g, monster *z, int x, int y) break; } g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "snare_trigger", 0); - g->m.spawn_item(x, y, "rope_6", 0); + g->m.spawn_item(x, y, "snare_trigger"); + g->m.spawn_item(x, y, "rope_6"); } -void trapfunc::landmine(game *g, int x, int y) +void trapfunc::landmine(int x, int y) { g->add_msg(_("You trigger a land mine!")); g->u.add_memorial_log(_("Stepped on a land mine.")); @@ -434,7 +434,7 @@ void trapfunc::landmine(game *g, int x, int y) g->m.remove_trap(x, y); } -void trapfuncm::landmine(game *g, monster *z, int x, int y) +void trapfuncm::landmine(monster *z, int x, int y) { // tiny animals are too light to trigger land mines if (z->type->size == MS_TINY) @@ -446,7 +446,7 @@ void trapfuncm::landmine(game *g, monster *z, int x, int y) g->m.remove_trap(x, y); } -void trapfunc::boobytrap(game *g, int x, int y) +void trapfunc::boobytrap(int x, int y) { g->add_msg(_("You trigger a booby trap!")); g->u.add_memorial_log(_("Triggered a booby trap.")); @@ -454,7 +454,7 @@ void trapfunc::boobytrap(game *g, int x, int y) g->m.remove_trap(x, y); } -void trapfuncm::boobytrap(game *g, monster *z, int x, int y) +void trapfuncm::boobytrap(monster *z, int x, int y) { if (g->u_see(x, y)) g->add_msg(_("The %s triggers a booby trap!"), z->name().c_str()); @@ -462,7 +462,7 @@ void trapfuncm::boobytrap(game *g, monster *z, int x, int y) g->m.remove_trap(x, y); } -void trapfunc::telepad(game *g, int x, int y) +void trapfunc::telepad(int x, int y) { //~ the sound of a telepad functioning g->sound(x, y, 6, _("vvrrrRRMM*POP!*")); @@ -471,7 +471,7 @@ void trapfunc::telepad(game *g, int x, int y) g->teleport(); } -void trapfuncm::telepad(game *g, monster *z, int x, int y) +void trapfuncm::telepad(monster *z, int x, int y) { g->sound(x, y, 6, _("vvrrrRRMM*POP!*")); if (g->u_see(z)) @@ -500,7 +500,7 @@ void trapfuncm::telepad(game *g, monster *z, int x, int y) } } -void trapfunc::goo(game *g, int x, int y) +void trapfunc::goo(int x, int y) { g->add_msg(_("You step in a puddle of thick goo.")); g->u.add_memorial_log(_("Stepped into thick goo.")); @@ -513,7 +513,7 @@ void trapfunc::goo(game *g, int x, int y) g->m.remove_trap(x, y); } -void trapfuncm::goo(game *g, monster *z, int x, int y) +void trapfuncm::goo(monster *z, int x, int y) { if (z->type->id == "mon_blob") { z->speed += 15; @@ -526,7 +526,7 @@ void trapfuncm::goo(game *g, monster *z, int x, int y) g->m.remove_trap(x, y); } -void trapfunc::dissector(game *g, int x, int y) +void trapfunc::dissector(int x, int y) { g->add_msg(_("Electrical beams emit from the floor and slice your flesh!")); g->u.add_memorial_log(_("Stepped into a dissector.")); @@ -544,21 +544,21 @@ void trapfunc::dissector(game *g, int x, int y) g->u.hit(g, bp_feet, 1, 0, 10); } -void trapfuncm::dissector(game *g, monster *z, int x, int y) +void trapfuncm::dissector(monster *z, int x, int y) { g->sound(x, y, 10, _("BRZZZAP!")); if (z->hurt(60)) g->explode_mon(g->mon_at(x, y)); } -void trapfunc::pit(game *g, int x, int y) +void trapfunc::pit(int x, int y) { g->add_msg(_("You fall in a pit!")); g->u.add_memorial_log(_("Fell in a pit.")); if (g->u.has_trait("WINGS_BIRD")) { g->add_msg(_("You flap your wings and flutter down gracefully.")); } else { - float eff = pit_effectiveness(g, x, y); + float eff = pit_effectiveness(x, y); int dodge = g->u.dodge(g); int damage = eff * rng(10, 20) - rng(dodge, dodge * 5); if (damage > 0) { @@ -573,7 +573,7 @@ void trapfunc::pit(game *g, int x, int y) g->u.add_disease("in_pit", 1, true); } -void trapfuncm::pit(game *g, monster *z, int x, int y) +void trapfuncm::pit(monster *z, int x, int y) { // tiny animals aren't hurt by falling into pits if (z->type->size == MS_TINY) @@ -583,19 +583,19 @@ void trapfuncm::pit(game *g, monster *z, int x, int y) g->add_msg(_("The %s falls in a pit!"), z->name().c_str()); } - if (z->hurt(pit_effectiveness(g, x, y) * rng(10, 20))) { + if (z->hurt(pit_effectiveness(x, y) * rng(10, 20))) { g->kill_mon(g->mon_at(x, y)); } else { z->moves = -1000; } } -void trapfunc::pit_spikes(game *g, int x, int y) +void trapfunc::pit_spikes(int x, int y) { g->add_msg(_("You fall in a pit!")); g->u.add_memorial_log(_("Fell into a spiked pit.")); int dodge = g->u.dodge(g); - int damage = pit_effectiveness(g, x, y) * rng(20, 50); + int damage = pit_effectiveness(x, y) * rng(20, 50); if (g->u.has_trait("WINGS_BIRD")) { g->add_msg(_("You flap your wings and flutter down gracefully.")); } else if (0 == damage || rng(5, 30) < dodge) { @@ -623,7 +623,7 @@ void trapfunc::pit_spikes(game *g, int x, int y) g->m.add_trap(x, y, tr_pit); for (int i = 0; i < 4; i++) { // 4 spears to a pit if (one_in(3)) { - g->m.spawn_item(x, y, "spear_wood", g->turn); + g->m.spawn_item(x, y, "spear_wood"); } } } @@ -631,7 +631,7 @@ void trapfunc::pit_spikes(game *g, int x, int y) g->u.add_disease("in_pit", 1, true); } -void trapfuncm::pit_spikes(game *g, monster *z, int x, int y) +void trapfuncm::pit_spikes(monster *z, int x, int y) { // tiny animals aren't hurt by falling into spiked pits if (z->type->size == MS_TINY) return; @@ -655,13 +655,13 @@ void trapfuncm::pit_spikes(game *g, monster *z, int x, int y) g->m.add_trap(x, y, tr_pit); for (int i = 0; i < 4; i++) { // 4 spears to a pit if (one_in(3)) { - g->m.spawn_item(x, y, "spear_wood", g->turn); + g->m.spawn_item(x, y, "spear_wood"); } } } } -void trapfunc::lava(game *g, int x, int y) +void trapfunc::lava(int x, int y) { g->add_msg(_("The %s burns you horribly!"), g->m.tername(x, y).c_str()); g->u.add_memorial_log(_("Stepped into lava.")); @@ -673,7 +673,7 @@ void trapfunc::lava(game *g, int x, int y) // MATERIALS-TODO: use fire resistance -void trapfuncm::lava(game *g, monster *z, int x, int y) +void trapfuncm::lava(monster *z, int x, int y) { bool sees = g->u_see(z); if (sees) @@ -696,8 +696,26 @@ void trapfuncm::lava(game *g, monster *z, int x, int y) z->hurt(dam); } +// STUB +void trapfunc::portal(int x, int y) +{ + // TODO: make this do something? + (void)g; + (void)x; + (void)y; +} + +// STUB +void trapfuncm::portal(monster *z, int x, int y) +{ + // TODO: make this do something? + (void)g; + (void)z; + (void)x; + (void)y; +} -void trapfunc::sinkhole(game *g, int x, int y) +void trapfunc::sinkhole(int x, int y) { g->add_msg(_("You step into a sinkhole, and start to sink down!")); g->u.add_memorial_log(_("Stepped into a sinkhole.")); @@ -720,8 +738,7 @@ void trapfunc::sinkhole(game *g, int x, int y) if (safe.empty()) { g->add_msg(_("There's nowhere to pull yourself to, and you sink!")); g->u.use_amount("rope_30", 1); - g->m.spawn_item(g->u.posx + rng(-1, 1), g->u.posy + rng(-1, 1), - "rope_30", g->turn); + g->m.spawn_item(g->u.posx + rng(-1, 1), g->u.posy + rng(-1, 1), "rope_30"); g->m.add_trap(g->u.posx, g->u.posy, tr_pit); g->vertical_move(-1, true); } else { @@ -736,16 +753,14 @@ void trapfunc::sinkhole(game *g, int x, int y) g->add_msg(_("You're not strong enough to pull yourself out...")); g->u.moves -= 100; g->u.use_amount("rope_30", 1); - g->m.spawn_item(g->u.posx + rng(-1, 1), g->u.posy + rng(-1, 1), - "rope_30", g->turn); + g->m.spawn_item(g->u.posx + rng(-1, 1), g->u.posy + rng(-1, 1), "rope_30"); g->vertical_move(-1, true); } } else { g->add_msg(_("Your throw misses completely, and you sink!")); if (one_in((g->u.str_cur + g->u.dex_cur) / 3)) { g->u.use_amount("rope_30", 1); - g->m.spawn_item(g->u.posx + rng(-1, 1), g->u.posy + rng(-1, 1), - "rope_30", g->turn); + g->m.spawn_item(g->u.posx + rng(-1, 1), g->u.posy + rng(-1, 1), "rope_30"); } g->m.add_trap(g->u.posx, g->u.posy, tr_pit); g->vertical_move(-1, true); @@ -756,20 +771,30 @@ void trapfunc::sinkhole(game *g, int x, int y) } } -void trapfunc::ledge(game *g, int x, int y) +// STUB +void trapfuncm::sinkhole(monster *z, int x, int y) +{ + // TODO: make something exciting happen here + (void)g; + (void)z; + (void)x; + (void)y; +} + +void trapfunc::ledge(int x, int y) { g->add_msg(_("You fall down a level!")); g->u.add_memorial_log(_("Fell down a ledge.")); g->vertical_move(-1, true); } -void trapfuncm::ledge(game *g, monster *z, int x, int y) +void trapfuncm::ledge(monster *z, int x, int y) { g->add_msg(_("The %s falls down a level!"), z->name().c_str()); g->kill_mon(g->mon_at(x, y)); } -void trapfunc::temple_flood(game *g, int x, int y) +void trapfunc::temple_flood(int x, int y) { g->add_msg(_("You step on a loose tile, and water starts to flood the room!")); g->u.add_memorial_log(_("Triggered a flood trap.")); @@ -782,7 +807,7 @@ void trapfunc::temple_flood(game *g, int x, int y) g->add_event(EVENT_TEMPLE_FLOOD, g->turn + 3); } -void trapfunc::temple_toggle(game *g, int x, int y) +void trapfunc::temple_toggle(int x, int y) { g->add_msg(_("You hear the grinding of shifting rock.")); ter_id type = g->m.oldter(x, y); @@ -815,7 +840,7 @@ void trapfunc::temple_toggle(game *g, int x, int y) } } -void trapfunc::glow(game *g, int x, int y) +void trapfunc::glow(int x, int y) { if (one_in(3)) { g->add_msg(_("You're bathed in radiation!")); @@ -827,7 +852,7 @@ void trapfunc::glow(game *g, int x, int y) g->add_msg(_("Small flashes surround you.")); } -void trapfuncm::glow(game *g, monster *z, int x, int y) +void trapfuncm::glow(monster *z, int x, int y) { if (one_in(3)) { z->hurt( rng(5, 10) ); @@ -835,7 +860,7 @@ void trapfuncm::glow(game *g, monster *z, int x, int y) } } -void trapfunc::hum(game *g, int x, int y) +void trapfunc::hum(int x, int y) { int volume = rng(1, 200); std::string sfx; @@ -856,7 +881,7 @@ void trapfunc::hum(game *g, int x, int y) g->sound(x, y, volume, sfx); } -void trapfuncm::hum(game *g, monster *z, int x, int y) +void trapfuncm::hum(monster *z, int x, int y) { int volume = rng(1, 200); std::string sfx; @@ -875,7 +900,7 @@ void trapfuncm::hum(game *g, monster *z, int x, int y) g->sound(x, y, volume, sfx); } -void trapfunc::shadow(game *g, int x, int y) +void trapfunc::shadow(int x, int y) { g->u.add_memorial_log(_("Triggered a shadow trap.")); monster spawned(GetMType("mon_shadow")); @@ -900,19 +925,19 @@ void trapfunc::shadow(game *g, int x, int y) } } -void trapfunc::drain(game *g, int x, int y) +void trapfunc::drain(int x, int y) { g->u.add_memorial_log(_("Triggered a life-draining trap.")); g->add_msg(_("You feel your life force sapping away.")); g->u.hurtall(1); } -void trapfuncm::drain(game *g, monster *z, int x, int y) +void trapfuncm::drain(monster *z, int x, int y) { z->hurt(1); } -void trapfunc::snake(game *g, int x, int y) +void trapfunc::snake(int x, int y) { g->u.add_memorial_log(_("Triggered a shadow snake trap.")); if (one_in(3)) { @@ -943,7 +968,7 @@ void trapfunc::snake(game *g, int x, int y) g->m.remove_trap(x, y); } -void trapfuncm::snake(game *g, monster *z, int x, int y) +void trapfuncm::snake(monster *z, int x, int y) { g->sound(x, y, 10, _("ssssssss")); if (one_in(6)) { @@ -993,9 +1018,6 @@ trap_id trap_id_from_string(std::string trap_name) { if ("beartrap_buried" == trap_name) { return tr_beartrap_buried; } - if ("snare" == trap_name) { - return tr_snare; - } if ("nailboard" == trap_name) { return tr_nailboard; } diff --git a/tutorial.cpp b/src/tutorial.cpp similarity index 97% rename from tutorial.cpp rename to src/tutorial.cpp index ef7821f1ffa6b..a037364371814 100644 --- a/tutorial.cpp +++ b/src/tutorial.cpp @@ -36,7 +36,7 @@ bool tutorial_game::init(game *g) g->cur_om->make_tutorial(); g->cur_om->save(); g->u.toggle_trait("QUICK"); - g->u.inv.push_back(item(g->itypes["lighter"], 0, 'e')); + g->u.inv.push_back(item(itypes["lighter"], 0, 'e')); g->u.skillLevel("gun").level(5); g->u.skillLevel("melee").level(5); // Init the starting map at g location. @@ -166,7 +166,7 @@ void tutorial_game::post_action(game *g, action_id act) break; case ACTION_WEAR: { - itype *it = g->itypes[ g->u.last_item]; + itype *it = itypes[ g->u.last_item]; if (it->is_armor()) { it_armor *armor = dynamic_cast(it); if (armor->coverage >= 2 || armor->thickness >= 2) @@ -187,7 +187,7 @@ void tutorial_game::post_action(game *g, action_id act) add_message(g, LESSON_INTERACT); // Fall through to... case ACTION_PICKUP: { - itype *it = g->itypes[ g->u.last_item ]; + itype *it = itypes[ g->u.last_item ]; if (it->is_armor()) add_message(g, LESSON_GOT_ARMOR); else if (it->is_gun()) diff --git a/tutorial.h b/src/tutorial.h similarity index 100% rename from tutorial.h rename to src/tutorial.h diff --git a/ui.cpp b/src/ui.cpp similarity index 100% rename from ui.cpp rename to src/ui.cpp diff --git a/ui.h b/src/ui.h similarity index 95% rename from ui.h rename to src/ui.h index 37e9413052f16..6d3abea52a7b9 100644 --- a/ui.h +++ b/src/ui.h @@ -89,10 +89,12 @@ class uimenu_callback { void setptr(void * ptr) { myptr = ptr; } - virtual void select(int entnum, uimenu * menu) {}; - virtual bool key(int key, int entnum, uimenu * menu) { return false; }; - virtual void refresh(uimenu * menu) {}; - virtual void redraw(uimenu * menu) {}; + virtual void select(int /*entnum*/, uimenu *) {}; + virtual bool key(int /*key*/, int /*entnum*/, uimenu *) { + return false; + }; + virtual void refresh(uimenu *) {}; + virtual void redraw(uimenu *) {}; virtual ~uimenu_callback() {}; }; /* diff --git a/src/uistate.h b/src/uistate.h new file mode 100644 index 0000000000000..83b1634ba7fb0 --- /dev/null +++ b/src/uistate.h @@ -0,0 +1,145 @@ +#ifndef _UISTATE_H_ +#define _UISTATE_H_ +#include "json.h" +/* + centralized depot for trivial ui data such as sorting, string_input_popup history, etc. + To use this, see the ****notes**** below +*/ +class uistatedata : public JsonSerializer, public JsonDeserializer +{ +public: +/**** declare your variable here. It can be anything, really *****/ + int wishitem_selected; + int wishmutate_selected; + int wishmonster_selected; + int iuse_knife_selected; + int adv_inv_leftsort; + int adv_inv_rightsort; + int adv_inv_leftarea; + int adv_inv_rightarea; + int adv_inv_leftindex; + int adv_inv_rightindex; + int adv_inv_leftpage; + int adv_inv_rightpage; + int adv_inv_last_popup_dest; + std::string adv_inv_leftfilter; + std::string adv_inv_rightfilter; + + bool editmap_nsa_viewmode; // true: ignore LOS and lighting + bool debug_ranged; + point adv_inv_last_coords; + int last_inv_start, last_inv_sel; + int list_item_mon; + /* to save input history and make accessible via 'up', you don't need to edit this file, just run: + output = string_input_popup(str, int, str, str, std::string("set_a_unique_identifier_here") ); + */ + + std::map*> input_history; + + std::map lastreload; // last typeid used when reloading ammotype + + bool _testing_save; + bool _really_testing_save; + + uistatedata() { +/**** this will set a default value on startup, however to save, see below ****/ + wishitem_selected = 0; + wishmutate_selected = 0; + wishmonster_selected = 0; + iuse_knife_selected = 0; + adv_inv_leftsort = 1; + adv_inv_rightsort = 1; + adv_inv_leftarea = 5; + adv_inv_rightarea = 0; + adv_inv_leftindex = 0; + adv_inv_rightindex=0; + adv_inv_leftpage=0; + adv_inv_rightpage=0; + adv_inv_last_popup_dest=0; + adv_inv_last_coords.x=-999; + adv_inv_last_coords.y=-999; + adv_inv_leftfilter=""; + adv_inv_rightfilter=""; + editmap_nsa_viewmode = false; + last_inv_start = -2; + last_inv_sel = -2; + list_item_mon = 1; + // internal stuff + _testing_save = true; // internal: whine on json errors. set false if no complaints in 2 weeks. + _really_testing_save = false; // internal: spammy + }; + + std::vector * gethistory(std::string id) { + std::map*>::iterator it=input_history.find(id); + if(it == input_history.end() || it->second == NULL ) { + input_history[id]=new std::vector; + it=input_history.find(id); + } + return it->second; + } + + using JsonSerializer::serialize; + void serialize(JsonOut &json) const + { + const int input_history_save_max = 25; + json.start_object(); + +/**** if you want to save whatever so it's whatever when the game is started next, declare here and.... ****/ + json.member("adv_inv_leftsort", adv_inv_leftsort); + json.member("adv_inv_rightsort", adv_inv_rightsort); + json.member("adv_inv_leftarea", adv_inv_leftarea); + json.member("adv_inv_rightarea", adv_inv_rightarea); + json.member("adv_inv_last_popup_dest", adv_inv_last_popup_dest); + json.member("editmap_nsa_viewmode", editmap_nsa_viewmode); + json.member("list_item_mon", list_item_mon); + + json.member("input_history"); + json.start_object(); + std::map*>::const_iterator it; + for (it = input_history.begin(); it != input_history.end(); ++it) { + if (it->second == NULL) { + continue; + } + json.member(it->first); + json.start_array(); + int save_start = 0; + if (it->second->size() > input_history_save_max) { + save_start = it->second->size() - input_history_save_max; + } + for (std::vector::const_iterator hit = it->second->begin()+save_start; hit != it->second->end(); ++hit ) { + json.write(*hit); + } + json.end_array(); + } + json.end_object(); // input_history + + json.end_object(); + }; + + void deserialize(JsonIn &jsin) + { + JsonObject jo = jsin.get_object(); +/**** here ****/ + jo.read_into("adv_inv_leftsort", adv_inv_leftsort); + jo.read_into("adv_inv_rightsort", adv_inv_rightsort); + jo.read_into("adv_inv_leftarea", adv_inv_leftarea); + jo.read_into("adv_inv_rightarea", adv_inv_rightarea); + jo.read_into("adv_inv_last_popup_dest", adv_inv_last_popup_dest); + jo.read_into("editmap_nsa_viewmode", editmap_nsa_viewmode); + jo.read_into("list_item_mon", list_item_mon); + + JsonObject inhist = jo.get_object("input_history"); + std::set inhist_members = inhist.get_member_names(); + for (std::set::iterator it = inhist_members.begin(); + it != inhist_members.end(); ++it) { + JsonArray ja = inhist.get_array(*it); + std::vector *v = gethistory(*it); + v->clear(); + while (ja.has_more()) { + v->push_back(ja.next_string()); + } + } + }; +}; +extern uistatedata uistate; +#endif diff --git a/veh_interact.cpp b/src/veh_interact.cpp similarity index 69% rename from veh_interact.cpp rename to src/veh_interact.cpp index 61bd0bbcff962..87bb13d007ac9 100644 --- a/veh_interact.cpp +++ b/src/veh_interact.cpp @@ -8,6 +8,14 @@ #include "crafting.h" #include "options.h" #include "debug.h" +#include + +#ifdef _MSC_VER +#include +#define ISNAN _isnan +#else +#define ISNAN std::isnan +#endif /** * Creates a blank veh_interact window. @@ -18,9 +26,14 @@ veh_interact::veh_interact () ddx = 0; ddy = 0; sel_cmd = ' '; - sel_type=0; + sel_type = 0; sel_vpart_info = NULL; sel_vehicle_part = NULL; + + totalDurabilityColor = c_green; + worstDurabilityColor = c_green; + durabilityPercent = 100; + mostDamagedPart = -1; } /** @@ -32,6 +45,7 @@ veh_interact::veh_interact () void veh_interact::exec (game *gm, vehicle *v, int x, int y) { veh = v; + countDurability(); // winw1 winw2 winw3 // winh1 | | // ------+-------+------ @@ -49,8 +63,8 @@ void veh_interact::exec (game *gm, vehicle *v, int x, int y) // +-------------------------+ int winw1 = 12; int winw2 = 35; - int winh1 = 3; - int winh2 = 13; + int winh1 = 4; + int winh2 = 12; int winw3 = FULL_SCREEN_WIDTH - winw1 - winw2 - 4; int winh3 = FULL_SCREEN_HEIGHT - winh1 - winh2 - 2; int winx1 = winw1; @@ -71,8 +85,8 @@ void veh_interact::exec (game *gm, vehicle *v, int x, int y) list_h = winh2 - 1; list_w = winw3; - const int iOffsetX = 1 + ((TERMX > FULL_SCREEN_WIDTH) ? (TERMX-FULL_SCREEN_WIDTH)/2 : 0); - const int iOffsetY = 1 + ((TERMY > FULL_SCREEN_HEIGHT) ? (TERMY-FULL_SCREEN_HEIGHT)/2 : 0); + const int iOffsetX = 1 + ((TERMX > FULL_SCREEN_WIDTH) ? (TERMX - FULL_SCREEN_WIDTH) / 2 : 0); + const int iOffsetY = 1 + ((TERMY > FULL_SCREEN_HEIGHT) ? (TERMY - FULL_SCREEN_HEIGHT) / 2 : 0); page_size = list_h; @@ -106,7 +120,7 @@ void veh_interact::exec (game *gm, vehicle *v, int x, int y) // Two lines dividing the vertical menu sections. for (int i = 0; i < FULL_SCREEN_WIDTH; i++) { mvwputch( w_grid, winy1, i, c_dkgray, LINE_OXOX ); - mvwputch( w_grid, winy2-1, i, c_dkgray, LINE_OXOX ); + mvwputch( w_grid, winy2 - 1, i, c_dkgray, LINE_OXOX ); } // Fix up the line intersections. mvwputch( w_grid, winy1, winx1, c_dkgray, LINE_OXXX ); @@ -118,18 +132,19 @@ void veh_interact::exec (game *gm, vehicle *v, int x, int y) crafting_inv = g->crafting_inventory(&g->u); - int charges = static_cast(g->itypes["welder"])->charges_per_use; - int charges_crude = static_cast(g->itypes["welder_crude"])->charges_per_use; + int charges = static_cast(itypes["welder"])->charges_per_use; + int charges_crude = static_cast(itypes["welder_crude"])->charges_per_use; has_wrench = crafting_inv.has_amount("wrench", 1) || - crafting_inv.has_amount("toolset", 1); + crafting_inv.has_amount("toolset", 1); has_hacksaw = crafting_inv.has_amount("hacksaw", 1) || - crafting_inv.has_amount("toolset", 1); + crafting_inv.has_amount("toolset", 1); has_welder = (crafting_inv.has_amount("welder", 1) && crafting_inv.has_charges("welder", charges)) || - (crafting_inv.has_amount("welder_crude", 1) && + (crafting_inv.has_amount("welder_crude", 1) && crafting_inv.has_charges("welder_crude", charges_crude)) || - (crafting_inv.has_amount("toolset", 1) && - crafting_inv.has_charges("toolset", charges/20)); + (crafting_inv.has_amount("toolset", 1) && + crafting_inv.has_charges("toolset", charges / 20)); + has_duct_tape = (crafting_inv.has_charges("duct_tape", DUCT_TAPE_USED)); has_jack = crafting_inv.has_amount("jack", 1); has_siphon = crafting_inv.has_amount("hose", 1); @@ -143,8 +158,7 @@ void veh_interact::exec (game *gm, vehicle *v, int x, int y) display_veh (); move_cursor (0, 0); bool finish = false; - while (!finish) - { + while (!finish) { char ch = input(); // See keypress.h int dx, dy; get_direction (dx, dy, ch); @@ -153,24 +167,36 @@ void veh_interact::exec (game *gm, vehicle *v, int x, int y) } else { if (dx != -2 && (dx || dy)) { move_cursor(dx, dy); - } - else - { + } else { task_reason reason = cant_do(ch); display_mode (ch); - switch (ch) - { - case 'i': do_install(reason); break; - case 'r': do_repair(reason); break; - case 'f': do_refill(reason); break; - case 'o': do_remove(reason); break; - case 'e': do_rename(reason); break; - case 's': do_siphon(reason); break; - case 'c': do_tirechange(reason); break; - case 'd': do_drain(reason); break; + switch (ch) { + case 'i': + do_install(reason); + break; + case 'r': + do_repair(reason); + break; + case 'f': + do_refill(reason); + break; + case 'o': + do_remove(reason); + break; + case 'e': + do_rename(reason); + break; + case 's': + do_siphon(reason); + break; + case 'c': + do_tirechange(reason); + break; + case 'd': + do_drain(reason); + break; } - if (sel_cmd != ' ') - { + if (sel_cmd != ' ') { finish = true; } display_mode (' '); @@ -211,16 +237,16 @@ task_reason veh_interact::cant_do (char mode) bool has_tools = false; bool part_free = true; bool has_skill = true; + bool can_remove_wheel = has_wrench && has_jack && wheel; - switch (mode) - { + switch (mode) { case 'i': // install mode valid_target = can_mount.size() > 0 && 0 == veh->tags.count("convertible"); - has_tools = has_wrench && has_welder; + has_tools = has_wrench && (has_welder || has_duct_tape); break; case 'r': // repair mode valid_target = need_repair.size() > 0 && cpart >= 0; - has_tools = has_welder; + has_tools = has_welder || has_duct_tape; break; case 'f': // refill mode valid_target = (ptank != NULL && ptank->hp > 0); @@ -228,9 +254,9 @@ task_reason veh_interact::cant_do (char mode) break; case 'o': // remove mode valid_target = cpart >= 0 && 0 == veh->tags.count("convertible"); - has_tools = has_wrench && has_hacksaw; + has_tools = (has_wrench && has_hacksaw) || can_remove_wheel; part_free = parts_here.size() > 1 || (cpart >= 0 && veh->can_unmount(cpart)); - has_skill = g->u.skillLevel("mechanics") >= 2; + has_skill = g->u.skillLevel("mechanics") >= 2 || can_remove_wheel; break; case 's': // siphon mode valid_target = veh->fuel_left("gasoline") > 0; @@ -272,23 +298,23 @@ void veh_interact::do_install(task_reason reason) { werase (w_msg); int msg_width = getmaxx(w_msg); - if (g->u.morale_level() < MIN_MORALE_CRAFT) - { // See morale.h + if (g->u.morale_level() < MIN_MORALE_CRAFT) { + // See morale.h mvwprintz(w_msg, 0, 1, c_ltred, _("Your morale is too low to construct...")); wrefresh (w_msg); return; } - switch (reason) - { + switch (reason) { case INVALID_TARGET: mvwprintz(w_msg, 0, 1, c_ltred, _("Cannot install any part here.")); wrefresh (w_msg); return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, - _("You need a wrench and a powered welder to install parts."), + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, + _("You need a wrench and either a powered welder or duct tape to install parts."), has_wrench ? "ltgreen" : "red", - has_welder ? "ltgreen" : "red"); + has_welder ? "ltgreen" : "red", + has_duct_tape ? "ltgreen" : "red"); wrefresh (w_msg); return; } @@ -297,38 +323,36 @@ void veh_interact::do_install(task_reason reason) int pos = 0; int engines = 0; int dif_eng = 0; - for (int p = 0; p < veh->parts.size(); p++) - { - if (veh->part_flag (p, "ENGINE")) - { + for (int p = 0; p < veh->parts.size(); p++) { + if (veh->part_flag (p, "ENGINE")) { engines++; dif_eng = dif_eng / 2 + 12; } } - while (true) - { + while (true) { sel_vpart_info = &(can_mount[pos]); display_list (pos, can_mount); itype_id itm = sel_vpart_info->item; bool has_comps = crafting_inv.has_amount(itm, 1); bool has_skill = g->u.skillLevel("mechanics") >= sel_vpart_info->difficulty; - bool has_tools = has_welder && has_wrench; + bool has_tools = (has_welder || has_duct_tape) && has_wrench; bool eng = sel_vpart_info->has_flag("ENGINE"); bool has_skill2 = !eng || (g->u.skillLevel("mechanics") >= dif_eng); std::string engine_string = ""; - if (engines && eng) // already has engine - { - engine_string = string_format(_(" You also need level %2$d skill in mechanics to install additional engines."), - has_skill2 ? "ltgreen" : "red", - dif_eng); + if (engines && eng) { // already has engine + engine_string = string_format( + _(" You also need level %2$d skill in mechanics to install additional engines."), + has_skill2 ? "ltgreen" : "red", + dif_eng); } werase (w_msg); - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, - _("Needs %2$s, a wrench, a powered_welder, and level %6$d skill in mechanics.%7$s"), + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, + _("Needs %2$s, a wrench, either a powered welder or duct tape, and level %7$d skill in mechanics.%8$s"), has_comps ? "ltgreen" : "red", - g->itypes[itm]->name.c_str(), + itypes[itm]->name.c_str(), has_wrench ? "ltgreen" : "red", has_welder ? "ltgreen" : "red", + has_duct_tape ? "ltgreen" : "red", has_skill ? "ltgreen" : "red", sel_vpart_info->difficulty, engine_string.c_str()); @@ -336,30 +360,22 @@ void veh_interact::do_install(task_reason reason) char ch = input(); // See keypress.h int dx, dy; get_direction (dx, dy, ch); - if ((ch == '\n' || ch == ' ') && has_comps && has_tools && has_skill && has_skill2) - { + if ((ch == '\n' || ch == ' ') && has_comps && has_tools && has_skill && has_skill2) { sel_cmd = 'i'; return; - } - else - { - if (ch == KEY_ESCAPE || ch == 'q' ) - { + } else { + if (ch == KEY_ESCAPE || ch == 'q' ) { werase (w_list); wrefresh (w_list); werase (w_msg); break; } } - if (dy == -1 || dy == 1) - { + if (dy == -1 || dy == 1) { pos += dy; - if (pos < 0) - { - pos = can_mount.size()-1; - } - else if (pos >= can_mount.size()) - { + if (pos < 0) { + pos = can_mount.size() - 1; + } else if (pos >= can_mount.size()) { pos = 0; } } @@ -375,81 +391,80 @@ void veh_interact::do_repair(task_reason reason) { werase (w_msg); int msg_width = getmaxx(w_msg); - if (g->u.morale_level() < MIN_MORALE_CRAFT) - { // See morale.h + if (g->u.morale_level() < MIN_MORALE_CRAFT) { + // See morale.h mvwprintz(w_msg, 0, 1, c_ltred, _("Your morale is too low to construct...")); wrefresh (w_msg); return; } - switch (reason) - { + switch (reason) { case INVALID_TARGET: - mvwprintz(w_msg, 0, 1, c_ltred, _("There are no damaged parts here.")); - wrefresh (w_msg); + if(mostDamagedPart != -1) { + int p = mostDamagedPart; // for convenience + + int xOffset = veh->parts[p].mount_dy + ddy; + int yOffset = -(veh->parts[p].mount_dx + ddx); + + move_cursor(xOffset, yOffset); + } else { + mvwprintz(w_msg, 0, 1, c_ltred, _("There are no damaged parts on this vehicle.")); + wrefresh (w_msg); + } return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, - _("You need a powered welder to repair."), - has_welder ? "ltgreen" : "red"); + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, + _("You need a powered welder or duct tape to repair."), + has_welder ? "ltgreen" : "red", + has_duct_tape ? "ltgreen" : "red"); wrefresh (w_msg); return; } mvwprintz(w_mode, 0, 1, c_ltgray, _("Choose a part here to repair:")); wrefresh (w_mode); int pos = 0; - while (true) - { + while (true) { sel_vehicle_part = &veh->parts[parts_here[need_repair[pos]]]; werase (w_parts); veh->print_part_desc (w_parts, 0, parts_w, cpart, need_repair[pos]); wrefresh (w_parts); werase (w_msg); bool has_comps = true; - int dif = vehicle_part_types[sel_vehicle_part->id].difficulty + (sel_vehicle_part->hp <= 0? 0 : 2); + int dif = vehicle_part_types[sel_vehicle_part->id].difficulty + ((sel_vehicle_part->hp <= 0) ? 0 : 2); bool has_skill = g->u.skillLevel("mechanics") >= dif; - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, _("You need level %2$d skill in mechanics."), has_skill ? "ltgreen" : "red", dif); - if (sel_vehicle_part->hp <= 0) - { + if (sel_vehicle_part->hp <= 0) { itype_id itm = vehicle_part_types[sel_vehicle_part->id].item; has_comps = crafting_inv.has_amount(itm, 1); - fold_and_print(w_msg, 1, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 1, 1, msg_width - 2, c_ltgray, _("You also need a wrench and %3$s to replace broken one."), has_wrench ? "ltgreen" : "red", has_comps ? "ltgreen" : "red", - g->itypes[itm]->name.c_str()); + itypes[itm]->name.c_str()); } wrefresh (w_msg); char ch = input(); // See keypress.h int dx, dy; get_direction (dx, dy, ch); - if ((ch == '\n' || ch == ' ') && - has_comps && - (sel_vehicle_part->hp > 0 || has_wrench) && has_skill) - { + if ((ch == '\n' || ch == ' ') && + has_comps && + (sel_vehicle_part->hp > 0 || has_wrench) && has_skill) { sel_cmd = 'r'; return; + } else if (ch == KEY_ESCAPE || ch == 'q' ) { + werase (w_parts); + veh->print_part_desc (w_parts, 0, parts_w, cpart, -1); + wrefresh (w_parts); + werase (w_msg); + break; } - else - if (ch == KEY_ESCAPE || ch == 'q' ) - { - werase (w_parts); - veh->print_part_desc (w_parts, 0, parts_w, cpart, -1); - wrefresh (w_parts); - werase (w_msg); - break; - } - if (dy == -1 || dy == 1) - { + if (dy == -1 || dy == 1) { pos += dy; - if(pos >= need_repair.size()) - { + if(pos >= need_repair.size()) { pos = 0; - } - else if(pos < 0) - { + } else if(pos < 0) { pos = need_repair.size() - 1; } } @@ -465,14 +480,13 @@ void veh_interact::do_refill(task_reason reason) { werase (w_msg); int msg_width = getmaxx(w_msg); - switch (reason) - { + switch (reason) { case INVALID_TARGET: mvwprintz(w_msg, 0, 1, c_ltred, _("There's no fuel tank here.")); wrefresh (w_msg); return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, _("You need %s."), ammo_name(vehicle_part_types[ptank->id].fuel_type).c_str()); wrefresh (w_msg); @@ -493,26 +507,27 @@ void veh_interact::do_remove(task_reason reason) { werase (w_msg); int msg_width = getmaxx(w_msg); - if (g->u.morale_level() < MIN_MORALE_CRAFT) - { // See morale.h + if (g->u.morale_level() < MIN_MORALE_CRAFT) { + // See morale.h mvwprintz(w_msg, 0, 1, c_ltred, _("Your morale is too low to construct...")); wrefresh (w_msg); return; } - switch (reason) - { + bool can_hacksaw = has_wrench && has_hacksaw && + g->u.skillLevel("mechanics") >= 2; + switch (reason) { case INVALID_TARGET: mvwprintz(w_msg, 0, 1, c_ltred, _("No parts here.")); wrefresh (w_msg); return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, _("You need a wrench and a hacksaw to remove parts."), has_wrench ? "ltgreen" : "red", has_hacksaw ? "ltgreen" : "red"); if(wheel) { - fold_and_print(w_msg, 1, 1, msg_width-2, c_ltgray, - _("To change a wheel you need a wrench and a jack."), + fold_and_print(w_msg, 1, 1, msg_width - 2, c_ltgray, + _("To remove a wheel you need a wrench and a jack."), has_wrench ? "ltgreen" : "red", has_jack ? "ltgreen" : "red"); } @@ -532,45 +547,47 @@ void veh_interact::do_remove(task_reason reason) wrefresh (w_mode); int first = 0; int pos = first; - while (true) - { + while (true) { sel_vehicle_part = &veh->parts[parts_here[pos]]; + sel_vpart_info = &(vehicle_part_types[sel_vehicle_part->id]); + bool is_wheel = sel_vpart_info->has_flag("WHEEL"); werase (w_parts); veh->print_part_desc (w_parts, 0, parts_w, cpart, pos); wrefresh (w_parts); char ch = input(); // See keypress.h int dx, dy; get_direction (dx, dy, ch); - if (ch == '\n' || ch == ' ') - { - if(veh->can_unmount(parts_here[pos])) { - sel_cmd = 'o'; - return; + if (ch == '\n' || ch == ' ') { + if (veh->can_unmount(parts_here[pos])) { + if (can_hacksaw || is_wheel) { + sel_cmd = 'o'; + return; + } else { + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, + _("You need a wrench and a hacksaw to remove parts."), + has_wrench ? "ltgreen" : "red", + has_hacksaw ? "ltgreen" : "red"); + wrefresh (w_msg); + return; + } } else { mvwprintz(w_msg, 0, 1, c_ltred, - _("You cannot remove that part while something is attached to it.")); + _("You cannot remove that part while something is attached to it.")); wrefresh (w_msg); return; } + } else if (ch == KEY_ESCAPE || ch == 'q' ) { + werase (w_parts); + veh->print_part_desc (w_parts, 0, parts_w, cpart, -1); + wrefresh (w_parts); + werase (w_msg); + break; } - else - if (ch == KEY_ESCAPE || ch == 'q' ) - { - werase (w_parts); - veh->print_part_desc (w_parts, 0, parts_w, cpart, -1); - wrefresh (w_parts); - werase (w_msg); - break; - } - if (dy == -1 || dy == 1) - { + if (dy == -1 || dy == 1) { pos += dy; - if (pos < first) - { - pos = parts_here.size()-1; - } - else if (pos >= parts_here.size()) - { + if (pos < first) { + pos = parts_here.size() - 1; + } else if (pos >= parts_here.size()) { pos = first; } } @@ -586,14 +603,13 @@ void veh_interact::do_siphon(task_reason reason) { werase (w_msg); int msg_width = getmaxx(w_msg); - switch (reason) - { + switch (reason) { case INVALID_TARGET: mvwprintz(w_msg, 0, 1, c_ltred, _("The vehicle has no gasoline to siphon.")); wrefresh (w_msg); return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, _("You need a hose to siphon fuel.")); wrefresh (w_msg); return; @@ -616,17 +632,17 @@ void veh_interact::do_tirechange(task_reason reason) wrefresh (w_msg); return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, _("To change a wheel you need a wrench and a jack."), has_wrench ? "ltgreen" : "red", has_jack ? "ltgreen" : "red"); + wrefresh (w_msg); return; } mvwprintz(w_mode, 0, 1, c_ltgray, _("Choose wheel to use as replacement:")); wrefresh (w_mode); int pos = 0; - while (true) - { + while (true) { sel_vpart_info = &(wheel_types[pos]); bool is_wheel = sel_vpart_info->has_flag("WHEEL"); display_list (pos, wheel_types); @@ -638,30 +654,22 @@ void veh_interact::do_tirechange(task_reason reason) char ch = input(); // See keypress.h int dx, dy; get_direction (dx, dy, ch); - if ((ch == '\n' || ch == ' ') && has_comps && has_tools && is_wheel) - { + if ((ch == '\n' || ch == ' ') && has_comps && has_tools && is_wheel) { sel_cmd = 'c'; return; - } - else - { - if (ch == KEY_ESCAPE || ch == 'q' ) - { + } else { + if (ch == KEY_ESCAPE || ch == 'q' ) { werase (w_list); wrefresh (w_list); werase (w_msg); break; } } - if (dy == -1 || dy == 1) - { + if (dy == -1 || dy == 1) { pos += dy; - if (pos < 0) - { - pos = wheel_types.size()-1; - } - else if (pos >= wheel_types.size()) - { + if (pos < 0) { + pos = wheel_types.size() - 1; + } else if (pos >= wheel_types.size()) { pos = 0; } } @@ -677,14 +685,13 @@ void veh_interact::do_drain(task_reason reason) { werase (w_msg); int msg_width = getmaxx(w_msg); - switch (reason) - { + switch (reason) { case INVALID_TARGET: mvwprintz(w_msg, 0, 1, c_ltred, _("The vehicle has no water to siphon.") ); wrefresh (w_msg); return; case LACK_TOOLS: - fold_and_print(w_msg, 0, 1, msg_width-2, c_ltgray, + fold_and_print(w_msg, 0, 1, msg_width - 2, c_ltgray, _("You need a hose to siphon water.") ); wrefresh (w_msg); return; @@ -701,6 +708,9 @@ void veh_interact::do_rename(task_reason reason) std::string name = string_input_popup(_("Enter new vehicle name:"), 20); if(name.length() > 0) { (veh->name = name); + if (veh->tracking_on) { + g->cur_om->vehicles[veh->om_id].name = name; + } } werase(w_stats); werase(w_grid); @@ -742,8 +752,7 @@ void veh_interact::move_cursor (int dx, int dy) int vehy = veh->global_y() + vy; bool obstruct = g->m.move_cost_ter_furn (vehx, vehy) == 0; vehicle *oveh = g->m.veh_at (vehx, vehy); - if (oveh && oveh != veh) - { + if (oveh && oveh != veh) { obstruct = true; } nc_color col = cpart >= 0 ? veh->part_color (cpart) : c_black; @@ -755,14 +764,12 @@ void veh_interact::move_cursor (int dx, int dy) wrefresh (w_parts); can_mount.clear(); - if (!obstruct) - { + if (!obstruct) { for (std::map::iterator - part_type_iterator = vehicle_part_types.begin(); - part_type_iterator != vehicle_part_types.end(); - ++part_type_iterator) { - if (veh->can_mount (vdx, vdy, part_type_iterator->first)) - { + part_type_iterator = vehicle_part_types.begin(); + part_type_iterator != vehicle_part_types.end(); + ++part_type_iterator) { + if (veh->can_mount (vdx, vdy, part_type_iterator->first)) { can_mount.push_back (part_type_iterator->second); } } @@ -771,11 +778,10 @@ void veh_interact::move_cursor (int dx, int dy) //Only build the wheel list once if(wheel_types.empty()) { for (std::map::iterator - part_type_iterator = vehicle_part_types.begin(); - part_type_iterator != vehicle_part_types.end(); - ++part_type_iterator) { - if (part_type_iterator->second.has_flag("WHEEL")) - { + part_type_iterator = vehicle_part_types.begin(); + part_type_iterator != vehicle_part_types.end(); + ++part_type_iterator) { + if (part_type_iterator->second.has_flag("WHEEL")) { wheel_types.push_back (part_type_iterator->second); } } @@ -785,22 +791,17 @@ void veh_interact::move_cursor (int dx, int dy) parts_here.clear(); ptank = NULL; wheel = NULL; - if (cpart >= 0) - { + if (cpart >= 0) { parts_here = veh->parts_at_relative(veh->parts[cpart].mount_dx, veh->parts[cpart].mount_dy); - for (int i = 0; i < parts_here.size(); i++) - { + for (int i = 0; i < parts_here.size(); i++) { int p = parts_here[i]; - if (veh->parts[p].hp < veh->part_info(p).durability) - { + if (veh->parts[p].hp < veh->part_info(p).durability) { need_repair.push_back (i); } - if (veh->part_flag(p, "FUEL_TANK") && veh->parts[p].amount < veh->part_info(p).size) - { + if (veh->part_flag(p, "FUEL_TANK") && veh->parts[p].amount < veh->part_info(p).size) { ptank = &veh->parts[p]; } - if (veh->part_flag(p, "WHEEL")) - { + if (veh->part_flag(p, "WHEEL")) { wheel = &veh->parts[p]; } } @@ -819,8 +820,7 @@ void veh_interact::display_veh () werase(w_disp); //Iterate over structural parts so we only hit each square once std::vector structural_parts = veh->all_parts_at_location("structure"); - for (int i = 0; i < structural_parts.size(); i++) - { + for (int i = 0; i < structural_parts.size(); i++) { const int p = structural_parts[i]; long sym = veh->part_sym (p); nc_color col = veh->part_color (p); @@ -830,7 +830,7 @@ void veh_interact::display_veh () col = hilite(col); cpart = p; } - mvwputch (w_disp, 6+y, 6+x, col, special_symbol(sym)); + mvwputch (w_disp, 6 + y, 6 + x, col, special_symbol(sym)); } wrefresh (w_disp); } @@ -856,7 +856,7 @@ void veh_interact::display_stats () weight_factor = 2.2f; } mvwprintz(w_stats, 0, 1, c_ltgray, _("Name: ")); - mvwprintz(w_stats, 0, 1+utf8_width(_("Name: ")), c_ltgreen, veh->name.c_str()); + mvwprintz(w_stats, 0, 1 + utf8_width(_("Name: ")), c_ltgreen, veh->name.c_str()); fold_and_print(w_stats, 1, 1, second_column, c_ltgray, _("Safe speed: %3d %s"), int(veh->safe_velocity(false) * speed_factor), speed_units.c_str()); @@ -867,14 +867,14 @@ void veh_interact::display_stats () _("Acceleration: %3d %s/t"), int(veh->acceleration(false) * speed_factor), speed_units.c_str()); fold_and_print(w_stats, 4, 1, second_column, c_ltgray, - _("Mass: %5d %s"), + _("Mass: %5d %s"), int(veh->total_mass() * weight_factor), weight_units.c_str()); if (conf) { - fold_and_print(w_stats, 5, 1, second_column, c_ltgray, - _("Wheels: enough")); + fold_and_print(w_stats, 5, second_column, third_column, c_ltgray, + _("Wheels: enough")); } else { - fold_and_print(w_stats, 5, 1, second_column, c_ltgray, - _("Wheels: lack")); + fold_and_print(w_stats, 5, second_column, third_column, c_ltgray, + _("Wheels: lack")); } fold_and_print(w_stats, 2, second_column, third_column, c_ltgray, @@ -900,15 +900,36 @@ void veh_interact::display_stats () } mvwprintz(w_stats, 1, fuel_usage_x++, fuel_colors[i], "%d", fuel_usage); if (fuel_usage > 9) { - fuel_usage_x++; + fuel_usage_x++; } if (fuel_usage > 99) { - fuel_usage_x++; + fuel_usage_x++; } first = false; } } veh->print_fuel_indicator (w_stats, 1, third_column, true, true); + + // Write the overall damage + int column = 1; + + mvwprintz(w_stats, 5, 1, c_ltgray, _("Status: ")); + column += utf8_width(_("Status: ")) + 1; + fold_and_print(w_stats, 5, column, third_column, totalDurabilityColor, totalDurabilityText.c_str()); + + // Write the most damaged part + if (mostDamagedPart != -1) { + std::string partName; + mvwprintz(w_stats, 4, second_column, c_ltgray, _("Most damaged: ")); + column = second_column + utf8_width(_("Most damaged: ")) + 1; + std::string partID = veh->parts[mostDamagedPart].id; + vehicle_part part = veh->parts[mostDamagedPart]; + int damagepercent = part.hp / vehicle_part_types[part.id].durability; + nc_color damagecolor = getDurabilityColor(damagepercent * 100); + partName = vehicle_part_types[partID].name; + fold_and_print(w_stats, 4, column, third_column, damagecolor, "%s", partName.c_str()); + } + wrefresh (w_stats); } @@ -921,26 +942,32 @@ void veh_interact::display_mode (char mode) { werase (w_mode); int x = 1; - if (mode == ' ') - { + if (mode == ' ') { bool mi = !cant_do('i'); bool mr = !cant_do('r'); bool mf = !cant_do('f'); bool mo = !cant_do('o'); bool ms = !cant_do('s'); bool mc = !cant_do('c'); - x += shortcut_print(w_mode, 0, x, mi? c_ltgray : c_dkgray, mi? c_ltgreen : c_green, _("nstall"))+1; - x += shortcut_print(w_mode, 0, x, mr? c_ltgray : c_dkgray, mr? c_ltgreen : c_green, _("epair"))+1; - x += shortcut_print(w_mode, 0, x, mf? c_ltgray : c_dkgray, mf? c_ltgreen : c_green, _("reill"))+1; - x += shortcut_print(w_mode, 0, x, mo? c_ltgray : c_dkgray, mo? c_ltgreen : c_green, _("remve"))+1; - x += shortcut_print(w_mode, 0, x, ms? c_ltgray : c_dkgray, ms? c_ltgreen : c_green, _("iphon"))+1; - x += shortcut_print(w_mode, 0, x, ms? c_ltgray : c_dkgray, ms? c_ltgreen : c_green, _("rain water"))+1; - x += shortcut_print(w_mode, 0, x, mc? c_ltgray : c_dkgray, mc? c_ltgreen : c_green, _("hange tire"))+1; + x += shortcut_print(w_mode, 0, x, mi ? c_ltgray : c_dkgray, mi ? c_ltgreen : c_green, + _("nstall")) + 1; + x += shortcut_print(w_mode, 0, x, mr ? c_ltgray : c_dkgray, mr ? c_ltgreen : c_green, + _("epair")) + 1; + x += shortcut_print(w_mode, 0, x, mf ? c_ltgray : c_dkgray, mf ? c_ltgreen : c_green, + _("reill")) + 1; + x += shortcut_print(w_mode, 0, x, mo ? c_ltgray : c_dkgray, mo ? c_ltgreen : c_green, + _("remve")) + 1; + x += shortcut_print(w_mode, 0, x, ms ? c_ltgray : c_dkgray, ms ? c_ltgreen : c_green, + _("iphon")) + 1; + x += shortcut_print(w_mode, 0, x, ms ? c_ltgray : c_dkgray, ms ? c_ltgreen : c_green, + _("rain water")) + 1; + x += shortcut_print(w_mode, 0, x, mc ? c_ltgray : c_dkgray, mc ? c_ltgreen : c_green, + _("hange tire")) + 1; } - x += shortcut_print(w_mode, 0, x, c_ltgray, c_ltgreen, _("rname"))+1; + x += shortcut_print(w_mode, 0, x, c_ltgray, c_ltgreen, _("rname")) + 1; std::string backstr = _("-back"); - int w = utf8_width(backstr.c_str())-2; - x = 78-w; // right text align + int w = utf8_width(backstr.c_str()) - 2; + x = 78 - w; // right text align shortcut_print(w_mode, 0, x, c_ltgray, c_ltgreen, backstr.c_str()); wrefresh (w_mode); } @@ -955,35 +982,115 @@ void veh_interact::display_list (int pos, std::vector list) { werase (w_list); int page = pos / page_size; - for (int i = page * page_size; i < (page + 1) * page_size && i < list.size(); i++) - { + for (int i = page * page_size; i < (page + 1) * page_size && i < list.size(); i++) { int y = i - page * page_size; itype_id itm = list[i].item; bool has_comps = crafting_inv.has_amount(itm, 1); bool has_skill = g->u.skillLevel("mechanics") >= list[i].difficulty; bool is_wheel = list[i].has_flag("WHEEL"); nc_color col = has_comps && (has_skill || is_wheel) ? c_white : c_dkgray; - mvwprintz(w_list, y, 3, pos == i? hilite (col) : col, list[i].name.c_str()); + mvwprintz(w_list, y, 3, pos == i ? hilite (col) : col, list[i].name.c_str()); mvwputch (w_list, y, 1, list[i].color, special_symbol(list[i].sym)); } wrefresh (w_list); } +void veh_interact::countDurability() +{ + int sum = 0; // sum of part HP + int max = 0; // sum of part max HP, ie durability + double mostDamaged = 1; // durability ratio of the most damaged part + + for (int it = 0; it < veh->parts.size(); it++) { + vehicle_part part = veh->parts[it]; + int part_dur = vehicle_part_types[part.id].durability; + + sum += part.hp; + max += part_dur; + + if(part.hp < part_dur) { + double damageRatio = (double) part.hp / part_dur; + if (!ISNAN(damageRatio) && (damageRatio < mostDamaged)) { + mostDamaged = damageRatio; + mostDamagedPart = it; + } + } + } + + double totalDamagePercent = sum / (double)max; + durabilityPercent = totalDamagePercent * 100; + + totalDurabilityColor = getDurabilityColor(durabilityPercent); + totalDurabilityText = getDurabilityDescription(durabilityPercent); +} + +nc_color veh_interact::getDurabilityColor(const int &dur) +{ + if (dur >= 95) { + return c_green; + } + if (dur >= 66) { + return c_ltgreen; + } + if (dur >= 33) { + return c_yellow; + } + if (dur >= 10) { + return c_ltred; + } + if (dur > 0) { + return c_red; + } + if (dur == 0) { + return c_dkgray; + } + + return c_black_yellow; +} + +std::string veh_interact::getDurabilityDescription(const int &dur) +{ + if (dur >= 95) { + return std::string(_("like new")); + } + if (dur >= 66) { + return std::string(_("dented")); + } + if (dur >= 33) { + return std::string(_("battered")); + } + if (dur >= 10) { + return std::string(_("wrecked")); + } + if (dur > 0) { + return std::string(_("totaled")); + } + if (dur == 0) { + return std::string(_("destroyed")); + } + + return std::string(_("error")); +} + + /** Used by consume_vpart_item to track items that could be consumed. */ struct candidate_vpart { bool in_inventory; int mapx; int mapy; - union - { + union { signed char invlet; int index; }; item vpart_item; candidate_vpart(int x, int y, int i, item vpitem): - in_inventory(false),mapx(x),mapy(y),index(i) { vpart_item = vpitem; } + in_inventory(false), mapx(x), mapy(y), index(i) { + vpart_item = vpitem; + } candidate_vpart(char ch, item vpitem): - in_inventory(true),mapx(-1),mapy(-1),invlet(ch) { vpart_item = vpitem; } + in_inventory(true), mapx(-1), mapy(-1), invlet(ch) { + vpart_item = vpitem; + } }; /** @@ -998,37 +1105,30 @@ item consume_vpart_item (game *g, std::string vpid) { std::vector candidates; const itype_id itid = vehicle_part_types[vpid].item; - for (int x = g->u.posx - PICKUP_RANGE; x <= g->u.posx + PICKUP_RANGE; x++) - { - for (int y = g->u.posy - PICKUP_RANGE; y <= g->u.posy + PICKUP_RANGE; y++) - { - for(int i=0; i < g->m.i_at(x,y).size(); i++) - { - item* ith_item = &(g->m.i_at(x,y)[i]); - if (ith_item->type->id == itid) - { - candidates.push_back (candidate_vpart(x,y,i,*ith_item)); + for (int x = g->u.posx - PICKUP_RANGE; x <= g->u.posx + PICKUP_RANGE; x++) { + for (int y = g->u.posy - PICKUP_RANGE; y <= g->u.posy + PICKUP_RANGE; y++) { + for(int i = 0; i < g->m.i_at(x, y).size(); i++) { + item *ith_item = &(g->m.i_at(x, y)[i]); + if (ith_item->type->id == itid) { + candidates.push_back (candidate_vpart(x, y, i, *ith_item)); } } } } - std::vector cand_from_inv = g->u.inv.all_items_by_type(itid); - for (int i=0; i < cand_from_inv.size(); i++) - { - item* ith_item = cand_from_inv[i]; - if (ith_item->type->id == itid) - { - candidates.push_back (candidate_vpart(ith_item->invlet,*ith_item)); + std::vector cand_from_inv = g->u.inv.all_items_by_type(itid); + for (int i = 0; i < cand_from_inv.size(); i++) { + item *ith_item = cand_from_inv[i]; + if (ith_item->type->id == itid) { + candidates.push_back (candidate_vpart(ith_item->invlet, *ith_item)); } } if (g->u.weapon.type->id == itid) { - candidates.push_back (candidate_vpart(-1,g->u.weapon)); + candidates.push_back (candidate_vpart(-1, g->u.weapon)); } // bug? - if(candidates.size() == 0) - { + if(candidates.size() == 0) { debugmsg("part not found"); return item(); } @@ -1040,21 +1140,15 @@ item consume_vpart_item (game *g, std::string vpid) } else { // popup menu!? std::vector options; - for(int i=0;iu.remove_weapon(); - } - else //non-weapon inventory - { + } else { //non-weapon inventory g->u.inv.remove_item_by_letter(candidates[selection].invlet); } - } - else - { //map. + } else { + //map. int x = candidates[selection].mapx; int y = candidates[selection].mapy; int i = candidates[selection].index; - g->m.i_rem(x,y,i); + g->m.i_rem(x, y, i); } return candidates[selection].vpart_item; } @@ -1089,14 +1178,12 @@ item consume_vpart_item (game *g, std::string vpid) */ void complete_vehicle (game *g) { - if (g->u.activity.values.size() < 8) - { + if (g->u.activity.values.size() < 8) { debugmsg ("Invalid activity ACT_VEHICLE values:%d", g->u.activity.values.size()); return; } vehicle *veh = g->m.veh_at (g->u.activity.values[0], g->u.activity.values[1]); - if (!veh) - { + if (!veh) { debugmsg ("Activity ACT_VEHICLE: vehicle not found"); return; } @@ -1107,27 +1194,26 @@ void complete_vehicle (game *g) int type = g->u.activity.values[7]; std::string part_id = g->u.activity.str_values[0]; std::vector tools; - int welder_charges = static_cast(g->itypes["welder"])->charges_per_use; - int welder_crude_charges = static_cast(g->itypes["welder_crude"])->charges_per_use; + int welder_charges = static_cast(itypes["welder"])->charges_per_use; + int welder_crude_charges = static_cast(itypes["welder_crude"])->charges_per_use; int partnum; item used_item; bool broken; int replaced_wheel; std::vector parts; int dd = 2; - switch (cmd) - { + switch (cmd) { case 'i': partnum = veh->install_part (dx, dy, part_id); - if(partnum < 0) - { + if(partnum < 0) { debugmsg ("complete_vehicle install part fails dx=%d dy=%d id=%d", dx, dy, part_id.c_str()); } used_item = consume_vpart_item (g, part_id); veh->get_part_properties_from_item(g, partnum, used_item); //transfer damage, etc. tools.push_back(component("welder", welder_charges)); tools.push_back(component("welder_crude", welder_crude_charges)); - tools.push_back(component("toolset", welder_charges/20)); + tools.push_back(component("duct_tape", DUCT_TAPE_USED)); + tools.push_back(component("toolset", welder_charges / 20)); g->consume_tools(&g->u, tools, true); if ( vehicle_part_types[part_id].has_flag("CONE_LIGHT") ) { @@ -1152,8 +1238,7 @@ void complete_vehicle (game *g) const double PI = 3.14159265358979f; int dir = int(atan2(static_cast(delta_y), static_cast(delta_x)) * 180.0 / PI); dir -= veh->face.dir(); - while(dir < 0) - { + while(dir < 0) { dir += 360; } while(dir > 360) { @@ -1168,8 +1253,8 @@ void complete_vehicle (game *g) g->u.practice (g->turn, "mechanics", vehicle_part_types[part_id].difficulty * 5 + 20); break; case 'r': - if (veh->parts[vehicle_part].hp <= 0) - { + if (veh->parts[vehicle_part].hp <= 0) { + veh->break_part_into_pieces(vehicle_part, g->u.posx, g->u.posy); used_item = consume_vpart_item (g, veh->parts[vehicle_part].id); veh->parts[vehicle_part].bigness = used_item.bigness; tools.push_back(component("wrench", -1)); @@ -1180,7 +1265,8 @@ void complete_vehicle (game *g) } tools.push_back(component("welder", welder_charges)); tools.push_back(component("welder_crude", welder_crude_charges)); - tools.push_back(component("toolset", welder_charges/20)); + tools.push_back(component("duct_tape", DUCT_TAPE_USED)); + tools.push_back(component("toolset", welder_charges / 20)); g->consume_tools(&g->u, tools, true); veh->parts[vehicle_part].hp = veh->part_info(vehicle_part).durability; g->add_msg (_("You repair the %s's %s."), @@ -1188,16 +1274,14 @@ void complete_vehicle (game *g) g->u.practice (g->turn, "mechanics", (veh->part_info(vehicle_part).difficulty + dd) * 5 + 20); break; case 'f': - if (!g->pl_refill_vehicle(*veh, vehicle_part, true)) - { + if (!g->pl_refill_vehicle(*veh, vehicle_part, true)) { debugmsg ("complete_vehicle refill broken"); } g->pl_refill_vehicle(*veh, vehicle_part); break; case 'o': // Dump contents of part at player's feet, if any. - for (int i = 0; i < veh->parts[vehicle_part].items.size(); i++) - { + for (int i = 0; i < veh->parts[vehicle_part].items.size(); i++) { g->m.add_item_or_charges (g->u.posx, g->u.posy, veh->parts[vehicle_part].items[i]); } veh->parts[vehicle_part].items.clear(); @@ -1205,20 +1289,28 @@ void complete_vehicle (game *g) broken = veh->parts[vehicle_part].hp <= 0; if (!broken) { used_item = veh->item_from_part( vehicle_part ); + // Transfer fuel back to tank + if (used_item.typeId() == "metal_tank") { + ammotype desired_liquid = veh->part_info(vehicle_part).fuel_type; + item liquid( itypes[default_ammo(desired_liquid)], g->turn ); + + liquid.charges = veh->parts[vehicle_part].amount; + veh->parts[vehicle_part].amount = 0; + + used_item.put_in(liquid); + } g->m.add_item_or_charges(g->u.posx, g->u.posy, used_item); - if(type!=SEL_JACK) // Changing tires won't make you a car mechanic - { + if(type != SEL_JACK) { // Changing tires won't make you a car mechanic g->u.practice (g->turn, "mechanics", 2 * 5 + 20); } + } else { + veh->break_part_into_pieces(vehicle_part, g->u.posx, g->u.posy); } - if (veh->parts.size() < 2) - { + if (veh->parts.size() < 2) { g->add_msg (_("You completely dismantle the %s."), veh->name.c_str()); g->u.activity.type = ACT_NULL; g->m.destroy_vehicle (veh); - } - else - { + } else { if (broken) { g->add_msg(_("You remove the broken %s from the %s."), veh->part_info(vehicle_part).name.c_str(), @@ -1265,3 +1357,4 @@ void complete_vehicle (game *g) break; } } + diff --git a/veh_interact.h b/src/veh_interact.h similarity index 87% rename from veh_interact.h rename to src/veh_interact.h index afcadab7e3ada..755fcf4cd4582 100644 --- a/veh_interact.h +++ b/src/veh_interact.h @@ -5,6 +5,8 @@ #include "output.h" #include "inventory.h" +#define DUCT_TAPE_USED 100 + enum sel_types { SEL_NULL, SEL_JACK }; @@ -58,6 +60,7 @@ class veh_interact vehicle *veh; bool has_wrench; bool has_welder; + bool has_duct_tape; bool has_hacksaw; bool has_jack; bool has_siphon; @@ -82,6 +85,19 @@ class veh_interact void display_mode (char mode); void display_list (int pos, std::vector list); + void countDurability(); + nc_color getDurabilityColor(const int& dur); + std::string getDurabilityDescription(const int& dur); + + int durabilityPercent; + std::string totalDurabilityText; + std::string worstDurabilityText; + nc_color totalDurabilityColor; + nc_color worstDurabilityColor; + + /** Store the most damaged part's index, or -1 if they're all healthy. */ + int mostDamagedPart; + /* Vector of all vpart TYPES that can be mounted in the current square. * Can be converted to a vector. * Updated whenever the cursor moves. */ diff --git a/veh_type.h b/src/veh_type.h similarity index 90% rename from veh_type.h rename to src/veh_type.h index 8765e7d95ff6d..02d6035b9ee1d 100644 --- a/veh_type.h +++ b/src/veh_type.h @@ -4,6 +4,15 @@ #include "color.h" #include "itype.h" +/** + * Represents an entry in the breaks_into list. + */ +struct break_entry { + std::string item_id; + int min; + int max; +}; + /* Flag info: * INTERNAL - Can be mounted inside other parts * ANCHOR_POINT - Allows secure seatbelt attachment @@ -33,6 +42,7 @@ struct vpart_info int difficulty; // installation difficulty (mechanics requirement) std::string location; //Where in the vehicle this part goes std::set flags; // flags + std::vector breaks_into; int z_order; // z-ordering, inferred from location, cached here diff --git a/veh_typedef.cpp b/src/veh_typedef.cpp similarity index 91% rename from veh_typedef.cpp rename to src/veh_typedef.cpp index 3cfeb528de907..8038460f49cba 100644 --- a/veh_typedef.cpp +++ b/src/veh_typedef.cpp @@ -87,6 +87,22 @@ void game::load_vehiclepart(JsonObject &jo) next_part.flags.insert(jarr.next_string()); } + JsonArray breaks_into = jo.get_array("breaks_into"); + while(breaks_into.has_more()) { + JsonObject next_entry = breaks_into.next_object(); + break_entry next_break_entry; + next_break_entry.item_id = next_entry.get_string("item"); + next_break_entry.min = next_entry.get_int("min"); + next_break_entry.max = next_entry.get_int("max"); + //Sanity check + if(next_break_entry.max < next_break_entry.min) { + debugmsg("For vehicle part %s: breaks_into item '%s' has min (%d) > max (%d)!", + next_part.name.c_str(), next_break_entry.item_id.c_str(), + next_break_entry.min, next_break_entry.max); + } + next_part.breaks_into.push_back(next_break_entry); + } + //Plating shouldn't actually be shown; another part will be. //Calculate and cache z-ordering based off of location if(next_part.has_flag("ARMOR")) { diff --git a/vehicle.cpp b/src/vehicle.cpp similarity index 91% rename from vehicle.cpp rename to src/vehicle.cpp index e97b2aa92bbd9..ae1289c857efe 100644 --- a/vehicle.cpp +++ b/src/vehicle.cpp @@ -18,6 +18,7 @@ enum vehicle_controls { toggle_lights, toggle_overhead_lights, toggle_turrets, + toggle_tracker, activate_horn, release_control, control_cancel, @@ -34,10 +35,12 @@ vehicle::vehicle(game *ag, std::string type_id, int init_veh_fuel, int init_veh_ of_turn_carry = 0; turret_mode = 0; lights_power = 0; + tracking_power = 0; cruise_velocity = 0; skidding = false; cruise_on = true; lights_on = false; + tracking_on = false; overhead_lights_on = false; insides_dirty = true; @@ -72,14 +75,11 @@ void vehicle::load (std::ifstream &stin) if ( type.size() > 1 && ( type[0] == '{' || type[1] == '{' ) ) { std::stringstream derp; derp << type; - picojson::value pdata; - derp >> pdata; - std::string jsonerr = picojson::get_last_error(); - - if ( ! jsonerr.empty() ) { + JsonIn jsin(&derp); + try { + deserialize(jsin); + } catch (std::string jsonerr) { debugmsg("Bad vehicle json\n%s", jsonerr.c_str() ); - } else { - json_load(pdata, g); } } else { load_legacy(stin); @@ -127,7 +127,7 @@ void vehicle::add_missing_frames() void vehicle::save (std::ofstream &stout) { - stout << json_save(true).serialize(); + serialize(stout); stout << std::endl; return; } @@ -148,6 +148,10 @@ void vehicle::init_state(game* g, int init_veh_fuel, int init_veh_status) if (init_veh_fuel > 100) veh_fuel_mult = 100; + // im assuming vehicles only spawn in active maps + levx = g->levx; + levy = g->levy; + // veh_status is initial vehicle damage // -1 = light damage (DEFAULT) // 0 = undamgaed @@ -184,7 +188,7 @@ void vehicle::init_state(game* g, int init_veh_fuel, int init_veh_status) if (part_flag(p, "VARIABLE_SIZE")){ // generate its bigness attribute.? if(consistent_bignesses.count(parts[p].id) < 1){ //generate an item for this type, & cache its bigness - item tmp (g->itypes[part_info(p).item], 0); + item tmp (itypes[part_info(p).item], 0); consistent_bignesses[parts[p].id] = tmp.bigness; } parts[p].bigness = consistent_bignesses[parts[p].id]; @@ -296,15 +300,18 @@ void vehicle::use_controls() // Always have this option int curent = 0; int letgoent = 0; + options_choice.push_back(toggle_cruise_control); options_message.push_back(uimenu_entry((cruise_on) ? _("Disable cruise control") : _("Enable cruise control"), 'c')); + curent++; bool has_lights = false; bool has_overhead_lights = false; bool has_horn = false; bool has_turrets = false; + bool has_tracker = false; for (int p = 0; p < parts.size(); p++) { if (part_flag(p, "CONE_LIGHT")) { has_lights = true; @@ -321,6 +328,9 @@ void vehicle::use_controls() else if (part_flag(p, "HORN")) { has_horn = true; } + else if (part_flag(p, "TRACK")) { + has_tracker = true; + } } // Lights if they are there - Note you can turn them on even when damaged, they just don't work @@ -353,6 +363,15 @@ void vehicle::use_controls() curent++; } + // Tracking on the overmap + if (has_tracker) { + options_choice.push_back(toggle_tracker); + options_message.push_back(uimenu_entry((tracking_on) ? _("Disable tracking device") : + _("Enable tracking device"), 'g')); + + curent++; + } + if( !g->u.controlling_vehicle && tags.count("convertible") ) { options_choice.push_back(convert_vehicle); options_message.push_back(uimenu_entry(_("Fold bicycle"), 'f')); @@ -423,7 +442,7 @@ void vehicle::use_controls() g->add_msg(_("You painstakingly pack the bicycle into a portable configuration.")); // create a folding bicycle item item bicycle; - bicycle.make( g->itypes["folding_bicycle"] ); + bicycle.make( itypes["folding_bicycle"] ); std::ostringstream part_hps; // Stash part HP in item @@ -447,6 +466,21 @@ void vehicle::use_controls() g->u.moves -= 500; break; } + case toggle_tracker: + if (tracking_on) + { + g->cur_om->remove_vehicle(om_id); + tracking_on = false; + g->add_msg(_("tracking device disabled")); + } else if (fuel_left("battery")) + { + om_id = g->cur_om->add_vehicle(this); + tracking_on = true; + g->add_msg(_("tracking device enabled")); + } else { + g->add_msg(_("tracking device won't turn on")); + } + break; case control_cancel: break; } @@ -541,6 +575,11 @@ bool vehicle::can_mount (int dx, int dy, std::string id) return false; } + //No other part can be placed on a protrusion + if(!parts_in_square.empty() && part_info(parts_in_square[0]).has_flag("PROTRUSION")) { + return false; + } + //No part type can stack with itself, or any other part in the same slot for( std::vector::const_iterator part_it = parts_in_square.begin(); part_it != parts_in_square.end(); ++part_it ) { @@ -584,6 +623,21 @@ bool vehicle::can_mount (int dx, int dy, std::string id) } } + // curtains must be installed on (reinforced)windshields + // TODO: do this automatically using "location":"on_mountpoint" + if (vehicle_part_types[id].has_flag("CURTAIN")) { + bool anchor_found = false; + for ( std::vector::const_iterator it = parts_in_square.begin(); + it != parts_in_square.end(); it++) { + if (part_info(*it).has_flag("WINDOW")) { + anchor_found = true; + } + } + if (!anchor_found) { + return false; + } + } + //Anything not explicitly denied is permitted return true; } @@ -603,6 +657,11 @@ bool vehicle::can_unmount (int p) if(part_flag(p, "BELTABLE") && part_with_feature(p, "SEATBELT") >= 0) { return false; } + + // Can't remove a window with curtains still on it + if(part_flag(p, "WINDOW") && part_with_feature(p, "CURTAIN") >=0) { + return false; + } //Structural parts have extra requirements if(part_info(p).location == "structure") { @@ -774,7 +833,7 @@ int vehicle::install_part (int dx, int dy, std::string id, int hp, bool force) new_part.hp = hp < 0 ? vehicle_part_types[id].durability : hp; new_part.amount = 0; new_part.blood = 0; - item tmp(g->itypes[vehicle_part_types[id].item], 0); + item tmp(itypes[vehicle_part_types[id].item], 0); new_part.bigness = tmp.bigness; parts.push_back (new_part); @@ -786,6 +845,10 @@ int vehicle::install_part (int dx, int dy, std::string id, int hp, bool force) lights.push_back(parts.size()-1); lights_power += part_info(parts.size()-1).power; } + if(part_flag(parts.size()-1, "TRACK")) + { + tracking_power += part_info(parts.size()-1).power; + } if(part_flag(parts.size()-1,"FUEL_TANK")) fuel.push_back(parts.size()-1); find_exhaust (); @@ -798,7 +861,7 @@ int vehicle::install_part (int dx, int dy, std::string id, int hp, bool force) void vehicle::get_part_properties_from_item(game* g, int partnum, item& i){ //transfer bigness if relevant. itype_id pitmid = part_info(partnum).item; - itype* itemtype = g->itypes[pitmid]; + itype* itemtype = itypes[pitmid]; if(itemtype->is_var_veh_part()) parts[partnum].bigness = i.bigness; @@ -812,7 +875,7 @@ void vehicle::get_part_properties_from_item(game* g, int partnum, item& i){ void vehicle::give_part_properties_to_item(game* g, int partnum, item& i){ //transfer bigness if relevant. itype_id pitmid = part_info(partnum).item; - itype* itemtype = g->itypes[pitmid]; + itype* itemtype = itypes[pitmid]; if(itemtype->is_var_veh_part()) i.bigness = parts[partnum].bigness; @@ -835,7 +898,37 @@ void vehicle::remove_part (int p) { if(part_flag(p,"LIGHT")) { lights_power -= part_info( parts.size() - 1 ).power; + } else if (part_flag(p, "TRACK")) { + tracking_power -= part_info( parts.size() - 1 ).power; + // disable tracking if there are no other trackers installed. + if (tracking_on) + { + bool has_tracker = false; + for (int i = 0; i != parts.size(); i++){ + if (i != p && part_flag(i, "TRACK")){ + has_tracker = true; + break; + } + } + if (!has_tracker){ // disable tracking + g->cur_om->remove_vehicle(om_id); + tracking_on = false; + } + } + } + + // if a windshield is removed (usually destroyed) also remove curtains + // attached to it. + if(part_flag(p, "WINDOW")) { + int curtain = part_with_feature(p, "CURTAIN", false); + if (curtain >= 0) { + int x = parts[curtain].precalc_dx[0], y = parts[curtain].precalc_dy[0]; + item it = item_from_part(curtain); + g->m.add_item_or_charges(global_x() + x, global_y() + y, it, 2); + remove_part(curtain); + } } + parts.erase(parts.begin() + p); find_horns (); find_lights (); @@ -845,11 +938,31 @@ void vehicle::remove_part (int p) insides_dirty = true; } +/** + * Breaks the specified part into the pieces defined by its breaks_into entry. + * @param p The index of the part to break. + * @param x The map x-coordinate to place pieces at (give or take). + * @param y The map y-coordinate to place pieces at (give or take). + * @param scatter If true, pieces are scattered near the target square. + */ +void vehicle::break_part_into_pieces(int p, int x, int y, bool scatter) { + std::vector break_info = part_info(p).breaks_into; + for(int index = 0; index < break_info.size(); index++) { + int quantity = rng(break_info[index].min, break_info[index].max); + for(int num = 0; num < quantity; num++) { + const int actual_x = scatter ? x + rng(-SCATTER_DISTANCE, SCATTER_DISTANCE) : x; + const int actual_y = scatter ? y + rng(-SCATTER_DISTANCE, SCATTER_DISTANCE) : y; + item piece(itypes[break_info[index].item_id], g->turn); + g->m.add_item_or_charges(actual_x, actual_y, piece); + } + } +} + item vehicle::item_from_part( int part ) { itype_id itm = part_info(part).item; int bigness = parts[part].bigness; - itype* parttype = g->itypes[itm]; + itype* parttype = itypes[itm]; item tmp(parttype, g->turn); //transfer damage, etc. @@ -1063,6 +1176,13 @@ nc_color vehicle::part_color (int p) } + // curtains turn windshields gray + int curtains = part_with_feature(p, "CURTAIN", false); + if (curtains >= 0) { + if (part_with_feature(p, "WINDOW", true) >= 0 && !parts[curtains].open) + col = part_info(curtains).color; + } + //Invert colors for cargo parts with stuff in them int cargo_part = part_with_feature(p, "CARGO"); if(cargo_part > 0 && !parts[cargo_part].items.empty()) { @@ -1081,10 +1201,10 @@ nc_color vehicle::part_color (int p) * @param p The index of the part being examined. * @param hl The index of the part to highlight (if any). */ -void vehicle::print_part_desc (WINDOW *win, int y1, int width, int p, int hl) +int vehicle::print_part_desc(WINDOW *win, int y1, int width, int p, int hl /*= -1*/) { if (p < 0 || p >= parts.size()) { - return; + return y1; } std::vector pl = this->parts_at_relative(parts[p].mount_dx, parts[p].mount_dy); int y = y1; @@ -1147,6 +1267,8 @@ void vehicle::print_part_desc (WINDOW *win, int y1, int width, int p, int hl) } y++; } + + return y; } void vehicle::print_fuel_indicator (void *w, int y, int x, bool fullsize, bool verbose) @@ -1257,12 +1379,32 @@ int vehicle::global_y () return smy * SEEY + posy; } +int vehicle::omap_x() { + return levx + (global_x() / SEEX); +} + +int vehicle::omap_y() { + return levy + (global_y() / SEEY); +} + +void vehicle::update_map_x(int x) { + levx = x; + if (tracking_on) + g->cur_om->vehicles[om_id].x = omap_x()/2; +} + +void vehicle::update_map_y(int y) { + levy = y; + if (tracking_on) + g->cur_om->vehicles[om_id].y = omap_y()/2; +} + int vehicle::total_mass() { int m = 0; for (int i = 0; i < parts.size(); i++) { - m += g->itypes[part_info(i).item]->weight; + m += itypes[part_info(i).item]->weight; for (int j = 0; j < parts[i].items.size(); j++) { m += parts[i].items[j].type->weight; } @@ -1280,7 +1422,7 @@ void vehicle::center_of_mass(int &x, int &y) for (int i = 0; i < parts.size(); i++) { int m_part = 0; - m_part += g->itypes[part_info(i).item]->weight; + m_part += itypes[part_info(i).item]->weight; for (int j = 0; j < parts[i].items.size(); j++) { m_part += parts[i].items[j].type->weight; } @@ -1622,7 +1764,7 @@ bool vehicle::valid_wheel_config () float wo = 0, w2; for (int p = 0; p < parts.size(); p++) { // lets find vehicle's center of masses - w2 = g->itypes[part_info(p).item]->weight; + w2 = itypes[part_info(p).item]->weight; if (w2 < 1) continue; xo = xo * wo / (wo + w2) + parts[p].mount_dx * w2 / (wo + w2); @@ -1676,6 +1818,7 @@ void vehicle::power_parts ()//TODO: more categories of powered part! { int power=0; if(lights_on)power += lights_power; + if(tracking_on)power += tracking_power; if(power <= 0)return; for(int f=0;f 0;f++) { @@ -1696,6 +1839,7 @@ void vehicle::power_parts ()//TODO: more categories of powered part! if(power) { lights_on = false; + tracking_on = false; overhead_lights_on = false; if(player_in_control(&g->u)) g->add_msg("The %s's battery dies!",name.c_str()); @@ -2005,8 +2149,8 @@ veh_collision vehicle::part_collision (int part, int x, int y, bool just_detect) int degree = rng (70, 100); //Calculate damage resulting from d_E - material_type* vpart_item_mat1 = material_type::find_material(g->itypes[part_info(parm).item]->m1); - material_type* vpart_item_mat2 = material_type::find_material(g->itypes[part_info(parm).item]->m2); + material_type* vpart_item_mat1 = material_type::find_material(itypes[part_info(parm).item]->m1); + material_type* vpart_item_mat2 = material_type::find_material(itypes[part_info(parm).item]->m2); int vpart_dens; if(vpart_item_mat2->ident() == "null") { vpart_dens = vpart_item_mat1->density(); @@ -2234,7 +2378,7 @@ void vehicle::handle_trap (int x, int y, int part) snd = _("SNAP!"); wreckit = true; g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "beartrap", 0); + g->m.spawn_item(x, y, "beartrap"); break; case tr_nailboard: wreckit = true; @@ -2250,10 +2394,10 @@ void vehicle::handle_trap (int x, int y, int part) snd = _("Clank!"); wreckit = true; g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "crossbow", 0); - g->m.spawn_item(x, y, "string_6", 0); + g->m.spawn_item(x, y, "crossbow"); + g->m.spawn_item(x, y, "string_6"); if (!one_in(10)) - g->m.spawn_item(x, y, "bolt_steel", 0); + g->m.spawn_item(x, y, "bolt_steel"); break; case tr_shotgun_2: case tr_shotgun_1: @@ -2266,8 +2410,8 @@ void vehicle::handle_trap (int x, int y, int part) else { g->m.remove_trap(x, y); - g->m.spawn_item(x, y, "shotgun_sawn", 0); - g->m.spawn_item(x, y, "string_6", 0); + g->m.spawn_item(x, y, "shotgun_sawn"); + g->m.spawn_item(x, y, "string_6"); } break; case tr_landmine_buried: @@ -2425,7 +2569,7 @@ void vehicle::place_spawn_items() } } item new_item = item_controller->create(*next_id, g->turn); - new_item = new_item.in_its_container(&(g->itypes)); + new_item = new_item.in_its_container(&(itypes)); if ( idmg > 0 ) { new_item.damage = (signed char)idmg; } @@ -2441,7 +2585,7 @@ void vehicle::place_spawn_items() } Item_tag group_tag = item_controller->id_from(*next_group_id); item new_item = item_controller->create(group_tag, g->turn); - new_item = new_item.in_its_container(&(g->itypes)); + new_item = new_item.in_its_container(&(itypes)); if ( idmg > 0 ) { new_item.damage = (signed char)idmg; } @@ -2622,8 +2766,8 @@ void vehicle::unboard_all () { std::vector bp = boarded_parts (); for (int i = 0; i < bp.size(); i++) { - g->m.unboard_vehicle (g, global_x() + parts[bp[i]].precalc_dx[0], global_y() + - parts[bp[i]].precalc_dy[0]); + g->m.unboard_vehicle (global_x() + parts[bp[i]].precalc_dx[0], + global_y() + parts[bp[i]].precalc_dy[0]); } } @@ -2679,11 +2823,59 @@ void vehicle::damage_all (int dmg1, int dmg2, int type, const point &impact) int vehicle::damage_direct (int p, int dmg, int type) { - if (parts[p].hp <= 0) + if (parts[p].hp <= 0) { + /* Already-destroyed part - chance it could be torn off into pieces. + * Chance increases with damage, and decreases with part max durability + * (so lights, etc are easily removed; frames and plating not so much) */ + if(rng(0, part_info(p).durability / 10) < dmg) { + int x_pos = global_x() + parts[p].precalc_dx[0]; + int y_pos = global_y() + parts[p].precalc_dy[0]; + if(part_info(p).location == "structure") { + //For structural parts, remove other parts first + std::vector parts_in_square = parts_at_relative(parts[p].mount_dx, parts[p].mount_dy); + for(int index = parts_in_square.size() - 1; index >= 0; index--) { + //Ignore the frame being destroyed + if(parts_in_square[index] != p) { + if(g->u_see(x_pos, y_pos)) { + g->add_msg(_("The %s's %s is torn off!"), name.c_str(), + part_info(parts_in_square[index]).name.c_str()); + } + item part_as_item = item_from_part(parts_in_square[index]); + g->m.add_item_or_charges(x_pos, y_pos, part_as_item, true); + remove_part(parts_in_square[index]); + } + /* After clearing the frame, remove it if normally legal to + * do so (it's not (0, 0) and not holding the vehicle + * together). At a later date, some more complicated system + * (such as actually making two vehicles from the split + * parts) would be ideal. */ + if(can_unmount(p)) { + if(g->u_see(x_pos, y_pos)) { + g->add_msg(_("The %s's %s is destroyed!"), + name.c_str(), part_info(p).name.c_str()); + } + break_part_into_pieces(p, x_pos, y_pos, true); + remove_part(p); + } + } + } else { + //Just break it off + if(g->u_see(x_pos, y_pos)) { + g->add_msg(_("The %s's %s is destroyed!"), + name.c_str(), part_info(p).name.c_str()); + } + break_part_into_pieces(p, x_pos, y_pos, true); + remove_part(p); + } + insides_dirty = true; + } return dmg; + } + int tsh = part_info(p).durability / 10; - if (tsh > 20) + if (tsh > 20) { tsh = 20; + } int dres = dmg; if (dmg >= tsh || type != 1) { @@ -2718,7 +2910,7 @@ int vehicle::damage_direct (int p, int dmg, int type) { g->m.spawn_item(global_x() + parts[p].precalc_dx[0], global_y() + parts[p].precalc_dy[0], - part_info(p).item, g->turn); + part_info(p).item, 1, 0, g->turn); remove_part (p); } } @@ -2745,8 +2937,8 @@ void vehicle::leak_fuel (int p) parts[p].amount = 0; return; } - g->m.spawn_item(i, j, "gasoline", 0); - g->m.spawn_item(i, j, "gasoline", 0); + g->m.spawn_item(i, j, "gasoline"); + g->m.spawn_item(i, j, "gasoline"); parts[p].amount -= 100; } } @@ -2757,7 +2949,7 @@ void vehicle::fire_turret (int p, bool burst) { if (!part_flag (p, "TURRET")) return; - it_gun *gun = dynamic_cast (g->itypes[part_info(p).item]); + it_gun *gun = dynamic_cast (itypes[part_info(p).item]); if (!gun) return; int charges = burst? gun->burst : 1; @@ -2771,7 +2963,7 @@ void vehicle::fire_turret (int p, bool burst) int fleft = fuel_left (amt); if (fleft < 1) return; - it_ammo *ammo = dynamic_cast(g->itypes[amt == "gasoline" ? "gasoline" : "plasma"]); + it_ammo *ammo = dynamic_cast(itypes[amt == "gasoline" ? "gasoline" : "plasma"]); if (!ammo) return; if (fire_turret_internal (p, *gun, *ammo, charges)) @@ -2868,7 +3060,7 @@ bool vehicle::fire_turret_internal (int p, it_gun &gun, it_ammo &ammo, int charg tmp.weapon.curammo = &curam; tmp.weapon.charges = charges; // Spawn a fake UPS to power any turreted weapons that need electricity. - item tmp_ups( g->itypes["UPS_on"], 0 ); + item tmp_ups( itypes["UPS_on"], 0 ); // Drain a ton of power tmp_ups.charges = drain( "battery", 1000 ); item &ups_ref = tmp.i_add(tmp_ups); diff --git a/vehicle.h b/src/vehicle.h similarity index 93% rename from vehicle.h rename to src/vehicle.h index fff0d69476c23..4c14415fab0c6 100644 --- a/vehicle.h +++ b/src/vehicle.h @@ -17,6 +17,9 @@ class game; //collision factor for vehicle-vehicle collision; delta_v in mph float get_collision_factor(float delta_v); +//How far to scatter parts from a vehicle when the part is destroyed (+/-) +#define SCATTER_DISTANCE 3 + #define num_fuel_types 5 extern const ammotype fuel_types[num_fuel_types]; #define k_mvel 200 //adjust this to balance collision damage @@ -66,7 +69,7 @@ struct vehicle_prototype /** * Structure, describing vehicle part (ie, wheel, seat) */ -struct vehicle_part +struct vehicle_part : public JsonSerializer, public JsonDeserializer { vehicle_part() : id("null"), mount_dx(0), mount_dy(0), hp(0), blood(0), bigness(0), inside(false), flags(0), passenger_id(0), amount(0) @@ -99,6 +102,11 @@ struct vehicle_part }; std::vector items;// inventory + // json saving/loading + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); }; /** @@ -171,7 +179,7 @@ struct vehicle_part * If you can't understand why installation fails, try to assemble your * vehicle in game first. */ -class vehicle +class vehicle : public JsonSerializer, public JsonDeserializer { private: game *g; @@ -181,6 +189,10 @@ class vehicle bool is_connected(vehicle_part &to, vehicle_part &from, vehicle_part &excluded); void add_missing_frames(); + // direct damage to part (armor protection and internals are not counted) + // returns damage bypassed + int damage_direct (int p, int dmg, int type = 1); + public: vehicle (game *ag=0, std::string type_id = "null", int veh_init_fuel = -1, int veh_init_status = -1); ~vehicle (); @@ -201,9 +213,11 @@ class vehicle // Save vehicle data to stream void save (std::ofstream &stout); - void json_load( picojson::value & parsed, game * g ); + using JsonSerializer::serialize; + void serialize(JsonOut &jsout) const; + using JsonDeserializer::deserialize; + void deserialize(JsonIn &jsin); - picojson::value json_save( bool save_contents = true ); // Operate vehicle void use_controls(); @@ -227,6 +241,8 @@ class vehicle void remove_part (int p); + void break_part_into_pieces (int p, int x, int y, bool scatter = false); + // Generate the corresponding item from a vehicle part. // Still needs to be removed. item item_from_part( int part ); @@ -273,7 +289,7 @@ class vehicle nc_color part_color (int p); // Vehicle parts description - void print_part_desc (WINDOW *win, int y1, int width, int p, int hl = -1); + int print_part_desc (WINDOW *win, int y1, int width, int p, int hl = -1); // Vehicle fuel indicator. Should probably rename to print_fuel_indicators and make a print_fuel_indicator(..., FUEL_TYPE); void print_fuel_indicator (void *w, int y, int x, bool fullsize = false, bool verbose = false); @@ -292,6 +308,14 @@ class vehicle int global_x (); int global_y (); +// get omap coordinate for vehicle + int omap_x (); + int omap_y (); + +// update map coordinates of the vehicle + void update_map_x(int x); + void update_map_y(int y); + // Checks how much certain fuel left in tanks. If for_engine == true that means // ftype == "battery" is also takes in account "plutonium" fuel (electric motors can use both) int fuel_left (ammotype ftype, bool for_engine = false); @@ -430,10 +454,6 @@ class vehicle // damage all parts (like shake from strong collision), range from dmg1 to dmg2 void damage_all (int dmg1, int dmg2, int type, const point &impact); - // direct damage to part (armor protection and internals are not counted) - // returns damage bypassed - int damage_direct (int p, int dmg, int type = 1); - void leak_fuel (int p); // fire the turret which is part p @@ -475,12 +495,15 @@ class vehicle // save values int posx, posy; + int levx,levy; // vehicle map coordinates. tileray face; // frame direction tileray move; // direction we are moving int velocity; // vehicle current velocity, mph * 100 int cruise_velocity; // velocity vehicle's cruise control trying to acheive bool cruise_on; // cruise control on/off bool lights_on; // lights on/off + bool tracking_on; // vehicle tracking on/off + int om_id; // id of the om_vehicle struct corresponding to this vehicle bool overhead_lights_on; //emergency vehicle flasher lights on/off int turn_dir; // direction, to wich vehicle is turning (player control). will rotate frame on next move bool skidding; // skidding mode @@ -490,6 +513,7 @@ class vehicle float of_turn_carry;// leftover from prev. turn int turret_mode; // turret firing mode: 0 = off, 1 = burst fire int lights_power; // total power of components with LIGHT flag + int tracking_power; // total power consumed by tracking devices (why would you use more than one?) }; #endif diff --git a/version.cpp b/src/version.cpp similarity index 79% rename from version.cpp rename to src/version.cpp index 3f8e589f3a04a..172db5fa3cf77 100644 --- a/version.cpp +++ b/src/version.cpp @@ -1,7 +1,7 @@ #if (defined _WIN32 || defined WINDOWS || defined MINGW) && ! defined CROSS_LINUX && !defined _MSC_VER #ifndef VERSION -#define VERSION "0.8" // FIXME: automatically generate VERSION based on git +#define VERSION "0.9" // FIXME: automatically generate VERSION based on git #endif #else diff --git a/wcwidth.c b/src/wcwidth.c similarity index 99% rename from wcwidth.c rename to src/wcwidth.c index c54913459fa10..8f6041602923f 100644 --- a/wcwidth.c +++ b/src/wcwidth.c @@ -59,6 +59,7 @@ * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ +#include #include #include diff --git a/wdirent.h b/src/wdirent.h similarity index 100% rename from wdirent.h rename to src/wdirent.h diff --git a/weather.cpp b/src/weather.cpp similarity index 99% rename from weather.cpp rename to src/weather.cpp index 5ec6a5f663915..f95044538d281 100644 --- a/weather.cpp +++ b/src/weather.cpp @@ -11,8 +11,8 @@ void weather_effect::glare(game *g) { - if (PLAYER_OUTSIDE && g->is_in_sunlight(g->u.posx, g->u.posy) && !g->u.is_wearing("sunglasses") && - !g->u.has_bionic("bio_sunglasses")) { + if (PLAYER_OUTSIDE && g->is_in_sunlight(g->u.posx, g->u.posy) && !g->u.is_wearing("sunglasses") + && !g->u.is_wearing("fancy_sunglasses") && !g->u.has_bionic("bio_sunglasses")) { if(!g->u.has_disease("glare")) { g->u.infect("glare", bp_eyes, 2, 2); } else { diff --git a/weather.h b/src/weather.h similarity index 100% rename from weather.h rename to src/weather.h diff --git a/weather_data.cpp b/src/weather_data.cpp similarity index 100% rename from weather_data.cpp rename to src/weather_data.cpp diff --git a/wincurse.cpp b/src/wincurse.cpp similarity index 99% rename from wincurse.cpp rename to src/wincurse.cpp index 9f377619c7761..f186f7d99f61c 100644 --- a/wincurse.cpp +++ b/src/wincurse.cpp @@ -638,12 +638,4 @@ void curses_timeout(int t) inputdelay = t; } -input_event getch_kyb_mouse(WINDOW* capture_win) -{ - // Should not be called yet, as ncurses mouse support not implemented - throw "Unimplemented ncurses mouse call made"; - input_event dummy; - return dummy; -} - #endif diff --git a/wish.cpp b/src/wish.cpp similarity index 100% rename from wish.cpp rename to src/wish.cpp diff --git a/worldfactory.cpp b/src/worldfactory.cpp similarity index 96% rename from worldfactory.cpp rename to src/worldfactory.cpp index 72c4ec44ce4b1..fe053c8092d6d 100644 --- a/worldfactory.cpp +++ b/src/worldfactory.cpp @@ -197,7 +197,7 @@ WORLDPTR worldfactory::convert_to_world(std::string origin_path) if (save_world(newworld, true)){ // move files from origin_path into new world path std::vector origin_files = file_finder::get_files_from_path(".", origin_path, false); - for (int i = 0; i < origin_files.size(); ++i){ + for (unsigned i = 0; i < origin_files.size(); ++i){ std::string filename = origin_files[i].substr(origin_files[i].find_last_of("/\\")); rename(origin_files[i].c_str(), std::string(newworld->world_path + filename).c_str()); @@ -299,7 +299,7 @@ std::map worldfactory::get_all_worlds() if (world_dirs.size() > 0) { // worlds exist by having an option file // create worlds - for (int i = 0; i < world_dirs.size(); ++i) { + for (unsigned i = 0; i < world_dirs.size(); ++i) { // get the option file again // we can assume that there is only one master.gsav, so just collect the first path bool no_options = true; @@ -311,7 +311,7 @@ std::map worldfactory::get_all_worlds() // get the save files std::vector world_sav_files = file_finder::get_files_from_path(SAVE_EXTENSION, world_dirs[i], false); // split the save file names between the directory and the extension - for (int j = 0; j < world_sav_files.size(); ++j) { + for (unsigned j = 0; j < world_sav_files.size(); ++j) { size_t save_index = world_sav_files[j].find(SAVE_EXTENSION); world_sav_files[j] = world_sav_files[j].substr(world_dirs[i].size() + 1, save_index - (world_dirs[i].size() + 1)); } @@ -326,7 +326,7 @@ std::map worldfactory::get_all_worlds() retworlds[worldname]->world_name = worldname; all_worldnames.push_back(worldname); // add sav files - for (int j = 0; j < world_sav_files.size(); ++j) { + for (unsigned j = 0; j < world_sav_files.size(); ++j) { retworlds[worldname]->world_saves.push_back(world_sav_files[j]); } // set world path @@ -418,21 +418,21 @@ WORLDPTR worldfactory::pick_world() WINDOW *w_worlds = newwin(iContentHeight, FULL_SCREEN_WIDTH - 2, iTooltipHeight + 2 + iOffsetY, 1 + iOffsetX); wborder(w_worlds_border, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX); - mvwputch(w_worlds_border, 4, 0, c_ltgray, LINE_XXXO); // |- - mvwputch(w_worlds_border, 4, 79, c_ltgray, LINE_XOXX); // -| + mvwputch(w_worlds_border, 4, 0, c_dkgray, LINE_XXXO); // |- + mvwputch(w_worlds_border, 4, 79, c_dkgray, LINE_XOXX); // -| for (std::map::iterator iter = mapLines.begin(); iter != mapLines.end(); ++iter) { - mvwputch(w_worlds_border, FULL_SCREEN_HEIGHT - 1, iter->first + 1, c_ltgray, LINE_XXOX); // _|_ + mvwputch(w_worlds_border, FULL_SCREEN_HEIGHT - 1, iter->first + 1, c_dkgray, LINE_XXOX); // _|_ } - mvwprintz(w_worlds_border, 0, 36, c_ltred, _(" WORLD SELECTION ")); + mvwprintz(w_worlds_border, 0, 31, c_ltred, _(" WORLD SELECTION ")); wrefresh(w_worlds_border); for (int i = 0; i < 78; i++) { if (mapLines[i]) { - mvwputch(w_worlds_header, 0, i, c_ltgray, LINE_OXXX); + mvwputch(w_worlds_header, 0, i, c_dkgray, LINE_OXXX); } else { - mvwputch(w_worlds_header, 0, i, c_ltgray, LINE_OXOX); // Draw header line + mvwputch(w_worlds_header, 0, i, c_dkgray, LINE_OXOX); // Draw header line } } @@ -447,7 +447,7 @@ WORLDPTR worldfactory::pick_world() for (int i = 0; i < iContentHeight; i++) { for (int j = 0; j < 79; j++) { if (mapLines[j]) { - mvwputch(w_worlds, i, j, c_ltgray, LINE_XOXO); + mvwputch(w_worlds, i, j, c_dkgray, LINE_XOXO); } else { mvwputch(w_worlds, i, j, c_black, ' '); } @@ -459,7 +459,7 @@ WORLDPTR worldfactory::pick_world() } //Draw World Names - for (int i = 0; i < world_pages[selpage].size(); ++i) { + for (unsigned i = 0; i < world_pages[selpage].size(); ++i) { sTemp.str(""); sTemp << i + 1; mvwprintz(w_worlds, i, 0, c_white, sTemp.str().c_str()); @@ -484,7 +484,7 @@ WORLDPTR worldfactory::pick_world() wprintz(w_worlds_header, c_white, "["); wprintz(w_worlds_header, tabcolor, _("Page %d"), i + 1); wprintz(w_worlds_header, c_white, "]"); - wputch(w_worlds_header, c_white, LINE_OXOX); + wputch(w_worlds_header, c_dkgray, LINE_OXOX); } } @@ -742,7 +742,7 @@ int worldfactory::show_worldgen_tab_confirm(WINDOW *win, WORLDPTR world) mvwprintz(w_confirmation, 2, namebar_pos, h_ltgray, _("______NO NAME ENTERED!!!!_____")); noname = true; wrefresh(w_confirmation); - if (!query_yn(_("Are you SURE you're finished? Your world's name will be randomly generated."))) { + if (!query_yn(_("Are you SURE you're finished? World name will be randomly generated."))) { continue; continue; } else { @@ -783,7 +783,7 @@ int worldfactory::show_worldgen_tab_confirm(WINDOW *win, WORLDPTR world) worldname.erase(worldname.size() - 1); } worldname.erase(worldname.size() - 1); - mvwprintz(w_confirmation, 2, namebar_pos, c_ltgray, "_______________________________"); + mvwprintz(w_confirmation, 2, namebar_pos, c_ltgray, "______________________________ "); mvwprintz(w_confirmation, 2, namebar_pos, c_ltgray, "%s", worldname.c_str()); wprintz(w_confirmation, h_ltgray, "_"); } diff --git a/worldfactory.h b/src/worldfactory.h similarity index 100% rename from worldfactory.h rename to src/worldfactory.h diff --git a/trap.h b/trap.h deleted file mode 100644 index 81101f1597ca0..0000000000000 --- a/trap.h +++ /dev/null @@ -1,176 +0,0 @@ -#ifndef _TRAP_H_ -#define _TRAP_H_ - -#include "color.h" -#include "monster.h" -#include "itype.h" -#include - -/* - On altering any entries in this enum please add or remove the appropriate entry to the trap_names array in tile_id_data.h -*/ -enum trap_id { - tr_null, - tr_bubblewrap, - tr_cot, - tr_brazier, - tr_funnel, - tr_makeshift_funnel, - tr_rollmat, - tr_fur_rollmat, - tr_beartrap, - tr_beartrap_buried, - tr_snare, - tr_nailboard, - tr_caltrops, - tr_tripwire, - tr_crossbow, - tr_shotgun_2, - tr_shotgun_1, - tr_engine, - tr_blade, - tr_light_snare, - tr_heavy_snare, - tr_landmine, - tr_landmine_buried, - tr_telepad, - tr_goo, - tr_dissector, - tr_sinkhole, - tr_pit, - tr_spike_pit, - tr_lava, - tr_portal, - tr_ledge, - tr_boobytrap, - tr_temple_flood, - tr_temple_toggle, - tr_glow, - tr_hum, - tr_shadow, - tr_drain, - tr_snake, - num_trap_types -}; - -struct trap; - -struct trapfunc { - void none (game *g, int x, int y) { }; - void bubble (game *g, int x, int y); - void beartrap (game *g, int x, int y); - void snare_light (game *g, int x, int y); - void snare_heavy (game *g, int x, int y); - void snare (game *g, int x, int y) { }; - void board (game *g, int x, int y); - void caltrops (game *g, int x, int y); - void tripwire (game *g, int x, int y); - void crossbow (game *g, int x, int y); - void shotgun (game *g, int x, int y); - void blade (game *g, int x, int y); - void landmine (game *g, int x, int y); - void telepad (game *g, int x, int y); - void goo (game *g, int x, int y); - void dissector (game *g, int x, int y); - void sinkhole (game *g, int x, int y); - void pit (game *g, int x, int y); - void pit_spikes (game *g, int x, int y); - void lava (game *g, int x, int y); - void portal (game *g, int x, int y) { }; - void ledge (game *g, int x, int y); - void boobytrap (game *g, int x, int y); - void temple_flood (game *g, int x, int y); - void temple_toggle (game *g, int x, int y); - void glow (game *g, int x, int y); - void hum (game *g, int x, int y); - void shadow (game *g, int x, int y); - void drain (game *g, int x, int y); - void snake (game *g, int x, int y); -}; - -struct trapfuncm { - void none (game *g, monster *z, int x, int y) { }; - void bubble (game *g, monster *z, int x, int y); - void cot (game *g, monster *z, int x, int y); - void beartrap (game *g, monster *z, int x, int y); - void board (game *g, monster *z, int x, int y); - void caltrops (game *g, monster *z, int x, int y); - void tripwire (game *g, monster *z, int x, int y); - void crossbow (game *g, monster *z, int x, int y); - void shotgun (game *g, monster *z, int x, int y); - void blade (game *g, monster *z, int x, int y); - void snare_light (game *g, monster *z, int x, int y); - void snare_heavy (game *g, monster *z, int x, int y); - void snare (game *g, monster *z, int x, int y) { }; - void landmine (game *g, monster *z, int x, int y); - void telepad (game *g, monster *z, int x, int y); - void goo (game *g, monster *z, int x, int y); - void dissector (game *g, monster *z, int x, int y); - void sinkhole (game *g, monster *z, int x, int y) { }; - void pit (game *g, monster *z, int x, int y); - void pit_spikes (game *g, monster *z, int x, int y); - void lava (game *g, monster *z, int x, int y); - void portal (game *g, monster *z, int x, int y) { }; - void ledge (game *g, monster *z, int x, int y); - void boobytrap (game *g, monster *z, int x, int y); - void glow (game *g, monster *z, int x, int y); - void hum (game *g, monster *z, int x, int y); - void drain (game *g, monster *z, int x, int y); - void snake (game *g, monster *z, int x, int y); -}; - -struct trap { - int id; - long sym; - nc_color color; - std::string name; - - int visibility; // 1 to ??, affects detection - int avoidance; // 0 to ??, affects avoidance - int difficulty; // 0 to ??, difficulty of assembly & disassembly - std::vector components; // For disassembly? - -// You stepped on it - void (trapfunc::*act)(game *, int x, int y); -// Monster stepped on it - void (trapfuncm::*actm)(game *, monster *, int x, int y); -// Type of trap - bool is_benign(); - bool benign; - - // non-generic numbers for special cases - int funnel_radius_mm; - double funnel_turns_per_charge( double rain_depth_mm_per_hour ) const; - /* pending jsonize - std::set flags - std::string id; - */ - - trap(int pid, std::string string_id, std::string pname, nc_color pcolor, char psym, - int pvisibility, int pavoidance, int pdifficulty, - void (trapfunc::*pact)(game *, int x, int y), - void (trapfuncm::*pactm)(game *, monster *, int x, int y), - std::vector keys) { - //string_id is ignored at the moment, will later replace the id - id = pid; - sym = psym; - color = pcolor; - name = pname; - visibility = pvisibility; - avoidance = pavoidance; - difficulty = pdifficulty; - act = pact; - actm = pactm; - - components.insert(components.end(), keys.begin(), keys.end()); - - // It's a traaaap! So default; - benign = false; - // Traps are not typically funnels - funnel_radius_mm = 0; - }; -}; - -trap_id trap_id_from_string(std::string trap_name); - -#endif diff --git a/uistate.h b/uistate.h deleted file mode 100644 index 4161324fc30ca..0000000000000 --- a/uistate.h +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef _UISTATE_H_ -#define _UISTATE_H_ -#include "picofunc.h" -/* - centralized depot for trivial ui data such as sorting, string_input_popup history, etc. - To use this, see the ****notes**** below -*/ -struct uistatedata { -/**** declare your variable here. It can be anything, really *****/ - int wishitem_selected; - int wishmutate_selected; - int wishmonster_selected; - int iuse_knife_selected; - int adv_inv_leftsort; - int adv_inv_rightsort; - int adv_inv_leftarea; - int adv_inv_rightarea; - int adv_inv_leftindex; - int adv_inv_rightindex; - int adv_inv_leftpage; - int adv_inv_rightpage; - int adv_inv_last_popup_dest; - std::string adv_inv_leftfilter; - std::string adv_inv_rightfilter; - - bool editmap_nsa_viewmode; // true: ignore LOS and lighting - bool debug_ranged; - point adv_inv_last_coords; - int last_inv_start, last_inv_sel; - int list_item_mon; - /* to save input history and make accessible via 'up', you don't need to edit this file, just run: - output = string_input_popup(str, int, str, str, std::string("set_a_unique_identifier_here") ); - */ - - std::map*> input_history; - - std::map lastreload; // last typeid used when reloading ammotype - - bool _testing_save; - bool _really_testing_save; - std::string errdump; - - uistatedata() { -/**** this will set a default value on startup, however to save, see below ****/ - wishitem_selected = 0; - wishmutate_selected = 0; - wishmonster_selected = 0; - iuse_knife_selected = 0; - adv_inv_leftsort = 1; - adv_inv_rightsort = 1; - adv_inv_leftarea = 5; - adv_inv_rightarea = 0; - adv_inv_leftindex = 0; - adv_inv_rightindex=0; - adv_inv_leftpage=0; - adv_inv_rightpage=0; - adv_inv_last_popup_dest=0; - adv_inv_last_coords.x=-999; - adv_inv_last_coords.y=-999; - adv_inv_leftfilter=""; - adv_inv_rightfilter=""; - editmap_nsa_viewmode = false; - last_inv_start = -2; - last_inv_sel = -2; - list_item_mon = 1; - // internal stuff - _testing_save = true; // internal: whine on json errors. set false if no complaints in 2 weeks. - _really_testing_save = false; // internal: spammy - errdump = ""; // also internal: log errors en masse - }; - - std::vector * gethistory(std::string id) { - std::map*>::iterator it=input_history.find(id); - if(it == input_history.end() || it->second == NULL ) { - input_history[id]=new std::vector; - it=input_history.find(id); - } - return it->second; - } - - virtual picojson::value save_data() { - const int input_history_save_max = 25; - std::map data; - -/**** if you want to save whatever so it's whatever when the game is started next, declare here and.... ****/ - data[std::string("adv_inv_leftsort")] = picojson::value(adv_inv_leftsort); - data[std::string("adv_inv_rightsort")] = picojson::value(adv_inv_rightsort); - data[std::string("adv_inv_leftarea")] = picojson::value(adv_inv_leftarea); - data[std::string("adv_inv_rightarea")] = picojson::value(adv_inv_rightarea); - data[std::string("adv_inv_last_popup_dest")] = picojson::value(adv_inv_last_popup_dest); - data[std::string("editmap_nsa_viewmode")] = picojson::value(editmap_nsa_viewmode); - data[std::string("list_item_mon")] = picojson::value(list_item_mon); - - std::map histmap; - for(std::map*>::iterator it = input_history.begin(); it != input_history.end(); ++it ) { - if(it->second != NULL ) { - std::vector hist; - int save_start=0; - if ( it->second->size() > input_history_save_max ) { - save_start = it->second->size() - input_history_save_max; - } - for(std::vector::iterator hit = it->second->begin()+save_start; hit != it->second->end(); ++hit ) { - hist.push_back(picojson::value( *hit )); - } - histmap[std::string(it->first)] = picojson::value(hist); - } - } - data[std::string("input_history")] = picojson::value(histmap); - return picojson::value(data); - }; - - bool load(picojson::value parsed) { - if(parsed.is() ) { - const picojson::object& data = parsed.get(); - -/**** here ****/ - picoint(data,"adv_inv_leftsort", adv_inv_leftsort); - picoint(data,"adv_inv_rightsort", adv_inv_rightsort); - picoint(data,"adv_inv_leftarea", adv_inv_leftarea); - picoint(data,"adv_inv_rightarea", adv_inv_rightarea); - picoint(data,"adv_inv_last_popup_dest", adv_inv_last_popup_dest); - picobool(data,"editmap_nsa_viewmode", editmap_nsa_viewmode); - picoint(data,"list_item_mon", list_item_mon); - - picojson::object::const_iterator hmit = data.find("input_history"); - if ( ! picoverify() ) return false; - if ( hmit != data.end() ) { - if ( hmit->second.is() ) { - const picojson::object& hmdata = hmit->second.get(); - for (picojson::object::const_iterator hit = hmdata.begin(); hit != hmdata.end(); ++hit) { - if ( hit->second.is() ) { - std::string hkey=hit->first; - std::vector * v = gethistory(hkey); - const picojson::array& ht = hit->second.get(); - if(!picoverify()) continue; - v->clear(); - for (picojson::array::const_iterator hent=ht.begin(); hent != ht.end(); ++hent) { - if( (*hent).is() ) { - std::string tmpstr=(*hent).get(); - if(!picoverify()) continue; - v->push_back(tmpstr); - } - } - } - } - return true; - } else { - errdump += "\ninput_history is not an object"; - - return false; - } - } - return true; - } - return false; - }; - - std::string save() { - return this->save_data().serialize(); - }; - -}; -extern uistatedata uistate; -#endif